From 622d308d3b67125d0e59fd2bd601f57b688bc80f Mon Sep 17 00:00:00 2001 From: ekeeke31 Date: Thu, 9 Aug 2007 20:13:54 +0000 Subject: [PATCH] --- genplus-gx/Makefile | 174 + genplus-gx/build/confjoy.d | 30 + genplus-gx/build/diskio.d | 2 + genplus-gx/build/dvd.d | 31 + genplus-gx/build/eeprom.d | 33 + genplus-gx/build/filesel.d | 37 + genplus-gx/build/fm.d | 31 + genplus-gx/build/font.d | 33 + genplus-gx/build/gcaram.d | 31 + genplus-gx/build/genesis.d | 31 + genplus-gx/build/genplus.elf.map | 15075 ++++++++++++++++ genplus-gx/build/ggentry.d | 33 + genplus-gx/build/input.d | 31 + genplus-gx/build/io.d | 31 + genplus-gx/build/iso9660.d | 34 + genplus-gx/build/legal.d | 33 + genplus-gx/build/loadrom.d | 33 + genplus-gx/build/m68kcpu.d | 5 + genplus-gx/build/m68kopac.d | 4 + genplus-gx/build/m68kopdm.d | 4 + genplus-gx/build/m68kopnz.d | 4 + genplus-gx/build/m68kops.d | 2 + genplus-gx/build/mcard.d | 35 + genplus-gx/build/mem68k.d | 31 + genplus-gx/build/membnk.d | 31 + genplus-gx/build/memvdp.d | 31 + genplus-gx/build/memz80.d | 31 + genplus-gx/build/menu.d | 34 + genplus-gx/build/ngc.d | 33 + genplus-gx/build/render.d | 31 + genplus-gx/build/rominfo.d | 33 + genplus-gx/build/sn76489.d | 31 + genplus-gx/build/sn76496.d | 30 + genplus-gx/build/sound.d | 30 + genplus-gx/build/sram.d | 31 + genplus-gx/build/ssf2tnc.d | 31 + genplus-gx/build/state.d | 31 + genplus-gx/build/system.d | 31 + genplus-gx/build/unzip.d | 35 + genplus-gx/build/vdp.d | 32 + genplus-gx/build/vfat.d | 3 + genplus-gx/build/ym2612.d | 30 + genplus-gx/build/z80.d | 33 + genplus-gx/changelog.txt | 143 + genplus-gx/clean.bat | 1 + genplus-gx/compile.bat | 1 + genplus-gx/compile.txt | 6 + genplus-gx/genplus.elf | Bin 0 -> 2476501 bytes genplus-gx/genplus.txt | 359 + genplus-gx/gu_psasm.S | 694 + genplus-gx/pcutil/Makefile | 3 + genplus-gx/pcutil/inject.c | 154 + genplus-gx/pcutil/inject.exe | Bin 0 -> 6656 bytes genplus-gx/pcutil/injectlnx | Bin 0 -> 4660 bytes genplus-gx/source/cpu/cpuintrf.h | 30 + genplus-gx/source/cpu/m68k.h | 342 + genplus-gx/source/cpu/m68kconf.h | 183 + genplus-gx/source/cpu/osd_cpu.h | 77 + genplus-gx/source/cpu/z80.c | 4511 +++++ genplus-gx/source/cpu/z80.h | 62 + genplus-gx/source/cpu/z80daa.h | 2051 +++ .../source/docs/Genesis_ROM_Format.txt | 373 + genplus-gx/source/docs/changelog | 22 + genplus-gx/source/docs/eeprom.txt | 232 + genplus-gx/source/docs/gamegenie.htm | 235 + genplus-gx/source/docs/gen-hw.txt | 715 + genplus-gx/source/docs/genvdp.txt | 1654 ++ genplus-gx/source/docs/io.htm | 933 + genplus-gx/source/docs/license | 340 + genplus-gx/source/docs/m5hvc.txt | 40 + genplus-gx/source/docs/porting.txt | 89 + genplus-gx/source/docs/readme.txt | 122 + genplus-gx/source/docs/ssf2tnc.txt | 189 + genplus-gx/source/docs/todo.txt | 79 + genplus-gx/source/eeprom.c | 445 + genplus-gx/source/eeprom.h | 64 + genplus-gx/source/genesis.c | 184 + genplus-gx/source/genesis.h | 32 + genplus-gx/source/hvc.h | 440 + genplus-gx/source/input.c | 508 + genplus-gx/source/input.h | 63 + genplus-gx/source/io.c | 215 + genplus-gx/source/io.h | 20 + genplus-gx/source/m68k/m68kcpu.c | 894 + genplus-gx/source/m68k/m68kcpu.h | 1837 ++ genplus-gx/source/m68k/m68kopac.c | 11948 ++++++++++++ genplus-gx/source/m68k/m68kopdm.c | 13286 ++++++++++++++ genplus-gx/source/m68k/m68kopnz.c | 8746 +++++++++ genplus-gx/source/m68k/m68kops.c | 2093 +++ genplus-gx/source/m68k/m68kops.h | 1984 ++ genplus-gx/source/macros.h | 34 + genplus-gx/source/mem68k.c | 776 + genplus-gx/source/mem68k.h | 14 + genplus-gx/source/membnk.c | 296 + genplus-gx/source/membnk.h | 15 + genplus-gx/source/memvdp.c | 48 + genplus-gx/source/memvdp.h | 8 + genplus-gx/source/memz80.c | 246 + genplus-gx/source/memz80.h | 17 + genplus-gx/source/ngc/gcaram.c | 86 + genplus-gx/source/ngc/gcaram.h | 25 + genplus-gx/source/ngc/gui/confjoy.c | 208 + genplus-gx/source/ngc/gui/dkpro.h | 877 + genplus-gx/source/ngc/gui/dvd.c | 148 + genplus-gx/source/ngc/gui/dvd.h | 24 + genplus-gx/source/ngc/gui/filesel.c | 526 + genplus-gx/source/ngc/gui/filesel.c.old | 540 + genplus-gx/source/ngc/gui/font.c | 388 + genplus-gx/source/ngc/gui/font.h | 42 + genplus-gx/source/ngc/gui/ggentry.c | 351 + genplus-gx/source/ngc/gui/gpback.h | 8991 +++++++++ genplus-gx/source/ngc/gui/iso9660.c | 239 + genplus-gx/source/ngc/gui/iso9660.h | 45 + genplus-gx/source/ngc/gui/iso9660.h.old | 44 + genplus-gx/source/ngc/gui/legal.c | 100 + genplus-gx/source/ngc/gui/mcard.c | 588 + genplus-gx/source/ngc/gui/menu.c | 623 + genplus-gx/source/ngc/gui/rominfo.c | 414 + genplus-gx/source/ngc/gui/rominfo.h | 49 + genplus-gx/source/ngc/gui/saveicon.h | 136 + genplus-gx/source/ngc/loadrom.c | 206 + genplus-gx/source/ngc/ngc.c | 641 + genplus-gx/source/ngc/osd.h | 19 + genplus-gx/source/ngc/unzip.c | 193 + genplus-gx/source/ngc/unzip.c.old | 190 + genplus-gx/source/ngc/unzip.h | 26 + genplus-gx/source/ngc/vfat/diskio.c | 99 + genplus-gx/source/ngc/vfat/diskio.h | 36 + genplus-gx/source/ngc/vfat/vfat.c | 841 + genplus-gx/source/ngc/vfat/vfat.h | 226 + genplus-gx/source/render.c | 1536 ++ genplus-gx/source/render.h | 53 + genplus-gx/source/shared.h | 43 + genplus-gx/source/sound/fm.c | 4745 +++++ genplus-gx/source/sound/fm.h | 205 + genplus-gx/source/sound/sn76489.c | 290 + genplus-gx/source/sound/sn76489.h | 91 + genplus-gx/source/sound/sn76496.c | 311 + genplus-gx/source/sound/sn76496.h | 38 + genplus-gx/source/sound/sound.c | 224 + genplus-gx/source/sound/sound.h | 29 + genplus-gx/source/sound/ym2612.c | 2365 +++ genplus-gx/source/sound/ym2612.h | 171 + genplus-gx/source/sram.c | 77 + genplus-gx/source/sram.h | 40 + genplus-gx/source/ssf2tnc.c | 98 + genplus-gx/source/ssf2tnc.h | 17 + genplus-gx/source/state.c | 358 + genplus-gx/source/state.h | 29 + genplus-gx/source/system.c | 432 + genplus-gx/source/system.h | 74 + genplus-gx/source/types.h | 13 + genplus-gx/source/unused/dos/SEALINTF.C | 288 + genplus-gx/source/unused/dos/SEALINTF.H | 17 + genplus-gx/source/unused/dos/config.c | 256 + genplus-gx/source/unused/dos/config.h | 65 + genplus-gx/source/unused/dos/dos.c | 466 + genplus-gx/source/unused/dos/dos.h | 19 + genplus-gx/source/unused/dos/error.c | 29 + genplus-gx/source/unused/dos/error.h | 13 + genplus-gx/source/unused/dos/osd.h | 18 + genplus-gx/source/unused/fileio.c | 153 + genplus-gx/source/unused/fileio.h | 15 + genplus-gx/source/unused/loadrom.c | 52 + genplus-gx/source/unused/loadrom.h | 10 + genplus-gx/source/unused/unzip.c | 1301 ++ genplus-gx/source/unused/unzip.h | 274 + genplus-gx/source/unused/win/error.c | 39 + genplus-gx/source/unused/win/error.h | 13 + genplus-gx/source/unused/win/main.c | 203 + genplus-gx/source/unused/win/main.h | 7 + genplus-gx/source/unused/win/osd.h | 18 + genplus-gx/source/vdp.c | 608 + genplus-gx/source/vdp.h | 62 + 174 files changed, 106299 insertions(+) create mode 100644 genplus-gx/Makefile create mode 100644 genplus-gx/build/confjoy.d create mode 100644 genplus-gx/build/diskio.d create mode 100644 genplus-gx/build/dvd.d create mode 100644 genplus-gx/build/eeprom.d create mode 100644 genplus-gx/build/filesel.d create mode 100644 genplus-gx/build/fm.d create mode 100644 genplus-gx/build/font.d create mode 100644 genplus-gx/build/gcaram.d create mode 100644 genplus-gx/build/genesis.d create mode 100644 genplus-gx/build/genplus.elf.map create mode 100644 genplus-gx/build/ggentry.d create mode 100644 genplus-gx/build/input.d create mode 100644 genplus-gx/build/io.d create mode 100644 genplus-gx/build/iso9660.d create mode 100644 genplus-gx/build/legal.d create mode 100644 genplus-gx/build/loadrom.d create mode 100644 genplus-gx/build/m68kcpu.d create mode 100644 genplus-gx/build/m68kopac.d create mode 100644 genplus-gx/build/m68kopdm.d create mode 100644 genplus-gx/build/m68kopnz.d create mode 100644 genplus-gx/build/m68kops.d create mode 100644 genplus-gx/build/mcard.d create mode 100644 genplus-gx/build/mem68k.d create mode 100644 genplus-gx/build/membnk.d create mode 100644 genplus-gx/build/memvdp.d create mode 100644 genplus-gx/build/memz80.d create mode 100644 genplus-gx/build/menu.d create mode 100644 genplus-gx/build/ngc.d create mode 100644 genplus-gx/build/render.d create mode 100644 genplus-gx/build/rominfo.d create mode 100644 genplus-gx/build/sn76489.d create mode 100644 genplus-gx/build/sn76496.d create mode 100644 genplus-gx/build/sound.d create mode 100644 genplus-gx/build/sram.d create mode 100644 genplus-gx/build/ssf2tnc.d create mode 100644 genplus-gx/build/state.d create mode 100644 genplus-gx/build/system.d create mode 100644 genplus-gx/build/unzip.d create mode 100644 genplus-gx/build/vdp.d create mode 100644 genplus-gx/build/vfat.d create mode 100644 genplus-gx/build/ym2612.d create mode 100644 genplus-gx/build/z80.d create mode 100644 genplus-gx/changelog.txt create mode 100644 genplus-gx/clean.bat create mode 100644 genplus-gx/compile.bat create mode 100644 genplus-gx/compile.txt create mode 100644 genplus-gx/genplus.elf create mode 100644 genplus-gx/genplus.txt create mode 100644 genplus-gx/gu_psasm.S create mode 100644 genplus-gx/pcutil/Makefile create mode 100644 genplus-gx/pcutil/inject.c create mode 100644 genplus-gx/pcutil/inject.exe create mode 100644 genplus-gx/pcutil/injectlnx create mode 100644 genplus-gx/source/cpu/cpuintrf.h create mode 100644 genplus-gx/source/cpu/m68k.h create mode 100644 genplus-gx/source/cpu/m68kconf.h create mode 100644 genplus-gx/source/cpu/osd_cpu.h create mode 100644 genplus-gx/source/cpu/z80.c create mode 100644 genplus-gx/source/cpu/z80.h create mode 100644 genplus-gx/source/cpu/z80daa.h create mode 100644 genplus-gx/source/docs/Genesis_ROM_Format.txt create mode 100644 genplus-gx/source/docs/changelog create mode 100644 genplus-gx/source/docs/eeprom.txt create mode 100644 genplus-gx/source/docs/gamegenie.htm create mode 100644 genplus-gx/source/docs/gen-hw.txt create mode 100644 genplus-gx/source/docs/genvdp.txt create mode 100644 genplus-gx/source/docs/io.htm create mode 100644 genplus-gx/source/docs/license create mode 100644 genplus-gx/source/docs/m5hvc.txt create mode 100644 genplus-gx/source/docs/porting.txt create mode 100644 genplus-gx/source/docs/readme.txt create mode 100644 genplus-gx/source/docs/ssf2tnc.txt create mode 100644 genplus-gx/source/docs/todo.txt create mode 100644 genplus-gx/source/eeprom.c create mode 100644 genplus-gx/source/eeprom.h create mode 100644 genplus-gx/source/genesis.c create mode 100644 genplus-gx/source/genesis.h create mode 100644 genplus-gx/source/hvc.h create mode 100644 genplus-gx/source/input.c create mode 100644 genplus-gx/source/input.h create mode 100644 genplus-gx/source/io.c create mode 100644 genplus-gx/source/io.h create mode 100644 genplus-gx/source/m68k/m68kcpu.c create mode 100644 genplus-gx/source/m68k/m68kcpu.h create mode 100644 genplus-gx/source/m68k/m68kopac.c create mode 100644 genplus-gx/source/m68k/m68kopdm.c create mode 100644 genplus-gx/source/m68k/m68kopnz.c create mode 100644 genplus-gx/source/m68k/m68kops.c create mode 100644 genplus-gx/source/m68k/m68kops.h create mode 100644 genplus-gx/source/macros.h create mode 100644 genplus-gx/source/mem68k.c create mode 100644 genplus-gx/source/mem68k.h create mode 100644 genplus-gx/source/membnk.c create mode 100644 genplus-gx/source/membnk.h create mode 100644 genplus-gx/source/memvdp.c create mode 100644 genplus-gx/source/memvdp.h create mode 100644 genplus-gx/source/memz80.c create mode 100644 genplus-gx/source/memz80.h create mode 100644 genplus-gx/source/ngc/gcaram.c create mode 100644 genplus-gx/source/ngc/gcaram.h create mode 100644 genplus-gx/source/ngc/gui/confjoy.c create mode 100644 genplus-gx/source/ngc/gui/dkpro.h create mode 100644 genplus-gx/source/ngc/gui/dvd.c create mode 100644 genplus-gx/source/ngc/gui/dvd.h create mode 100644 genplus-gx/source/ngc/gui/filesel.c create mode 100644 genplus-gx/source/ngc/gui/filesel.c.old create mode 100644 genplus-gx/source/ngc/gui/font.c create mode 100644 genplus-gx/source/ngc/gui/font.h create mode 100644 genplus-gx/source/ngc/gui/ggentry.c create mode 100644 genplus-gx/source/ngc/gui/gpback.h create mode 100644 genplus-gx/source/ngc/gui/iso9660.c create mode 100644 genplus-gx/source/ngc/gui/iso9660.h create mode 100644 genplus-gx/source/ngc/gui/iso9660.h.old create mode 100644 genplus-gx/source/ngc/gui/legal.c create mode 100644 genplus-gx/source/ngc/gui/mcard.c create mode 100644 genplus-gx/source/ngc/gui/menu.c create mode 100644 genplus-gx/source/ngc/gui/rominfo.c create mode 100644 genplus-gx/source/ngc/gui/rominfo.h create mode 100644 genplus-gx/source/ngc/gui/saveicon.h create mode 100644 genplus-gx/source/ngc/loadrom.c create mode 100644 genplus-gx/source/ngc/ngc.c create mode 100644 genplus-gx/source/ngc/osd.h create mode 100644 genplus-gx/source/ngc/unzip.c create mode 100644 genplus-gx/source/ngc/unzip.c.old create mode 100644 genplus-gx/source/ngc/unzip.h create mode 100644 genplus-gx/source/ngc/vfat/diskio.c create mode 100644 genplus-gx/source/ngc/vfat/diskio.h create mode 100644 genplus-gx/source/ngc/vfat/vfat.c create mode 100644 genplus-gx/source/ngc/vfat/vfat.h create mode 100644 genplus-gx/source/render.c create mode 100644 genplus-gx/source/render.h create mode 100644 genplus-gx/source/shared.h create mode 100644 genplus-gx/source/sound/fm.c create mode 100644 genplus-gx/source/sound/fm.h create mode 100644 genplus-gx/source/sound/sn76489.c create mode 100644 genplus-gx/source/sound/sn76489.h create mode 100644 genplus-gx/source/sound/sn76496.c create mode 100644 genplus-gx/source/sound/sn76496.h create mode 100644 genplus-gx/source/sound/sound.c create mode 100644 genplus-gx/source/sound/sound.h create mode 100644 genplus-gx/source/sound/ym2612.c create mode 100644 genplus-gx/source/sound/ym2612.h create mode 100644 genplus-gx/source/sram.c create mode 100644 genplus-gx/source/sram.h create mode 100644 genplus-gx/source/ssf2tnc.c create mode 100644 genplus-gx/source/ssf2tnc.h create mode 100644 genplus-gx/source/state.c create mode 100644 genplus-gx/source/state.h create mode 100644 genplus-gx/source/system.c create mode 100644 genplus-gx/source/system.h create mode 100644 genplus-gx/source/types.h create mode 100644 genplus-gx/source/unused/dos/SEALINTF.C create mode 100644 genplus-gx/source/unused/dos/SEALINTF.H create mode 100644 genplus-gx/source/unused/dos/config.c create mode 100644 genplus-gx/source/unused/dos/config.h create mode 100644 genplus-gx/source/unused/dos/dos.c create mode 100644 genplus-gx/source/unused/dos/dos.h create mode 100644 genplus-gx/source/unused/dos/error.c create mode 100644 genplus-gx/source/unused/dos/error.h create mode 100644 genplus-gx/source/unused/dos/osd.h create mode 100644 genplus-gx/source/unused/fileio.c create mode 100644 genplus-gx/source/unused/fileio.h create mode 100644 genplus-gx/source/unused/loadrom.c create mode 100644 genplus-gx/source/unused/loadrom.h create mode 100644 genplus-gx/source/unused/unzip.c create mode 100644 genplus-gx/source/unused/unzip.h create mode 100644 genplus-gx/source/unused/win/error.c create mode 100644 genplus-gx/source/unused/win/error.h create mode 100644 genplus-gx/source/unused/win/main.c create mode 100644 genplus-gx/source/unused/win/main.h create mode 100644 genplus-gx/source/unused/win/osd.h create mode 100644 genplus-gx/source/vdp.c create mode 100644 genplus-gx/source/vdp.h diff --git a/ genplus-gx/Makefile b/ genplus-gx/Makefile new file mode 100644 index 0000000..24ea67a --- /dev/null +++ b/ genplus-gx/Makefile @@ -0,0 +1,174 @@ +#--------------------------------------------------------------------------------- +# Generic makefile for Gamecube projects +# +# Tab stops set to 4 +# | | | | +# 0 1 2 3 +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := genplus +BUILD := build +SOURCES := source source/m68k source/cpu source/sound \ + source/ngc source/ngc/gui source/ngc/vfat +INCLUDES := source source/m68k source/cpu source/sound \ + source/ngc source/ngc/gui source/ngc/vfat + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +MACHDEP = -DGEKKO -mcpu=750 -meabi -mhard-float +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -DWORDS_BIGENDIAN \ + -DNGC="1" -DGENESIS_HACKS="1" \ + +LDFLAGS = $(MACHDEP) -mogc -Wl,-Map,$(notdir $@).map -Wl,--cref + +PREFIX := powerpc-gekko- + +#export PATH:=/c/devkitPPC_r11/bin:/bin + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := /c/devkitPro/devkitPPC + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with +#--------------------------------------------------------------------------------- +LIBS := -logc -lm -lz -logcsys -lsdcard + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- +export OUTPUT := $(CURDIR)/$(TARGET) +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) + +export CC := $(PREFIX)gcc +export CXX := $(PREFIX)g++ +export AR := $(PREFIX)ar +export OBJCOPY := $(PREFIX)objcopy +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir $@ + @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) *.elf + +#--------------------------------------------------------------------------------- +run: + psoload $(TARGET).dol + +#--------------------------------------------------------------------------------- +reload: + psoload -r $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf + @echo output ... $(notdir $@) + @$(OBJCOPY) -O binary $< $@ + +#--------------------------------------------------------------------------------- +$(OUTPUT).elf: $(OFILES) + @echo linking ... $(notdir $@) + @$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@ + +#--------------------------------------------------------------------------------- +# Compile Targets for C/C++ +#--------------------------------------------------------------------------------- + +#--------------------------------------------------------------------------------- +%.o : %.cpp + @echo Compiling ... $(notdir $<) + @$(CXX) -MMD $(CFLAGS) -o $@ -c $< + +#--------------------------------------------------------------------------------- +%.o : %.c + @echo Compiling ... $(notdir $<) + @$(CC) -MMD $(CFLAGS) -o $@ -c $< + +#--------------------------------------------------------------------------------- +%.o : %.S + @echo Compiling ... $(notdir $<) + @$(CC) -MMD $(CFLAGS) -D_LANGUAGE_ASSEMBLY -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.o : %.s + @echo Compiling ... $(notdir $<) + @$(CC) -MMD $(CFLAGS) -D_LANGUAGE_ASSEMBLY -c $< -o $@ + +#--------------------------------------------------------------------------------- +# canned command sequence for binary data +#--------------------------------------------------------------------------------- +define bin2o + cp $(<) $(*).tmp + $(OBJCOPY) -I binary -O elf32-powerpc -B powerpc \ + --rename-section .data=.rodata,readonly,data,contents,alloc \ + --redefine-sym _binary_$*_tmp_start=$*\ + --redefine-sym _binary_$*_tmp_end=$*_end\ + --redefine-sym _binary_$*_tmp_size=$*_size\ + $(*).tmp $(@) + echo "extern const u8" $(*)"[];" > $(*).h + echo "extern const u32" $(*)_size[]";" >> $(*).h + rm $(*).tmp +endef + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/ genplus-gx/build/confjoy.d b/ genplus-gx/build/confjoy.d new file mode 100644 index 0000000..87167d6 --- /dev/null +++ b/ genplus-gx/build/confjoy.d @@ -0,0 +1,30 @@ +confjoy.o: c:/Devkitpro/examples/genplus/source/ngc/gui/confjoy.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/diskio.d b/ genplus-gx/build/diskio.d new file mode 100644 index 0000000..dfa6da0 --- /dev/null +++ b/ genplus-gx/build/diskio.d @@ -0,0 +1,2 @@ +diskio.o: c:/Devkitpro/examples/genplus/source/ngc/vfat/diskio.c \ + c:/Devkitpro/examples/genplus/source/ngc/vfat/vfat.h diff --git a/ genplus-gx/build/dvd.d b/ genplus-gx/build/dvd.d new file mode 100644 index 0000000..e61f316 --- /dev/null +++ b/ genplus-gx/build/dvd.d @@ -0,0 +1,31 @@ +dvd.o: c:/Devkitpro/examples/genplus/source/ngc/gui/dvd.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/eeprom.d b/ genplus-gx/build/eeprom.d new file mode 100644 index 0000000..58d318d --- /dev/null +++ b/ genplus-gx/build/eeprom.d @@ -0,0 +1,33 @@ +eeprom.o: c:/Devkitpro/examples/genplus/source/eeprom.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/rominfo.h \ + c:/Devkitpro/examples/genplus/source/shared.h diff --git a/ genplus-gx/build/filesel.d b/ genplus-gx/build/filesel.d new file mode 100644 index 0000000..449303d --- /dev/null +++ b/ genplus-gx/build/filesel.d @@ -0,0 +1,37 @@ +filesel.o: c:/Devkitpro/examples/genplus/source/ngc/gui/filesel.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/dvd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/iso9660.h \ + c:/Devkitpro/examples/genplus/source/ngc/vfat/vfat.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h \ + c:/Devkitpro/examples/genplus/source/ngc/unzip.h \ + c:/Devkitpro/examples/genplus/source/ngc/vfat/diskio.h diff --git a/ genplus-gx/build/fm.d b/ genplus-gx/build/fm.d new file mode 100644 index 0000000..2da9b7f --- /dev/null +++ b/ genplus-gx/build/fm.d @@ -0,0 +1,31 @@ +fm.o: c:/Devkitpro/examples/genplus/source/sound/fm.c \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/font.d b/ genplus-gx/build/font.d new file mode 100644 index 0000000..578425d --- /dev/null +++ b/ genplus-gx/build/font.d @@ -0,0 +1,33 @@ +font.o: c:/Devkitpro/examples/genplus/source/ngc/gui/font.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/gpback.h diff --git a/ genplus-gx/build/gcaram.d b/ genplus-gx/build/gcaram.d new file mode 100644 index 0000000..06c6901 --- /dev/null +++ b/ genplus-gx/build/gcaram.d @@ -0,0 +1,31 @@ +gcaram.o: c:/Devkitpro/examples/genplus/source/ngc/gcaram.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/genesis.d b/ genplus-gx/build/genesis.d new file mode 100644 index 0000000..4453ace --- /dev/null +++ b/ genplus-gx/build/genesis.d @@ -0,0 +1,31 @@ +genesis.o: c:/Devkitpro/examples/genplus/source/genesis.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/genplus.elf.map b/ genplus-gx/build/genplus.elf.map new file mode 100644 index 0000000..3c77ad4 --- /dev/null +++ b/ genplus-gx/build/genplus.elf.map @@ -0,0 +1,15075 @@ +Archive member included because of file (symbol) + +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + ngc.o (TVNtsc480IntDf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + ngc.o (PAD_Init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + filesel.o (DVD_Mount) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + mcard.o (EXI_ProbeReset) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + gcaram.o (DCInvalidateRange) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) (SYS_RegisterResetFunc) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__realmode) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__lwp_cond_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o (GX_SetCopyClear) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + ngc.o (guPerspective) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + ngc.o (ps_guMtxConcat) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + ngc.o (AUDIO_RegisterDMACallback) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__decrementer_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__lwp_mqbox_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o (CARD_Unmount) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + gcaram.o (AR_GetDMAStatus) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) (dechandler_start) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) (DSP_SendMailTo) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) (SI_IsChanBusy) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) + (_start) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_priority.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__lwp_priority_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) (__lwp_queue_initialize) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) (__lwp_threadqueue_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) (_thr_executing) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) (__lwpmq_initialize) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__lwp_sysinit) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) (_cpu_context_save_fp) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) (__lwp_stack_allocate) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__lwp_watchdog_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) (__wkspace_heap) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__lwp_objmgr_initinfo) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) (__lwp_heap_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(sys_state.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (_sys_state_curr) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) (__exception_load) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) (__UnmaskIrq) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) (irqhandler_start) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__lwp_sema_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) (__VIClearFramebuffer) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__lwp_mutex_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) (__lwp_sema_initialize) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) (__lwp_mutex_initialize) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) (default_exceptionhandler_start) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_floor.o) + fm.o (floor) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) + fm.o (sin) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) (cosf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) (sinf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) (tanf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) + fm.o (log) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + ym2612.o (log10) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + fm.o (pow) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) (sqrtf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) (__ieee754_log) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log10.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) (__ieee754_log10) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) (__ieee754_pow) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) (__ieee754_rem_pio2) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) (__ieee754_sqrt) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) (__ieee754_rem_pio2f) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) (__ieee754_sqrtf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_cos.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) (__kernel_cos) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) (__kernel_rem_pio2) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) (__kernel_sin) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_cos.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) (__kernel_cosf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) (__kernel_rem_pio2f) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) (__kernel_sinf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_tan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) (__kernel_tanf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_fabs.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) (fabs) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_finite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) (finite) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_isnan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) (isnan) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_lib_ver.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) (__fdlib_version) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_matherr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) (matherr) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_rint.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) (rint) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_scalbn.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) (scalbn) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_fabs.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) (fabsf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_floor.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) (floorf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_isnan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) (isnanf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_scalbn.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) (scalbnf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_copysign.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_scalbn.o) (copysign) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_copysign.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_scalbn.o) (copysignf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) + state.o (compress2) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(crc32.o) + sram.o (crc32) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(uncompr.o) + state.o (uncompress) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) (deflateEnd) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) (_length_code) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) (z_errmsg) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + unzip.o (inflateInit2_) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) (inflate_table) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inffast.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) (inflate_fast) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(adler32.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) (adler32) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) (__libc_create_hook) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(usleep.o) + ngc.o (usleep) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) (gettime) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) (__console_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console_font.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) (console_font_8x16) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__memlock_init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + ngc.o (SDCARD_Init) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) (dotab_sdcardio) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) (card_initFATDefault) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) (card_initBufferPool) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) (g_CSD) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_uni.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) (card_convertStrToUni) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_ashldi3.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) (__ashldi3) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_udivdi3.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (__udivdi3) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) (devoptab_list) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) (dotab_netfake) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) (dotab_stdin) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) (dotab_sdcardfake) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) (dotab_dvd) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(abort.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) (abort) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(calloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) (calloc) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(callocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(calloc.o) (_calloc_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(ctype_.o) + loadrom.o (__ctype_ptr) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(errno.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) (__errno) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(impure.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) (_impure_ptr) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) (localtime) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime.o) (localtime_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malign.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (memalign) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malign.o) (_memalign_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + render.o (malloc) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(callocr.o) (_malloc_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memcmp.o) + ngc.o (memcmp) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memcpy.o) + state.o (memcpy) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memset.o) + genesis.o (memset) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) (mktime) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) (__tzcalc_limits) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) (printf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) (putchar) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) (puts) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(rand.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) (srand) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(realloc.o) + system.o (realloc) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(realloc.o) (_realloc_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) (_reclaim_reent) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sbrkr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) (_sbrk_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) + z80.o (raise) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) (_kill_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sprintf.o) + unzip.o (sprintf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcasecmp.o) + vfat.o (strcasecmp) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strchr.o) + ggentry.o (strchr) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcmp.o) + filesel.o (strcmp) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcpy.o) + filesel.o (strcpy) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strlen.o) + filesel.o (strlen) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncasecmp.o) + loadrom.o (strncasecmp) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncmp.o) + rominfo.o (strncmp) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncpy.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) (strncpy) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strrchr.o) + vfat.o (strrchr) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strstr.o) + eeprom.o (strstr) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok.o) + filesel.o (strtok) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok.o) (__strtok_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) (__tz_lock) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzvars.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) (_daylight) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) (_vfprintf_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) (__swbuf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (_wcrtomb_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcsrtombs.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (_wcsrtombs_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) (_wctomb_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (__swsetup) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(div.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) (div) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (_dtoa_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (fflush) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (__sinit) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) (_free_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) (__sfvwrite) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) (_fwalk) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(gettzinfo.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) (__gettzinfo) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) (__lc_ctype) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) (__smakebuf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memchr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (memchr) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memmove.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) (memmove) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) (__mprec_bigtens) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(s_isinf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (isinf) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) (__sread) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(writer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) (_write_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(closer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) (_close_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) (fclose) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fstatr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) (_fstat_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lseekr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) (_lseek_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(readr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) (_read_r) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sbrk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sbrkr.o) (sbrk) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(write.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(writer.o) (write) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(close.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(closer.o) (close) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(getpid.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) (getpid) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(kill.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) (kill) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(isatty.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) (isatty) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(fstat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fstatr.o) (fstat) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(read.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(readr.o) (read) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lseek.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lseekr.o) (lseek) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) (__flockfile) +c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) (__libc_lock_init) + +Allocating common symbols +Common symbol size file + +pixel_16 0x200 render.o +cram 0x80 vdp.o +DR_TAB 0x180 ym2612.o +peripherals 0x4 rominfo.o +playfield_col_mask 0x1 vdp.o +DT_TAB 0x400 ym2612.o +SIN_TAB 0x4000 ym2612.o +LFO_FREQ_TAB 0x1000 ym2612.o +y_mask 0x4 vdp.o +lastbusreqcnt 0x4 genesis.o +xfb 0x8 ngc.o +filelist 0x46500 iso9660.o +reg 0x20 vdp.o +fm_status 0x1 sound.o +pending 0x1 vdp.o +now 0x8 ngc.o +LFO_ENV_UP 0x1f40 ym2612.o +timer 0x28 sound.o +pixel_8_lut 0x600 render.o +en3 0x4 ym2612.o +color_update 0x4 vdp.o +nta_buf 0x400 render.o +eeprom 0x28 eeprom.o +LFO_INC_TAB 0x20 ym2612.o +savebuffer 0x24000 mcard.o +f 0x151 filesel.o +gamepad 0x18 input.o +errno 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) +m68ki_initial_cycles + 0x4 m68kcpu.o +h_counter 0x2 vdp.o +playfield_shift 0x1 vdp.o +ggcodes 0x50 ggentry.o +bitmap 0x38 system.o +addr_latch 0x2 vdp.o +fs 0x40 filesel.o +CardFile 0x14 mcard.o +sn 0xb4 sn76496.o +m68ki_cycles 0x30000 m68kops.o +soundbuffer 0xf000 ngc.o +pixel_15_lut 0xc00 render.o +object_index_count 0x1 render.o +in1 0x4 ym2612.o +bg_pattern_cache 0x80000 vdp.o +m68ki_address_space + 0x4 m68kcpu.o +dmafill 0x1 vdp.o +input 0x2c input.o +rominfo 0x124 rominfo.o +fm_timerb_tab 0x400 sound.o +vheight 0x4 ngc.o +checksumok 0x4 rominfo.o +work_ram 0x10000 genesis.o +bufferptr 0x4 state.o +pixel_15 0x200 render.o +border 0x1 vdp.o +state 0x23000 state.o +en1 0x4 ym2612.o +ntab 0x2 vdp.o +font_size 0x400 font.o +fm_reg 0x200 sound.o +AR_TAB 0x200 ym2612.o +satb 0x2 vdp.o +pixel_32 0x400 render.o +ENV_TAB 0x8020 ym2612.o +sat_base_mask 0x2 vdp.o +gen_running 0x1 genesis.o +FINC_TAB 0x2000 ym2612.o +sat 0x400 vdp.o +v_counter 0x2 vdp.o +frame_end 0x2 vdp.o +ntbb 0x2 vdp.o +hc_latch 0x2 vdp.o +fheight 0x4 font.o +m68ki_instruction_jump_table + 0x40000 m68kops.o +snd 0x38 system.o +DECAY_TO_ATTACK 0x4000 ym2612.o +ggpatch 0x40 ggentry.o +rootSDdir 0x100 filesel.o +en0 0x4 ym2612.o +dma_endCycles 0x4 vdp.o +LFO_ENV_TAB 0x1000 ym2612.o +zirq 0x1 genesis.o +in3 0x4 ym2612.o +in2 0x4 ym2612.o +texobj 0x20 ngc.o +sram 0x10010 sram.o +fm_latch 0x2 sound.o +font_offset 0x400 font.o +bg_list_index 0x2 vdp.o +zbank 0x4 genesis.o +LFO_FREQ_UP 0x1f40 ym2612.o +pixel_16_lut 0xc00 render.o +tmp_buf 0x400 render.o +addr 0x2 vdp.o +lightgun 0x4 input.o +io_reg 0x10 io.o +int_cnt 0x4 ym2612.o +lastbusack 0x1 genesis.o +TL_TAB 0x18000 ym2612.o +prev 0x8 ngc.o +dkproraw 0x4 legal.o +INTER_TAB 0x1f40 ym2612.o +zbusreq 0x1 genesis.o +name_lut 0x400 render.o +playfield_row_mask 0x2 vdp.o +fm_timera_tab 0x1000 sound.o +pixel_32_lut 0x1800 render.o +bg_buf 0x400 render.o +z80_ICount 0x4 z80.o +object_info 0xa0 render.o +hint_pending 0x1 vdp.o +hscb 0x2 vdp.o +teamplayer 0x1c input.o +vwidth 0x4 ngc.o +backdrop 0x96020 font.o +im2_flag 0x1 vdp.o +bg_name_dirty 0x800 vdp.o +YM2612 0x14d0 ym2612.o +lut 0x14 render.o +genromsize 0x4 genesis.o +in0 0x4 ym2612.o +ntb_buf 0x400 render.o +vmode 0x4 ngc.o +zram 0x2000 genesis.o +ntwb 0x2 vdp.o +code 0x1 vdp.o +NULL_RATE 0x80 ym2612.o +vram 0x10000 vdp.o +DVDreadbuffer 0x800 dvd.o +CardDir 0x38 mcard.o +bg_name_list 0x1000 vdp.o +en2 0x4 ym2612.o +zbusack 0x1 genesis.o +gghpos 0x20 ggentry.o +port 0x18 io.o +vsram 0x80 vdp.o +SL_TAB 0x40 ym2612.o +sat_addr_mask 0x2 vdp.o +vint_pending 0x1 vdp.o +oldvwidth 0x4 ngc.o +oldvheight 0x4 ngc.o +cart_rom 0x4 genesis.o +pixel_8 0x100 render.o +obj_buf 0x400 render.o +zreset 0x1 genesis.o +gen_bmp 0x4 ngc.o +status 0x2 vdp.o +CardStatus 0x6c mcard.o + +Memory Configuration + +Name Origin Length Attributes +*default* 0x00000000 0xffffffff + +Linker script and memory map + + 0x80003100 base_address = 0x80003100 + 0x80003000 file_start = (base_address - 0x100) + 0x80003000 . = file_start + +.header 0x80003000 0xe4 + 0x80003000 0x4 LONG 0x100 text_file_start + 0x80003004 0x4 LONG 0x0 + 0x80003008 0x4 LONG 0x0 + 0x8000300c 0x4 LONG 0x0 + 0x80003010 0x4 LONG 0x0 + 0x80003014 0x4 LONG 0x0 + 0x80003018 0x4 LONG 0x0 + 0x8000301c 0x4 LONG 0xee2c0 data_file_start + 0x80003020 0x4 LONG 0x0 + 0x80003024 0x4 LONG 0x0 + 0x80003028 0x4 LONG 0x0 + 0x8000302c 0x4 LONG 0x0 + 0x80003030 0x4 LONG 0x0 + 0x80003034 0x4 LONG 0x0 + 0x80003038 0x4 LONG 0x0 + 0x8000303c 0x4 LONG 0x0 + 0x80003040 0x4 LONG 0x0 + 0x80003044 0x4 LONG 0x0 + 0x80003048 0x4 LONG 0x80003100 text_mem_start + 0x8000304c 0x4 LONG 0x0 + 0x80003050 0x4 LONG 0x0 + 0x80003054 0x4 LONG 0x0 + 0x80003058 0x4 LONG 0x0 + 0x8000305c 0x4 LONG 0x0 + 0x80003060 0x4 LONG 0x0 + 0x80003064 0x4 LONG 0x800f12c0 data_mem_start + 0x80003068 0x4 LONG 0x0 + 0x8000306c 0x4 LONG 0x0 + 0x80003070 0x4 LONG 0x0 + 0x80003074 0x4 LONG 0x0 + 0x80003078 0x4 LONG 0x0 + 0x8000307c 0x4 LONG 0x0 + 0x80003080 0x4 LONG 0x0 + 0x80003084 0x4 LONG 0x0 + 0x80003088 0x4 LONG 0x0 + 0x8000308c 0x4 LONG 0x0 + 0x80003090 0x4 LONG 0xee1c0 text_mem_size + 0x80003094 0x4 LONG 0x0 + 0x80003098 0x4 LONG 0x0 + 0x8000309c 0x4 LONG 0x0 + 0x800030a0 0x4 LONG 0x0 + 0x800030a4 0x4 LONG 0x0 + 0x800030a8 0x4 LONG 0x0 + 0x800030ac 0x4 LONG 0x2bbc0 data_mem_size + 0x800030b0 0x4 LONG 0x0 + 0x800030b4 0x4 LONG 0x0 + 0x800030b8 0x4 LONG 0x0 + 0x800030bc 0x4 LONG 0x0 + 0x800030c0 0x4 LONG 0x0 + 0x800030c4 0x4 LONG 0x0 + 0x800030c8 0x4 LONG 0x0 + 0x800030cc 0x4 LONG 0x0 + 0x800030d0 0x4 LONG 0x0 + 0x800030d4 0x4 LONG 0x0 + 0x800030d8 0x4 LONG 0x8011ce80 bss_mem_start + 0x800030dc 0x4 LONG 0x39e9e0 bss_mem_size + 0x800030e0 0x4 LONG 0x80003100 (_start) + 0x80003100 . = base_address + 0x80003100 text_mem_start = . + +.init 0x80003100 0x1f0 + *crt0.o(*.init) + .init 0x80003100 0x1cc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) + 0x80003284 _memset + 0x80003100 _start + 0x800032b4 video_line + *(.init) + .init 0x800032cc 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o + 0x800032cc __init + .init 0x800032d8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o + .init 0x800032dc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtend.o + .init 0x800032e0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o + +.plt + *(.plt) + +.interp + *(.interp) + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.text + *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) + +.rela.text + *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.rodata + *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) + +.rela.rodata + *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) + +.rel.data + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) + +.rela.data + *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) + +.rel.tdata + *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) + +.rela.tdata + *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) + +.rel.tbss + *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) + +.rela.tbss + *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rela.got1 + *(.rela.got1) + +.rela.got2 + *(.rela.got2) + +.rel.sdata + *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) + +.rela.sdata + *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) + +.rel.sbss + *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) + +.rela.sbss + *(.rela.sbss .rela.sbss.* .rel.gnu.linkonce.sb.*) + +.rel.sdata2 + *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) + +.rela.sdata2 + *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) + +.rel.sbss2 + *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) + +.rela.sbss2 + *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) + +.rel.bss + *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) + +.rela.bss + *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.text 0x800032f0 0xedfb0 + *(.text) + .text 0x800032f0 0x128 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o + .text 0x80003418 0xb00 eeprom.o + 0x80003e48 EEPROM_Read + 0x800038b4 EEPROM_Write + 0x80003418 EEPROM_Init + .text 0x80003f18 0x468 genesis.o + 0x80004070 gen_busack_r + 0x80004300 z80_irq_callback + 0x800042e4 gen_bank_w + 0x8000406c gen_shutdown + 0x80003f18 gen_init + 0x80004338 vdp_int_ack_callback + 0x8000425c gen_reset_w + 0x800040e4 gen_busreq_w + 0x80003fc4 gen_reset + .text 0x80004380 0xd54 input.o + 0x8000449c lightgun_reset + 0x80004b90 gamepad_read + 0x8000453c input_reset + 0x800044e8 gamepad_update + 0x80004510 gamepad_reset + 0x80004dd8 teamplayer_read + 0x80004954 input_update + 0x80004f9c multitap_read + 0x80004ef4 multitap_write + 0x80004880 lightgun_update + 0x80004d7c gamepad_write + 0x80004a60 lightgun_set + 0x80004380 teamplayer_reset + 0x80004b40 lightgun_read + 0x8000479c input_raz + 0x800044c8 gamepad_raz + .text 0x800050d4 0x524 io.o + 0x80005190 MultiTap2_Read + 0x8000511c Player1_Write + 0x80005204 io_reset + 0x800050d4 Player1_Read + 0x800053bc io_write + 0x8000516c MultiTap1_Read + 0x80005144 Player2_Write + 0x800050f8 Player2_Read + 0x800051b4 MultiTap1_Write + 0x80005538 io_read + 0x800051dc MultiTap2_Write + .text 0x800055f8 0xf2c mem68k.o + 0x80005e90 m68k_read_memory_32 + 0x80005ed4 m68k_write_memory_8 + 0x8000568c m68k_unused_8_w + 0x80005654 m68k_unused_w + 0x800055f8 m68k_read_bus_16 + 0x80006198 m68k_write_memory_16 + 0x80005b60 m68k_read_memory_16 + 0x800064d8 m68k_write_memory_32 + 0x80005610 m68k_read_bus_8 + 0x80005834 m68k_lockup_r_16 + 0x800056c4 m68k_unused_16_w + 0x800057d4 m68k_lockup_r_8 + 0x80005768 m68k_lockup_w_16 + 0x80005894 m68k_read_memory_8 + 0x800056fc m68k_lockup_w_8 + .text 0x80006524 0x504 membnk.o + 0x80006868 z80bank_vdp_w + 0x80006928 z80_write_banked_memory + 0x80006630 z80bank_vdp_r + 0x800065d4 z80bank_lockup_r + 0x80006524 z80bank_unused_r + 0x80006800 z80bank_lockup_w + 0x8000657c z80bank_unused_w + 0x80006710 z80_read_banked_memory + .text 0x80006a28 0xe4 memvdp.o + 0x80006a28 vdp_dma_r + .text 0x80006b0c 0x434 memz80.o + 0x80006b64 z80_unused_w + 0x80006d6c z80_lockup_w + 0x80006bbc z80_lockup_r + 0x80006c18 z80_vdp_r + 0x80006b0c cpu_readport16 + 0x80006cc4 cpu_readmem16 + 0x80006e7c cpu_writemem16 + 0x80006dd4 z80_vdp_w + 0x80006b14 cpu_writeport16 + 0x80006b18 z80_unused_r + .text 0x80006f40 0x2594 render.o + 0x8000838c render_ntx_vs + 0x80007cec merge + 0x800082a4 remap_16 + 0x800070a8 make_lut_obj_ste + 0x800082fc get_hscroll + 0x80007810 update_bg_pattern_cache + 0x80008cac render_line + 0x800082d0 remap_32 + 0x80007020 make_lut_bg_ste + 0x80007bd4 render_ntw + 0x800092bc color_update_32 + 0x800077d0 render_shutdown + 0x800070e8 make_lut_bgobj_ste + 0x80006f40 make_lut_bg + 0x800091b4 color_update_15 + 0x80007994 window_clip + 0x80006fb4 make_lut_obj + 0x80007a60 render_ntw_im2 + 0x800089e8 render_ntx + 0x80007298 render_init + 0x80009238 color_update_16 + 0x80007fe0 render_obj + 0x8000827c remap_8 + 0x80009140 color_update_8 + 0x800086cc render_ntx_im2 + 0x80007d20 render_obj_im2 + 0x80009340 parse_satb + 0x800076ec render_reset + 0x800071d8 make_name_lut + .text 0x800094d4 0x12c sram.o + 0x800094d4 SRAM_Init + .text 0x80009600 0x1c8 ssf2tnc.o + 0x80009600 ssf2bankrom + .text 0x800097c8 0x1228 state.o + 0x8000987c state_load + 0x80009820 save_param + 0x800097c8 load_param + 0x8000a198 state_save + .text 0x8000a9f0 0xebc system.o + 0x8000aec0 system_init + 0x8000aaf4 audio_init + 0x8000b090 system_shutdown + 0x8000b0b8 audio_update + 0x8000a9f0 m68k_run + 0x8000aa40 z80_run + 0x8000b430 system_frame + 0x8000aa84 m68k_freeze + 0x8000af68 system_reset + .text 0x8000b8ac 0x1164 vdp.o + 0x8000c38c vdp_reg_w + 0x8000bd24 dma_fill + 0x8000bacc dma_update + 0x8000b8b0 vdp_reset + 0x8000be58 vdp_data_w + 0x8000c1d4 vdp_ctrl_r + 0x8000bbec dma_copy + 0x8000ca0c vdp_test_w + 0x8000bac8 vdp_shutdown + 0x8000c798 vdp_ctrl_w + 0x8000c2ac vdp_data_r + 0x8000c8f8 vdp_hvc_r + 0x8000c0bc dma_vbus + 0x8000b8ac vdp_init + .text 0x8000ca10 0x1c38 m68kcpu.o + 0x8000d708 m68k_modify_timeslice + 0x8000de60 m68k_pulse_halt + 0x8000d748 m68k_set_irq + 0x8000d4d8 m68k_set_bkpt_ack_callback + 0x8000dd30 m68k_pulse_reset + 0x8000d4a8 m68k_set_int_ack_callback + 0x8000d5c8 m68k_execute + 0x8000d568 m68k_set_fc_callback + 0x8000d72c m68k_end_timeslice + 0x8000de80 m68k_get_context + 0x8000d508 m68k_set_reset_instr_callback + 0x8000ca58 m68k_get_reg + 0x8000d598 m68k_set_instr_hook_callback + 0x8000de78 m68k_context_size + 0x8000d6e4 m68k_cycles_run + 0x8000d538 m68k_set_pc_changed_callback + 0x8000d6fc m68k_cycles_remaining + 0x8000deec m68k_save_context + 0x8000ccfc m68k_set_cpu_type + 0x8000deb8 m68k_set_context + 0x8000cf00 m68k_set_reg + 0x8000e270 m68k_load_context + .text 0x8000e648 0x260c8 m68kopac.o + 0x800301bc m68k_op_clr_32_aw + 0x800310e0 m68k_op_cmp_32_pi + 0x8001173c m68k_op_add_32_re_pi + 0x8001c700 m68k_op_bclr_8_s_ai + 0x80029214 m68k_op_chk_32_aw + 0x8001c1cc m68k_op_bclr_8_r_pi + 0x80010368 m68k_op_add_32_er_d + 0x800316e8 m68k_op_cmpa_16_a + 0x80032cf4 m68k_op_cmpi_16_ai + 0x8000f5b4 m68k_op_add_8_er_pd7 + 0x800160f8 m68k_op_and_32_er_di + 0x80011cb8 m68k_op_adda_16_pi + 0x80011a64 m68k_op_add_32_re_aw + 0x80014710 m68k_op_addq_32_pi + 0x80032330 m68k_op_cmpa_32_pcdi + 0x800112e8 m68k_op_add_16_re_pd + 0x800195b8 m68k_op_asl_16_s + 0x80024600 m68k_op_callm_32_pcdi + 0x80021f94 m68k_op_bftst_32_di + 0x80033258 m68k_op_cmpi_16_pcix + 0x80030934 m68k_op_cmp_16_d + 0x80030474 m68k_op_cmp_8_pd + 0x80030988 m68k_op_cmp_16_a + 0x8000fbb4 m68k_op_add_16_er_a + 0x8001767c m68k_op_andi_8_pd7 + 0x8001f5d4 m68k_op_bfextu_32_pcdi + 0x800143b0 m68k_op_addq_16_ix + 0x8000f094 m68k_op_abcd_8_mm_axy7 + 0x80025abc m68k_op_cas_32_pi + 0x80013278 m68k_op_addi_16_al + 0x8000fc2c m68k_op_add_16_er_ai + 0x8002ad04 m68k_op_chk2cmp2_8_aw + 0x80031f40 m68k_op_cmpa_32_pi + 0x80031680 m68k_op_cmpa_16_d + 0x8003014c m68k_op_clr_32_ix + 0x800238c4 m68k_op_btst_8_r_pi + 0x8001f124 m68k_op_bfextu_32_ix + 0x80025388 m68k_op_cas_16_pd + 0x800102bc m68k_op_add_16_er_i + 0x80030efc m68k_op_cmp_16_i + 0x80020240 m68k_op_bfffo_32_al + 0x8001ef7c m68k_op_bfextu_32_di + 0x80022fb8 m68k_op_bset_8_r_al + 0x80019650 m68k_op_asl_32_s + 0x80016dac m68k_op_and_16_re_aw + 0x80011d28 m68k_op_adda_16_pd + 0x80016ba0 m68k_op_and_16_re_pd + 0x80023818 m68k_op_btst_32_r_d + 0x80013e2c m68k_op_addq_8_ix + 0x80012824 m68k_op_addi_8_pi7 + 0x8001b46c m68k_op_ble_32 + 0x80015120 m68k_op_addx_32_mm + 0x8001a1ac m68k_op_bpl_8 + 0x800142e0 m68k_op_addq_16_di + 0x8001a280 m68k_op_blt_8 + 0x80024918 m68k_op_cas_8_pi7 + 0x8001fa50 m68k_op_bfffo_32_ai + 0x8001a168 m68k_op_bvs_8 + 0x800158a0 m68k_op_and_8_er_i + 0x80032f9c m68k_op_cmpi_16_ix + 0x800170c8 m68k_op_and_32_re_di + 0x800312e0 m68k_op_cmp_32_ix + 0x800145c8 m68k_op_addq_32_d + 0x80033cd8 m68k_op_cmpm_16 + 0x800337e8 m68k_op_cmpi_32_al + 0x80019464 m68k_op_asr_16_al + 0x8001a0e0 m68k_op_beq_8 + 0x8000f3a8 m68k_op_add_8_er_pi + 0x800323e0 m68k_op_cmpa_32_pcix + 0x80016448 m68k_op_and_32_er_i + 0x80031940 m68k_op_cmpa_16_di + 0x80010c28 m68k_op_add_8_re_pi + 0x800222f4 m68k_op_bftst_32_aw + 0x80033d8c m68k_op_cmpm_32 + 0x8002263c m68k_op_bftst_32_pcdi + 0x80030a6c m68k_op_cmp_16_pi + 0x80028710 m68k_op_chk_32_pi + 0x8003137c m68k_op_cmp_32_aw + 0x8001f8e8 m68k_op_bfffo_32_d + 0x8001b520 m68k_op_bchg_32_r_d + 0x800128d0 m68k_op_addi_8_pd + 0x80020d3c m68k_op_bfins_32_ix + 0x8001b5f8 m68k_op_bchg_8_r_pi + 0x80024b5c m68k_op_cas_8_pd7 + 0x8002fc74 m68k_op_clr_16_pi + 0x80018b58 m68k_op_asr_16_s + 0x8001ccc8 m68k_op_bfchg_32_d + 0x80030fe0 m68k_op_cmp_32_a + 0x80013c10 m68k_op_addq_8_pd + 0x80023fd4 m68k_op_btst_8_s_pd + 0x80010094 m68k_op_add_16_er_al + 0x8003292c m68k_op_cmpi_8_ix + 0x8001364c m68k_op_addi_32_di + 0x800139ac m68k_op_addq_8_d + 0x80033b8c m68k_op_cmpm_8_axy7 + 0x80013d60 m68k_op_addq_8_di + 0x800307b0 m68k_op_cmp_8_pcdi + 0x8001a7c4 m68k_op_bvs_16 + 0x8001c79c m68k_op_bclr_8_s_pi + 0x8001f444 m68k_op_bfextu_32_al + 0x80015264 m68k_op_and_8_er_ai + 0x800230d4 m68k_op_bset_8_s_ai + 0x80018048 m68k_op_andi_32_pi + 0x8001f768 m68k_op_bfextu_32_pcix + 0x8001c264 m68k_op_bclr_8_r_pi7 + 0x8001aacc m68k_op_bgt_16 + 0x80025008 m68k_op_cas_8_al + 0x80023d0c m68k_op_btst_8_r_pcix + 0x8001bb2c m68k_op_bchg_8_s_ai + 0x800140d8 m68k_op_addq_16_ai + 0x8001e830 m68k_op_bfexts_32_al + 0x8001014c m68k_op_add_16_er_pcdi + 0x80023c88 m68k_op_btst_8_r_pcdi + 0x800156f0 m68k_op_and_8_er_al + 0x80012988 m68k_op_addi_8_pd7 + 0x80030f7c m68k_op_cmp_32_d + 0x80021dfc m68k_op_bftst_32_ai + 0x8001d7f4 m68k_op_bfclr_32_ai + 0x800289cc m68k_op_chk_32_pd + 0x8001db80 m68k_op_bfclr_32_ix + 0x80012174 m68k_op_adda_32_ai + 0x80012434 m68k_op_adda_32_al + 0x80031bf8 m68k_op_cmpa_16_pcdi + 0x8002081c m68k_op_bfins_32_d + 0x80017bac m68k_op_andi_16_pd + 0x8000fcdc m68k_op_add_16_er_pi + 0x80023ddc m68k_op_btst_32_s_d + 0x8001ab7c m68k_op_ble_16 + 0x80014230 m68k_op_addq_16_pd + 0x80025990 m68k_op_cas_32_ai + 0x8002ec98 m68k_op_chk2cmp2_32_al + 0x8000ec30 m68k_op_1111 + 0x80012610 m68k_op_addi_8_d + 0x80032614 m68k_op_cmpi_8_pi + 0x800162b0 m68k_op_and_32_er_al + 0x8001b274 m68k_op_bge_32 + 0x80031564 m68k_op_cmp_32_pcix + 0x80025600 m68k_op_cas_16_ix + 0x80030578 m68k_op_cmp_8_di + 0x80032744 m68k_op_cmpi_8_pd + 0x80031d40 m68k_op_cmpa_16_i + 0x8001dd40 m68k_op_bfclr_32_aw + 0x80031cac m68k_op_cmpa_16_pcix + 0x80017888 m68k_op_andi_8_aw + 0x80014a10 m68k_op_addq_32_aw + 0x800123b4 m68k_op_adda_32_aw + 0x800212dc m68k_op_bfset_32_d + 0x80021cd8 m68k_op_bftst_32_d + 0x80013338 m68k_op_addi_32_d + 0x80011034 m68k_op_add_8_re_aw + 0x80010a34 m68k_op_add_32_er_pcix + 0x8001e9c0 m68k_op_bfexts_32_pcdi + 0x80014dd8 m68k_op_addx_8_mm_ay7 + 0x8001b31c m68k_op_blt_32 + 0x800193b4 m68k_op_asr_16_aw + 0x800326b4 m68k_op_cmpi_8_pi7 + 0x80023554 m68k_op_bset_8_s_aw + 0x8001a85c m68k_op_bpl_16 + 0x8000f93c m68k_op_add_8_er_pcdi + 0x8001854c m68k_op_andi_16_tos + 0x8001bd08 m68k_op_bchg_8_s_pd + 0x8001d504 m68k_op_bfchg_32_al + 0x80015e1c m68k_op_and_16_er_pcix + 0x80015408 m68k_op_and_8_er_pd + 0x800147c8 m68k_op_addq_32_pd + 0x80033ae8 m68k_op_cmpm_8_ay7 + 0x800138dc m68k_op_addi_32_al + 0x80024180 m68k_op_btst_8_s_ix + 0x80027f40 m68k_op_chk_16_i + 0x800233ec m68k_op_bset_8_s_di + 0x8001c2ec m68k_op_bclr_8_r_pd + 0x8001cc24 m68k_op_bclr_8_s_al + 0x8002428c m68k_op_btst_8_s_al + 0x80017930 m68k_op_andi_8_al + 0x80025e70 m68k_op_cas_32_ix + 0x80023d70 m68k_op_btst_8_r_i + 0x80014514 m68k_op_addq_16_al + 0x80019e00 m68k_op_asl_16_aw + 0x80015e9c m68k_op_and_16_er_i + 0x8000f45c m68k_op_add_8_er_pi7 + 0x8001a4cc m68k_op_bcc_16 + 0x8002c314 m68k_op_chk2cmp2_16_di + 0x80023170 m68k_op_bset_8_s_pi + 0x80032290 m68k_op_cmpa_32_al + 0x8000f18c m68k_op_abcd_8_mm + 0x8000f298 m68k_op_add_8_er_d + 0x80010ec4 m68k_op_add_8_re_di + 0x80022f24 m68k_op_bset_8_r_aw + 0x80012114 m68k_op_adda_32_d + 0x80023e4c m68k_op_btst_8_s_ai + 0x80017188 m68k_op_and_32_re_ix + 0x8001af54 m68k_op_beq_32 + 0x80015214 m68k_op_and_8_er_d + 0x80011800 m68k_op_add_32_re_pd + 0x8001b1d4 m68k_op_bmi_32 + 0x80014ea4 m68k_op_addx_8_mm_axy7 + 0x8001ecd4 m68k_op_bfextu_32_d + 0x8002f790 m68k_op_clr_8_d + 0x800330e0 m68k_op_cmpi_16_al + 0x80016ef4 m68k_op_and_32_re_ai + 0x80024440 m68k_op_callm_32_di + 0x800134ac m68k_op_addi_32_pi + 0x80031a08 m68k_op_cmpa_16_ix + 0x8001ad74 m68k_op_bcc_32 + 0x80015924 m68k_op_and_16_er_d + 0x80027000 m68k_op_chk_16_di + 0x80030c3c m68k_op_cmp_16_ix + 0x80024204 m68k_op_btst_8_s_aw + 0x8002369c m68k_op_bsr_8 + 0x80017538 m68k_op_andi_8_pi7 + 0x8001a72c m68k_op_bvc_16 + 0x800247f0 m68k_op_cas_8_pi + 0x80023854 m68k_op_btst_8_r_ai + 0x800235f8 m68k_op_bset_8_s_al + 0x8002ff6c m68k_op_clr_32_ai + 0x800119a0 m68k_op_add_32_re_ix + 0x80031750 m68k_op_cmpa_16_ai + 0x80024c78 m68k_op_cas_8_di + 0x80019eb8 m68k_op_asl_16_al + 0x80015498 m68k_op_and_8_er_pd7 + 0x800130f8 m68k_op_addi_16_ix + 0x8000f9fc m68k_op_add_8_er_pcix + 0x80027cc8 m68k_op_chk_16_pcix + 0x80016730 m68k_op_and_8_re_pd7 + 0x800110e0 m68k_op_add_8_re_al + 0x8002e540 m68k_op_chk2cmp2_32_ix + 0x8002fe58 m68k_op_clr_16_aw + 0x800126b8 m68k_op_addi_8_ai + 0x80024310 m68k_op_btst_8_s_pcdi + 0x80018c78 m68k_op_asr_8_r + 0x80018470 m68k_op_andi_16_toc + 0x800164c4 m68k_op_and_8_re_ai + 0x80026d78 m68k_op_chk_16_pd + 0x80015f68 m68k_op_and_32_er_ai + 0x800315f0 m68k_op_cmp_32_i + 0x80014c04 m68k_op_addx_16_rr + 0x800159fc m68k_op_and_16_er_pi + 0x80032504 m68k_op_cmpi_8_d + 0x8002f8ac m68k_op_clr_8_pi7 + 0x800155d0 m68k_op_and_8_er_ix + 0x80012a34 m68k_op_addi_8_di + 0x8001a124 m68k_op_bvc_8 + 0x80019d48 m68k_op_asl_16_ix + 0x80017f28 m68k_op_andi_32_d + 0x8001a380 m68k_op_bhi_16 + 0x800133e4 m68k_op_addi_32_ai + 0x80017228 m68k_op_and_32_re_aw + 0x80022e90 m68k_op_bset_8_r_ix + 0x80032ed8 m68k_op_cmpi_16_di + 0x800124b0 m68k_op_adda_32_pcdi + 0x80017dd0 m68k_op_andi_16_aw + 0x800236f8 m68k_op_bsr_16 + 0x8001b134 m68k_op_bpl_32 + 0x8000f7d8 m68k_op_add_8_er_aw + 0x8001a234 m68k_op_bge_8 + 0x8002fc08 m68k_op_clr_16_ai + 0x80032e34 m68k_op_cmpi_16_pd + 0x800181a0 m68k_op_andi_32_di + 0x80015a8c m68k_op_and_16_er_pd + 0x80029a54 m68k_op_chk_32_pcix + 0x80014c88 m68k_op_addx_32_rr + 0x800163d0 m68k_op_and_32_er_pcix + 0x800272a0 m68k_op_chk_16_ix + 0x8001be44 m68k_op_bchg_8_s_di + 0x800246d0 m68k_op_cas_8_ai + 0x80022978 m68k_op_bkpt + 0x80015520 m68k_op_and_8_er_di + 0x80013abc m68k_op_addq_8_pi + 0x80019fc4 m68k_op_bls_8 + 0x8000ef94 m68k_op_abcd_8_mm_ay7 + 0x8001a09c m68k_op_bne_8 + 0x80011fa8 m68k_op_adda_16_pcdi + 0x8000ea74 m68k_op_1010 + 0x800115d0 m68k_op_add_16_re_al + 0x8002f7c8 m68k_op_clr_8_ai + 0x8001a428 m68k_op_bls_16 + 0x800335b0 m68k_op_cmpi_32_di + 0x8002fbd0 m68k_op_clr_16_d + 0x800215c0 m68k_op_bfset_32_di + 0x8001a1f0 m68k_op_bmi_8 + 0x8000fe4c m68k_op_add_16_er_di + 0x80016f88 m68k_op_and_32_re_pi + 0x800306a4 m68k_op_cmp_8_aw + 0x80028c88 m68k_op_chk_32_di + 0x8002ddd8 m68k_op_chk2cmp2_32_ai + 0x80019a58 m68k_op_asl_16_ai + 0x80017fa4 m68k_op_andi_32_ai + 0x8001a058 m68k_op_bcs_8 + 0x8000f65c m68k_op_add_8_er_di + 0x80016e50 m68k_op_and_16_re_al + 0x8001b690 m68k_op_bchg_8_r_pi7 + 0x80016070 m68k_op_and_32_er_pd + 0x80024418 m68k_op_callm_32_ai + 0x8001a2cc m68k_op_bgt_8 + 0x80012768 m68k_op_addi_8_pi + 0x80031dd8 m68k_op_cmpa_32_d + 0x8002f044 m68k_op_chk2cmp2_32_pcdi + 0x80026410 m68k_op_cas2_32 + 0x8001c140 m68k_op_bclr_8_r_ai + 0x8001826c m68k_op_andi_32_ix + 0x80031898 m68k_op_cmpa_16_pd + 0x80031fe4 m68k_op_cmpa_32_pd + 0x80022c38 m68k_op_bset_8_r_pi7 + 0x80023b9c m68k_op_btst_8_r_aw + 0x8001253c m68k_op_adda_32_pcix + 0x80015bcc m68k_op_and_16_er_ix + 0x80022b14 m68k_op_bset_8_r_ai + 0x80033734 m68k_op_cmpi_32_aw + 0x8002f9f0 m68k_op_clr_8_di + 0x80017b00 m68k_op_andi_16_pi + 0x80016224 m68k_op_and_32_er_aw + 0x80015b1c m68k_op_and_16_er_di + 0x8001ae14 m68k_op_bcs_32 + 0x80015780 m68k_op_and_8_er_pcdi + 0x80031ea4 m68k_op_cmpa_32_ai + 0x800229b4 m68k_op_bra_16 + 0x800131b8 m68k_op_addi_16_aw + 0x80028f5c m68k_op_chk_32_ix + 0x8002f988 m68k_op_clr_8_pd7 + 0x800334fc m68k_op_cmpi_32_pd + 0x80024590 m68k_op_callm_32_al + 0x8001e1e0 m68k_op_bfexts_32_ai + 0x80033a44 m68k_op_cmpm_8_ax7 + 0x8000f300 m68k_op_add_8_er_ai + 0x80011d98 m68k_op_adda_16_di + 0x8002fa7c m68k_op_clr_8_ix + 0x8002fd5c m68k_op_clr_16_di + 0x80021b18 m68k_op_bfset_32_al + 0x800240d8 m68k_op_btst_8_s_di + 0x80011e30 m68k_op_adda_16_ix + 0x80024a34 m68k_op_cas_8_pd + 0x80020634 m68k_op_bfffo_32_pcix + 0x80022498 m68k_op_bftst_32_al + 0x800321ec m68k_op_cmpa_32_aw + 0x800118c4 m68k_op_add_32_re_di + 0x8001a98c m68k_op_bge_16 + 0x8003214c m68k_op_cmpa_32_ix + 0x8001b834 m68k_op_bchg_8_r_di + 0x80030b8c m68k_op_cmp_16_di + 0x8000edec m68k_op_abcd_8_rr + 0x800107f8 m68k_op_add_32_er_aw + 0x80025730 m68k_op_cas_16_aw + 0x8001cadc m68k_op_bclr_8_s_ix + 0x80022a38 m68k_op_bra_32 + 0x80025130 m68k_op_cas_16_ai + 0x8001a5fc m68k_op_bne_16 + 0x8001e510 m68k_op_bfexts_32_ix + 0x80030620 m68k_op_cmp_8_ix + 0x80020048 m68k_op_bfffo_32_aw + 0x8002fecc m68k_op_clr_16_al + 0x8001139c m68k_op_add_16_re_di + 0x80024db8 m68k_op_cas_8_ix + 0x80032870 m68k_op_cmpi_8_di + 0x800190dc m68k_op_asr_16_pi + 0x8001d344 m68k_op_bfchg_32_aw + 0x80031b54 m68k_op_cmpa_16_al + 0x8001357c m68k_op_addi_32_pd + 0x8003036c m68k_op_cmp_8_pi + 0x80033448 m68k_op_cmpi_32_pi + 0x80030cc8 m68k_op_cmp_16_aw + 0x8002d974 m68k_op_chk2cmp2_16_pcix + 0x8002297c m68k_op_bra_8 + 0x80023a90 m68k_op_btst_8_r_di + 0x80020f1c m68k_op_bfins_32_aw + 0x80032088 m68k_op_cmpa_32_di + 0x8001462c m68k_op_addq_32_a + 0x80014acc m68k_op_addq_32_al + 0x80023a24 m68k_op_btst_8_r_pd7 + 0x80031e40 m68k_op_cmpa_32_a + 0x8002c7a0 m68k_op_chk2cmp2_16_ix + 0x800108b4 m68k_op_add_32_er_al + 0x80022d54 m68k_op_bset_8_r_pd7 + 0x80023218 m68k_op_bset_8_s_pi7 + 0x80011c50 m68k_op_adda_16_ai + 0x80032d90 m68k_op_cmpi_16_pi + 0x80011468 m68k_op_add_16_re_ix + 0x80014880 m68k_op_addq_32_di + 0x8001a8f4 m68k_op_bmi_16 + 0x800122b0 m68k_op_adda_32_di + 0x80019b08 m68k_op_asl_16_pi + 0x800196d8 m68k_op_asl_8_r + 0x800294d4 m68k_op_chk_32_al + 0x80013cbc m68k_op_addq_8_pd7 + 0x8000fd94 m68k_op_add_16_er_pd + 0x80022ba0 m68k_op_bset_8_r_pi + 0x80032580 m68k_op_cmpi_8_ai + 0x80017e7c m68k_op_andi_16_al + 0x8001c844 m68k_op_bclr_8_s_pi7 + 0x8001e368 m68k_op_bfexts_32_di + 0x8002405c m68k_op_btst_8_s_pd7 + 0x8001066c m68k_op_add_32_er_di + 0x80030de4 m68k_op_cmp_16_pcdi + 0x80011b28 m68k_op_add_32_re_al + 0x8001df00 m68k_op_bfclr_32_al + 0x80012f58 m68k_op_addi_16_pd + 0x80020b44 m68k_op_bfins_32_di + 0x80018f28 m68k_op_asr_32_r + 0x80024670 m68k_op_callm_32_pcix + 0x8001fc40 m68k_op_bfffo_32_di + 0x8002b5dc m68k_op_chk2cmp2_8_pcdi + 0x800309e4 m68k_op_cmp_16_ai + 0x80017c58 m68k_op_andi_16_di + 0x80022ac8 m68k_op_bset_32_r_d + 0x80032c74 m68k_op_cmpi_16_d + 0x8003303c m68k_op_cmpi_16_aw + 0x800302a0 m68k_op_cmp_8_d + 0x80015820 m68k_op_and_8_er_pcix + 0x80012244 m68k_op_adda_32_pd + 0x80016a64 m68k_op_and_16_re_ai + 0x8002140c m68k_op_bfset_32_ai + 0x80012b0c m68k_op_addi_8_ix + 0x80032af8 m68k_op_cmpi_8_pcdi + 0x800281bc m68k_op_chk_32_d + 0x800210fc m68k_op_bfins_32_al + 0x800140a4 m68k_op_addq_16_a + 0x8001aff4 m68k_op_bvc_32 + 0x80013f88 m68k_op_addq_8_al + 0x80033980 m68k_op_cmpi_32_pcix + 0x8001096c m68k_op_add_32_er_pcdi + 0x8002a414 m68k_op_chk2cmp2_8_di + 0x80019804 m68k_op_asl_16_r + 0x80017028 m68k_op_and_32_re_pd + 0x80017d24 m68k_op_andi_16_ix + 0x80023ecc m68k_op_btst_8_s_pi + 0x800180f4 m68k_op_andi_32_pd + 0x8002fb60 m68k_op_clr_8_al + 0x80019c78 m68k_op_asl_16_di + 0x800232b0 m68k_op_bset_8_s_pd + 0x800172c8 m68k_op_and_32_re_al + 0x8002304c m68k_op_bset_32_s_d + 0x80017368 m68k_op_andi_8_d + 0x80019f70 m68k_op_bhi_8 + 0x8001c0f4 m68k_op_bclr_32_r_d + 0x80019bc0 m68k_op_asl_16_pd + 0x80031180 m68k_op_cmp_32_pd + 0x8001b718 m68k_op_bchg_8_r_pd + 0x8001e6a0 m68k_op_bfexts_32_aw + 0x8002a898 m68k_op_chk2cmp2_8_ix + 0x80015d7c m68k_op_and_16_er_pcdi + 0x8002ffd8 m68k_op_clr_32_pi + 0x80014958 m68k_op_addq_32_ix + 0x800152ec m68k_op_and_8_er_pi + 0x8001c380 m68k_op_bclr_8_r_pd7 + 0x800167c4 m68k_op_and_8_re_di + 0x8000f88c m68k_op_add_8_er_al + 0x80025bf0 m68k_op_cas_32_pd + 0x8000ff24 m68k_op_add_16_er_ix + 0x80029d00 m68k_op_chk_32_i + 0x8003330c m68k_op_cmpi_32_d + 0x80010cd8 m68k_op_add_8_re_pi7 + 0x800169c4 m68k_op_and_8_re_al + 0x800300c0 m68k_op_clr_32_di + 0x80026af0 m68k_op_chk_16_pi + 0x8001d9a8 m68k_op_bfclr_32_di + 0x80014180 m68k_op_addq_16_pi + 0x8003072c m68k_op_cmp_8_al + 0x80029fb0 m68k_op_chk2cmp2_8_ai + 0x8000ee94 m68k_op_abcd_8_mm_ax7 + 0x800302ec m68k_op_cmp_8_ai + 0x800165fc m68k_op_and_8_re_pi7 + 0x80032470 m68k_op_cmpa_32_i + 0x80022150 m68k_op_bftst_32_ix + 0x8002d088 m68k_op_chk2cmp2_16_al + 0x80018dc8 m68k_op_asr_16_r + 0x80021958 m68k_op_bfset_32_aw + 0x80021798 m68k_op_bfset_32_ix + 0x80016d08 m68k_op_and_16_re_ix + 0x8001d6c4 m68k_op_bfclr_32_d + 0x80033e50 m68k_op_cpbcc_32 + 0x8001b8e8 m68k_op_bchg_8_r_ix + 0x80014038 m68k_op_addq_16_d + 0x80016690 m68k_op_and_8_re_pd + 0x800161a0 m68k_op_and_32_er_ix + 0x8001ca18 m68k_op_bclr_8_s_di + 0x8001edf4 m68k_op_bfextu_32_ai + 0x80010214 m68k_op_add_16_er_pcix + 0x80010f88 m68k_op_add_8_re_ix + 0x8001748c m68k_op_andi_8_pi + 0x8002d4fc m68k_op_chk2cmp2_16_pcdi + 0x8001c8dc m68k_op_bclr_8_s_pd + 0x80012d34 m68k_op_addi_16_d + 0x80015f20 m68k_op_and_32_er_d + 0x80011684 m68k_op_add_32_re_ai + 0x80014660 m68k_op_addq_32_ai + 0x8002ba4c m68k_op_chk2cmp2_8_pcix + 0x8001380c m68k_op_addi_32_aw + 0x80027a38 m68k_op_chk_16_pcdi + 0x80019940 m68k_op_asl_32_r + 0x8002f3f4 m68k_op_chk2cmp2_32_pcix + 0x8001118c m68k_op_add_16_re_ai + 0x80026604 m68k_op_chk_16_d + 0x80020970 m68k_op_bfins_32_ai + 0x8001c5e4 m68k_op_bclr_8_r_al + 0x8001bfac m68k_op_bchg_8_s_aw + 0x80015cec m68k_op_and_16_er_al + 0x800260d8 m68k_op_cas_32_al + 0x8002f834 m68k_op_clr_8_pi + 0x80030d58 m68k_op_cmp_16_al + 0x80012e98 m68k_op_addi_16_pi + 0x80034390 m68k_op_cpscc_32 + 0x8000ffd8 m68k_op_add_16_er_aw + 0x8001fe50 m68k_op_bfffo_32_ix + 0x800227e4 m68k_op_bftst_32_pcix + 0x8001b97c m68k_op_bchg_8_r_aw + 0x8001044c m68k_op_add_32_er_ai + 0x800177e0 m68k_op_andi_8_ix + 0x80025860 m68k_op_cas_16_al + 0x8002b170 m68k_op_chk2cmp2_8_al + 0x8003004c m68k_op_clr_32_pd + 0x80034550 m68k_op_cptrapcc_32 + 0x8001bbc8 m68k_op_bchg_8_s_pi + 0x80033898 m68k_op_cmpi_32_pcdi + 0x8002620c m68k_op_cas2_16 + 0x80018318 m68k_op_andi_32_aw + 0x8001bc70 m68k_op_bchg_8_s_pi7 + 0x80023778 m68k_op_bsr_32 + 0x8001a328 m68k_op_ble_8 + 0x800120a8 m68k_op_adda_16_i + 0x800277b0 m68k_op_chk_16_al + 0x80011bec m68k_op_adda_16_d + 0x800175d4 m68k_op_andi_8_pd + 0x8001151c m68k_op_add_16_re_aw + 0x80017a5c m68k_op_andi_16_ai + 0x8001ac28 m68k_op_bhi_32 + 0x800317f0 m68k_op_cmpa_16_pi + 0x800234b0 m68k_op_bset_8_s_ix + 0x8002f914 m68k_op_clr_8_pd + 0x80027524 m68k_op_chk_16_aw + 0x80012c7c m68k_op_addi_8_al + 0x80030230 m68k_op_clr_32_al + 0x800179d8 m68k_op_andi_16_d + 0x8001c408 m68k_op_bclr_8_r_di + 0x80031048 m68k_op_cmp_32_ai + 0x80016884 m68k_op_and_8_re_ix + 0x800304fc m68k_op_cmp_8_pd7 + 0x800121d8 m68k_op_adda_32_pi + 0x8001b7ac m68k_op_bchg_8_r_pd7 + 0x80011234 m68k_op_add_16_re_pi + 0x8001f2b4 m68k_op_bfextu_32_aw + 0x800103d8 m68k_op_add_32_er_a + 0x8001bf08 m68k_op_bchg_8_s_ix + 0x80031aac m68k_op_cmpa_16_aw + 0x80023b28 m68k_op_btst_8_r_ix + 0x8002e17c m68k_op_chk2cmp2_32_di + 0x80017718 m68k_op_andi_8_di + 0x80013a18 m68k_op_addq_8_ai + 0x80011c20 m68k_op_adda_16_a + 0x800329c4 m68k_op_cmpi_8_aw + 0x80030afc m68k_op_cmp_16_pd + 0x80015974 m68k_op_and_16_er_ai + 0x8001e0c0 m68k_op_bfexts_32_d + 0x8002ff3c m68k_op_clr_32_d + 0x8001c050 m68k_op_bchg_8_s_al + 0x800125a8 m68k_op_adda_32_i + 0x800308b8 m68k_op_cmp_8_i + 0x80013018 m68k_op_addi_16_di + 0x80015040 m68k_op_addx_16_mm + 0x80010b88 m68k_op_add_8_re_ai + 0x80024520 m68k_op_callm_32_aw + 0x8001c980 m68k_op_bclr_8_s_pd7 + 0x8001baa4 m68k_op_bchg_32_s_d + 0x80010d78 m68k_op_add_8_re_pd + 0x800303f8 m68k_op_cmp_8_pi7 + 0x80025fa4 m68k_op_cas_32_aw + 0x80022ddc m68k_op_bset_8_r_di + 0x80010e24 m68k_op_add_8_re_pd7 + 0x80014460 m68k_op_addq_16_aw + 0x800243a4 m68k_op_btst_8_s_pcix + 0x8002faec m68k_op_clr_8_aw + 0x8001aa2c m68k_op_blt_16 + 0x8001cb80 m68k_op_bclr_8_s_aw + 0x80023940 m68k_op_btst_8_r_pi7 + 0x8001b56c m68k_op_bchg_8_r_ai + 0x80023354 m68k_op_bset_8_s_pd7 + 0x80012148 m68k_op_adda_32_a + 0x8001a564 m68k_op_bcs_16 + 0x8001b094 m68k_op_bvs_32 + 0x8000f72c m68k_op_add_8_er_ix + 0x800239ac m68k_op_btst_8_r_pd + 0x80012344 m68k_op_adda_32_ix + 0x80011f28 m68k_op_adda_16_al + 0x8000fb44 m68k_op_add_16_er_d + 0x800341d0 m68k_op_cpgen_32 + 0x80014f68 m68k_op_addx_8_mm + 0x80023c14 m68k_op_btst_8_r_al + 0x8001b3c4 m68k_op_bgt_32 + 0x8002fde8 m68k_op_clr_16_ix + 0x80014b88 m68k_op_addx_8_rr + 0x8001c550 m68k_op_bclr_8_r_aw + 0x80019034 m68k_op_asr_16_ai + 0x8001565c m68k_op_and_8_er_aw + 0x8002e8ec m68k_op_chk2cmp2_32_aw + 0x8003339c m68k_op_cmpi_32_ai + 0x80025258 m68k_op_cas_16_pi + 0x80012bc4 m68k_op_addi_8_aw + 0x80034010 m68k_op_cpdbcc_32 + 0x800314b8 m68k_op_cmp_32_pcdi + 0x8001d184 m68k_op_bfchg_32_ix + 0x8001373c m68k_op_addi_32_ix + 0x80016c44 m68k_op_and_16_re_di + 0x80013ed8 m68k_op_addq_8_aw + 0x800244b0 m68k_op_callm_32_ix + 0x80020438 m68k_op_bfffo_32_pcdi + 0x8002cc14 m68k_op_chk2cmp2_16_aw + 0x80016924 m68k_op_and_8_re_aw + 0x80013b6c m68k_op_addq_8_pi7 + 0x8002bea8 m68k_op_chk2cmp2_16_ai + 0x8002fce8 m68k_op_clr_16_pd + 0x8001acc8 m68k_op_bls_32 + 0x80016558 m68k_op_and_8_re_pi + 0x80014d0c m68k_op_addx_8_mm_ax7 + 0x8001a014 m68k_op_bcc_8 + 0x80025d24 m68k_op_cas_32_di + 0x80012de0 m68k_op_addi_16_ai + 0x80010744 m68k_op_add_32_er_ix + 0x8001bdac m68k_op_bchg_8_s_pd7 + 0x8001a694 m68k_op_beq_16 + 0x8000fa9c m68k_op_add_8_er_i + 0x8001aeb4 m68k_op_bne_32 + 0x800173ec m68k_op_andi_8_ai + 0x80033684 m68k_op_cmpi_32_ix + 0x80031220 m68k_op_cmp_32_di + 0x8001c4bc m68k_op_bclr_8_r_ix + 0x80022cc0 m68k_op_bset_8_r_pd + 0x80024ee0 m68k_op_cas_8_aw + 0x8001cdf8 m68k_op_bfchg_32_ai + 0x80019514 m68k_op_asl_8_s + 0x80030e80 m68k_op_cmp_16_pcix + 0x800183c4 m68k_op_andi_32_al + 0x800104fc m68k_op_add_32_er_pi + 0x80018bdc m68k_op_asr_32_s + 0x8001eb54 m68k_op_bfexts_32_pcix + 0x800105b4 m68k_op_add_32_er_pd + 0x80032bc8 m68k_op_cmpi_8_pcix + 0x80015380 m68k_op_and_8_er_pi7 + 0x8001c678 m68k_op_bclr_32_s_d + 0x80016afc m68k_op_and_16_re_pi + 0x80019304 m68k_op_asr_16_ix + 0x80032a60 m68k_op_cmpi_8_al + 0x80011ea4 m68k_op_adda_16_aw + 0x80033180 m68k_op_cmpi_16_pcdi + 0x8001ba10 m68k_op_bchg_8_r_al + 0x80030844 m68k_op_cmp_8_pcix + 0x8001cfac m68k_op_bfchg_32_di + 0x800327e0 m68k_op_cmpi_8_pd7 + 0x80026870 m68k_op_chk_16_ai + 0x8003141c m68k_op_cmp_32_al + 0x8002845c m68k_op_chk_32_ai + 0x80029790 m68k_op_chk_32_pcdi + 0x800254b8 m68k_op_cas_16_di + 0x8000f504 m68k_op_add_8_er_pd + 0x8001923c m68k_op_asr_16_di + 0x80012038 m68k_op_adda_16_pcix + 0x80016338 m68k_op_and_32_er_pcdi + 0x80015fe8 m68k_op_and_32_er_pi + 0x80018adc m68k_op_asr_8_s + 0x8001918c m68k_op_asr_16_pd + 0x80023f58 m68k_op_btst_8_s_pi7 + 0x80015c58 m68k_op_and_16_er_aw + 0x80010adc m68k_op_add_32_er_i + 0x80033c24 m68k_op_cmpm_8 + .text 0x80034710 0x22270 m68kopdm.o + 0x8004d220 m68k_op_move_16_toc_d + 0x80051c54 m68k_op_movem_16_er_di + 0x80042d24 m68k_op_move_8_pd7_pi7 + 0x8003b600 m68k_op_divl_32_aw + 0x800461c0 m68k_op_move_16_ai_pcdi + 0x80048280 m68k_op_move_16_aw_di + 0x800532d4 m68k_op_moves_8_di + 0x80048e84 m68k_op_move_32_d_pd + 0x80040e50 m68k_op_lsl_16_al + 0x8004950c m68k_op_move_32_ai_di + 0x8003e81c m68k_op_eori_32_d + 0x80035ae8 m68k_op_divs_16_d + 0x8004cc40 m68k_op_movea_32_pcix + 0x8003f928 m68k_op_jsr_32_pcdi + 0x8003fe58 m68k_op_lsr_8_s + 0x80054adc m68k_op_muls_16_di + 0x800550f8 m68k_op_mulu_16_di + 0x80043b68 m68k_op_move_8_di_pi7 + 0x8003fb14 m68k_op_lea_32_al + 0x8004bf10 m68k_op_move_32_al_pi + 0x80042c8c m68k_op_move_8_pd7_pi + 0x800359f0 m68k_op_dble_16 + 0x800419b8 m68k_op_move_8_ai_aw + 0x8003542c m68k_op_dbvs_16 + 0x8003e9f8 m68k_op_eori_32_pd + 0x800468b4 m68k_op_move_16_pi_pcdi + 0x8003fc0c m68k_op_link_16_a7 + 0x8004db78 m68k_op_move_16_frs_ix + 0x80046ca4 m68k_op_move_16_pd_pd + 0x80054a40 m68k_op_muls_16_pd + 0x8005453c m68k_op_moves_32_ix + 0x800445b8 m68k_op_move_8_ix_ix + 0x8003d648 m68k_op_eor_16_di + 0x80053438 m68k_op_moves_8_ix + 0x8003deac m68k_op_eori_8_pi + 0x80041888 m68k_op_move_8_ai_di + 0x80053d20 m68k_op_moves_16_ix + 0x80051a4c m68k_op_movem_16_er_pi + 0x8004a734 m68k_op_move_32_pd_pcix + 0x8004c668 m68k_op_movea_16_ix + 0x8004c21c m68k_op_move_32_al_al + 0x8003551c m68k_op_dbpl_16 + 0x8003d7a4 m68k_op_eor_16_aw + 0x8004c190 m68k_op_move_32_al_aw + 0x800528f0 m68k_op_movem_32_er_pcix + 0x80046458 m68k_op_move_16_pi_ai + 0x80054f38 m68k_op_mulu_16_ai + 0x80053fa4 m68k_op_moves_16_al + 0x80042e44 m68k_op_move_8_pd7_pd7 + 0x8004bd6c m68k_op_move_32_al_d + 0x800423d0 m68k_op_move_8_pi_ai + 0x80047c88 m68k_op_move_16_ix_ix + 0x8003e1a8 m68k_op_eori_8_ix + 0x80046fc0 m68k_op_move_16_pd_pcdi + 0x8003f3c0 m68k_op_extb_32 + 0x8004b730 m68k_op_move_32_aw_d + 0x80046598 m68k_op_move_16_pi_pd + 0x80043f44 m68k_op_move_8_di_al + 0x80040244 m68k_op_lsr_16_ai + 0x8003ac48 m68k_op_divl_32_di + 0x8004c964 m68k_op_movea_32_pi + 0x80044650 m68k_op_move_8_ix_aw + 0x80045a44 m68k_op_move_16_d_aw + 0x8004d6b8 m68k_op_move_16_toc_i + 0x800473e8 m68k_op_move_16_di_pd + 0x80043450 m68k_op_move_8_pd_pd + 0x8004a680 m68k_op_move_32_pd_pcdi + 0x800420b8 m68k_op_move_8_pi7_ix + 0x8003eb64 m68k_op_eori_32_ix + 0x80043d54 m68k_op_move_8_di_di + 0x8005157c m68k_op_movem_32_re_ai + 0x8004435c m68k_op_move_8_ix_pi7 + 0x80043988 m68k_op_move_8_di_d + 0x8004a9b4 m68k_op_move_32_di_ai + 0x8005186c m68k_op_movem_32_re_aw + 0x8003d0d8 m68k_op_eor_8_pd7 + 0x8003fa78 m68k_op_lea_32_ix + 0x800470e8 m68k_op_move_16_pd_i + 0x8003e3d4 m68k_op_eori_16_ai + 0x80049bf0 m68k_op_move_32_pi_di + 0x80053e70 m68k_op_moves_16_aw + 0x800442bc m68k_op_move_8_ix_pi + 0x8003da74 m68k_op_eor_32_pd + 0x8004b1d8 m68k_op_move_32_ix_pi + 0x8003e77c m68k_op_eori_16_al + 0x8004c34c m68k_op_move_32_al_pcix + 0x8005465c m68k_op_moves_32_aw + 0x8003ec18 m68k_op_eori_32_aw + 0x800402dc m68k_op_lsr_16_pi + 0x80050f8c m68k_op_movem_16_re_ai + 0x800489a0 m68k_op_move_16_al_ix + 0x80050a88 m68k_op_move_32_fru + 0x80040b2c m68k_op_lsl_16_pi + 0x800480d8 m68k_op_move_16_aw_ai + 0x8004513c m68k_op_move_8_al_pi7 + 0x8004c494 m68k_op_movea_16_a + 0x80046df0 m68k_op_move_16_pd_ix + 0x8004c584 m68k_op_movea_16_pd + 0x8004ac70 m68k_op_move_32_di_ix + 0x8004d360 m68k_op_move_16_toc_pd + 0x80048d00 m68k_op_move_32_d_d + 0x8003f5b8 m68k_op_jmp_32_al + 0x8004bdf0 m68k_op_move_32_al_a + 0x80043cb4 m68k_op_move_8_di_pd7 + 0x80042514 m68k_op_move_8_pi_pi7 + 0x80051e58 m68k_op_movem_16_er_aw + 0x8004b8a4 m68k_op_move_32_aw_pi + 0x80053198 m68k_op_moves_8_pd7 + 0x8003560c m68k_op_dbmi_16 + 0x80043280 m68k_op_move_8_pd_ai + 0x8004037c m68k_op_lsr_16_pd + 0x8003d030 m68k_op_eor_8_pd + 0x8003dfdc m68k_op_eori_8_pd + 0x8003d9cc m68k_op_eor_32_pi + 0x8003d6f8 m68k_op_eor_16_ix + 0x8004663c m68k_op_move_16_pi_di + 0x8003ecb8 m68k_op_eori_32_al + 0x8003bfa0 m68k_op_divl_32_pcdi + 0x8004ccf4 m68k_op_move_16_frc_d + 0x8004caa4 m68k_op_movea_32_ix + 0x80052620 m68k_op_movem_32_er_aw + 0x80051180 m68k_op_movem_16_re_ix + 0x80042f68 m68k_op_move_8_pd7_ix + 0x80052ddc m68k_op_moves_8_pi + 0x80040c74 m68k_op_lsl_16_di + 0x80045398 m68k_op_move_8_al_ix + 0x8003d83c m68k_op_eor_16_al + 0x8003d220 m68k_op_eor_8_ix + 0x80043190 m68k_op_move_8_pd7_pcix + 0x800496cc m68k_op_move_32_ai_al + 0x8003a290 m68k_op_divl_32_pi + 0x80054910 m68k_op_muls_16_ai + 0x80054fc8 m68k_op_mulu_16_pi + 0x80038358 m68k_op_divu_16_pd + 0x8003e5ac m68k_op_eori_16_di + 0x80042b08 m68k_op_move_8_pd7_d + 0x8004987c m68k_op_move_32_ai_i + 0x800360b4 m68k_op_divs_16_pi + 0x80052330 m68k_op_movem_32_er_ai + 0x800495ac m68k_op_move_32_ai_ix + 0x8003786c m68k_op_divs_16_i + 0x80055060 m68k_op_mulu_16_pd + 0x800433bc m68k_op_move_8_pd_pi7 + 0x80043078 m68k_op_move_8_pd7_al + 0x8004a518 m68k_op_move_32_pd_aw + 0x80053588 m68k_op_moves_8_aw + 0x80053804 m68k_op_moves_16_ai + 0x80048698 m68k_op_move_16_al_a + 0x800493d4 m68k_op_move_32_ai_pi + 0x8004c6d4 m68k_op_movea_16_aw + 0x8004d70c m68k_op_move_16_frs_d + 0x8003f2bc m68k_op_exg_32_aa + 0x8004cf5c m68k_op_move_16_frc_di + 0x8004b458 m68k_op_move_32_ix_aw + 0x8004c874 m68k_op_movea_16_i + 0x800404c0 m68k_op_lsr_16_ix + 0x8003fb6c m68k_op_lea_32_pcdi + 0x80041ccc m68k_op_move_8_pi_d + 0x80034e8c m68k_op_dbls_16 + 0x80044f88 m68k_op_move_8_al_d + 0x8003d174 m68k_op_eor_8_di + 0x8003fad0 m68k_op_lea_32_aw + 0x80043750 m68k_op_move_8_pd_al + 0x8003dc70 m68k_op_eor_32_aw + 0x80043c08 m68k_op_move_8_di_pd + 0x80040dc0 m68k_op_lsl_16_aw + 0x80037de8 m68k_op_divu_16_ai + 0x800366a4 m68k_op_divs_16_di + 0x8003e944 m68k_op_eori_32_pi + 0x80051b5c m68k_op_movem_16_er_ai + 0x80042020 m68k_op_move_8_pi7_di + 0x80047880 m68k_op_move_16_di_i + 0x80050abc m68k_op_move_32_tou + 0x8003d404 m68k_op_eor_16_d + 0x80043a14 m68k_op_move_8_di_ai + 0x8004694c m68k_op_move_16_pi_pcix + 0x800358ec m68k_op_dbgt_16 + 0x80041f00 m68k_op_move_8_pi7_pd + 0x80054b84 m68k_op_muls_16_ix + 0x80046250 m68k_op_move_16_ai_pcix + 0x8003e6f0 m68k_op_eori_16_aw + 0x80047ee0 m68k_op_move_16_ix_pcix + 0x8004a45c m68k_op_move_32_pd_ix + 0x800464f4 m68k_op_move_16_pi_pi + 0x8004a024 m68k_op_move_32_pd_d + 0x80044970 m68k_op_move_8_aw_ai + 0x80047db0 m68k_op_move_16_ix_al + 0x8004c4bc m68k_op_movea_16_ai + 0x8004bfb0 m68k_op_move_32_al_pd + 0x800477e4 m68k_op_move_16_di_pcix + 0x80049c98 m68k_op_move_32_pi_ix + 0x80043fec m68k_op_move_8_di_pcdi + 0x800407b4 m68k_op_lsl_8_r + 0x8004dd40 m68k_op_move_16_frs_al + 0x8003f31c m68k_op_ext_16 + 0x8004885c m68k_op_move_16_al_pd + 0x80052800 m68k_op_movem_32_er_pcdi + 0x8004c2b8 m68k_op_move_32_al_pcdi + 0x80041a3c m68k_op_move_8_ai_al + 0x800415ac m68k_op_move_8_ai_ai + 0x80044ea8 m68k_op_move_8_aw_pcix + 0x8003fcf0 m68k_op_link_32_a7 + 0x8004c51c m68k_op_movea_16_pi + 0x800446d8 m68k_op_move_8_ix_al + 0x80052424 m68k_op_movem_32_er_di + 0x8004805c m68k_op_move_16_aw_a + 0x8003ce4c m68k_op_eor_8_ai + 0x80035dc4 m68k_op_divs_16_ai + 0x8004cb68 m68k_op_movea_32_al + 0x800357f4 m68k_op_dblt_16 + 0x80045730 m68k_op_move_16_d_a + 0x8004b318 m68k_op_move_32_ix_di + 0x800428c0 m68k_op_move_8_pi_al + 0x80051360 m68k_op_movem_16_re_al + 0x8004d554 m68k_op_move_16_toc_al + 0x800492c8 m68k_op_move_32_ai_a + 0x800462d8 m68k_op_move_16_ai_i + 0x80043e04 m68k_op_move_8_di_ix + 0x80044518 m68k_op_move_8_ix_di + 0x8004da78 m68k_op_move_16_frs_di + 0x80052bdc m68k_op_movep_32_er + 0x80052f1c m68k_op_moves_8_pi7 + 0x8004af08 m68k_op_move_32_di_pcix + 0x80049078 m68k_op_move_32_d_al + 0x8004a2d8 m68k_op_move_32_pd_pd + 0x8003e46c m68k_op_eori_16_pi + 0x8004d2e0 m68k_op_move_16_toc_pi + 0x80044da0 m68k_op_move_8_aw_al + 0x8003f560 m68k_op_jmp_32_aw + 0x8003f464 m68k_op_jmp_32_di + 0x80043eac m68k_op_move_8_di_aw + 0x800412e4 m68k_op_move_8_d_aw + 0x8003524c m68k_op_dbeq_16 + 0x8004c7a4 m68k_op_movea_16_pcdi + 0x800443ec m68k_op_move_8_ix_pd + 0x8004c8e4 m68k_op_movea_32_a + 0x8003f7ec m68k_op_jsr_32_ix + 0x8004b4e4 m68k_op_move_32_ix_al + 0x80040894 m68k_op_lsl_16_r + 0x800388e4 m68k_op_divu_16_ix + 0x80055a70 m68k_op_mull_32_pd + 0x8004d46c m68k_op_move_16_toc_ix + 0x8003e898 m68k_op_eori_32_ai + 0x8004b0c4 m68k_op_move_32_ix_a + 0x80045ca4 m68k_op_move_16_ai_d + 0x80054768 m68k_op_moves_32_al + 0x80042a88 m68k_op_move_8_pi_i + 0x80040560 m68k_op_lsr_16_aw + 0x80040fc0 m68k_op_move_8_d_pi + 0x8004dc64 m68k_op_move_16_frs_aw + 0x8004afa4 m68k_op_move_32_di_i + 0x8004e224 m68k_op_move_16_tos_ai + 0x8004cb0c m68k_op_movea_32_aw + 0x80048bf8 m68k_op_move_16_al_pcix + 0x80045924 m68k_op_move_16_d_di + 0x8004841c m68k_op_move_16_aw_al + 0x8003f770 m68k_op_jsr_32_di + 0x8004c0f4 m68k_op_move_32_al_ix + 0x80041260 m68k_op_move_8_d_ix + 0x80040f40 m68k_op_move_8_d_ai + 0x80042ed0 m68k_op_move_8_pd7_di + 0x80041924 m68k_op_move_8_ai_ix + 0x8004580c m68k_op_move_16_d_pi + 0x8003fc68 m68k_op_link_16 + 0x8004cc9c m68k_op_movea_32_i + 0x8004cbd4 m68k_op_movea_32_pcdi + 0x80047b44 m68k_op_move_16_ix_pd + 0x80055c58 m68k_op_mull_32_di + 0x80050ca4 m68k_op_movec_32_rc + 0x80037b44 m68k_op_divu_16_d + 0x80043628 m68k_op_move_8_pd_ix + 0x80045788 m68k_op_move_16_d_ai + 0x80049644 m68k_op_move_32_ai_aw + 0x80048b64 m68k_op_move_16_al_pcdi + 0x80055888 m68k_op_mull_32_pi + 0x800554e8 m68k_op_mull_32_d + 0x80044e28 m68k_op_move_8_aw_pcdi + 0x800483a0 m68k_op_move_16_aw_aw + 0x8004de2c m68k_op_move_16_tos_d + 0x80050298 m68k_op_move_16_tos_pcix + 0x8004408c m68k_op_move_8_di_pcix + 0x80049dc8 m68k_op_move_32_pi_al + 0x80052704 m68k_op_movem_32_er_al + 0x800410c8 m68k_op_move_8_d_pd + 0x80047290 m68k_op_move_16_di_ai + 0x800422e0 m68k_op_move_8_pi7_pcix + 0x8004bc70 m68k_op_move_32_aw_pcix + 0x8003f290 m68k_op_exg_32_dd + 0x8004ee58 m68k_op_move_16_tos_di + 0x80046814 m68k_op_move_16_pi_al + 0x80048d8c m68k_op_move_32_d_ai + 0x8004d268 m68k_op_move_16_toc_ai + 0x8003e108 m68k_op_eori_8_di + 0x8004c734 m68k_op_movea_16_al + 0x800393c8 m68k_op_divu_16_pcix + 0x80052134 m68k_op_movem_16_er_pcix + 0x80044888 m68k_op_move_8_ix_i + 0x8003515c m68k_op_dbne_16 + 0x80042c00 m68k_op_move_8_pd7_ai + 0x8004390c m68k_op_move_8_pd_i + 0x8003db1c m68k_op_eor_32_di + 0x80046784 m68k_op_move_16_pi_aw + 0x80054d44 m68k_op_muls_16_pcdi + 0x8003d450 m68k_op_eor_16_ai + 0x80040bd0 m68k_op_lsl_16_pd + 0x80046b64 m68k_op_move_16_pd_ai + 0x80054e6c m68k_op_muls_16_i + 0x8003f994 m68k_op_jsr_32_pcix + 0x80047168 m68k_op_move_16_di_d + 0x8003ed6c m68k_op_eori_16_toc + 0x800563ec m68k_op_mull_32_pcdi + 0x8003f6a4 m68k_op_jmp_32_pcix + 0x800405ec m68k_op_lsr_16_al + 0x80048f90 m68k_op_move_32_d_ix + 0x8003de18 m68k_op_eori_8_ai + 0x8004f270 m68k_op_move_16_tos_ix + 0x80042db0 m68k_op_move_8_pd7_pd + 0x8004adb8 m68k_op_move_32_di_al + 0x80045898 m68k_op_move_16_d_pd + 0x8003d35c m68k_op_eor_8_al + 0x80047be4 m68k_op_move_16_ix_di + 0x80045bcc m68k_op_move_16_d_pcix + 0x80041d50 m68k_op_move_8_pi7_ai + 0x8004b140 m68k_op_move_32_ix_ai + 0x80045c44 m68k_op_move_16_d_i + 0x80050e80 m68k_op_movem_16_re_pd + 0x8004fa80 m68k_op_move_16_tos_al + 0x80051950 m68k_op_movem_32_re_al + 0x80052a6c m68k_op_movep_32_re + 0x80043210 m68k_op_move_8_pd7_i + 0x8004d8a4 m68k_op_move_16_frs_pi + 0x80042960 m68k_op_move_8_pi_pcdi + 0x8003ce04 m68k_op_eor_8_d + 0x80054888 m68k_op_moveq_32 + 0x80041150 m68k_op_move_8_d_pd7 + 0x80053bbc m68k_op_moves_16_di + 0x800460a0 m68k_op_move_16_ai_aw + 0x8003b128 m68k_op_divl_32_ix + 0x800363ac m68k_op_divs_16_pd + 0x8004104c m68k_op_move_8_d_pi7 + 0x80042650 m68k_op_move_8_pi_pd7 + 0x800471f8 m68k_op_move_16_di_a + 0x8003e50c m68k_op_eori_16_pd + 0x8004c8b8 m68k_op_movea_32_d + 0x8003f370 m68k_op_ext_32 + 0x8003e244 m68k_op_eori_8_aw + 0x80044d28 m68k_op_move_8_aw_aw + 0x80047a0c m68k_op_move_16_ix_ai + 0x80041ad0 m68k_op_move_8_ai_pcdi + 0x8004b7a4 m68k_op_move_32_aw_a + 0x80051f40 m68k_op_movem_16_er_al + 0x8003533c m68k_op_dbvc_16 + 0x80053a7c m68k_op_moves_16_pd + 0x8004b614 m68k_op_move_32_ix_pcix + 0x8003809c m68k_op_divu_16_pi + 0x80045430 m68k_op_move_8_al_aw + 0x8003f62c m68k_op_jmp_32_pcdi + 0x80048e04 m68k_op_move_32_d_pi + 0x80052ca4 m68k_op_moves_8_ai + 0x80047fe8 m68k_op_move_16_aw_d + 0x800481f0 m68k_op_move_16_aw_pd + 0x8003d930 m68k_op_eor_32_ai + 0x8003f424 m68k_op_illegal + 0x80048d44 m68k_op_move_32_d_a + 0x8004041c m68k_op_lsr_16_di + 0x80043318 m68k_op_move_8_pd_pi + 0x80045e30 m68k_op_move_16_ai_pi + 0x8004d5d0 m68k_op_move_16_toc_pcdi + 0x8003ff20 m68k_op_lsr_32_s + 0x8003fbc4 m68k_op_lea_32_pcix + 0x8003c470 m68k_op_divl_32_pcix + 0x800454b8 m68k_op_move_8_al_al + 0x800434f0 m68k_op_move_8_pd_pd7 + 0x80048c84 m68k_op_move_16_al_i + 0x8004bae4 m68k_op_move_32_aw_aw + 0x8004ad1c m68k_op_move_32_di_aw + 0x800484a8 m68k_op_move_16_aw_pcdi + 0x8005127c m68k_op_movem_16_re_aw + 0x8004f680 m68k_op_move_16_tos_aw + 0x8004005c m68k_op_lsr_16_r + 0x80054de0 m68k_op_muls_16_pcix + 0x8004b934 m68k_op_move_32_aw_pd + 0x8003bac8 m68k_op_divl_32_al + 0x8003d59c m68k_op_eor_16_pd + 0x80044770 m68k_op_move_8_ix_pcdi + 0x80049f90 m68k_op_move_32_pi_i + 0x80046f20 m68k_op_move_16_pd_al + 0x8004c468 m68k_op_movea_16_d + 0x800417fc m68k_op_move_8_ai_pd7 + 0x800565d4 m68k_op_mull_32_pcix + 0x800459bc m68k_op_move_16_d_ix + 0x8004e630 m68k_op_move_16_tos_pi + 0x800452f8 m68k_op_move_8_al_di + 0x80044b04 m68k_op_move_8_aw_pd + 0x800451cc m68k_op_move_8_al_pd + 0x80048f04 m68k_op_move_32_d_di + 0x8004b6a0 m68k_op_move_32_ix_i + 0x8004d4e8 m68k_op_move_16_toc_aw + 0x8004bbec m68k_op_move_32_aw_pcdi + 0x80044b90 m68k_op_move_8_aw_pd7 + 0x8004b278 m68k_op_move_32_ix_pd + 0x8005519c m68k_op_mulu_16_ix + 0x80045668 m68k_op_move_8_al_i + 0x80040ef4 m68k_op_move_8_d_d + 0x80047e4c m68k_op_move_16_ix_pcdi + 0x80041764 m68k_op_move_8_ai_pd + 0x8003f428 m68k_op_jmp_32_ai + 0x80034f7c m68k_op_dbcc_16 + 0x8004c908 m68k_op_movea_32_ai + 0x80044ca0 m68k_op_move_8_aw_ix + 0x8004a160 m68k_op_move_32_pd_ai + 0x80053058 m68k_op_moves_8_pd + 0x8004900c m68k_op_move_32_d_aw + 0x80039dbc m68k_op_divl_32_ai + 0x80048160 m68k_op_move_16_aw_pi + 0x8004ae64 m68k_op_move_32_di_pcdi + 0x8004ce0c m68k_op_move_16_frc_pi + 0x8003e368 m68k_op_eori_16_d + 0x800425ac m68k_op_move_8_pi_pd + 0x800466e4 m68k_op_move_16_pi_ix + 0x80041ddc m68k_op_move_8_pi7_pi + 0x800491dc m68k_op_move_32_d_i + 0x80052524 m68k_op_movem_32_er_ix + 0x8004abbc m68k_op_move_32_di_di + 0x8003e650 m68k_op_eori_16_ix + 0x800441ac m68k_op_move_8_ix_d + 0x8004b9c4 m68k_op_move_32_aw_di + 0x80052040 m68k_op_movem_16_er_pcdi + 0x8003cf94 m68k_op_eor_8_pi7 + 0x8004a920 m68k_op_move_32_di_a + 0x80047338 m68k_op_move_16_di_pi + 0x8004ceb4 m68k_op_move_16_frc_pd + 0x800488fc m68k_op_move_16_al_di + 0x800449f4 m68k_op_move_8_aw_pi + 0x80040148 m68k_op_lsr_32_r + 0x80044f20 m68k_op_move_8_aw_i + 0x80054ca8 m68k_op_muls_16_al + 0x80043584 m68k_op_move_8_pd_di + 0x8004d3e0 m68k_op_move_16_toc_di + 0x80055230 m68k_op_mulu_16_aw + 0x80041358 m68k_op_move_8_d_al + 0x80043ab8 m68k_op_move_8_di_pi + 0x80037284 m68k_op_divs_16_pcdi + 0x80054ee8 m68k_op_mulu_16_d + 0x80042148 m68k_op_move_8_pi7_aw + 0x8004d7c4 m68k_op_move_16_frs_ai + 0x8004790c m68k_op_move_16_ix_d + 0x8003df4c m68k_op_eori_8_pi7 + 0x80047694 m68k_op_move_16_di_al + 0x80041534 m68k_op_move_8_ai_d + 0x80046128 m68k_op_move_16_ai_al + 0x800463d4 m68k_op_move_16_pi_a + 0x8004852c m68k_op_move_16_aw_pcix + 0x80045f68 m68k_op_move_16_ai_di + 0x8004b580 m68k_op_move_32_ix_pcdi + 0x8003f9f4 m68k_op_lea_32_ai + 0x80042b80 m68k_op_move_8_pd_d + 0x8003e2cc m68k_op_eori_8_al + 0x80049d38 m68k_op_move_32_pi_aw + 0x800416d8 m68k_op_move_8_ai_pi7 + 0x800413dc m68k_op_move_8_d_pcdi + 0x80044c10 m68k_op_move_8_aw_di + 0x800497f4 m68k_op_move_32_ai_pcix + 0x8003ee34 m68k_op_eori_16_tos + 0x8004a7e0 m68k_op_move_32_pd_i + 0x8003eaac m68k_op_eori_32_di + 0x800490f4 m68k_op_move_32_d_pcdi + 0x8004a0c4 m68k_op_move_32_pd_a + 0x800542fc m68k_op_moves_32_pd + 0x80040a90 m68k_op_lsl_16_ai + 0x8003f8b8 m68k_op_jsr_32_al + 0x8004cd6c m68k_op_move_16_frc_ai + 0x80054c1c m68k_op_muls_16_aw + 0x8003f85c m68k_op_jsr_32_aw + 0x80049908 m68k_op_move_32_pi_d + 0x80046350 m68k_op_move_16_pi_d + 0x80046ae0 m68k_op_move_16_pd_a + 0x800436c4 m68k_op_move_8_pd_aw + 0x8004a398 m68k_op_move_32_pd_di + 0x80056034 m68k_op_mull_32_aw + 0x8003f708 m68k_op_jsr_32_ai + 0x800411cc m68k_op_move_8_d_di + 0x800469dc m68k_op_move_16_pi_i + 0x8004246c m68k_op_move_8_pi_pi + 0x80045268 m68k_op_move_8_al_pd7 + 0x8004163c m68k_op_move_8_ai_pi + 0x80039674 m68k_op_divu_16_i + 0x80045b44 m68k_op_move_16_d_pcdi + 0x8005145c m68k_op_movem_32_re_pd + 0x80047498 m68k_op_move_16_di_di + 0x8003f4ec m68k_op_jmp_32_ix + 0x80051670 m68k_op_movem_32_re_di + 0x80052224 m68k_op_movem_32_er_pi + 0x8003d8e8 m68k_op_eor_32_d + 0x80038b9c m68k_op_divu_16_aw + 0x80043880 m68k_op_move_8_pd_pcix + 0x800421c8 m68k_op_move_8_pi7_al + 0x800556a8 m68k_op_mull_32_ai + 0x80049470 m68k_op_move_32_ai_pd + 0x80051080 m68k_op_movem_16_re_di + 0x80039910 m68k_op_divl_32_d + 0x8003506c m68k_op_dbcs_16 + 0x8003cee8 m68k_op_eor_8_pi + 0x80047058 m68k_op_move_16_pd_pcix + 0x80034d90 m68k_op_dbhi_16 + 0x80042360 m68k_op_move_8_pi7_i + 0x800414d4 m68k_op_move_8_d_i + 0x800475f8 m68k_op_move_16_di_aw + 0x80055470 m68k_op_mulu_16_i + 0x8004c5ec m68k_op_movea_16_di + 0x800548c0 m68k_op_muls_16_d + 0x8004a218 m68k_op_move_32_pd_pi + 0x8003fa18 m68k_op_lea_32_di + 0x8004a5c4 m68k_op_move_32_pd_al + 0x80037584 m68k_op_divs_16_pcix + 0x80036f8c m68k_op_divs_16_al + 0x8003d2c8 m68k_op_eor_8_aw + 0x80042ff8 m68k_op_move_8_pd7_aw + 0x80044124 m68k_op_move_8_di_i + 0x8004b044 m68k_op_move_32_ix_d + 0x80046a5c m68k_op_move_16_pd_d + 0x80049764 m68k_op_move_32_ai_pcdi + 0x8004fe90 m68k_op_move_16_tos_pcdi + 0x800485a8 m68k_op_move_16_aw_i + 0x80055350 m68k_op_mulu_16_pcdi + 0x80042258 m68k_op_move_8_pi7_pcdi + 0x8003dbc8 m68k_op_eor_32_ix + 0x800541f0 m68k_op_moves_32_pi + 0x8004ba58 m68k_op_move_32_aw_ix + 0x800356fc m68k_op_dbge_16 + 0x8003a76c m68k_op_divl_32_pd + 0x800369b0 m68k_op_divs_16_ix + 0x8004ca2c m68k_op_movea_32_di + 0x80051d58 m68k_op_movem_16_er_ix + 0x80040758 m68k_op_lsl_32_s + 0x80040980 m68k_op_lsl_32_r + 0x8004d170 m68k_op_move_16_frc_al + 0x800437ec m68k_op_move_8_pd_pcdi + 0x80044a84 m68k_op_move_8_aw_pi7 + 0x8004d0d0 m68k_op_move_16_frc_aw + 0x80034cdc m68k_op_dbt_16 + 0x8003e078 m68k_op_eori_8_pd7 + 0x8004924c m68k_op_move_32_ai_d + 0x80046e90 m68k_op_move_16_pd_aw + 0x80038614 m68k_op_divu_16_di + 0x80048724 m68k_op_move_16_al_ai + 0x8003ff78 m68k_op_lsr_8_r + 0x800536bc m68k_op_moves_8_al + 0x80048ac8 m68k_op_move_16_al_al + 0x800553e8 m68k_op_mulu_16_pcix + 0x8004068c m68k_op_lsl_8_s + 0x80055e50 m68k_op_mull_32_ix + 0x80049a0c m68k_op_move_32_pi_ai + 0x8004d020 m68k_op_move_16_frc_ix + 0x8003fd8c m68k_op_link_32 + 0x80045d9c m68k_op_move_16_ai_ai + 0x800406ec m68k_op_lsl_16_s + 0x80048614 m68k_op_move_16_al_d + 0x80044800 m68k_op_move_8_ix_pcix + 0x80046008 m68k_op_move_16_ai_ix + 0x80036ca4 m68k_op_divs_16_aw + 0x80048314 m68k_op_move_16_aw_ix + 0x80049340 m68k_op_move_32_ai_ai + 0x80034cf4 m68k_op_dbf_16 + 0x8004c9c8 m68k_op_movea_32_pd + 0x80041e74 m68k_op_move_8_pi7_pi7 + 0x800487bc m68k_op_move_16_al_pi + 0x8003f2e8 m68k_op_exg_32_da + 0x800429f8 m68k_op_move_8_pi_pcix + 0x80049170 m68k_op_move_32_d_pcix + 0x80045abc m68k_op_move_16_d_al + 0x80050698 m68k_op_move_16_tos_i + 0x80041b5c m68k_op_move_8_ai_pcix + 0x80044488 m68k_op_move_8_ix_pd7 + 0x80040d1c m68k_op_lsl_16_ix + 0x80047d24 m68k_op_move_16_ix_aw + 0x8004b3bc m68k_op_move_32_ix_ix + 0x800455e0 m68k_op_move_8_al_pcix + 0x80041be0 m68k_op_move_8_ai_i + 0x8004a890 m68k_op_move_32_di_d + 0x80043108 m68k_op_move_8_pd7_pcdi + 0x800552b8 m68k_op_mulu_16_al + 0x80044228 m68k_op_move_8_ix_ai + 0x8004c814 m68k_op_movea_16_pcix + 0x80046c00 m68k_op_move_16_pd_pi + 0x8004bb60 m68k_op_move_32_aw_al + 0x8004798c m68k_op_move_16_ix_a + 0x80054408 m68k_op_moves_32_di + 0x80045ecc m68k_op_move_16_ai_pd + 0x8003febc m68k_op_lsr_16_s + 0x8004be78 m68k_op_move_32_al_ai + 0x8004aa5c m68k_op_move_32_di_pi + 0x8004c3d8 m68k_op_move_32_al_i + 0x8004998c m68k_op_move_32_pi_a + 0x80049f00 m68k_op_move_32_pi_pcix + 0x800540ec m68k_op_moves_32_ai + 0x80038e48 m68k_op_divu_16_al + 0x8003ddac m68k_op_eori_8_d + 0x80049e68 m68k_op_move_32_pi_pcdi + 0x8003dd04 m68k_op_eor_32_al + 0x80047740 m68k_op_move_16_di_pcdi + 0x800456e0 m68k_op_move_16_d_d + 0x80048a3c m68k_op_move_16_al_aw + 0x800567a8 m68k_op_mull_32_i + 0x80047f6c m68k_op_move_16_ix_i + 0x80041c54 m68k_op_move_8_pi7_d + 0x8003c938 m68k_op_divl_32_i + 0x80052b24 m68k_op_movep_16_er + 0x8004d64c m68k_op_move_16_toc_pcix + 0x80045550 m68k_op_move_8_al_pcdi + 0x80050af0 m68k_op_movec_32_cr + 0x8004b81c m68k_op_move_32_aw_ai + 0x80039104 m68k_op_divu_16_pcdi + 0x80051770 m68k_op_movem_32_re_ix + 0x80049b4c m68k_op_move_32_pi_pd + 0x80041f94 m68k_op_move_8_pi7_pd7 + 0x80056208 m68k_op_mull_32_al + 0x8004509c m68k_op_move_8_al_pi + 0x800549a4 m68k_op_muls_16_pi + 0x80045d20 m68k_op_move_16_ai_a + 0x8004754c m68k_op_move_16_di_ix + 0x80041460 m68k_op_move_8_d_pcix + 0x8004ea44 m68k_op_move_16_tos_pd + 0x8004bcec m68k_op_move_32_aw_i + 0x80045008 m68k_op_move_8_al_ai + 0x80044900 m68k_op_move_8_aw_d + 0x8005393c m68k_op_moves_16_pi + 0x8004ab0c m68k_op_move_32_di_pd + 0x800426e8 m68k_op_move_8_pi_di + 0x80047aa4 m68k_op_move_16_ix_pi + 0x8003d4f0 m68k_op_eor_16_pi + 0x800529dc m68k_op_movep_16_re + 0x8004d994 m68k_op_move_16_frs_pd + 0x80042790 m68k_op_move_8_pi_ix + 0x80049aa8 m68k_op_move_32_pi_pi + 0x80042830 m68k_op_move_8_pi_aw + 0x8004c050 m68k_op_move_32_al_di + 0x80046d48 m68k_op_move_16_pd_di + .text 0x80056980 0x1e018 m68kopnz.o + 0x800671f8 m68k_op_sub_16_er_pd + 0x800747b4 m68k_op_unpk_16_mm_axy7 + 0x8006bc2c m68k_op_subq_32_pd + 0x8006cec0 m68k_op_trapt_16 + 0x8006c068 m68k_op_subx_16_rr + 0x800746b8 m68k_op_unpk_16_mm_ay7 + 0x80058cfc m68k_op_negx_16_ai + 0x80065ffc m68k_op_sle_8_ix + 0x80062ecc m68k_op_shi_8_aw + 0x80062d48 m68k_op_shi_8_pd7 + 0x80063f0c m68k_op_seq_8_pi + 0x800658a4 m68k_op_sgt_8_ai + 0x8005c138 m68k_op_or_16_re_al + 0x800741ec m68k_op_tst_32_aw + 0x800644cc m68k_op_svc_8_ix + 0x80074490 m68k_op_unlk_32 + 0x80057d1c m68k_op_neg_16_d + 0x8006d308 m68k_op_trapf + 0x8005cca4 m68k_op_ori_8_al + 0x8005b2f0 m68k_op_or_32_er_pd + 0x8006918c m68k_op_suba_16_pd + 0x8005d4cc m68k_op_ori_32_pd + 0x8006493c m68k_op_svs_8_al + 0x80068800 m68k_op_sub_16_re_di + 0x80061b7c m68k_op_rtm_32 + 0x8006c678 m68k_op_swap_32 + 0x800732cc m68k_op_trapv + 0x8006c7d8 m68k_op_tas_8_pi7 + 0x80064534 m68k_op_svc_8_aw + 0x80069714 m68k_op_suba_32_di + 0x8005e388 m68k_op_pea_32_di + 0x80066968 m68k_op_sub_8_er_pd + 0x80074450 m68k_op_unlk_32_a7 + 0x80062114 m68k_op_st_8_d + 0x80063de0 m68k_op_sne_8_aw + 0x80062cd8 m68k_op_shi_8_pd + 0x8005f134 m68k_op_rol_32_s + 0x8005f5d8 m68k_op_rol_16_pd + 0x80056f50 m68k_op_nbcd_8_pi + 0x8005a23c m68k_op_not_32_pd + 0x80062180 m68k_op_st_8_pi + 0x8005b928 m68k_op_or_8_re_pd + 0x8005b008 m68k_op_or_16_er_pcdi + 0x80066764 m68k_op_sub_8_er_ai + 0x80062370 m68k_op_st_8_aw + 0x8005ca70 m68k_op_ori_8_di + 0x800635d0 m68k_op_scc_8_di + 0x8005b650 m68k_op_or_32_er_pcix + 0x8006c834 m68k_op_tas_8_pd + 0x8005cff8 m68k_op_ori_16_di + 0x8006aab0 m68k_op_subi_32_di + 0x8005e9d0 m68k_op_ror_16_r + 0x80068288 m68k_op_sub_8_re_pd7 + 0x8005c7b4 m68k_op_ori_8_pi + 0x80066a18 m68k_op_sub_8_er_pd7 + 0x80062a88 m68k_op_slt_8_d + 0x8006d31c m68k_op_trapf_16 + 0x8006ed38 m68k_op_trapgt + 0x8005e8a0 m68k_op_ror_32_s + 0x80058ef8 m68k_op_negx_16_di + 0x8006d7c0 m68k_op_trapcc + 0x80063f74 m68k_op_seq_8_pi7 + 0x800597f8 m68k_op_not_8_pi + 0x8006eb08 m68k_op_traplt + 0x8006d36c m68k_op_traphi + 0x80073a60 m68k_op_tst_16_a + 0x8006a244 m68k_op_subi_16_ai + 0x8006c89c m68k_op_tas_8_pd7 + 0x80067a18 m68k_op_sub_32_er_pd + 0x80065750 m68k_op_slt_8_ix + 0x80065834 m68k_op_slt_8_al + 0x8006c70c m68k_op_tas_8_ai + 0x80066da0 m68k_op_sub_8_er_pcdi + 0x800577b0 m68k_op_neg_8_d + 0x80067fec m68k_op_sub_8_re_ai + 0x8006fd34 m68k_op_trapeq_16 + 0x8006ae7c m68k_op_subq_8_ai + 0x80064094 m68k_op_seq_8_di + 0x8005821c m68k_op_neg_32_ai + 0x8005808c m68k_op_neg_16_aw + 0x80062a34 m68k_op_sge_8_d + 0x80064e58 m68k_op_smi_8_pd + 0x80063fd0 m68k_op_seq_8_pd + 0x80064608 m68k_op_svs_8_ai + 0x8005d418 m68k_op_ori_32_pi + 0x8006256c m68k_op_sf_8_pd7 + 0x8005b88c m68k_op_or_8_re_pi7 + 0x800632fc m68k_op_sls_8_aw + 0x80068f8c m68k_op_sub_32_re_al + 0x8005a0e4 m68k_op_not_32_d + 0x80067018 m68k_op_sub_16_er_a + 0x8005f0c0 m68k_op_rol_16_s + 0x80067f40 m68k_op_sub_32_er_i + 0x80066194 m68k_op_stop + 0x800674f8 m68k_op_sub_16_er_al + 0x80065ee8 m68k_op_sle_8_pd7 + 0x8005b1e8 m68k_op_or_32_er_ai + 0x80070fcc m68k_op_traple_16 + 0x8006b508 m68k_op_subq_16_a + 0x80073560 m68k_op_tst_8_pi + 0x800581bc m68k_op_neg_32_d + 0x80062138 m68k_op_st_8_ai + 0x80066ac0 m68k_op_sub_8_er_di + 0x800630a4 m68k_op_sls_8_pi7 + 0x8006bfec m68k_op_subx_8_rr + 0x800606d0 m68k_op_roxl_32_r + 0x8006b49c m68k_op_subq_16_d + 0x80058678 m68k_op_negx_8_d + 0x80064e00 m68k_op_smi_8_pi7 + 0x8006085c m68k_op_roxl_16_ai + 0x800744fc m68k_op_unpk_16_rr + 0x8006051c m68k_op_roxl_8_r + 0x80069d34 m68k_op_subi_8_pd + 0x80065450 m68k_op_sge_8_al + 0x8005a8a8 m68k_op_or_8_er_ix + 0x80065f54 m68k_op_sle_8_di + 0x80060b2c m68k_op_roxl_16_ix + 0x80064c04 m68k_op_spl_8_ix + 0x80063458 m68k_op_scc_8_pi + 0x80064abc m68k_op_spl_8_pd + 0x800675b0 m68k_op_sub_16_er_pcdi + 0x80069dec m68k_op_subi_8_pd7 + 0x800636c4 m68k_op_scc_8_aw + 0x800591c8 m68k_op_negx_32_d + 0x80068a34 m68k_op_sub_16_re_al + 0x800678b0 m68k_op_sub_32_er_ai + 0x80064038 m68k_op_seq_8_pd7 + 0x8005cd58 m68k_op_ori_16_d + 0x80058c88 m68k_op_negx_16_d + 0x80073840 m68k_op_tst_8_al + 0x80073774 m68k_op_tst_8_ix + 0x8006c8f8 m68k_op_tas_8_di + 0x80062b9c m68k_op_shi_8_ai + 0x8006d9e0 m68k_op_trapcs + 0x80068c64 m68k_op_sub_32_re_pd + 0x8006a910 m68k_op_subi_32_pi + 0x8006a2fc m68k_op_subi_16_pi + 0x8006b814 m68k_op_subq_16_ix + 0x80065adc m68k_op_sgt_8_di + 0x8005e468 m68k_op_pea_32_aw + 0x80073a2c m68k_op_tst_16_d + 0x8006faec m68k_op_trapne_16 + 0x80062c74 m68k_op_shi_8_pi7 + 0x80073ec4 m68k_op_tst_16_i + 0x8005b378 m68k_op_or_32_er_di + 0x80073064 m68k_op_traple_32 + 0x80071dcc m68k_op_trapeq_32 + 0x8006b290 m68k_op_subq_8_ix + 0x80060440 m68k_op_roxl_32_s + 0x8007393c m68k_op_tst_8_pcix + 0x800648d0 m68k_op_svs_8_aw + 0x80064d40 m68k_op_smi_8_ai + 0x80068980 m68k_op_sub_16_re_aw + 0x8006e6b0 m68k_op_trapmi + 0x8006b1c4 m68k_op_subq_8_di + 0x80056dac m68k_op_nbcd_8_d + 0x80065914 m68k_op_sgt_8_pi + 0x8005a404 m68k_op_not_32_aw + 0x8005bdc4 m68k_op_or_16_re_pi + 0x8005ecdc m68k_op_ror_16_pd + 0x800690b4 m68k_op_suba_16_ai + 0x80067d18 m68k_op_sub_32_er_al + 0x80062e4c m68k_op_shi_8_ix + 0x800576a4 m68k_op_nbcd_8_al + 0x80060130 m68k_op_roxr_16_ix + 0x8006c23c m68k_op_subx_8_mm_ay7 + 0x800579a8 m68k_op_neg_8_pd + 0x80057890 m68k_op_neg_8_pi + 0x8005a92c m68k_op_or_8_er_aw + 0x800668c0 m68k_op_sub_8_er_pi7 + 0x8005fb20 m68k_op_roxr_8_r + 0x80068ec8 m68k_op_sub_32_re_aw + 0x800650dc m68k_op_sge_8_ai + 0x80061f10 m68k_op_sbcd_8_mm_axy7 + 0x80057368 m68k_op_nbcd_8_di + 0x8005cb3c m68k_op_ori_8_ix + 0x80063178 m68k_op_sls_8_pd7 + 0x8006a848 m68k_op_subi_32_ai + 0x80060290 m68k_op_roxr_16_al + 0x8006565c m68k_op_slt_8_pd7 + 0x800699a0 m68k_op_suba_32_pcix + 0x80073fbc m68k_op_tst_32_ai + 0x8006b074 m68k_op_subq_8_pd + 0x8006c584 m68k_op_subx_32_mm + 0x800659f8 m68k_op_sgt_8_pd + 0x80057a38 m68k_op_neg_8_pd7 + 0x800625ac m68k_op_sf_8_di + 0x80063eac m68k_op_seq_8_ai + 0x800634bc m68k_op_scc_8_pi7 + 0x800742c0 m68k_op_tst_32_pcdi + 0x80058820 m68k_op_negx_8_pi7 + 0x800681dc m68k_op_sub_8_re_pd + 0x800697a8 m68k_op_suba_32_ix + 0x8005ad2c m68k_op_or_16_er_pd + 0x8005e338 m68k_op_pea_32_ai + 0x80065e04 m68k_op_sle_8_pi7 + 0x8005b6c8 m68k_op_or_32_er_i + 0x8006299c m68k_op_spl_8_d + 0x80060bdc m68k_op_roxl_16_aw + 0x8005e5e4 m68k_op_reset + 0x8006f894 m68k_op_trapcs_16 + 0x80063ca0 m68k_op_sne_8_pd7 + 0x8005aa40 m68k_op_or_8_er_pcdi + 0x8005a56c m68k_op_or_8_er_ai + 0x8005f488 m68k_op_rol_16_ai + 0x8006c170 m68k_op_subx_8_mm_ax7 + 0x8005bbd4 m68k_op_or_8_re_aw + 0x80059acc m68k_op_not_8_ix + 0x80073e4c m68k_op_tst_16_pcix + 0x8006911c m68k_op_suba_16_pi + 0x8005bb2c m68k_op_or_8_re_ix + 0x800651ac m68k_op_sge_8_pi7 + 0x8007147c m68k_op_trapls_32 + 0x8006bce4 m68k_op_subq_32_di + 0x800691fc m68k_op_suba_16_di + 0x8005d238 m68k_op_ori_16_al + 0x80071234 m68k_op_traphi_32 + 0x8005ee4c m68k_op_ror_16_ix + 0x80059724 m68k_op_nop + 0x800583e8 m68k_op_neg_32_di + 0x800599a0 m68k_op_not_8_pd7 + 0x8005834c m68k_op_neg_32_pd + 0x80073690 m68k_op_tst_8_pd7 + 0x8005d580 m68k_op_ori_32_di + 0x80065c94 m68k_op_sgt_8_al + 0x80057b6c m68k_op_neg_8_ix + 0x800624dc m68k_op_sf_8_pi7 + 0x8006a55c m68k_op_subi_16_ix + 0x800652d8 m68k_op_sge_8_di + 0x8006938c m68k_op_suba_16_al + 0x8005bfe0 m68k_op_or_16_re_ix + 0x8005ae64 m68k_op_or_16_er_ix + 0x8005e7b8 m68k_op_ror_8_s + 0x8005e594 m68k_op_pea_32_pcix + 0x80057e0c m68k_op_neg_16_pi + 0x80064c6c m68k_op_spl_8_aw + 0x80072e10 m68k_op_trapgt_32 + 0x80063d7c m68k_op_sne_8_ix + 0x8005c86c m68k_op_ori_8_pi7 + 0x80064720 m68k_op_svs_8_pd + 0x8006b694 m68k_op_subq_16_pd + 0x80062488 m68k_op_sf_8_pi + 0x8006b978 m68k_op_subq_16_al + 0x8005be70 m68k_op_or_16_re_pd + 0x800740f8 m68k_op_tst_32_di + 0x8005f050 m68k_op_rol_8_s + 0x8005988c m68k_op_not_8_pi7 + 0x80060a64 m68k_op_roxl_16_di + 0x800633fc m68k_op_scc_8_ai + 0x80068698 m68k_op_sub_16_re_pi + 0x80059de8 m68k_op_not_16_pd + 0x8005f748 m68k_op_rol_16_ix + 0x8006ef5c m68k_op_traple + 0x80059070 m68k_op_negx_16_aw + 0x800716e0 m68k_op_trapcc_32 + 0x80059f28 m68k_op_not_16_ix + 0x8006bf30 m68k_op_subq_32_al + 0x80063b8c m68k_op_sne_8_pi + 0x80065c0c m68k_op_sgt_8_aw + 0x80068d28 m68k_op_sub_32_re_di + 0x800654c0 m68k_op_slt_8_ai + 0x80066b90 m68k_op_sub_8_er_ix + 0x80059394 m68k_op_negx_32_pd + 0x80067388 m68k_op_sub_16_er_ix + 0x8006a3bc m68k_op_subi_16_pd + 0x80065074 m68k_op_smi_8_al + 0x80073c74 m68k_op_tst_16_ix + 0x80066c3c m68k_op_sub_8_er_aw + 0x8005c5e0 m68k_op_or_32_re_al + 0x8006a198 m68k_op_subi_16_d + 0x80059b5c m68k_op_not_8_aw + 0x8006ad40 m68k_op_subi_32_al + 0x8006be74 m68k_op_subq_32_aw + 0x8005748c m68k_op_nbcd_8_ix + 0x8005aca0 m68k_op_or_16_er_pi + 0x800657c0 m68k_op_slt_8_aw + 0x8005ed88 m68k_op_ror_16_di + 0x8006813c m68k_op_sub_8_re_pi7 + 0x8005f1b8 m68k_op_rol_8_r + 0x8006a6dc m68k_op_subi_16_al + 0x80069a0c m68k_op_suba_32_i + 0x800642c8 m68k_op_svc_8_pi + 0x80063108 m68k_op_sls_8_pd + 0x8006337c m68k_op_sls_8_al + 0x8005c490 m68k_op_or_32_re_ix + 0x80057d7c m68k_op_neg_16_ai + 0x8005c08c m68k_op_or_16_re_aw + 0x8006a0e0 m68k_op_subi_8_al + 0x80069b1c m68k_op_subi_8_ai + 0x8005d868 m68k_op_ori_16_toc + 0x80059728 m68k_op_not_8_d + 0x8005ec30 m68k_op_ror_16_pi + 0x8006e8dc m68k_op_trapge + 0x800735cc m68k_op_tst_8_pi7 + 0x8005b420 m68k_op_or_32_er_ix + 0x8005b1a0 m68k_op_or_32_er_d + 0x80056e4c m68k_op_nbcd_8_ai + 0x8006426c m68k_op_svc_8_ai + 0x80067ad0 m68k_op_sub_32_er_di + 0x8005f684 m68k_op_rol_16_di + 0x8005e924 m68k_op_ror_8_r + 0x80064fa0 m68k_op_smi_8_ix + 0x80074020 m68k_op_tst_32_pi + 0x8006b3ec m68k_op_subq_8_al + 0x800743d4 m68k_op_tst_32_i + 0x8005c688 m68k_op_ori_8_d + 0x800638b0 m68k_op_scs_8_pd + 0x800628b8 m68k_op_seq_8_d + 0x8005a5ec m68k_op_or_8_er_pi + 0x8005c708 m68k_op_ori_8_ai + 0x8006c980 m68k_op_tas_8_ix + 0x800603bc m68k_op_roxl_16_s + 0x80065524 m68k_op_slt_8_pi + 0x80062fcc m68k_op_sls_8_ai + 0x800666fc m68k_op_sub_8_er_d + 0x80069050 m68k_op_suba_16_d + 0x8005a6f8 m68k_op_or_8_er_pd + 0x8005e15c m68k_op_pack_16_mm_axy7 + 0x8006f648 m68k_op_trapcc_16 + 0x800622a4 m68k_op_st_8_di + 0x80059bec m68k_op_not_8_al + 0x8006af20 m68k_op_subq_8_pi + 0x80069898 m68k_op_suba_32_al + 0x80067140 m68k_op_sub_16_er_pi + 0x800647dc m68k_op_svs_8_di + 0x80065278 m68k_op_sge_8_pd7 + 0x80057bfc m68k_op_neg_8_aw + 0x8006a9e0 m68k_op_subi_32_pd + 0x8006bb74 m68k_op_subq_32_pi + 0x80063798 m68k_op_scs_8_ai + 0x800592e4 m68k_op_negx_32_pi + 0x8007295c m68k_op_trapge_32 + 0x8006f3e4 m68k_op_trapls_16 + 0x8006afd0 m68k_op_subq_8_pi7 + 0x8005d180 m68k_op_ori_16_aw + 0x80069bcc m68k_op_subi_8_pi + 0x800683ec m68k_op_sub_8_re_ix + 0x80069c88 m68k_op_subi_8_pi7 + 0x80068328 m68k_op_sub_8_re_di + 0x80069914 m68k_op_suba_32_pcdi + 0x8006d0e4 m68k_op_trapt_32 + 0x800688cc m68k_op_sub_16_re_ix + 0x80063e48 m68k_op_sne_8_al + 0x80059d54 m68k_op_not_16_pi + 0x80062f4c m68k_op_shi_8_al + 0x8005b4a4 m68k_op_or_32_er_aw + 0x8005b5b8 m68k_op_or_32_er_pcdi + 0x80063c40 m68k_op_sne_8_pd + 0x80066e60 m68k_op_sub_8_er_pcix + 0x80064384 m68k_op_svc_8_pd + 0x8005f8a0 m68k_op_rol_16_al + 0x800696a8 m68k_op_suba_32_pd + 0x8005a2cc m68k_op_not_32_di + 0x8005715c m68k_op_nbcd_8_pd + 0x80067c5c m68k_op_sub_32_er_aw + 0x8006680c m68k_op_sub_8_er_pi + 0x80064124 m68k_op_seq_8_ix + 0x80073d48 m68k_op_tst_16_al + 0x80067e98 m68k_op_sub_32_er_pcix + 0x80057268 m68k_op_nbcd_8_pd7 + 0x80062820 m68k_op_scs_8_d + 0x8005e528 m68k_op_pea_32_pcdi + 0x80061e10 m68k_op_sbcd_8_mm_ay7 + 0x8006783c m68k_op_sub_32_er_a + 0x8005c538 m68k_op_or_32_re_aw + 0x8006b5e4 m68k_op_subq_16_pi + 0x80064d9c m68k_op_smi_8_pi + 0x80063acc m68k_op_scs_8_al + 0x8006c6c4 m68k_op_tas_8_d + 0x8006231c m68k_op_st_8_ix + 0x80060068 m68k_op_roxr_16_di + 0x80065e70 m68k_op_sle_8_pd + 0x8005aad8 m68k_op_or_8_er_pcix + 0x8006949c m68k_op_suba_16_pcix + 0x8005ce88 m68k_op_ori_16_pi + 0x80057abc m68k_op_neg_8_di + 0x8006950c m68k_op_suba_16_i + 0x80073500 m68k_op_tst_8_ai + 0x80068498 m68k_op_sub_8_re_aw + 0x80058124 m68k_op_neg_16_al + 0x8006cab0 m68k_op_trap + 0x80067678 m68k_op_sub_16_er_pcix + 0x8005ab50 m68k_op_or_8_er_i + 0x8005ba6c m68k_op_or_8_re_di + 0x80062adc m68k_op_sgt_8_d + 0x80067090 m68k_op_sub_16_er_ai + 0x8006a028 m68k_op_subi_8_aw + 0x8006365c m68k_op_scc_8_ix + 0x80072bb4 m68k_op_traplt_32 + 0x80070b1c m68k_op_traplt_16 + 0x8005923c m68k_op_negx_32_ai + 0x80057ea4 m68k_op_neg_16_pd + 0x80060340 m68k_op_roxl_8_s + 0x8006ba2c m68k_op_subq_32_d + 0x80059a24 m68k_op_not_8_di + 0x8006b33c m68k_op_subq_8_aw + 0x80065008 m68k_op_smi_8_aw + 0x80064190 m68k_op_seq_8_aw + 0x80069818 m68k_op_suba_32_aw + 0x8005af7c m68k_op_or_16_er_al + 0x80066cf0 m68k_op_sub_8_er_al + 0x800645a0 m68k_op_svc_8_al + 0x80068ae8 m68k_op_sub_32_re_ai + 0x80073b10 m68k_op_tst_16_pi + 0x80059910 m68k_op_not_8_pd + 0x8005a9b8 m68k_op_or_8_er_al + 0x8006610c m68k_op_sle_8_al + 0x8005f52c m68k_op_rol_16_pi + 0x80058954 m68k_op_negx_8_pd7 + 0x80064b78 m68k_op_spl_8_di + 0x8005bd24 m68k_op_or_16_re_ai + 0x80069f70 m68k_op_subi_8_ix + 0x80063034 m68k_op_sls_8_pi + 0x8006396c m68k_op_scs_8_di + 0x80069084 m68k_op_suba_16_a + 0x800621d4 m68k_op_st_8_pi7 + 0x80058be8 m68k_op_negx_8_al + 0x8007435c m68k_op_tst_32_pcix + 0x80059cc8 m68k_op_not_16_ai + 0x80069e98 m68k_op_subi_8_di + 0x80073cdc m68k_op_tst_16_aw + 0x800585dc m68k_op_neg_32_al + 0x8005b268 m68k_op_or_32_er_pi + 0x8006bac4 m68k_op_subq_32_ai + 0x80069308 m68k_op_suba_16_aw + 0x80064a00 m68k_op_spl_8_pi + 0x8007192c m68k_op_trapcs_32 + 0x80063514 m68k_op_scc_8_pd + 0x80058aa8 m68k_op_negx_8_ix + 0x800586e4 m68k_op_negx_8_ai + 0x8006f19c m68k_op_traphi_16 + 0x80064ebc m68k_op_smi_8_pd7 + 0x8006d344 m68k_op_trapf_32 + 0x8005d934 m68k_op_ori_16_tos + 0x800736ec m68k_op_tst_8_di + 0x8006bdbc m68k_op_subq_32_ix + 0x80064868 m68k_op_svs_8_ix + 0x80066fa8 m68k_op_sub_16_er_d + 0x8006277c m68k_op_sls_8_d + 0x8006c3cc m68k_op_subx_8_mm + 0x8006ca4c m68k_op_tas_8_al + 0x80066084 m68k_op_sle_8_aw + 0x80060dec m68k_op_rte_32 + 0x80062264 m68k_op_st_8_pd7 + 0x8005e408 m68k_op_pea_32_ix + 0x8005a494 m68k_op_not_32_al + 0x8005a1ac m68k_op_not_32_pi + 0x8006536c m68k_op_sge_8_ix + 0x8005c280 m68k_op_or_32_re_pi + 0x80071b84 m68k_op_trapne_32 + 0x80064664 m68k_op_svs_8_pi + 0x8005abd0 m68k_op_or_16_er_d + 0x8005d700 m68k_op_ori_32_aw + 0x8005d64c m68k_op_ori_32_ix + 0x8005cbf0 m68k_op_ori_8_aw + 0x80063b34 m68k_op_sne_8_ai + 0x80065a70 m68k_op_sgt_8_pd7 + 0x8006e490 m68k_op_trappl + 0x8005b120 m68k_op_or_16_er_i + 0x8006b744 m68k_op_subq_16_di + 0x80059c7c m68k_op_not_16_d + 0x80067960 m68k_op_sub_32_er_pi + 0x800601e0 m68k_op_roxr_16_aw + 0x8006c76c m68k_op_tas_8_pi + 0x8005f7f4 m68k_op_rol_16_aw + 0x8005a780 m68k_op_or_8_er_pd7 + 0x800646c8 m68k_op_svs_8_pi7 + 0x80064440 m68k_op_svc_8_di + 0x80057808 m68k_op_neg_8_ai + 0x800745c4 m68k_op_unpk_16_mm_ax7 + 0x80067ba8 m68k_op_sub_32_er_ix + 0x8005dec4 m68k_op_pack_16_rr + 0x80073f74 m68k_op_tst_32_a + 0x80060c8c m68k_op_roxl_16_al + 0x8005f3a0 m68k_op_rol_32_r + 0x8005bf1c m68k_op_or_16_re_di + 0x8005705c m68k_op_nbcd_8_pi7 + 0x8006598c m68k_op_sgt_8_pi7 + 0x8006808c m68k_op_sub_8_re_pi + 0x8005eef8 m68k_op_ror_16_aw + 0x80072704 m68k_op_trapmi_32 + 0x8005fbf4 m68k_op_roxr_16_r + 0x80065d8c m68k_op_sle_8_pi + 0x8005e23c m68k_op_pack_16_mm + 0x80068ba0 m68k_op_sub_32_re_pi + 0x8005fa4c m68k_op_roxr_32_s + 0x800582b0 m68k_op_neg_32_pi + 0x800737d8 m68k_op_tst_8_aw + 0x80062008 m68k_op_sbcd_8_mm + 0x8005adb8 m68k_op_or_16_er_di + 0x80062724 m68k_op_shi_8_d + 0x8005eb8c m68k_op_ror_16_ai + 0x80060904 m68k_op_roxl_16_pi + 0x8005c914 m68k_op_ori_8_pd + 0x8005a374 m68k_op_not_32_ix + 0x80067dd0 m68k_op_sub_32_er_pcdi + 0x80073aac m68k_op_tst_16_ai + 0x80068544 m68k_op_sub_8_re_al + 0x80057598 m68k_op_nbcd_8_aw + 0x8006d584 m68k_op_trapls + 0x8006ac70 m68k_op_subi_32_aw + 0x80062904 m68k_op_svc_8_d + 0x8005877c m68k_op_negx_8_pi + 0x8006de28 m68k_op_trapeq + 0x80069578 m68k_op_suba_32_d + 0x800724b8 m68k_op_trappl_32 + 0x8007408c m68k_op_tst_32_pd + 0x80063bec m68k_op_sne_8_pi7 + 0x80061b90 m68k_op_rtr_32 + 0x800655f0 m68k_op_slt_8_pd + 0x8005e82c m68k_op_ror_16_s + 0x80058540 m68k_op_neg_32_aw + 0x800589e8 m68k_op_negx_8_di + 0x8005e06c m68k_op_pack_16_mm_ay7 + 0x8005911c m68k_op_negx_16_al + 0x80074898 m68k_op_unpk_16_mm + 0x80072260 m68k_op_trapvs_32 + 0x80062214 m68k_op_st_8_pd + 0x80063cf4 m68k_op_sne_8_di + 0x800588b4 m68k_op_negx_8_pd + 0x8005b9d0 m68k_op_or_8_re_pd7 + 0x80062678 m68k_op_sf_8_aw + 0x80058e4c m68k_op_negx_16_pd + 0x8006b120 m68k_op_subq_8_pd7 + 0x800656bc m68k_op_slt_8_di + 0x8006b8c4 m68k_op_subq_16_aw + 0x8005f9c8 m68k_op_roxr_16_s + 0x800672b0 m68k_op_sub_16_er_di + 0x80061c20 m68k_op_rts_32 + 0x80060d3c m68k_op_rtd_32 + 0x8006940c m68k_op_suba_16_pcdi + 0x80064784 m68k_op_svs_8_pd7 + 0x80062b3c m68k_op_sle_8_d + 0x8005a800 m68k_op_or_8_er_di + 0x800609b4 m68k_op_roxl_16_pd + 0x80072014 m68k_op_trapvc_32 + 0x80063858 m68k_op_scs_8_pi7 + 0x80058b48 m68k_op_negx_8_aw + 0x80063578 m68k_op_scc_8_pd7 + 0x80073f40 m68k_op_tst_32_d + 0x80057c8c m68k_op_neg_8_al + 0x80064200 m68k_op_seq_8_al + 0x8005a124 m68k_op_not_32_ai + 0x8006c4a4 m68k_op_subx_16_mm + 0x8005f294 m68k_op_rol_16_r + 0x8006ff7c m68k_op_trapvc_16 + 0x800631dc m68k_op_sls_8_di + 0x8006a61c m68k_op_subi_16_aw + 0x8005b744 m68k_op_or_8_re_ai + 0x80057f3c m68k_op_neg_16_di + 0x800626d0 m68k_op_sf_8_al + 0x800739b0 m68k_op_tst_8_i + 0x80064f14 m68k_op_smi_8_di + 0x80057924 m68k_op_neg_8_pi7 + 0x8005d0c8 m68k_op_ori_16_ix + 0x80059674 m68k_op_negx_32_al + 0x8006aba0 m68k_op_subi_32_ix + 0x8005c3d0 m68k_op_or_32_re_di + 0x8007066c m68k_op_trapmi_16 + 0x8006251c m68k_op_sf_8_pd + 0x80059fbc m68k_op_not_16_aw + 0x8006a47c m68k_op_subi_16_di + 0x8006c9e4 m68k_op_tas_8_aw + 0x8006b53c m68k_op_subq_16_ai + 0x80063a60 m68k_op_scs_8_aw + 0x8005eaa8 m68k_op_ror_32_r + 0x80058da0 m68k_op_negx_16_pi + 0x8005a678 m68k_op_or_8_er_pi7 + 0x80064cd8 m68k_op_spl_8_al + 0x800677cc m68k_op_sub_32_er_d + 0x800649a4 m68k_op_spl_8_ai + 0x80059514 m68k_op_negx_32_ix + 0x8006e264 m68k_op_trapvs + 0x80073db0 m68k_op_tst_16_pcdi + 0x800695ac m68k_op_suba_32_a + 0x80073628 m68k_op_tst_8_pd + 0x80062c04 m68k_op_shi_8_pi + 0x80063914 m68k_op_scs_8_pd7 + 0x8006ae10 m68k_op_subq_8_d + 0x80068e04 m68k_op_sub_32_re_ix + 0x80073b7c m68k_op_tst_16_pd + 0x8005d36c m68k_op_ori_32_ai + 0x8006a79c m68k_op_subi_32_d + 0x8005fcd4 m68k_op_roxr_32_r + 0x8006286c m68k_op_sne_8_d + 0x80070420 m68k_op_trappl_16 + 0x8006c308 m68k_op_subx_8_mm_axy7 + 0x80067720 m68k_op_sub_16_er_i + 0x80065d1c m68k_op_sle_8_ai + 0x8005b0a4 m68k_op_or_16_er_pcix + 0x8005e4c8 m68k_op_pea_32_al + 0x8005ac1c m68k_op_or_16_er_ai + 0x8005ff08 m68k_op_roxr_16_pi + 0x8005d2f0 m68k_op_ori_32_d + 0x80073be8 m68k_op_tst_16_di + 0x80064a64 m68k_op_spl_8_pi7 + 0x800637f4 m68k_op_scs_8_pi + 0x8005aeec m68k_op_or_16_er_aw + 0x8006ba90 m68k_op_subq_32_a + 0x80063730 m68k_op_scc_8_al + 0x80062440 m68k_op_sf_8_ai + 0x8005d7b4 m68k_op_ori_32_al + 0x8005c9c8 m68k_op_ori_8_pd7 + 0x800695d8 m68k_op_suba_32_ai + 0x800738a4 m68k_op_tst_8_pcdi + 0x800595c4 m68k_op_negx_32_aw + 0x800708c4 m68k_op_trapge_16 + 0x8006963c m68k_op_suba_32_pi + 0x8006520c m68k_op_sge_8_pd + 0x80069294 m68k_op_suba_16_ix + 0x8006cc9c m68k_op_trapt + 0x8005b7e0 m68k_op_or_8_re_pi + 0x80062624 m68k_op_sf_8_ix + 0x8005b530 m68k_op_or_32_er_al + 0x80057ff4 m68k_op_neg_16_ix + 0x8006dc0c m68k_op_trapne + 0x80066f00 m68k_op_sub_8_er_i + 0x800701c8 m68k_op_trapvs_16 + 0x80062950 m68k_op_svs_8_d + 0x800685f0 m68k_op_sub_16_re_ai + 0x8005cf40 m68k_op_ori_16_pd + 0x8005c1e4 m68k_op_or_32_re_ai + 0x80074184 m68k_op_tst_32_ix + 0x80059e7c m68k_op_not_16_di + 0x800653dc m68k_op_sge_8_aw + 0x80064b20 m68k_op_spl_8_pd7 + 0x8005c328 m68k_op_or_32_re_pd + 0x80059444 m68k_op_negx_32_di + 0x800643e8 m68k_op_svc_8_pd7 + 0x8006241c m68k_op_sf_8_d + 0x8006c0ec m68k_op_subx_32_rr + 0x80061c68 m68k_op_sbcd_8_rr + 0x8005a050 m68k_op_not_16_al + 0x80062dac m68k_op_shi_8_di + 0x800584a4 m68k_op_neg_32_ix + 0x8006327c m68k_op_sls_8_ix + 0x80065140 m68k_op_sge_8_pi + 0x800734d0 m68k_op_tst_8_d + 0x800639f8 m68k_op_scs_8_ix + 0x80069a74 m68k_op_subi_8_d + 0x8005a524 m68k_op_or_8_er_d + 0x80074258 m68k_op_tst_32_al + 0x8005df74 m68k_op_pack_16_mm_ax7 + 0x8005f94c m68k_op_roxr_8_s + 0x800627d4 m68k_op_scc_8_d + 0x8006e044 m68k_op_trapvc + 0x80065b84 m68k_op_sgt_8_ix + 0x80061d10 m68k_op_sbcd_8_mm_ax7 + 0x800629e8 m68k_op_smi_8_d + 0x8006743c m68k_op_sub_16_er_aw + 0x800623c8 m68k_op_st_8_al + 0x800605f0 m68k_op_roxl_16_r + 0x8005ffb8 m68k_op_roxr_16_pd + 0x8006432c m68k_op_svc_8_pi7 + 0x8005bc7c m68k_op_or_8_re_al + 0x80058fc4 m68k_op_negx_16_ix + 0x80059770 m68k_op_not_8_ai + 0x80065590 m68k_op_slt_8_pi7 + 0x8006874c m68k_op_sub_16_re_pd + 0x8005fe60 m68k_op_roxr_16_ai + 0x8005efa4 m68k_op_ror_16_al + 0x80070d78 m68k_op_trapgt_16 + 0x8005cdd8 m68k_op_ori_16_ai + .text 0x80074998 0x494 m68kops.o + 0x80074998 m68ki_build_opcode_table + .text 0x80074e2c 0x21a64 z80.o + 0x80096298 z80_get_cycle_table + 0x8009230c z80_exit + 0x8009622c z80_get_context + 0x800965b0 z80_set_irq_line + 0x80091df4 z80_reset + 0x800962f0 z80_get_sp + 0x800962d8 z80_get_pc + 0x80096884 z80_set_irq_callback + 0x80096308 z80_get_reg + 0x800962fc z80_set_sp + 0x800923b4 z80_execute + 0x800964e4 z80_set_nmi_line + 0x800962e4 z80_set_pc + 0x800962bc z80_set_cycle_table + 0x800966a4 z80_set_reg + 0x80096264 z80_set_context + 0x800923a4 z80_end_timeslice + 0x80091380 z80_burn + .text 0x80096890 0x49dc fm.o + 0x8009aefc YM2612Write + 0x8009762c YM2612UpdateOne + 0x8009a4e8 YM2612ResetChip + 0x8009aef8 YM2612UpdateRequest + 0x8009b018 YM2612Read + 0x8009b03c YM2612TimerOver + 0x8009aa50 YM2612Init + 0x8009aed8 YM2612Shutdown + .text 0x8009b26c 0x7a4 sn76489.o + 0x8009b574 SN76489_Update + 0x8009b44c SN76489_GetContextSize + 0x8009b3cc SN76489_SetContext + 0x8009b994 SN76489_GetMute + 0x8009b9ec SN76489_SetPanning + 0x8009b26c SN76489_Config + 0x8009b9a8 SN76489_SetMute + 0x8009b55c SN76489_GGStereoWrite + 0x8009b318 SN76489_Init + 0x8009b9bc SN76489_GetVolType + 0x8009b438 SN76489_GetContextPtr + 0x8009b3c8 SN76489_Shutdown + 0x8009b454 SN76489_Write + 0x8009b9d4 SN76489_SetVolType + 0x8009b294 SN76489_Reset + 0x8009b400 SN76489_GetContext + .text 0x8009ba10 0x6c0 sn76496.o + 0x8009be58 SN76496_set_clock + 0x8009c084 SN76496_sh_start + 0x8009ba10 SN76496Write + 0x8009bc18 SN76496Update + 0x8009bf1c SN76496_set_gain + 0x8009bfc8 SN76496_init + .text 0x8009c0d0 0x744 sound.o + 0x8009c0d0 sound_init + 0x8009c300 fm_reset + 0x8009c620 fm_update_timers + 0x8009c37c fm_write + 0x8009c72c psg_write + 0x8009c1dc fm_restore + 0x8009c614 fm_read + .text 0x8009c814 0xf3a8 ym2612.o + 0x8009e2a8 Update_Chan_Algo3 + 0x8009d2b4 Env_NULL_Next + 0x8009d2b8 Env_Attack_Next + 0x800a5aac Update_Chan_Algo0_LFO_Int + 0x8009d384 Env_Release_Next + 0x800a8fb4 YM2612_End + 0x8009e7a8 Update_Chan_Algo4 + 0x800a495c Update_Chan_Algo5_Int + 0x800a6e14 Update_Chan_Algo3_LFO_Int + 0x800a2dd4 Update_Chan_Algo0_Int + 0x800ab9f4 YM2612TimerAOver + 0x800a214c Update_Chan_Algo6_LFO + 0x800a92d4 YM2612_Init + 0x800a08a4 Update_Chan_Algo2_LFO + 0x8009ecd0 Update_Chan_Algo5 + 0x800a14c4 Update_Chan_Algo4_LFO + 0x8009d3a4 Update_Chan_Algo0 + 0x8009f748 Update_Chan_Algo7 + 0x800a38c0 Update_Chan_Algo2_Int + 0x8009dda8 Update_Chan_Algo2 + 0x800a88e8 Update_Chan_Algo7_LFO_Int + 0x800a334c Update_Chan_Algo1_Int + 0x8009c814 YM2612_Special_Update + 0x800a7b4c Update_Chan_Algo5_LFO_Int + 0x800a90ec YM2612_Reset + 0x8009d300 Env_Substain_Next + 0x8009cde0 YM_SET + 0x800a7490 Update_Chan_Algo4_LFO_Int + 0x800a611c Update_Chan_Algo1_LFO_Int + 0x800a3e34 Update_Chan_Algo3_Int + 0x8009d8a8 Update_Chan_Algo1 + 0x800a4f2c Update_Chan_Algo6_Int + 0x800a6798 Update_Chan_Algo2_LFO_Int + 0x800aa040 YM2612_Read + 0x8009cad8 CHANNEL_SET + 0x800a278c Update_Chan_Algo7_LFO + 0x800a0294 Update_Chan_Algo1_LFO + 0x800a0eb4 Update_Chan_Algo3_LFO + 0x800a43a8 Update_Chan_Algo4_Int + 0x800a8224 Update_Chan_Algo6_LFO_Int + 0x800aa04c YM2612_Update + 0x8009fc80 Update_Chan_Algo0_LFO + 0x8009d2dc Env_Decay_Next + 0x8009f218 Update_Chan_Algo6 + 0x800a54e8 Update_Chan_Algo7_Int + 0x800a1afc Update_Chan_Algo5_LFO + 0x8009c818 SLOT_SET + 0x800a8fbc YM2612_Write + .text 0x800abbbc 0x114 gcaram.o + 0x800abbe4 ARAMPut + 0x800abc4c ARAMFetch + 0x800abcb4 ShadowROM + 0x800abbbc StartARAM + .text 0x800abcd0 0x680 loadrom.o + 0x800ac18c load_memrom + 0x800ac2d0 reloadrom + 0x800ac114 deinterleave_block + 0x800abe98 genesis_set_region + 0x800abcd0 set_game_default + .text 0x800ac350 0xfa4 ngc.o + 0x800ac350 tb_diff_msec + 0x800ac560 main + 0x800ac514 error + .text 0x800ad2f4 0x364 unzip.o + 0x800ad310 UnZipBuffer + 0x800ad2f4 IsZipFile + .text 0x800ad658 0x738 confjoy.o + 0x800ad658 UpdatePadMaps + 0x800ad78c ConfigureJoypads + .text 0x800add90 0x2b0 dvd.o + 0x800adf14 uselessinquiry + 0x800add90 dvd_read + 0x800adf64 dvd_motor_off + 0x800adfbc dvd_inquiry + .text 0x800ae040 0xf54 filesel.o + 0x800ae250 GetSDInfo + 0x800aed40 OpenSD + 0x800ae2f8 LoadFile + 0x800aee88 OpenDVD + 0x800ae5ac FileSelector + 0x800ae040 updateSDdirname + 0x800ae154 parseSDdirectory + .text 0x800aef94 0xc08 font.o + 0x800af960 SetScreen + 0x800afb48 unpackBackdrop + 0x800aef94 yay0_decode + 0x800af264 blit_char + 0x800af79c fntDrawHLine + 0x800af4dc writex + 0x800af9a0 ClearScreen + 0x800af634 WriteCentre + 0x800af8e0 fntDrawBoxFilled + 0x800afaa4 ShowAction + 0x800af21c setfontcolour + 0x800afb0c WaitButtonA + 0x800af6e0 WriteCentre_HL + 0x800af068 untile + 0x800af10c init_font + 0x800af838 fntDrawBox + 0x800af7ec fntDrawVLine + 0x800af410 write_font + 0x800af9fc WaitPrompt + .text 0x800afb9c 0xaa8 ggentry.o + 0x800affac DrawGGCodes + 0x800afdd8 decode_ggcodes + 0x800b05fc GetGGEntries + 0x800aff44 ClearGGCodes + 0x800afb9c decode_genie + 0x800b04c8 GGSelectLine + 0x800b01f0 GGEditLine + .text 0x800b0644 0x5bc iso9660.o + 0x800b0858 parsedirectory + 0x800b0644 getpvd + .text 0x800b0c00 0x270 legal.o + 0x800b0c7c legal + 0x800b0c00 dkunpack + .text 0x800b0e70 0xfc0 mcard.o + 0x800b1840 sram_autoload + 0x800b1904 ManageState + 0x800b1290 ManageSRAM + 0x800b11dc CardFileExists + 0x800b0e70 SD_ManageFile + 0x800b1128 MountTheCard + .text 0x800b1e30 0x1794 menu.o + 0x800b334c loadmenu + 0x800b3434 MainMenu + 0x800b2e08 optionmenu + 0x800b26f0 miscmenu + 0x800b2ef4 loadsavemenu + 0x800b31d8 filemenu + 0x800b1f2c domenu + 0x800b20fc soundmenu + 0x800b1e30 drawmenu + .text 0x800b35c4 0x9f4 rominfo.o + 0x800b3714 GetRealChecksum + 0x800b375c getrominfo + 0x800b3a10 showrominfo + 0x800b35c4 getcompany + .text 0x800b3fb8 0x118 diskio.o + 0x800b3fb8 DISKIO_Init + 0x800b3ffc DISKIO_ReadSectors + .text 0x800b40d0 0x11f8 vfat.o + 0x800b4d44 VFAT_readdir + 0x800b506c VFAT_fread + 0x800b5068 VFAT_fclose + 0x800b4b28 VFAT_opendir + 0x800b4eb4 VFAT_fopen + 0x800b5220 VFAT_fseek + 0x800b4e60 VFAT_closedir + 0x800b415c VFAT_mount + 0x800b52c0 VFAT_ftell + .text 0x800b52c8 0x4d8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + 0x800b55a4 L2Disable + 0x800b532c DCBlockZero + 0x800b53e4 DCFlushRangeNoSync + 0x800b5538 ICBlockInvalidate + 0x800b52c8 DCFlashInvalidate + 0x800b5334 DCBlockStore + 0x800b5444 DCZeroRange + 0x800b5758 LCLoadBlocks + 0x800b5324 DCTouchLoad + 0x800b5718 LCAllocTags + 0x800b5500 ICDisable + 0x800b54ec ICEnable + 0x800b55bc L2GlobalInvalidate + 0x800b577c LCStoreBlocks + 0x800b54dc ICFlashInvalidate + 0x800b5474 DCTouchRange + 0x800b5414 DCStoreRangeNoSync + 0x800b5514 ICFreeze + 0x800b52ec DCDisable + 0x800b533c DCBlockFlush + 0x800b52d8 DCEnable + 0x800b5590 L2Enable + 0x800b5614 __LCEnable + 0x800b534c DCInvalidateRange + 0x800b5704 LCAllocOneTag + 0x800b5314 DCUnfreeze + 0x800b54a4 ICInvalidateRange + 0x800b537c DCFlushRange + 0x800b5540 ICSync + 0x800b5344 DCBlockInvalidate + 0x800b5300 DCFreeze + 0x800b5548 L2Init + 0x800b5528 ICUnfreeze + 0x800b53b0 DCStoreRange + 0x800b56dc LCDisable + .text 0x800b57a0 0x2d4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + 0x800b5a04 __reset + 0x800b57a0 __realmode + 0x800b58f0 __CacheInit + 0x800b5954 __SystemInit + 0x800b57b8 __config24Mb + 0x800b58b8 __PSInit + 0x800b5838 __config48Mb + 0x800b59d0 __flush_cache + .text 0x800b5a74 0x858 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + 0x800b5a74 ps_guMtxConcat + 0x800b6270 ps_guQuatNormalize + 0x800b5f64 ps_guMtxReflect + 0x800b6040 ps_guVecNormalize + 0x800b60c8 ps_guVecDotProduct + 0x800b5cf8 ps_guMtxInvXpos + 0x800b60e8 ps_guVecMultiply + 0x800b6250 ps_guQuatDotProduct + 0x800b608c ps_guVecCross + 0x800b61b4 ps_guQuatSub + 0x800b6190 ps_guQuatAdd + 0x800b613c ps_guVecMultiplySR + 0x800b5b40 ps_guMtxIdentity + 0x800b5eb4 ps_guMtxRotTrig + 0x800b5fdc ps_guVecAdd + 0x800b6024 ps_guVecScale + 0x800b5dc0 ps_guMtxScale + 0x800b5b74 ps_guMtxCopy + 0x800b5df0 ps_guMtxScaleApply + 0x800b61d8 ps_guQuatMultiply + 0x800b5ba8 ps_guMtxTranspose + 0x800b5c00 ps_guMtxInverse + 0x800b5e3c ps_guMtxTrans + 0x800b5e74 ps_guMtxTransApply + 0x800b6000 ps_guVecSub + .text 0x800b62cc 0x254 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) + 0x800b6380 dechandler_end + 0x800b62cc dechandler_start + .text 0x800b6520 0x624 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) + 0x800b6648 _cpu_context_restore_fp + 0x800b6954 _cpu_context_save + 0x800b6520 _cpu_context_save_fp + 0x800b676c _cpu_context_switch + 0x800b6ac0 _cpu_context_restore_ex + 0x800b6848 _cpu_context_switch_ex + 0x800b69c4 _cpu_context_restore + 0x800b6a2c _cpu_context_save_ex + .text 0x800b6b44 0x254 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) + 0x800b6bf8 irqhandler_end + 0x800b6b44 irqhandler_start + .text 0x800b6d98 0x118 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video_asm.o) + 0x800b6d98 __VIClearFramebuffer + .text 0x800b6eb0 0x21c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + 0x800b6eb0 default_exceptionhandler_start + 0x800b7060 systemcall_handler_start + 0x800b6f2c default_exceptionhandler_patch + 0x800b7080 fpu_exception_handler + 0x800b6f6c default_exceptionhandler_end + 0x800b707c systemcall_handler_end + .text 0x800b70cc 0x1b0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_floor.o) + 0x800b70d0 floor + .text 0x800b727c 0x118 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) + 0x800b7280 sin + .text 0x800b7394 0x110 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) + 0x800b7398 cosf + .text 0x800b74a4 0xac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) + 0x800b74a8 tanf + .text 0x800b7550 0x170 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) + 0x800b7554 log + .text 0x800b76c0 0x15c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + 0x800b76c4 log10 + .text 0x800b781c 0x3cc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + 0x800b7820 pow + .text 0x800b7be8 0x350 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log.o) + 0x800b7bec __ieee754_log + .text 0x800b7f38 0x19c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log10.o) + 0x800b7f3c __ieee754_log10 + .text 0x800b80d4 0x900 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) + 0x800b80d8 __ieee754_pow + .text 0x800b89d4 0x424 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) + 0x800b89d8 __ieee754_rem_pio2 + .text 0x800b8df8 0x298 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_sqrt.o) + 0x800b8df8 __ieee754_sqrt + .text 0x800b9090 0x448 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) + 0x800b9094 __ieee754_rem_pio2f + .text 0x800b94d8 0x14c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_cos.o) + 0x800b94dc __kernel_cos + .text 0x800b9624 0x930 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + 0x800b9628 __kernel_rem_pio2 + .text 0x800b9f54 0x104 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_sin.o) + 0x800b9f58 __kernel_sin + .text 0x800ba058 0x140 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_cos.o) + 0x800ba05c __kernel_cosf + .text 0x800ba198 0x914 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) + 0x800ba19c __kernel_rem_pio2f + .text 0x800baaac 0x104 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_sin.o) + 0x800baab0 __kernel_sinf + .text 0x800babb0 0x2a8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_tan.o) + 0x800babb4 __kernel_tanf + .text 0x800bae58 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_fabs.o) + 0x800bae58 fabs + .text 0x800bae84 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_finite.o) + 0x800bae84 finite + .text 0x800baea8 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_isnan.o) + 0x800baea8 isnan + .text 0x800baee0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_matherr.o) + 0x800baee0 matherr + .text 0x800baef0 0x1c8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_rint.o) + 0x800baef4 rint + .text 0x800bb0b8 0x1b0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_scalbn.o) + 0x800bb0bc scalbn + .text 0x800bb268 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_fabs.o) + 0x800bb268 fabsf + .text 0x800bb288 0x120 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_floor.o) + 0x800bb28c floorf + .text 0x800bb3a8 0x188 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_scalbn.o) + 0x800bb3ac scalbnf + .text 0x800bb530 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_copysign.o) + 0x800bb530 copysign + .text 0x800bb578 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_copysign.o) + 0x800bb578 copysignf + .text 0x800bb5a8 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_ashldi3.o) + 0x800bb5a8 __ashldi3 + .text 0x800bb600 0x43c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_udivdi3.o) + 0x800bb600 __udivdi3 + .text 0x800bba3c 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(abort.o) + 0x800bba3c abort + .text 0x800bba58 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(calloc.o) + 0x800bba5c calloc + .text 0x800bbaa8 0xb8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(callocr.o) + 0x800bbaa8 _calloc_r + .text 0x800bbb60 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(errno.o) + 0x800bbb64 __errno + .text 0x800bbba0 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime.o) + 0x800bbba4 localtime + .text 0x800bbbe8 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime_r.o) + 0x800bbbe8 localtime_r + .text 0x800bbc0c 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malign.o) + 0x800bbc10 memalign + .text 0x800bbc5c 0x1fc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) + 0x800bbc5c _memalign_r + .text 0x800bbe58 0x90 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + 0x800bbe5c malloc + 0x800bbea4 free + .text 0x800bbee8 0x7bc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + 0x800bbeec _malloc_r + .text 0x800bc6a4 0x88 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memcmp.o) + 0x800bc6a4 memcmp + .text 0x800bc72c 0xb0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memcpy.o) + 0x800bc72c memcpy + .text 0x800bc7dc 0xa8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memset.o) + 0x800bc7dc memset + .text 0x800bc884 0x7ac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) + 0x800bcc48 mktime + .text 0x800bd030 0x8cc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + 0x800bd034 __tzcalc_limits + 0x800bd2d0 _mktm_r + .text 0x800bd8fc 0x13c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) + 0x800bd98c printf + 0x800bd8fc _printf_r + .text 0x800bda38 0xe8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) + 0x800bdae0 putchar + 0x800bda38 _putchar_r + .text 0x800bdb20 0xf0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) + 0x800bdb24 _puts_r + 0x800bdbd0 puts + .text 0x800bdc10 0xd8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(rand.o) + 0x800bdc64 rand + 0x800bdc14 srand + .text 0x800bdce8 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(realloc.o) + 0x800bdcec realloc + .text 0x800bdd38 0x5ac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + 0x800bdd3c _realloc_r + .text 0x800be2e4 0x2d0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + 0x800be2e4 cleanup_glue + 0x800be368 _reclaim_reent + 0x800be4c8 _wrapup_reent + .text 0x800be5b4 0x7c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sbrkr.o) + 0x800be5b8 _sbrk_r + .text 0x800be630 0x3f0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) + 0x800be6a8 _signal_r + 0x800be760 _raise_r + 0x800be858 __sigtramp_r + 0x800be954 signal + 0x800be9a0 _init_signal + 0x800be630 _init_signal_r + 0x800be9e0 __sigtramp + 0x800be910 raise + .text 0x800bea20 0xbc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) + 0x800bea24 _kill_r + 0x800beabc _getpid_r + .text 0x800beadc 0x1a8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sprintf.o) + 0x800beadc _sprintf_r + 0x800beb9c sprintf + .text 0x800bec84 0xc0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcasecmp.o) + 0x800bec88 strcasecmp + .text 0x800bed44 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strchr.o) + 0x800bed44 strchr + .text 0x800bedf8 0xa4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcmp.o) + 0x800bedf8 strcmp + .text 0x800bee9c 0x84 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcpy.o) + 0x800bee9c strcpy + .text 0x800bef20 0x70 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strlen.o) + 0x800bef20 strlen + .text 0x800bef90 0x100 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncasecmp.o) + 0x800bef94 strncasecmp + .text 0x800bf090 0xfc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncmp.o) + 0x800bf090 strncmp + .text 0x800bf18c 0xe8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncpy.o) + 0x800bf18c strncpy + .text 0x800bf274 0x90 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strrchr.o) + 0x800bf274 strrchr + .text 0x800bf304 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strstr.o) + 0x800bf304 strstr + .text 0x800bf370 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok.o) + 0x800bf374 strtok + .text 0x800bf3bc 0xe8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok_r.o) + 0x800bf494 strtok_r + 0x800bf3bc __strtok_r + .text 0x800bf4a4 0xc4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) + 0x800bf52c __tz_unlock + 0x800bf4a8 __tz_lock + .text 0x800bf568 0x1e8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + 0x800bf5d8 _vfprintf_r + 0x800c13a4 vfprintf + .text 0x800c13f4 0x154 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + 0x800c13f8 __swbuf + .text 0x800c1548 0xc4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) + 0x800c1548 _wcrtomb_r + 0x800c15bc wcrtomb + .text 0x800c160c 0x1f8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcsrtombs.o) + 0x800c160c _wcsrtombs_r + 0x800c17ac wcsrtombs + .text 0x800c1804 0x448 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) + 0x800c1808 _wctomb_r + .text 0x800c1c4c 0x154 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) + 0x800c1c50 __swsetup + .text 0x800c1da0 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(div.o) + 0x800c1da0 div + .text 0x800c1e14 0x1404 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + 0x800c2068 _dtoa_r + .text 0x800c3218 0x1ac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + 0x800c321c fflush + .text 0x800c33c4 0x648 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + 0x800c369c __sinit + 0x800c3450 __sfmoreglue + 0x800c3514 _cleanup + 0x800c34d4 _cleanup_r + 0x800c3974 __fp_lock_all + 0x800c35d8 __sfp_lock_acquire + 0x800c37b4 __sfp + 0x800c365c __sinit_lock_release + 0x800c39c0 __fp_unlock_all + 0x800c3774 __sfp_lock_release + 0x800c3554 __sinit_lock_acquire + .text 0x800c3a0c 0x3d8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + 0x800c3b48 _free_r + 0x800c3a10 _malloc_trim_r + .text 0x800c3de4 0x48c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + 0x800c3de8 __sfvwrite + .text 0x800c4270 0x204 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) + 0x800c4270 _fwalk + 0x800c436c _fwalk_reent + .text 0x800c4474 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(gettzinfo.o) + 0x800c4478 __gettzinfo + .text 0x800c44b0 0x1ac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + 0x800c44b4 _setlocale_r + 0x800c4558 __locale_charset + 0x800c4598 _localeconv_r + 0x800c45d4 setlocale + 0x800c4620 localeconv + .text 0x800c465c 0x190 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) + 0x800c4660 __smakebuf + .text 0x800c47ec 0xd0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memchr.o) + 0x800c47ec memchr + .text 0x800c48bc 0x104 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memmove.o) + 0x800c48bc memmove + .text 0x800c49c0 0x10ec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + 0x800c5a2c _mprec_log10 + 0x800c4d04 _hi0bits + 0x800c49c0 _Balloc + 0x800c57ac _d2b + 0x800c4e7c _multiply + 0x800c5960 _ratio + 0x800c4bdc _s2b + 0x800c4e38 _i2b + 0x800c4d70 _lo0bits + 0x800c53a8 __mcmp + 0x800c50d4 _pow5mult + 0x800c55d4 _ulp + 0x800c566c _b2d + 0x800c4abc _multadd + 0x800c540c __mdiff + 0x800c5230 _lshift + 0x800c4a90 _Bfree + .text 0x800c5aac 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(s_isinf.o) + 0x800c5aac isinf + .text 0x800c5af0 0x260 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + 0x800c5c70 __sseek + 0x800c5af4 __sread + 0x800c5d0c __sclose + 0x800c5b8c __swrite + .text 0x800c5d50 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(writer.o) + 0x800c5d54 _write_r + .text 0x800c5dec 0x94 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(closer.o) + 0x800c5df0 _close_r + .text 0x800c5e80 0x200 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + 0x800c5e84 _fclose_r + 0x800c6040 fclose + .text 0x800c6080 0x98 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fstatr.o) + 0x800c6084 _fstat_r + .text 0x800c6118 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lseekr.o) + 0x800c611c _lseek_r + .text 0x800c61b4 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(readr.o) + 0x800c61b8 _read_r + .text 0x800c6250 0x68 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtend.o + *(.text.*) + .text.__gettiming + 0x800c62b8 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .text.__VIRetraceHandler + 0x800c636c 0x23c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .text.VIDEO_Init + 0x800c65a8 0x728 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c65a8 VIDEO_Init + .text.VIDEO_Configure + 0x800c6cd0 0x90c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c6cd0 VIDEO_Configure + .text.VIDEO_WaitVSync + 0x800c75dc 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c75dc VIDEO_WaitVSync + .text.VIDEO_SetFramebuffer + 0x800c763c 0x314 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c763c VIDEO_SetFramebuffer + .text.VIDEO_SetNextFramebuffer + 0x800c7950 0x27c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c7950 VIDEO_SetNextFramebuffer + .text.VIDEO_Flush + 0x800c7bcc 0x120 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c7bcc VIDEO_Flush + .text.VIDEO_SetBlack + 0x800c7cec 0x178 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c7cec VIDEO_SetBlack + .text.VIDEO_GetCurrentTvMode + 0x800c7e64 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c7e64 VIDEO_GetCurrentTvMode + .text.VIDEO_GetCurrentLine + 0x800c7eb4 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c7eb4 VIDEO_GetCurrentLine + .text.VIDEO_SetPreRetraceCallback + 0x800c7f40 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c7f40 VIDEO_SetPreRetraceCallback + .text.VIDEO_SetPostRetraceCallback + 0x800c7f6c 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c7f6c VIDEO_SetPostRetraceCallback + .text.VIDEO_ClearFrameBuffer + 0x800c7f98 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x800c7f98 VIDEO_ClearFrameBuffer + .text.PAD_Recalibrate + 0x800c7fd4 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c7fd4 PAD_Recalibrate + .text.SPEC0_MakeStatus + 0x800c7ff8 0x10c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.SPEC1_MakeStatus + 0x800c8104 0x10c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_clampS8 + 0x800c8210 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_clampU8 + 0x800c824c 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.SPEC2_MakeStatus + 0x800c8264 0x294 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_updateorigin + 0x800c84f8 0x134 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_enable + 0x800c862c 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_disable + 0x800c8688 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_originupdatecallback + 0x800c8714 0xa0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_receivecheckcallback + 0x800c87b4 0xb8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_doreset + 0x800c886c 0x70 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_typeandstatuscallback + 0x800c88dc 0x178 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_probecallback + 0x800c8a54 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_origincallback + 0x800c8ab4 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__pad_samplinghandler + 0x800c8b04 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.__PADDisableRecalibration + 0x800c8b08 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c8b08 __PADDisableRecalibration + .text.PAD_SetSpec + 0x800c8b60 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c8b60 PAD_SetSpec + .text.PAD_Reset + 0x800c8bb8 0xd8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c8bb8 PAD_Reset + .text.PAD_Init + 0x800c8c90 0xf4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c8c90 PAD_Init + .text.PAD_Read + 0x800c8d84 0x2a0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c8d84 PAD_Read + .text.PAD_Sync + 0x800c9024 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c9024 PAD_Sync + .text.PAD_SetSamplingCallback + 0x800c907c 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c907c PAD_SetSamplingCallback + .text.__pad_onreset + 0x800c90e8 0x98 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .text.PAD_ScanPads + 0x800c9180 0xb0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c9180 PAD_ScanPads + .text.PAD_ButtonsDown + 0x800c9230 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c9230 PAD_ButtonsDown + .text.PAD_ButtonsHeld + 0x800c9274 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c9274 PAD_ButtonsHeld + .text.PAD_StickX + 0x800c92b8 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c92b8 PAD_StickX + .text.PAD_StickY + 0x800c9300 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + 0x800c9300 PAD_StickY + .text.__dvd_clearwaitingqueue + 0x800c9348 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_timeouthandler + 0x800c9380 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_storeerror + 0x800c93bc 0xc8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__SetupTimeoutAlarm + 0x800c9484 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__Read 0x800c94c8 0xdc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.DVD_LowSeek + 0x800c95a4 0x70 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c95a4 DVD_LowSeek + .text.DVD_LowRequestError + 0x800c9614 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c9614 DVD_LowRequestError + .text.DVD_LowAudioStream + 0x800c9674 0x7c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c9674 DVD_LowAudioStream + .text.__dvd_stategettingerror + 0x800c96f0 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c96f0 __dvd_stategettingerror + .text.__dvd_mountsynccb + 0x800c96fc 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_statecheckid1cb + 0x800c9720 0xa0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.DVD_LowSpinMotor + 0x800c97c0 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c97c0 DVD_LowSpinMotor + .text.DVD_LowSetOffset + 0x800c9810 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c9810 DVD_LowSetOffset + .text.DVD_LowEnableExtensions + 0x800c9860 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c9860 DVD_LowEnableExtensions + .text.DVD_LowSetStatus + 0x800c98b0 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c98b0 DVD_LowSetStatus + .text.DVD_LowUnlockDrive + 0x800c9900 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c9900 DVD_LowUnlockDrive + .text.DVD_LowReadmem + 0x800c995c 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c995c DVD_LowReadmem + .text.DVD_LowInquiry + 0x800c99bc 0x88 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c99bc DVD_LowInquiry + .text.__DVDInterruptHandler + 0x800c9a44 0x254 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.DVD_LowFuncCall + 0x800c9c98 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c9c98 DVD_LowFuncCall + .text.__dvd_patchdrivecb + 0x800c9cec 0x188 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.DVD_LowPatchDriveCode + 0x800c9e74 0xe4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c9e74 DVD_LowPatchDriveCode + .text.__dvd_unlockdrivecb + 0x800c9f58 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.DVD_LowRead + 0x800c9fb0 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800c9fb0 DVD_LowRead + .text.DVD_LowStopMotor + 0x800ca008 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca008 DVD_LowStopMotor + .text.__dvd_stategotoretry + 0x800ca068 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca068 __dvd_stategotoretry + .text.__dvd_stateerror + 0x800ca074 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca074 __dvd_stateerror + .text.DVD_LowReadId + 0x800ca0a4 0xa0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca0a4 DVD_LowReadId + .text.__dvd_statecoverclosed_cmd + 0x800ca144 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca144 __dvd_statecoverclosed_cmd + .text.__dvd_statecoverclosed_spinupcb + 0x800ca158 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.DVD_LowRequestAudioStatus + 0x800ca19c 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca19c DVD_LowRequestAudioStatus + .text.DVD_LowAudioBufferConfig + 0x800ca1fc 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca1fc DVD_LowAudioBufferConfig + .text.DVD_LowControlMotor + 0x800ca288 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca288 DVD_LowControlMotor + .text.DVD_LowSetGCMOffset + 0x800ca2c4 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca2c4 DVD_LowSetGCMOffset + .text.DVD_LowWaitCoverClose + 0x800ca308 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca308 DVD_LowWaitCoverClose + .text.__dvd_statemotorstopped + 0x800ca334 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca334 __dvd_statemotorstopped + .text.__dvd_statecheckid2 + 0x800ca340 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca340 __dvd_statecheckid2 + .text.DVD_LowReset + 0x800ca344 0x90 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca344 DVD_LowReset + .text.DVD_Reset + 0x800ca3d4 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca3d4 DVD_Reset + .text.__dvd_statetimeout + 0x800ca42c 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca42c __dvd_statetimeout + .text.__dvd_spinupdrivecb + 0x800ca468 0x184 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.DVD_LowSpinUpDrive + 0x800ca5ec 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca5ec DVD_LowSpinUpDrive + .text.__dvd_statebusy + 0x800ca618 0x2b4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca618 __dvd_statebusy + .text.__dvd_stateready + 0x800ca8cc 0x250 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800ca8cc __dvd_stateready + .text.__issuecommand + 0x800cab1c 0x11c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800cab1c __issuecommand + .text.__dvd_checkcancel + 0x800cac38 0xc0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_statecheckid + 0x800cacf8 0x1c8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800cacf8 __dvd_statecheckid + .text.__dvd_statecoverclosed + 0x800caec0 0xb0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800caec0 __dvd_statecoverclosed + .text.__dvd_statemotorstoppedcb + 0x800caf70 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_checkaddonscb + 0x800caf90 0x120 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_fwpatchcb + 0x800cb0b0 0x68 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_handlespinupcb + 0x800cb118 0x120 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_cntrldrivecb + 0x800cb238 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_readmemcb + 0x800cb25c 0x88 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_setgcmoffsetcb + 0x800cb2e4 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_stategotoretrycb + 0x800cb320 0xe0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_stateerrorcb + 0x800cb400 0xd8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_stategettingerrorcb + 0x800cb4d8 0x330 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_unrecoverederrorcb + 0x800cb808 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_unrecoverederrorretrycb + 0x800cb840 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_stateretrycb + 0x800cb888 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_statecoverclosedcb + 0x800cb924 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.__dvd_statebusycb + 0x800cb958 0x3d8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .text.DVD_ReadDiskID + 0x800cbd30 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800cbd30 DVD_ReadDiskID + .text.DVD_SpinUpDriveAsync + 0x800cbd84 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800cbd84 DVD_SpinUpDriveAsync + .text.callback + 0x800cbd9c 0xec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800cbd9c callback + .text.DVD_MountAsync + 0x800cbe88 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800cbe88 DVD_MountAsync + .text.DVD_Mount + 0x800cbedc 0x108 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800cbedc DVD_Mount + .text.DVD_Init + 0x800cbfe4 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + 0x800cbfe4 DVD_Init + .text.__exi_probe + 0x800cc080 0x1cc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .text.__exi_attach + 0x800cc24c 0xdc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .text.EXI_Lock + 0x800cc328 0x1dc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cc328 EXI_Lock + .text.EXI_Unlock + 0x800cc504 0x200 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cc504 EXI_Unlock + .text.EXI_Select + 0x800cc704 0x168 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cc704 EXI_Select + .text.EXI_Deselect + 0x800cc86c 0x10c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cc86c EXI_Deselect + .text.EXI_Sync + 0x800cc978 0xc0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cc978 EXI_Sync + .text.EXI_Imm 0x800cca38 0x18c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cca38 EXI_Imm + .text.EXI_ImmEx + 0x800ccbc4 0xbc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800ccbc4 EXI_ImmEx + .text.EXI_Dma 0x800ccc80 0x144 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800ccc80 EXI_Dma + .text.EXI_GetState + 0x800ccdc4 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800ccdc4 EXI_GetState + .text.EXI_Detach + 0x800ccddc 0xc0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800ccddc EXI_Detach + .text.EXI_GetID + 0x800cce9c 0x278 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cce9c EXI_GetID + .text.__unlocked_handler + 0x800cd114 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .text.EXI_SelectSD + 0x800cd13c 0x188 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cd13c EXI_SelectSD + .text.EXI_Probe + 0x800cd2c4 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cd2c4 EXI_Probe + .text.EXI_Attach + 0x800cd344 0xc4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cd344 EXI_Attach + .text.EXI_RegisterEXICallback + 0x800cd408 0x180 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cd408 EXI_RegisterEXICallback + .text.EXI_ProbeEx + 0x800cd588 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cd588 EXI_ProbeEx + .text.EXI_ProbeReset + 0x800cd5e8 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cd5e8 EXI_ProbeReset + .text.__exi_init + 0x800cd660 0x194 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + 0x800cd660 __exi_init + .text.__exi_irq_handler + 0x800cd7f4 0x84 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .text.__tc_irq_handler + 0x800cd878 0x130 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .text.__ext_irq_handler + 0x800cd9a8 0xe0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .text.__mem_onreset + 0x800cda88 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__sys_alarmhandler + 0x800cdadc 0x124 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__sram_sync + 0x800cdc00 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__call_resetfuncs + 0x800cdc0c 0xbc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__MEMInterruptHandler + 0x800cdcc8 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__RSWHandler + 0x800cdcdc 0xbc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.SYS_SetArenaLo + 0x800cdd98 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cdd98 SYS_SetArenaLo + .text.SYS_SetArenaHi + 0x800cdda0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cdda0 SYS_SetArenaHi + .text.SYS_RegisterResetFunc + 0x800cdda8 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cdda8 SYS_RegisterResetFunc + .text.__sram_write + 0x800cde14 0x150 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__sram_writecallback + 0x800cdf64 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__sram_init + 0x800cdfbc 0x1ac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cdfbc __sram_init + .text.__locksram + 0x800ce168 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__unlocksram + 0x800ce1b4 0x104 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .text.__SYS_ReadROM + 0x800ce2b8 0x164 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce2b8 __SYS_ReadROM + .text.SYS_GetArenaHi + 0x800ce41c 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce41c SYS_GetArenaHi + .text.__dsp_shutdown + 0x800ce424 0xe0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce424 __dsp_shutdown + .text.__SYS_LockSram + 0x800ce504 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce504 __SYS_LockSram + .text.__SYS_LockSramEx + 0x800ce50c 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce50c __SYS_LockSramEx + .text.__SYS_UnlockSram + 0x800ce514 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce514 __SYS_UnlockSram + .text.__SYS_UnlockSramEx + 0x800ce51c 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce51c __SYS_UnlockSramEx + .text.__SYS_SyncSram + 0x800ce524 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce524 __SYS_SyncSram + .text.SYS_Init + 0x800ce528 0x4f0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ce528 SYS_Init + .text.SYS_ResetSystem + 0x800cea18 0x220 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cea18 SYS_ResetSystem + .text.SYS_GetArenaLo + 0x800cec38 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cec38 SYS_GetArenaLo + .text.SYS_AllocateFramebuffer + 0x800cec40 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cec40 SYS_AllocateFramebuffer + .text.SYS_CreateAlarm + 0x800cec7c 0x10c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cec7c SYS_CreateAlarm + .text.SYS_SetAlarm + 0x800ced88 0x1a4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800ced88 SYS_SetAlarm + .text.SYS_CancelAlarm + 0x800cef2c 0x94 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cef2c SYS_CancelAlarm + .text.SYS_SetWirelessID + 0x800cefc0 0x68 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cefc0 SYS_SetWirelessID + .text.SYS_GetWirelessID + 0x800cf028 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x800cf028 SYS_GetWirelessID + .text.__lwp_cond_init + 0x800cf074 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + 0x800cf074 __lwp_cond_init + .text.GX_SetGPFifo + 0x800cf0a4 0x2a8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf0a4 GX_SetGPFifo + .text.GX_SetCPUFifo + 0x800cf34c 0x174 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf34c GX_SetCPUFifo + .text.__GXCPInterruptHandler + 0x800cf4c0 0x170 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.__GXTokenInterruptHandler + 0x800cf630 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.__GXFinishInterruptHandler + 0x800cf6a4 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.GX_GetTexFmt + 0x800cf710 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf710 GX_GetTexFmt + .text.__GXDefRegionCallback + 0x800cf718 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.__GXDefTlutRegionCallback + 0x800cf790 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.GX_SetCopyClear + 0x800cf7a4 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf7a4 GX_SetCopyClear + .text.GX_SetNumTexGens + 0x800cf7f0 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf7f0 GX_SetNumTexGens + .text.GX_ClearVtxDesc + 0x800cf844 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf844 GX_ClearVtxDesc + .text.GX_InvVtxCache + 0x800cf878 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf878 GX_InvVtxCache + .text.GX_SetLineWidth + 0x800cf88c 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf88c GX_SetLineWidth + .text.GX_SetPointSize + 0x800cf8c8 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf8c8 GX_SetPointSize + .text.GX_EnableTexOffsets + 0x800cf908 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf908 GX_EnableTexOffsets + .text.GX_SetCoPlanar + 0x800cf950 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf950 GX_SetCoPlanar + .text.GX_SetCullMode + 0x800cf990 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf990 GX_SetCullMode + .text.GX_SetClipMode + 0x800cf9c0 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf9c0 GX_SetClipMode + .text.GX_SetScissor + 0x800cf9ec 0x84 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cf9ec GX_SetScissor + .text.GX_SetScissorBoxOffset + 0x800cfa70 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cfa70 GX_SetScissorBoxOffset + .text.GX_SetNumChans + 0x800cfaa0 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cfaa0 GX_SetNumChans + .text.GX_SetChanCtrl + 0x800cfaf0 0x174 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cfaf0 GX_SetChanCtrl + .text.GX_SetChanAmbColor + 0x800cfc64 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cfc64 GX_SetChanAmbColor + .text.GX_SetChanMatColor + 0x800cfd00 0xb8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cfd00 GX_SetChanMatColor + .text.GX_SetTexRegionCallback + 0x800cfdb8 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cfdb8 GX_SetTexRegionCallback + .text.GX_SetTlutRegionCallback + 0x800cfde4 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cfde4 GX_SetTlutRegionCallback + .text.GX_SetTevOrder + 0x800cfe10 0x1ac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cfe10 GX_SetTevOrder + .text.GX_SetNumTevStages + 0x800cffbc 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cffbc GX_SetNumTevStages + .text.GX_SetAlphaCompare + 0x800cffe8 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800cffe8 GX_SetAlphaCompare + .text.GX_SetZTexture + 0x800d0024 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0024 GX_SetZTexture + .text.GX_SetTevKColorSel + 0x800d00b0 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d00b0 GX_SetTevKColorSel + .text.GX_SetTevKAlphaSel + 0x800d0130 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0130 GX_SetTevKAlphaSel + .text.GX_SetTevSwapMode + 0x800d01b0 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d01b0 GX_SetTevSwapMode + .text.GX_SetTevSwapModeTable + 0x800d01f8 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d01f8 GX_SetTevSwapModeTable + .text.GX_SetNumIndStages + 0x800d0270 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0270 GX_SetNumIndStages + .text.GX_SetIndTexCoordScale + 0x800d0298 0xcc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0298 GX_SetIndTexCoordScale + .text.GX_SetFog + 0x800d0364 0x1d4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0364 GX_SetFog + .text.GX_SetFogRangeAdj + 0x800d0538 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0538 GX_SetFogRangeAdj + .text.GX_SetBlendMode + 0x800d0558 0xd8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0558 GX_SetBlendMode + .text.GX_SetColorUpdate + 0x800d0630 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0630 GX_SetColorUpdate + .text.GX_SetAlphaUpdate + 0x800d0664 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0664 GX_SetAlphaUpdate + .text.GX_SetZMode + 0x800d0698 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0698 GX_SetZMode + .text.GX_SetZCompLoc + 0x800d06e0 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d06e0 GX_SetZCompLoc + .text.GX_SetDither + 0x800d0714 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0714 GX_SetDither + .text.GX_SetDstAlpha + 0x800d0748 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0748 GX_SetDstAlpha + .text.GX_SetPixelFmt + 0x800d0780 0x13c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0780 GX_SetPixelFmt + .text.GX_SetFieldMask + 0x800d08bc 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d08bc GX_SetFieldMask + .text.GX_SetDispCopySrc + 0x800d08e4 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d08e4 GX_SetDispCopySrc + .text.GX_SetDispCopyDst + 0x800d0918 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0918 GX_SetDispCopyDst + .text.GX_SetCopyClamp + 0x800d0938 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0938 GX_SetCopyClamp + .text.GX_SetCopyFilter + 0x800d095c 0x24c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d095c GX_SetCopyFilter + .text.GX_SetDispCopyGamma + 0x800d0ba8 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0ba8 GX_SetDispCopyGamma + .text.GX_SetDispCopyFrame2Field + 0x800d0bc4 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0bc4 GX_SetDispCopyFrame2Field + .text.GX_ClearBoundingBox + 0x800d0be0 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0be0 GX_ClearBoundingBox + .text.GX_PokeColorUpdate + 0x800d0c10 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0c10 GX_PokeColorUpdate + .text.GX_PokeAlphaUpdate + 0x800d0c30 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0c30 GX_PokeAlphaUpdate + .text.GX_PokeDither + 0x800d0c50 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0c50 GX_PokeDither + .text.GX_PokeBlendMode + 0x800d0c70 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0c70 GX_PokeBlendMode + .text.GX_PokeAlphaMode + 0x800d0cfc 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0cfc GX_PokeAlphaMode + .text.GX_PokeAlphaRead + 0x800d0d14 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0d14 GX_PokeAlphaRead + .text.GX_PokeDstAlpha + 0x800d0d28 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0d28 GX_PokeDstAlpha + .text.GX_PokeZMode + 0x800d0d40 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0d40 GX_PokeZMode + .text.GX_SetGPMetric + 0x800d0d54 0x744 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d0d54 GX_SetGPMetric + .text.GX_ClearGPMetric + 0x800d1498 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1498 GX_ClearGPMetric + .text.__GX_FlushTextureState + 0x800d14ac 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.GX_SetFieldMode + 0x800d14cc 0x84 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d14cc GX_SetFieldMode + .text.GX_InvalidateTexAll + 0x800d1550 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1550 GX_InvalidateTexAll + .text.__GX_SetMatrixIndex + 0x800d15a4 0x90 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.GX_SetCurrentMtx + 0x800d1634 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1634 GX_SetCurrentMtx + .text.__GX_SendFlushPrim + 0x800d1654 0xa0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.__SetSURegs + 0x800d16f4 0xa0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.__GX_SetDirtyState + 0x800d1794 0x4a4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.GX_Flush + 0x800d1c38 0xa0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1c38 GX_Flush + .text.__GX_GetNumXfbLines + 0x800d1cd8 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.GX_SetDispCopyYScale + 0x800d1d34 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1d34 GX_SetDispCopyYScale + .text.GX_InitTexCacheRegion + 0x800d1de8 0x100 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1de8 GX_InitTexCacheRegion + .text.GX_InitTlutRegion + 0x800d1ee8 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1ee8 GX_InitTlutRegion + .text.GX_InitFifoLimits + 0x800d1f00 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1f00 GX_InitFifoLimits + .text.GX_InitFifoPtrs + 0x800d1f0c 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1f0c GX_InitFifoPtrs + .text.GX_InitFifoBase + 0x800d1f58 0xc4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d1f58 GX_InitFifoBase + .text.GX_DrawDone + 0x800d201c 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d201c GX_DrawDone + .text.GX_SetViewportJitter + 0x800d20b8 0x88 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d20b8 GX_SetViewportJitter + .text.GX_SetViewport + 0x800d2140 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d2140 GX_SetViewport + .text.GX_LoadProjectionMtx + 0x800d2148 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d2148 GX_LoadProjectionMtx + .text.GX_CopyDisp + 0x800d21fc 0x128 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d21fc GX_CopyDisp + .text.GX_SetTexCopyDst + 0x800d2324 0x204 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d2324 GX_SetTexCopyDst + .text.GX_SetArray + 0x800d2528 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d2528 GX_SetArray + .text.GX_SetVtxDesc + 0x800d2568 0x2c8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d2568 GX_SetVtxDesc + .text.GX_SetVtxDescv + 0x800d2830 0x29c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d2830 GX_SetVtxDescv + .text.__SETVCDFMT + 0x800d2acc 0x508 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.GX_SetVtxAttrFmt + 0x800d2fd4 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d2fd4 GX_SetVtxAttrFmt + .text.GX_Begin + 0x800d3024 0xa4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3024 GX_Begin + .text.GX_End 0x800d30c8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d30c8 GX_End + .text.GX_Position1x8 + 0x800d30cc 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d30cc GX_Position1x8 + .text.GX_Color1x8 + 0x800d30dc 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d30dc GX_Color1x8 + .text.GX_TexCoord2f32 + 0x800d30ec 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d30ec GX_TexCoord2f32 + .text.GX_SetTexCoordGen2 + 0x800d3100 0x2e8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3100 GX_SetTexCoordGen2 + .text.GX_SetTexCoordGen + 0x800d33e8 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d33e8 GX_SetTexCoordGen + .text.WriteMtxPS4x3 + 0x800d33f4 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .text.GX_LoadPosMtxImm + 0x800d3428 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3428 GX_LoadPosMtxImm + .text.GX_LoadNrmMtxImm + 0x800d3450 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3450 GX_LoadNrmMtxImm + .text.GX_LoadTexMtxImm + 0x800d34a8 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d34a8 GX_LoadTexMtxImm + .text.GX_GetTexBufferSize + 0x800d3528 0x164 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3528 GX_GetTexBufferSize + .text.GX_InitTexObj + 0x800d368c 0x160 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d368c GX_InitTexObj + .text.GX_LoadTexObjPreloaded + 0x800d37ec 0x1e4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d37ec GX_LoadTexObjPreloaded + .text.GX_LoadTexObj + 0x800d39d0 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d39d0 GX_LoadTexObj + .text.GX_SetTevColorIn + 0x800d3a5c 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3a5c GX_SetTevColorIn + .text.GX_SetTevAlphaIn + 0x800d3ab8 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3ab8 GX_SetTevAlphaIn + .text.GX_SetTevColorOp + 0x800d3b14 0xcc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3b14 GX_SetTevColorOp + .text.GX_SetTevAlphaOp + 0x800d3be0 0xcc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3be0 GX_SetTevAlphaOp + .text.GX_SetTevOp + 0x800d3cac 0x184 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3cac GX_SetTevOp + .text.GX_SetTevIndirect + 0x800d3e30 0x70 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3e30 GX_SetTevIndirect + .text.GX_SetTevDirect + 0x800d3ea0 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3ea0 GX_SetTevDirect + .text.GX_Init 0x800d3ee8 0xe38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d3ee8 GX_Init + .text.GX_InitLightSpot + 0x800d4d20 0x2a0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x800d4d20 GX_InitLightSpot + .text.guPerspective + 0x800d4fc0 0xe4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + 0x800d4fc0 guPerspective + .text.guLookAt + 0x800d50a4 0x154 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + 0x800d50a4 guLookAt + .text.__AISHandler + 0x800d51f8 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .text.__AIDHandler + 0x800d526c 0xd0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .text.AUDIO_GetStreamSampleRate + 0x800d533c 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d533c AUDIO_GetStreamSampleRate + .text.AUDIO_GetStreamPlayState + 0x800d5350 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d5350 AUDIO_GetStreamPlayState + .text.AUDIO_GetStreamVolLeft + 0x800d5364 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d5364 AUDIO_GetStreamVolLeft + .text.AUDIO_GetStreamVolRight + 0x800d5378 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d5378 AUDIO_GetStreamVolRight + .text.AUDIO_SetStreamVolLeft + 0x800d538c 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d538c AUDIO_SetStreamVolLeft + .text.AUDIO_SetStreamVolRight + 0x800d53a8 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d53a8 AUDIO_SetStreamVolRight + .text.AUDIO_SetStreamPlayState + 0x800d53c8 0x11c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d53c8 AUDIO_SetStreamPlayState + .text.AUDIO_RegisterDMACallback + 0x800d54e4 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d54e4 AUDIO_RegisterDMACallback + .text.AUDIO_InitDMA + 0x800d5510 0x70 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d5510 AUDIO_InitDMA + .text.AUDIO_StartDMA + 0x800d5580 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d5580 AUDIO_StartDMA + .text.AUDIO_StopDMA + 0x800d559c 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d559c AUDIO_StopDMA + .text.AUDIO_GetDSPSampleRate + 0x800d55b4 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d55b4 AUDIO_GetDSPSampleRate + .text.AUDIO_SetDSPSampleRate + 0x800d55cc 0x130 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d55cc AUDIO_SetDSPSampleRate + .text.AUDIO_Init + 0x800d56fc 0x204 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + 0x800d56fc AUDIO_Init + .text.__decrementer_init + 0x800d5900 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) + 0x800d5900 __decrementer_init + .text.c_decrementer_handler + 0x800d593c 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) + 0x800d593c c_decrementer_handler + .text.__lwp_mqbox_init + 0x800d5964 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + 0x800d5964 __lwp_mqbox_init + .text.__card_checksum + 0x800d5994 0x94 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_putcntrlblock + 0x800d5a28 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_getcntrlblock + 0x800d5a68 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.CARD_GetErrorCode + 0x800d5ae8 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d5ae8 CARD_GetErrorCode + .text.__card_sync + 0x800d5b0c 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_synccallback + 0x800d5b8c 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_updateiconoffsets + 0x800d5be4 0x108 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_getfilenum + 0x800d5cec 0x14c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_seek + 0x800d5e38 0x1f8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_iscard + 0x800d6030 0xcc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_unlockedhandler + 0x800d60fc 0x90 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_readstatus + 0x800d618c 0x10c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_clearstatus + 0x800d6298 0xc4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_txhandler + 0x800d635c 0xcc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__timeouthandler + 0x800d6428 0xac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__setuptimeout + 0x800d64d4 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__retry 0x800d6588 0x158 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_defaultapicallback + 0x800d66e0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_exihandler + 0x800d66e4 0x118 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_exthandler + 0x800d67fc 0xdc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__unlocked_callback + 0x800d68d8 0xf0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_start + 0x800d69c8 0xfc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_sectorerase + 0x800d6ac4 0xec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_writepage + 0x800d6bb0 0x108 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_write + 0x800d6cb8 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__erase_callback + 0x800d6d10 0xd4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__blockwritecallback + 0x800d6de4 0xf8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_readsegment + 0x800d6edc 0x174 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_read + 0x800d7050 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__read_callback + 0x800d7094 0x150 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__blockreadcallback + 0x800d71e4 0xf8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_fatwritecallback + 0x800d72dc 0xd4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_dirwritecallback + 0x800d73b0 0xd0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_updatedir + 0x800d7480 0xf4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__write_callback + 0x800d7574 0x174 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_updatefat + 0x800d76e8 0xf4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__delete_callback + 0x800d77dc 0x13c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_allocblock + 0x800d7918 0x194 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_faterasecallback + 0x800d7aac 0xdc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_direrasecallback + 0x800d7b88 0xdc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_createfatcallback + 0x800d7c64 0x13c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_dounmount + 0x800d7da0 0xac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.CARD_Unmount + 0x800d7e4c 0x64 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d7e4c CARD_Unmount + .text.__card_onreset + 0x800d7eb0 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_dummylen + 0x800d7f04 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.exnor 0x800d7fb8 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_readarrayunlock + 0x800d7ff4 0x168 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__dsp_initcallback + 0x800d815c 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_domount + 0x800d81f8 0x760 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__card_mountcallback + 0x800d8958 0x3c0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.__dsp_donecallback + 0x800d8d18 0x1dc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .text.CARD_Init + 0x800d8ef4 0x138 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d8ef4 CARD_Init + .text.CARD_MountAsync + 0x800d902c 0x21c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d902c CARD_MountAsync + .text.CARD_Mount + 0x800d9248 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9248 CARD_Mount + .text.CARD_ReadAsync + 0x800d9294 0x144 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9294 CARD_ReadAsync + .text.CARD_Read + 0x800d93d8 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d93d8 CARD_Read + .text.CARD_WriteAsync + 0x800d941c 0x140 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d941c CARD_WriteAsync + .text.CARD_Write + 0x800d955c 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d955c CARD_Write + .text.CARD_CreateAsync + 0x800d95a0 0x2f8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d95a0 CARD_CreateAsync + .text.CARD_Create + 0x800d9898 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9898 CARD_Create + .text.CARD_Open + 0x800d98e4 0x144 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d98e4 CARD_Open + .text.CARD_Close + 0x800d9a28 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9a28 CARD_Close + .text.CARD_DeleteAsync + 0x800d9aa8 0x118 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9aa8 CARD_DeleteAsync + .text.CARD_Delete + 0x800d9bc0 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9bc0 CARD_Delete + .text.__card_findnext + 0x800d9c0c 0x1b8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9c0c __card_findnext + .text.CARD_FindFirst + 0x800d9dc4 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9dc4 CARD_FindFirst + .text.CARD_FindNext + 0x800d9dec 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9dec CARD_FindNext + .text.CARD_GetSectorSize + 0x800d9dfc 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9dfc CARD_GetSectorSize + .text.CARD_GetStatus + 0x800d9e68 0x134 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9e68 CARD_GetStatus + .text.CARD_SetStatusAsync + 0x800d9f9c 0x188 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800d9f9c CARD_SetStatusAsync + .text.CARD_SetStatus + 0x800da124 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x800da124 CARD_SetStatus + .text.AR_GetDMAStatus + 0x800da170 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + 0x800da170 AR_GetDMAStatus + .text.AR_StartDMA + 0x800da1a0 0xd0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + 0x800da1a0 AR_StartDMA + .text.__ARReadDMA + 0x800da270 0xd4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .text.__ARWriteDMA + 0x800da344 0xd0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .text.AR_Init 0x800da414 0x3e8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + 0x800da414 AR_Init + .text.__ARHandler + 0x800da7fc 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .text.__dsp_removetask + 0x800da854 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .text.DSP_CheckMailFrom + 0x800da8c8 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + 0x800da8c8 DSP_CheckMailFrom + .text.DSP_ReadMailFrom + 0x800da8dc 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + 0x800da8dc DSP_ReadMailFrom + .text.DSP_SendMailTo + 0x800da900 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + 0x800da900 DSP_SendMailTo + .text.DSP_CheckMailTo + 0x800da920 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + 0x800da920 DSP_CheckMailTo + .text.__dsp_exectask + 0x800da934 0x19c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .text.__dsp_def_taskcb + 0x800daad0 0x368 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .text.__dsp_inthandler + 0x800dae38 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .text.DSP_Init + 0x800dae78 0xd4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + 0x800dae78 DSP_Init + .text.DSP_AddTask + 0x800daf4c 0x1e4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + 0x800daf4c DSP_AddTask + .text.__si_transfer + 0x800db130 0x150 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .text.__si_alarmhandler + 0x800db280 0xa0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .text.__si_calltypandstatuscallback + 0x800db320 0x94 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .text.SI_IsChanBusy + 0x800db3b4 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db3b4 SI_IsChanBusy + .text.SI_Busy 0x800db3f4 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db3f4 SI_Busy + .text.SI_SetXY + 0x800db40c 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db40c SI_SetXY + .text.SI_TransferCommands + 0x800db45c 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db45c SI_TransferCommands + .text.SI_EnablePolling + 0x800db470 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db470 SI_EnablePolling + .text.SI_DisablePolling + 0x800db4f0 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db4f0 SI_DisablePolling + .text.SI_SetSamplingRate + 0x800db534 0xd0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db534 SI_SetSamplingRate + .text.SI_RefreshSamplingRate + 0x800db604 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db604 SI_RefreshSamplingRate + .text.SI_GetStatus + 0x800db60c 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db60c SI_GetStatus + .text.SI_GetResponseRaw + 0x800db66c 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db66c SI_GetResponseRaw + .text.SI_GetResponse + 0x800db6e4 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db6e4 SI_GetResponse + .text.SI_SetCommand + 0x800db780 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db780 SI_SetCommand + .text.SI_Transfer + 0x800db790 0x158 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800db790 SI_Transfer + .text.__si_interrupthandler + 0x800db8e8 0x464 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .text.__si_gettypecallback + 0x800dbd4c 0x274 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .text.SI_GetType + 0x800dbfc0 0x17c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800dbfc0 SI_GetType + .text.SI_GetTypeAsync + 0x800dc13c 0x104 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800dc13c SI_GetTypeAsync + .text.SI_EnablePollingInterrupt + 0x800dc240 0xa4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800dc240 SI_EnablePollingInterrupt + .text.SI_RegisterPollingHandler + 0x800dc2e4 0xcc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800dc2e4 SI_RegisterPollingHandler + .text.SI_UnregisterPollingHandler + 0x800dc3b0 0xd4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800dc3b0 SI_UnregisterPollingHandler + .text.__si_init + 0x800dc484 0xe0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x800dc484 __si_init + .text.__lwp_priority_init + 0x800dc564 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_priority.o) + 0x800dc564 __lwp_priority_init + .text.__lwp_queue_initialize + 0x800dc598 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + 0x800dc598 __lwp_queue_initialize + .text.__lwp_queue_get + 0x800dc5dc 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + 0x800dc5dc __lwp_queue_get + .text.__lwp_queue_append + 0x800dc624 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + 0x800dc624 __lwp_queue_append + .text.__lwp_threadqueue_enqueuefifo + 0x800dc65c 0xf0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dc65c __lwp_threadqueue_enqueuefifo + .text.__lwp_threadqueue_dequeuefifo + 0x800dc74c 0x104 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dc74c __lwp_threadqueue_dequeuefifo + .text.__lwp_threadqueue_enqueuepriority + 0x800dc850 0x258 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dc850 __lwp_threadqueue_enqueuepriority + .text.__lwp_threadqueue_dequeuepriority + 0x800dcaa8 0x190 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dcaa8 __lwp_threadqueue_dequeuepriority + .text.__lwp_threadqueue_init + 0x800dcc38 0x68 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dcc38 __lwp_threadqueue_init + .text.__lwp_threadqueue_enqueue + 0x800dcca0 0x178 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dcca0 __lwp_threadqueue_enqueue + .text.__lwp_threadqueue_dequeue + 0x800dce18 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dce18 __lwp_threadqueue_dequeue + .text.__lwp_threadqueue_flush + 0x800dce74 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dce74 __lwp_threadqueue_flush + .text.__lwp_threadqueue_extractfifo + 0x800dcec0 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dcec0 __lwp_threadqueue_extractfifo + .text.__lwp_threadqueue_extractpriority + 0x800dcf74 0x11c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dcf74 __lwp_threadqueue_extractpriority + .text.__lwp_threadqueue_extract + 0x800dd090 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dd090 __lwp_threadqueue_extract + .text.__lwp_threadqueue_timeout + 0x800dd0ac 0x7c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + .text.__lwp_threadqueue_extractproxy + 0x800dd128 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + 0x800dd128 __lwp_threadqueue_extractproxy + .text.__lwp_thread_clearstate + 0x800dd17c 0xcc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd17c __lwp_thread_clearstate + .text.__lwp_isr_in_progress + 0x800dd248 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd248 __lwp_isr_in_progress + .text.__lwp_thread_delayended + 0x800dd250 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd250 __lwp_thread_delayended + .text.__thread_dispatch_fp + 0x800dd298 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd298 __thread_dispatch_fp + .text.__thread_dispatch + 0x800dd2ec 0xf0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd2ec __thread_dispatch + .text.__lwp_thread_setstate + 0x800dd3dc 0x124 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd3dc __lwp_thread_setstate + .text.__lwp_thread_settransient + 0x800dd500 0xa0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd500 __lwp_thread_settransient + .text.__lwp_thread_setpriority + 0x800dd5a0 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd5a0 __lwp_thread_setpriority + .text.__lwp_thread_changepriority + 0x800dd600 0x180 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd600 __lwp_thread_changepriority + .text.__lwp_thread_suspend + 0x800dd780 0x130 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd780 __lwp_thread_suspend + .text.__lwp_thread_resume + 0x800dd8b0 0xfc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd8b0 __lwp_thread_resume + .text.__lwp_thread_loadenv + 0x800dd9ac 0xa8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dd9ac __lwp_thread_loadenv + .text.__lwp_thread_ready + 0x800dda54 0xd8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dda54 __lwp_thread_ready + .text.__lwp_thread_init + 0x800ddb2c 0x11c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800ddb2c __lwp_thread_init + .text.__lwp_thread_close + 0x800ddc48 0x110 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800ddc48 __lwp_thread_close + .text.__lwp_thread_exit + 0x800ddd58 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800ddd58 __lwp_thread_exit + .text.__lwp_thread_handler + 0x800dddc4 0xc8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + .text.__lwp_thread_closeall + 0x800dde8c 0xf4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800dde8c __lwp_thread_closeall + .text.__lwp_thread_start + 0x800ddf80 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800ddf80 __lwp_thread_start + .text.__lwp_thread_startmultitasking + 0x800ddff8 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800ddff8 __lwp_thread_startmultitasking + .text.__lwp_thread_stopmultitasking + 0x800de064 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800de064 __lwp_thread_stopmultitasking + .text.__lwp_thread_coreinit + 0x800de0ac 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x800de0ac __lwp_thread_coreinit + .text.idle_func + 0x800de108 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + .text.__lwp_sysinit + 0x800de10c 0x124 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + 0x800de10c __lwp_sysinit + .text.LWP_SuspendThread + 0x800de230 0xc0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + 0x800de230 LWP_SuspendThread + .text.LWP_ResumeThread + 0x800de2f0 0xc4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + 0x800de2f0 LWP_ResumeThread + .text.LWP_GetSelf + 0x800de3b4 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + 0x800de3b4 LWP_GetSelf + .text.LWP_InitQueue + 0x800de3d8 0x108 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + 0x800de3d8 LWP_InitQueue + .text.LWP_ThreadSleep + 0x800de4e0 0xec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + 0x800de4e0 LWP_ThreadSleep + .text.LWP_ThreadBroadcast + 0x800de5cc 0x88 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + 0x800de5cc LWP_ThreadBroadcast + .text.__lwp_stack_allocate + 0x800de654 0x70 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + 0x800de654 __lwp_stack_allocate + .text.__lwp_stack_free + 0x800de6c4 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + 0x800de6c4 __lwp_stack_free + .text.__lwp_wd_settimer + 0x800de710 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + .text.__lwp_watchdog_init + 0x800de7c4 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + 0x800de7c4 __lwp_watchdog_init + .text.__lwp_wd_remove + 0x800de7f0 0x114 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + 0x800de7f0 __lwp_wd_remove + .text.__lwp_wd_insert + 0x800de904 0x150 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + 0x800de904 __lwp_wd_insert + .text.__lwp_wd_tickle + 0x800dea54 0x108 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + 0x800dea54 __lwp_wd_tickle + .text.__lwp_wkspace_init + 0x800deb5c 0xa8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) + 0x800deb5c __lwp_wkspace_init + .text.__lwp_objmgr_initinfo + 0x800dec04 0x19c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + 0x800dec04 __lwp_objmgr_initinfo + .text.__lwp_objmgr_getisrdisable + 0x800deda0 0x54 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + 0x800deda0 __lwp_objmgr_getisrdisable + .text.__lwp_objmgr_getnoprotection + 0x800dedf4 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + 0x800dedf4 __lwp_objmgr_getnoprotection + .text.__lwp_objmgr_get + 0x800dee28 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + 0x800dee28 __lwp_objmgr_get + .text.__lwp_objmgr_allocate + 0x800deea8 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + 0x800deea8 __lwp_objmgr_allocate + .text.__lwp_objmgr_free + 0x800def08 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + 0x800def08 __lwp_objmgr_free + .text.__lwp_heap_init + 0x800def58 0xac c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + 0x800def58 __lwp_heap_init + .text.__lwp_heap_allocate + 0x800df004 0x12c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + 0x800df004 __lwp_heap_allocate + .text.__lwp_heap_free + 0x800df130 0x1c0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + 0x800df130 __lwp_heap_free + .text.__exception_load + 0x800df2f0 0xa4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + 0x800df2f0 __exception_load + .text.__systemcall_init + 0x800df394 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + 0x800df394 __systemcall_init + .text.__exception_sethandler + 0x800df3b4 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + 0x800df3b4 __exception_sethandler + .text.__exception_init + 0x800df3c8 0xa8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + 0x800df3c8 __exception_init + .text.c_default_exceptionhandler + 0x800df470 0x35c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + 0x800df470 c_default_exceptionhandler + .text.c_irqdispatcher + 0x800df7cc 0x280 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + 0x800df7cc c_irqdispatcher + .text.__SetInterrupts + 0x800dfa4c 0x268 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + .text.__UnmaskIrq + 0x800dfcb4 0x7c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + 0x800dfcb4 __UnmaskIrq + .text.__MaskIrq + 0x800dfd30 0x7c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + 0x800dfd30 __MaskIrq + .text.__irq_init + 0x800dfdac 0xc8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + 0x800dfdac __irq_init + .text.IRQ_Request + 0x800dfe74 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + 0x800dfe74 IRQ_Request + .text.IRQ_GetHandler + 0x800dfeb4 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + 0x800dfeb4 IRQ_GetHandler + .text.__lwp_sema_init + 0x800dfee4 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + 0x800dfee4 __lwp_sema_init + .text.__lwp_mutex_locksupp + 0x800dff14 0x238 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + .text.__lwp_mutex_init + 0x800e014c 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + 0x800e014c __lwp_mutex_init + .text.LWP_MutexInit + 0x800e017c 0x130 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + 0x800e017c LWP_MutexInit + .text.LWP_MutexDestroy + 0x800e02ac 0xf0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + 0x800e02ac LWP_MutexDestroy + .text.LWP_MutexLock + 0x800e039c 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + 0x800e039c LWP_MutexLock + .text.LWP_MutexUnlock + 0x800e03a8 0x9c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + 0x800e03a8 LWP_MutexUnlock + .text.__lwp_mutex_initialize + 0x800e0444 0xa4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + 0x800e0444 __lwp_mutex_initialize + .text.__lwp_mutex_surrender + 0x800e04e8 0x144 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + 0x800e04e8 __lwp_mutex_surrender + .text.__lwp_mutex_seize_irq_blocking + 0x800e062c 0x114 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + 0x800e062c __lwp_mutex_seize_irq_blocking + .text.__lwp_mutex_flush + 0x800e0740 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + 0x800e0740 __lwp_mutex_flush + .text.compress2 + 0x800e0760 0xf4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) + 0x800e0760 compress2 + .text.crc32 0x800e0854 0x38c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(crc32.o) + 0x800e0854 crc32 + .text.uncompress + 0x800e0be0 0x100 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(uncompr.o) + 0x800e0be0 uncompress + .text.deflateEnd + 0x800e0ce0 0x1a4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + 0x800e0ce0 deflateEnd + .text.putShortMSB + 0x800e0e84 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .text.flush_pending + 0x800e0eac 0xe0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .text.deflate 0x800e0f8c 0xb14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + 0x800e0f8c deflate + .text.deflateReset + 0x800e1aa0 0x194 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + 0x800e1aa0 deflateReset + .text.deflateInit2_ + 0x800e1c34 0x3cc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + 0x800e1c34 deflateInit2_ + .text.deflateInit_ + 0x800e2000 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + 0x800e2000 deflateInit_ + .text.longest_match + 0x800e201c 0x1e0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .text.longest_match_fast + 0x800e21fc 0xfc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .text.fill_window + 0x800e22f8 0x240 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .text.deflate_stored + 0x800e2538 0x200 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .text.deflate_fast + 0x800e2738 0x4b4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .text.deflate_slow + 0x800e2bec 0x5e0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .text.init_block + 0x800e31cc 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .text._tr_init + 0x800e3240 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + 0x800e3240 _tr_init + .text.pqdownheap + 0x800e3298 0x158 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .text.build_tree + 0x800e33f0 0x5b0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .text.scan_tree + 0x800e39a0 0x11c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .text.send_tree + 0x800e3abc 0x54c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .text.bi_flush + 0x800e4008 0x84 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .text._tr_align + 0x800e408c 0x294 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + 0x800e408c _tr_align + .text.compress_block + 0x800e4320 0x4b0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .text.bi_windup + 0x800e47d0 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .text._tr_stored_block + 0x800e4850 0x140 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + 0x800e4850 _tr_stored_block + .text._tr_flush_block + 0x800e4990 0x618 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + 0x800e4990 _tr_flush_block + .text.zcalloc 0x800e4fa8 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + 0x800e4fa8 zcalloc + .text.zcfree 0x800e4fcc 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + 0x800e4fcc zcfree + .text.inflateReset + 0x800e4ff0 0x88 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + 0x800e4ff0 inflateReset + .text.inflateInit2_ + 0x800e5078 0x178 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + 0x800e5078 inflateInit2_ + .text.inflateInit_ + 0x800e51f0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + 0x800e51f0 inflateInit_ + .text.updatewindow + 0x800e5200 0x1a0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + .text.inflate 0x800e53a0 0x1750 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + 0x800e53a0 inflate + .text.inflateEnd + 0x800e6af0 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + 0x800e6af0 inflateEnd + .text.inflate_table + 0x800e6b7c 0x580 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) + 0x800e6b7c inflate_table + .text.inflate_fast + 0x800e70fc 0x4dc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inffast.o) + 0x800e70fc inflate_fast + .text.adler32 0x800e75d8 0x324 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(adler32.o) + 0x800e75d8 adler32 + .text.__libc_create_hook + 0x800e78fc 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x800e78fc __libc_create_hook + .text.__libc_start_hook + 0x800e790c 0x1c0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x800e790c __libc_start_hook + .text.__libc_delete_hook + 0x800e7acc 0x98 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x800e7acc __libc_delete_hook + .text.__libc_init + 0x800e7b64 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x800e7b64 __libc_init + .text.__libc_wrapup + 0x800e7be4 0x64 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x800e7be4 __libc_wrapup + .text._exit 0x800e7c48 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x800e7c48 _exit + .text.usleep 0x800e7c64 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(usleep.o) + 0x800e7c64 usleep + .text.gettime 0x800e7c98 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + 0x800e7c98 gettime + .text.gettick 0x800e7cbc 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + 0x800e7cbc gettick + .text.diff_msec + 0x800e7ccc 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + 0x800e7ccc diff_msec + .text.diff_usec + 0x800e7d38 0x70 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + 0x800e7d38 diff_usec + .text.__timesystem_init + 0x800e7da8 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + 0x800e7da8 __timesystem_init + .text.udelay 0x800e7df0 0x64 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + 0x800e7df0 udelay + .text.nanosleep + 0x800e7e54 0x154 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + 0x800e7e54 nanosleep + .text.__time_exi_unlock + 0x800e7fa8 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + .text.time 0x800e7fd0 0x110 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + 0x800e7fd0 time + .text.__console_init + 0x800e80e0 0xd8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x800e80e0 __console_init + .text.console_init + 0x800e81b8 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x800e81b8 console_init + .text.console_putc + 0x800e8208 0x248 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x800e8208 console_putc + .text.con_open + 0x800e8450 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x800e8450 con_open + .text.con_write + 0x800e8464 0xbc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x800e8464 con_write + .text.con_read + 0x800e8520 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x800e8520 con_read + .text.con_close + 0x800e8528 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x800e8528 con_close + .text.__memlock_init + 0x800e8530 0xa4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + 0x800e8530 __memlock_init + .text.__malloc_lock + 0x800e85d4 0x1a8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + 0x800e85d4 __malloc_lock + .text.__malloc_unlock + 0x800e877c 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + 0x800e877c __malloc_unlock + .text.SDCARD_Init + 0x800e87dc 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + 0x800e87dc SDCARD_Init + .text.SDCARD_OpenFile + 0x800e8868 0x1c8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + 0x800e8868 SDCARD_OpenFile + .text.SDCARD_ReadFile + 0x800e8a30 0xb0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + 0x800e8a30 SDCARD_ReadFile + .text.SDCARD_WriteFile + 0x800e8ae0 0x84 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + 0x800e8ae0 SDCARD_WriteFile + .text.SDCARD_SeekFile + 0x800e8b64 0xd8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + 0x800e8b64 SDCARD_SeekFile + .text.SDCARD_CloseFile + 0x800e8c3c 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + 0x800e8c3c SDCARD_CloseFile + .text.SDCARD_GetStats + 0x800e8c8c 0xf0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + 0x800e8c8c SDCARD_GetStats + .text.__sdcardio_getfd + 0x800e8d7c 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + .text.sdcardio_open + 0x800e8df4 0x148 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + 0x800e8df4 sdcardio_open + .text.sdcardio_close + 0x800e8f3c 0xa8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + 0x800e8f3c sdcardio_close + .text.sdcardio_write + 0x800e8fe4 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + 0x800e8fe4 sdcardio_write + .text.sdcardio_read + 0x800e905c 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + 0x800e905c sdcardio_read + .text.sdcardio_seek + 0x800e90d4 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + 0x800e90d4 sdcardio_seek + .text.sdcardio_stat + 0x800e914c 0xe0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + 0x800e914c sdcardio_stat + .text.card_extractLastName + 0x800e922c 0xa4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .text.card_initFATDefault + 0x800e92d0 0xdc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e92d0 card_initFATDefault + .text.card_initFAT + 0x800e93ac 0x764 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e93ac card_initFAT + .text.card_preFAT + 0x800e9b10 0x94 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e9b10 card_preFAT + .text.card_postFAT + 0x800e9ba4 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e9ba4 card_postFAT + .text.card_insertedCB + 0x800e9bd4 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e9bd4 card_insertedCB + .text.card_ejectedCB + 0x800e9c1c 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e9c1c card_ejectedCB + .text.card_getDriveNo + 0x800e9c64 0xdc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e9c64 card_getDriveNo + .text.card_allocCluster + 0x800e9d40 0x7c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e9d40 card_allocCluster + .text.card_readBlock + 0x800e9dbc 0x2c0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800e9dbc card_readBlock + .text.card_readCluster + 0x800ea07c 0x260 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ea07c card_readCluster + .text.card_writeBlock + 0x800ea2dc 0x2b8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ea2dc card_writeBlock + .text.card_fatUpdate + 0x800ea594 0x344 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ea594 card_fatUpdate + .text.card_writeCluster + 0x800ea8d8 0x264 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ea8d8 card_writeCluster + .text.card_setCluster + 0x800eab3c 0x114 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800eab3c card_setCluster + .text.card_convertToFATName + 0x800eac50 0x2b4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800eac50 card_convertToFATName + .text.card_findEntryInDirectory + 0x800eaf04 0x718 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800eaf04 card_findEntryInDirectory + .text.card_getLongName + 0x800eb61c 0x1d8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800eb61c card_getLongName + .text.card_expandClusterSpace + 0x800eb7f4 0x474 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800eb7f4 card_expandClusterSpace + .text.card_checkPath + 0x800ebc68 0x284 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ebc68 card_checkPath + .text.card_deleteFromOpenedList + 0x800ebeec 0xe4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ebeec card_deleteFromOpenedList + .text.card_getOpenedList + 0x800ebfd0 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ebfd0 card_getOpenedList + .text.card_addToOpenedFileList + 0x800ec01c 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ec01c card_addToOpenedFileList + .text.card_getFileSize + 0x800ec090 0x13c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ec090 card_getFileSize + .text.card_readFromDisk + 0x800ec1cc 0x238 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ec1cc card_readFromDisk + .text.card_writeToDisk + 0x800ec404 0x2f0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ec404 card_writeToDisk + .text.card_writeCacheToDisk + 0x800ec6f4 0x364 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ec6f4 card_writeCacheToDisk + .text.card_prepareFileClose + 0x800eca58 0x118 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800eca58 card_prepareFileClose + .text.card_deleteDirEntry + 0x800ecb70 0x114 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ecb70 card_deleteDirEntry + .text.card_removeFile + 0x800ecc84 0x194 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ecc84 card_removeFile + .text.card_readStat + 0x800ece18 0x1e8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ece18 card_readStat + .text.card_openFile + 0x800ed000 0x240 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ed000 card_openFile + .text.card_closeFile + 0x800ed240 0x218 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ed240 card_closeFile + .text.card_seekFile + 0x800ed458 0x398 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ed458 card_seekFile + .text.card_readFile + 0x800ed7f0 0x2f8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ed7f0 card_readFile + .text.card_writeFile + 0x800edae8 0x240 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800edae8 card_writeFile + .text.card_addDirEntry + 0x800edd28 0xa0c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800edd28 card_addDirEntry + .text.card_createFile + 0x800ee734 0x39c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x800ee734 card_createFile + .text.card_initBufferPool + 0x800eead0 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + 0x800eead0 card_initBufferPool + .text.card_allocBuffer + 0x800eeb0c 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + 0x800eeb0c card_allocBuffer + .text.card_freeBuffer + 0x800eeb2c 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + 0x800eeb2c card_freeBuffer + .text.__make_crc7 + 0x800eeb48 0x84 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__make_crc16 + 0x800eebcc 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_checktimeout + 0x800eec80 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__exi_unlock + 0x800eed00 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__exi_wait + 0x800eed30 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_writecmd + 0x800eedb0 0x190 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_readresponse + 0x800eef40 0x1d8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_dataresponse + 0x800ef118 0x2f8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_dataread + 0x800ef410 0x230 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_response1 + 0x800ef640 0x138 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_response2 + 0x800ef778 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_sendappcmd + 0x800ef804 0x160 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_sendcmd + 0x800ef964 0x7c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_setblocklen + 0x800ef9e0 0x198 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_readcsd + 0x800efb78 0x164 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_readcid + 0x800efcdc 0x164 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_sd_status + 0x800efe40 0xd8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_softreset + 0x800eff18 0x2ec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.card_initIODefault + 0x800f0204 0x8c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x800f0204 card_initIODefault + .text.card_doUnmount + 0x800f0290 0x104 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x800f0290 card_doUnmount + .text.card_initIO + 0x800f0394 0x420 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x800f0394 card_initIO + .text.card_preIO + 0x800f07b4 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x800f07b4 card_preIO + .text.card_writeSector + 0x800f0804 0x244 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x800f0804 card_writeSector + .text.card_readSector + 0x800f0a48 0x110 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x800f0a48 card_readSector + .text.__card_retrycb + 0x800f0b58 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.__card_exthandler + 0x800f0b70 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .text.card_convertStrToUni + 0x800f0ba8 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_uni.o) + 0x800f0ba8 card_convertStrToUni + .text.card_uniToUpper + 0x800f0bd0 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_uni.o) + 0x800f0bd0 card_uniToUpper + .text.netio_open_f + 0x800f0c30 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + 0x800f0c30 netio_open_f + .text.netio_close_f + 0x800f0c38 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + 0x800f0c38 netio_close_f + .text.netio_write_f + 0x800f0c40 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + 0x800f0c40 netio_write_f + .text.netio_read_f + 0x800f0c48 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + 0x800f0c48 netio_read_f + .text.stdin_open + 0x800f0c50 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + 0x800f0c50 stdin_open + .text.stdin_close + 0x800f0c58 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + 0x800f0c58 stdin_close + .text.stdin_write + 0x800f0c60 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + 0x800f0c60 stdin_write + .text.stdin_read + 0x800f0c68 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + 0x800f0c68 stdin_read + .text.sdcardio_open_f + 0x800f0c70 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + 0x800f0c70 sdcardio_open_f + .text.sdcardio_close_f + 0x800f0c78 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + 0x800f0c78 sdcardio_close_f + .text.sdcardio_write_f + 0x800f0c80 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + 0x800f0c80 sdcardio_write_f + .text.sdcardio_read_f + 0x800f0c88 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + 0x800f0c88 sdcardio_read_f + .text.sdcardio_seek_f + 0x800f0c90 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + 0x800f0c90 sdcardio_seek_f + .text.sdcardio_stat_f + 0x800f0c98 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + 0x800f0c98 sdcardio_stat_f + .text.dvd_open_f + 0x800f0ca0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + 0x800f0ca0 dvd_open_f + .text.dvd_close_f + 0x800f0ca8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + 0x800f0ca8 dvd_close_f + .text.dvd_write_f + 0x800f0cb0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + 0x800f0cb0 dvd_write_f + .text.dvd_read_f + 0x800f0cb8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + 0x800f0cb8 dvd_read_f + .text.dvd_seek_f + 0x800f0cc0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + 0x800f0cc0 dvd_seek_f + .text.dvd_stat_f + 0x800f0cc8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + 0x800f0cc8 dvd_stat_f + .text.sbrk 0x800f0cd0 0x84 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sbrk.o) + 0x800f0cd0 sbrk + .text.write 0x800f0d54 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(write.o) + 0x800f0d54 write + .text.close 0x800f0e08 0xa4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(close.o) + 0x800f0e08 close + .text.getpid 0x800f0eac 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(getpid.o) + 0x800f0eac getpid + .text.kill 0x800f0eb4 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(kill.o) + 0x800f0eb4 kill + .text.isatty 0x800f0ebc 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(isatty.o) + 0x800f0ebc isatty + .text.fstat 0x800f0ec4 0xb0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(fstat.o) + 0x800f0ec4 fstat + .text.read 0x800f0f74 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(read.o) + 0x800f0f74 read + .text.lseek 0x800f1028 0xb4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lseek.o) + 0x800f1028 lseek + .text.__flockfile + 0x800f10dc 0x64 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + 0x800f10dc __flockfile + .text.__funlockfile + 0x800f1140 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + 0x800f1140 __funlockfile + .text.__libc_lock_init + 0x800f1164 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + 0x800f1164 __libc_lock_init + .text.__libc_lock_close + 0x800f11c0 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + 0x800f11c0 __libc_lock_close + .text.__libc_lock_acquire + 0x800f1210 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + 0x800f1210 __libc_lock_acquire + .text.__libc_lock_release + 0x800f1250 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + 0x800f1250 __libc_lock_release + *(.stub) + *(.gnu.warning) + *(.gnu.linkonce.t.*) + 0x800f12a0 . = ALIGN (0x20) + *fill* 0x800f1290 0x10 00000000 + +.fini 0x800f12a0 0x20 + *(.fini) + .fini 0x800f12a0 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o + 0x800f12a0 __fini + .fini 0x800f12ac 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o + .fini 0x800f12b0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o + 0x800f12c0 . = ALIGN (0x20) + 0x800f12c0 PROVIDE (__etext, .) + 0x800f12c0 PROVIDE (_etext, .) + 0x800f12c0 PROVIDE (etext, .) + 0x000ee1c0 text_mem_size = (. - text_mem_start) + 0x800f12c0 data_mem_start = . + +.rodata 0x800f12c0 0x8713 + *(.rodata) + .rodata 0x800f12c0 0x20 eeprom.o + .rodata 0x800f12e0 0x40 input.o + .rodata 0x800f1320 0x50 io.o + .rodata 0x800f1370 0x700 mem68k.o + .rodata 0x800f1a70 0x2c8 membnk.o + .rodata 0x800f1d38 0x20 memvdp.o + .rodata 0x800f1d58 0x100 memz80.o + .rodata 0x800f1e58 0x28 render.o + .rodata 0x800f1e80 0x34 ssf2tnc.o + .rodata 0x800f1eb4 0x44 vdp.o + .rodata 0x800f1ef8 0x100 m68kcpu.o + .rodata 0x800f1ff8 0x4cc z80.o + .rodata 0x800f24c4 0x488 fm.o + .rodata 0x800f294c 0x80 sn76489.o + .rodata 0x800f29cc 0x2ec ym2612.o + 0x800f2a3c DT_DEF_TAB + 0x800f29cc LFO_FMS_TAB + 0x800f29ec LFO_AMS_TAB + 0x800f29fc FKEY_TAB + .rodata 0x800f2cb8 0x64 confjoy.o + .rodata 0x800f2d1c 0x20 ggentry.o + .rodata 0x800f2d3c 0x80 mcard.o + .rodata 0x800f2dbc 0x228 menu.o + .rodata 0x800f2fe4 0x38 rominfo.o + .rodata 0x800f301c 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .rodata 0x800f3074 0x6c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .rodata 0x800f30e0 0x478 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .rodata 0x800f3558 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + *fill* 0x800f356c 0x4 00 + .rodata 0x800f3570 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) + .rodata 0x800f35a0 0x188 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) + .rodata 0x800f3728 0x398 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) + .rodata 0x800f3ac0 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + .rodata 0x800f3b10 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) + .rodata 0x800f3b48 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_rint.o) + .rodata 0x800f3b58 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + *fill* 0x800f3bcc 0x4 00 + .rodata 0x800f3bd0 0x400 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + .rodata 0x800f3fd0 0x104 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(ctype_.o) + 0x800f3fd0 _ctype_ + .rodata 0x800f40d4 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) + .rodata 0x800f4134 0x68 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + .rodata 0x800f419c 0x184 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + .rodata 0x800f4320 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + .rodata 0x800f4338 0x128 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + 0x800f4338 __mprec_tinytens + 0x800f4388 __mprec_tens + 0x800f4360 __mprec_bigtens + *(.rodata.*) + .rodata.cst4 0x800f4460 0x4 eeprom.o + *fill* 0x800f4464 0x4 00 + .rodata.cst8 0x800f4468 0x18 genesis.o + .rodata.str1.4 + 0x800f4480 0xae mem68k.o + 0xb0 (size before relaxing) + *fill* 0x800f452e 0x2 00 + .rodata.str1.4 + 0x800f4530 0x9e membnk.o + 0xa0 (size before relaxing) + *fill* 0x800f45ce 0x2 00 + .rodata.str1.4 + 0x800f45d0 0x8d memz80.o + 0x90 (size before relaxing) + *fill* 0x800f465d 0x3 00 + .rodata.cst4 0x800f4660 0x4 system.o + *fill* 0x800f4664 0x4 00 + .rodata.cst8 0x800f4668 0x10 system.o + 0x30 (size before relaxing) + .rodata.str1.4 + 0x800f4678 0xea m68kcpu.o + 0xf8 (size before relaxing) + *fill* 0x800f4762 0x2 00 + .rodata.cst4 0x800f4764 0x4 fm.o + .rodata.cst8 0x800f4768 0x88 fm.o + 0xb8 (size before relaxing) + .rodata.cst8 0x800f47f0 0x0 sn76489.o + 0x10 (size before relaxing) + .rodata.cst4 0x800f47f0 0x8 sn76489.o + .rodata.cst8 0x800f47f8 0x20 sn76496.o + 0x38 (size before relaxing) + .rodata.cst8 0x800f4818 0x10 sound.o + 0x20 (size before relaxing) + .rodata.cst8 0x800f4828 0xb8 ym2612.o + 0xf8 (size before relaxing) + .rodata.str1.4 + 0x800f48e0 0x58 loadrom.o + .rodata.str1.4 + 0x800f4938 0x9 ngc.o + 0xc (size before relaxing) + *fill* 0x800f4941 0x3 00 + .rodata.cst4 0x800f4944 0x1c ngc.o + .rodata.cst8 0x800f4960 0x0 ngc.o + 0x8 (size before relaxing) + .rodata.str1.4 + 0x800f4960 0x22 unzip.o + 0x24 (size before relaxing) + *fill* 0x800f4982 0x2 00 + .rodata.str1.4 + 0x800f4984 0xee confjoy.o + 0xf0 (size before relaxing) + *fill* 0x800f4a72 0x2 00 + .rodata.str1.4 + 0x800f4a74 0xe8 filesel.o + 0xec (size before relaxing) + .rodata.cst4 0x800f4b5c 0xc filesel.o + .rodata.str1.4 + 0x800f4b68 0x14 font.o + .rodata.str1.4 + 0x800f4b7c 0x1d ggentry.o + 0x20 (size before relaxing) + *fill* 0x800f4b99 0x3 00 + .rodata.str1.4 + 0x800f4b9c 0x10 iso9660.o + 0x14 (size before relaxing) + .rodata.cst4 0x800f4bac 0x14 iso9660.o + .rodata.str1.4 + 0x800f4bc0 0x1ac legal.o + .rodata.str1.4 + 0x800f4d6c 0x177 mcard.o + 0x17c (size before relaxing) + *fill* 0x800f4ee3 0x1 00 + .rodata.str1.4 + 0x800f4ee4 0x26b menu.o + 0x26c (size before relaxing) + *fill* 0x800f514f 0x1 00 + .rodata.cst8 0x800f5150 0x18 menu.o + 0x20 (size before relaxing) + .rodata.str1.4 + 0x800f5168 0x1ca rominfo.o + 0x1e4 (size before relaxing) + *fill* 0x800f5332 0x2 00 + .rodata.str1.4 + 0x800f5334 0xc vfat.o + 0x14 (size before relaxing) + .rodata.video_timing + 0x800f5340 0x130 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .rodata.__dvd_patchcodeQ08 + 0x800f5470 0x1c0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .rodata.__dvd_patchcode08 + 0x800f5630 0x1c0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .rodata.__dvd_patchcode06 + 0x800f57f0 0x1c0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .rodata.__dvd_patchcode04 + 0x800f59b0 0x1c0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .rodata.cst4 0x800f5b70 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x7c (size before relaxing) + *fill* 0x800f5bac 0x4 00 + .rodata.cst8 0x800f5bb0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + 0x48 (size before relaxing) + .rodata.cst4 0x800f5bb8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + 0x4c (size before relaxing) + .rodata.str1.4 + 0x800f5bbc 0x1e c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + 0x20 (size before relaxing) + *fill* 0x800f5bda 0x2 00 + .rodata.str1.4 + 0x800f5bdc 0x2b6 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + 0x2b8 (size before relaxing) + *fill* 0x800f5e92 0x2 00 + .rodata._irqPrio + 0x800f5e94 0x2c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + .rodata.cst8 0x800f5ec0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_floor.o) + 0x10 (size before relaxing) + .rodata.cst8 0x800f5ec8 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) + 0x8 (size before relaxing) + .rodata.cst4 0x800f5ec8 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) + 0x4 (size before relaxing) + .rodata.cst4 0x800f5ec8 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) + 0x4 (size before relaxing) + .rodata.str1.4 + 0x800f5ec8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) + *fill* 0x800f5ecc 0x4 00 + .rodata.cst8 0x800f5ed0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) + 0x18 (size before relaxing) + .rodata.str1.4 + 0x800f5ee0 0x6 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + 0x8 (size before relaxing) + .rodata.cst8 0x800f5ee6 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + 0x18 (size before relaxing) + *fill* 0x800f5ee6 0x2 00 + .rodata.str1.4 + 0x800f5ee8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + *fill* 0x800f5eec 0x4 00 + .rodata.cst8 0x800f5ef0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + 0x38 (size before relaxing) + .rodata.cst8 0x800f5f00 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log.o) + 0x88 (size before relaxing) + .rodata.cst8 0x800f5f60 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log10.o) + 0x38 (size before relaxing) + .rodata.cst8 0x800f5f78 0xc0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) + 0x110 (size before relaxing) + .rodata.cst8 0x800f6038 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) + 0x58 (size before relaxing) + .rodata.cst4 0x800f6070 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) + 0x28 (size before relaxing) + .rodata.cst8 0x800f608c 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) + 0x8 (size before relaxing) + *fill* 0x800f608c 0x4 00 + .rodata.cst8 0x800f6090 0x38 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_cos.o) + 0x48 (size before relaxing) + .rodata.cst8 0x800f60c8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + 0x40 (size before relaxing) + .rodata.cst8 0x800f60d0 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_sin.o) + 0x38 (size before relaxing) + .rodata.cst4 0x800f6100 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_cos.o) + 0x24 (size before relaxing) + .rodata.cst8 0x800f611c 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) + 0x8 (size before relaxing) + .rodata.cst4 0x800f611c 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) + 0x1c (size before relaxing) + .rodata.cst4 0x800f6128 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_sin.o) + 0x1c (size before relaxing) + .rodata.cst4 0x800f6140 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_tan.o) + 0x48 (size before relaxing) + .rodata.cst8 0x800f617c 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_tan.o) + 0x8 (size before relaxing) + *fill* 0x800f617c 0x4 00 + .rodata.cst8 0x800f6180 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_scalbn.o) + 0x20 (size before relaxing) + .rodata.cst4 0x800f6188 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_floor.o) + 0x8 (size before relaxing) + .rodata.cst4 0x800f618c 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_scalbn.o) + 0x10 (size before relaxing) + .rodata.str1.4 + 0x800f6198 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) + 0x8 (size before relaxing) + .rodata.crc_table + 0x800f6198 0x2000 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(crc32.o) + .rodata.str1.4 + 0x800f8198 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(uncompr.o) + 0x8 (size before relaxing) + .rodata.configuration_table + 0x800f8198 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .rodata._length_code + 0x800f8210 0x100 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + 0x800f8210 _length_code + .rodata._dist_code + 0x800f8310 0x200 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + 0x800f8310 _dist_code + .rodata.static_dtree + 0x800f8510 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .rodata.static_ltree + 0x800f8588 0x480 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .rodata.bl_order + 0x800f8a08 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .rodata.base_dist + 0x800f8a1c 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .rodata.extra_dbits + 0x800f8a94 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .rodata.base_length + 0x800f8b0c 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .rodata.extra_lbits + 0x800f8b80 0x74 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .rodata.extra_blbits + 0x800f8bf4 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .rodata.str1.4 + 0x800f8c40 0x7f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + 0x8c (size before relaxing) + *fill* 0x800f8cbf 0x1 00 + .rodata.z_errmsg + 0x800f8cc0 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + 0x800f8cc0 z_errmsg + .rodata.order.0 + 0x800f8ce8 0x26 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + .rodata.lenfix.1 + 0x800f8d0e 0x800 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + .rodata.distfix.2 + 0x800f950e 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + *fill* 0x800f958e 0x2 00 + .rodata.str1.4 + 0x800f9590 0x1bf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + 0x1c0 (size before relaxing) + *fill* 0x800f974f 0x1 00 + .rodata.lbase.0 + 0x800f9750 0x3e c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) + .rodata.lext.1 + 0x800f978e 0x3e c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) + .rodata.dbase.2 + 0x800f97cc 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) + .rodata.dext.3 + 0x800f980c 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) + .rodata.str1.4 + 0x800f984c 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inffast.o) + 0x54 (size before relaxing) + .rodata.str1.4 + 0x800f984c 0x2 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x4 (size before relaxing) + *fill* 0x800f984e 0x2 00 + .rodata.str1.4 + 0x800f9850 0x7 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x8 (size before relaxing) + *fill* 0x800f9857 0x1 00 + .rodata.dotab_stdout + 0x800f9858 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + 0x800f9858 dotab_stdout + .rodata.str1.4 + 0x800f9874 0x3 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + 0x4 (size before relaxing) + *fill* 0x800f9877 0x1 00 + .rodata.dotab_sdcardio + 0x800f9878 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + 0x800f9878 dotab_sdcardio + .rodata.str1.4 + 0x800f9894 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + 0x8 (size before relaxing) + .rodata.str1.4 + 0x800f9894 0x7 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + 0x8 (size before relaxing) + *fill* 0x800f989b 0x1 00 + .rodata.dotab_netfake + 0x800f989c 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + 0x800f989c dotab_netfake + .rodata.str1.4 + 0x800f98b8 0x6 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + 0x8 (size before relaxing) + *fill* 0x800f98be 0x2 00 + .rodata.dotab_stdin + 0x800f98c0 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + 0x800f98c0 dotab_stdin + .rodata.str1.4 + 0x800f98dc 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + 0x4 (size before relaxing) + .rodata.dotab_sdcardfake + 0x800f98dc 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + 0x800f98dc dotab_sdcardfake + .rodata.str1.4 + 0x800f98f8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + .rodata.dotab_dvd + 0x800f98fc 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + 0x800f98fc dotab_dvd + .rodata.str1.4 + 0x800f9918 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(impure.o) + 0x4 (size before relaxing) + .rodata.str1.4 + 0x800f9918 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) + 0x4 (size before relaxing) + .rodata.str1.4 + 0x800f9918 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + 0x64 (size before relaxing) + .rodata.cst8 0x800f9974 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + 0x10 (size before relaxing) + .rodata.str1.4 + 0x800f9974 0x1e c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) + 0x20 (size before relaxing) + *fill* 0x800f9992 0x2 00 + .rodata.str1.4 + 0x800f9994 0xd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + 0x14 (size before relaxing) + *fill* 0x800f99a1 0x7 00 + .rodata.cst8 0x800f99a8 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + 0x60 (size before relaxing) + .rodata.str1.4 + 0x800f99c8 0xb c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + 0x18 (size before relaxing) + .rodata.cst8 0x800f99d3 0x0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + 0x10 (size before relaxing) + *(.gnu.linkonce.r.*) + +.rodata1 + *(.rodata1) + +.sdata2 0x800f99d4 0x0 + *(.sdata2) + *(.sdata2.*) + *(.gnu.linkonce.s2.*) + +.sbss2 + *(.sbss2) + *(.sbss2.*) + *(.gnu.linkonce.sb2.*) + 0x800f99d4 . = ALIGN (0x4) + 0x800f99d4 PROVIDE (__preinit_array_start, .) + +.preinit_array + *(.preinit_array) + 0x800f99d4 PROVIDE (__preinit_array_end, .) + 0x800f99d4 PROVIDE (__init_array_start, .) + +.init_array + *(.init_array) + 0x800f99d4 PROVIDE (__init_array_end, .) + 0x800f99d4 PROVIDE (__fini_array_start, .) + +.fini_array + *(.fini_array) + 0x800f99d4 PROVIDE (__fini_array_end, .) + +.data 0x800f99e0 0x22c20 + *(.data) + .data 0x800f99e0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o + 0x800f99e0 __dso_handle + .data 0x800f99e8 0x348 eeprom.o + 0x800f99e8 database + .data 0x800f9d30 0x2 mem68k.o + *fill* 0x800f9d32 0x2 00 + .data 0x800f9d34 0x34 render.o + 0x800f9d34 rgb565_high + 0x800f9d54 rgb565_norm + 0x800f9d44 rgb565_half + .data 0x800f9d68 0xe34 vdp.o + 0x800fa886 vc_ntsc_224 + 0x800fa15e vc_pal_240 + 0x800f9d68 dmarate_table + 0x800faa94 vc_ntsc_192 + 0x800fa3d0 vc_pal_224 + 0x800fa780 vc_ntsc_240 + 0x800f9d88 cycle2hc40 + 0x800fa644 vc_pal_192 + 0x800f9d78 y_mask_table + 0x800f9f74 cycle2hc32 + .data 0x800fab9c 0x530 m68kcpu.o + 0x800fab9c m68ki_ea_idx_cycle_table + 0x800fb0a8 m68ki_cpu_names + 0x800fabdc m68ki_exception_cycle_table + 0x800faedc m68ki_shift_32_table + 0x800fafe0 m68ki_shift_16_table + 0x800fb064 m68ki_shift_8_table + .data 0x800fb0cc 0x7ab0 m68kops.o + .data 0x80102b7c 0x2f38 z80.o + .data 0x80105ab4 0x120 ym2612.o + 0x80105ab4 ENV_NEXT_EVENT + 0x80105ad4 UPDATE_CHAN + *fill* 0x80105bd4 0xc 00 + .data 0x80105be0 0xa0 ngc.o + 0x80105bf8 gppadmap + 0x80105c40 square + 0x80105be0 gcpadmap + .data 0x80105c80 0xdc confjoy.o + 0x80105c80 padmenu + .data 0x80105d5c 0x4 dvd.o + .data 0x80105d60 0x11884 font.o + 0x80105d60 blit_lookup_inv + 0x80105d80 gpback + 0x80105d70 blit_lookup + .data 0x801175e4 0x24 ggentry.o + 0x801175e4 ggvalidchars + .data 0x80117608 0x1ae8 legal.o + 0x80117608 dkpro + .data 0x801190f0 0x800 mcard.o + 0x801190f0 icon + .data 0x801198f0 0x3c menu.o + 0x801198f0 menutitle + .data 0x8011992c 0xa42 rominfo.o + 0x8011992c peripheralinfo + 0x80119a6e companyinfo + *fill* 0x8011a36e 0x2 00 + .data 0x8011a370 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + *fill* 0x8011a384 0x4 00 + .data 0x8011a388 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) + .data 0x8011a390 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(gettzinfo.o) + .data 0x8011a3d0 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + 0x8011a3d0 __lc_ctype + *(.data.*) + .data.TVPal528IntDf + 0x8011a3dc 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x8011a3dc TVPal528IntDf + .data.TVMpal480IntDf + 0x8011a418 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x8011a418 TVMpal480IntDf + .data.TVNtsc480IntDf + 0x8011a454 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + 0x8011a454 TVNtsc480IntDf + .data.pad_resetinfo + 0x8011a490 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .data.__dvd_unlockcmd$221 + 0x8011a4a0 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .data.__dvd_unlockcmd$222 + 0x8011a4ac 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .data.__dvd_errortable + 0x8011a4b8 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .data._dsp_initcode + 0x8011a500 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .data.mem_resetinfo + 0x8011a580 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .data._gxtevcolid + 0x8011a590 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .data.card_latency + 0x8011a59c 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .data.card_sector_size + 0x8011a5bc 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + *fill* 0x8011a5dc 0x4 00 + .data._cardunlockdata + 0x8011a5e0 0x580 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .data.card_resetinfo + 0x8011ab60 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .data.sicntrl 0x8011ab70 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.rdstHandlers + 0x8011ab84 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.inputBufferVCount + 0x8011ab94 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.si_type 0x8011aba4 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + *fill* 0x8011abb4 0x4 00 + .data.typeTime + 0x8011abb8 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.xferTime + 0x8011abd8 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.cmdfixdevice + 0x8011abf8 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.typeCallback + 0x8011ac08 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.inputBuffer + 0x8011ac48 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.inputBufferValid + 0x8011ac68 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.xy 0x8011ac78 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .data.exception_name + 0x8011acd8 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + .data.exception_location + 0x8011ad14 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + .data.static_bl_desc + 0x8011ad50 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .data.static_d_desc + 0x8011ad64 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .data.static_l_desc + 0x8011ad78 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .data.console_font_8x16 + 0x8011ad8c 0x1000 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console_font.o) + 0x8011ad8c console_font_8x16 + .data.devoptab_list + 0x8011bd8c 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) + 0x8011bd8c devoptab_list + *fill* 0x8011bda4 0x4 00 + .data.rel.local + 0x8011bda8 0x400 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(impure.o) + .data.rel 0x8011c1a8 0x408 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + 0x8011c1a8 __malloc_av_ + .data.rel.ro.local + 0x8011c5b0 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + .data.rel.local + 0x8011c5e0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + *(.gnu.linkonce.d.*) + 0x8011c600 . = ALIGN (0x20) + *fill* 0x8011c5e4 0x1c 00 + +.data1 + *(.data1) + +.tdata + *(.tdata .tdata.* .gnu.linkonce.td.*) + +.tbss + *(.tbss .tbss.* .gnu.linkonce.tb.*) + *(.tcommon) + +.eh_frame 0x8011c600 0x3c + *(.eh_frame) + .eh_frame 0x8011c600 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_udivdi3.o) + .eh_frame 0x8011c634 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtend.o + .eh_frame 0x8011c638 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o + 0x8011c638 __EH_FRAME_END__ + +.gcc_except_table + *(.gcc_except_table) + +.fixup + *(.fixup) + +.got1 + *(.got1) + +.got2 0x8011c63c 0x4e0 + *(.got2) + .got2 0x8011c63c 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_floor.o) + .got2 0x8011c644 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) + .got2 0x8011c648 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) + .got2 0x8011c64c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) + .got2 0x8011c650 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) + .got2 0x8011c664 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + .got2 0x8011c678 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + .got2 0x8011c69c 0x44 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log.o) + .got2 0x8011c6e0 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log10.o) + .got2 0x8011c6fc 0x94 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) + .got2 0x8011c790 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) + .got2 0x8011c7c4 0x34 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) + .got2 0x8011c7f8 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_cos.o) + .got2 0x8011c81c 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + .got2 0x8011c844 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_sin.o) + .got2 0x8011c860 0x24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_cos.o) + .got2 0x8011c884 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) + .got2 0x8011c8ac 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_sin.o) + .got2 0x8011c8c8 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_tan.o) + .got2 0x8011c914 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_rint.o) + .got2 0x8011c918 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_scalbn.o) + .got2 0x8011c928 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_floor.o) + .got2 0x8011c930 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_scalbn.o) + .got2 0x8011c940 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(calloc.o) + .got2 0x8011c944 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(errno.o) + .got2 0x8011c948 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime.o) + .got2 0x8011c94c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malign.o) + .got2 0x8011c950 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + .got2 0x8011c954 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + .got2 0x8011c970 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) + .got2 0x8011c97c 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + .got2 0x8011c988 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) + .got2 0x8011c98c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) + .got2 0x8011c990 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) + .got2 0x8011c998 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(rand.o) + .got2 0x8011c99c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(realloc.o) + .got2 0x8011c9a0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + .got2 0x8011c9a4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + .got2 0x8011c9a8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sbrkr.o) + .got2 0x8011c9ac 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) + .got2 0x8011c9b0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) + .got2 0x8011c9b4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sprintf.o) + .got2 0x8011c9b8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcasecmp.o) + .got2 0x8011c9bc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncasecmp.o) + .got2 0x8011c9c0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok.o) + .got2 0x8011c9c4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) + .got2 0x8011c9c8 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + .got2 0x8011ca08 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + .got2 0x8011ca0c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) + .got2 0x8011ca10 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcsrtombs.o) + .got2 0x8011ca14 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) + .got2 0x8011ca28 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) + .got2 0x8011ca2c 0x48 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + .got2 0x8011ca74 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + .got2 0x8011ca80 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + .got2 0x8011cab0 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + .got2 0x8011cac8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + .got2 0x8011cacc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(gettzinfo.o) + .got2 0x8011cad0 0x14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + .got2 0x8011cae4 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) + .got2 0x8011caf0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + .got2 0x8011cb00 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + .got2 0x8011cb04 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(writer.o) + .got2 0x8011cb08 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(closer.o) + .got2 0x8011cb0c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + .got2 0x8011cb10 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fstatr.o) + .got2 0x8011cb14 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lseekr.o) + .got2 0x8011cb18 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(readr.o) + +.dynamic + *(.dynamic) + +.ctors 0x8011cb1c 0x24 + *crtbegin.o(.ctors) + .ctors 0x8011cb1c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o + *(EXCLUDE_FILE(*crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + .ctors 0x8011cb20 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtend.o + 0x8011cb40 . = ALIGN (0x20) + *fill* 0x8011cb24 0x1c 00 + +.dtors 0x8011cb40 0x20 + *crtbegin.o(.dtors) + .dtors 0x8011cb40 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o + *(EXCLUDE_FILE(*crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + .dtors 0x8011cb44 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtend.o + 0x8011cb60 . = ALIGN (0x20) + *fill* 0x8011cb48 0x18 00 + +.jcr 0x8011cb60 0x4 + *(.jcr) + .jcr 0x8011cb60 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtend.o + +.got + *(.got.plt) + *(.got) + +.sdata 0x8011cb68 0x318 + *(.sdata) + .sdata 0x8011cb68 0x1 io.o + 0x8011cb68 region_code + *fill* 0x8011cb69 0x3 00 + .sdata 0x8011cb6c 0x4 ssf2tnc.o + 0x8011cb6c shadow_rom + .sdata 0x8011cb70 0x10 system.o + 0x8011cb7a miscZ80cycles + 0x8011cb70 CPU_Clock + 0x8011cb78 lines_per_frame + 0x8011cb7c misc68Kcycles + .sdata 0x8011cb80 0x14 vdp.o + 0x8011cb90 shift_table + 0x8011cb8c col_mask_table + 0x8011cb82 row_mask_table + 0x8011cb81 vdp_rate + 0x8011cb80 dmatiming + .sdata 0x8011cb94 0x8 ngc.o + 0x8011cb94 msBetweenFrames + 0x8011cb98 padcal + .sdata 0x8011cb9c 0xc confjoy.o + 0x8011cb9c mpads + 0x8011cba4 configpadcount + .sdata 0x8011cba8 0x4 dvd.o + 0x8011cba8 dvd + .sdata 0x8011cbac 0x2 font.o + 0x8011cbac back_framewidth + *fill* 0x8011cbae 0x2 00 + .sdata 0x8011cbb0 0x18 menu.o + 0x8011cbb5 clipping + 0x8011cbb4 hq_fm + 0x8011cbb8 fm_preamp + 0x8011cbc0 psg_preamp + 0x8011cbb0 CARDSLOT + 0x8011cbb6 boost + .sdata 0x8011cbc8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_lib_ver.o) + 0x8011cbc8 __fdlib_version + .sdata 0x8011cbcc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(ctype_.o) + 0x8011cbcc __ctype_ptr + .sdata 0x8011cbd0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(impure.o) + 0x8011cbd0 _global_impure_ptr + 0x8011cbd4 _impure_ptr + .sdata 0x8011cbd8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + 0x8011cbd8 __malloc_sbrk_base + 0x8011cbdc __malloc_trim_threshold + *(.sdata.*) + .sdata.postRetraceCB + 0x8011cbe0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sdata.preRetraceCB + 0x8011cbe4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sdata.fbSet 0x8011cbe8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sdata.__pad_samplingcallback + 0x8011cbec 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_analogmode + 0x8011cbf0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_spec + 0x8011cbf4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_enabledbits + 0x8011cbf8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_makestatus + 0x8011cbfc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_initialized + 0x8011cc00 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_resettingchan + 0x8011cc04 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_resettingbits + 0x8011cc08 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_recalibratebits + 0x8011cc0c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_checkingbits + 0x8011cc10 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_waitingbits + 0x8011cc14 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_pendingbits + 0x8011cc18 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_cmdreadorigin + 0x8011cc1c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_cmdcalibrate + 0x8011cc20 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_xpatchbits + 0x8011cc24 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__pad_recalibrated$207 + 0x8011cc28 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .sdata.__dvd_autoinvalidation + 0x8011cc2c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_initflag + 0x8011cc30 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_callback + 0x8011cc34 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_breaking + 0x8011cc38 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_waitcoverclose + 0x8011cc3c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_resetcovercb + 0x8011cc40 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + *fill* 0x8011cc44 0x4 00 + .sdata.__dvd_lastresetend + 0x8011cc48 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_resetoccured + 0x8011cc50 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_stopnextint + 0x8011cc54 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_diskID + 0x8011cc58 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_mountusrcb + 0x8011cc5c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_drivestate + 0x8011cc60 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_internalretries + 0x8011cc64 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_resetrequired + 0x8011cc68 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_executing + 0x8011cc6c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_fatalerror + 0x8011cc70 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_finalsudcb + 0x8011cc74 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_drivechecked + 0x8011cc78 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_finaladdoncb + 0x8011cc7c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_finalpatchcb + 0x8011cc80 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_lasterror + 0x8011cc84 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_extensionsenabled + 0x8011cc88 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_usrdata + 0x8011cc8c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_finalreadmemcb + 0x8011cc90 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_finaloffsetcb + 0x8011cc94 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvdpatchcode_size + 0x8011cc98 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvdpatchcode + 0x8011cc9c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_finalunlockcb + 0x8011cca0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_cancelcallback + 0x8011cca4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_resumefromhere + 0x8011cca8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_canceling + 0x8011ccac 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_laststate + 0x8011ccb0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_ready + 0x8011ccb4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_cancellasterror + 0x8011ccb8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.__dvd_autofinishing + 0x8011ccbc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.stage.6 + 0x8011ccc0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.nPos.7 0x8011ccc4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.drv_address.8 + 0x8011ccc8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.loc_offset.4 + 0x8011cccc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.irq_handler.0 + 0x8011ccd0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.fingerprint.1 + 0x8011ccd4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.step.2 0x8011ccd8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.step.3 0x8011ccdc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sdata.exi_id_serport1 + 0x8011cce0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .sdata.__RSWCallback + 0x8011cce4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .sdata.__sysarenahi + 0x8011cce8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .sdata.__sysarenalo + 0x8011ccec 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .sdata.__sys_inIPL + 0x8011ccf0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .sdata.system_initialized + 0x8011ccf4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .sdata.down.0 0x8011ccf8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .sdata.last_state.1 + 0x8011ccfc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .sdata.hold_down.2 + 0x8011cd00 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .sdata._gx 0x8011cd08 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.tlut_regionCB + 0x8011cd0c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.regionCB + 0x8011cd10 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxtextlutids + 0x8011cd14 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxteximg2ids + 0x8011cd1c 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxteximg1ids + 0x8011cd24 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxteximg3ids + 0x8011cd2c 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxteximg0ids + 0x8011cd34 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxtexmode1ids + 0x8011cd3c 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxtexmode0ids + 0x8011cd44 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._cpgplinked + 0x8011cd4c 0x1 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + *fill* 0x8011cd4d 0x3 00 + .sdata.breakPtCB + 0x8011cd50 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.tokenCB + 0x8011cd54 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.drawDoneCB + 0x8011cd58 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxfinished + 0x8011cd5c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._cpufifo + 0x8011cd60 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxcurrentlwp + 0x8011cd64 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxoverflowcount + 0x8011cd68 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gpfifo + 0x8011cd6c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata._gxoverflowsuspend + 0x8011cd70 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.regionA.5 + 0x8011cd74 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.regionB.6 + 0x8011cd78 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.cm2hw.0 + 0x8011cd7c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.Xfactor.2 + 0x8011cd80 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.Yfactor.3 + 0x8011cd84 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.Zfactor.4 + 0x8011cd88 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .sdata.__CallbackStack + 0x8011cd8c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sdata.__OldStack + 0x8011cd90 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sdata.__AIInitFlag + 0x8011cd94 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sdata.card_company + 0x8011cd98 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .sdata.card_gamecode + 0x8011cd9c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .sdata.crand_next + 0x8011cda0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .sdata.card_inited + 0x8011cda4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .sdata.__ARInternalSize + 0x8011cda8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .sdata.__ARSize + 0x8011cdac 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .sdata.__ARInit_Flag + 0x8011cdb0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .sdata.__ARExpansionSize + 0x8011cdb4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .sdata.__ARFreeBlocks + 0x8011cdb8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .sdata.__ARStackPointer + 0x8011cdbc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .sdata.__ARBlockLen + 0x8011cdc0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .sdata.__ARDmaCallback + 0x8011cdc4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .sdata.__dsp_intcb + 0x8011cdc8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .sdata.__dsp_inited + 0x8011cdcc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .sdata.__dsp_rudetask_pend + 0x8011cdd0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .sdata.__PADFixBits + 0x8011cdd4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + 0x8011cdd4 __PADFixBits + .sdata.cmdtypeandstatus$47 + 0x8011cdd8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .sdata.cmdtypeandstatus$223 + 0x8011cddc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .sdata.sampling_rate + 0x8011cde0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .sdata.__lwp_thr_libc_reent + 0x8011cde4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x8011cde4 __lwp_thr_libc_reent + .sdata._thr_allocated_fp + 0x8011cde8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x8011cde8 _thr_allocated_fp + .sdata._thr_heir + 0x8011cdec 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x8011cdec _thr_heir + .sdata._thr_executing + 0x8011cdf0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x8011cdf0 _thr_executing + .sdata._thr_idle + 0x8011cdf4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x8011cdf4 _thr_idle + .sdata._thr_main + 0x8011cdf8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x8011cdf8 _thr_main + .sdata.__wkspace_heap_size + 0x8011cdfc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) + .sdata._lwp_objmgr_memsize + 0x8011ce00 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + .sdata.null_local_table + 0x8011ce04 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + .sdata.exception_xfb + 0x8011ce08 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + .sdata.currIrqMask + 0x8011ce0c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + .sdata.prevIrqMask + 0x8011ce10 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + *fill* 0x8011ce14 0x4 00 + .sdata.spuriousIrq + 0x8011ce18 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + .sdata.exi_wait_inited + 0x8011ce20 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + .sdata.curr_con + 0x8011ce24 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + .sdata.do_xfb_copy + 0x8011ce28 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + .sdata.initialized + 0x8011ce2c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + .sdata.sdcard_inited + 0x8011ce30 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + .sdata.sdcardio_inited + 0x8011ce34 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + .sdata.pfCallbackOUT + 0x8011ce38 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sdata.pfCallbackIN + 0x8011ce40 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sdata._fatNoFATUpdate + 0x8011ce48 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sdata._fat 0x8011ce50 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sdata._fatCacheSize + 0x8011ce58 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sdata._fatOpenedFile + 0x8011ce60 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sdata._fatFATId + 0x8011ce68 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sdata._ioRetryCB + 0x8011ce70 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + *(.gnu.linkonce.s.*) + 0x8011ce80 . = ALIGN (0x20) + *fill* 0x8011ce74 0xc 00 + 0x8011ce80 _edata = . + 0x8011ce80 PROVIDE (edata, .) + 0x0002bbc0 data_mem_size = (. - data_mem_start) + 0x8011ce80 bss_mem_start = . + +.sbss 0x8011ce80 0x380 + 0x8011ce80 __sbss_start = . + 0x8011ce80 PROVIDE (__sbss_start, .) + 0x8011ce80 PROVIDE (___sbss_start, .) + *(.dynsbss) + *(.sbss) + .sbss 0x8011ce80 0x1d genesis.o + 0x8011ce80 lastbusreqcnt + 0x8011ce84 gen_running + 0x8011ce85 zirq + 0x8011ce88 zbank + 0x8011ce8c lastbusack + 0x8011ce8d zbusreq + 0x8011ce90 genromsize + 0x8011ce94 zbusack + 0x8011ce98 cart_rom + 0x8011ce9c zreset + *fill* 0x8011ce9d 0x1 00 + .sbss 0x8011ce9e 0x6 input.o + 0x8011ce9e j_cart + 0x8011ce9f current_pad + 0x8011cea0 lightgun + .sbss 0x8011cea4 0x1 io.o + 0x8011cea4 pad_type + *fill* 0x8011cea5 0x3 00 + .sbss 0x8011cea8 0x4 mem68k.o + .sbss 0x8011ceac 0x11 render.o + 0x8011ceac lut_base + 0x8011cebc object_index_count + *fill* 0x8011cebd 0x3 00 + .sbss 0x8011cec0 0xc ssf2tnc.o + 0x8011cec0 SSF2TNC + .sbss 0x8011cecc 0x4 state.o + 0x8011cecc bufferptr + .sbss 0x8011ced0 0x24 system.o + 0x8011ced0 alttiming + 0x8011cee0 dma_m68k + 0x8011ced8 count_z80 + 0x8011cedc aim_z80 + 0x8011cee8 aim_m68k + 0x8011ced4 myFM + 0x8011cee4 count_m68k + .sbss 0x8011cef4 0x42 vdp.o + 0x8011cef7 playfield_col_mask + 0x8011cef6 vdp_pal + 0x8011cef8 y_mask + 0x8011cef5 vdptiming + 0x8011cefc pending + 0x8011cf00 color_update + 0x8011cf04 h_counter + 0x8011cf06 playfield_shift + 0x8011cf08 addr_latch + 0x8011cf0a dmafill + 0x8011cf0b border + 0x8011cf0c ntab + 0x8011cf0e satb + 0x8011cf10 sat_base_mask + 0x8011cf12 v_counter + 0x8011cf14 frame_end + 0x8011cf16 ntbb + 0x8011cf18 hc_latch + 0x8011cf1c dma_endCycles + 0x8011cf20 bg_list_index + 0x8011cf22 addr + 0x8011cef4 irqtiming + 0x8011cf24 playfield_row_mask + 0x8011cf26 hint_pending + 0x8011cf28 hscb + 0x8011cf2a im2_flag + 0x8011cf2c ntwb + 0x8011cf2e code + 0x8011cf30 sat_addr_mask + 0x8011cf32 vint_pending + 0x8011cf34 status + *fill* 0x8011cf36 0x2 00 + .sbss 0x8011cf38 0x24 m68kcpu.o + 0x8011cf54 m68ki_initial_cycles + 0x8011cf3c m68ki_remaining_cycles + 0x8011cf58 m68ki_address_space + 0x8011cf38 m68ki_tracing + .sbss 0x8011cf5c 0x14 z80.o + 0x8011cf6c z80_ICount + .sbss 0x8011cf70 0x20 fm.o + .sbss 0x8011cf90 0x6 sound.o + 0x8011cf90 fm_status + 0x8011cf94 fm_latch + *fill* 0x8011cf96 0x2 00 + .sbss 0x8011cf98 0x28 ym2612.o + 0x8011cf9c en3 + 0x8011cfa0 in1 + 0x8011cfa4 en1 + 0x8011cfa8 en0 + 0x8011cfac in3 + 0x8011cfb0 in2 + 0x8011cfb4 int_cnt + 0x8011cfb8 in0 + 0x8011cfbc en2 + .sbss 0x8011cfc0 0x58 ngc.o + 0x8011cfe0 ConfigRequested + 0x8011cfe8 xfb + 0x8011cfcc whichfb + 0x8011cff0 now + 0x8011cfd8 FrameCount + 0x8011cff8 vheight + 0x8011cfc4 playbuffer + 0x8011cfdc RenderedFrameCount + 0x8011cfd0 isWII + 0x8011cffc prev + 0x8011cfc8 mixbuffer + 0x8011cfc0 IsPlaying + 0x8011d004 vwidth + 0x8011cfe4 frameticker + 0x8011d008 vmode + 0x8011cfd4 FramesPerSecond + 0x8011d00c oldvwidth + 0x8011d010 oldvheight + 0x8011d014 gen_bmp + .sbss 0x8011d018 0x8 confjoy.o + 0x8011d01c sys_type + 0x8011d018 old_sys_type + .sbss 0x8011d020 0x18 filesel.o + 0x8011d028 selection + 0x8011d024 old_selection + 0x8011d030 UseSDCARD + 0x8011d020 old_offset + 0x8011d032 havedir + 0x8011d02c offset + 0x8011d031 haveSDdir + .sbss 0x8011d038 0x8 font.o + 0x8011d03c fheight + 0x8011d038 SILENT + .sbss 0x8011d040 0x8 ggentry.o + 0x8011d040 editing + 0x8011d044 ggrow + .sbss 0x8011d048 0x20 iso9660.o + 0x8011d048 rootdirlength + 0x8011d050 basedir + 0x8011d058 rootdir + .sbss 0x8011d068 0x4 legal.o + 0x8011d068 dkproraw + .sbss 0x8011d06c 0x10 menu.o + 0x8011d078 menu + 0x8011d071 region_detect + 0x8011d074 FM_GENS + 0x8011d06c use_SDCARD + 0x8011d072 autoload + 0x8011d073 PSG_MAME + 0x8011d070 cpu_detect + .sbss 0x8011d07c 0x8 rominfo.o + 0x8011d07c peripherals + 0x8011d080 checksumok + .sbss 0x8011d084 0xc vfat.o + .sbss 0x8011d090 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + 0x8011d098 __malloc_top_pad + 0x8011d094 __malloc_max_sbrked_mem + 0x8011d090 __malloc_max_total_mem + .sbss 0x8011d09c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + 0x8011d09c errno + .sbss 0x8011d0a0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) + .sbss 0x8011d0a4 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzvars.o) + 0x8011d0a8 _daylight + 0x8011d0a4 _timezone + .sbss 0x8011d0ac 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + *(.sbss.*) + .sbss.encoderType + 0x8011d0b4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.displayOffsetH + 0x8011d0b8 0x2 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.displayOffsetV + 0x8011d0ba 0x2 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.currTvMode + 0x8011d0bc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.changeMode + 0x8011d0c0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.shdw_changeMode + 0x8011d0c4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.flushFlag + 0x8011d0c8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + *fill* 0x8011d0cc 0x4 00 + .sbss.changed 0x8011d0d0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.shdw_changed + 0x8011d0d8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.retraceCount + 0x8011d0e0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.currTiming + 0x8011d0e4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.video_queue + 0x8011d0e8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .sbss.__dvd_lastlen + 0x8011d0ec 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss.__dvd_nextcmdnum + 0x8011d0f0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss.__dvd_workaround + 0x8011d0f4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss.__dvd_workaroundseek + 0x8011d0f8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss.__dvd_lastcmdwasread + 0x8011d0fc 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss.__dvd_currcmd + 0x8011d100 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss.__dvd_motorcntrl + 0x8011d104 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss.__dvd_wait_queue + 0x8011d108 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss.__dvd_timeoutalarm + 0x8011d10c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .sbss._gxwaitfinish + 0x8011d110 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + *fill* 0x8011d114 0x4 00 + .sbss.bound_32KHz + 0x8011d118 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sbss.bound_48KHz + 0x8011d120 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sbss.min_wait + 0x8011d128 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sbss.max_wait + 0x8011d130 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sbss.buffer 0x8011d138 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sbss.__AID_Callback + 0x8011d140 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sbss.__AIS_Callback + 0x8011d144 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .sbss.curr_task + 0x8011d148 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .sbss.last_task + 0x8011d14c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .sbss.first_task + 0x8011d150 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .sbss.tmp_task + 0x8011d154 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .sbss.rude_task + 0x8011d158 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .sbss._prio_major_bitmap + 0x8011d15c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_priority.o) + 0x8011d15c _prio_major_bitmap + .sbss._context_switch_want + 0x8011d160 0x1 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x8011d160 _context_switch_want + *fill* 0x8011d161 0x3 00 + .sbss._thread_dispatch_disable_level + 0x8011d164 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x8011d164 _thread_dispatch_disable_level + .sbss._lwp_exitfunc + 0x8011d168 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + .sbss._wd_sync_level + 0x8011d16c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + 0x8011d16c _wd_sync_level + .sbss._wd_sync_count + 0x8011d170 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + 0x8011d170 _wd_sync_count + .sbss._wd_ticks_since_boot + 0x8011d174 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + 0x8011d174 _wd_ticks_since_boot + .sbss._sys_state_curr + 0x8011d178 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(sys_state.o) + 0x8011d178 _sys_state_curr + .sbss.libc_reentrant + 0x8011d17c 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x8011d17c libc_reentrant + .sbss.time_exi_wait + 0x8011d180 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + .sbss.sdfds_lck + 0x8011d184 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + .sbss._fatLock + 0x8011d188 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sbss._fatFlag + 0x8011d190 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sbss._fatTblIdxCnt + 0x8011d198 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sbss._fat1StartSect + 0x8011d1a0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sbss._fat1Sectors + 0x8011d1a8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sbss._fatRootStartSect + 0x8011d1b0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sbss._fatRootSects + 0x8011d1b8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sbss._fatClusterStartSect + 0x8011d1c0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .sbss.s_freepool + 0x8011d1c8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + .sbss._ioWPFlag + 0x8011d1cc 0x1 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .sbss._ioClrFlag + 0x8011d1cd 0x1 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + *fill* 0x8011d1ce 0x2 00 + .sbss._ioCardFreq + 0x8011d1d0 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .sbss._ioRetryCnt + 0x8011d1d4 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .sbss._ioEXILock + 0x8011d1d8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .sbss._ioPageSize + 0x8011d1e0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .sbss._ioFlag 0x8011d1e8 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .sbss._ioError + 0x8011d1f0 0x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .sbss._ioCardInserted + 0x8011d1f8 0x4 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + *(.gnu.linkonce.sb.*) + *(.scommon) + 0x8011d1fc PROVIDE (__sbss_end, .) + 0x8011d1fc PROVIDE (___sbss_end, .) + 0x8011d200 . = ALIGN (0x20) + *fill* 0x8011d1fc 0x4 00 + 0x8011d200 __sbss_end = . + +.bss 0x8011d200 0x39e660 + 0x8011d200 __bss_start = . + 0x8011d200 PROVIDE (__bss_start, .) + *(.dynbss) + *(.bss) + .bss 0x8011d200 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o + .bss 0x8011d21c 0x800 genesis.o + .bss 0x8011da1c 0x9c0 system.o + .bss 0x8011e3dc 0x108 m68kcpu.o + 0x8011e3dc m68ki_cpu + .bss 0x8011e4e4 0x58c z80.o + .bss 0x8011ea70 0x27820 fm.o + .bss 0x80146290 0x280 sn76489.o + .bss 0x80146510 0x4000 loadrom.o + *fill* 0x8014a510 0x10 00 + .bss 0x8014a520 0x69440 ngc.o + .bss 0x801b3960 0x60000 font.o + .bss 0x80213960 0x800 iso9660.o + .bss 0x80214160 0xa000 mcard.o + .bss 0x8021e160 0x200 vfat.o + .bss 0x8021e360 0x4000 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) + .bss 0x80222360 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + 0x80222360 __malloc_current_mallinfo + *(.bss.*) + .bss.regs 0x80222388 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .bss.shdw_regs + 0x80222400 0x78 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .bss.HorVer 0x80222478 0x58 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .bss.__pad_type + 0x802224d0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .bss.__pad_origin + 0x802224e0 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .bss.__pad_cmdprobedevice + 0x80222510 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .bss.__pad_keys + 0x80222520 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .bss.cmd_buf.5 + 0x80222550 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .bss.__dvd_block$15 + 0x8022255c 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .bss.__dvd_dummycmdblk + 0x8022258c 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + *fill* 0x802225bc 0x4 00 + .bss.__dvd_tmpid0 + 0x802225c0 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .bss.__dvd_driveinfo + 0x802225e0 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .bss.__dvd_waitingqueue + 0x80222600 0x30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .bss.__dvd_cmdlist + 0x80222630 0x50 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .bss.__dvd_cmd_curr + 0x80222680 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .bss.__dvd_cmd_prev + 0x8022268c 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .bss._lckdev_queue + 0x80222698 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .bss.lckdevs 0x802226a4 0x200 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + *fill* 0x802228a4 0x4 00 + .bss.eximap 0x802228a8 0xc0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .bss.last_exi_idtime + 0x80222968 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .bss.sramcntrl + 0x80222980 0x60 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + 0x80222980 sramcntrl + .bss.sys_reset_func_queue + 0x802229e0 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .bss.sys_alarm_objects + 0x802229ec 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .bss._lwp_cond_objects + 0x80222a14 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + .bss._gxdefiniobj + 0x80222a3c 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .bss._lwp_mqbox_objects + 0x80222abc 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + .bss.cardmap 0x80222ae4 0x1a8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + *fill* 0x80222c8c 0x14 00 + .bss.tmp_buffer + 0x80222ca0 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .bss.test_data.1 + 0x80222ce0 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .bss.dummy_data.2 + 0x80222d00 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .bss.buffer.3 0x80222d20 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .bss.sipacket 0x80222d40 0x70 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .bss.si_alarm 0x80222db0 0x10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .bss._prio_bitmap + 0x80222dc0 0x40 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_priority.o) + 0x80222dc0 _prio_bitmap + .bss._lwp_thr_ready + 0x80222e00 0xc00 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x80222e00 _lwp_thr_ready + .bss.core_context + 0x80223a00 0x2d0 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + 0x80223a00 core_context + .bss._lwp_thr_objects + 0x80223cd0 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + .bss._lwp_tqueue_objects + 0x80223cf8 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + .bss._wd_ticks_queue + 0x80223d20 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + 0x80223d20 _wd_ticks_queue + .bss.__wkspace_heap + 0x80223d2c 0x1c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) + 0x80223d2c __wkspace_heap + .bss.exception_con + 0x80223d48 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + .bss._exceptionhandlertable + 0x80223d94 0x3c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + 0x80223d94 _exceptionhandlertable + .bss.g_IRQHandler + 0x80223dd0 0x100 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + .bss._lwp_sema_objects + 0x80223ed0 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + .bss._lwp_mutex_objects + 0x80223ef8 0x28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + .bss.libc_globl_reent + 0x80223f20 0x400 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + 0x80223f20 libc_globl_reent + .bss.stdcon 0x80224320 0x4c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + .bss.mem_lock 0x8022436c 0x5c c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + .bss.sdcard_filehandle_queue + 0x802243c8 0xc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + .bss.filehandle_array + 0x802243d4 0x4600 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + .bss.sdfds 0x802289d4 0x200 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + .bss._sdInfo 0x80228bd4 0x210 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .bss._drvName 0x80228de4 0x16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + *fill* 0x80228dfa 0x2 00 + .bss.s_buf 0x80228dfc 0x618 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + .bss.g_CSD 0x80229414 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x80229414 g_CSD + .bss.g_CID 0x80229434 0x20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x80229434 g_CID + .bss.g_CardStatus + 0x80229454 0x80 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + 0x80229454 g_CardStatus + .bss._ioResponse + 0x802294d4 0x100 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + *(.gnu.linkonce.b.*) + *(COMMON) + COMMON 0x802295d4 0x28 eeprom.o + 0x802295d4 eeprom + COMMON 0x802295fc 0x12000 genesis.o + 0x802295fc work_ram + 0x802395fc zram + COMMON 0x8023b5fc 0x60 input.o + 0x8023b5fc gamepad + 0x8023b614 input + 0x8023b640 teamplayer + COMMON 0x8023b65c 0x28 io.o + 0x8023b65c io_reg + 0x8023b66c port + COMMON 0x8023b684 0x57b4 render.o + 0x8023b684 pixel_16 + 0x8023b884 pixel_8_lut + 0x8023be84 nta_buf + 0x8023c284 pixel_15_lut + 0x8023ce84 pixel_15 + 0x8023d084 pixel_32 + 0x8023d484 pixel_16_lut + 0x8023e084 tmp_buf + 0x8023e484 name_lut + 0x8023e884 pixel_32_lut + 0x80240084 bg_buf + 0x80240484 object_info + 0x80240524 lut + 0x80240538 ntb_buf + 0x80240938 pixel_8 + 0x80240a38 obj_buf + COMMON 0x80240e38 0x10010 sram.o + 0x80240e38 sram + COMMON 0x80250e48 0x23000 state.o + 0x80250e48 state + COMMON 0x80273e48 0x70 system.o + 0x80273e48 bitmap + 0x80273e80 snd + COMMON 0x80273eb8 0x91d20 vdp.o + 0x80273eb8 cram + 0x80273f38 reg + 0x80273f58 bg_pattern_cache + 0x802f3f58 sat + 0x802f4358 bg_name_dirty + 0x802f4b58 vram + 0x80304b58 bg_name_list + 0x80305b58 vsram + COMMON 0x80305bd8 0x70000 m68kops.o + 0x80305bd8 m68ki_cycles + 0x80335bd8 m68ki_instruction_jump_table + COMMON 0x80375bd8 0xb4 sn76496.o + 0x80375bd8 sn + COMMON 0x80375c8c 0x1628 sound.o + 0x80375c8c timer + 0x80375cb4 fm_timerb_tab + 0x803760b4 fm_reg + 0x803762b4 fm_timera_tab + *fill* 0x803772b4 0x4 00 + COMMON 0x803772b8 0x33b10 ym2612.o + 0x803772b8 DR_TAB + 0x80377438 DT_TAB + 0x80377838 SIN_TAB + 0x8037b838 LFO_FREQ_TAB + 0x8037c838 LFO_ENV_UP + 0x8037e778 LFO_INC_TAB + 0x8037e798 AR_TAB + 0x8037e998 ENV_TAB + 0x803869b8 FINC_TAB + 0x803889b8 DECAY_TO_ATTACK + 0x8038c9b8 LFO_ENV_TAB + 0x8038d9b8 LFO_FREQ_UP + 0x8038f8f8 TL_TAB + 0x803a78f8 INTER_TAB + 0x803a9838 YM2612 + 0x803aad08 NULL_RATE + 0x803aad88 SL_TAB + *fill* 0x803aadc8 0x18 00 + COMMON 0x803aade0 0xf020 ngc.o + 0x803aade0 soundbuffer + 0x803b9de0 texobj + COMMON 0x803b9e00 0x800 dvd.o + 0x803b9e00 DVDreadbuffer + COMMON 0x803ba600 0x294 filesel.o + 0x803ba600 f + 0x803ba751 fs + 0x803ba794 rootSDdir + COMMON 0x803ba894 0x96820 font.o + 0x803ba894 font_size + 0x803bac94 font_offset + 0x803bb094 backdrop + COMMON 0x804510b4 0xb0 ggentry.o + 0x804510b4 ggcodes + 0x80451104 ggpatch + 0x80451144 gghpos + *fill* 0x80451164 0x4 00 + COMMON 0x80451168 0x46500 iso9660.o + 0x80451168 filelist + *fill* 0x80497668 0x18 00 + COMMON 0x80497680 0x240b8 mcard.o + 0x80497680 savebuffer + 0x804bb680 CardFile + 0x804bb694 CardDir + 0x804bb6cc CardStatus + COMMON 0x804bb738 0x124 rominfo.o + 0x804bb738 rominfo + 0x804bb860 . = ALIGN (0x20) + *fill* 0x804bb85c 0x4 00 + 0x804bb860 PROVIDE (__bss_end, .) + 0x804bb860 __bss_end = . + 0x0039e9e0 bss_mem_size = (. - bss_mem_start) + 0x00000100 text_file_start = (text_mem_start - file_start) + 0x000ee2c0 data_file_start = (data_mem_start - file_start) + 0x00119e80 bss_file_start = (bss_mem_start - file_start) + 0x804bb860 _end = . + 0x804bb860 PROVIDE (end, .) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0xfa6 + *(.comment) + .comment 0x00000000 0xe c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o + .comment 0x0000000e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o + .comment 0x00000020 0x12 eeprom.o + .comment 0x00000032 0x12 genesis.o + .comment 0x00000044 0x12 input.o + .comment 0x00000056 0x12 io.o + .comment 0x00000068 0x12 mem68k.o + .comment 0x0000007a 0x12 membnk.o + .comment 0x0000008c 0x12 memvdp.o + .comment 0x0000009e 0x12 memz80.o + .comment 0x000000b0 0x12 render.o + .comment 0x000000c2 0x12 sram.o + .comment 0x000000d4 0x12 ssf2tnc.o + .comment 0x000000e6 0x12 state.o + .comment 0x000000f8 0x12 system.o + .comment 0x0000010a 0x12 vdp.o + .comment 0x0000011c 0x12 m68kcpu.o + .comment 0x0000012e 0x12 m68kopac.o + .comment 0x00000140 0x12 m68kopdm.o + .comment 0x00000152 0x12 m68kopnz.o + .comment 0x00000164 0x12 m68kops.o + .comment 0x00000176 0x12 z80.o + .comment 0x00000188 0x12 fm.o + .comment 0x0000019a 0x12 sn76489.o + .comment 0x000001ac 0x12 sn76496.o + .comment 0x000001be 0x12 sound.o + .comment 0x000001d0 0x12 ym2612.o + .comment 0x000001e2 0x12 gcaram.o + .comment 0x000001f4 0x12 loadrom.o + .comment 0x00000206 0x12 ngc.o + .comment 0x00000218 0x12 unzip.o + .comment 0x0000022a 0x12 confjoy.o + .comment 0x0000023c 0x12 dvd.o + .comment 0x0000024e 0x12 filesel.o + .comment 0x00000260 0x12 font.o + .comment 0x00000272 0x12 ggentry.o + .comment 0x00000284 0x12 iso9660.o + .comment 0x00000296 0x12 legal.o + .comment 0x000002a8 0x12 mcard.o + .comment 0x000002ba 0x12 menu.o + .comment 0x000002cc 0x12 rominfo.o + .comment 0x000002de 0x12 diskio.o + .comment 0x000002f0 0x12 vfat.o + .comment 0x00000302 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + .comment 0x00000314 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + .comment 0x00000326 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + .comment 0x00000338 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + .comment 0x0000034a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + .comment 0x0000035c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + .comment 0x0000036e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .comment 0x00000380 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + .comment 0x00000392 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + .comment 0x000003a4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) + .comment 0x000003b6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + .comment 0x000003c8 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + .comment 0x000003da 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + .comment 0x000003ec 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + .comment 0x000003fe 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + .comment 0x00000410 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_priority.o) + .comment 0x00000422 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + .comment 0x00000434 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + .comment 0x00000446 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + .comment 0x00000458 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + .comment 0x0000046a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + .comment 0x0000047c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + .comment 0x0000048e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + .comment 0x000004a0 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) + .comment 0x000004b2 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + .comment 0x000004c4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + .comment 0x000004d6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(sys_state.o) + .comment 0x000004e8 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + .comment 0x000004fa 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + .comment 0x0000050c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + .comment 0x0000051e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + .comment 0x00000530 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + .comment 0x00000542 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + .comment 0x00000554 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_floor.o) + .comment 0x00000566 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) + .comment 0x00000578 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) + .comment 0x0000058a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_sin.o) + .comment 0x0000059c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) + .comment 0x000005ae 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) + .comment 0x000005c0 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + .comment 0x000005d2 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + .comment 0x000005e4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) + .comment 0x000005f6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log.o) + .comment 0x00000608 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log10.o) + .comment 0x0000061a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) + .comment 0x0000062c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) + .comment 0x0000063e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_sqrt.o) + .comment 0x00000650 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) + .comment 0x00000662 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_sqrt.o) + .comment 0x00000674 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_cos.o) + .comment 0x00000686 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + .comment 0x00000698 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_sin.o) + .comment 0x000006aa 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_cos.o) + .comment 0x000006bc 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) + .comment 0x000006ce 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_sin.o) + .comment 0x000006e0 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_tan.o) + .comment 0x000006f2 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_fabs.o) + .comment 0x00000704 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_finite.o) + .comment 0x00000716 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_isnan.o) + .comment 0x00000728 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_lib_ver.o) + .comment 0x0000073a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_matherr.o) + .comment 0x0000074c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_rint.o) + .comment 0x0000075e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_scalbn.o) + .comment 0x00000770 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_fabs.o) + .comment 0x00000782 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_floor.o) + .comment 0x00000794 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_isnan.o) + .comment 0x000007a6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_scalbn.o) + .comment 0x000007b8 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_copysign.o) + .comment 0x000007ca 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_copysign.o) + .comment 0x000007dc 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) + .comment 0x000007ee 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(crc32.o) + .comment 0x00000800 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(uncompr.o) + .comment 0x00000812 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + .comment 0x00000824 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + .comment 0x00000836 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + .comment 0x00000848 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + .comment 0x0000085a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) + .comment 0x0000086c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inffast.o) + .comment 0x0000087e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(adler32.o) + .comment 0x00000890 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + .comment 0x000008a2 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(usleep.o) + .comment 0x000008b4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + .comment 0x000008c6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + .comment 0x000008d8 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console_font.o) + .comment 0x000008ea 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + .comment 0x000008fc 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + .comment 0x0000090e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + .comment 0x00000920 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + .comment 0x00000932 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + .comment 0x00000944 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + .comment 0x00000956 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_uni.o) + .comment 0x00000968 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_ashldi3.o) + .comment 0x0000097a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_udivdi3.o) + .comment 0x0000098c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) + .comment 0x0000099e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + .comment 0x000009b0 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + .comment 0x000009c2 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + .comment 0x000009d4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + .comment 0x000009e6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(abort.o) + .comment 0x000009f8 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(calloc.o) + .comment 0x00000a0a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(callocr.o) + .comment 0x00000a1c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(ctype_.o) + .comment 0x00000a2e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(errno.o) + .comment 0x00000a40 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(impure.o) + .comment 0x00000a52 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime.o) + .comment 0x00000a64 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime_r.o) + .comment 0x00000a76 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malign.o) + .comment 0x00000a88 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) + .comment 0x00000a9a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + .comment 0x00000aac 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + .comment 0x00000abe 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memcmp.o) + .comment 0x00000ad0 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memcpy.o) + .comment 0x00000ae2 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memset.o) + .comment 0x00000af4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) + .comment 0x00000b06 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + .comment 0x00000b18 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) + .comment 0x00000b2a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) + .comment 0x00000b3c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) + .comment 0x00000b4e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(rand.o) + .comment 0x00000b60 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(realloc.o) + .comment 0x00000b72 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + .comment 0x00000b84 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + .comment 0x00000b96 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sbrkr.o) + .comment 0x00000ba8 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) + .comment 0x00000bba 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) + .comment 0x00000bcc 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sprintf.o) + .comment 0x00000bde 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcasecmp.o) + .comment 0x00000bf0 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strchr.o) + .comment 0x00000c02 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcmp.o) + .comment 0x00000c14 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcpy.o) + .comment 0x00000c26 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strlen.o) + .comment 0x00000c38 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncasecmp.o) + .comment 0x00000c4a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncmp.o) + .comment 0x00000c5c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncpy.o) + .comment 0x00000c6e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strrchr.o) + .comment 0x00000c80 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strstr.o) + .comment 0x00000c92 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok.o) + .comment 0x00000ca4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok_r.o) + .comment 0x00000cb6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) + .comment 0x00000cc8 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzvars.o) + .comment 0x00000cda 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + .comment 0x00000cec 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + .comment 0x00000cfe 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) + .comment 0x00000d10 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcsrtombs.o) + .comment 0x00000d22 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) + .comment 0x00000d34 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) + .comment 0x00000d46 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(div.o) + .comment 0x00000d58 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + .comment 0x00000d6a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + .comment 0x00000d7c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + .comment 0x00000d8e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + .comment 0x00000da0 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + .comment 0x00000db2 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) + .comment 0x00000dc4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(gettzinfo.o) + .comment 0x00000dd6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + .comment 0x00000de8 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) + .comment 0x00000dfa 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memchr.o) + .comment 0x00000e0c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memmove.o) + .comment 0x00000e1e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + .comment 0x00000e30 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(s_isinf.o) + .comment 0x00000e42 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + .comment 0x00000e54 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(writer.o) + .comment 0x00000e66 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(closer.o) + .comment 0x00000e78 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + .comment 0x00000e8a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fstatr.o) + .comment 0x00000e9c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lseekr.o) + .comment 0x00000eae 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(readr.o) + .comment 0x00000ec0 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sbrk.o) + .comment 0x00000ed2 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(write.o) + .comment 0x00000ee4 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(close.o) + .comment 0x00000ef6 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(getpid.o) + .comment 0x00000f08 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(kill.o) + .comment 0x00000f1a 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(isatty.o) + .comment 0x00000f2c 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(fstat.o) + .comment 0x00000f3e 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(read.o) + .comment 0x00000f50 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lseek.o) + .comment 0x00000f62 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + .comment 0x00000f74 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + .comment 0x00000f86 0x12 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtend.o + .comment 0x00000f98 0xe c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x520 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x20 eeprom.o + .debug_aranges + 0x00000020 0x20 genesis.o + .debug_aranges + 0x00000040 0x20 input.o + .debug_aranges + 0x00000060 0x20 io.o + .debug_aranges + 0x00000080 0x20 mem68k.o + .debug_aranges + 0x000000a0 0x20 membnk.o + .debug_aranges + 0x000000c0 0x20 memvdp.o + .debug_aranges + 0x000000e0 0x20 memz80.o + .debug_aranges + 0x00000100 0x20 render.o + .debug_aranges + 0x00000120 0x20 sram.o + .debug_aranges + 0x00000140 0x20 ssf2tnc.o + .debug_aranges + 0x00000160 0x20 state.o + .debug_aranges + 0x00000180 0x20 system.o + .debug_aranges + 0x000001a0 0x20 vdp.o + .debug_aranges + 0x000001c0 0x20 m68kcpu.o + .debug_aranges + 0x000001e0 0x20 m68kopac.o + .debug_aranges + 0x00000200 0x20 m68kopdm.o + .debug_aranges + 0x00000220 0x20 m68kopnz.o + .debug_aranges + 0x00000240 0x20 m68kops.o + .debug_aranges + 0x00000260 0x20 z80.o + .debug_aranges + 0x00000280 0x20 fm.o + .debug_aranges + 0x000002a0 0x20 sn76489.o + .debug_aranges + 0x000002c0 0x20 sn76496.o + .debug_aranges + 0x000002e0 0x20 sound.o + .debug_aranges + 0x00000300 0x20 ym2612.o + .debug_aranges + 0x00000320 0x20 gcaram.o + .debug_aranges + 0x00000340 0x20 loadrom.o + .debug_aranges + 0x00000360 0x20 ngc.o + .debug_aranges + 0x00000380 0x20 unzip.o + .debug_aranges + 0x000003a0 0x20 confjoy.o + .debug_aranges + 0x000003c0 0x20 dvd.o + .debug_aranges + 0x000003e0 0x20 filesel.o + .debug_aranges + 0x00000400 0x20 font.o + .debug_aranges + 0x00000420 0x20 ggentry.o + .debug_aranges + 0x00000440 0x20 iso9660.o + .debug_aranges + 0x00000460 0x20 legal.o + .debug_aranges + 0x00000480 0x20 mcard.o + .debug_aranges + 0x000004a0 0x20 menu.o + .debug_aranges + 0x000004c0 0x20 rominfo.o + .debug_aranges + 0x000004e0 0x20 diskio.o + .debug_aranges + 0x00000500 0x20 vfat.o + +.debug_pubnames + 0x00000000 0xdc5d + *(.debug_pubnames) + .debug_pubnames + 0x00000000 0x5b eeprom.o + .debug_pubnames + 0x0000005b 0x146 genesis.o + .debug_pubnames + 0x000001a1 0x17e input.o + .debug_pubnames + 0x0000031f 0xfd io.o + .debug_pubnames + 0x0000041c 0x159 mem68k.o + .debug_pubnames + 0x00000575 0xc1 membnk.o + .debug_pubnames + 0x00000636 0x20 memvdp.o + .debug_pubnames + 0x00000656 0xbe memz80.o + .debug_pubnames + 0x00000714 0x336 render.o + .debug_pubnames + 0x00000a4a 0x29 sram.o + .debug_pubnames + 0x00000a73 0x3d ssf2tnc.o + .debug_pubnames + 0x00000ab0 0x66 state.o + .debug_pubnames + 0x00000b16 0x154 system.o + .debug_pubnames + 0x00000c6a 0x3de vdp.o + .debug_pubnames + 0x00001048 0x321 m68kcpu.o + .debug_pubnames + 0x00001369 0x3bb7 m68kopac.o + .debug_pubnames + 0x00004f20 0x3d79 m68kopdm.o + .debug_pubnames + 0x00008c99 0x396f m68kopnz.o + .debug_pubnames + 0x0000c608 0x61 m68kops.o + .debug_pubnames + 0x0000c669 0x166 z80.o + .debug_pubnames + 0x0000c7cf 0xa7 fm.o + .debug_pubnames + 0x0000c876 0x16c sn76489.o + .debug_pubnames + 0x0000c9e2 0x8d sn76496.o + .debug_pubnames + 0x0000ca6f 0xcd sound.o + .debug_pubnames + 0x0000cb3c 0x602 ym2612.o + .debug_pubnames + 0x0000d13e 0x48 gcaram.o + .debug_pubnames + 0x0000d186 0x73 loadrom.o + .debug_pubnames + 0x0000d1f9 0x197 ngc.o + .debug_pubnames + 0x0000d390 0x30 unzip.o + .debug_pubnames + 0x0000d3c0 0x80 confjoy.o + .debug_pubnames + 0x0000d440 0x6e dvd.o + .debug_pubnames + 0x0000d4ae 0xfb filesel.o + .debug_pubnames + 0x0000d5a9 0x1c2 font.o + .debug_pubnames + 0x0000d76b 0xd2 ggentry.o + .debug_pubnames + 0x0000d83d 0x67 iso9660.o + .debug_pubnames + 0x0000d8a4 0x40 legal.o + .debug_pubnames + 0x0000d8e4 0xb9 mcard.o + .debug_pubnames + 0x0000d99d 0x144 menu.o + .debug_pubnames + 0x0000dae1 0xa2 rominfo.o + .debug_pubnames + 0x0000db83 0x39 diskio.o + .debug_pubnames + 0x0000dbbc 0xa1 vfat.o + +.debug_info 0x00000000 0x7faa3 + *(.debug_info) + .debug_info 0x00000000 0x569 eeprom.o + .debug_info 0x00000569 0x343 genesis.o + .debug_info 0x000008ac 0x6a6 input.o + .debug_info 0x00000f52 0x37e io.o + .debug_info 0x000012d0 0x509 mem68k.o + .debug_info 0x000017d9 0x24e membnk.o + .debug_info 0x00001a27 0x118 memvdp.o + .debug_info 0x00001b3f 0x2a4 memz80.o + .debug_info 0x00001de3 0x1850 render.o + .debug_info 0x00003633 0x180 sram.o + .debug_info 0x000037b3 0x12b ssf2tnc.o + .debug_info 0x000038de 0x846 state.o + .debug_info 0x00004124 0x732 system.o + .debug_info 0x00004856 0xa30 vdp.o + .debug_info 0x00005286 0x1572 m68kcpu.o + .debug_info 0x000067f8 0x21e4e m68kopac.o + .debug_info 0x00028646 0x1b4ff m68kopdm.o + .debug_info 0x00043b45 0x19f76 m68kopnz.o + .debug_info 0x0005dabb 0x173 m68kops.o + .debug_info 0x0005dc2e 0x16b7b z80.o + .debug_info 0x000747a9 0x2333 fm.o + .debug_info 0x00076adc 0x606 sn76489.o + .debug_info 0x000770e2 0x3f4 sn76496.o + .debug_info 0x000774d6 0x480 sound.o + .debug_info 0x00077956 0x20b6 ym2612.o + .debug_info 0x00079a0c 0x16d gcaram.o + .debug_info 0x00079b79 0x435 loadrom.o + .debug_info 0x00079fae 0xcd7 ngc.o + .debug_info 0x0007ac85 0x742 unzip.o + .debug_info 0x0007b3c7 0x275 confjoy.o + .debug_info 0x0007b63c 0x199 dvd.o + .debug_info 0x0007b7d5 0x857 filesel.o + .debug_info 0x0007c02c 0x99f font.o + .debug_info 0x0007c9cb 0x508 ggentry.o + .debug_info 0x0007ced3 0x354 iso9660.o + .debug_info 0x0007d227 0x2c7 legal.o + .debug_info 0x0007d4ee 0x93a mcard.o + .debug_info 0x0007de28 0x707 menu.o + .debug_info 0x0007e52f 0x736 rominfo.o + .debug_info 0x0007ec65 0x12d diskio.o + .debug_info 0x0007ed92 0xd11 vfat.o + +.debug_abbrev 0x00000000 0x3f79 + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x179 eeprom.o + .debug_abbrev 0x00000179 0xfd genesis.o + .debug_abbrev 0x00000276 0x1e8 input.o + .debug_abbrev 0x0000045e 0x139 io.o + .debug_abbrev 0x00000597 0x145 mem68k.o + .debug_abbrev 0x000006dc 0xe1 membnk.o + .debug_abbrev 0x000007bd 0xa3 memvdp.o + .debug_abbrev 0x00000860 0x99 memz80.o + .debug_abbrev 0x000008f9 0x1d0 render.o + .debug_abbrev 0x00000ac9 0xb2 sram.o + .debug_abbrev 0x00000b7b 0x97 ssf2tnc.o + .debug_abbrev 0x00000c12 0x16a state.o + .debug_abbrev 0x00000d7c 0x1b5 system.o + .debug_abbrev 0x00000f31 0x1d9 vdp.o + .debug_abbrev 0x0000110a 0x2a5 m68kcpu.o + .debug_abbrev 0x000013af 0x24e m68kopac.o + .debug_abbrev 0x000015fd 0x256 m68kopdm.o + .debug_abbrev 0x00001853 0x25b m68kopnz.o + .debug_abbrev 0x00001aae 0xd3 m68kops.o + .debug_abbrev 0x00001b81 0x2c1 z80.o + .debug_abbrev 0x00001e42 0x230 fm.o + .debug_abbrev 0x00002072 0x162 sn76489.o + .debug_abbrev 0x000021d4 0x128 sn76496.o + .debug_abbrev 0x000022fc 0x169 sound.o + .debug_abbrev 0x00002465 0x22f ym2612.o + .debug_abbrev 0x00002694 0x8a gcaram.o + .debug_abbrev 0x0000271e 0x13c loadrom.o + .debug_abbrev 0x0000285a 0x325 ngc.o + .debug_abbrev 0x00002b7f 0x1dd unzip.o + .debug_abbrev 0x00002d5c 0xf4 confjoy.o + .debug_abbrev 0x00002e50 0x101 dvd.o + .debug_abbrev 0x00002f51 0x20d filesel.o + .debug_abbrev 0x0000315e 0x1d4 font.o + .debug_abbrev 0x00003332 0x155 ggentry.o + .debug_abbrev 0x00003487 0x13d iso9660.o + .debug_abbrev 0x000035c4 0x135 legal.o + .debug_abbrev 0x000036f9 0x1c7 mcard.o + .debug_abbrev 0x000038c0 0x1f3 menu.o + .debug_abbrev 0x00003ab3 0x1b7 rominfo.o + .debug_abbrev 0x00003c6a 0x9b diskio.o + .debug_abbrev 0x00003d05 0x274 vfat.o + +.debug_line 0x00000000 0x3ec4a + *(.debug_line) + .debug_line 0x00000000 0x249 eeprom.o + .debug_line 0x00000249 0x10b genesis.o + .debug_line 0x00000354 0x28f input.o + .debug_line 0x000005e3 0x150 io.o + .debug_line 0x00000733 0x2a3 mem68k.o + .debug_line 0x000009d6 0x14a membnk.o + .debug_line 0x00000b20 0x9c memvdp.o + .debug_line 0x00000bbc 0x118 memz80.o + .debug_line 0x00000cd4 0x78d render.o + .debug_line 0x00001461 0xa9 sram.o + .debug_line 0x0000150a 0xc7 ssf2tnc.o + .debug_line 0x000015d1 0x22f state.o + .debug_line 0x00001800 0x359 system.o + .debug_line 0x00001b59 0x304 vdp.o + .debug_line 0x00001e5d 0x996 m68kcpu.o + .debug_line 0x000027f3 0x12f91 m68kopac.o + .debug_line 0x00015784 0xed19 m68kopdm.o + .debug_line 0x0002449d 0xe3fe m68kopnz.o + .debug_line 0x0003289b 0xd8 m68kops.o + .debug_line 0x00032973 0x7795 z80.o + .debug_line 0x0003a108 0xed4 fm.o + .debug_line 0x0003afdc 0x1a6 sn76489.o + .debug_line 0x0003b182 0x167 sn76496.o + .debug_line 0x0003b2e9 0x19d sound.o + .debug_line 0x0003b486 0x12e1 ym2612.o + .debug_line 0x0003c767 0xb1 gcaram.o + .debug_line 0x0003c818 0x218 loadrom.o + .debug_line 0x0003ca30 0x400 ngc.o + .debug_line 0x0003ce30 0x1ca unzip.o + .debug_line 0x0003cffa 0x17a confjoy.o + .debug_line 0x0003d174 0x134 dvd.o + .debug_line 0x0003d2a8 0x3b2 filesel.o + .debug_line 0x0003d65a 0x21c font.o + .debug_line 0x0003d876 0x229 ggentry.o + .debug_line 0x0003da9f 0x1ca iso9660.o + .debug_line 0x0003dc69 0x1b4 legal.o + .debug_line 0x0003de1d 0x3b6 mcard.o + .debug_line 0x0003e1d3 0x427 menu.o + .debug_line 0x0003e5fa 0x251 rominfo.o + .debug_line 0x0003e84b 0x85 diskio.o + .debug_line 0x0003e8d0 0x37a vfat.o + +.debug_frame 0x00000000 0x2270c + *(.debug_frame) + .debug_frame 0x00000000 0xb0 eeprom.o + .debug_frame 0x000000b0 0x118 genesis.o + .debug_frame 0x000001c8 0x1ac input.o + .debug_frame 0x00000374 0x188 io.o + .debug_frame 0x000004fc 0x248 mem68k.o + .debug_frame 0x00000744 0x130 membnk.o + .debug_frame 0x00000874 0x30 memvdp.o + .debug_frame 0x000008a4 0x150 memz80.o + .debug_frame 0x000009f4 0x494 render.o + .debug_frame 0x00000e88 0x40 sram.o + .debug_frame 0x00000ec8 0x44 ssf2tnc.o + .debug_frame 0x00000f0c 0xc8 state.o + .debug_frame 0x00000fd4 0x1c4 system.o + .debug_frame 0x00001198 0x218 vdp.o + .debug_frame 0x000013b0 0x2a0 m68kcpu.o + .debug_frame 0x00001650 0x6dc0 m68kopac.o + .debug_frame 0x00008410 0x6e2c m68kopdm.o + .debug_frame 0x0000f23c 0x68c0 m68kopnz.o + .debug_frame 0x00015afc 0x34 m68kops.o + .debug_frame 0x00015b30 0xa79c z80.o + .debug_frame 0x000202cc 0x1f8 fm.o + .debug_frame 0x000204c4 0x174 sn76489.o + .debug_frame 0x00020638 0xbc sn76496.o + .debug_frame 0x000206f4 0x128 sound.o + .debug_frame 0x0002081c 0xbc0 ym2612.o + .debug_frame 0x000213dc 0xa8 gcaram.o + .debug_frame 0x00021484 0xf4 loadrom.o + .debug_frame 0x00021578 0xfc ngc.o + .debug_frame 0x00021674 0x74 unzip.o + .debug_frame 0x000216e8 0x5c confjoy.o + .debug_frame 0x00021744 0x8c dvd.o + .debug_frame 0x000217d0 0x1a0 filesel.o + .debug_frame 0x00021970 0x350 font.o + .debug_frame 0x00021cc0 0x160 ggentry.o + .debug_frame 0x00021e20 0xa8 iso9660.o + .debug_frame 0x00021ec8 0x6c legal.o + .debug_frame 0x00021f34 0x178 mcard.o + .debug_frame 0x000220ac 0x2b0 menu.o + .debug_frame 0x0002235c 0xb4 rominfo.o + .debug_frame 0x00022410 0x70 diskio.o + .debug_frame 0x00022480 0x28c vfat.o + +.debug_str 0x00000000 0xfe92 + *(.debug_str) + .debug_str 0x00000000 0x30c eeprom.o + 0x38e (size before relaxing) + .debug_str 0x0000030c 0x174 genesis.o + 0x25f (size before relaxing) + .debug_str 0x00000480 0x1de input.o + 0x306 (size before relaxing) + .debug_str 0x0000065e 0xeb io.o + 0x212 (size before relaxing) + .debug_str 0x00000749 0x15a mem68k.o + 0x2bc (size before relaxing) + .debug_str 0x000008a3 0xbd membnk.o + 0x1c0 (size before relaxing) + .debug_str 0x00000960 0x38 memvdp.o + 0x137 (size before relaxing) + .debug_str 0x00000998 0xb2 memz80.o + 0x1ba (size before relaxing) + .debug_str 0x00000a4a 0x40d render.o + 0x5c2 (size before relaxing) + .debug_str 0x00000e57 0x36 sram.o + 0x151 (size before relaxing) + .debug_str 0x00000e8d 0x56 ssf2tnc.o + 0x14c (size before relaxing) + .debug_str 0x00000ee3 0x152 state.o + 0x452 (size before relaxing) + .debug_str 0x00001035 0x1d8 system.o + 0x3d6 (size before relaxing) + .debug_str 0x0000120d 0x19f vdp.o + 0x4a7 (size before relaxing) + .debug_str 0x000013ac 0x872 m68kcpu.o + 0xa11 (size before relaxing) + .debug_str 0x00001c1e 0x3536 m68kopac.o + 0x39be (size before relaxing) + .debug_str 0x00005154 0x3425 m68kopdm.o + 0x3aef (size before relaxing) + .debug_str 0x00008579 0x2fe4 m68kopnz.o + 0x3689 (size before relaxing) + .debug_str 0x0000b55d 0xa0 m68kops.o + 0x121 (size before relaxing) + .debug_str 0x0000b5fd 0x2328 z80.o + 0x2a5a (size before relaxing) + .debug_str 0x0000d925 0x55b fm.o + 0x6db (size before relaxing) + .debug_str 0x0000de80 0x273 sn76489.o + 0x38e (size before relaxing) + .debug_str 0x0000e0f3 0x9b sn76496.o + 0x20d (size before relaxing) + .debug_str 0x0000e18e 0xa3 sound.o + 0x24a (size before relaxing) + .debug_str 0x0000e231 0x645 ym2612.o + 0x76f (size before relaxing) + .debug_str 0x0000e876 0x58 gcaram.o + 0x14b (size before relaxing) + .debug_str 0x0000e8ce 0xa5 loadrom.o + 0x29d (size before relaxing) + .debug_str 0x0000e973 0x2e7 ngc.o + 0x4b3 (size before relaxing) + .debug_str 0x0000ec5a 0x305 unzip.o + 0x420 (size before relaxing) + .debug_str 0x0000ef5f 0xa1 confjoy.o + 0x1c3 (size before relaxing) + .debug_str 0x0000f000 0x73 dvd.o + 0x161 (size before relaxing) + .debug_str 0x0000f073 0x258 filesel.o + 0x4dc (size before relaxing) + .debug_str 0x0000f2cb 0x28a font.o + 0x3a9 (size before relaxing) + .debug_str 0x0000f555 0xcc ggentry.o + 0x296 (size before relaxing) + .debug_str 0x0000f621 0xc5 iso9660.o + 0x210 (size before relaxing) + .debug_str 0x0000f6e6 0x58 legal.o + 0x206 (size before relaxing) + .debug_str 0x0000f73e 0x228 mcard.o + 0x453 (size before relaxing) + .debug_str 0x0000f966 0xc3 menu.o + 0x2c4 (size before relaxing) + .debug_str 0x0000fa29 0xdd rominfo.o + 0x40f (size before relaxing) + .debug_str 0x0000fb06 0x5c diskio.o + 0x13c (size before relaxing) + .debug_str 0x0000fb62 0x330 vfat.o + 0x64a (size before relaxing) + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + 0x00000000 __isIPL = 0x0 + 0x804db860 __stack_addr = ((((__bss_start + SIZEOF (.bss)) + 0x20000) + 0x7) & 0xfffffff8) + 0x804bb860 __stack_end = (__bss_start + SIZEOF (.bss)) + 0x804df860 __intrstack_addr = (__stack_addr + 0x4000) + 0x804db860 __intrstack_end = __stack_addr + 0x804df860 __ArenaLo = ((__intrstack_addr + 0x1f) & 0xffffffe0) + 0x81700000 __ArenaHi = 0x81700000 + 0x81700000 __gxregs = ((__ArenaHi + 0x1f) & 0xffffffe0) + 0x81700000 PROVIDE (__stack, 0x81700000) + 0x00000000 PROVIDE (__isIPL, __isIPL) + 0x80003100 PROVIDE (__text_start, text_mem_start) + 0x00000100 PROVIDE (__text_fstart, text_file_start) + 0x800f12c0 PROVIDE (__data_start, data_mem_start) + 0x000ee2c0 PROVIDE (__data_fstart, data_file_start) + 0x8011ce80 PROVIDE (__bss_start, bss_mem_start) + 0x00119e80 PROVIDE (__bss_fstart, bss_file_start) + 0x804db860 PROVIDE (__stack_addr, __stack_addr) + 0x804bb860 PROVIDE (__stack_end, __stack_end) + 0x804df860 PROVIDE (__intrstack_addr, __intrstack_addr) + 0x804db860 PROVIDE (__intrstack_end, __intrstack_end) + 0x804df860 PROVIDE (__ArenaLo, __ArenaLo) + 0x81700000 PROVIDE (__ArenaHi, __ArenaHi) + 0x81700000 PROVIDE (__gxregs, __gxregs) +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o +LOAD eeprom.o +LOAD genesis.o +LOAD input.o +LOAD io.o +LOAD mem68k.o +LOAD membnk.o +LOAD memvdp.o +LOAD memz80.o +LOAD render.o +LOAD sram.o +LOAD ssf2tnc.o +LOAD state.o +LOAD system.o +LOAD vdp.o +LOAD m68kcpu.o +LOAD m68kopac.o +LOAD m68kopdm.o +LOAD m68kopnz.o +LOAD m68kops.o +LOAD z80.o +LOAD fm.o +LOAD sn76489.o +LOAD sn76496.o +LOAD sound.o +LOAD ym2612.o +LOAD gcaram.o +LOAD loadrom.o +LOAD ngc.o +LOAD unzip.o +LOAD confjoy.o +LOAD dvd.o +LOAD filesel.o +LOAD font.o +LOAD ggentry.o +LOAD iso9660.o +LOAD legal.o +LOAD mcard.o +LOAD menu.o +LOAD rominfo.o +LOAD diskio.o +LOAD vfat.o +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a +START GROUP +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a +END GROUP +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtend.o +LOAD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +OUTPUT(c:/Devkitpro/examples/genplus/genplus.elf elf32-powerpc) + +.debug_ranges 0x00000000 0x11790 + .debug_ranges 0x00000000 0x20 mem68k.o + .debug_ranges 0x00000020 0xb8 render.o + .debug_ranges 0x000000d8 0x18 system.o + .debug_ranges 0x000000f0 0x70 vdp.o + .debug_ranges 0x00000160 0x178 m68kcpu.o + .debug_ranges 0x000002d8 0x4378 m68kopac.o + .debug_ranges 0x00004650 0x4d88 m68kopdm.o + .debug_ranges 0x000093d8 0x23b8 m68kopnz.o + .debug_ranges 0x0000b790 0x4ad8 z80.o + .debug_ranges 0x00010268 0x8c0 fm.o + .debug_ranges 0x00010b28 0x80 sn76496.o + .debug_ranges 0x00010ba8 0x20 sound.o + .debug_ranges 0x00010bc8 0x8b8 ym2612.o + .debug_ranges 0x00011480 0xd0 ngc.o + .debug_ranges 0x00011550 0x18 unzip.o + .debug_ranges 0x00011568 0x80 filesel.o + .debug_ranges 0x000115e8 0x98 font.o + .debug_ranges 0x00011680 0x18 ggentry.o + .debug_ranges 0x00011698 0x20 iso9660.o + .debug_ranges 0x000116b8 0x70 mcard.o + .debug_ranges 0x00011728 0x68 vfat.o + +.PPC.EMB.apuinfo + 0x00000000 0x18 + .PPC.EMB.apuinfo + 0x00000000 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + .PPC.EMB.apuinfo + 0x00000018 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + .PPC.EMB.apuinfo + 0x00000030 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + .PPC.EMB.apuinfo + 0x00000048 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + .PPC.EMB.apuinfo + 0x00000060 0x18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) + +Cross Reference Table + +Symbol File +ARAMFetch gcaram.o + ngc.o + ssf2tnc.o +ARAMPut gcaram.o + ngc.o +AR_Alloc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_CheckInit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_Clear c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_Free c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_GetBaseAddress c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_GetDMAStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + gcaram.o +AR_GetInternalSize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_GetSize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + gcaram.o +AR_RegisterCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_Reset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) +AR_StartDMA c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + gcaram.o +AR_TAB ym2612.o +AUDIO_GetDMABytesLeft c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_GetDMAEnableFlag c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_GetDMALength c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_GetDMAStartAddr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_GetDSPSampleRate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_GetStreamPlayState c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_GetStreamSampleRate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_GetStreamVolLeft c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_GetStreamVolRight c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + ngc.o +AUDIO_InitDMA c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + ngc.o +AUDIO_RegisterDMACallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + ngc.o +AUDIO_RegisterStreamCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_ResetStreamSampleCnt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_SetDSPSampleRate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + ngc.o +AUDIO_SetStreamPlayState c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_SetStreamSampleRate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_SetStreamTrigger c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_SetStreamVolLeft c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_SetStreamVolRight c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) +AUDIO_StartDMA c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + ngc.o +AUDIO_StopDMA c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + ngc.o +CARDSLOT menu.o + mcard.o +CARD_Close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_Create c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_CreateAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_CreateEntry c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_CreateEntryAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_Delete c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_DeleteAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_DeleteEntry c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_DeleteEntryAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_FindFirst c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_FindNext c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_Format c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_FormatAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_GetAttributes c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_GetDirectory c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_GetErrorCode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_GetSectorSize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_GetStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_Mount c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_MountAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_Open c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_OpenEntry c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_Probe c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_ProbeEx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_Read c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_ReadAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_SetAttributes c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_SetAttributesAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_SetStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_SetStatusAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CARD_Unmount c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_Write c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + mcard.o +CARD_WriteAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +CHANNEL_SET ym2612.o +CPU_Clock system.o + sound.o +CardDir mcard.o +CardFile mcard.o +CardFileExists mcard.o +CardStatus mcard.o +ClearGGCodes ggentry.o + loadrom.o +ClearScreen font.o + rominfo.o + menu.o + ggentry.o + filesel.o +ConfigRequested ngc.o +ConfigureJoypads confjoy.o + menu.o +DCBlockFlush c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCBlockInvalidate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCBlockStore c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCBlockZero c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCDisable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCEnable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) +DCFlashInvalidate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCFlushRange c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + dvd.o + ngc.o + gcaram.o +DCFlushRangeNoSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +DCFreeze c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCInvalidateRange c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + dvd.o + gcaram.o +DCStoreRange c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +DCStoreRangeNoSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCTouchLoad c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCTouchRange c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCUnfreeze c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DCZeroRange c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +DECAY_TO_ATTACK ym2612.o +DISKIO_Init diskio.o + vfat.o +DISKIO_ReadSectors diskio.o + vfat.o +DR_TAB ym2612.o +DSP_AddTask c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +DSP_AssertInt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) +DSP_CheckMailFrom c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) +DSP_CheckMailTo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +DSP_Halt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) +DSP_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +DSP_ReadCPUtoDSP c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) +DSP_ReadMailFrom c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) +DSP_RegisterCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) +DSP_SendMailTo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +DSP_Unhalt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) +DT_DEF_TAB ym2612.o +DT_TAB ym2612.o +DVD_CancelAllAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_ControlDrive c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_ControlDriveAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_GetCmdBlockStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_GetCurrentDiskID c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_GetDriveInfo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_GetDriveStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + ngc.o +DVD_Inquiry c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_InquiryAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowAudioBufferConfig c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowAudioStream c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowControlMotor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowEnableExtensions c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowFuncCall c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowGetStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowInquiry c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowPatchDriveCode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowRead c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowReadId c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowReadmem c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowRequestAudioStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowRequestError c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowReset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowSeek c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowSetGCMOffset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowSetOffset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowSetStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowSpinMotor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowSpinUpDrive c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowStopMotor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowUnlockDrive c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_LowWaitCoverClose c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_Mount c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + filesel.o +DVD_MountAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_Pause c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_ReadAbsAsyncForBS c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_ReadAbsAsyncPrio c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_ReadDiskID c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_ReadPrio c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_Reset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_SeekAbsAsyncPrio c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_SeekPrio c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_SetAutoInvalidation c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_SetGCMOffset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_SetGCMOffsetAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_SpinUpDrive c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_SpinUpDriveAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_StopStreamAtEnd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVD_StopStreamAtEndAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +DVDreadbuffer dvd.o +DrawGGCodes ggentry.o +EEPROM_Init eeprom.o + sram.o +EEPROM_Read eeprom.o + mem68k.o +EEPROM_Write eeprom.o + mem68k.o +ENV_NEXT_EVENT ym2612.o +ENV_TAB ym2612.o +EXI_Attach c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +EXI_Deselect c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +EXI_Detach c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +EXI_Dma c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +EXI_GetID c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +EXI_GetState c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +EXI_Imm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +EXI_ImmEx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +EXI_Lock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +EXI_Probe c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +EXI_ProbeEx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +EXI_ProbeReset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + mcard.o +EXI_RegisterEXICallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +EXI_Select c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +EXI_SelectSD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +EXI_Sync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +EXI_Unlock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +Env_Attack_Next ym2612.o +Env_Decay_Next ym2612.o +Env_NULL_Next ym2612.o +Env_Release_Next ym2612.o +Env_Substain_Next ym2612.o +FINC_TAB ym2612.o +FKEY_TAB ym2612.o +FM_GENS menu.o + sound.o + system.o +FileSelector filesel.o +FrameCount ngc.o +FramesPerSecond ngc.o +GGEditLine ggentry.o +GGSelectLine ggentry.o +GX_AbortFrame c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_AdjustForOverscan c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Begin c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_BeginDispList c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_CallDispList c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ClearBoundingBox c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ClearGPMetric c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ClearVCacheMetric c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ClearVtxDesc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_Color1u16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Color1u32 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Color1x16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Color1x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_Color3u8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Color4u8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_CopyDisp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_CopyTex c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_DisableBreakPt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_DrawDone c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_EnableBreakPt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_EnableTexOffsets c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_End c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_EndDispList c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Flush c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_GetCPUFifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetCurrentGXThread c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetDrawSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetFifoPtrs c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetGPFifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetGPStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetOverflowCount c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetTexBufferSize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetTexFmt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_GetYScaleFactor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_InitFifoBase c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitFifoLimits c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitFifoPtrs c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitLightAttn c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitLightAttnA c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitLightAttnK c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitLightColor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitLightDir c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitLightDistAttn c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitLightPos c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitLightSpot c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitSpecularDir c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitSpecularDirHA c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitTexCacheRegion c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitTexObj c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_InitTexObjCI c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitTexObjLOD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitTexObjTlut c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitTexPreloadRegion c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitTlutObj c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitTlutRegion c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InitXfRasMetric c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_InvVtxCache c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_InvalidateTexAll c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_InvalidateTexRegion c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadLightObj c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadLightObjIdx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadNrmMtxIdx3x3 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadNrmMtxImm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadNrmMtxImm3x3 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadPosMtxIdx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadPosMtxImm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_LoadProjectionMtx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_LoadTexMtxIdx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadTexMtxImm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadTexObj c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_LoadTexObjPreloaded c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_LoadTlut c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_MatrixIndex1x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Normal1x16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Normal1x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Normal3f32 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Normal3s16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Normal3s8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PixModeSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeARGB c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeAlphaMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeAlphaRead c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeAlphaUpdate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeBlendMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeColorUpdate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeDither c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeDstAlpha c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeZ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PokeZMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position1x16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position1x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_Position2f32 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position2s16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position2s8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position2u16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position2u8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position3f32 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position3s16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position3s8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position3u16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_Position3u8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_PreloadEntireTex c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ReadClksPerVtx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ReadGPMetric c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ReadVCacheMetric c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ReadXfRasMetric c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_RedirectWriteGatherPipe c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_ResetOverflowCount c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_RestoreWriteGatherPipe c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SaveCPUFifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetAlphaCompare c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetAlphaUpdate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetArray c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetBlendMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetBreakPtCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetCPUFifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetChanAmbColor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetChanCtrl c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetChanMatColor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetClipMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetCoPlanar c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetColorUpdate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetCopyClamp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetCopyClear c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetCopyFilter c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetCullMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetCurrentGXThread c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetCurrentMtx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetDispCopyDst c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetDispCopyFrame2Field c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetDispCopyGamma c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetDispCopySrc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetDispCopyYScale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetDither c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetDrawDone c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetDrawDoneCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetDrawSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetDrawSyncCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetDstAlpha c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetFieldMask c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetFieldMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetFog c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetFogRangeAdj c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetGPFifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetGPMetric c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetIndTexCoordScale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetIndTexOrder c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetLineWidth c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetMisc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetNumChans c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetNumIndStages c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetNumTevStages c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetNumTexGens c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetPixelFmt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetPointSize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetScissor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetScissorBoxOffset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevAlphaIn c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevAlphaOp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevColor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevColorIn c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevColorOp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevDirect c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevIndirect c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevKAlphaSel c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevKColorSel c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevOp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetTevOrder c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetTevSwapMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTevSwapModeTable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTexCoorScaleManually c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTexCoordBias c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTexCoordCylWrap c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTexCoordGen c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetTexCoordGen2 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTexCopyDst c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTexCopySrc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTexRegionCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetTlutRegionCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetVCacheMetric c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetViewport c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetViewportJitter c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetVtxAttrFmt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetVtxAttrFmtv c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetVtxDesc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetVtxDescv c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetZCompLoc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_SetZMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_SetZTexture c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord1f32 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord1s16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord1s8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord1u16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord1u8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord1x16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord1x8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord2f32 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + ngc.o +GX_TexCoord2s16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord2s8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord2u16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexCoord2u8 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_TexModeSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GX_WaitDrawDone c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +GetGGEntries ggentry.o + menu.o +GetRealChecksum rominfo.o +GetSDInfo filesel.o +ICBlockInvalidate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +ICDisable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +ICEnable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) +ICFlashInvalidate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +ICFreeze c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +ICInvalidateRange c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +ICSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +ICUnfreeze c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +INTER_TAB ym2612.o +IRQ_Disable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) +IRQ_Free c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) +IRQ_GetHandler c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) +IRQ_Request c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +IRQ_Restore c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) +InitializeUART c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) +IsPlaying ngc.o +IsZipFile unzip.o + filesel.o +L2Disable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +L2Enable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) +L2GlobalInvalidate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +L2Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) +LCAllocOneTag c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +LCAllocTags c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +LCDisable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +LCLoadBlocks c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +LCStoreBlocks c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +LFO_AMS_TAB ym2612.o +LFO_ENV_TAB ym2612.o +LFO_ENV_UP ym2612.o +LFO_FMS_TAB ym2612.o +LFO_FREQ_TAB ym2612.o +LFO_FREQ_UP ym2612.o +LFO_INC_TAB ym2612.o +LWP_CloseQueue c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +LWP_CondBroadcast c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +LWP_CondDestroy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +LWP_CondInit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +LWP_CondSignal c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +LWP_CondTimedWait c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +LWP_CondWait c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +LWP_CreateThread c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +LWP_GetSelf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +LWP_InitQueue c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +LWP_JoinThread c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +LWP_MutexDestroy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) +LWP_MutexInit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +LWP_MutexLock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +LWP_MutexTryLock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) +LWP_MutexUnlock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +LWP_Reschedule c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +LWP_ResumeThread c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +LWP_SemDestroy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) +LWP_SemInit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) +LWP_SemPost c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) +LWP_SemWait c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) +LWP_SetThreadPriority c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +LWP_SuspendThread c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +LWP_ThreadBroadcast c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +LWP_ThreadIsSuspended c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +LWP_ThreadSignal c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +LWP_ThreadSleep c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +LWP_YieldThread c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +LoadFile filesel.o +MQ_Close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +MQ_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +MQ_Jam c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +MQ_Receive c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +MQ_Send c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +MainMenu menu.o + ngc.o +ManageSRAM mcard.o + menu.o +ManageState mcard.o + menu.o +MountTheCard mcard.o +MultiTap1_Read io.o +MultiTap1_Write io.o +MultiTap2_Read io.o +MultiTap2_Write io.o +NULL_RATE ym2612.o +OpenDVD filesel.o + menu.o +OpenSD filesel.o + menu.o +PAD_ButtonsDown c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + rominfo.o + menu.o + ggentry.o + font.o + filesel.o +PAD_ButtonsHeld c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + rominfo.o + menu.o + ngc.o +PAD_ButtonsUp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PAD_ControlMotor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PAD_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + ngc.o +PAD_Read c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +PAD_Recalibrate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PAD_Reset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PAD_ScanPads c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + ngc.o +PAD_SetSamplingCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PAD_SetSpec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PAD_StickX c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + menu.o + ggentry.o + filesel.o + ngc.o +PAD_StickY c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + rominfo.o + menu.o + ggentry.o + filesel.o + ngc.o +PAD_SubStickX c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PAD_SubStickY c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PAD_Sync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +PSG_MAME menu.o + sound.o + system.o + state.o +Player1_Read io.o +Player1_Write io.o +Player2_Read io.o +Player2_Write io.o +RenderedFrameCount ngc.o +SDCARD_CloseFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + mcard.o +SDCARD_GetFileSize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +SDCARD_GetStats c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +SDCARD_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + ngc.o +SDCARD_OpenFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + mcard.o +SDCARD_ReadDir c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +SDCARD_ReadFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + mcard.o +SDCARD_SeekFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +SDCARD_Unmount c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +SDCARD_WriteFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + mcard.o +SD_ManageFile mcard.o +SILENT font.o + mcard.o +SIN_TAB ym2612.o +SI_Busy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_DisablePolling c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_EnablePolling c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_EnablePollingInterrupt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +SI_GetCommand c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +SI_GetResponse c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_GetResponseRaw c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +SI_GetStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_GetType c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_GetTypeAsync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_IsChanBusy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_RefreshSamplingRate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +SI_RegisterPollingHandler c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_SetCommand c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_SetSamplingRate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +SI_SetXY c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +SI_Transfer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_TransferCommands c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SI_UnregisterPollingHandler c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SLOT_SET ym2612.o +SL_TAB ym2612.o +SN76489_Config sn76489.o + system.o +SN76489_GGStereoWrite sn76489.o +SN76489_GetContext sn76489.o +SN76489_GetContextPtr sn76489.o + state.o +SN76489_GetContextSize sn76489.o + state.o +SN76489_GetMute sn76489.o +SN76489_GetVolType sn76489.o +SN76489_Init sn76489.o + system.o +SN76489_Reset sn76489.o + system.o +SN76489_SetContext sn76489.o +SN76489_SetMute sn76489.o +SN76489_SetPanning sn76489.o +SN76489_SetVolType sn76489.o +SN76489_Shutdown sn76489.o +SN76489_Update sn76489.o + sound.o + system.o +SN76489_Write sn76489.o + sound.o +SN76496Update sn76496.o + sound.o + system.o +SN76496Write sn76496.o + sound.o +SN76496_init sn76496.o +SN76496_set_clock sn76496.o +SN76496_set_gain sn76496.o +SN76496_sh_start sn76496.o + system.o +SRAM_Init sram.o + loadrom.o +SSF2TNC ssf2tnc.o + loadrom.o + mem68k.o +SYS_AllocateFramebuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + ngc.o +SYS_CancelAlarm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +SYS_ConsoleInit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_CreateAlarm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +SYS_DumpPMC c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_GetArenaHi c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sbrk.o) +SYS_GetArenaLo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sbrk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) +SYS_GetFontEncoding c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +SYS_GetFontTexel c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_GetFontTexture c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_GetWirelessID c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +SYS_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +SYS_InitFont c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_ProtectRange c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_RegisterResetFunc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) +SYS_RemoveAlarm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_ResetPMC c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_ResetSystem c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + menu.o +SYS_SetAlarm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +SYS_SetArenaHi c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_SetArenaLo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sbrk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) +SYS_SetPeriodicAlarm c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_SetResetCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_SetWirelessID c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +SYS_StartPMC c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SYS_StopPMC c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +SetScreen font.o + rominfo.o + menu.o + legal.o + ggentry.o + filesel.o +ShadowROM gcaram.o + genesis.o +ShowAction font.o + menu.o + mcard.o + filesel.o + unzip.o +StartARAM gcaram.o + ngc.o +TL_TAB ym2612.o +TVMpal480IntDf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +TVNtsc240Ds c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVNtsc240DsAa c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVNtsc240Int c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVNtsc240IntAa c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVNtsc480IntAa c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVNtsc480IntDf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + legal.o + ngc.o +TVPal264Ds c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVPal264DsAa c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVPal264Int c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVPal264IntAa c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVPal524IntAa c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVPal528Int c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +TVPal528IntDf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +TVPal574IntDfScale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +UPDATE_CHAN ym2612.o +UnZipBuffer unzip.o + filesel.o +UpdatePadMaps confjoy.o +Update_Chan_Algo0 ym2612.o +Update_Chan_Algo0_Int ym2612.o +Update_Chan_Algo0_LFO ym2612.o +Update_Chan_Algo0_LFO_Int ym2612.o +Update_Chan_Algo1 ym2612.o +Update_Chan_Algo1_Int ym2612.o +Update_Chan_Algo1_LFO ym2612.o +Update_Chan_Algo1_LFO_Int ym2612.o +Update_Chan_Algo2 ym2612.o +Update_Chan_Algo2_Int ym2612.o +Update_Chan_Algo2_LFO ym2612.o +Update_Chan_Algo2_LFO_Int ym2612.o +Update_Chan_Algo3 ym2612.o +Update_Chan_Algo3_Int ym2612.o +Update_Chan_Algo3_LFO ym2612.o +Update_Chan_Algo3_LFO_Int ym2612.o +Update_Chan_Algo4 ym2612.o +Update_Chan_Algo4_Int ym2612.o +Update_Chan_Algo4_LFO ym2612.o +Update_Chan_Algo4_LFO_Int ym2612.o +Update_Chan_Algo5 ym2612.o +Update_Chan_Algo5_Int ym2612.o +Update_Chan_Algo5_LFO ym2612.o +Update_Chan_Algo5_LFO_Int ym2612.o +Update_Chan_Algo6 ym2612.o +Update_Chan_Algo6_Int ym2612.o +Update_Chan_Algo6_LFO ym2612.o +Update_Chan_Algo6_LFO_Int ym2612.o +Update_Chan_Algo7 ym2612.o +Update_Chan_Algo7_Int ym2612.o +Update_Chan_Algo7_LFO ym2612.o +Update_Chan_Algo7_LFO_Int ym2612.o +UseSDCARD filesel.o + menu.o + unzip.o +VFAT_closedir vfat.o + filesel.o +VFAT_fclose vfat.o + filesel.o + unzip.o +VFAT_fopen vfat.o + filesel.o +VFAT_fread vfat.o + filesel.o + unzip.o +VFAT_fseek vfat.o + filesel.o + unzip.o +VFAT_ftell vfat.o +VFAT_mount vfat.o + filesel.o +VFAT_opendir vfat.o + filesel.o +VFAT_readdir vfat.o + filesel.o +VIDEO_ClearFrameBuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + legal.o + ngc.o +VIDEO_Configure c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + ngc.o +VIDEO_Flush c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + font.o + ngc.o +VIDEO_GetCurrentLine c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +VIDEO_GetCurrentTvMode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +VIDEO_GetNextField c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +VIDEO_Init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + ngc.o +VIDEO_SetBlack c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + ngc.o +VIDEO_SetFramebuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +VIDEO_SetNextFramebuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + font.o + ngc.o +VIDEO_SetNextRightFramebuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +VIDEO_SetPostRetraceCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + ngc.o +VIDEO_SetPreRetraceCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + ngc.o +VIDEO_WaitVSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + rominfo.o + menu.o + mcard.o + font.o + ngc.o +WaitButtonA font.o + legal.o +WaitPrompt font.o + mcard.o + filesel.o +WriteCentre font.o + rominfo.o + menu.o + legal.o + ggentry.o + filesel.o +WriteCentre_HL font.o + menu.o + ggentry.o + filesel.o +WriteUARTN c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) +YM2612 ym2612.o +YM2612Init fm.o + system.o +YM2612Read fm.o +YM2612ResetChip fm.o + sound.o +YM2612Shutdown fm.o +YM2612TimerAOver ym2612.o + sound.o +YM2612TimerOver fm.o + sound.o +YM2612UpdateOne fm.o + sound.o + system.o +YM2612UpdateRequest fm.o +YM2612Write fm.o + sound.o +YM2612_End ym2612.o +YM2612_Init ym2612.o + system.o +YM2612_Read ym2612.o +YM2612_Reset ym2612.o + sound.o +YM2612_Special_Update ym2612.o +YM2612_Update ym2612.o + sound.o + system.o +YM2612_Write ym2612.o + sound.o +YM_SET ym2612.o +_Balloc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_Bfree c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_Jv_RegisterClasses c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o +_PathLocale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) +_SDA2_BASE_ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +_SDA_BASE_ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +__ArenaHi c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__ArenaLo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__CTOR_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__CTOR_LIST__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__CacheInit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +__DTOR_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__DTOR_LIST__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__DVDAudioBufferConfig c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__EH_FRAME_BEGIN__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__EH_FRAME_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__EXCEPT_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__EXCEPT_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__FIXUP_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__FIXUP_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__GOT1_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__GOT1_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__GOT2_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__GOT2_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__GOT_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__GOT_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__LCEnable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cache_asm.o) +__MaskIrq c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__PADDisableRecalibration c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(pad.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__PADFixBits c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) +__PSInit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +__SBSS2_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__SBSS2_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__SBSS_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__SBSS_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__SDATA2_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__SDATA2_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__SDATA_END__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrtn.o +__SDATA_START__ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o +__SYS_EnableBarnacle c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) +__SYS_GetRTC c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) +__SYS_GetSystemTime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__SYS_LoadFont c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__SYS_LockSram c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +__SYS_LockSramEx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__SYS_ReadROM c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + font.o +__SYS_SetBootTime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__SYS_SetTime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__SYS_SyncSram c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__SYS_UnlockSram c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +__SYS_UnlockSramEx c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__SystemInit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +__UnmaskIrq c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dsp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(audio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +__VIClearFramebuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +__VIDEO_GetNextFramebuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +__ashldi3 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_ashldi3.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(video.o) +__bss_end c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +__card_findnext c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +__config24Mb c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__config48Mb c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) +__console_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +__console_init_ex c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__ctype_ptr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(ctype_.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncasecmp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcasecmp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + loadrom.o +__decrementer_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__deregister_frame_info c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o +__dso_handle c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o +__dsp_shutdown c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__dvd_resetasync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_statebusy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_statecheckid c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_statecheckid2 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_statecoverclosed c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_statecoverclosed_cmd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_stateerror c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_stategettingerror c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_stategotoretry c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_statemotorstopped c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_stateready c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__dvd_statetimeout c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__errno c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(errno.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) +__exception_close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +__exception_closeall c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +__exception_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__exception_load c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) +__exception_sethandler c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +__exi_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__fdlib_version c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_lib_ver.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) +__fini c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +__flockfile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +__flush_cache c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) +__fp_lock_all c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__fp_unlock_all c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__funlockfile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +__gettzinfo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(gettzinfo.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) +__gxregs c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +__ieee754_log c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log10.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) +__ieee754_log10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_log10.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) +__ieee754_pow c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) +__ieee754_rem_pio2 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) +__ieee754_rem_pio2f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) +__ieee754_sqrt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) +__ieee754_sqrtf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) +__init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/ecrti.o + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +__intrstack_addr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) +__intrstack_end c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) +__irq_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__isIPL c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__issuecommand c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +__kernel_cos c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_cos.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) +__kernel_cosf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_cos.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) +__kernel_rem_pio2 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) +__kernel_rem_pio2f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) +__kernel_sin c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) +__kernel_sinf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) +__kernel_tanf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_tan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) +__lc_ctype c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) +__libc_create_hook c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__libc_delete_hook c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__libc_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__libc_lock_acquire c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) +__libc_lock_close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +__libc_lock_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) +__libc_lock_release c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(flock_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) +__libc_lock_try_acquire c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lock_supp.o) +__libc_start_hook c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__libc_wrapup c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +__locale_charset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) +__lwp_cond_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_evaluatemode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_heap_allocate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwp_heap_free c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwp_heap_getinfo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) +__lwp_heap_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) +__lwp_isr_in_progress c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwp_mqbox_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_mutex_flush c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) +__lwp_mutex_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_mutex_initialize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) +__lwp_mutex_seize_irq_blocking c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) +__lwp_mutex_surrender c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) +__lwp_objmgr_allocate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_objmgr_free c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_objmgr_get c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_objmgr_getisrdisable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) +__lwp_objmgr_getnoprotection c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_objmgr_initinfo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_objmgr_memsize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) +__lwp_priority_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_priority.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_queue_append c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwp_queue_extract c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) +__lwp_queue_get c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwp_queue_initialize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) +__lwp_queue_insert c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_queue.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwp_rotate_readyqueue c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_sema_flush c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) +__lwp_sema_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_sema_initialize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) +__lwp_sema_seize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) +__lwp_sema_surrender c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) +__lwp_stack_allocate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_stack_free c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_sysinit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_thr_libc_reent c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +__lwp_thread_changepriority c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_clearstate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_thread_close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_thread_closeall c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_thread_context c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_coreinit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_thread_currentid c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_delayended c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) +__lwp_thread_exists c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_exit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_thread_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_isalive c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_loadenv c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_thread_ready c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_thread_resume c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_setpriority c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_thread_setstate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_thread_settransient c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_thread_start c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_startmultitasking c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_thread_stopmultitasking c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +__lwp_thread_suspend c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_thread_yield c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__lwp_threadqueue_dequeue c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +__lwp_threadqueue_dequeuefifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_dequeuepriority c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_enqueue c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +__lwp_threadqueue_enqueuefifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_enqueuepriority c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_extract c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_extractfifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_extractpriority c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_extractproxy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +__lwp_threadqueue_first c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +__lwp_threadqueue_firstfifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_firstpriority c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) +__lwp_threadqueue_flush c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwp_threadqueue_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +__lwp_watchdog_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_wd_adjust c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) +__lwp_wd_insert c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_wd_remove c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwp_wd_tickle c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) +__lwp_wkspace_heapfree c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) +__lwp_wkspace_heapsize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) +__lwp_wkspace_heapused c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) +__lwp_wkspace_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__lwpmq_broadcast c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwpmq_close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +__lwpmq_flush c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwpmq_flush_support c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwpmq_flush_waitthreads c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwpmq_initialize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +__lwpmq_msg_insert c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +__lwpmq_seize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +__lwpmq_submit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) +__malloc_av_ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) +__malloc_current_mallinfo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) +__malloc_lock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) +__malloc_max_sbrked_mem c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) +__malloc_max_total_mem c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) +__malloc_sbrk_base c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) +__malloc_top_pad c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) +__malloc_trim_threshold c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) +__malloc_unlock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) +__mb_cur_max c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) +__mcmp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +__mdiff c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +__memlock_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__mlocale_changed c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) +__mprec_bigtens c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +__mprec_tens c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +__mprec_tinytens c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) +__nlocale_changed c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) +__realmode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__register_frame_info c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtbegin.o +__reset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system_asm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__sbss_start c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +__sclose c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__sdloader_boot c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__sfmoreglue c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__sfp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__sfp_lock_acquire c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) +__sfp_lock_release c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) +__sfvwrite c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) +__si_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__sigtramp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +__sigtramp_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +__sinit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +__sinit_lock_acquire c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__sinit_lock_release c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__smakebuf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) +__sram_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__sread c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__sseek c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__stack_addr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__stack_end c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +__strtok_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok.o) +__swbuf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) +__swrite c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +__swsetup c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +__systemcall_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__thread_dispatch c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__thread_dispatch_fp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) +__timesystem_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__tz_lock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) +__tz_unlock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzlock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) +__tzcalc_limits c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) +__udivdi3 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6\libgcc.a(_udivdi3.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +__wkspace_heap c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_stack.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) +_b2d c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) +_calloc_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(callocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(calloc.o) +_cleanup c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +_cleanup_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) +_close_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(closer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) +_context_switch_want c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) +_cpu_context_restore c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) +_cpu_context_restore_ex c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) +_cpu_context_restore_fp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +_cpu_context_save c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) +_cpu_context_save_ex c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) +_cpu_context_save_fp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +_cpu_context_switch c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +_cpu_context_switch_ex c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_handler.o) +_ctype_ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(ctype_.o) +_d2b c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_daylight c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzvars.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) +_dist_code c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +_dtoa_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +_exceptionhandlertable c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) +_exit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(abort.o) +_fclose_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) +_free_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) +_fstat_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fstatr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) +_fwalk c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) +_fwalk_reent c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fwalk.o) +_getpid_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +_global_impure_ptr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(impure.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) +_gx_dl_fifo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +_gx_saved_data c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +_hi0bits c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_i2b c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_impure_ptr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(impure.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wsetup.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcsrtombs.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(realloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(rand.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malign.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(errno.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(calloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +_init_signal c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +_init_signal_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +_kill_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +_length_code c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +_lo0bits c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) +_localeconv_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) +_lseek_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lseekr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) +_lshift c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_lwp_thr_ready c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +_malloc_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(callocr.o) +_malloc_trim_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) +_memalign_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malignr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malign.o) +_memset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +_mktm_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktm_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime_r.o) +_mprec_log10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) +_multadd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_multiply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_pow5mult c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) +_printf_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) +_prio_bitmap c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_priority.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +_prio_major_bitmap c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_priority.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +_putchar_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) +_puts_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) +_raise_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +_ratio c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) +_read_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(readr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) +_realloc_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(realloc.o) +_reclaim_reent c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +_restfpr_14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_14_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_15 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_15_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_16_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_17 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_17_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_18_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_19 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_19_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_20_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_21 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_21_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_22 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_22_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_23 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_23_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_24_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_25 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_25_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_26 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_26_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_27 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_27_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_28_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_29 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_29_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_30_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_31 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restfpr_31_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_14_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_15 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_15_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_16_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_17 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_17_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_18_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_19 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_19_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_20_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_21 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_21_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_22 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_22_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_23 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_23_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_24_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_25 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_25_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_26 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_26_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_27 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_27_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_28_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_29 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_29_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_30_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_31 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_restgpr_31_x c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_s2b c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) +_savefpr_14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_15 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_17 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_19 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_21 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_22 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_23 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_25 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_26 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_27 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_29 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savefpr_31 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_14 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_15 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_17 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_18 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_19 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_20 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_21 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_22 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_23 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_24 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_25 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_26 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_27 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_28 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_29 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_30 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_savegpr_31 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/crtsavres.o +_sbrk_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sbrkr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(freer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mallocr.o) +_setlocale_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) +_signal_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +_sprintf_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sprintf.o) +_start c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +_sys_state_curr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(sys_state.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_heap.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +_thr_allocated_fp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +_thr_executing c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_sema.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) +_thr_heir c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +_thr_idle c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +_thr_main c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +_thread_dispatch_disable_level c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(malloc_lock.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(mutex.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(semaphore.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_objmgr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(message.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(cond.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +_timezone c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzvars.o) +_tr_align c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +_tr_flush_block c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +_tr_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +_tr_stored_block c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +_tr_tally c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(trees.o) +_tzname c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(tzvars.o) +_ulp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) +_vfprintf_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) +_wcrtomb_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcsrtombs.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +_wcsrtombs_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcsrtombs.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +_wctomb_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) +_wd_sync_count c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) +_wd_sync_level c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) +_wd_ticks_queue c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +_wd_ticks_since_boot c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) +_wrapup_reent c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +_write_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(writer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(stdio.o) +abort c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(abort.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sbrk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +addr vdp.o + state.o +addr_latch vdp.o + state.o +adler32 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(adler32.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +adler32_combine c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(adler32.o) +aim_m68k system.o + state.o + genesis.o +aim_z80 system.o + state.o + genesis.o +alttiming system.o + menu.o + loadrom.o +audio_init system.o + menu.o + loadrom.o +audio_update system.o +autoload menu.o + loadrom.o +back_framewidth font.o + legal.o + filesel.o +backdrop font.o +basedir iso9660.o + filesel.o +bg_buf render.o +bg_list_index vdp.o + state.o + render.o +bg_name_dirty vdp.o + state.o + render.o +bg_name_list vdp.o + state.o + render.o +bg_pattern_cache vdp.o + render.o +bitmap ngc.o + vdp.o + system.o + state.o + render.o + input.o +blit_char font.o +blit_lookup font.o +blit_lookup_inv font.o +boost menu.o + system.o +border vdp.o + state.o + render.o +bufferptr state.o +c_decrementer_handler c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) +c_default_exceptionhandler c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) +c_guMtxConcat c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxCopy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxIdentity c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxInverse c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxReflect c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxRotAxisRad c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxRotRad c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxRotTrig c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxScale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxScaleApply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxTrans c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxTransApply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guMtxTranspose c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guQuatAdd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guQuatMultiply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guQuatSub c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guVecAdd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guVecCross c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guVecDotProduct c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guVecMultiply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guVecMultiplySR c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guVecNormalize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guVecScale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_guVecSub c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +c_irqdispatcher c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) +callback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +calloc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(calloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +card_addClusters c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_addDirEntry c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_addToOpenedFileList c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_allocBuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_allocCluster c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_checkPath c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_closeFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_convertStrToUni c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_uni.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_convertToFATName c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_convertUniToStr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_uni.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_createFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_deleteDirEntry c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_deleteFromOpenedList c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_doUnmount c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_ejectedCB c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +card_erasePartialBlock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_eraseSector c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +card_eraseSectors c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_eraseWholeBlock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_expandClusterSpace c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_fatUpdate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_findEntryInDirectory c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_freeBuffer c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_getDriveNo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_getFileSize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_getListNumDir c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_getLongName c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_getOpenedList c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_initBufferPool c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_buf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_initFAT c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_initFATDefault c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_initIO c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + diskio.o +card_initIODefault c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_insertedCB c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +card_openFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_postFAT c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_preFAT c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_preIO c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +card_prepareFileClose c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_readBlock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_readCID c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +card_readCSD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +card_readCluster c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_readDir c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_readFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_readFromDisk c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_readSector c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + diskio.o +card_readStat c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_readStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +card_registerCallback c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_removeFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_searchCluster c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_seekFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_setCluster c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_uniToUpper c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_uni.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_unmountFAT c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_updateFAT c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_writeBlock c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_writeCacheToDisk c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_writeCluster c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_writeFile c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +card_writeSMInfo c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_writeSector c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +card_writeToDisk c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +cart_rom rominfo.o + ggentry.o + filesel.o + ngc.o + loadrom.o + gcaram.o + ssf2tnc.o + sram.o + memvdp.o + membnk.o + mem68k.o + genesis.o +checksumok rominfo.o +cleanup_glue c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) +clipping menu.o +clock_gettime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) +close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(close.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(closer.o) +code vdp.o + state.o +col_mask_table vdp.o +color_update vdp.o + state.o + render.o +color_update_15 render.o +color_update_16 render.o + state.o +color_update_32 render.o +color_update_8 render.o +companyinfo rominfo.o +compress c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) +compress2 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) + mcard.o + state.o +compressBound c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +con_close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +con_open c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +con_read c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +con_write c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +configpadcount confjoy.o +console_font_8x16 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console_font.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +console_init c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + ngc.o +console_putc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +console_setcolor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +console_setpos c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) +copysign c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_copysign.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_scalbn.o) +copysignf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_copysign.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_scalbn.o) +core_context c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) +cosf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_cos.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +count_m68k system.o + vdp.o + state.o + genesis.o +count_z80 system.o + state.o + genesis.o +cpu_detect menu.o + loadrom.o +cpu_readmem16 memz80.o + z80.o +cpu_readport16 memz80.o + z80.o +cpu_writemem16 memz80.o + z80.o +cpu_writeport16 memz80.o + z80.o +cram vdp.o + state.o +crc32 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(crc32.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + menu.o + mcard.o + sram.o +crc32_combine c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(crc32.o) +current_pad input.o +cycle2hc32 vdp.o +cycle2hc40 vdp.o +database eeprom.o +dechandler_end c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) +dechandler_start c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(decrementer.o) +decode_genie ggentry.o +decode_ggcodes ggentry.o + loadrom.o +default_exceptionhandler_end c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +default_exceptionhandler_patch c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +default_exceptionhandler_start c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +deflate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) +deflateBound c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflateCopy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflateEnd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) +deflateInit2_ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflateInit_ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(compress.o) +deflateParams c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflatePrime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflateReset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflateSetDictionary c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflateSetHeader c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflateTune c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deflate_copyright c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +deinterleave_block loadrom.o +devoptab_list c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lseek.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(read.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(fstat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(close.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(write.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +diff_msec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +diff_nsec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) +diff_sec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) +diff_usec c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) +div c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(div.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) +dkpro legal.o +dkproraw legal.o +dkunpack legal.o +dma_copy vdp.o +dma_endCycles vdp.o + state.o +dma_fill vdp.o +dma_m68k system.o + vdp.o + state.o +dma_update vdp.o +dma_vbus vdp.o +dmafill vdp.o + state.o +dmarate_table vdp.o +dmatiming vdp.o + menu.o +domenu menu.o + confjoy.o +dotab_dvd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) +dotab_netfake c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) +dotab_sdcardfake c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) +dotab_sdcardio c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +dotab_stdin c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) +dotab_stdout c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(iosupp.o) +drawmenu menu.o +dvd dvd.o +dvd_close_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) +dvd_inquiry dvd.o + ngc.o +dvd_motor_off dvd.o + menu.o +dvd_open_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) +dvd_read dvd.o + iso9660.o + filesel.o + unzip.o +dvd_read_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) +dvd_seek_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) +dvd_stat_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) +dvd_write_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(dvd_supp.o) +editing ggentry.o +eeprom rominfo.o + eeprom.o +en0 ym2612.o +en1 ym2612.o +en2 ym2612.o +en3 ym2612.o +errno c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(readr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lseekr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fstatr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(closer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(writer.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sbrkr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reent.o) +error ngc.o + memz80.o + membnk.o + mem68k.o +exit c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +f filesel.o + unzip.o +fabs c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_fabs.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) +fabsf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_fabs.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_tan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(ef_rem_pio2.o) +fclose c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) +fflush c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fflush.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fclose.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wbuf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +fheight rominfo.o + menu.o + legal.o + ggentry.o + font.o + filesel.o +filelist iso9660.o + filesel.o +filemenu menu.o +finite c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_finite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) +floor c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_floor.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + fm.o +floorf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_floor.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) +fm_latch sound.o +fm_preamp menu.o + system.o +fm_read sound.o + memz80.o + mem68k.o +fm_reg sound.o + state.o +fm_reset sound.o + system.o + genesis.o +fm_restore sound.o + menu.o + state.o +fm_status sound.o + state.o +fm_timera_tab sound.o +fm_timerb_tab sound.o +fm_update_timers sound.o + system.o +fm_write sound.o + memz80.o + mem68k.o +fntDrawBox font.o +fntDrawBoxFilled font.o + ggentry.o +fntDrawHLine font.o +fntDrawVLine font.o +font_offset font.o +font_size ggentry.o + font.o + filesel.o +fpu_exception_handler c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +frame_end vdp.o + system.o + state.o +frameticker ngc.o +free c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + vfat.o + legal.o + fm.o + z80.o + render.o +fs filesel.o +fstat c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(fstat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fstatr.o) +g_CID c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +g_CSD c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +g_CardStatus c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +g_dCode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +g_mCode c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) +gamepad input.o +gamepad_raz input.o +gamepad_read input.o + mem68k.o + io.o +gamepad_reset input.o +gamepad_update input.o +gamepad_write input.o + mem68k.o + io.o +gcpadmap ngc.o + confjoy.o +gen_bank_w genesis.o + memz80.o + mem68k.o +gen_bmp ngc.o +gen_busack_r genesis.o + mem68k.o +gen_busreq_w genesis.o + membnk.o + mem68k.o +gen_init genesis.o + system.o +gen_reset genesis.o + system.o +gen_reset_w genesis.o + membnk.o + mem68k.o +gen_running system.o + memz80.o + membnk.o + mem68k.o + genesis.o +gen_shutdown genesis.o + system.o +genesis_set_region loadrom.o +genromsize rominfo.o + menu.o + mcard.o + filesel.o + ngc.o + loadrom.o + gcaram.o + sram.o + mem68k.o + genesis.o +get_crc_table c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(crc32.o) +get_hscroll render.o +getcompany rominfo.o +getpid c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(getpid.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) +getpvd iso9660.o + filesel.o +getrominfo rominfo.o + loadrom.o +gettick c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +gettime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_watchdog.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threadq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(si.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exi.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +ggcodes ggentry.o +gghpos ggentry.o +ggpatch ggentry.o +ggrow ggentry.o +ggvalidchars ggentry.o +gpback font.o +gppadmap ngc.o +guFrustum c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +guLightFrustum c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +guLightOrtho c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +guLightPerspective c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +guLookAt c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + ngc.o +guOrtho c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +guPerspective c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + ngc.o +guVecHalfAngle c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +h_counter vdp.o + system.o + state.o +haveSDdir filesel.o +havedir filesel.o +hc_latch vdp.o + state.o + input.o +hint_pending vdp.o + system.o + state.o + genesis.o +hq_fm menu.o + system.o +hscb vdp.o + state.o + render.o +icon mcard.o +im2_flag vdp.o + system.o + state.o + render.o +in0 ym2612.o +in1 ym2612.o +in2 ym2612.o +in3 ym2612.o +inflate c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(uncompr.o) + unzip.o +inflateCopy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +inflateEnd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(uncompr.o) + unzip.o +inflateGetHeader c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +inflateInit2_ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + unzip.o +inflateInit_ c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(uncompr.o) +inflatePrime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +inflateReset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +inflateSetDictionary c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +inflateSync c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +inflateSyncPoint c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +inflate_copyright c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) +inflate_fast c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inffast.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +inflate_table c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inftrees.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) +init_font font.o + ngc.o +input confjoy.o + ngc.o + loadrom.o + io.o + input.o +input_raz input.o + genesis.o +input_reset input.o + mem68k.o + io.o +input_update input.o + system.o +int_cnt ym2612.o +io_read io.o + memvdp.o + membnk.o + mem68k.o +io_reg state.o + io.o + input.o +io_reset io.o + system.o +io_write io.o + membnk.o + mem68k.o +irqhandler_end c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) +irqhandler_start c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) +irqtiming vdp.o + loadrom.o +isWII ngc.o + dvd.o +isatty c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(isatty.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(makebuf.o) +isinf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(s_isinf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +isnan c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_isnan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) +isnanf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_isnan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) +j_cart input.o + mem68k.o + io.o +kill c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(kill.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signalr.o) +lastbusack state.o + genesis.o +lastbusreqcnt system.o + state.o + genesis.o +legal legal.o + ngc.o +libc_globl_reent c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +libc_reentrant c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) +lightgun input.o +lightgun_read input.o + io.o +lightgun_reset input.o +lightgun_set input.o + ngc.o +lightgun_update input.o +lines_per_frame system.o +load_memrom loadrom.o +load_param state.o +loadmenu menu.o +loadsavemenu menu.o +localeconv c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +localtime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) +localtime_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lcltime.o) +log c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) + fm.o +log10 c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + ym2612.o +lseek c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(lseek.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(lseekr.o) +lut render.o +lut_base render.o +m68k_context_size m68kcpu.o +m68k_cycles_remaining m68kcpu.o + system.o +m68k_cycles_run m68kcpu.o + vdp.o + genesis.o +m68k_end_timeslice m68kcpu.o + mem68k.o +m68k_execute m68kcpu.o + system.o +m68k_freeze system.o + vdp.o +m68k_get_context m68kcpu.o +m68k_get_reg m68kcpu.o + state.o + mem68k.o +m68k_load_context m68kcpu.o +m68k_lockup_r_16 mem68k.o +m68k_lockup_r_8 mem68k.o +m68k_lockup_w_16 mem68k.o +m68k_lockup_w_8 mem68k.o +m68k_modify_timeslice m68kcpu.o +m68k_op_1010 m68kopac.o + m68kops.o +m68k_op_1111 m68kopac.o + m68kops.o +m68k_op_abcd_8_mm m68kopac.o + m68kops.o +m68k_op_abcd_8_mm_ax7 m68kopac.o + m68kops.o +m68k_op_abcd_8_mm_axy7 m68kopac.o + m68kops.o +m68k_op_abcd_8_mm_ay7 m68kopac.o + m68kops.o +m68k_op_abcd_8_rr m68kopac.o + m68kops.o +m68k_op_add_16_er_a m68kopac.o + m68kops.o +m68k_op_add_16_er_ai m68kopac.o + m68kops.o +m68k_op_add_16_er_al m68kopac.o + m68kops.o +m68k_op_add_16_er_aw m68kopac.o + m68kops.o +m68k_op_add_16_er_d m68kopac.o + m68kops.o +m68k_op_add_16_er_di m68kopac.o + m68kops.o +m68k_op_add_16_er_i m68kopac.o + m68kops.o +m68k_op_add_16_er_ix m68kopac.o + m68kops.o +m68k_op_add_16_er_pcdi m68kopac.o + m68kops.o +m68k_op_add_16_er_pcix m68kopac.o + m68kops.o +m68k_op_add_16_er_pd m68kopac.o + m68kops.o +m68k_op_add_16_er_pi m68kopac.o + m68kops.o +m68k_op_add_16_re_ai m68kopac.o + m68kops.o +m68k_op_add_16_re_al m68kopac.o + m68kops.o +m68k_op_add_16_re_aw m68kopac.o + m68kops.o +m68k_op_add_16_re_di m68kopac.o + m68kops.o +m68k_op_add_16_re_ix m68kopac.o + m68kops.o +m68k_op_add_16_re_pd m68kopac.o + m68kops.o +m68k_op_add_16_re_pi m68kopac.o + m68kops.o +m68k_op_add_32_er_a m68kopac.o + m68kops.o +m68k_op_add_32_er_ai m68kopac.o + m68kops.o +m68k_op_add_32_er_al m68kopac.o + m68kops.o +m68k_op_add_32_er_aw m68kopac.o + m68kops.o +m68k_op_add_32_er_d m68kopac.o + m68kops.o +m68k_op_add_32_er_di m68kopac.o + m68kops.o +m68k_op_add_32_er_i m68kopac.o + m68kops.o +m68k_op_add_32_er_ix m68kopac.o + m68kops.o +m68k_op_add_32_er_pcdi m68kopac.o + m68kops.o +m68k_op_add_32_er_pcix m68kopac.o + m68kops.o +m68k_op_add_32_er_pd m68kopac.o + m68kops.o +m68k_op_add_32_er_pi m68kopac.o + m68kops.o +m68k_op_add_32_re_ai m68kopac.o + m68kops.o +m68k_op_add_32_re_al m68kopac.o + m68kops.o +m68k_op_add_32_re_aw m68kopac.o + m68kops.o +m68k_op_add_32_re_di m68kopac.o + m68kops.o +m68k_op_add_32_re_ix m68kopac.o + m68kops.o +m68k_op_add_32_re_pd m68kopac.o + m68kops.o +m68k_op_add_32_re_pi m68kopac.o + m68kops.o +m68k_op_add_8_er_ai m68kopac.o + m68kops.o +m68k_op_add_8_er_al m68kopac.o + m68kops.o +m68k_op_add_8_er_aw m68kopac.o + m68kops.o +m68k_op_add_8_er_d m68kopac.o + m68kops.o +m68k_op_add_8_er_di m68kopac.o + m68kops.o +m68k_op_add_8_er_i m68kopac.o + m68kops.o +m68k_op_add_8_er_ix m68kopac.o + m68kops.o +m68k_op_add_8_er_pcdi m68kopac.o + m68kops.o +m68k_op_add_8_er_pcix m68kopac.o + m68kops.o +m68k_op_add_8_er_pd m68kopac.o + m68kops.o +m68k_op_add_8_er_pd7 m68kopac.o + m68kops.o +m68k_op_add_8_er_pi m68kopac.o + m68kops.o +m68k_op_add_8_er_pi7 m68kopac.o + m68kops.o +m68k_op_add_8_re_ai m68kopac.o + m68kops.o +m68k_op_add_8_re_al m68kopac.o + m68kops.o +m68k_op_add_8_re_aw m68kopac.o + m68kops.o +m68k_op_add_8_re_di m68kopac.o + m68kops.o +m68k_op_add_8_re_ix m68kopac.o + m68kops.o +m68k_op_add_8_re_pd m68kopac.o + m68kops.o +m68k_op_add_8_re_pd7 m68kopac.o + m68kops.o +m68k_op_add_8_re_pi m68kopac.o + m68kops.o +m68k_op_add_8_re_pi7 m68kopac.o + m68kops.o +m68k_op_adda_16_a m68kopac.o + m68kops.o +m68k_op_adda_16_ai m68kopac.o + m68kops.o +m68k_op_adda_16_al m68kopac.o + m68kops.o +m68k_op_adda_16_aw m68kopac.o + m68kops.o +m68k_op_adda_16_d m68kopac.o + m68kops.o +m68k_op_adda_16_di m68kopac.o + m68kops.o +m68k_op_adda_16_i m68kopac.o + m68kops.o +m68k_op_adda_16_ix m68kopac.o + m68kops.o +m68k_op_adda_16_pcdi m68kopac.o + m68kops.o +m68k_op_adda_16_pcix m68kopac.o + m68kops.o +m68k_op_adda_16_pd m68kopac.o + m68kops.o +m68k_op_adda_16_pi m68kopac.o + m68kops.o +m68k_op_adda_32_a m68kopac.o + m68kops.o +m68k_op_adda_32_ai m68kopac.o + m68kops.o +m68k_op_adda_32_al m68kopac.o + m68kops.o +m68k_op_adda_32_aw m68kopac.o + m68kops.o +m68k_op_adda_32_d m68kopac.o + m68kops.o +m68k_op_adda_32_di m68kopac.o + m68kops.o +m68k_op_adda_32_i m68kopac.o + m68kops.o +m68k_op_adda_32_ix m68kopac.o + m68kops.o +m68k_op_adda_32_pcdi m68kopac.o + m68kops.o +m68k_op_adda_32_pcix m68kopac.o + m68kops.o +m68k_op_adda_32_pd m68kopac.o + m68kops.o +m68k_op_adda_32_pi m68kopac.o + m68kops.o +m68k_op_addi_16_ai m68kopac.o + m68kops.o +m68k_op_addi_16_al m68kopac.o + m68kops.o +m68k_op_addi_16_aw m68kopac.o + m68kops.o +m68k_op_addi_16_d m68kopac.o + m68kops.o +m68k_op_addi_16_di m68kopac.o + m68kops.o +m68k_op_addi_16_ix m68kopac.o + m68kops.o +m68k_op_addi_16_pd m68kopac.o + m68kops.o +m68k_op_addi_16_pi m68kopac.o + m68kops.o +m68k_op_addi_32_ai m68kopac.o + m68kops.o +m68k_op_addi_32_al m68kopac.o + m68kops.o +m68k_op_addi_32_aw m68kopac.o + m68kops.o +m68k_op_addi_32_d m68kopac.o + m68kops.o +m68k_op_addi_32_di m68kopac.o + m68kops.o +m68k_op_addi_32_ix m68kopac.o + m68kops.o +m68k_op_addi_32_pd m68kopac.o + m68kops.o +m68k_op_addi_32_pi m68kopac.o + m68kops.o +m68k_op_addi_8_ai m68kopac.o + m68kops.o +m68k_op_addi_8_al m68kopac.o + m68kops.o +m68k_op_addi_8_aw m68kopac.o + m68kops.o +m68k_op_addi_8_d m68kopac.o + m68kops.o +m68k_op_addi_8_di m68kopac.o + m68kops.o +m68k_op_addi_8_ix m68kopac.o + m68kops.o +m68k_op_addi_8_pd m68kopac.o + m68kops.o +m68k_op_addi_8_pd7 m68kopac.o + m68kops.o +m68k_op_addi_8_pi m68kopac.o + m68kops.o +m68k_op_addi_8_pi7 m68kopac.o + m68kops.o +m68k_op_addq_16_a m68kopac.o + m68kops.o +m68k_op_addq_16_ai m68kopac.o + m68kops.o +m68k_op_addq_16_al m68kopac.o + m68kops.o +m68k_op_addq_16_aw m68kopac.o + m68kops.o +m68k_op_addq_16_d m68kopac.o + m68kops.o +m68k_op_addq_16_di m68kopac.o + m68kops.o +m68k_op_addq_16_ix m68kopac.o + m68kops.o +m68k_op_addq_16_pd m68kopac.o + m68kops.o +m68k_op_addq_16_pi m68kopac.o + m68kops.o +m68k_op_addq_32_a m68kopac.o + m68kops.o +m68k_op_addq_32_ai m68kopac.o + m68kops.o +m68k_op_addq_32_al m68kopac.o + m68kops.o +m68k_op_addq_32_aw m68kopac.o + m68kops.o +m68k_op_addq_32_d m68kopac.o + m68kops.o +m68k_op_addq_32_di m68kopac.o + m68kops.o +m68k_op_addq_32_ix m68kopac.o + m68kops.o +m68k_op_addq_32_pd m68kopac.o + m68kops.o +m68k_op_addq_32_pi m68kopac.o + m68kops.o +m68k_op_addq_8_ai m68kopac.o + m68kops.o +m68k_op_addq_8_al m68kopac.o + m68kops.o +m68k_op_addq_8_aw m68kopac.o + m68kops.o +m68k_op_addq_8_d m68kopac.o + m68kops.o +m68k_op_addq_8_di m68kopac.o + m68kops.o +m68k_op_addq_8_ix m68kopac.o + m68kops.o +m68k_op_addq_8_pd m68kopac.o + m68kops.o +m68k_op_addq_8_pd7 m68kopac.o + m68kops.o +m68k_op_addq_8_pi m68kopac.o + m68kops.o +m68k_op_addq_8_pi7 m68kopac.o + m68kops.o +m68k_op_addx_16_mm m68kopac.o + m68kops.o +m68k_op_addx_16_rr m68kopac.o + m68kops.o +m68k_op_addx_32_mm m68kopac.o + m68kops.o +m68k_op_addx_32_rr m68kopac.o + m68kops.o +m68k_op_addx_8_mm m68kopac.o + m68kops.o +m68k_op_addx_8_mm_ax7 m68kopac.o + m68kops.o +m68k_op_addx_8_mm_axy7 m68kopac.o + m68kops.o +m68k_op_addx_8_mm_ay7 m68kopac.o + m68kops.o +m68k_op_addx_8_rr m68kopac.o + m68kops.o +m68k_op_and_16_er_ai m68kopac.o + m68kops.o +m68k_op_and_16_er_al m68kopac.o + m68kops.o +m68k_op_and_16_er_aw m68kopac.o + m68kops.o +m68k_op_and_16_er_d m68kopac.o + m68kops.o +m68k_op_and_16_er_di m68kopac.o + m68kops.o +m68k_op_and_16_er_i m68kopac.o + m68kops.o +m68k_op_and_16_er_ix m68kopac.o + m68kops.o +m68k_op_and_16_er_pcdi m68kopac.o + m68kops.o +m68k_op_and_16_er_pcix m68kopac.o + m68kops.o +m68k_op_and_16_er_pd m68kopac.o + m68kops.o +m68k_op_and_16_er_pi m68kopac.o + m68kops.o +m68k_op_and_16_re_ai m68kopac.o + m68kops.o +m68k_op_and_16_re_al m68kopac.o + m68kops.o +m68k_op_and_16_re_aw m68kopac.o + m68kops.o +m68k_op_and_16_re_di m68kopac.o + m68kops.o +m68k_op_and_16_re_ix m68kopac.o + m68kops.o +m68k_op_and_16_re_pd m68kopac.o + m68kops.o +m68k_op_and_16_re_pi m68kopac.o + m68kops.o +m68k_op_and_32_er_ai m68kopac.o + m68kops.o +m68k_op_and_32_er_al m68kopac.o + m68kops.o +m68k_op_and_32_er_aw m68kopac.o + m68kops.o +m68k_op_and_32_er_d m68kopac.o + m68kops.o +m68k_op_and_32_er_di m68kopac.o + m68kops.o +m68k_op_and_32_er_i m68kopac.o + m68kops.o +m68k_op_and_32_er_ix m68kopac.o + m68kops.o +m68k_op_and_32_er_pcdi m68kopac.o + m68kops.o +m68k_op_and_32_er_pcix m68kopac.o + m68kops.o +m68k_op_and_32_er_pd m68kopac.o + m68kops.o +m68k_op_and_32_er_pi m68kopac.o + m68kops.o +m68k_op_and_32_re_ai m68kopac.o + m68kops.o +m68k_op_and_32_re_al m68kopac.o + m68kops.o +m68k_op_and_32_re_aw m68kopac.o + m68kops.o +m68k_op_and_32_re_di m68kopac.o + m68kops.o +m68k_op_and_32_re_ix m68kopac.o + m68kops.o +m68k_op_and_32_re_pd m68kopac.o + m68kops.o +m68k_op_and_32_re_pi m68kopac.o + m68kops.o +m68k_op_and_8_er_ai m68kopac.o + m68kops.o +m68k_op_and_8_er_al m68kopac.o + m68kops.o +m68k_op_and_8_er_aw m68kopac.o + m68kops.o +m68k_op_and_8_er_d m68kopac.o + m68kops.o +m68k_op_and_8_er_di m68kopac.o + m68kops.o +m68k_op_and_8_er_i m68kopac.o + m68kops.o +m68k_op_and_8_er_ix m68kopac.o + m68kops.o +m68k_op_and_8_er_pcdi m68kopac.o + m68kops.o +m68k_op_and_8_er_pcix m68kopac.o + m68kops.o +m68k_op_and_8_er_pd m68kopac.o + m68kops.o +m68k_op_and_8_er_pd7 m68kopac.o + m68kops.o +m68k_op_and_8_er_pi m68kopac.o + m68kops.o +m68k_op_and_8_er_pi7 m68kopac.o + m68kops.o +m68k_op_and_8_re_ai m68kopac.o + m68kops.o +m68k_op_and_8_re_al m68kopac.o + m68kops.o +m68k_op_and_8_re_aw m68kopac.o + m68kops.o +m68k_op_and_8_re_di m68kopac.o + m68kops.o +m68k_op_and_8_re_ix m68kopac.o + m68kops.o +m68k_op_and_8_re_pd m68kopac.o + m68kops.o +m68k_op_and_8_re_pd7 m68kopac.o + m68kops.o +m68k_op_and_8_re_pi m68kopac.o + m68kops.o +m68k_op_and_8_re_pi7 m68kopac.o + m68kops.o +m68k_op_andi_16_ai m68kopac.o + m68kops.o +m68k_op_andi_16_al m68kopac.o + m68kops.o +m68k_op_andi_16_aw m68kopac.o + m68kops.o +m68k_op_andi_16_d m68kopac.o + m68kops.o +m68k_op_andi_16_di m68kopac.o + m68kops.o +m68k_op_andi_16_ix m68kopac.o + m68kops.o +m68k_op_andi_16_pd m68kopac.o + m68kops.o +m68k_op_andi_16_pi m68kopac.o + m68kops.o +m68k_op_andi_16_toc m68kopac.o + m68kops.o +m68k_op_andi_16_tos m68kopac.o + m68kops.o +m68k_op_andi_32_ai m68kopac.o + m68kops.o +m68k_op_andi_32_al m68kopac.o + m68kops.o +m68k_op_andi_32_aw m68kopac.o + m68kops.o +m68k_op_andi_32_d m68kopac.o + m68kops.o +m68k_op_andi_32_di m68kopac.o + m68kops.o +m68k_op_andi_32_ix m68kopac.o + m68kops.o +m68k_op_andi_32_pd m68kopac.o + m68kops.o +m68k_op_andi_32_pi m68kopac.o + m68kops.o +m68k_op_andi_8_ai m68kopac.o + m68kops.o +m68k_op_andi_8_al m68kopac.o + m68kops.o +m68k_op_andi_8_aw m68kopac.o + m68kops.o +m68k_op_andi_8_d m68kopac.o + m68kops.o +m68k_op_andi_8_di m68kopac.o + m68kops.o +m68k_op_andi_8_ix m68kopac.o + m68kops.o +m68k_op_andi_8_pd m68kopac.o + m68kops.o +m68k_op_andi_8_pd7 m68kopac.o + m68kops.o +m68k_op_andi_8_pi m68kopac.o + m68kops.o +m68k_op_andi_8_pi7 m68kopac.o + m68kops.o +m68k_op_asl_16_ai m68kopac.o + m68kops.o +m68k_op_asl_16_al m68kopac.o + m68kops.o +m68k_op_asl_16_aw m68kopac.o + m68kops.o +m68k_op_asl_16_di m68kopac.o + m68kops.o +m68k_op_asl_16_ix m68kopac.o + m68kops.o +m68k_op_asl_16_pd m68kopac.o + m68kops.o +m68k_op_asl_16_pi m68kopac.o + m68kops.o +m68k_op_asl_16_r m68kopac.o + m68kops.o +m68k_op_asl_16_s m68kopac.o + m68kops.o +m68k_op_asl_32_r m68kopac.o + m68kops.o +m68k_op_asl_32_s m68kopac.o + m68kops.o +m68k_op_asl_8_r m68kopac.o + m68kops.o +m68k_op_asl_8_s m68kopac.o + m68kops.o +m68k_op_asr_16_ai m68kopac.o + m68kops.o +m68k_op_asr_16_al m68kopac.o + m68kops.o +m68k_op_asr_16_aw m68kopac.o + m68kops.o +m68k_op_asr_16_di m68kopac.o + m68kops.o +m68k_op_asr_16_ix m68kopac.o + m68kops.o +m68k_op_asr_16_pd m68kopac.o + m68kops.o +m68k_op_asr_16_pi m68kopac.o + m68kops.o +m68k_op_asr_16_r m68kopac.o + m68kops.o +m68k_op_asr_16_s m68kopac.o + m68kops.o +m68k_op_asr_32_r m68kopac.o + m68kops.o +m68k_op_asr_32_s m68kopac.o + m68kops.o +m68k_op_asr_8_r m68kopac.o + m68kops.o +m68k_op_asr_8_s m68kopac.o + m68kops.o +m68k_op_bcc_16 m68kopac.o + m68kops.o +m68k_op_bcc_32 m68kopac.o + m68kops.o +m68k_op_bcc_8 m68kopac.o + m68kops.o +m68k_op_bchg_32_r_d m68kopac.o + m68kops.o +m68k_op_bchg_32_s_d m68kopac.o + m68kops.o +m68k_op_bchg_8_r_ai m68kopac.o + m68kops.o +m68k_op_bchg_8_r_al m68kopac.o + m68kops.o +m68k_op_bchg_8_r_aw m68kopac.o + m68kops.o +m68k_op_bchg_8_r_di m68kopac.o + m68kops.o +m68k_op_bchg_8_r_ix m68kopac.o + m68kops.o +m68k_op_bchg_8_r_pd m68kopac.o + m68kops.o +m68k_op_bchg_8_r_pd7 m68kopac.o + m68kops.o +m68k_op_bchg_8_r_pi m68kopac.o + m68kops.o +m68k_op_bchg_8_r_pi7 m68kopac.o + m68kops.o +m68k_op_bchg_8_s_ai m68kopac.o + m68kops.o +m68k_op_bchg_8_s_al m68kopac.o + m68kops.o +m68k_op_bchg_8_s_aw m68kopac.o + m68kops.o +m68k_op_bchg_8_s_di m68kopac.o + m68kops.o +m68k_op_bchg_8_s_ix m68kopac.o + m68kops.o +m68k_op_bchg_8_s_pd m68kopac.o + m68kops.o +m68k_op_bchg_8_s_pd7 m68kopac.o + m68kops.o +m68k_op_bchg_8_s_pi m68kopac.o + m68kops.o +m68k_op_bchg_8_s_pi7 m68kopac.o + m68kops.o +m68k_op_bclr_32_r_d m68kopac.o + m68kops.o +m68k_op_bclr_32_s_d m68kopac.o + m68kops.o +m68k_op_bclr_8_r_ai m68kopac.o + m68kops.o +m68k_op_bclr_8_r_al m68kopac.o + m68kops.o +m68k_op_bclr_8_r_aw m68kopac.o + m68kops.o +m68k_op_bclr_8_r_di m68kopac.o + m68kops.o +m68k_op_bclr_8_r_ix m68kopac.o + m68kops.o +m68k_op_bclr_8_r_pd m68kopac.o + m68kops.o +m68k_op_bclr_8_r_pd7 m68kopac.o + m68kops.o +m68k_op_bclr_8_r_pi m68kopac.o + m68kops.o +m68k_op_bclr_8_r_pi7 m68kopac.o + m68kops.o +m68k_op_bclr_8_s_ai m68kopac.o + m68kops.o +m68k_op_bclr_8_s_al m68kopac.o + m68kops.o +m68k_op_bclr_8_s_aw m68kopac.o + m68kops.o +m68k_op_bclr_8_s_di m68kopac.o + m68kops.o +m68k_op_bclr_8_s_ix m68kopac.o + m68kops.o +m68k_op_bclr_8_s_pd m68kopac.o + m68kops.o +m68k_op_bclr_8_s_pd7 m68kopac.o + m68kops.o +m68k_op_bclr_8_s_pi m68kopac.o + m68kops.o +m68k_op_bclr_8_s_pi7 m68kopac.o + m68kops.o +m68k_op_bcs_16 m68kopac.o + m68kops.o +m68k_op_bcs_32 m68kopac.o + m68kops.o +m68k_op_bcs_8 m68kopac.o + m68kops.o +m68k_op_beq_16 m68kopac.o + m68kops.o +m68k_op_beq_32 m68kopac.o + m68kops.o +m68k_op_beq_8 m68kopac.o + m68kops.o +m68k_op_bfchg_32_ai m68kopac.o + m68kops.o +m68k_op_bfchg_32_al m68kopac.o + m68kops.o +m68k_op_bfchg_32_aw m68kopac.o + m68kops.o +m68k_op_bfchg_32_d m68kopac.o + m68kops.o +m68k_op_bfchg_32_di m68kopac.o + m68kops.o +m68k_op_bfchg_32_ix m68kopac.o + m68kops.o +m68k_op_bfclr_32_ai m68kopac.o + m68kops.o +m68k_op_bfclr_32_al m68kopac.o + m68kops.o +m68k_op_bfclr_32_aw m68kopac.o + m68kops.o +m68k_op_bfclr_32_d m68kopac.o + m68kops.o +m68k_op_bfclr_32_di m68kopac.o + m68kops.o +m68k_op_bfclr_32_ix m68kopac.o + m68kops.o +m68k_op_bfexts_32_ai m68kopac.o + m68kops.o +m68k_op_bfexts_32_al m68kopac.o + m68kops.o +m68k_op_bfexts_32_aw m68kopac.o + m68kops.o +m68k_op_bfexts_32_d m68kopac.o + m68kops.o +m68k_op_bfexts_32_di m68kopac.o + m68kops.o +m68k_op_bfexts_32_ix m68kopac.o + m68kops.o +m68k_op_bfexts_32_pcdi m68kopac.o + m68kops.o +m68k_op_bfexts_32_pcix m68kopac.o + m68kops.o +m68k_op_bfextu_32_ai m68kopac.o + m68kops.o +m68k_op_bfextu_32_al m68kopac.o + m68kops.o +m68k_op_bfextu_32_aw m68kopac.o + m68kops.o +m68k_op_bfextu_32_d m68kopac.o + m68kops.o +m68k_op_bfextu_32_di m68kopac.o + m68kops.o +m68k_op_bfextu_32_ix m68kopac.o + m68kops.o +m68k_op_bfextu_32_pcdi m68kopac.o + m68kops.o +m68k_op_bfextu_32_pcix m68kopac.o + m68kops.o +m68k_op_bfffo_32_ai m68kopac.o + m68kops.o +m68k_op_bfffo_32_al m68kopac.o + m68kops.o +m68k_op_bfffo_32_aw m68kopac.o + m68kops.o +m68k_op_bfffo_32_d m68kopac.o + m68kops.o +m68k_op_bfffo_32_di m68kopac.o + m68kops.o +m68k_op_bfffo_32_ix m68kopac.o + m68kops.o +m68k_op_bfffo_32_pcdi m68kopac.o + m68kops.o +m68k_op_bfffo_32_pcix m68kopac.o + m68kops.o +m68k_op_bfins_32_ai m68kopac.o + m68kops.o +m68k_op_bfins_32_al m68kopac.o + m68kops.o +m68k_op_bfins_32_aw m68kopac.o + m68kops.o +m68k_op_bfins_32_d m68kopac.o + m68kops.o +m68k_op_bfins_32_di m68kopac.o + m68kops.o +m68k_op_bfins_32_ix m68kopac.o + m68kops.o +m68k_op_bfset_32_ai m68kopac.o + m68kops.o +m68k_op_bfset_32_al m68kopac.o + m68kops.o +m68k_op_bfset_32_aw m68kopac.o + m68kops.o +m68k_op_bfset_32_d m68kopac.o + m68kops.o +m68k_op_bfset_32_di m68kopac.o + m68kops.o +m68k_op_bfset_32_ix m68kopac.o + m68kops.o +m68k_op_bftst_32_ai m68kopac.o + m68kops.o +m68k_op_bftst_32_al m68kopac.o + m68kops.o +m68k_op_bftst_32_aw m68kopac.o + m68kops.o +m68k_op_bftst_32_d m68kopac.o + m68kops.o +m68k_op_bftst_32_di m68kopac.o + m68kops.o +m68k_op_bftst_32_ix m68kopac.o + m68kops.o +m68k_op_bftst_32_pcdi m68kopac.o + m68kops.o +m68k_op_bftst_32_pcix m68kopac.o + m68kops.o +m68k_op_bge_16 m68kopac.o + m68kops.o +m68k_op_bge_32 m68kopac.o + m68kops.o +m68k_op_bge_8 m68kopac.o + m68kops.o +m68k_op_bgt_16 m68kopac.o + m68kops.o +m68k_op_bgt_32 m68kopac.o + m68kops.o +m68k_op_bgt_8 m68kopac.o + m68kops.o +m68k_op_bhi_16 m68kopac.o + m68kops.o +m68k_op_bhi_32 m68kopac.o + m68kops.o +m68k_op_bhi_8 m68kopac.o + m68kops.o +m68k_op_bkpt m68kopac.o + m68kops.o +m68k_op_ble_16 m68kopac.o + m68kops.o +m68k_op_ble_32 m68kopac.o + m68kops.o +m68k_op_ble_8 m68kopac.o + m68kops.o +m68k_op_bls_16 m68kopac.o + m68kops.o +m68k_op_bls_32 m68kopac.o + m68kops.o +m68k_op_bls_8 m68kopac.o + m68kops.o +m68k_op_blt_16 m68kopac.o + m68kops.o +m68k_op_blt_32 m68kopac.o + m68kops.o +m68k_op_blt_8 m68kopac.o + m68kops.o +m68k_op_bmi_16 m68kopac.o + m68kops.o +m68k_op_bmi_32 m68kopac.o + m68kops.o +m68k_op_bmi_8 m68kopac.o + m68kops.o +m68k_op_bne_16 m68kopac.o + m68kops.o +m68k_op_bne_32 m68kopac.o + m68kops.o +m68k_op_bne_8 m68kopac.o + m68kops.o +m68k_op_bpl_16 m68kopac.o + m68kops.o +m68k_op_bpl_32 m68kopac.o + m68kops.o +m68k_op_bpl_8 m68kopac.o + m68kops.o +m68k_op_bra_16 m68kopac.o + m68kops.o +m68k_op_bra_32 m68kopac.o + m68kops.o +m68k_op_bra_8 m68kopac.o + m68kops.o +m68k_op_bset_32_r_d m68kopac.o + m68kops.o +m68k_op_bset_32_s_d m68kopac.o + m68kops.o +m68k_op_bset_8_r_ai m68kopac.o + m68kops.o +m68k_op_bset_8_r_al m68kopac.o + m68kops.o +m68k_op_bset_8_r_aw m68kopac.o + m68kops.o +m68k_op_bset_8_r_di m68kopac.o + m68kops.o +m68k_op_bset_8_r_ix m68kopac.o + m68kops.o +m68k_op_bset_8_r_pd m68kopac.o + m68kops.o +m68k_op_bset_8_r_pd7 m68kopac.o + m68kops.o +m68k_op_bset_8_r_pi m68kopac.o + m68kops.o +m68k_op_bset_8_r_pi7 m68kopac.o + m68kops.o +m68k_op_bset_8_s_ai m68kopac.o + m68kops.o +m68k_op_bset_8_s_al m68kopac.o + m68kops.o +m68k_op_bset_8_s_aw m68kopac.o + m68kops.o +m68k_op_bset_8_s_di m68kopac.o + m68kops.o +m68k_op_bset_8_s_ix m68kopac.o + m68kops.o +m68k_op_bset_8_s_pd m68kopac.o + m68kops.o +m68k_op_bset_8_s_pd7 m68kopac.o + m68kops.o +m68k_op_bset_8_s_pi m68kopac.o + m68kops.o +m68k_op_bset_8_s_pi7 m68kopac.o + m68kops.o +m68k_op_bsr_16 m68kopac.o + m68kops.o +m68k_op_bsr_32 m68kopac.o + m68kops.o +m68k_op_bsr_8 m68kopac.o + m68kops.o +m68k_op_btst_32_r_d m68kopac.o + m68kops.o +m68k_op_btst_32_s_d m68kopac.o + m68kops.o +m68k_op_btst_8_r_ai m68kopac.o + m68kops.o +m68k_op_btst_8_r_al m68kopac.o + m68kops.o +m68k_op_btst_8_r_aw m68kopac.o + m68kops.o +m68k_op_btst_8_r_di m68kopac.o + m68kops.o +m68k_op_btst_8_r_i m68kopac.o + m68kops.o +m68k_op_btst_8_r_ix m68kopac.o + m68kops.o +m68k_op_btst_8_r_pcdi m68kopac.o + m68kops.o +m68k_op_btst_8_r_pcix m68kopac.o + m68kops.o +m68k_op_btst_8_r_pd m68kopac.o + m68kops.o +m68k_op_btst_8_r_pd7 m68kopac.o + m68kops.o +m68k_op_btst_8_r_pi m68kopac.o + m68kops.o +m68k_op_btst_8_r_pi7 m68kopac.o + m68kops.o +m68k_op_btst_8_s_ai m68kopac.o + m68kops.o +m68k_op_btst_8_s_al m68kopac.o + m68kops.o +m68k_op_btst_8_s_aw m68kopac.o + m68kops.o +m68k_op_btst_8_s_di m68kopac.o + m68kops.o +m68k_op_btst_8_s_ix m68kopac.o + m68kops.o +m68k_op_btst_8_s_pcdi m68kopac.o + m68kops.o +m68k_op_btst_8_s_pcix m68kopac.o + m68kops.o +m68k_op_btst_8_s_pd m68kopac.o + m68kops.o +m68k_op_btst_8_s_pd7 m68kopac.o + m68kops.o +m68k_op_btst_8_s_pi m68kopac.o + m68kops.o +m68k_op_btst_8_s_pi7 m68kopac.o + m68kops.o +m68k_op_bvc_16 m68kopac.o + m68kops.o +m68k_op_bvc_32 m68kopac.o + m68kops.o +m68k_op_bvc_8 m68kopac.o + m68kops.o +m68k_op_bvs_16 m68kopac.o + m68kops.o +m68k_op_bvs_32 m68kopac.o + m68kops.o +m68k_op_bvs_8 m68kopac.o + m68kops.o +m68k_op_callm_32_ai m68kopac.o + m68kops.o +m68k_op_callm_32_al m68kopac.o + m68kops.o +m68k_op_callm_32_aw m68kopac.o + m68kops.o +m68k_op_callm_32_di m68kopac.o + m68kops.o +m68k_op_callm_32_ix m68kopac.o + m68kops.o +m68k_op_callm_32_pcdi m68kopac.o + m68kops.o +m68k_op_callm_32_pcix m68kopac.o + m68kops.o +m68k_op_cas2_16 m68kopac.o + m68kops.o +m68k_op_cas2_32 m68kopac.o + m68kops.o +m68k_op_cas_16_ai m68kopac.o + m68kops.o +m68k_op_cas_16_al m68kopac.o + m68kops.o +m68k_op_cas_16_aw m68kopac.o + m68kops.o +m68k_op_cas_16_di m68kopac.o + m68kops.o +m68k_op_cas_16_ix m68kopac.o + m68kops.o +m68k_op_cas_16_pd m68kopac.o + m68kops.o +m68k_op_cas_16_pi m68kopac.o + m68kops.o +m68k_op_cas_32_ai m68kopac.o + m68kops.o +m68k_op_cas_32_al m68kopac.o + m68kops.o +m68k_op_cas_32_aw m68kopac.o + m68kops.o +m68k_op_cas_32_di m68kopac.o + m68kops.o +m68k_op_cas_32_ix m68kopac.o + m68kops.o +m68k_op_cas_32_pd m68kopac.o + m68kops.o +m68k_op_cas_32_pi m68kopac.o + m68kops.o +m68k_op_cas_8_ai m68kopac.o + m68kops.o +m68k_op_cas_8_al m68kopac.o + m68kops.o +m68k_op_cas_8_aw m68kopac.o + m68kops.o +m68k_op_cas_8_di m68kopac.o + m68kops.o +m68k_op_cas_8_ix m68kopac.o + m68kops.o +m68k_op_cas_8_pd m68kopac.o + m68kops.o +m68k_op_cas_8_pd7 m68kopac.o + m68kops.o +m68k_op_cas_8_pi m68kopac.o + m68kops.o +m68k_op_cas_8_pi7 m68kopac.o + m68kops.o +m68k_op_chk2cmp2_16_ai m68kopac.o + m68kops.o +m68k_op_chk2cmp2_16_al m68kopac.o + m68kops.o +m68k_op_chk2cmp2_16_aw m68kopac.o + m68kops.o +m68k_op_chk2cmp2_16_di m68kopac.o + m68kops.o +m68k_op_chk2cmp2_16_ix m68kopac.o + m68kops.o +m68k_op_chk2cmp2_16_pcdi m68kopac.o + m68kops.o +m68k_op_chk2cmp2_16_pcix m68kopac.o + m68kops.o +m68k_op_chk2cmp2_32_ai m68kopac.o + m68kops.o +m68k_op_chk2cmp2_32_al m68kopac.o + m68kops.o +m68k_op_chk2cmp2_32_aw m68kopac.o + m68kops.o +m68k_op_chk2cmp2_32_di m68kopac.o + m68kops.o +m68k_op_chk2cmp2_32_ix m68kopac.o + m68kops.o +m68k_op_chk2cmp2_32_pcdi m68kopac.o + m68kops.o +m68k_op_chk2cmp2_32_pcix m68kopac.o + m68kops.o +m68k_op_chk2cmp2_8_ai m68kopac.o + m68kops.o +m68k_op_chk2cmp2_8_al m68kopac.o + m68kops.o +m68k_op_chk2cmp2_8_aw m68kopac.o + m68kops.o +m68k_op_chk2cmp2_8_di m68kopac.o + m68kops.o +m68k_op_chk2cmp2_8_ix m68kopac.o + m68kops.o +m68k_op_chk2cmp2_8_pcdi m68kopac.o + m68kops.o +m68k_op_chk2cmp2_8_pcix m68kopac.o + m68kops.o +m68k_op_chk_16_ai m68kopac.o + m68kops.o +m68k_op_chk_16_al m68kopac.o + m68kops.o +m68k_op_chk_16_aw m68kopac.o + m68kops.o +m68k_op_chk_16_d m68kopac.o + m68kops.o +m68k_op_chk_16_di m68kopac.o + m68kops.o +m68k_op_chk_16_i m68kopac.o + m68kops.o +m68k_op_chk_16_ix m68kopac.o + m68kops.o +m68k_op_chk_16_pcdi m68kopac.o + m68kops.o +m68k_op_chk_16_pcix m68kopac.o + m68kops.o +m68k_op_chk_16_pd m68kopac.o + m68kops.o +m68k_op_chk_16_pi m68kopac.o + m68kops.o +m68k_op_chk_32_ai m68kopac.o + m68kops.o +m68k_op_chk_32_al m68kopac.o + m68kops.o +m68k_op_chk_32_aw m68kopac.o + m68kops.o +m68k_op_chk_32_d m68kopac.o + m68kops.o +m68k_op_chk_32_di m68kopac.o + m68kops.o +m68k_op_chk_32_i m68kopac.o + m68kops.o +m68k_op_chk_32_ix m68kopac.o + m68kops.o +m68k_op_chk_32_pcdi m68kopac.o + m68kops.o +m68k_op_chk_32_pcix m68kopac.o + m68kops.o +m68k_op_chk_32_pd m68kopac.o + m68kops.o +m68k_op_chk_32_pi m68kopac.o + m68kops.o +m68k_op_clr_16_ai m68kopac.o + m68kops.o +m68k_op_clr_16_al m68kopac.o + m68kops.o +m68k_op_clr_16_aw m68kopac.o + m68kops.o +m68k_op_clr_16_d m68kopac.o + m68kops.o +m68k_op_clr_16_di m68kopac.o + m68kops.o +m68k_op_clr_16_ix m68kopac.o + m68kops.o +m68k_op_clr_16_pd m68kopac.o + m68kops.o +m68k_op_clr_16_pi m68kopac.o + m68kops.o +m68k_op_clr_32_ai m68kopac.o + m68kops.o +m68k_op_clr_32_al m68kopac.o + m68kops.o +m68k_op_clr_32_aw m68kopac.o + m68kops.o +m68k_op_clr_32_d m68kopac.o + m68kops.o +m68k_op_clr_32_di m68kopac.o + m68kops.o +m68k_op_clr_32_ix m68kopac.o + m68kops.o +m68k_op_clr_32_pd m68kopac.o + m68kops.o +m68k_op_clr_32_pi m68kopac.o + m68kops.o +m68k_op_clr_8_ai m68kopac.o + m68kops.o +m68k_op_clr_8_al m68kopac.o + m68kops.o +m68k_op_clr_8_aw m68kopac.o + m68kops.o +m68k_op_clr_8_d m68kopac.o + m68kops.o +m68k_op_clr_8_di m68kopac.o + m68kops.o +m68k_op_clr_8_ix m68kopac.o + m68kops.o +m68k_op_clr_8_pd m68kopac.o + m68kops.o +m68k_op_clr_8_pd7 m68kopac.o + m68kops.o +m68k_op_clr_8_pi m68kopac.o + m68kops.o +m68k_op_clr_8_pi7 m68kopac.o + m68kops.o +m68k_op_cmp_16_a m68kopac.o + m68kops.o +m68k_op_cmp_16_ai m68kopac.o + m68kops.o +m68k_op_cmp_16_al m68kopac.o + m68kops.o +m68k_op_cmp_16_aw m68kopac.o + m68kops.o +m68k_op_cmp_16_d m68kopac.o + m68kops.o +m68k_op_cmp_16_di m68kopac.o + m68kops.o +m68k_op_cmp_16_i m68kopac.o + m68kops.o +m68k_op_cmp_16_ix m68kopac.o + m68kops.o +m68k_op_cmp_16_pcdi m68kopac.o + m68kops.o +m68k_op_cmp_16_pcix m68kopac.o + m68kops.o +m68k_op_cmp_16_pd m68kopac.o + m68kops.o +m68k_op_cmp_16_pi m68kopac.o + m68kops.o +m68k_op_cmp_32_a m68kopac.o + m68kops.o +m68k_op_cmp_32_ai m68kopac.o + m68kops.o +m68k_op_cmp_32_al m68kopac.o + m68kops.o +m68k_op_cmp_32_aw m68kopac.o + m68kops.o +m68k_op_cmp_32_d m68kopac.o + m68kops.o +m68k_op_cmp_32_di m68kopac.o + m68kops.o +m68k_op_cmp_32_i m68kopac.o + m68kops.o +m68k_op_cmp_32_ix m68kopac.o + m68kops.o +m68k_op_cmp_32_pcdi m68kopac.o + m68kops.o +m68k_op_cmp_32_pcix m68kopac.o + m68kops.o +m68k_op_cmp_32_pd m68kopac.o + m68kops.o +m68k_op_cmp_32_pi m68kopac.o + m68kops.o +m68k_op_cmp_8_ai m68kopac.o + m68kops.o +m68k_op_cmp_8_al m68kopac.o + m68kops.o +m68k_op_cmp_8_aw m68kopac.o + m68kops.o +m68k_op_cmp_8_d m68kopac.o + m68kops.o +m68k_op_cmp_8_di m68kopac.o + m68kops.o +m68k_op_cmp_8_i m68kopac.o + m68kops.o +m68k_op_cmp_8_ix m68kopac.o + m68kops.o +m68k_op_cmp_8_pcdi m68kopac.o + m68kops.o +m68k_op_cmp_8_pcix m68kopac.o + m68kops.o +m68k_op_cmp_8_pd m68kopac.o + m68kops.o +m68k_op_cmp_8_pd7 m68kopac.o + m68kops.o +m68k_op_cmp_8_pi m68kopac.o + m68kops.o +m68k_op_cmp_8_pi7 m68kopac.o + m68kops.o +m68k_op_cmpa_16_a m68kopac.o + m68kops.o +m68k_op_cmpa_16_ai m68kopac.o + m68kops.o +m68k_op_cmpa_16_al m68kopac.o + m68kops.o +m68k_op_cmpa_16_aw m68kopac.o + m68kops.o +m68k_op_cmpa_16_d m68kopac.o + m68kops.o +m68k_op_cmpa_16_di m68kopac.o + m68kops.o +m68k_op_cmpa_16_i m68kopac.o + m68kops.o +m68k_op_cmpa_16_ix m68kopac.o + m68kops.o +m68k_op_cmpa_16_pcdi m68kopac.o + m68kops.o +m68k_op_cmpa_16_pcix m68kopac.o + m68kops.o +m68k_op_cmpa_16_pd m68kopac.o + m68kops.o +m68k_op_cmpa_16_pi m68kopac.o + m68kops.o +m68k_op_cmpa_32_a m68kopac.o + m68kops.o +m68k_op_cmpa_32_ai m68kopac.o + m68kops.o +m68k_op_cmpa_32_al m68kopac.o + m68kops.o +m68k_op_cmpa_32_aw m68kopac.o + m68kops.o +m68k_op_cmpa_32_d m68kopac.o + m68kops.o +m68k_op_cmpa_32_di m68kopac.o + m68kops.o +m68k_op_cmpa_32_i m68kopac.o + m68kops.o +m68k_op_cmpa_32_ix m68kopac.o + m68kops.o +m68k_op_cmpa_32_pcdi m68kopac.o + m68kops.o +m68k_op_cmpa_32_pcix m68kopac.o + m68kops.o +m68k_op_cmpa_32_pd m68kopac.o + m68kops.o +m68k_op_cmpa_32_pi m68kopac.o + m68kops.o +m68k_op_cmpi_16_ai m68kopac.o + m68kops.o +m68k_op_cmpi_16_al m68kopac.o + m68kops.o +m68k_op_cmpi_16_aw m68kopac.o + m68kops.o +m68k_op_cmpi_16_d m68kopac.o + m68kops.o +m68k_op_cmpi_16_di m68kopac.o + m68kops.o +m68k_op_cmpi_16_ix m68kopac.o + m68kops.o +m68k_op_cmpi_16_pcdi m68kopac.o + m68kops.o +m68k_op_cmpi_16_pcix m68kopac.o + m68kops.o +m68k_op_cmpi_16_pd m68kopac.o + m68kops.o +m68k_op_cmpi_16_pi m68kopac.o + m68kops.o +m68k_op_cmpi_32_ai m68kopac.o + m68kops.o +m68k_op_cmpi_32_al m68kopac.o + m68kops.o +m68k_op_cmpi_32_aw m68kopac.o + m68kops.o +m68k_op_cmpi_32_d m68kopac.o + m68kops.o +m68k_op_cmpi_32_di m68kopac.o + m68kops.o +m68k_op_cmpi_32_ix m68kopac.o + m68kops.o +m68k_op_cmpi_32_pcdi m68kopac.o + m68kops.o +m68k_op_cmpi_32_pcix m68kopac.o + m68kops.o +m68k_op_cmpi_32_pd m68kopac.o + m68kops.o +m68k_op_cmpi_32_pi m68kopac.o + m68kops.o +m68k_op_cmpi_8_ai m68kopac.o + m68kops.o +m68k_op_cmpi_8_al m68kopac.o + m68kops.o +m68k_op_cmpi_8_aw m68kopac.o + m68kops.o +m68k_op_cmpi_8_d m68kopac.o + m68kops.o +m68k_op_cmpi_8_di m68kopac.o + m68kops.o +m68k_op_cmpi_8_ix m68kopac.o + m68kops.o +m68k_op_cmpi_8_pcdi m68kopac.o + m68kops.o +m68k_op_cmpi_8_pcix m68kopac.o + m68kops.o +m68k_op_cmpi_8_pd m68kopac.o + m68kops.o +m68k_op_cmpi_8_pd7 m68kopac.o + m68kops.o +m68k_op_cmpi_8_pi m68kopac.o + m68kops.o +m68k_op_cmpi_8_pi7 m68kopac.o + m68kops.o +m68k_op_cmpm_16 m68kopac.o + m68kops.o +m68k_op_cmpm_32 m68kopac.o + m68kops.o +m68k_op_cmpm_8 m68kopac.o + m68kops.o +m68k_op_cmpm_8_ax7 m68kopac.o + m68kops.o +m68k_op_cmpm_8_axy7 m68kopac.o + m68kops.o +m68k_op_cmpm_8_ay7 m68kopac.o + m68kops.o +m68k_op_cpbcc_32 m68kopac.o + m68kops.o +m68k_op_cpdbcc_32 m68kopac.o + m68kops.o +m68k_op_cpgen_32 m68kopac.o + m68kops.o +m68k_op_cpscc_32 m68kopac.o + m68kops.o +m68k_op_cptrapcc_32 m68kopac.o + m68kops.o +m68k_op_dbcc_16 m68kopdm.o + m68kops.o +m68k_op_dbcs_16 m68kopdm.o + m68kops.o +m68k_op_dbeq_16 m68kopdm.o + m68kops.o +m68k_op_dbf_16 m68kopdm.o + m68kops.o +m68k_op_dbge_16 m68kopdm.o + m68kops.o +m68k_op_dbgt_16 m68kopdm.o + m68kops.o +m68k_op_dbhi_16 m68kopdm.o + m68kops.o +m68k_op_dble_16 m68kopdm.o + m68kops.o +m68k_op_dbls_16 m68kopdm.o + m68kops.o +m68k_op_dblt_16 m68kopdm.o + m68kops.o +m68k_op_dbmi_16 m68kopdm.o + m68kops.o +m68k_op_dbne_16 m68kopdm.o + m68kops.o +m68k_op_dbpl_16 m68kopdm.o + m68kops.o +m68k_op_dbt_16 m68kopdm.o + m68kops.o +m68k_op_dbvc_16 m68kopdm.o + m68kops.o +m68k_op_dbvs_16 m68kopdm.o + m68kops.o +m68k_op_divl_32_ai m68kopdm.o + m68kops.o +m68k_op_divl_32_al m68kopdm.o + m68kops.o +m68k_op_divl_32_aw m68kopdm.o + m68kops.o +m68k_op_divl_32_d m68kopdm.o + m68kops.o +m68k_op_divl_32_di m68kopdm.o + m68kops.o +m68k_op_divl_32_i m68kopdm.o + m68kops.o +m68k_op_divl_32_ix m68kopdm.o + m68kops.o +m68k_op_divl_32_pcdi m68kopdm.o + m68kops.o +m68k_op_divl_32_pcix m68kopdm.o + m68kops.o +m68k_op_divl_32_pd m68kopdm.o + m68kops.o +m68k_op_divl_32_pi m68kopdm.o + m68kops.o +m68k_op_divs_16_ai m68kopdm.o + m68kops.o +m68k_op_divs_16_al m68kopdm.o + m68kops.o +m68k_op_divs_16_aw m68kopdm.o + m68kops.o +m68k_op_divs_16_d m68kopdm.o + m68kops.o +m68k_op_divs_16_di m68kopdm.o + m68kops.o +m68k_op_divs_16_i m68kopdm.o + m68kops.o +m68k_op_divs_16_ix m68kopdm.o + m68kops.o +m68k_op_divs_16_pcdi m68kopdm.o + m68kops.o +m68k_op_divs_16_pcix m68kopdm.o + m68kops.o +m68k_op_divs_16_pd m68kopdm.o + m68kops.o +m68k_op_divs_16_pi m68kopdm.o + m68kops.o +m68k_op_divu_16_ai m68kopdm.o + m68kops.o +m68k_op_divu_16_al m68kopdm.o + m68kops.o +m68k_op_divu_16_aw m68kopdm.o + m68kops.o +m68k_op_divu_16_d m68kopdm.o + m68kops.o +m68k_op_divu_16_di m68kopdm.o + m68kops.o +m68k_op_divu_16_i m68kopdm.o + m68kops.o +m68k_op_divu_16_ix m68kopdm.o + m68kops.o +m68k_op_divu_16_pcdi m68kopdm.o + m68kops.o +m68k_op_divu_16_pcix m68kopdm.o + m68kops.o +m68k_op_divu_16_pd m68kopdm.o + m68kops.o +m68k_op_divu_16_pi m68kopdm.o + m68kops.o +m68k_op_eor_16_ai m68kopdm.o + m68kops.o +m68k_op_eor_16_al m68kopdm.o + m68kops.o +m68k_op_eor_16_aw m68kopdm.o + m68kops.o +m68k_op_eor_16_d m68kopdm.o + m68kops.o +m68k_op_eor_16_di m68kopdm.o + m68kops.o +m68k_op_eor_16_ix m68kopdm.o + m68kops.o +m68k_op_eor_16_pd m68kopdm.o + m68kops.o +m68k_op_eor_16_pi m68kopdm.o + m68kops.o +m68k_op_eor_32_ai m68kopdm.o + m68kops.o +m68k_op_eor_32_al m68kopdm.o + m68kops.o +m68k_op_eor_32_aw m68kopdm.o + m68kops.o +m68k_op_eor_32_d m68kopdm.o + m68kops.o +m68k_op_eor_32_di m68kopdm.o + m68kops.o +m68k_op_eor_32_ix m68kopdm.o + m68kops.o +m68k_op_eor_32_pd m68kopdm.o + m68kops.o +m68k_op_eor_32_pi m68kopdm.o + m68kops.o +m68k_op_eor_8_ai m68kopdm.o + m68kops.o +m68k_op_eor_8_al m68kopdm.o + m68kops.o +m68k_op_eor_8_aw m68kopdm.o + m68kops.o +m68k_op_eor_8_d m68kopdm.o + m68kops.o +m68k_op_eor_8_di m68kopdm.o + m68kops.o +m68k_op_eor_8_ix m68kopdm.o + m68kops.o +m68k_op_eor_8_pd m68kopdm.o + m68kops.o +m68k_op_eor_8_pd7 m68kopdm.o + m68kops.o +m68k_op_eor_8_pi m68kopdm.o + m68kops.o +m68k_op_eor_8_pi7 m68kopdm.o + m68kops.o +m68k_op_eori_16_ai m68kopdm.o + m68kops.o +m68k_op_eori_16_al m68kopdm.o + m68kops.o +m68k_op_eori_16_aw m68kopdm.o + m68kops.o +m68k_op_eori_16_d m68kopdm.o + m68kops.o +m68k_op_eori_16_di m68kopdm.o + m68kops.o +m68k_op_eori_16_ix m68kopdm.o + m68kops.o +m68k_op_eori_16_pd m68kopdm.o + m68kops.o +m68k_op_eori_16_pi m68kopdm.o + m68kops.o +m68k_op_eori_16_toc m68kopdm.o + m68kops.o +m68k_op_eori_16_tos m68kopdm.o + m68kops.o +m68k_op_eori_32_ai m68kopdm.o + m68kops.o +m68k_op_eori_32_al m68kopdm.o + m68kops.o +m68k_op_eori_32_aw m68kopdm.o + m68kops.o +m68k_op_eori_32_d m68kopdm.o + m68kops.o +m68k_op_eori_32_di m68kopdm.o + m68kops.o +m68k_op_eori_32_ix m68kopdm.o + m68kops.o +m68k_op_eori_32_pd m68kopdm.o + m68kops.o +m68k_op_eori_32_pi m68kopdm.o + m68kops.o +m68k_op_eori_8_ai m68kopdm.o + m68kops.o +m68k_op_eori_8_al m68kopdm.o + m68kops.o +m68k_op_eori_8_aw m68kopdm.o + m68kops.o +m68k_op_eori_8_d m68kopdm.o + m68kops.o +m68k_op_eori_8_di m68kopdm.o + m68kops.o +m68k_op_eori_8_ix m68kopdm.o + m68kops.o +m68k_op_eori_8_pd m68kopdm.o + m68kops.o +m68k_op_eori_8_pd7 m68kopdm.o + m68kops.o +m68k_op_eori_8_pi m68kopdm.o + m68kops.o +m68k_op_eori_8_pi7 m68kopdm.o + m68kops.o +m68k_op_exg_32_aa m68kopdm.o + m68kops.o +m68k_op_exg_32_da m68kopdm.o + m68kops.o +m68k_op_exg_32_dd m68kopdm.o + m68kops.o +m68k_op_ext_16 m68kopdm.o + m68kops.o +m68k_op_ext_32 m68kopdm.o + m68kops.o +m68k_op_extb_32 m68kopdm.o + m68kops.o +m68k_op_illegal m68kopdm.o + m68kops.o +m68k_op_jmp_32_ai m68kopdm.o + m68kops.o +m68k_op_jmp_32_al m68kopdm.o + m68kops.o +m68k_op_jmp_32_aw m68kopdm.o + m68kops.o +m68k_op_jmp_32_di m68kopdm.o + m68kops.o +m68k_op_jmp_32_ix m68kopdm.o + m68kops.o +m68k_op_jmp_32_pcdi m68kopdm.o + m68kops.o +m68k_op_jmp_32_pcix m68kopdm.o + m68kops.o +m68k_op_jsr_32_ai m68kopdm.o + m68kops.o +m68k_op_jsr_32_al m68kopdm.o + m68kops.o +m68k_op_jsr_32_aw m68kopdm.o + m68kops.o +m68k_op_jsr_32_di m68kopdm.o + m68kops.o +m68k_op_jsr_32_ix m68kopdm.o + m68kops.o +m68k_op_jsr_32_pcdi m68kopdm.o + m68kops.o +m68k_op_jsr_32_pcix m68kopdm.o + m68kops.o +m68k_op_lea_32_ai m68kopdm.o + m68kops.o +m68k_op_lea_32_al m68kopdm.o + m68kops.o +m68k_op_lea_32_aw m68kopdm.o + m68kops.o +m68k_op_lea_32_di m68kopdm.o + m68kops.o +m68k_op_lea_32_ix m68kopdm.o + m68kops.o +m68k_op_lea_32_pcdi m68kopdm.o + m68kops.o +m68k_op_lea_32_pcix m68kopdm.o + m68kops.o +m68k_op_link_16 m68kopdm.o + m68kops.o +m68k_op_link_16_a7 m68kopdm.o + m68kops.o +m68k_op_link_32 m68kopdm.o + m68kops.o +m68k_op_link_32_a7 m68kopdm.o + m68kops.o +m68k_op_lsl_16_ai m68kopdm.o + m68kops.o +m68k_op_lsl_16_al m68kopdm.o + m68kops.o +m68k_op_lsl_16_aw m68kopdm.o + m68kops.o +m68k_op_lsl_16_di m68kopdm.o + m68kops.o +m68k_op_lsl_16_ix m68kopdm.o + m68kops.o +m68k_op_lsl_16_pd m68kopdm.o + m68kops.o +m68k_op_lsl_16_pi m68kopdm.o + m68kops.o +m68k_op_lsl_16_r m68kopdm.o + m68kops.o +m68k_op_lsl_16_s m68kopdm.o + m68kops.o +m68k_op_lsl_32_r m68kopdm.o + m68kops.o +m68k_op_lsl_32_s m68kopdm.o + m68kops.o +m68k_op_lsl_8_r m68kopdm.o + m68kops.o +m68k_op_lsl_8_s m68kopdm.o + m68kops.o +m68k_op_lsr_16_ai m68kopdm.o + m68kops.o +m68k_op_lsr_16_al m68kopdm.o + m68kops.o +m68k_op_lsr_16_aw m68kopdm.o + m68kops.o +m68k_op_lsr_16_di m68kopdm.o + m68kops.o +m68k_op_lsr_16_ix m68kopdm.o + m68kops.o +m68k_op_lsr_16_pd m68kopdm.o + m68kops.o +m68k_op_lsr_16_pi m68kopdm.o + m68kops.o +m68k_op_lsr_16_r m68kopdm.o + m68kops.o +m68k_op_lsr_16_s m68kopdm.o + m68kops.o +m68k_op_lsr_32_r m68kopdm.o + m68kops.o +m68k_op_lsr_32_s m68kopdm.o + m68kops.o +m68k_op_lsr_8_r m68kopdm.o + m68kops.o +m68k_op_lsr_8_s m68kopdm.o + m68kops.o +m68k_op_move_16_ai_a m68kopdm.o + m68kops.o +m68k_op_move_16_ai_ai m68kopdm.o + m68kops.o +m68k_op_move_16_ai_al m68kopdm.o + m68kops.o +m68k_op_move_16_ai_aw m68kopdm.o + m68kops.o +m68k_op_move_16_ai_d m68kopdm.o + m68kops.o +m68k_op_move_16_ai_di m68kopdm.o + m68kops.o +m68k_op_move_16_ai_i m68kopdm.o + m68kops.o +m68k_op_move_16_ai_ix m68kopdm.o + m68kops.o +m68k_op_move_16_ai_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_ai_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_ai_pd m68kopdm.o + m68kops.o +m68k_op_move_16_ai_pi m68kopdm.o + m68kops.o +m68k_op_move_16_al_a m68kopdm.o + m68kops.o +m68k_op_move_16_al_ai m68kopdm.o + m68kops.o +m68k_op_move_16_al_al m68kopdm.o + m68kops.o +m68k_op_move_16_al_aw m68kopdm.o + m68kops.o +m68k_op_move_16_al_d m68kopdm.o + m68kops.o +m68k_op_move_16_al_di m68kopdm.o + m68kops.o +m68k_op_move_16_al_i m68kopdm.o + m68kops.o +m68k_op_move_16_al_ix m68kopdm.o + m68kops.o +m68k_op_move_16_al_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_al_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_al_pd m68kopdm.o + m68kops.o +m68k_op_move_16_al_pi m68kopdm.o + m68kops.o +m68k_op_move_16_aw_a m68kopdm.o + m68kops.o +m68k_op_move_16_aw_ai m68kopdm.o + m68kops.o +m68k_op_move_16_aw_al m68kopdm.o + m68kops.o +m68k_op_move_16_aw_aw m68kopdm.o + m68kops.o +m68k_op_move_16_aw_d m68kopdm.o + m68kops.o +m68k_op_move_16_aw_di m68kopdm.o + m68kops.o +m68k_op_move_16_aw_i m68kopdm.o + m68kops.o +m68k_op_move_16_aw_ix m68kopdm.o + m68kops.o +m68k_op_move_16_aw_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_aw_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_aw_pd m68kopdm.o + m68kops.o +m68k_op_move_16_aw_pi m68kopdm.o + m68kops.o +m68k_op_move_16_d_a m68kopdm.o + m68kops.o +m68k_op_move_16_d_ai m68kopdm.o + m68kops.o +m68k_op_move_16_d_al m68kopdm.o + m68kops.o +m68k_op_move_16_d_aw m68kopdm.o + m68kops.o +m68k_op_move_16_d_d m68kopdm.o + m68kops.o +m68k_op_move_16_d_di m68kopdm.o + m68kops.o +m68k_op_move_16_d_i m68kopdm.o + m68kops.o +m68k_op_move_16_d_ix m68kopdm.o + m68kops.o +m68k_op_move_16_d_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_d_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_d_pd m68kopdm.o + m68kops.o +m68k_op_move_16_d_pi m68kopdm.o + m68kops.o +m68k_op_move_16_di_a m68kopdm.o + m68kops.o +m68k_op_move_16_di_ai m68kopdm.o + m68kops.o +m68k_op_move_16_di_al m68kopdm.o + m68kops.o +m68k_op_move_16_di_aw m68kopdm.o + m68kops.o +m68k_op_move_16_di_d m68kopdm.o + m68kops.o +m68k_op_move_16_di_di m68kopdm.o + m68kops.o +m68k_op_move_16_di_i m68kopdm.o + m68kops.o +m68k_op_move_16_di_ix m68kopdm.o + m68kops.o +m68k_op_move_16_di_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_di_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_di_pd m68kopdm.o + m68kops.o +m68k_op_move_16_di_pi m68kopdm.o + m68kops.o +m68k_op_move_16_frc_ai m68kopdm.o + m68kops.o +m68k_op_move_16_frc_al m68kopdm.o + m68kops.o +m68k_op_move_16_frc_aw m68kopdm.o + m68kops.o +m68k_op_move_16_frc_d m68kopdm.o + m68kops.o +m68k_op_move_16_frc_di m68kopdm.o + m68kops.o +m68k_op_move_16_frc_ix m68kopdm.o + m68kops.o +m68k_op_move_16_frc_pd m68kopdm.o + m68kops.o +m68k_op_move_16_frc_pi m68kopdm.o + m68kops.o +m68k_op_move_16_frs_ai m68kopdm.o + m68kops.o +m68k_op_move_16_frs_al m68kopdm.o + m68kops.o +m68k_op_move_16_frs_aw m68kopdm.o + m68kops.o +m68k_op_move_16_frs_d m68kopdm.o + m68kops.o +m68k_op_move_16_frs_di m68kopdm.o + m68kops.o +m68k_op_move_16_frs_ix m68kopdm.o + m68kops.o +m68k_op_move_16_frs_pd m68kopdm.o + m68kops.o +m68k_op_move_16_frs_pi m68kopdm.o + m68kops.o +m68k_op_move_16_ix_a m68kopdm.o + m68kops.o +m68k_op_move_16_ix_ai m68kopdm.o + m68kops.o +m68k_op_move_16_ix_al m68kopdm.o + m68kops.o +m68k_op_move_16_ix_aw m68kopdm.o + m68kops.o +m68k_op_move_16_ix_d m68kopdm.o + m68kops.o +m68k_op_move_16_ix_di m68kopdm.o + m68kops.o +m68k_op_move_16_ix_i m68kopdm.o + m68kops.o +m68k_op_move_16_ix_ix m68kopdm.o + m68kops.o +m68k_op_move_16_ix_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_ix_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_ix_pd m68kopdm.o + m68kops.o +m68k_op_move_16_ix_pi m68kopdm.o + m68kops.o +m68k_op_move_16_pd_a m68kopdm.o + m68kops.o +m68k_op_move_16_pd_ai m68kopdm.o + m68kops.o +m68k_op_move_16_pd_al m68kopdm.o + m68kops.o +m68k_op_move_16_pd_aw m68kopdm.o + m68kops.o +m68k_op_move_16_pd_d m68kopdm.o + m68kops.o +m68k_op_move_16_pd_di m68kopdm.o + m68kops.o +m68k_op_move_16_pd_i m68kopdm.o + m68kops.o +m68k_op_move_16_pd_ix m68kopdm.o + m68kops.o +m68k_op_move_16_pd_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_pd_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_pd_pd m68kopdm.o + m68kops.o +m68k_op_move_16_pd_pi m68kopdm.o + m68kops.o +m68k_op_move_16_pi_a m68kopdm.o + m68kops.o +m68k_op_move_16_pi_ai m68kopdm.o + m68kops.o +m68k_op_move_16_pi_al m68kopdm.o + m68kops.o +m68k_op_move_16_pi_aw m68kopdm.o + m68kops.o +m68k_op_move_16_pi_d m68kopdm.o + m68kops.o +m68k_op_move_16_pi_di m68kopdm.o + m68kops.o +m68k_op_move_16_pi_i m68kopdm.o + m68kops.o +m68k_op_move_16_pi_ix m68kopdm.o + m68kops.o +m68k_op_move_16_pi_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_pi_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_pi_pd m68kopdm.o + m68kops.o +m68k_op_move_16_pi_pi m68kopdm.o + m68kops.o +m68k_op_move_16_toc_ai m68kopdm.o + m68kops.o +m68k_op_move_16_toc_al m68kopdm.o + m68kops.o +m68k_op_move_16_toc_aw m68kopdm.o + m68kops.o +m68k_op_move_16_toc_d m68kopdm.o + m68kops.o +m68k_op_move_16_toc_di m68kopdm.o + m68kops.o +m68k_op_move_16_toc_i m68kopdm.o + m68kops.o +m68k_op_move_16_toc_ix m68kopdm.o + m68kops.o +m68k_op_move_16_toc_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_toc_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_toc_pd m68kopdm.o + m68kops.o +m68k_op_move_16_toc_pi m68kopdm.o + m68kops.o +m68k_op_move_16_tos_ai m68kopdm.o + m68kops.o +m68k_op_move_16_tos_al m68kopdm.o + m68kops.o +m68k_op_move_16_tos_aw m68kopdm.o + m68kops.o +m68k_op_move_16_tos_d m68kopdm.o + m68kops.o +m68k_op_move_16_tos_di m68kopdm.o + m68kops.o +m68k_op_move_16_tos_i m68kopdm.o + m68kops.o +m68k_op_move_16_tos_ix m68kopdm.o + m68kops.o +m68k_op_move_16_tos_pcdi m68kopdm.o + m68kops.o +m68k_op_move_16_tos_pcix m68kopdm.o + m68kops.o +m68k_op_move_16_tos_pd m68kopdm.o + m68kops.o +m68k_op_move_16_tos_pi m68kopdm.o + m68kops.o +m68k_op_move_32_ai_a m68kopdm.o + m68kops.o +m68k_op_move_32_ai_ai m68kopdm.o + m68kops.o +m68k_op_move_32_ai_al m68kopdm.o + m68kops.o +m68k_op_move_32_ai_aw m68kopdm.o + m68kops.o +m68k_op_move_32_ai_d m68kopdm.o + m68kops.o +m68k_op_move_32_ai_di m68kopdm.o + m68kops.o +m68k_op_move_32_ai_i m68kopdm.o + m68kops.o +m68k_op_move_32_ai_ix m68kopdm.o + m68kops.o +m68k_op_move_32_ai_pcdi m68kopdm.o + m68kops.o +m68k_op_move_32_ai_pcix m68kopdm.o + m68kops.o +m68k_op_move_32_ai_pd m68kopdm.o + m68kops.o +m68k_op_move_32_ai_pi m68kopdm.o + m68kops.o +m68k_op_move_32_al_a m68kopdm.o + m68kops.o +m68k_op_move_32_al_ai m68kopdm.o + m68kops.o +m68k_op_move_32_al_al m68kopdm.o + m68kops.o +m68k_op_move_32_al_aw m68kopdm.o + m68kops.o +m68k_op_move_32_al_d m68kopdm.o + m68kops.o +m68k_op_move_32_al_di m68kopdm.o + m68kops.o +m68k_op_move_32_al_i m68kopdm.o + m68kops.o +m68k_op_move_32_al_ix m68kopdm.o + m68kops.o +m68k_op_move_32_al_pcdi m68kopdm.o + m68kops.o +m68k_op_move_32_al_pcix m68kopdm.o + m68kops.o +m68k_op_move_32_al_pd m68kopdm.o + m68kops.o +m68k_op_move_32_al_pi m68kopdm.o + m68kops.o +m68k_op_move_32_aw_a m68kopdm.o + m68kops.o +m68k_op_move_32_aw_ai m68kopdm.o + m68kops.o +m68k_op_move_32_aw_al m68kopdm.o + m68kops.o +m68k_op_move_32_aw_aw m68kopdm.o + m68kops.o +m68k_op_move_32_aw_d m68kopdm.o + m68kops.o +m68k_op_move_32_aw_di m68kopdm.o + m68kops.o +m68k_op_move_32_aw_i m68kopdm.o + m68kops.o +m68k_op_move_32_aw_ix m68kopdm.o + m68kops.o +m68k_op_move_32_aw_pcdi m68kopdm.o + m68kops.o +m68k_op_move_32_aw_pcix m68kopdm.o + m68kops.o +m68k_op_move_32_aw_pd m68kopdm.o + m68kops.o +m68k_op_move_32_aw_pi m68kopdm.o + m68kops.o +m68k_op_move_32_d_a m68kopdm.o + m68kops.o +m68k_op_move_32_d_ai m68kopdm.o + m68kops.o +m68k_op_move_32_d_al m68kopdm.o + m68kops.o +m68k_op_move_32_d_aw m68kopdm.o + m68kops.o +m68k_op_move_32_d_d m68kopdm.o + m68kops.o +m68k_op_move_32_d_di m68kopdm.o + m68kops.o +m68k_op_move_32_d_i m68kopdm.o + m68kops.o +m68k_op_move_32_d_ix m68kopdm.o + m68kops.o +m68k_op_move_32_d_pcdi m68kopdm.o + m68kops.o +m68k_op_move_32_d_pcix m68kopdm.o + m68kops.o +m68k_op_move_32_d_pd m68kopdm.o + m68kops.o +m68k_op_move_32_d_pi m68kopdm.o + m68kops.o +m68k_op_move_32_di_a m68kopdm.o + m68kops.o +m68k_op_move_32_di_ai m68kopdm.o + m68kops.o +m68k_op_move_32_di_al m68kopdm.o + m68kops.o +m68k_op_move_32_di_aw m68kopdm.o + m68kops.o +m68k_op_move_32_di_d m68kopdm.o + m68kops.o +m68k_op_move_32_di_di m68kopdm.o + m68kops.o +m68k_op_move_32_di_i m68kopdm.o + m68kops.o +m68k_op_move_32_di_ix m68kopdm.o + m68kops.o +m68k_op_move_32_di_pcdi m68kopdm.o + m68kops.o +m68k_op_move_32_di_pcix m68kopdm.o + m68kops.o +m68k_op_move_32_di_pd m68kopdm.o + m68kops.o +m68k_op_move_32_di_pi m68kopdm.o + m68kops.o +m68k_op_move_32_fru m68kopdm.o + m68kops.o +m68k_op_move_32_ix_a m68kopdm.o + m68kops.o +m68k_op_move_32_ix_ai m68kopdm.o + m68kops.o +m68k_op_move_32_ix_al m68kopdm.o + m68kops.o +m68k_op_move_32_ix_aw m68kopdm.o + m68kops.o +m68k_op_move_32_ix_d m68kopdm.o + m68kops.o +m68k_op_move_32_ix_di m68kopdm.o + m68kops.o +m68k_op_move_32_ix_i m68kopdm.o + m68kops.o +m68k_op_move_32_ix_ix m68kopdm.o + m68kops.o +m68k_op_move_32_ix_pcdi m68kopdm.o + m68kops.o +m68k_op_move_32_ix_pcix m68kopdm.o + m68kops.o +m68k_op_move_32_ix_pd m68kopdm.o + m68kops.o +m68k_op_move_32_ix_pi m68kopdm.o + m68kops.o +m68k_op_move_32_pd_a m68kopdm.o + m68kops.o +m68k_op_move_32_pd_ai m68kopdm.o + m68kops.o +m68k_op_move_32_pd_al m68kopdm.o + m68kops.o +m68k_op_move_32_pd_aw m68kopdm.o + m68kops.o +m68k_op_move_32_pd_d m68kopdm.o + m68kops.o +m68k_op_move_32_pd_di m68kopdm.o + m68kops.o +m68k_op_move_32_pd_i m68kopdm.o + m68kops.o +m68k_op_move_32_pd_ix m68kopdm.o + m68kops.o +m68k_op_move_32_pd_pcdi m68kopdm.o + m68kops.o +m68k_op_move_32_pd_pcix m68kopdm.o + m68kops.o +m68k_op_move_32_pd_pd m68kopdm.o + m68kops.o +m68k_op_move_32_pd_pi m68kopdm.o + m68kops.o +m68k_op_move_32_pi_a m68kopdm.o + m68kops.o +m68k_op_move_32_pi_ai m68kopdm.o + m68kops.o +m68k_op_move_32_pi_al m68kopdm.o + m68kops.o +m68k_op_move_32_pi_aw m68kopdm.o + m68kops.o +m68k_op_move_32_pi_d m68kopdm.o + m68kops.o +m68k_op_move_32_pi_di m68kopdm.o + m68kops.o +m68k_op_move_32_pi_i m68kopdm.o + m68kops.o +m68k_op_move_32_pi_ix m68kopdm.o + m68kops.o +m68k_op_move_32_pi_pcdi m68kopdm.o + m68kops.o +m68k_op_move_32_pi_pcix m68kopdm.o + m68kops.o +m68k_op_move_32_pi_pd m68kopdm.o + m68kops.o +m68k_op_move_32_pi_pi m68kopdm.o + m68kops.o +m68k_op_move_32_tou m68kopdm.o + m68kops.o +m68k_op_move_8_ai_ai m68kopdm.o + m68kops.o +m68k_op_move_8_ai_al m68kopdm.o + m68kops.o +m68k_op_move_8_ai_aw m68kopdm.o + m68kops.o +m68k_op_move_8_ai_d m68kopdm.o + m68kops.o +m68k_op_move_8_ai_di m68kopdm.o + m68kops.o +m68k_op_move_8_ai_i m68kopdm.o + m68kops.o +m68k_op_move_8_ai_ix m68kopdm.o + m68kops.o +m68k_op_move_8_ai_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_ai_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_ai_pd m68kopdm.o + m68kops.o +m68k_op_move_8_ai_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_ai_pi m68kopdm.o + m68kops.o +m68k_op_move_8_ai_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_al_ai m68kopdm.o + m68kops.o +m68k_op_move_8_al_al m68kopdm.o + m68kops.o +m68k_op_move_8_al_aw m68kopdm.o + m68kops.o +m68k_op_move_8_al_d m68kopdm.o + m68kops.o +m68k_op_move_8_al_di m68kopdm.o + m68kops.o +m68k_op_move_8_al_i m68kopdm.o + m68kops.o +m68k_op_move_8_al_ix m68kopdm.o + m68kops.o +m68k_op_move_8_al_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_al_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_al_pd m68kopdm.o + m68kops.o +m68k_op_move_8_al_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_al_pi m68kopdm.o + m68kops.o +m68k_op_move_8_al_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_aw_ai m68kopdm.o + m68kops.o +m68k_op_move_8_aw_al m68kopdm.o + m68kops.o +m68k_op_move_8_aw_aw m68kopdm.o + m68kops.o +m68k_op_move_8_aw_d m68kopdm.o + m68kops.o +m68k_op_move_8_aw_di m68kopdm.o + m68kops.o +m68k_op_move_8_aw_i m68kopdm.o + m68kops.o +m68k_op_move_8_aw_ix m68kopdm.o + m68kops.o +m68k_op_move_8_aw_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_aw_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_aw_pd m68kopdm.o + m68kops.o +m68k_op_move_8_aw_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_aw_pi m68kopdm.o + m68kops.o +m68k_op_move_8_aw_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_d_ai m68kopdm.o + m68kops.o +m68k_op_move_8_d_al m68kopdm.o + m68kops.o +m68k_op_move_8_d_aw m68kopdm.o + m68kops.o +m68k_op_move_8_d_d m68kopdm.o + m68kops.o +m68k_op_move_8_d_di m68kopdm.o + m68kops.o +m68k_op_move_8_d_i m68kopdm.o + m68kops.o +m68k_op_move_8_d_ix m68kopdm.o + m68kops.o +m68k_op_move_8_d_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_d_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_d_pd m68kopdm.o + m68kops.o +m68k_op_move_8_d_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_d_pi m68kopdm.o + m68kops.o +m68k_op_move_8_d_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_di_ai m68kopdm.o + m68kops.o +m68k_op_move_8_di_al m68kopdm.o + m68kops.o +m68k_op_move_8_di_aw m68kopdm.o + m68kops.o +m68k_op_move_8_di_d m68kopdm.o + m68kops.o +m68k_op_move_8_di_di m68kopdm.o + m68kops.o +m68k_op_move_8_di_i m68kopdm.o + m68kops.o +m68k_op_move_8_di_ix m68kopdm.o + m68kops.o +m68k_op_move_8_di_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_di_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_di_pd m68kopdm.o + m68kops.o +m68k_op_move_8_di_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_di_pi m68kopdm.o + m68kops.o +m68k_op_move_8_di_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_ix_ai m68kopdm.o + m68kops.o +m68k_op_move_8_ix_al m68kopdm.o + m68kops.o +m68k_op_move_8_ix_aw m68kopdm.o + m68kops.o +m68k_op_move_8_ix_d m68kopdm.o + m68kops.o +m68k_op_move_8_ix_di m68kopdm.o + m68kops.o +m68k_op_move_8_ix_i m68kopdm.o + m68kops.o +m68k_op_move_8_ix_ix m68kopdm.o + m68kops.o +m68k_op_move_8_ix_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_ix_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_ix_pd m68kopdm.o + m68kops.o +m68k_op_move_8_ix_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_ix_pi m68kopdm.o + m68kops.o +m68k_op_move_8_ix_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_ai m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_al m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_aw m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_d m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_di m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_i m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_ix m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_pd m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_pi m68kopdm.o + m68kops.o +m68k_op_move_8_pd7_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_pd_ai m68kopdm.o + m68kops.o +m68k_op_move_8_pd_al m68kopdm.o + m68kops.o +m68k_op_move_8_pd_aw m68kopdm.o + m68kops.o +m68k_op_move_8_pd_d m68kopdm.o + m68kops.o +m68k_op_move_8_pd_di m68kopdm.o + m68kops.o +m68k_op_move_8_pd_i m68kopdm.o + m68kops.o +m68k_op_move_8_pd_ix m68kopdm.o + m68kops.o +m68k_op_move_8_pd_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_pd_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_pd_pd m68kopdm.o + m68kops.o +m68k_op_move_8_pd_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_pd_pi m68kopdm.o + m68kops.o +m68k_op_move_8_pd_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_ai m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_al m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_aw m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_d m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_di m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_i m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_ix m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_pd m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_pi m68kopdm.o + m68kops.o +m68k_op_move_8_pi7_pi7 m68kopdm.o + m68kops.o +m68k_op_move_8_pi_ai m68kopdm.o + m68kops.o +m68k_op_move_8_pi_al m68kopdm.o + m68kops.o +m68k_op_move_8_pi_aw m68kopdm.o + m68kops.o +m68k_op_move_8_pi_d m68kopdm.o + m68kops.o +m68k_op_move_8_pi_di m68kopdm.o + m68kops.o +m68k_op_move_8_pi_i m68kopdm.o + m68kops.o +m68k_op_move_8_pi_ix m68kopdm.o + m68kops.o +m68k_op_move_8_pi_pcdi m68kopdm.o + m68kops.o +m68k_op_move_8_pi_pcix m68kopdm.o + m68kops.o +m68k_op_move_8_pi_pd m68kopdm.o + m68kops.o +m68k_op_move_8_pi_pd7 m68kopdm.o + m68kops.o +m68k_op_move_8_pi_pi m68kopdm.o + m68kops.o +m68k_op_move_8_pi_pi7 m68kopdm.o + m68kops.o +m68k_op_movea_16_a m68kopdm.o + m68kops.o +m68k_op_movea_16_ai m68kopdm.o + m68kops.o +m68k_op_movea_16_al m68kopdm.o + m68kops.o +m68k_op_movea_16_aw m68kopdm.o + m68kops.o +m68k_op_movea_16_d m68kopdm.o + m68kops.o +m68k_op_movea_16_di m68kopdm.o + m68kops.o +m68k_op_movea_16_i m68kopdm.o + m68kops.o +m68k_op_movea_16_ix m68kopdm.o + m68kops.o +m68k_op_movea_16_pcdi m68kopdm.o + m68kops.o +m68k_op_movea_16_pcix m68kopdm.o + m68kops.o +m68k_op_movea_16_pd m68kopdm.o + m68kops.o +m68k_op_movea_16_pi m68kopdm.o + m68kops.o +m68k_op_movea_32_a m68kopdm.o + m68kops.o +m68k_op_movea_32_ai m68kopdm.o + m68kops.o +m68k_op_movea_32_al m68kopdm.o + m68kops.o +m68k_op_movea_32_aw m68kopdm.o + m68kops.o +m68k_op_movea_32_d m68kopdm.o + m68kops.o +m68k_op_movea_32_di m68kopdm.o + m68kops.o +m68k_op_movea_32_i m68kopdm.o + m68kops.o +m68k_op_movea_32_ix m68kopdm.o + m68kops.o +m68k_op_movea_32_pcdi m68kopdm.o + m68kops.o +m68k_op_movea_32_pcix m68kopdm.o + m68kops.o +m68k_op_movea_32_pd m68kopdm.o + m68kops.o +m68k_op_movea_32_pi m68kopdm.o + m68kops.o +m68k_op_movec_32_cr m68kopdm.o + m68kops.o +m68k_op_movec_32_rc m68kopdm.o + m68kops.o +m68k_op_movem_16_er_ai m68kopdm.o + m68kops.o +m68k_op_movem_16_er_al m68kopdm.o + m68kops.o +m68k_op_movem_16_er_aw m68kopdm.o + m68kops.o +m68k_op_movem_16_er_di m68kopdm.o + m68kops.o +m68k_op_movem_16_er_ix m68kopdm.o + m68kops.o +m68k_op_movem_16_er_pcdi m68kopdm.o + m68kops.o +m68k_op_movem_16_er_pcix m68kopdm.o + m68kops.o +m68k_op_movem_16_er_pi m68kopdm.o + m68kops.o +m68k_op_movem_16_re_ai m68kopdm.o + m68kops.o +m68k_op_movem_16_re_al m68kopdm.o + m68kops.o +m68k_op_movem_16_re_aw m68kopdm.o + m68kops.o +m68k_op_movem_16_re_di m68kopdm.o + m68kops.o +m68k_op_movem_16_re_ix m68kopdm.o + m68kops.o +m68k_op_movem_16_re_pd m68kopdm.o + m68kops.o +m68k_op_movem_32_er_ai m68kopdm.o + m68kops.o +m68k_op_movem_32_er_al m68kopdm.o + m68kops.o +m68k_op_movem_32_er_aw m68kopdm.o + m68kops.o +m68k_op_movem_32_er_di m68kopdm.o + m68kops.o +m68k_op_movem_32_er_ix m68kopdm.o + m68kops.o +m68k_op_movem_32_er_pcdi m68kopdm.o + m68kops.o +m68k_op_movem_32_er_pcix m68kopdm.o + m68kops.o +m68k_op_movem_32_er_pi m68kopdm.o + m68kops.o +m68k_op_movem_32_re_ai m68kopdm.o + m68kops.o +m68k_op_movem_32_re_al m68kopdm.o + m68kops.o +m68k_op_movem_32_re_aw m68kopdm.o + m68kops.o +m68k_op_movem_32_re_di m68kopdm.o + m68kops.o +m68k_op_movem_32_re_ix m68kopdm.o + m68kops.o +m68k_op_movem_32_re_pd m68kopdm.o + m68kops.o +m68k_op_movep_16_er m68kopdm.o + m68kops.o +m68k_op_movep_16_re m68kopdm.o + m68kops.o +m68k_op_movep_32_er m68kopdm.o + m68kops.o +m68k_op_movep_32_re m68kopdm.o + m68kops.o +m68k_op_moveq_32 m68kopdm.o + m68kops.o +m68k_op_moves_16_ai m68kopdm.o + m68kops.o +m68k_op_moves_16_al m68kopdm.o + m68kops.o +m68k_op_moves_16_aw m68kopdm.o + m68kops.o +m68k_op_moves_16_di m68kopdm.o + m68kops.o +m68k_op_moves_16_ix m68kopdm.o + m68kops.o +m68k_op_moves_16_pd m68kopdm.o + m68kops.o +m68k_op_moves_16_pi m68kopdm.o + m68kops.o +m68k_op_moves_32_ai m68kopdm.o + m68kops.o +m68k_op_moves_32_al m68kopdm.o + m68kops.o +m68k_op_moves_32_aw m68kopdm.o + m68kops.o +m68k_op_moves_32_di m68kopdm.o + m68kops.o +m68k_op_moves_32_ix m68kopdm.o + m68kops.o +m68k_op_moves_32_pd m68kopdm.o + m68kops.o +m68k_op_moves_32_pi m68kopdm.o + m68kops.o +m68k_op_moves_8_ai m68kopdm.o + m68kops.o +m68k_op_moves_8_al m68kopdm.o + m68kops.o +m68k_op_moves_8_aw m68kopdm.o + m68kops.o +m68k_op_moves_8_di m68kopdm.o + m68kops.o +m68k_op_moves_8_ix m68kopdm.o + m68kops.o +m68k_op_moves_8_pd m68kopdm.o + m68kops.o +m68k_op_moves_8_pd7 m68kopdm.o + m68kops.o +m68k_op_moves_8_pi m68kopdm.o + m68kops.o +m68k_op_moves_8_pi7 m68kopdm.o + m68kops.o +m68k_op_mull_32_ai m68kopdm.o + m68kops.o +m68k_op_mull_32_al m68kopdm.o + m68kops.o +m68k_op_mull_32_aw m68kopdm.o + m68kops.o +m68k_op_mull_32_d m68kopdm.o + m68kops.o +m68k_op_mull_32_di m68kopdm.o + m68kops.o +m68k_op_mull_32_i m68kopdm.o + m68kops.o +m68k_op_mull_32_ix m68kopdm.o + m68kops.o +m68k_op_mull_32_pcdi m68kopdm.o + m68kops.o +m68k_op_mull_32_pcix m68kopdm.o + m68kops.o +m68k_op_mull_32_pd m68kopdm.o + m68kops.o +m68k_op_mull_32_pi m68kopdm.o + m68kops.o +m68k_op_muls_16_ai m68kopdm.o + m68kops.o +m68k_op_muls_16_al m68kopdm.o + m68kops.o +m68k_op_muls_16_aw m68kopdm.o + m68kops.o +m68k_op_muls_16_d m68kopdm.o + m68kops.o +m68k_op_muls_16_di m68kopdm.o + m68kops.o +m68k_op_muls_16_i m68kopdm.o + m68kops.o +m68k_op_muls_16_ix m68kopdm.o + m68kops.o +m68k_op_muls_16_pcdi m68kopdm.o + m68kops.o +m68k_op_muls_16_pcix m68kopdm.o + m68kops.o +m68k_op_muls_16_pd m68kopdm.o + m68kops.o +m68k_op_muls_16_pi m68kopdm.o + m68kops.o +m68k_op_mulu_16_ai m68kopdm.o + m68kops.o +m68k_op_mulu_16_al m68kopdm.o + m68kops.o +m68k_op_mulu_16_aw m68kopdm.o + m68kops.o +m68k_op_mulu_16_d m68kopdm.o + m68kops.o +m68k_op_mulu_16_di m68kopdm.o + m68kops.o +m68k_op_mulu_16_i m68kopdm.o + m68kops.o +m68k_op_mulu_16_ix m68kopdm.o + m68kops.o +m68k_op_mulu_16_pcdi m68kopdm.o + m68kops.o +m68k_op_mulu_16_pcix m68kopdm.o + m68kops.o +m68k_op_mulu_16_pd m68kopdm.o + m68kops.o +m68k_op_mulu_16_pi m68kopdm.o + m68kops.o +m68k_op_nbcd_8_ai m68kopnz.o + m68kops.o +m68k_op_nbcd_8_al m68kopnz.o + m68kops.o +m68k_op_nbcd_8_aw m68kopnz.o + m68kops.o +m68k_op_nbcd_8_d m68kopnz.o + m68kops.o +m68k_op_nbcd_8_di m68kopnz.o + m68kops.o +m68k_op_nbcd_8_ix m68kopnz.o + m68kops.o +m68k_op_nbcd_8_pd m68kopnz.o + m68kops.o +m68k_op_nbcd_8_pd7 m68kopnz.o + m68kops.o +m68k_op_nbcd_8_pi m68kopnz.o + m68kops.o +m68k_op_nbcd_8_pi7 m68kopnz.o + m68kops.o +m68k_op_neg_16_ai m68kopnz.o + m68kops.o +m68k_op_neg_16_al m68kopnz.o + m68kops.o +m68k_op_neg_16_aw m68kopnz.o + m68kops.o +m68k_op_neg_16_d m68kopnz.o + m68kops.o +m68k_op_neg_16_di m68kopnz.o + m68kops.o +m68k_op_neg_16_ix m68kopnz.o + m68kops.o +m68k_op_neg_16_pd m68kopnz.o + m68kops.o +m68k_op_neg_16_pi m68kopnz.o + m68kops.o +m68k_op_neg_32_ai m68kopnz.o + m68kops.o +m68k_op_neg_32_al m68kopnz.o + m68kops.o +m68k_op_neg_32_aw m68kopnz.o + m68kops.o +m68k_op_neg_32_d m68kopnz.o + m68kops.o +m68k_op_neg_32_di m68kopnz.o + m68kops.o +m68k_op_neg_32_ix m68kopnz.o + m68kops.o +m68k_op_neg_32_pd m68kopnz.o + m68kops.o +m68k_op_neg_32_pi m68kopnz.o + m68kops.o +m68k_op_neg_8_ai m68kopnz.o + m68kops.o +m68k_op_neg_8_al m68kopnz.o + m68kops.o +m68k_op_neg_8_aw m68kopnz.o + m68kops.o +m68k_op_neg_8_d m68kopnz.o + m68kops.o +m68k_op_neg_8_di m68kopnz.o + m68kops.o +m68k_op_neg_8_ix m68kopnz.o + m68kops.o +m68k_op_neg_8_pd m68kopnz.o + m68kops.o +m68k_op_neg_8_pd7 m68kopnz.o + m68kops.o +m68k_op_neg_8_pi m68kopnz.o + m68kops.o +m68k_op_neg_8_pi7 m68kopnz.o + m68kops.o +m68k_op_negx_16_ai m68kopnz.o + m68kops.o +m68k_op_negx_16_al m68kopnz.o + m68kops.o +m68k_op_negx_16_aw m68kopnz.o + m68kops.o +m68k_op_negx_16_d m68kopnz.o + m68kops.o +m68k_op_negx_16_di m68kopnz.o + m68kops.o +m68k_op_negx_16_ix m68kopnz.o + m68kops.o +m68k_op_negx_16_pd m68kopnz.o + m68kops.o +m68k_op_negx_16_pi m68kopnz.o + m68kops.o +m68k_op_negx_32_ai m68kopnz.o + m68kops.o +m68k_op_negx_32_al m68kopnz.o + m68kops.o +m68k_op_negx_32_aw m68kopnz.o + m68kops.o +m68k_op_negx_32_d m68kopnz.o + m68kops.o +m68k_op_negx_32_di m68kopnz.o + m68kops.o +m68k_op_negx_32_ix m68kopnz.o + m68kops.o +m68k_op_negx_32_pd m68kopnz.o + m68kops.o +m68k_op_negx_32_pi m68kopnz.o + m68kops.o +m68k_op_negx_8_ai m68kopnz.o + m68kops.o +m68k_op_negx_8_al m68kopnz.o + m68kops.o +m68k_op_negx_8_aw m68kopnz.o + m68kops.o +m68k_op_negx_8_d m68kopnz.o + m68kops.o +m68k_op_negx_8_di m68kopnz.o + m68kops.o +m68k_op_negx_8_ix m68kopnz.o + m68kops.o +m68k_op_negx_8_pd m68kopnz.o + m68kops.o +m68k_op_negx_8_pd7 m68kopnz.o + m68kops.o +m68k_op_negx_8_pi m68kopnz.o + m68kops.o +m68k_op_negx_8_pi7 m68kopnz.o + m68kops.o +m68k_op_nop m68kopnz.o + m68kops.o +m68k_op_not_16_ai m68kopnz.o + m68kops.o +m68k_op_not_16_al m68kopnz.o + m68kops.o +m68k_op_not_16_aw m68kopnz.o + m68kops.o +m68k_op_not_16_d m68kopnz.o + m68kops.o +m68k_op_not_16_di m68kopnz.o + m68kops.o +m68k_op_not_16_ix m68kopnz.o + m68kops.o +m68k_op_not_16_pd m68kopnz.o + m68kops.o +m68k_op_not_16_pi m68kopnz.o + m68kops.o +m68k_op_not_32_ai m68kopnz.o + m68kops.o +m68k_op_not_32_al m68kopnz.o + m68kops.o +m68k_op_not_32_aw m68kopnz.o + m68kops.o +m68k_op_not_32_d m68kopnz.o + m68kops.o +m68k_op_not_32_di m68kopnz.o + m68kops.o +m68k_op_not_32_ix m68kopnz.o + m68kops.o +m68k_op_not_32_pd m68kopnz.o + m68kops.o +m68k_op_not_32_pi m68kopnz.o + m68kops.o +m68k_op_not_8_ai m68kopnz.o + m68kops.o +m68k_op_not_8_al m68kopnz.o + m68kops.o +m68k_op_not_8_aw m68kopnz.o + m68kops.o +m68k_op_not_8_d m68kopnz.o + m68kops.o +m68k_op_not_8_di m68kopnz.o + m68kops.o +m68k_op_not_8_ix m68kopnz.o + m68kops.o +m68k_op_not_8_pd m68kopnz.o + m68kops.o +m68k_op_not_8_pd7 m68kopnz.o + m68kops.o +m68k_op_not_8_pi m68kopnz.o + m68kops.o +m68k_op_not_8_pi7 m68kopnz.o + m68kops.o +m68k_op_or_16_er_ai m68kopnz.o + m68kops.o +m68k_op_or_16_er_al m68kopnz.o + m68kops.o +m68k_op_or_16_er_aw m68kopnz.o + m68kops.o +m68k_op_or_16_er_d m68kopnz.o + m68kops.o +m68k_op_or_16_er_di m68kopnz.o + m68kops.o +m68k_op_or_16_er_i m68kopnz.o + m68kops.o +m68k_op_or_16_er_ix m68kopnz.o + m68kops.o +m68k_op_or_16_er_pcdi m68kopnz.o + m68kops.o +m68k_op_or_16_er_pcix m68kopnz.o + m68kops.o +m68k_op_or_16_er_pd m68kopnz.o + m68kops.o +m68k_op_or_16_er_pi m68kopnz.o + m68kops.o +m68k_op_or_16_re_ai m68kopnz.o + m68kops.o +m68k_op_or_16_re_al m68kopnz.o + m68kops.o +m68k_op_or_16_re_aw m68kopnz.o + m68kops.o +m68k_op_or_16_re_di m68kopnz.o + m68kops.o +m68k_op_or_16_re_ix m68kopnz.o + m68kops.o +m68k_op_or_16_re_pd m68kopnz.o + m68kops.o +m68k_op_or_16_re_pi m68kopnz.o + m68kops.o +m68k_op_or_32_er_ai m68kopnz.o + m68kops.o +m68k_op_or_32_er_al m68kopnz.o + m68kops.o +m68k_op_or_32_er_aw m68kopnz.o + m68kops.o +m68k_op_or_32_er_d m68kopnz.o + m68kops.o +m68k_op_or_32_er_di m68kopnz.o + m68kops.o +m68k_op_or_32_er_i m68kopnz.o + m68kops.o +m68k_op_or_32_er_ix m68kopnz.o + m68kops.o +m68k_op_or_32_er_pcdi m68kopnz.o + m68kops.o +m68k_op_or_32_er_pcix m68kopnz.o + m68kops.o +m68k_op_or_32_er_pd m68kopnz.o + m68kops.o +m68k_op_or_32_er_pi m68kopnz.o + m68kops.o +m68k_op_or_32_re_ai m68kopnz.o + m68kops.o +m68k_op_or_32_re_al m68kopnz.o + m68kops.o +m68k_op_or_32_re_aw m68kopnz.o + m68kops.o +m68k_op_or_32_re_di m68kopnz.o + m68kops.o +m68k_op_or_32_re_ix m68kopnz.o + m68kops.o +m68k_op_or_32_re_pd m68kopnz.o + m68kops.o +m68k_op_or_32_re_pi m68kopnz.o + m68kops.o +m68k_op_or_8_er_ai m68kopnz.o + m68kops.o +m68k_op_or_8_er_al m68kopnz.o + m68kops.o +m68k_op_or_8_er_aw m68kopnz.o + m68kops.o +m68k_op_or_8_er_d m68kopnz.o + m68kops.o +m68k_op_or_8_er_di m68kopnz.o + m68kops.o +m68k_op_or_8_er_i m68kopnz.o + m68kops.o +m68k_op_or_8_er_ix m68kopnz.o + m68kops.o +m68k_op_or_8_er_pcdi m68kopnz.o + m68kops.o +m68k_op_or_8_er_pcix m68kopnz.o + m68kops.o +m68k_op_or_8_er_pd m68kopnz.o + m68kops.o +m68k_op_or_8_er_pd7 m68kopnz.o + m68kops.o +m68k_op_or_8_er_pi m68kopnz.o + m68kops.o +m68k_op_or_8_er_pi7 m68kopnz.o + m68kops.o +m68k_op_or_8_re_ai m68kopnz.o + m68kops.o +m68k_op_or_8_re_al m68kopnz.o + m68kops.o +m68k_op_or_8_re_aw m68kopnz.o + m68kops.o +m68k_op_or_8_re_di m68kopnz.o + m68kops.o +m68k_op_or_8_re_ix m68kopnz.o + m68kops.o +m68k_op_or_8_re_pd m68kopnz.o + m68kops.o +m68k_op_or_8_re_pd7 m68kopnz.o + m68kops.o +m68k_op_or_8_re_pi m68kopnz.o + m68kops.o +m68k_op_or_8_re_pi7 m68kopnz.o + m68kops.o +m68k_op_ori_16_ai m68kopnz.o + m68kops.o +m68k_op_ori_16_al m68kopnz.o + m68kops.o +m68k_op_ori_16_aw m68kopnz.o + m68kops.o +m68k_op_ori_16_d m68kopnz.o + m68kops.o +m68k_op_ori_16_di m68kopnz.o + m68kops.o +m68k_op_ori_16_ix m68kopnz.o + m68kops.o +m68k_op_ori_16_pd m68kopnz.o + m68kops.o +m68k_op_ori_16_pi m68kopnz.o + m68kops.o +m68k_op_ori_16_toc m68kopnz.o + m68kops.o +m68k_op_ori_16_tos m68kopnz.o + m68kops.o +m68k_op_ori_32_ai m68kopnz.o + m68kops.o +m68k_op_ori_32_al m68kopnz.o + m68kops.o +m68k_op_ori_32_aw m68kopnz.o + m68kops.o +m68k_op_ori_32_d m68kopnz.o + m68kops.o +m68k_op_ori_32_di m68kopnz.o + m68kops.o +m68k_op_ori_32_ix m68kopnz.o + m68kops.o +m68k_op_ori_32_pd m68kopnz.o + m68kops.o +m68k_op_ori_32_pi m68kopnz.o + m68kops.o +m68k_op_ori_8_ai m68kopnz.o + m68kops.o +m68k_op_ori_8_al m68kopnz.o + m68kops.o +m68k_op_ori_8_aw m68kopnz.o + m68kops.o +m68k_op_ori_8_d m68kopnz.o + m68kops.o +m68k_op_ori_8_di m68kopnz.o + m68kops.o +m68k_op_ori_8_ix m68kopnz.o + m68kops.o +m68k_op_ori_8_pd m68kopnz.o + m68kops.o +m68k_op_ori_8_pd7 m68kopnz.o + m68kops.o +m68k_op_ori_8_pi m68kopnz.o + m68kops.o +m68k_op_ori_8_pi7 m68kopnz.o + m68kops.o +m68k_op_pack_16_mm m68kopnz.o + m68kops.o +m68k_op_pack_16_mm_ax7 m68kopnz.o + m68kops.o +m68k_op_pack_16_mm_axy7 m68kopnz.o + m68kops.o +m68k_op_pack_16_mm_ay7 m68kopnz.o + m68kops.o +m68k_op_pack_16_rr m68kopnz.o + m68kops.o +m68k_op_pea_32_ai m68kopnz.o + m68kops.o +m68k_op_pea_32_al m68kopnz.o + m68kops.o +m68k_op_pea_32_aw m68kopnz.o + m68kops.o +m68k_op_pea_32_di m68kopnz.o + m68kops.o +m68k_op_pea_32_ix m68kopnz.o + m68kops.o +m68k_op_pea_32_pcdi m68kopnz.o + m68kops.o +m68k_op_pea_32_pcix m68kopnz.o + m68kops.o +m68k_op_reset m68kopnz.o + m68kops.o +m68k_op_rol_16_ai m68kopnz.o + m68kops.o +m68k_op_rol_16_al m68kopnz.o + m68kops.o +m68k_op_rol_16_aw m68kopnz.o + m68kops.o +m68k_op_rol_16_di m68kopnz.o + m68kops.o +m68k_op_rol_16_ix m68kopnz.o + m68kops.o +m68k_op_rol_16_pd m68kopnz.o + m68kops.o +m68k_op_rol_16_pi m68kopnz.o + m68kops.o +m68k_op_rol_16_r m68kopnz.o + m68kops.o +m68k_op_rol_16_s m68kopnz.o + m68kops.o +m68k_op_rol_32_r m68kopnz.o + m68kops.o +m68k_op_rol_32_s m68kopnz.o + m68kops.o +m68k_op_rol_8_r m68kopnz.o + m68kops.o +m68k_op_rol_8_s m68kopnz.o + m68kops.o +m68k_op_ror_16_ai m68kopnz.o + m68kops.o +m68k_op_ror_16_al m68kopnz.o + m68kops.o +m68k_op_ror_16_aw m68kopnz.o + m68kops.o +m68k_op_ror_16_di m68kopnz.o + m68kops.o +m68k_op_ror_16_ix m68kopnz.o + m68kops.o +m68k_op_ror_16_pd m68kopnz.o + m68kops.o +m68k_op_ror_16_pi m68kopnz.o + m68kops.o +m68k_op_ror_16_r m68kopnz.o + m68kops.o +m68k_op_ror_16_s m68kopnz.o + m68kops.o +m68k_op_ror_32_r m68kopnz.o + m68kops.o +m68k_op_ror_32_s m68kopnz.o + m68kops.o +m68k_op_ror_8_r m68kopnz.o + m68kops.o +m68k_op_ror_8_s m68kopnz.o + m68kops.o +m68k_op_roxl_16_ai m68kopnz.o + m68kops.o +m68k_op_roxl_16_al m68kopnz.o + m68kops.o +m68k_op_roxl_16_aw m68kopnz.o + m68kops.o +m68k_op_roxl_16_di m68kopnz.o + m68kops.o +m68k_op_roxl_16_ix m68kopnz.o + m68kops.o +m68k_op_roxl_16_pd m68kopnz.o + m68kops.o +m68k_op_roxl_16_pi m68kopnz.o + m68kops.o +m68k_op_roxl_16_r m68kopnz.o + m68kops.o +m68k_op_roxl_16_s m68kopnz.o + m68kops.o +m68k_op_roxl_32_r m68kopnz.o + m68kops.o +m68k_op_roxl_32_s m68kopnz.o + m68kops.o +m68k_op_roxl_8_r m68kopnz.o + m68kops.o +m68k_op_roxl_8_s m68kopnz.o + m68kops.o +m68k_op_roxr_16_ai m68kopnz.o + m68kops.o +m68k_op_roxr_16_al m68kopnz.o + m68kops.o +m68k_op_roxr_16_aw m68kopnz.o + m68kops.o +m68k_op_roxr_16_di m68kopnz.o + m68kops.o +m68k_op_roxr_16_ix m68kopnz.o + m68kops.o +m68k_op_roxr_16_pd m68kopnz.o + m68kops.o +m68k_op_roxr_16_pi m68kopnz.o + m68kops.o +m68k_op_roxr_16_r m68kopnz.o + m68kops.o +m68k_op_roxr_16_s m68kopnz.o + m68kops.o +m68k_op_roxr_32_r m68kopnz.o + m68kops.o +m68k_op_roxr_32_s m68kopnz.o + m68kops.o +m68k_op_roxr_8_r m68kopnz.o + m68kops.o +m68k_op_roxr_8_s m68kopnz.o + m68kops.o +m68k_op_rtd_32 m68kopnz.o + m68kops.o +m68k_op_rte_32 m68kopnz.o + m68kops.o +m68k_op_rtm_32 m68kopnz.o + m68kops.o +m68k_op_rtr_32 m68kopnz.o + m68kops.o +m68k_op_rts_32 m68kopnz.o + m68kops.o +m68k_op_sbcd_8_mm m68kopnz.o + m68kops.o +m68k_op_sbcd_8_mm_ax7 m68kopnz.o + m68kops.o +m68k_op_sbcd_8_mm_axy7 m68kopnz.o + m68kops.o +m68k_op_sbcd_8_mm_ay7 m68kopnz.o + m68kops.o +m68k_op_sbcd_8_rr m68kopnz.o + m68kops.o +m68k_op_scc_8_ai m68kopnz.o + m68kops.o +m68k_op_scc_8_al m68kopnz.o + m68kops.o +m68k_op_scc_8_aw m68kopnz.o + m68kops.o +m68k_op_scc_8_d m68kopnz.o + m68kops.o +m68k_op_scc_8_di m68kopnz.o + m68kops.o +m68k_op_scc_8_ix m68kopnz.o + m68kops.o +m68k_op_scc_8_pd m68kopnz.o + m68kops.o +m68k_op_scc_8_pd7 m68kopnz.o + m68kops.o +m68k_op_scc_8_pi m68kopnz.o + m68kops.o +m68k_op_scc_8_pi7 m68kopnz.o + m68kops.o +m68k_op_scs_8_ai m68kopnz.o + m68kops.o +m68k_op_scs_8_al m68kopnz.o + m68kops.o +m68k_op_scs_8_aw m68kopnz.o + m68kops.o +m68k_op_scs_8_d m68kopnz.o + m68kops.o +m68k_op_scs_8_di m68kopnz.o + m68kops.o +m68k_op_scs_8_ix m68kopnz.o + m68kops.o +m68k_op_scs_8_pd m68kopnz.o + m68kops.o +m68k_op_scs_8_pd7 m68kopnz.o + m68kops.o +m68k_op_scs_8_pi m68kopnz.o + m68kops.o +m68k_op_scs_8_pi7 m68kopnz.o + m68kops.o +m68k_op_seq_8_ai m68kopnz.o + m68kops.o +m68k_op_seq_8_al m68kopnz.o + m68kops.o +m68k_op_seq_8_aw m68kopnz.o + m68kops.o +m68k_op_seq_8_d m68kopnz.o + m68kops.o +m68k_op_seq_8_di m68kopnz.o + m68kops.o +m68k_op_seq_8_ix m68kopnz.o + m68kops.o +m68k_op_seq_8_pd m68kopnz.o + m68kops.o +m68k_op_seq_8_pd7 m68kopnz.o + m68kops.o +m68k_op_seq_8_pi m68kopnz.o + m68kops.o +m68k_op_seq_8_pi7 m68kopnz.o + m68kops.o +m68k_op_sf_8_ai m68kopnz.o + m68kops.o +m68k_op_sf_8_al m68kopnz.o + m68kops.o +m68k_op_sf_8_aw m68kopnz.o + m68kops.o +m68k_op_sf_8_d m68kopnz.o + m68kops.o +m68k_op_sf_8_di m68kopnz.o + m68kops.o +m68k_op_sf_8_ix m68kopnz.o + m68kops.o +m68k_op_sf_8_pd m68kopnz.o + m68kops.o +m68k_op_sf_8_pd7 m68kopnz.o + m68kops.o +m68k_op_sf_8_pi m68kopnz.o + m68kops.o +m68k_op_sf_8_pi7 m68kopnz.o + m68kops.o +m68k_op_sge_8_ai m68kopnz.o + m68kops.o +m68k_op_sge_8_al m68kopnz.o + m68kops.o +m68k_op_sge_8_aw m68kopnz.o + m68kops.o +m68k_op_sge_8_d m68kopnz.o + m68kops.o +m68k_op_sge_8_di m68kopnz.o + m68kops.o +m68k_op_sge_8_ix m68kopnz.o + m68kops.o +m68k_op_sge_8_pd m68kopnz.o + m68kops.o +m68k_op_sge_8_pd7 m68kopnz.o + m68kops.o +m68k_op_sge_8_pi m68kopnz.o + m68kops.o +m68k_op_sge_8_pi7 m68kopnz.o + m68kops.o +m68k_op_sgt_8_ai m68kopnz.o + m68kops.o +m68k_op_sgt_8_al m68kopnz.o + m68kops.o +m68k_op_sgt_8_aw m68kopnz.o + m68kops.o +m68k_op_sgt_8_d m68kopnz.o + m68kops.o +m68k_op_sgt_8_di m68kopnz.o + m68kops.o +m68k_op_sgt_8_ix m68kopnz.o + m68kops.o +m68k_op_sgt_8_pd m68kopnz.o + m68kops.o +m68k_op_sgt_8_pd7 m68kopnz.o + m68kops.o +m68k_op_sgt_8_pi m68kopnz.o + m68kops.o +m68k_op_sgt_8_pi7 m68kopnz.o + m68kops.o +m68k_op_shi_8_ai m68kopnz.o + m68kops.o +m68k_op_shi_8_al m68kopnz.o + m68kops.o +m68k_op_shi_8_aw m68kopnz.o + m68kops.o +m68k_op_shi_8_d m68kopnz.o + m68kops.o +m68k_op_shi_8_di m68kopnz.o + m68kops.o +m68k_op_shi_8_ix m68kopnz.o + m68kops.o +m68k_op_shi_8_pd m68kopnz.o + m68kops.o +m68k_op_shi_8_pd7 m68kopnz.o + m68kops.o +m68k_op_shi_8_pi m68kopnz.o + m68kops.o +m68k_op_shi_8_pi7 m68kopnz.o + m68kops.o +m68k_op_sle_8_ai m68kopnz.o + m68kops.o +m68k_op_sle_8_al m68kopnz.o + m68kops.o +m68k_op_sle_8_aw m68kopnz.o + m68kops.o +m68k_op_sle_8_d m68kopnz.o + m68kops.o +m68k_op_sle_8_di m68kopnz.o + m68kops.o +m68k_op_sle_8_ix m68kopnz.o + m68kops.o +m68k_op_sle_8_pd m68kopnz.o + m68kops.o +m68k_op_sle_8_pd7 m68kopnz.o + m68kops.o +m68k_op_sle_8_pi m68kopnz.o + m68kops.o +m68k_op_sle_8_pi7 m68kopnz.o + m68kops.o +m68k_op_sls_8_ai m68kopnz.o + m68kops.o +m68k_op_sls_8_al m68kopnz.o + m68kops.o +m68k_op_sls_8_aw m68kopnz.o + m68kops.o +m68k_op_sls_8_d m68kopnz.o + m68kops.o +m68k_op_sls_8_di m68kopnz.o + m68kops.o +m68k_op_sls_8_ix m68kopnz.o + m68kops.o +m68k_op_sls_8_pd m68kopnz.o + m68kops.o +m68k_op_sls_8_pd7 m68kopnz.o + m68kops.o +m68k_op_sls_8_pi m68kopnz.o + m68kops.o +m68k_op_sls_8_pi7 m68kopnz.o + m68kops.o +m68k_op_slt_8_ai m68kopnz.o + m68kops.o +m68k_op_slt_8_al m68kopnz.o + m68kops.o +m68k_op_slt_8_aw m68kopnz.o + m68kops.o +m68k_op_slt_8_d m68kopnz.o + m68kops.o +m68k_op_slt_8_di m68kopnz.o + m68kops.o +m68k_op_slt_8_ix m68kopnz.o + m68kops.o +m68k_op_slt_8_pd m68kopnz.o + m68kops.o +m68k_op_slt_8_pd7 m68kopnz.o + m68kops.o +m68k_op_slt_8_pi m68kopnz.o + m68kops.o +m68k_op_slt_8_pi7 m68kopnz.o + m68kops.o +m68k_op_smi_8_ai m68kopnz.o + m68kops.o +m68k_op_smi_8_al m68kopnz.o + m68kops.o +m68k_op_smi_8_aw m68kopnz.o + m68kops.o +m68k_op_smi_8_d m68kopnz.o + m68kops.o +m68k_op_smi_8_di m68kopnz.o + m68kops.o +m68k_op_smi_8_ix m68kopnz.o + m68kops.o +m68k_op_smi_8_pd m68kopnz.o + m68kops.o +m68k_op_smi_8_pd7 m68kopnz.o + m68kops.o +m68k_op_smi_8_pi m68kopnz.o + m68kops.o +m68k_op_smi_8_pi7 m68kopnz.o + m68kops.o +m68k_op_sne_8_ai m68kopnz.o + m68kops.o +m68k_op_sne_8_al m68kopnz.o + m68kops.o +m68k_op_sne_8_aw m68kopnz.o + m68kops.o +m68k_op_sne_8_d m68kopnz.o + m68kops.o +m68k_op_sne_8_di m68kopnz.o + m68kops.o +m68k_op_sne_8_ix m68kopnz.o + m68kops.o +m68k_op_sne_8_pd m68kopnz.o + m68kops.o +m68k_op_sne_8_pd7 m68kopnz.o + m68kops.o +m68k_op_sne_8_pi m68kopnz.o + m68kops.o +m68k_op_sne_8_pi7 m68kopnz.o + m68kops.o +m68k_op_spl_8_ai m68kopnz.o + m68kops.o +m68k_op_spl_8_al m68kopnz.o + m68kops.o +m68k_op_spl_8_aw m68kopnz.o + m68kops.o +m68k_op_spl_8_d m68kopnz.o + m68kops.o +m68k_op_spl_8_di m68kopnz.o + m68kops.o +m68k_op_spl_8_ix m68kopnz.o + m68kops.o +m68k_op_spl_8_pd m68kopnz.o + m68kops.o +m68k_op_spl_8_pd7 m68kopnz.o + m68kops.o +m68k_op_spl_8_pi m68kopnz.o + m68kops.o +m68k_op_spl_8_pi7 m68kopnz.o + m68kops.o +m68k_op_st_8_ai m68kopnz.o + m68kops.o +m68k_op_st_8_al m68kopnz.o + m68kops.o +m68k_op_st_8_aw m68kopnz.o + m68kops.o +m68k_op_st_8_d m68kopnz.o + m68kops.o +m68k_op_st_8_di m68kopnz.o + m68kops.o +m68k_op_st_8_ix m68kopnz.o + m68kops.o +m68k_op_st_8_pd m68kopnz.o + m68kops.o +m68k_op_st_8_pd7 m68kopnz.o + m68kops.o +m68k_op_st_8_pi m68kopnz.o + m68kops.o +m68k_op_st_8_pi7 m68kopnz.o + m68kops.o +m68k_op_stop m68kopnz.o + m68kops.o +m68k_op_sub_16_er_a m68kopnz.o + m68kops.o +m68k_op_sub_16_er_ai m68kopnz.o + m68kops.o +m68k_op_sub_16_er_al m68kopnz.o + m68kops.o +m68k_op_sub_16_er_aw m68kopnz.o + m68kops.o +m68k_op_sub_16_er_d m68kopnz.o + m68kops.o +m68k_op_sub_16_er_di m68kopnz.o + m68kops.o +m68k_op_sub_16_er_i m68kopnz.o + m68kops.o +m68k_op_sub_16_er_ix m68kopnz.o + m68kops.o +m68k_op_sub_16_er_pcdi m68kopnz.o + m68kops.o +m68k_op_sub_16_er_pcix m68kopnz.o + m68kops.o +m68k_op_sub_16_er_pd m68kopnz.o + m68kops.o +m68k_op_sub_16_er_pi m68kopnz.o + m68kops.o +m68k_op_sub_16_re_ai m68kopnz.o + m68kops.o +m68k_op_sub_16_re_al m68kopnz.o + m68kops.o +m68k_op_sub_16_re_aw m68kopnz.o + m68kops.o +m68k_op_sub_16_re_di m68kopnz.o + m68kops.o +m68k_op_sub_16_re_ix m68kopnz.o + m68kops.o +m68k_op_sub_16_re_pd m68kopnz.o + m68kops.o +m68k_op_sub_16_re_pi m68kopnz.o + m68kops.o +m68k_op_sub_32_er_a m68kopnz.o + m68kops.o +m68k_op_sub_32_er_ai m68kopnz.o + m68kops.o +m68k_op_sub_32_er_al m68kopnz.o + m68kops.o +m68k_op_sub_32_er_aw m68kopnz.o + m68kops.o +m68k_op_sub_32_er_d m68kopnz.o + m68kops.o +m68k_op_sub_32_er_di m68kopnz.o + m68kops.o +m68k_op_sub_32_er_i m68kopnz.o + m68kops.o +m68k_op_sub_32_er_ix m68kopnz.o + m68kops.o +m68k_op_sub_32_er_pcdi m68kopnz.o + m68kops.o +m68k_op_sub_32_er_pcix m68kopnz.o + m68kops.o +m68k_op_sub_32_er_pd m68kopnz.o + m68kops.o +m68k_op_sub_32_er_pi m68kopnz.o + m68kops.o +m68k_op_sub_32_re_ai m68kopnz.o + m68kops.o +m68k_op_sub_32_re_al m68kopnz.o + m68kops.o +m68k_op_sub_32_re_aw m68kopnz.o + m68kops.o +m68k_op_sub_32_re_di m68kopnz.o + m68kops.o +m68k_op_sub_32_re_ix m68kopnz.o + m68kops.o +m68k_op_sub_32_re_pd m68kopnz.o + m68kops.o +m68k_op_sub_32_re_pi m68kopnz.o + m68kops.o +m68k_op_sub_8_er_ai m68kopnz.o + m68kops.o +m68k_op_sub_8_er_al m68kopnz.o + m68kops.o +m68k_op_sub_8_er_aw m68kopnz.o + m68kops.o +m68k_op_sub_8_er_d m68kopnz.o + m68kops.o +m68k_op_sub_8_er_di m68kopnz.o + m68kops.o +m68k_op_sub_8_er_i m68kopnz.o + m68kops.o +m68k_op_sub_8_er_ix m68kopnz.o + m68kops.o +m68k_op_sub_8_er_pcdi m68kopnz.o + m68kops.o +m68k_op_sub_8_er_pcix m68kopnz.o + m68kops.o +m68k_op_sub_8_er_pd m68kopnz.o + m68kops.o +m68k_op_sub_8_er_pd7 m68kopnz.o + m68kops.o +m68k_op_sub_8_er_pi m68kopnz.o + m68kops.o +m68k_op_sub_8_er_pi7 m68kopnz.o + m68kops.o +m68k_op_sub_8_re_ai m68kopnz.o + m68kops.o +m68k_op_sub_8_re_al m68kopnz.o + m68kops.o +m68k_op_sub_8_re_aw m68kopnz.o + m68kops.o +m68k_op_sub_8_re_di m68kopnz.o + m68kops.o +m68k_op_sub_8_re_ix m68kopnz.o + m68kops.o +m68k_op_sub_8_re_pd m68kopnz.o + m68kops.o +m68k_op_sub_8_re_pd7 m68kopnz.o + m68kops.o +m68k_op_sub_8_re_pi m68kopnz.o + m68kops.o +m68k_op_sub_8_re_pi7 m68kopnz.o + m68kops.o +m68k_op_suba_16_a m68kopnz.o + m68kops.o +m68k_op_suba_16_ai m68kopnz.o + m68kops.o +m68k_op_suba_16_al m68kopnz.o + m68kops.o +m68k_op_suba_16_aw m68kopnz.o + m68kops.o +m68k_op_suba_16_d m68kopnz.o + m68kops.o +m68k_op_suba_16_di m68kopnz.o + m68kops.o +m68k_op_suba_16_i m68kopnz.o + m68kops.o +m68k_op_suba_16_ix m68kopnz.o + m68kops.o +m68k_op_suba_16_pcdi m68kopnz.o + m68kops.o +m68k_op_suba_16_pcix m68kopnz.o + m68kops.o +m68k_op_suba_16_pd m68kopnz.o + m68kops.o +m68k_op_suba_16_pi m68kopnz.o + m68kops.o +m68k_op_suba_32_a m68kopnz.o + m68kops.o +m68k_op_suba_32_ai m68kopnz.o + m68kops.o +m68k_op_suba_32_al m68kopnz.o + m68kops.o +m68k_op_suba_32_aw m68kopnz.o + m68kops.o +m68k_op_suba_32_d m68kopnz.o + m68kops.o +m68k_op_suba_32_di m68kopnz.o + m68kops.o +m68k_op_suba_32_i m68kopnz.o + m68kops.o +m68k_op_suba_32_ix m68kopnz.o + m68kops.o +m68k_op_suba_32_pcdi m68kopnz.o + m68kops.o +m68k_op_suba_32_pcix m68kopnz.o + m68kops.o +m68k_op_suba_32_pd m68kopnz.o + m68kops.o +m68k_op_suba_32_pi m68kopnz.o + m68kops.o +m68k_op_subi_16_ai m68kopnz.o + m68kops.o +m68k_op_subi_16_al m68kopnz.o + m68kops.o +m68k_op_subi_16_aw m68kopnz.o + m68kops.o +m68k_op_subi_16_d m68kopnz.o + m68kops.o +m68k_op_subi_16_di m68kopnz.o + m68kops.o +m68k_op_subi_16_ix m68kopnz.o + m68kops.o +m68k_op_subi_16_pd m68kopnz.o + m68kops.o +m68k_op_subi_16_pi m68kopnz.o + m68kops.o +m68k_op_subi_32_ai m68kopnz.o + m68kops.o +m68k_op_subi_32_al m68kopnz.o + m68kops.o +m68k_op_subi_32_aw m68kopnz.o + m68kops.o +m68k_op_subi_32_d m68kopnz.o + m68kops.o +m68k_op_subi_32_di m68kopnz.o + m68kops.o +m68k_op_subi_32_ix m68kopnz.o + m68kops.o +m68k_op_subi_32_pd m68kopnz.o + m68kops.o +m68k_op_subi_32_pi m68kopnz.o + m68kops.o +m68k_op_subi_8_ai m68kopnz.o + m68kops.o +m68k_op_subi_8_al m68kopnz.o + m68kops.o +m68k_op_subi_8_aw m68kopnz.o + m68kops.o +m68k_op_subi_8_d m68kopnz.o + m68kops.o +m68k_op_subi_8_di m68kopnz.o + m68kops.o +m68k_op_subi_8_ix m68kopnz.o + m68kops.o +m68k_op_subi_8_pd m68kopnz.o + m68kops.o +m68k_op_subi_8_pd7 m68kopnz.o + m68kops.o +m68k_op_subi_8_pi m68kopnz.o + m68kops.o +m68k_op_subi_8_pi7 m68kopnz.o + m68kops.o +m68k_op_subq_16_a m68kopnz.o + m68kops.o +m68k_op_subq_16_ai m68kopnz.o + m68kops.o +m68k_op_subq_16_al m68kopnz.o + m68kops.o +m68k_op_subq_16_aw m68kopnz.o + m68kops.o +m68k_op_subq_16_d m68kopnz.o + m68kops.o +m68k_op_subq_16_di m68kopnz.o + m68kops.o +m68k_op_subq_16_ix m68kopnz.o + m68kops.o +m68k_op_subq_16_pd m68kopnz.o + m68kops.o +m68k_op_subq_16_pi m68kopnz.o + m68kops.o +m68k_op_subq_32_a m68kopnz.o + m68kops.o +m68k_op_subq_32_ai m68kopnz.o + m68kops.o +m68k_op_subq_32_al m68kopnz.o + m68kops.o +m68k_op_subq_32_aw m68kopnz.o + m68kops.o +m68k_op_subq_32_d m68kopnz.o + m68kops.o +m68k_op_subq_32_di m68kopnz.o + m68kops.o +m68k_op_subq_32_ix m68kopnz.o + m68kops.o +m68k_op_subq_32_pd m68kopnz.o + m68kops.o +m68k_op_subq_32_pi m68kopnz.o + m68kops.o +m68k_op_subq_8_ai m68kopnz.o + m68kops.o +m68k_op_subq_8_al m68kopnz.o + m68kops.o +m68k_op_subq_8_aw m68kopnz.o + m68kops.o +m68k_op_subq_8_d m68kopnz.o + m68kops.o +m68k_op_subq_8_di m68kopnz.o + m68kops.o +m68k_op_subq_8_ix m68kopnz.o + m68kops.o +m68k_op_subq_8_pd m68kopnz.o + m68kops.o +m68k_op_subq_8_pd7 m68kopnz.o + m68kops.o +m68k_op_subq_8_pi m68kopnz.o + m68kops.o +m68k_op_subq_8_pi7 m68kopnz.o + m68kops.o +m68k_op_subx_16_mm m68kopnz.o + m68kops.o +m68k_op_subx_16_rr m68kopnz.o + m68kops.o +m68k_op_subx_32_mm m68kopnz.o + m68kops.o +m68k_op_subx_32_rr m68kopnz.o + m68kops.o +m68k_op_subx_8_mm m68kopnz.o + m68kops.o +m68k_op_subx_8_mm_ax7 m68kopnz.o + m68kops.o +m68k_op_subx_8_mm_axy7 m68kopnz.o + m68kops.o +m68k_op_subx_8_mm_ay7 m68kopnz.o + m68kops.o +m68k_op_subx_8_rr m68kopnz.o + m68kops.o +m68k_op_svc_8_ai m68kopnz.o + m68kops.o +m68k_op_svc_8_al m68kopnz.o + m68kops.o +m68k_op_svc_8_aw m68kopnz.o + m68kops.o +m68k_op_svc_8_d m68kopnz.o + m68kops.o +m68k_op_svc_8_di m68kopnz.o + m68kops.o +m68k_op_svc_8_ix m68kopnz.o + m68kops.o +m68k_op_svc_8_pd m68kopnz.o + m68kops.o +m68k_op_svc_8_pd7 m68kopnz.o + m68kops.o +m68k_op_svc_8_pi m68kopnz.o + m68kops.o +m68k_op_svc_8_pi7 m68kopnz.o + m68kops.o +m68k_op_svs_8_ai m68kopnz.o + m68kops.o +m68k_op_svs_8_al m68kopnz.o + m68kops.o +m68k_op_svs_8_aw m68kopnz.o + m68kops.o +m68k_op_svs_8_d m68kopnz.o + m68kops.o +m68k_op_svs_8_di m68kopnz.o + m68kops.o +m68k_op_svs_8_ix m68kopnz.o + m68kops.o +m68k_op_svs_8_pd m68kopnz.o + m68kops.o +m68k_op_svs_8_pd7 m68kopnz.o + m68kops.o +m68k_op_svs_8_pi m68kopnz.o + m68kops.o +m68k_op_svs_8_pi7 m68kopnz.o + m68kops.o +m68k_op_swap_32 m68kopnz.o + m68kops.o +m68k_op_tas_8_ai m68kopnz.o + m68kops.o +m68k_op_tas_8_al m68kopnz.o + m68kops.o +m68k_op_tas_8_aw m68kopnz.o + m68kops.o +m68k_op_tas_8_d m68kopnz.o + m68kops.o +m68k_op_tas_8_di m68kopnz.o + m68kops.o +m68k_op_tas_8_ix m68kopnz.o + m68kops.o +m68k_op_tas_8_pd m68kopnz.o + m68kops.o +m68k_op_tas_8_pd7 m68kopnz.o + m68kops.o +m68k_op_tas_8_pi m68kopnz.o + m68kops.o +m68k_op_tas_8_pi7 m68kopnz.o + m68kops.o +m68k_op_trap m68kopnz.o + m68kops.o +m68k_op_trapcc m68kopnz.o + m68kops.o +m68k_op_trapcc_16 m68kopnz.o + m68kops.o +m68k_op_trapcc_32 m68kopnz.o + m68kops.o +m68k_op_trapcs m68kopnz.o + m68kops.o +m68k_op_trapcs_16 m68kopnz.o + m68kops.o +m68k_op_trapcs_32 m68kopnz.o + m68kops.o +m68k_op_trapeq m68kopnz.o + m68kops.o +m68k_op_trapeq_16 m68kopnz.o + m68kops.o +m68k_op_trapeq_32 m68kopnz.o + m68kops.o +m68k_op_trapf m68kopnz.o + m68kops.o +m68k_op_trapf_16 m68kopnz.o + m68kops.o +m68k_op_trapf_32 m68kopnz.o + m68kops.o +m68k_op_trapge m68kopnz.o + m68kops.o +m68k_op_trapge_16 m68kopnz.o + m68kops.o +m68k_op_trapge_32 m68kopnz.o + m68kops.o +m68k_op_trapgt m68kopnz.o + m68kops.o +m68k_op_trapgt_16 m68kopnz.o + m68kops.o +m68k_op_trapgt_32 m68kopnz.o + m68kops.o +m68k_op_traphi m68kopnz.o + m68kops.o +m68k_op_traphi_16 m68kopnz.o + m68kops.o +m68k_op_traphi_32 m68kopnz.o + m68kops.o +m68k_op_traple m68kopnz.o + m68kops.o +m68k_op_traple_16 m68kopnz.o + m68kops.o +m68k_op_traple_32 m68kopnz.o + m68kops.o +m68k_op_trapls m68kopnz.o + m68kops.o +m68k_op_trapls_16 m68kopnz.o + m68kops.o +m68k_op_trapls_32 m68kopnz.o + m68kops.o +m68k_op_traplt m68kopnz.o + m68kops.o +m68k_op_traplt_16 m68kopnz.o + m68kops.o +m68k_op_traplt_32 m68kopnz.o + m68kops.o +m68k_op_trapmi m68kopnz.o + m68kops.o +m68k_op_trapmi_16 m68kopnz.o + m68kops.o +m68k_op_trapmi_32 m68kopnz.o + m68kops.o +m68k_op_trapne m68kopnz.o + m68kops.o +m68k_op_trapne_16 m68kopnz.o + m68kops.o +m68k_op_trapne_32 m68kopnz.o + m68kops.o +m68k_op_trappl m68kopnz.o + m68kops.o +m68k_op_trappl_16 m68kopnz.o + m68kops.o +m68k_op_trappl_32 m68kopnz.o + m68kops.o +m68k_op_trapt m68kopnz.o + m68kops.o +m68k_op_trapt_16 m68kopnz.o + m68kops.o +m68k_op_trapt_32 m68kopnz.o + m68kops.o +m68k_op_trapv m68kopnz.o + m68kops.o +m68k_op_trapvc m68kopnz.o + m68kops.o +m68k_op_trapvc_16 m68kopnz.o + m68kops.o +m68k_op_trapvc_32 m68kopnz.o + m68kops.o +m68k_op_trapvs m68kopnz.o + m68kops.o +m68k_op_trapvs_16 m68kopnz.o + m68kops.o +m68k_op_trapvs_32 m68kopnz.o + m68kops.o +m68k_op_tst_16_a m68kopnz.o + m68kops.o +m68k_op_tst_16_ai m68kopnz.o + m68kops.o +m68k_op_tst_16_al m68kopnz.o + m68kops.o +m68k_op_tst_16_aw m68kopnz.o + m68kops.o +m68k_op_tst_16_d m68kopnz.o + m68kops.o +m68k_op_tst_16_di m68kopnz.o + m68kops.o +m68k_op_tst_16_i m68kopnz.o + m68kops.o +m68k_op_tst_16_ix m68kopnz.o + m68kops.o +m68k_op_tst_16_pcdi m68kopnz.o + m68kops.o +m68k_op_tst_16_pcix m68kopnz.o + m68kops.o +m68k_op_tst_16_pd m68kopnz.o + m68kops.o +m68k_op_tst_16_pi m68kopnz.o + m68kops.o +m68k_op_tst_32_a m68kopnz.o + m68kops.o +m68k_op_tst_32_ai m68kopnz.o + m68kops.o +m68k_op_tst_32_al m68kopnz.o + m68kops.o +m68k_op_tst_32_aw m68kopnz.o + m68kops.o +m68k_op_tst_32_d m68kopnz.o + m68kops.o +m68k_op_tst_32_di m68kopnz.o + m68kops.o +m68k_op_tst_32_i m68kopnz.o + m68kops.o +m68k_op_tst_32_ix m68kopnz.o + m68kops.o +m68k_op_tst_32_pcdi m68kopnz.o + m68kops.o +m68k_op_tst_32_pcix m68kopnz.o + m68kops.o +m68k_op_tst_32_pd m68kopnz.o + m68kops.o +m68k_op_tst_32_pi m68kopnz.o + m68kops.o +m68k_op_tst_8_ai m68kopnz.o + m68kops.o +m68k_op_tst_8_al m68kopnz.o + m68kops.o +m68k_op_tst_8_aw m68kopnz.o + m68kops.o +m68k_op_tst_8_d m68kopnz.o + m68kops.o +m68k_op_tst_8_di m68kopnz.o + m68kops.o +m68k_op_tst_8_i m68kopnz.o + m68kops.o +m68k_op_tst_8_ix m68kopnz.o + m68kops.o +m68k_op_tst_8_pcdi m68kopnz.o + m68kops.o +m68k_op_tst_8_pcix m68kopnz.o + m68kops.o +m68k_op_tst_8_pd m68kopnz.o + m68kops.o +m68k_op_tst_8_pd7 m68kopnz.o + m68kops.o +m68k_op_tst_8_pi m68kopnz.o + m68kops.o +m68k_op_tst_8_pi7 m68kopnz.o + m68kops.o +m68k_op_unlk_32 m68kopnz.o + m68kops.o +m68k_op_unlk_32_a7 m68kopnz.o + m68kops.o +m68k_op_unpk_16_mm m68kopnz.o + m68kops.o +m68k_op_unpk_16_mm_ax7 m68kopnz.o + m68kops.o +m68k_op_unpk_16_mm_axy7 m68kopnz.o + m68kops.o +m68k_op_unpk_16_mm_ay7 m68kopnz.o + m68kops.o +m68k_op_unpk_16_rr m68kopnz.o + m68kops.o +m68k_pulse_halt m68kcpu.o +m68k_pulse_reset m68kcpu.o + ngc.o + genesis.o +m68k_read_bus_16 mem68k.o +m68k_read_bus_8 mem68k.o +m68k_read_memory_16 mem68k.o + m68kopnz.o + m68kopdm.o + m68kopac.o + m68kcpu.o +m68k_read_memory_32 mem68k.o + m68kopnz.o + m68kopdm.o + m68kopac.o + m68kcpu.o +m68k_read_memory_8 mem68k.o + m68kopnz.o + m68kopdm.o + m68kopac.o +m68k_run system.o + vdp.o +m68k_save_context m68kcpu.o +m68k_set_bkpt_ack_callback m68kcpu.o +m68k_set_context m68kcpu.o +m68k_set_cpu_type m68kcpu.o + genesis.o +m68k_set_fc_callback m68kcpu.o +m68k_set_instr_hook_callback m68kcpu.o +m68k_set_int_ack_callback m68kcpu.o +m68k_set_irq m68kcpu.o + vdp.o + system.o + input.o +m68k_set_pc_changed_callback m68kcpu.o +m68k_set_reg m68kcpu.o + state.o +m68k_set_reset_instr_callback m68kcpu.o +m68k_unused_16_w mem68k.o +m68k_unused_8_w mem68k.o +m68k_unused_w mem68k.o +m68k_write_memory_16 mem68k.o + ggentry.o + m68kopnz.o + m68kopdm.o + m68kopac.o + m68kcpu.o +m68k_write_memory_32 mem68k.o + m68kopnz.o + m68kopdm.o + m68kopac.o + m68kcpu.o +m68k_write_memory_8 mem68k.o + m68kopnz.o + m68kopdm.o + m68kopac.o +m68ki_address_space m68kcpu.o +m68ki_build_opcode_table m68kops.o + m68kcpu.o +m68ki_cpu m68kcpu.o + m68kopnz.o + m68kopdm.o + m68kopac.o +m68ki_cpu_names m68kcpu.o +m68ki_cycles m68kops.o + m68kcpu.o +m68ki_ea_idx_cycle_table m68kcpu.o + m68kopnz.o + m68kopdm.o + m68kopac.o +m68ki_exception_cycle_table m68kcpu.o +m68ki_initial_cycles m68kcpu.o +m68ki_instruction_jump_table m68kops.o + m68kcpu.o +m68ki_remaining_cycles m68kcpu.o + m68kopnz.o + m68kopdm.o + m68kopac.o + system.o +m68ki_shift_16_table m68kcpu.o + m68kopac.o +m68ki_shift_32_table m68kcpu.o + m68kopac.o +m68ki_shift_8_table m68kcpu.o + m68kopac.o +m68ki_tracing m68kcpu.o +main ngc.o + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp.o) +make_lut_bg render.o +make_lut_bg_ste render.o +make_lut_bgobj_ste render.o +make_lut_obj render.o +make_lut_obj_ste render.o +make_name_lut render.o +malloc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malloc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + vfat.o + legal.o + ngc.o + fm.o + z80.o + render.o +matherr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_matherr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log10.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_log.o) +memalign c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(malign.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +memchr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memchr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) +memcmp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memcmp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + vfat.o + iso9660.o + ngc.o +memcpy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memcpy.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mprec.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(dtoa.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(console.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_messages.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + vfat.o + rominfo.o + menu.o + mcard.o + font.o + filesel.o + dvd.o + unzip.o + loadrom.o + sn76489.o + z80.o + m68kcpu.o + state.o +memmove c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memmove.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(fvwrite.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(reallocr.o) +memset c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(memset.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(findfp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(callocr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(newlibc.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(irq.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_wkspace.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(lwp_threads.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(aram.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) + vfat.o + rominfo.o + mcard.o + iso9660.o + ggentry.o + filesel.o + ngc.o + loadrom.o + ym2612.o + fm.o + z80.o + vdp.o + system.o + sram.o + render.o + genesis.o +menu menu.o + confjoy.o +menutitle menu.o + ggentry.o + confjoy.o +merge render.o +misc68Kcycles system.o + vdp.o +miscZ80cycles system.o +miscmenu menu.o +mixbuffer ngc.o + system.o +mktime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(mktime.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +mpads confjoy.o +msBetweenFrames ngc.o +multitap_read input.o + io.o +multitap_write input.o + io.o +myFM system.o + sound.o +name_lut render.o +nanosleep c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(usleep.o) +netio_close_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) +netio_open_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) +netio_read_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) +netio_write_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(netio_fake.o) +now ngc.o +nta_buf render.o +ntab vdp.o + state.o + render.o +ntb_buf render.o +ntbb vdp.o + state.o + render.o +ntwb vdp.o + state.o + render.o +obj_buf render.o +object_index_count state.o + render.o +object_info render.o +offset filesel.o +old_offset filesel.o +old_selection filesel.o +old_sys_type confjoy.o +oldvheight menu.o + ngc.o +oldvwidth menu.o + ngc.o +optionmenu menu.o +pad_type io.o + rominfo.o + confjoy.o + mem68k.o +padcal ngc.o + confjoy.o +padmenu confjoy.o +parseSDdirectory filesel.o +parse_satb render.o + system.o +parsedirectory iso9660.o + filesel.o +pending vdp.o + state.o +peripheralinfo rominfo.o +peripherals rominfo.o +pixel_15 render.o +pixel_15_lut render.o +pixel_16 render.o +pixel_16_lut render.o +pixel_32 render.o +pixel_32_lut render.o +pixel_8 render.o +pixel_8_lut render.o +playbuffer ngc.o +playfield_col_mask vdp.o + state.o + render.o +playfield_row_mask vdp.o + state.o + render.o +playfield_shift vdp.o + state.o + render.o +port io.o +pow c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) + ym2612.o + fm.o +prev ngc.o +printf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +ps_guMtxConcat c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + ngc.o +ps_guMtxCopy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guMtxIdentity c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + ngc.o +ps_guMtxInvXpos c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guMtxInverse c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guMtxReflect c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guMtxRotAxisRad c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +ps_guMtxRotRad c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +ps_guMtxRotTrig c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +ps_guMtxScale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guMtxScaleApply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guMtxTrans c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guMtxTransApply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + ngc.o +ps_guMtxTranspose c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guQuatAdd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guQuatDotProduct c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guQuatMultiply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guQuatNormalize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guQuatSub c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guVecAdd c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +ps_guVecCross c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +ps_guVecDotProduct c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +ps_guVecMultiply c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guVecMultiplySR c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guVecNormalize c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +ps_guVecScale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_guVecSub c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +ps_quQuatScale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu_psasm.o) +psg_preamp menu.o + system.o +psg_write sound.o + memz80.o + membnk.o + mem68k.o +putchar c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(putchar.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +puts c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +raise c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(abort.o) + z80.o +rand c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(rand.o) +read c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(read.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(readr.o) +realloc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(realloc.o) + system.o +reg ngc.o + vdp.o + system.o + state.o + render.o + input.o +region_code io.o + rominfo.o + loadrom.o +region_detect menu.o + loadrom.o +reloadrom loadrom.o + menu.o + filesel.o + ngc.o +remap_16 render.o +remap_32 render.o +remap_8 render.o +render_init render.o + system.o +render_line render.o + system.o +render_ntw render.o +render_ntw_im2 render.o +render_ntx render.o +render_ntx_im2 render.o +render_ntx_vs render.o +render_obj render.o +render_obj_im2 render.o +render_reset render.o + system.o +render_shutdown render.o + system.o +rgb565_half render.o +rgb565_high render.o +rgb565_norm render.o +rint c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_rint.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(w_pow.o) +rominfo rominfo.o + mcard.o + ggentry.o + loadrom.o + eeprom.o +rootSDdir filesel.o +rootdir iso9660.o + filesel.o +rootdirlength iso9660.o + filesel.o +row_mask_table vdp.o +sat vdp.o + state.o + render.o +sat_addr_mask vdp.o + state.o +sat_base_mask vdp.o + state.o +satb vdp.o + state.o + render.o +save_param state.o +savebuffer mcard.o +sbrk c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sbrk.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sbrkr.o) +scalbn c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_scalbn.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(k_rem_pio2.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(e_pow.o) +scalbnf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_scalbn.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(kf_rem_pio2.o) +sdcardio_close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +sdcardio_close_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) +sdcardio_open c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +sdcardio_open_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) +sdcardio_read c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +sdcardio_read_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) +sdcardio_seek c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +sdcardio_seek_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) +sdcardio_stat c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +sdcardio_stat_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) +sdcardio_write c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcardio.o) +sdcardio_write_f c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(sdcardio_fake.o) +selection filesel.o +set_game_default loadrom.o +setfontcolour font.o + ggentry.o +setlocale c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) +settime c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +shadow_rom ssf2tnc.o +shift_table vdp.o +showrominfo rominfo.o + menu.o +signal c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(signal.o) +sin c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(s_sin.o) + ym2612.o + fm.o +sinf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_sin.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +sn sn76496.o + state.o +snd sound.o + system.o +sound_init sound.o + system.o +soundbuffer ngc.o + system.o +soundmenu menu.o +sprintf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(sprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + rominfo.o + menu.o + mcard.o + filesel.o + confjoy.o + unzip.o +sqrtf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(wf_sqrt.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gx.o) +square ngc.o + menu.o +sram rominfo.o + menu.o + mcard.o + sram.o + mem68k.o + eeprom.o +sram_autoload mcard.o + loadrom.o +sramcntrl c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(system.o) +srand c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(rand.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +ssf2bankrom ssf2tnc.o + mem68k.o +state state.o +state_load state.o + mcard.o +state_save state.o + mcard.o +status vdp.o + system.o + state.o + render.o +stdin_close c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) +stdin_open c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) +stdin_read c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) +stdin_write c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(stdin_fake.o) +strcasecmp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcasecmp.o) + vfat.o +strchr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strchr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strrchr.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + rominfo.o + iso9660.o + ggentry.o +strcmp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcmp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(locale.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + vfat.o + rominfo.o + mcard.o + ggentry.o + filesel.o +strcpy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strcpy.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + vfat.o + rominfo.o + mcard.o + iso9660.o + filesel.o +strlen c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strlen.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wctomb_r.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(puts.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + rominfo.o + mcard.o + iso9660.o + ggentry.o + font.o + filesel.o +strncasecmp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncasecmp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) + loadrom.o +strncmp c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncmp.o) + rominfo.o +strncpy c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strncpy.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) +strrchr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strrchr.o) + vfat.o +strstr c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strstr.o) + ggentry.o + loadrom.o + eeprom.o +strtok c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok.o) + vfat.o + filesel.o +strtok_r c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(strtok_r.o) +sys_type confjoy.o + loadrom.o +system_frame system.o + ngc.o +system_init system.o + loadrom.o +system_reset system.o + menu.o + mcard.o + confjoy.o + loadrom.o + state.o +system_shutdown system.o +systemcall_handler_end c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +systemcall_handler_start c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception_handler.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(exception.o) +tanf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libm.a(sf_tan.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(gu.o) +tb_diff_msec ngc.o +teamplayer input.o +teamplayer_read input.o +teamplayer_reset input.o +texobj ngc.o +time c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_fat.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(sdcard.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(card.o) +timer sound.o + state.o +timespec_substract c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) +timespec_to_ticks c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) +tmp_buf render.o +udelay c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(timesupp.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) +uncompress c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(uncompr.o) + mcard.o + legal.o + font.o + state.o +unpackBackdrop font.o + ngc.o +untile font.o +updateSDdirname filesel.o +update_bg_pattern_cache render.o +use_SDCARD menu.o + mcard.o +uselessinquiry dvd.o + menu.o + mcard.o +usleep c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(usleep.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libsdcard.a(card_io.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(dvd.o) + ngc.o +v_counter vdp.o + system.o + state.o + input.o +vc_ntsc_192 vdp.o +vc_ntsc_224 vdp.o +vc_ntsc_240 vdp.o +vc_pal_192 vdp.o +vc_pal_224 vdp.o +vc_pal_240 vdp.o +vdp_ctrl_r vdp.o + memz80.o + membnk.o + mem68k.o +vdp_ctrl_w vdp.o + memz80.o + membnk.o + mem68k.o +vdp_data_r vdp.o + memz80.o + membnk.o + mem68k.o +vdp_data_w vdp.o + memz80.o + membnk.o + mem68k.o +vdp_dma_r memvdp.o + vdp.o +vdp_hvc_r vdp.o + memz80.o + membnk.o + mem68k.o +vdp_init vdp.o + system.o +vdp_int_ack_callback genesis.o + m68kopnz.o + m68kopdm.o + m68kopac.o + m68kcpu.o +vdp_pal vdp.o + ngc.o + loadrom.o + system.o +vdp_rate vdp.o + ngc.o + system.o +vdp_reg_w vdp.o +vdp_reset vdp.o + system.o +vdp_shutdown vdp.o + system.o +vdp_test_w vdp.o + memz80.o + membnk.o +vdptiming vdp.o + menu.o +vfprintf c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(vfprintf.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(printf.o) +vheight ngc.o +video_line c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogc.a(ogc_crt0.o) +vint_pending vdp.o + system.o + state.o + render.o + genesis.o +vmode ngc.o +vram vdp.o + state.o + render.o +vsram vdp.o + state.o + render.o +vwidth ngc.o +wcrtomb c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcrtomb.o) +wcsrtombs c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(wcsrtombs.o) +whichfb ngc.o + legal.o + font.o +window_clip render.o +work_ram state.o + memvdp.o + membnk.o + mem68k.o + genesis.o +write c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libogcsys.a(write.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libc.a(writer.o) +write_font font.o + rominfo.o + ggentry.o +writex font.o +xfb legal.o + font.o + ngc.o +y_mask vdp.o + state.o + render.o +y_mask_table vdp.o +yay0_decode font.o +z80_ICount z80.o +z80_burn z80.o +z80_end_timeslice z80.o + memz80.o + membnk.o +z80_execute z80.o + system.o +z80_exit z80.o +z80_get_context z80.o +z80_get_cycle_table z80.o +z80_get_pc z80.o +z80_get_reg z80.o + state.o + memz80.o + membnk.o +z80_get_sp z80.o +z80_irq_callback genesis.o +z80_lockup_r memz80.o +z80_lockup_w memz80.o +z80_read_banked_memory membnk.o + memz80.o +z80_reset z80.o + genesis.o +z80_run system.o + genesis.o +z80_set_context z80.o +z80_set_cycle_table z80.o +z80_set_irq_callback z80.o + genesis.o +z80_set_irq_line z80.o + system.o + genesis.o +z80_set_nmi_line z80.o +z80_set_pc z80.o +z80_set_reg z80.o + state.o +z80_set_sp z80.o +z80_unused_r memz80.o +z80_unused_w memz80.o +z80_vdp_r memz80.o +z80_vdp_w memz80.o +z80_write_banked_memory membnk.o + memz80.o +z80bank_lockup_r membnk.o +z80bank_lockup_w membnk.o +z80bank_unused_r membnk.o +z80bank_unused_w membnk.o +z80bank_vdp_r membnk.o +z80bank_vdp_w membnk.o +zError c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) +z_errmsg c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +zbank state.o + memz80.o + genesis.o +zbusack state.o + memvdp.o + mem68k.o + genesis.o +zbusreq system.o + state.o + genesis.o +zcalloc c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +zcfree c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(inflate.o) + c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(deflate.o) +zirq system.o + state.o + genesis.o +zlibCompileFlags c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) +zlibVersion c:/devkitPro/devkitPPC/bin/../lib/gcc/powerpc-gekko/3.4.6/../../../../powerpc-gekko/lib\libz.a(zutil.o) +zram state.o + memz80.o + mem68k.o + genesis.o +zreset system.o + state.o + genesis.o diff --git a/ genplus-gx/build/ggentry.d b/ genplus-gx/build/ggentry.d new file mode 100644 index 0000000..63a1174 --- /dev/null +++ b/ genplus-gx/build/ggentry.d @@ -0,0 +1,33 @@ +ggentry.o: c:/Devkitpro/examples/genplus/source/ngc/gui/ggentry.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/rominfo.h diff --git a/ genplus-gx/build/input.d b/ genplus-gx/build/input.d new file mode 100644 index 0000000..a9b8c1e --- /dev/null +++ b/ genplus-gx/build/input.d @@ -0,0 +1,31 @@ +input.o: c:/Devkitpro/examples/genplus/source/input.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/io.d b/ genplus-gx/build/io.d new file mode 100644 index 0000000..c323a87 --- /dev/null +++ b/ genplus-gx/build/io.d @@ -0,0 +1,31 @@ +io.o: c:/Devkitpro/examples/genplus/source/io.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/iso9660.d b/ genplus-gx/build/iso9660.d new file mode 100644 index 0000000..36a61c2 --- /dev/null +++ b/ genplus-gx/build/iso9660.d @@ -0,0 +1,34 @@ +iso9660.o: c:/Devkitpro/examples/genplus/source/ngc/gui/iso9660.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/dvd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/iso9660.h \ + c:/Devkitpro/examples/genplus/source/ngc/vfat/vfat.h diff --git a/ genplus-gx/build/legal.d b/ genplus-gx/build/legal.d new file mode 100644 index 0000000..4c1f1e1 --- /dev/null +++ b/ genplus-gx/build/legal.d @@ -0,0 +1,33 @@ +legal.o: c:/Devkitpro/examples/genplus/source/ngc/gui/legal.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/dkpro.h diff --git a/ genplus-gx/build/loadrom.d b/ genplus-gx/build/loadrom.d new file mode 100644 index 0000000..6d87c65 --- /dev/null +++ b/ genplus-gx/build/loadrom.d @@ -0,0 +1,33 @@ +loadrom.o: c:/Devkitpro/examples/genplus/source/ngc/loadrom.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/rominfo.h \ + c:/Devkitpro/examples/genplus/source/shared.h diff --git a/ genplus-gx/build/m68kcpu.d b/ genplus-gx/build/m68kcpu.d new file mode 100644 index 0000000..6403df0 --- /dev/null +++ b/ genplus-gx/build/m68kcpu.d @@ -0,0 +1,5 @@ +m68kcpu.o: c:/Devkitpro/examples/genplus/source/m68k/m68kcpu.c \ + c:/Devkitpro/examples/genplus/source/m68k/m68kops.h \ + c:/Devkitpro/examples/genplus/source/m68k/m68kcpu.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h diff --git a/ genplus-gx/build/m68kopac.d b/ genplus-gx/build/m68kopac.d new file mode 100644 index 0000000..75b10c7 --- /dev/null +++ b/ genplus-gx/build/m68kopac.d @@ -0,0 +1,4 @@ +m68kopac.o: c:/Devkitpro/examples/genplus/source/m68k/m68kopac.c \ + c:/Devkitpro/examples/genplus/source/m68k/m68kcpu.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h diff --git a/ genplus-gx/build/m68kopdm.d b/ genplus-gx/build/m68kopdm.d new file mode 100644 index 0000000..0b1bcdd --- /dev/null +++ b/ genplus-gx/build/m68kopdm.d @@ -0,0 +1,4 @@ +m68kopdm.o: c:/Devkitpro/examples/genplus/source/m68k/m68kopdm.c \ + c:/Devkitpro/examples/genplus/source/m68k/m68kcpu.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h diff --git a/ genplus-gx/build/m68kopnz.d b/ genplus-gx/build/m68kopnz.d new file mode 100644 index 0000000..ec1f02d --- /dev/null +++ b/ genplus-gx/build/m68kopnz.d @@ -0,0 +1,4 @@ +m68kopnz.o: c:/Devkitpro/examples/genplus/source/m68k/m68kopnz.c \ + c:/Devkitpro/examples/genplus/source/m68k/m68kcpu.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h diff --git a/ genplus-gx/build/m68kops.d b/ genplus-gx/build/m68kops.d new file mode 100644 index 0000000..e237580 --- /dev/null +++ b/ genplus-gx/build/m68kops.d @@ -0,0 +1,2 @@ +m68kops.o: c:/Devkitpro/examples/genplus/source/m68k/m68kops.c \ + c:/Devkitpro/examples/genplus/source/m68k/m68kops.h diff --git a/ genplus-gx/build/mcard.d b/ genplus-gx/build/mcard.d new file mode 100644 index 0000000..5c90f76 --- /dev/null +++ b/ genplus-gx/build/mcard.d @@ -0,0 +1,35 @@ +mcard.o: c:/Devkitpro/examples/genplus/source/ngc/gui/mcard.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/dvd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/rominfo.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/saveicon.h diff --git a/ genplus-gx/build/mem68k.d b/ genplus-gx/build/mem68k.d new file mode 100644 index 0000000..ded2bd1 --- /dev/null +++ b/ genplus-gx/build/mem68k.d @@ -0,0 +1,31 @@ +mem68k.o: c:/Devkitpro/examples/genplus/source/mem68k.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/membnk.d b/ genplus-gx/build/membnk.d new file mode 100644 index 0000000..9e64d72 --- /dev/null +++ b/ genplus-gx/build/membnk.d @@ -0,0 +1,31 @@ +membnk.o: c:/Devkitpro/examples/genplus/source/membnk.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/memvdp.d b/ genplus-gx/build/memvdp.d new file mode 100644 index 0000000..744d64d --- /dev/null +++ b/ genplus-gx/build/memvdp.d @@ -0,0 +1,31 @@ +memvdp.o: c:/Devkitpro/examples/genplus/source/memvdp.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/memz80.d b/ genplus-gx/build/memz80.d new file mode 100644 index 0000000..5bafd6d --- /dev/null +++ b/ genplus-gx/build/memz80.d @@ -0,0 +1,31 @@ +memz80.o: c:/Devkitpro/examples/genplus/source/memz80.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/menu.d b/ genplus-gx/build/menu.d new file mode 100644 index 0000000..d663011 --- /dev/null +++ b/ genplus-gx/build/menu.d @@ -0,0 +1,34 @@ +menu.o: c:/Devkitpro/examples/genplus/source/ngc/gui/menu.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/dvd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/rominfo.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h diff --git a/ genplus-gx/build/ngc.d b/ genplus-gx/build/ngc.d new file mode 100644 index 0000000..b9bca1b --- /dev/null +++ b/ genplus-gx/build/ngc.d @@ -0,0 +1,33 @@ +ngc.o: c:/Devkitpro/examples/genplus/source/ngc/ngc.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/dvd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h diff --git a/ genplus-gx/build/render.d b/ genplus-gx/build/render.d new file mode 100644 index 0000000..74c2094 --- /dev/null +++ b/ genplus-gx/build/render.d @@ -0,0 +1,31 @@ +render.o: c:/Devkitpro/examples/genplus/source/render.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/rominfo.d b/ genplus-gx/build/rominfo.d new file mode 100644 index 0000000..fc702f7 --- /dev/null +++ b/ genplus-gx/build/rominfo.d @@ -0,0 +1,33 @@ +rominfo.o: c:/Devkitpro/examples/genplus/source/ngc/gui/rominfo.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/rominfo.h diff --git a/ genplus-gx/build/sn76489.d b/ genplus-gx/build/sn76489.d new file mode 100644 index 0000000..13c00a9 --- /dev/null +++ b/ genplus-gx/build/sn76489.d @@ -0,0 +1,31 @@ +sn76489.o: c:/Devkitpro/examples/genplus/source/sound/sn76489.c \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/sn76496.d b/ genplus-gx/build/sn76496.d new file mode 100644 index 0000000..bb72c48 --- /dev/null +++ b/ genplus-gx/build/sn76496.d @@ -0,0 +1,30 @@ +sn76496.o: c:/Devkitpro/examples/genplus/source/sound/sn76496.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/sound.d b/ genplus-gx/build/sound.d new file mode 100644 index 0000000..ee625d6 --- /dev/null +++ b/ genplus-gx/build/sound.d @@ -0,0 +1,30 @@ +sound.o: c:/Devkitpro/examples/genplus/source/sound/sound.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/sram.d b/ genplus-gx/build/sram.d new file mode 100644 index 0000000..3004c07 --- /dev/null +++ b/ genplus-gx/build/sram.d @@ -0,0 +1,31 @@ +sram.o: c:/Devkitpro/examples/genplus/source/sram.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/ssf2tnc.d b/ genplus-gx/build/ssf2tnc.d new file mode 100644 index 0000000..80819f7 --- /dev/null +++ b/ genplus-gx/build/ssf2tnc.d @@ -0,0 +1,31 @@ +ssf2tnc.o: c:/Devkitpro/examples/genplus/source/ssf2tnc.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/state.d b/ genplus-gx/build/state.d new file mode 100644 index 0000000..c3761b7 --- /dev/null +++ b/ genplus-gx/build/state.d @@ -0,0 +1,31 @@ +state.o: c:/Devkitpro/examples/genplus/source/state.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/system.d b/ genplus-gx/build/system.d new file mode 100644 index 0000000..0bb8e96 --- /dev/null +++ b/ genplus-gx/build/system.d @@ -0,0 +1,31 @@ +system.o: c:/Devkitpro/examples/genplus/source/system.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/unzip.d b/ genplus-gx/build/unzip.d new file mode 100644 index 0000000..cba718f --- /dev/null +++ b/ genplus-gx/build/unzip.d @@ -0,0 +1,35 @@ +unzip.o: c:/Devkitpro/examples/genplus/source/ngc/unzip.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/dvd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gui/font.h \ + c:/Devkitpro/examples/genplus/source/ngc/vfat/diskio.h \ + c:/Devkitpro/examples/genplus/source/ngc/vfat/vfat.h diff --git a/ genplus-gx/build/vdp.d b/ genplus-gx/build/vdp.d new file mode 100644 index 0000000..c6ab91e --- /dev/null +++ b/ genplus-gx/build/vdp.d @@ -0,0 +1,32 @@ +vdp.o: c:/Devkitpro/examples/genplus/source/vdp.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/hvc.h diff --git a/ genplus-gx/build/vfat.d b/ genplus-gx/build/vfat.d new file mode 100644 index 0000000..4aad318 --- /dev/null +++ b/ genplus-gx/build/vfat.d @@ -0,0 +1,3 @@ +vfat.o: c:/Devkitpro/examples/genplus/source/ngc/vfat/vfat.c \ + c:/Devkitpro/examples/genplus/source/ngc/vfat/vfat.h \ + c:/Devkitpro/examples/genplus/source/ngc/vfat/diskio.h diff --git a/ genplus-gx/build/ym2612.d b/ genplus-gx/build/ym2612.d new file mode 100644 index 0000000..f5b4924 --- /dev/null +++ b/ genplus-gx/build/ym2612.d @@ -0,0 +1,30 @@ +ym2612.o: c:/Devkitpro/examples/genplus/source/sound/ym2612.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h diff --git a/ genplus-gx/build/z80.d b/ genplus-gx/build/z80.d new file mode 100644 index 0000000..faa79a5 --- /dev/null +++ b/ genplus-gx/build/z80.d @@ -0,0 +1,33 @@ +z80.o: c:/Devkitpro/examples/genplus/source/cpu/z80.c \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/types.h \ + c:/Devkitpro/examples/genplus/source/macros.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68k.h \ + c:/Devkitpro/examples/genplus/source/cpu/m68kconf.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/cpuintrf.h \ + c:/Devkitpro/examples/genplus/source/cpu/osd_cpu.h \ + c:/Devkitpro/examples/genplus/source/genesis.h \ + c:/Devkitpro/examples/genplus/source/vdp.h \ + c:/Devkitpro/examples/genplus/source/render.h \ + c:/Devkitpro/examples/genplus/source/mem68k.h \ + c:/Devkitpro/examples/genplus/source/memz80.h \ + c:/Devkitpro/examples/genplus/source/membnk.h \ + c:/Devkitpro/examples/genplus/source/memvdp.h \ + c:/Devkitpro/examples/genplus/source/system.h \ + c:/Devkitpro/examples/genplus/source/io.h \ + c:/Devkitpro/examples/genplus/source/input.h \ + c:/Devkitpro/examples/genplus/source/sound/sound.h \ + c:/Devkitpro/examples/genplus/source/sound/fm.h \ + c:/Devkitpro/examples/genplus/source/shared.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76496.h \ + c:/Devkitpro/examples/genplus/source/ngc/osd.h \ + c:/Devkitpro/examples/genplus/source/ngc/gcaram.h \ + c:/Devkitpro/examples/genplus/source/state.h \ + c:/Devkitpro/examples/genplus/source/sram.h \ + c:/Devkitpro/examples/genplus/source/eeprom.h \ + c:/Devkitpro/examples/genplus/source/ssf2tnc.h \ + c:/Devkitpro/examples/genplus/source/sound/sn76489.h \ + c:/Devkitpro/examples/genplus/source/sound/ym2612.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80.h \ + c:/Devkitpro/examples/genplus/source/cpu/z80daa.h diff --git a/ genplus-gx/changelog.txt b/ genplus-gx/changelog.txt new file mode 100644 index 0000000..5a99184 --- /dev/null +++ b/ genplus-gx/changelog.txt @@ -0,0 +1,143 @@ +The Genesis Plus Project +------------------------------ + +CHANGELOG: + +[Genesis] +- improved big endian support in render.c and vdp.c +- fixed leftmost window/nta column renderer and implemented window bug (documented in genvdp.txt) +- fixed border color update +- fixed VDP address register latch +- corrected VRAM access timing so that it does not interfere with DMA timing anymore +- fixed READ_xxx and WRITE_xxx macros for portability +- added internal game database to detect games using serial EEPROM as backup RAM +- completely rewrote EEPROM emulation to support each known EEPROM types (24C01-24C65) and mappers (Sega, EA, Acclaim, Codemasters). + This should fix SRAM support in the following games: + . Rings of Power, NHLPA Hockey 93 (EA mapper) + . NBA Jam (alternate Acclaim mapper) + . College Slam, Frank Thomas Big Hurt Baseball (24C65) + . Micro Machines serie (Codemasters mapper) + + + +20/07/2007: +[Genesis] +- corrected TeamPlayer support: fix multiplayer in Gauntlet 4 (Sept. version), Pengo and a lot of others +- added J-Cart support: enable multiplayer in Codemasters games (Pete Sampras, Micromachines games, Super Skidmarks) +- added serial EEPROM autodetection: fix games with bad SRAM informations in header (NBA Jam TE) +- added SVP faking: display 2D graphics in Virtua Racing (the game is however still unplayable) +- added support for more internal IO registers: fixe some unlicensed games (Wisdom Tree games...) +- added preliminary support for unmapped protection device: fix some unlicensed games with special built-in hardware (Squirell King, Lion King 2...) +- added "Soft Reset" combo (in game, use L+Z triggers): this should be like pressing the RESET button on a real Genesis and this is required + in some games to enable special features or even complete the game (ex: X-Men). + +[NGC] +- added separate configuration for PortA/PortB inputs (GAMEPAD, MULTITAP or NONE, see Joypad Config): this let you setting + PORTB as unplugged, which is needed in some games to access special modes or enable cheat codes (Alien Storm, X-Men...) +- Freezestate & SRAM files are now compressed (using zlib) +- FreezeState & SRAM files can now be saved/loaded to/from SDCARD: located in /genplus/saves/ from the root of your SDCARD +- changed initial ROMS directory for SDCARD user: now looking for /genplus/roms/ from the root of your SDCARD +- added user-transparent SRAM autoload (detection order is MCARD then SDCARD, SLOTA then SLOTB) +- "System reboot" is now used for console reboot and SD/PSO reload (if detected) +- added new font: now use original IPL font, extracted from Bootrom +- modified controls when going into the rom selection menu (DVD or SDCARD): + . use B button to go up one directory + . use Z button to quit the file selection menu + . use L/R triggers to go down/up one full page + . use Left/Right buttons or Analog stick to scroll the selected entry's filename when it can't be full displayed +- various menu rearrangment, minor bugfixes & sourcecode cleanup + +21/06/2007: +- added 4.7GB DVD support for WII drives (the maximal allowed size for Gamecube DVD is still 1.35GB) +- removed MPAL video timings, always use 60Hz NTSC: fix display problems for PAL wii users (no more PAL50 version needed) +- added Console Reboot option in main menu (IPL Reboot) +- added Multitap support (EA 4-Way Play and Sega Teamplayer): allowed up to four players in games supporting those peripherals +- added partial Sega Menacer lightgun support (use Analog Stick): automatically set when detecting the 6-in-1 Menacer game + +18/05/2007: +- you can now switch between FM cores without reseting the game. FM registers value are automatically restored when switching. +- modified PAL framesync a little bit: the 20ms period is now applied between the start of 2 consecutive frames, +no more between the end of the previous and the start of the next one, which seems more correct to me +- removed the previous VINT timings modification because it brokes some games (Rocket Knight, Thunderforce III,...) +- added automatic Timing configuration (VDP latency, VINT timing & alternate Line Timing) at game loading, based upon specific romname detection. +This means you can still modify some of these options afterwards but they are now automatically set/unset when loading a game which need +special timing fixes. These fixes are also automatically desactivated when the current game doesn't need them. + +For your information, games that are actually detected and need special timings to run properly are: + .Legend of Galahad & Road Rash series (single line not rendered properly) + .Sesame Street Counting Cafe (don't boot) + .Chaos Engine/Soldiers of Fortune (graphic glitches on scrolling) + + +08/05/2007: +- corrected L & R buttons assignment: fixes Genesis X & Z buttons being inverted +- VINT timings are now a little more accurate: fixes Sesame's Street Counting Cafe +- SN76496 MAX_OUTPUT back to normal +- modified FB_WNOISE value in SN76496 core according to John Kortink's last informations +- added support for Maxim's PSG core, same as used in SMSPLUS (it becomes the default PSG core) +- updated FM core to the latest MAME version +- corrected DAC output level (fixes voices and some special FX being too low) +- added support for Gens YM2612 (FM) core (MAME's one still remains default FM core) +- added configurable preamplification for each sound cores (see Emulator Options) +- added some other configurable sound options (boost overall volume, FM improvment for Gens YM2612) + +11/04/2007: +- corrected MAX_OUTPUT value in SN76496 core: fix PSG sound (SFX) volume +- removed unused sound buffer allocation + +26/03/2007: +- added DVD automount: automatically call libogc DVD_Mount function if ISO PVD reading failed (idea taken from softdev's last neocdredux release). This may be useful for loading roms from a DVD after booting from SDLOAD or after stopping DVD motor. +- added "DVD motor off" feature, like in others emulators +- corrected Memory Card mounting function: EXI_ProbeReset() function was never called if the first mounting attempt failed. Should fix some of the "Unable to mount memory card" errors. + +22/03/2007: + - added SDCARD subdirectory browsing and LFN (255 char. max) support + +17/03/2007: + - remove some rendering unused code (only used by DOS version of genesis plus) for little speedup + - added an option to enable alternate line rendering timing (fix single line error in Road Rash series and Legend of Galahad's Intro) + - Color RAM update now always reset color 0 to border color (fix color glitches in Mortal Kombat,...) (thanks to Noop's for the idea) + - added last Softdev's modifications (normalised memory access and ASM GU functions used intead of 'C' ones) for some speedup + - updated gcaram.c to be compatible with last libogc version + +09/03/2007: +- little rendering code speedups +- modified HV counter tables (fix graphic glitches in Skitchin's sky, Lotus 2 Recs, Panorama Cotton, Dashin Desperados & maybe more) +- completely rewrote DMA timings emulation so that it works for all games (no more cpu freezing) +- added all DMA tranfer rates handling for each three DMA modes and added dma busy flag emulation +- modified interrupts handling on VDP register #0 and #1 writes (fix Lemmings status bar) +- added VDP RAM write latency (fix Chaos Engine/Soldier of Fortune gfx glitches) +- modified FM timers handling a bit (fix Vectorman2 music) +- corrected Sprite Limit rendering (fix Sonic 1 & Micromachines 2 title screens) +- corrected IO Registers writes (fix Decap' Attack controls, no more need for alternate input) +- corrected 6 Buttons Pad emulation (fix 6buttons detection in Mortal Kombat 3, Comix Zone and other 6-buttons compatible games) +- modified sound mixing a bit according to Generator sourcecode (FM and PSG ratios seems more correct) +- added separate CPU Region (USA, Europe, Japan,...) & Speed (PAL or NTSC) choice in menu options +- modified main frame synchro in PAL mode (fix sound glitch in this mode), thanks to Softdev for the solution +- added savestates support (go to SRAM menu, memory card supports only) + +07/02/2007: (Eke-Eke) +- fm timers fixed (fix missing music in Castle of Illusion, Quackshot, Undead Line, Wonderboy in Monster Lair, Cal 50, Turbo Outrun, Thundeforce 4 and maybe more) +- added complete EEPROM emulation (save support now works fine in Wonderboy5, Megaman Willy Wars, NBA Jam...) (credits to Notaz, adapted from Picodrive code) +- added preliminar dma timing emulation (fix bottom screen in Legend of Galahad) (credits to Notaz, adapted from Picodrive code) +- hack: clear Vint pending after Hint (INT level 4) acknowledge (fix Fatal Rewind) +- hack: modify read_bus16 to return a random value (fake fetch) (fix Time Killers) +- modified cpu execution timings, with more correct hblank and interrupts timing (fix ISS Deluxe, Double Dragon 2 and certainly more) (Based on Gens code) +- modified busreq mechanism: better synchro between z80 & 68k (no need to dejitter anymore) (Based on Gens code) +- added sprite collision detection (fix Strider 2) +- modified dma fill operation for big endian platform (fix Contra Hardcorps gfx garbage) + + +Based on Softdev's initial releases + + +WIP1.2 unzip.c + Added partial zip support + +WIP1.1 sio.c added + Added six button pad support from x86 Gens + Additional changes based on Charles MacDonald's gen-hw.txt + +WIP1 07 March 2006 + Updated SN76496 driver + Added GX Hardware Scaling \ No newline at end of file diff --git a/ genplus-gx/clean.bat b/ genplus-gx/clean.bat new file mode 100644 index 0000000..5ae4232 --- /dev/null +++ b/ genplus-gx/clean.bat @@ -0,0 +1 @@ +make clean \ No newline at end of file diff --git a/ genplus-gx/compile.bat b/ genplus-gx/compile.bat new file mode 100644 index 0000000..ac08cdc --- /dev/null +++ b/ genplus-gx/compile.bat @@ -0,0 +1 @@ +make \ No newline at end of file diff --git a/ genplus-gx/compile.txt b/ genplus-gx/compile.txt new file mode 100644 index 0000000..8800478 --- /dev/null +++ b/ genplus-gx/compile.txt @@ -0,0 +1,6 @@ +In order to compile genesis plus with actual libogc, you need to: + +1/ download last libogc source (04-02-2007) +2/ replace gu_psasm.S in /LIBBOGC directory located in root libogc source directory by the one included with this release +3/ recompile and reinstall libogc in your devkitPP environment (type 'make' then 'make install') +4/ compile genplus source (type 'make' in genplus folder) \ No newline at end of file diff --git a/ genplus-gx/genplus.elf b/ genplus-gx/genplus.elf new file mode 100644 index 0000000000000000000000000000000000000000..1f5bcd3549f555a7de90c6c16055ae843e686924 GIT binary patch literal 2476501 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/);KNH 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
  • oWqM5kBK4M-T^ne8!gb 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ξzpzH#eGKoi$@IWr3|C_rO8IiOLL6& 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
    i z4r_FOSUn*Z#Z8~l1AGQ2`3xQ?26MsgITF{4xD}mHfKm)o5qQ`{W5c>4T|b0uLBYALxane z(gshG5H$J%`0#=Pf8T!K&%iEaLNN4OSRNQ=4_vY+fC`^wKy4rowk#Ys(H9QM9_kKg ztZzW$d;^lRlnf{y%LfN^0rKpEosK7Swu1qo=^!?4c;`A$0UqpSid$b^R}AB{8>GF*E=&*%>IJj(;GRTR_DZ31oUz zsqkl)qD6&IJz~)7eiegkOkdfRP7HFZ%ot?ThxNXmG&_M`M2xMqMqf&^Tf+844>nku zocU<9dQl^Lu+cL~7qb(PRQ&!Z`xwdz7%PYNTq2!^c9@oM4w4rDn26b7qO7Ct&9{{> zlln0k2xQ6PpO=$j6GZ6U${Ta3_Wqy>aiuWn?0tFtObp zq_^lN9i;_B>CNdbw^g3hpxE;SiX2*1nVr0Zrl$igfx5UY*l|R6LhKdkzYB z2+q$$C<EClgewnwQ%3+Fc>?8(KTl#*inCItK3qxDpxMYW-)%ApuPN5MYW zmgA=~&>kgBsm@Pj*pm_8$qgX6XA-7=r)E%F>0K)D|746u_H0GN$(#~RTV+B{d>-){ zF~AzV8u7}B3)@qgC0>b@DqcD8)|7fTUQBg~SKnpOi+GWrlk1BYk1LFw#H;UCR1mM6 zT$H>HQbfF_>;tEn3XFKU zWY1PM+)t?nwj^Htmm^-|F==c-yruvJ)9NH%{fDY}O@+6n6}j=^94GPWhYbPaMgCO& zX|8iPQ0cb0p(bP4-l_@-)KFj(SoS<^t3vZ_ImnvQSqAE2JZwY)s5G* zM39m|iip>=Dtea+jCi?Z*H)oaQ)*caMPO!64TfWsq2+^O1cqx5ijzm`_``ujrA+(L9{}=repn@-tqdC^embn zUek#c|N52mIT(o7g*hn3`X!WH4!pe|2VwwFYfWgn=o+U}ua3$A!R{bT;eLIcQ^dGVoJjoW*0?1YsnO4B8_C)>)Qf z4Cg*Z7zu9#?G!KuD8^)0RPXqpoeD-~5J(B`{Q>W51HFI5?{){Ts0l|cMf`t(*J43_ z=(7=fP-_-v0u-gE6QDs;y4;(iN3~P!wvxYW2T0F|1krL!Cmws1RB$kpGTh zlLHocfv2Ur)jNhV15X5_qv3$UU`)_XMzZ%A9<(qm1cq5d0x_kFt_uXMugJHCgkmZx zu0r*s;^xLk4HqYDn-_C^1$bYhX{j|NKjwzT?1{OS%(9s4uVzm=6xH&WQmKBcsuk4w zkD&FPs#c=f>t8|ZdsVH9SxQN*s#Xo=fVDwOZV~Ju;UMY>e-2u5lVA_2VZGmjLHyDZ zG}%LHSs(C7&}vilEv#>z9>i}53BQi@KD&eX-5#lLm-Z`y*3YV5&wAnuK^s-dYmoZ< zApi7?^_{HuKNGa+Nz@xz4^0l*?11_%X}>pUGZLupmiDg)ZCt~!zK8XGy@EDE!1`X+ z`)&`~_#f;0r2l_{c8sd;7yg4myR)h{v7YdF(2iC015$4Y+H$dA4>`zszuchRUGWbI zzfaJ{Mu+m7S?`|^v;jHR53`=QC203l^%mB9PYv4fs(ys^zLy8>UaEdn_*p?aLDi2* z|F?rSvMsR09&()Z{_g}i&9i=j^$_~^15Rq}At!|ofAvTGK74@3dhZ8ml_@w;mnn3Vsd4 zH-$c%5@34RmGGB+Ur@ZLD4XE1{x>2e(CBt}%RT}{OM*84A}25`j3h?3$g zLCJvE>@WErz!4q`A*#JM2JJ5tTHv$bn?d^o1tc&5)MEhBL&&ML4}&58NvTNB58D^v zD}vrrRs@2fi%FEv70%lf4B(_;n+V}|QbE|x zD@Cb+!J(h

    xawTch|-Hb%j}Y>CA~S~h}tz-hS~mA&m-zNN(+0`n-M85I|ttpw?A z7iD7zg$5^pC@1y}+Ak=7z(Y|fNY4>L`y0bUm_!^8$zuR$h(3Vt$K!(0d{=W3mX=FW zf-{q@$IKADjjdsPR0Ugsiz)P?8UQ5v?I3S!FD%f{GQ_CAfbk((V12x3JIsqd8C(v- zqkq7EIz_|yPQ4s1DT7EE?Wbgu%%7C*G#i?!7|`fcf+jmr8X>aN3LF{1hz8a=-59nn z#$tJK347eZ|7@p7wDrhOh@5CF5<`k1!V*;m=L`#Q0|DIk+8vC#8M6dejHsK)Nnq^MBlx4b>1XLM8mabF zF!VQ>W)jy2LkC@1CCJK8g7(kCVm8Udt+GiTAq+hfS%hI@)o*(+YLp`^O6~@QwG(zc z8H`%(7$(z%GE5$&(Q`oP?}DM%oc^JIxW;?|T@MFCQI0VondQY8^{9+d&lDDeX?zsE z!HSk19JH(h#CPXL+{OMb82xA9`w~nh`9~alzd(J65B9Kv?@Kb#BFl&GdOyBn9$`Gt zA{Qm^f8kqk{kZTb1}+GunEePM@O?=kN|6uWG2BuD-}#se^Ajk|z_&+M`0h+F0QdQ6 zD7kFz;5$D9l&lD7L3ihIXa;=eV>tPebb{~B*f0{``S~bi{&D0NfWm+2Bm&=^Z&Ucr zFGmahnr%CL=VL0%KN4X?GC*D2Xmv(h@{ge48>vBoK$jjM7cIB=QB(fuuss9E=)r-& zhp{u&ON>CKeR%v&COz zDD|UA(%LVLfq+=8U8J9c^u>ED{+!6ATf+8b)k^wb(LYZ~pXf=Sq@`myyetVNS815$ z({LHUdKnSL@liw9OQB)qH`Z)uxD3-;LAhw?IuaTxlm<*`j{R3?4YYrkl3whWejGwh z_@(oYP1l@fl|y;~;yklhNxvQao0RmGp7aWzbovg#S?!Zv&;lU@gkyVb7f9du7wc9? zpIIEXXJP$^v%7vA2;}i3hv?UO((mx3=h1hNzSSpv=0ONKc?ZPxA9U}AgDCvLl zq+`FZv%njyU~Eo@(&q@@3h%iMsH{-!7WuqXYZ zEG7LNpY+0d2x;(3-vH_J;w`=!y&OQB6D!iYEr9d_B^{e82Q!$J9osLeRnlb_p)r4X zEre`wqz}jY1|GGR_OpT(#LtOEX;b3=4DmZhNLYiIr@Qp%D_I@HuFh4^0zLv8#7ggG z)toBGsP<{-ejzjzcC&)~v!yw0VfzY9A^=YJWN0|4HNe%b2225thKn<_2DEoITu}iT zm3|GpO~0wl3i3756_}5TPACl<0)dP3w1)9M4Ou=7wORu*+tpB11{vi(4LykcRll@? zGoYd9MA)8tQfW8_4UU%zd>Ur@G#u3$klC(=x#f_-X;`ugap=LnMOZc13SJEjb5Dlt zd3YU(QTMnI8d~)jFwMDM!Wtl6!t^r_L7lfpYe9y)TIONBnYYWQB|aKjs*YJf{;~1A z<6(ONzHQgS!y;UMZ!&lbgiHw*W3pZaXuyrA@!xr@NwI<(r8XDKQ_tDh=tqa``CGzv z@nNWm=Ldddz}S(pyn#51wf2LFaDJ_qzS{naEu#h^iV=b;BEkYu>v>4$MVV=cw;C8mp=6__R zhi}D#^FhECpcpDsoS2o%}A8@6#Q*!(Pj4GRviy|MZ6$c~eRLSs$UcsooF2Lcy-8H_G* zHipp)G5BHXfU}5?(rQ*9aOtPPsCsNzW&6B?9BeYVlayz?LJRaB1%$6YWd(l&gf9U2 zO7^-4|E&+&6Qgi zP9CpBZLb4pjm_@DER+hcB66hHJ!p@pF3d$Krt_Txolpd45m5zp78X+?+dJV~2on~T zkzyc+2u;8Y#T;3PG+Ic|dpVMTix6T_SXCw#7gmBEnROg4Ew0kSJd5eT8d_jjEEX&P z6*;mHK3d4d&C8L64Iu3V$;gp}$I%9MmB8$hT+=S0Wl)GQQV#S35Mf&hyjda{;drwI zvs6hzgl#%UN?=3DUUH2b@yL#og+gOZ)$k~Qmlp^WYz>CC1Kzl+N?O7XDYo;Os837+ zdHy$6@KvC`WN+BMYPXB}Lq6319UVN>^DO7h>#s?TsPDax5+SG=l*mET#jiBP!oi1)~jlZ8TKO_#uIRvB*NG2k~@+62)#7aQK zUv(O#6&Cvt-+w*~2I5N*;3Z6Sh4>~1@%;uV#FJmz;6waL6Y-^(^h&D@#P{2!5Wge^ zqDwkLd_OEOjM0)zlzh6S`5y&86F(-Y9Us4LXWR)RNBYp{TM1*-3(}9%{7K;T_AQ^~X0v|1rq;L_xWD7`j z=w%?j|6R(itCN6@Ow%r*B~y=K7YF(hi16ms@aEMrqdVTbIt!GX2-`H`uZ9g*H6&+(EpB zp<-6&pZ8(!ZsF3|o8zqkF5(C5#9v8-Am}hk3vhT=AKBT=h||x4`T@B7BI>UO>aT8x z`hhcHG*EvHCa$u57?GfUMv8;_q`rYb^Z~`cW~V|rZ=`1w>1VnQc)F$diuIyTh`C@5~X_wH_B1X!A;>LsCT$+O-zHm^#G#3<^RU*8J-T%^hls%Ma zpxz@pP8Lc-glc#cz#AM0WIY)SJ>W^VSrpah^Zx?m!^CW@Zwt&Q`(?ERkT4h%` z=K1n=^SsbHoad8y0)RKm;mvYm{wU7^<$uoe<*=bVa-R3dj+2E#W7|2Ih#!=Izvbx` z4DIwIekVXGh{tQF>z$2twbUHMUn4aleo$i| zz+Z4FZ$UW$91i&@I2(6HMjf~$=F3@*!e$5ak`Y7BSEyf(iE;&VSfRevLH(eg73#@f zuHQWJ1bbxX-aJ3}Hih~XaS)vcR>V9%_;MAe6^QPNOuEyVnS>&-?FjWN z5Z4v5KXn4K0&!g-ag9LzkQjyf6?te*33 z)jR?sP`?u1Tq!e#OQR>yaHN3x&p-s^QT> zVE7Ng(6fHjKkJ}=1a~(#ge>b0pnfH??7A8k^_zUC-)x|Mi-Gz(UDOZViHmExW*5pH zAaz6^A~H{&Fetv}S3Fj5m$q^@8^UnU%Z$rVz5iK>>{)pXY$r3o8$J`m!fH?f7_8z# zEO~KhnUfd8^!|tZifWw;v_ikJbXJ3kBJhiiycqVN%8OMo5Y1IQA}@yN{m-fdw2(F3 ziKI{xVUCG1MiMw)l}3r=Iw4z?0g7P3Knq7dJQ;(M4ro%u5xRLXOz(eI<$%S^_2tE? zT+*n+kVp%Fy;Vpu5$5K_Dmt(*!eX&N?|)XoN2?@t+`L#-4pIerc@d+@djGSkEo@(x z(9SN>0ugqxm)`$e2X9`N!4{4;uS*0aIl?xM1$l8DY`Ct5Tq7?$vg2f-&{)$Y0p`UB z?0+WzB^dgXKQHh$O05Q?c(b#-!Lt5?xC$xHX?XWV@w5ssk6L6k!nm6H{+ zUX0ZDKi2~Wm7FwGUNk#-k#Y|3d?0L-e|@FO3!V!u!|!CsS1WWb=E3VRfnF~c*zS#I zioXA;3_x^NM|qK=?|&*|(PAi+yO9)194W@^OJ&H5%Au4>!SBlZ2yYUIUgBQI7XFINB0yjYFASRI)c9@%lS zQ2s|=jGBORL3A+0zp-#{JfG(?vu4y>%+4*r5dYv3+!44PeJdEk#!974I)5`fj7`*A zNSoC)VY{l_T~6NirOiLl!8G=d~vOHnKnqK7a zBm+i$9gzH3-2}2fKOia%6BJjC8#2T8nrehevg5KWCp%JSsO%vBhEkOg+)Z6prk{0o z+yJ=TAXnFJcBCS?d1}4^i`$x%jFij8RZ4`p7O$ZL z#aP2)v4D#svSST=v?iBkyVTMs}nDR?Lny$57hZ*+trM3Nc2?ft~^pnY#ww ztV(1H$D36FP+~|iY~xt4YE;37s&aDg;D4Omlt*@)EEF1Rs)k1iIT-MDFx2GFjwT>> z7{4>TV0bXZfAJBSF+31Bhks^S^_^w?fMlpbZr+&dCPSMq8GaPNJ12^tq~;_8Hu*>t zCc`-w!2lq5ZEV0NFsP0e6%i!M!E=IN5hyW z27=F7ukG3o?%{TJk=7J3QVtY51A22Eyt(cqTR7fa*8<8>QViQPf^UQkH%ej|2=>U1 zlZ6tQ)Yx(12Ll^`%0=TWdk|20V{X{K312*59>;e?_<36QoXbB@z=saS_!c6g5c6P5 zAGz4%j1Mw@B@-Vd*Z`k=4S_+O`>Dd`jfWtT?iG9%#5wrP_=CbH`8T$C_$LxU4K@$(3=VEywK81DA#6k4|&<{pP)cCAM&WSJ=1J!U)^VG|dh)h9qAmJEEJ#{(|xx~T@G!L&q|kARnT-je3V(Q z@V&kgO}21^?hYdJ8ZD2kY7b-H_G31cuL5Sq$dh1u>}Lww;bUmQ^z&hR988~?r?HLqrM|hl*u(bt-zaR~0swB{ z0Yb1nGwjUWO`1lF&!u?v|%x^JswwR#P$aGXoDoIi|q}?ATg^AY>)r9w(B%7 z65Gx$&^EM2*abCNJ%`&fDiBHHqz-y(lL-!uI(OsA$wQp+yV5>qJ8+2S|yC28LSGLW$%$Zm&54 z$}v(*wV4Sz^L20*N658GfyQt=K^a8eTJ%}Q{aJ+fz zAy5uS*ru_4Ya5YBu7Pcj>^NB{GDOqK#P%fqBKR${ESopwwvugFT;QNB#24r7yTPa$V!9*XvFTf{cvvz8HV|U@3yX!oB zPh6z%eH$QFOW!Mew>bFD#@Z5n0Mfy~O@H~qd%xN3?)`3q3vX*CL|lAl=A{1^SOtdf}i2Lm<5@W~pw>N^ao9#{4!;=#;6uxgqn%&Nn z@$j9k*MDK{H}QS@J~ZDSA(0jUL$~kO!aR%NAQ5j`Ongto96@~F4nN+0kRn}t-+mM% zV$s0sjZG1i7r>P@?ZRuf?t)x4@~tF1>b@s8uo+6GV>*~iE|js-UxwFq4;Z7}ie zksT)sr8z>i>`QX^S2&mdpJhJ+eAgZe+nc?8ccX9a##TY_J?U!oPXCTT*uEnKw8=aD z*}R+^6eHN4v>_naz9S7SvY^$6?Mb_UKwffi&;6KzZLA5-nKEah!uB0-<0krDusz$o z^O$TaY?FV7Z_hp3d8UI(z}tdi?ztx;J&Em2*(e?ExhKy>XCP%07VJ$Wbeac8CMt}PQq8021#fOH zKoMU!-rQUWN^yj38rz#|z-=J+4*tj4b9-dR$wHAK8ma}`)0%)H;>V+BlS>t;PLa`;A(~LWJPrX** zd&_Z%P6jJt-#ztw6_G8c(IS@4bs|E_mR3>>v``u1erGHtlIyts&NxsKNikiIuusJv zjdyx?CZli;@bEpAZ~rKdtP~pWz2m=gC}|NAX#p^FX9^01xfb6^6`7yI zcfv<^3fG;x@5~3O0KE)+Pvh+e?K+0i*3K@{jz`!kzz_&+soGcU>qUmJrO)h)`_^$q&W&acS-irC^u8@oG79YOf(fH2I!+l=} zO-oVAfi`(hUsxbdFf4S^;jx1E^jpi=(C`#}n_C)?9N4-YY%c#!4j=<^F~JsA=nQz* z$bk2}47d;*RA#_dz_gBsIh6ssoD9hQSY-hD+Y)^l&}?SFRzP-ZD}&``!1QvJ0oxkU z^$1uI88H0<6|-%7(BdFt;KWQQdr2|y#FzmY+YVA9xlVAl9RlSrDQ0lsqv>C&4A_Rb zV%upn@iJig^I9HR$4sPcJ4#xFL|OopZ9Argc^1<_C)wVxm{Gbg3RGmkHuz{;E1S3( zP!|KYGxv=QxR77}V4QU<`%JrpCOZ*hq*QYUdcn53eJJ7!$D4KgK{*g%8^?kSs5?Qt zl51puM|PY{N}UYRP%Sh3MTe0AbB|j#ze~R>6t?d<=w<+JAlzHSZ*&Iy0=pN!k-sY& zr3h$~H}bw32K0-3kn#FasNBKpH}Zui^|Sj%{;oW<%Eu5K{L32fi!IntIp@>wjSOh@ zGT@>?Dg*8UOz%Dc8Il2)yXVtie4;Xd{JRb-)N}uSxjvtk(~TwI0mOH4lkR0e-U^ig zcY}R5ccBp(kT((S5wp9?QEC_iCuTyaAjQCw&VajXD3M$zICs~AQb&pz9QZNsq{@K1 z>(OKvns^zIhZUDd6V^@>X?Hh(E@uiuA}yfB>_uUo#dM%h42zio7j;5AWWe3KP)v2NWSTGc(R$l__BaZ_1i;XdwU#gb)b%^{$gCdT&@qQOl0q% z8p116XEUGQMFD*~1mDZJDxkXu)r*@I(8=Gn~Cxi=Xli>`J;Bb1?}M1%$axHpRu$#r6IFJ_E;b4f8{fcRhXjsp6< z`Djv#CLYi)*@X_2M^>Q;^m_|Pi;zfg(BeWA3iB+c14~FTEGEz|ISDF&elL7kRil>y^!yxjfL-^+p|snC2`wSQE~v?`L@(HOUkZx&!tv&PX`p0A*rtJgUop6q z^NB{GDOqK-0WPo068?ncN9%n;blA7q3;0`&L- zb4Kq#U{12yiiA=Pe5QH$y!3YppZ8&ztfyxMpL4i4$Yy*-g~BKKJBIr38P?AnWC?fy zl#qeX8JPWv&mBng9mhMu=Zu$?M|bQ;i^Ft|<58hBkzz!f$`H35hbfU<$8|eeKsic^ z={kh%(zO^00<_~eMi@X751*IjX?bAnIBDW@#|hFRB+>$4V8=-<%(IvdYGZrDV&e1C zI#7Yndibb5#3n92>k~jq1j)eXrAN^Q6Zr$=_2OiH~B(R4ELIco;+IctZ7Uu2`Su>HV(`ALD9_XCBT zB`2)5LbZZB{xfdZ&9Xw+IT5O;-SCzb!p0f3`KaCeffbVb#327YGF+8}u%!TR4r+M) z&fnNV?F!V^o@a%&O068V)kCe&HmNPcpM_c>cpYDn@TL7bZ&;zbgfkao=Fa<<@X@cB zc++CBU_Ckk?)L+A_aCB27w-2T1Br?2!CiVZ zqY(!BKn_ZgX_(MtwlxgHNN0tVaSs%sm&~t@J0HM|`#>o*N4OJsf1m+nFS!QZJ+k9v zq3mQsL$z!?E?*D4uYTEziU-~wfb$;4&k|wQEj$FU@Ly5@-lOIV=2oBvyho{5kHj?a z9<@Mt8t+k8O6_v+fcGeX(8GIFiPSXSqZUbR8CnAGQMj@}%WH}EsH^bo;ytQVICJ5r z+1xj;58DrBpzyns%kK)#2knYD{VZFZ*%Q>E_rZL$D)5B}5MahUxIJt?bPROKm@C|! z`s}+@#*qKu0Z7CKh8c53iGC)8O29*WA8a%-rVz$)fq19@rM9DtnT=xr@%In{`j8P~ zp_DK-5g~@6hbk$NTql+fRe=&F#f&9PD8v-S1>&Jv6mDR>j451-4wOfhT%~%qH4h<+ zACjCkB&Ai|vwW3&(Fv4xW{4+9$yXOR-&PGro(6)57)JJ`h8!FXiH%R-Sj z8LHt@D1QL(JQEDvi^Oq1vAvhiTtA9lWj;M+MSYBXdKk`o6yMMypNe4i6=9$q`4l}` zFs<_``W&h0e2UJHn$D-_bET&9Df&FA>GdNTM*wgAh|ZLn&Zp?HQj>g&hO@kUipJcD zUd*RC*V5du{YVHU7Ar^5yTp6FJV`FixlQHLBk<}Ybf^OfrcSs#2G(^hbqYyM z=TawJtAVF;sZ+Gn^xD*^lhkxBb&8Ri@GpX)U-@(CS41dtY2h^> zSL64;HzSvJ!+C#9kzBfRFQBB?rA~(h&rUAAB{jV+b$VNBPA>gZYECY-NX^NmcckXz z(!Zp}(-HQ0o&GH~l}ktP?Bx=c44q30kce?ry@0v2d;Y%0f}SewGL=7_9PX z_ffRse$EM?&ZozLxF@PXSNU|%S(_HDRry5z_q1+Sq!0Py%}w1{Oa9RQH>cq=Ip007LMh^0hwok%|s2a4pM z8EK&GO3c{Irzet8GB`r_Yq%?CLImZJl|tjaecls8Nuv%!qRyu$06`JvTKoi6P`qg| zv*XHNf{J{40!jZwCY!kV^h7>L1t2-$fX~?DGcdv>F=y9p55o(RLxYa!x7ckVfW za+EC`ckVd|N;4@D?!?;k#~2iGr;$${+3~VaBu<7;B%c=EinZy=VCX@AK0Qd3GM^Un zpS7A8UYlZ`kecLE%pdUV=2Ofb;c%Z<@(@}u!QJ2srQ_fOVox5UM7DRL{N!;^PLg6q8NOMB8JoHE zWGhA(!x6f6ApwFJr<8shCN*qwx4b=4HH@|6&XWiFYNZ2OHTs@Pw!(3CzqbaAfMhv zN=Lc$^igodoklKsWXH=wkvJKuC6^Yzj!*rA!O*Y$x%6uyl)1FzXOM4LYjr*sx%3R2 z_b0sm!#-~bFfzARD3WvFL)t_iCtPG=U0phRj8RWghT%L0H3<&U*`!k5m zGmL{5I-N_;0M7f8z)`v6o|#HPiavl|;6J1P!bWnb-I?i`7VwW4xl~%Oa_QOHu>EY4 z%B7VQr+%OwW|v;0g8%GxwAc-n8+@VElM)epz~b56lt``<3K5h?)=9%17aG)3;y>tsufM>UjnYkxPFnMG3QolS_Xp1EqqL2zO## z`qM5Hai@_>9@+7-P$W)M}#{toM0cE|r?jr7o9AP3KaV0;%a->M~PmI+wc4lA6w?F0-YkbE!+A z)FhX>T#jdVUFtGNILxJM5aOk)!uE67C_L{h-H1$@$1~H?jo|S+7R6%)Nu?@qt{KB? z(li^@&ChGMdOZioKWDz1FT=@? zJHh=WC>_3=zvdkUk^SXpQ3K^JM1;~YL;%G7HI&Hq4i@&;f>K9{i3NDDYzqdJ#ttZ) z!M%(tn~x5ZN7hag*!!^r?B5w75$+$+S{TEEhWM*^jZo~(6|?Xl^2Tq#=VdON**bOaU2XX z?u9UlxYNiukL-9^C=w^r%RE^v-G(p3@JIE}`7`c0;+Pp%{yxad?zFn_^Q{-)yaN@I zapi#JJiU5#O=jz$UcI^wlA6xAu7jnfGp_3psp*XCid7K(bjEcZCN-ULU7;I1eX{C0 zLTZw6UEwS*Sst{ z{I0!UWm^;C*Th&k;nmsJR2jBkJOH}NHh!BRFJP}drLv9urbfu*Sqs|d^Y-3%?rK8B znraAG_uRFtN@d%N84z6t7S3Jf`nK#B3LY;49xrmE>S9+YIiy6u1EG4ckP^vtaPVRg zC?%wrIKar4{a0n%i)Cn1g(hCME&CffP##$oX12YE8Q?|9cSEAiwihe3FwbH-km5~? z>HBh0k!>$lp;WWtX4{L~K_bwdaHwdN<2*vc{&E_)j5Q4-?JupAVi-m}_koCPI}nQ^ z`RJ@~2jW0UWSwjx?{T;IH0G#)?EXlT&IIYdk!0r&|uCCv(wVQ32a8Pry?OUli+4h~(oNW7E zYEHJbO3lf(Gg8y*TUS5)Iw9X4`UHl2l~D$`dHegNloZcdkDb7b7Y8 zjgI0;Vl9W&T;&e5h3%JOe38_N^%AiC@)pn~vF4XKiM8TlBn0MK@?X+_-p7sO{92V* z&L?Is<$=%7YrMo-@w!T^ms%k@1FVR|TCr0h;pGroBr&KC5`;oCBar~Sy_`geqWwqiFG~yErnVC zuwrjQV*L%y`v<;4#`1IB^MKMWl~}Pa3%K<%7W-GJ>BNdXC^el}v6v8%AUd&PUy+(l ztk_qjrV}gnkkoWy#r|Dtl31}gn|p~B`b95oo~amE)Ai_D)1!!R+x0cdwCobKPc@H?Oo|gs~i&}80R_b{l)n^$8|;@HH^n^#jnN(0Hvo9i&k(XhYQ zqO{wW3XL{P)k~Sq8#a*kxm^ zZc8~30P?l%_=m-0AlI_19>y|02RV#N+(~j6uVMavEi-Z$ujPTBA2AI0Z1p&(THVd+ zwg#$R+a9)?GaOY_K2>X7Rja9vs`jA}2<<%f+A+`>N7G|e#k;3#TCHxkLRB*?ZEkT? z-R4tuyQd1rL#k@7M5&5Y)w~7tx{g%c5DQgHms;KKp(;%5uj6B0<-qMeRrh+TzErAS zhq~8eB2~SPTzZ|k6fvqB)T}KZ8a_rr>{JdF)QUO4&0sgrJy@|oR$-y{N9(h;@ z>3}yebG_NvflY|Qn-YcgHdXP*`Y)elb$bUk9fpX*1#o~G^S@-wMaJw&{QT6g$I zC(+uSO4-|(1m5N(&~99B?*ct?S%M4Kr9xT7udMD#R0f;=+2|<49>j}RcWmLcvUS~* zvVUfybxx$Re-?ty9Ztl^*73uN#ha||qoC}cjbXbb+fjx+lusG%Dja3&v@%Qs|Kv2# zZe;&F0s6^~l--y{Wy7rQSy0vjTU)RI3OKr-Pw@)7-6tqjI*D4~?v?^1%DS&r615bA zPy+eBB)YM?vZ)1tZRr58E%l%`bZ8S%wD4;S|DGC}91q*?aDkB|>i!EF!W6oZ@t@Vj z>OK>V-pN2Yr$V!OrhsMgQf4#QgbTL{RjK+{9NKdBavY;o{VN4@E)J2Z`0w6aInV089IF0R z8MgnOkhW&ef?|J{KL|6L6_XVZvr-LwMA7Ou6r^T!t1gt`=zJsd97?GdNg*R z4DLNb_ePBD=9N^IWOe@yl)W25+3iH^w-m3z@u*UzQ|Mg)rx6Z*_l)Hti1E?wBWv z;wGy*|2f+C5>a5f`uAkIt0j7w@>-MhaYFQ>)XHfgRuHa~@8zR#NocoKc&`+6*+OKK znaBSiA*p&3R4)ry-TzM2u<(6u(B+55y8lCIQ`3+fA+_nvuHyCOT5&6Sh9VWe52N0X zA-%ogF#l2aWlvk(k3jMJu>1WZuHtw7ir-^JD}LWoj0Kt_e!mEXQ(n6fzrP*y`VJNI zXVz{CTirjW;v-@EXqBt@gkSL&KE>E%VvgtR6~0m_J~|XVGa?lq%>Z3C@)0Bc7K&HB zWp)2A6d$b$+aJWZig^!)J2BVi1IC;Lv=A! zCsOsUu>E1KtGb_Gb$>(k0I3n#xBOkJK8gNq9jI=D%s@w~H(U+Xm7S~}BcS@jTokTM zg6tkCe$|)?e4`%as@{;NRDXz3f5WtL z4;QhbOtX8Y&mwIL&f}=(3u$X3Ml?K7G<}qSS|M|O?y=M6tD6W z->ejWT!@~WnA(l_W8})mr5!20m7nZZ%(r^*7V+cVVf#Nkv?#zrDCY;|?Da~S9&=b~ zOw*b(TJ>r4Z;e#_pAcknGLCTet#?E9+R0XrEl~X*;Qc>52r1Qf`c-c=RBw|S<9utS zQvIKL^lj`wbtCAzI#PXGH>h6ru+`&NRE;eEq}o;8;8*>Cq545j^;cRo66BLmr0P#H zK<9)UG3wj?K-KH49(*72Np;vhjy;|p_3xEx1+m?%Xm>xZ6zeqoq!vBv;DFm!t2F%t zar5ucW#l=*BRZ=mMw1doSICr;YFPZ7UQ8NW#T zxS75Fe5=QYv=77h4D*7v58H9azGFW7)Fr|)ZQo}h^ogYnzg9MUmIy+U&j#|I*E~!g zpK6sUh3M1^C18%5yno@x7wYSnsY1j z83OuQ6RfynnzrH)2t=%71$he<@ADX_i1qQb2S3NCKIf<+JhSh%K}6~}9d&k>vx z*bOTW#(|?Pj8oSV8iR4RSm-Q^pI4w~6|I188RO4uP`C*DEaa9}cun9P^6?xCF{;lw zsz?j@erIlt71sk6p1?p(>~k$dXU9Tx^?Vo?Z&-L@D0-#A!cDjir4=W#P_lhikoSn@ z6@%A7luwj{UeS?-n>WM4d5u=wS+o%G`T{Gm_TkwyM6x6Y=%go?R^xFJ?s8*p=V}rQ)uR$olz&2wF==YakRIXgbPg6-}=|!e2ihsXgnSU zEfFP&^bfK9LDp{l3Iq(`tD$U#JdGlZS3St}l z@fGkVdbSOg&ozn@G5Ks89lVzRn-E;i|4k1rgJmMCRW+rdeRuqcot&wh|#9SB^M!5aeU+9kCUVV6aY|K;d8YZ|j7RLfY0s zJTE5^)t(flawo>W6Suh(S&L_Q;p+kv!wX**f>O+; z9eLsF3PP1!N6FWfpom{gCBXky;6JfTFsj(aKVC%u|72kU)IS)Ey3}RO5Z0(bpwF6M zr@=uRjkYBO0t4!UQRCf4k`e5`4Z!Xj8;t%ySoq`p=%eh9=>h-HdGv>TMiK>r(I07Y zpL2rIvdl?utGwC|eNt+*;S zY6{z@hX!YICJ1YBH%iL@Z^MhXTXCDv>@=30(<#B3&~aBh=xdU#xH{62&Zn^v;FN?U zl4>?#UjnOX(Oo%ceN(O#_e-`$8lFDkwT6MGt5oX()tc9bv!+>b53@Cr>)R5qH5Q9+ z`Mw;oks6fEqttctthnE!^|wg+Z?T+eOTH~fl{1mo`V{S+YQ^nk>wRJSyR_g;Sx;Ny2d#r!m#&j_hoL?q}3Q@;zeqz4Hg%oMG<9)empRzt2FCnb<#{Xor3e zjo)*!!Td;D@3|5xFHg7PTBs6{{2qZ-D&G;6JSN`*Pjc@1z5&Jgq<|{#xmc^j7{1>N zsm2uMsB8xFuutXdP`ThMEA9iT1Ug!a9hEYT1UbrkaH^xq)?}2S002K57nRQ|m8}?l zYuf)%*_sQctiEcL+jF7vR%G30P}y3H0*I+me(pMUdk?L$41DJkL#o`Kp;gv^!ChoW zqim(Ijov7?zsFc&pnkqFoTLITrZnU=7DSWoJfN%tI9DI`Zn6`}0 z;yUFxV>?zohP?GO3eWN#S#~B4$`d@x?p;l1EV1I+VA&bC@yvF|vL9&~6yA#|gh)S= ziIT0*%}+^-oAk3RY4_$Rv(6NtRiV$UdlxCQ&H!v@2(}K*ssgjxXVy0`tLTW;Gm2(y zM>(y{>KUya#&kIYKcCq}8~?1e?*n1KU;F!7dlMK3{+IS6U>?=lIYrLyWcB3R$un@} ze{tdV(j>lEcAG1KpZr@XT^v41)%d|&-EJTH{ZpDY z=chzek|WG{66V}E#_D-B%=rnS`AKbJun*{Y4Xx;d?bckYC-(E$I?Pq~O+A-NZJs)^ z^}JT`7?@x3?cl9_te!Ve-2SlrGrm&MgIePgS7nG>YlvIt6ITFn3ujq9Z-cm>lTmi7>iJxdqQaqIo-1y@Pu%l{I7}B}t6U28d_iinDenG>9PAXU=TV3Y=7mF6 zt}E^XpE$KR&C}M&HaA$Lt&@!|_A?as48&d2$%+p_oRy1mM6WgRxNU|B%hX{rKAJVv zKfaT2t_AY$hZArY9DghhwW;kSR0bR}mk_^rf1B!o@4#l^uvEqACF+|wadIF8d zwqCa9_=kbwd;8P^WH5+oe}%=5YV9NxF01X-+G(I?fNq{_sJ4-6Q?2;HP-|C*L!l%` z?GT?@eCX$k5Fc50XAF<-`Cyh{vf<3Y<>G9`@c*o6S ze2OzY#W;U(yrDvrqDaLdxIaYqM~t_DZ)+=Ww&F1dLTNY@h0U!}JjGCq^M^ZPb^f5E z8>*Dzr~rD#MJkSp16?NH_VIn72NYkk-HN{qila(UoUK}XfuVS&PccqyI>HU7wBmB~ z>;PC%4WRGrXv7cj2K<@~D;{SSC=G|AF*VCpCLTu?7g!}ewTqNmEIXJFLs6~h!=2Ov zt7Xv(MaP1`!8=nld3P!MqSL_R*xNxNIvaHE!y_W{z)!I6h6XDhUtz#D6gWmrFYzn9 z1dd-RM(MdUzCvm`f#X*x9uxS%85B3mipLukhzf@~VWrUGZuW^=Z-@&^?FyaGw@7W? z|L5!c1G}33KfWCo!}v_CZS7a@{VYiqLoy7*WU^}2%BoeXR;^mKYSq-OR)%2+Ll{;@ zlhH64R))zigdt2Olgjdm&pyQG`+U95x#!-!-`Dq#!+D=`?m3V1Iqc#({y~Y!r7(u zy_maKzO?TM$H159fgi`U3C%aK7OBo<;1-mVbN8{_$M<94nR7+oYccTYkw{I}!0EDk zwZ7Lm1|G>Zw7!o+D{0`lt~N{1dyRFFm6W1?0~izVwN&CEpnpsH^hjJEIEabXfISktc_OZ*hU>TSR=vOyggv z5DXh;UpQ}Q_$29U`Yt1LCYyiq5j-+KPV`-eNB)(HghiBZ0QOx^kEjPq=>dR0iOiFa zpjie|Hq7S9=lHJ-PEJ>O{=4Bt25R$=@_}i+Q$a80Klv*DVU;iaje9Yw{_Ak}Ql4O{ z6Hz?&UeOoVS^zPPpbQOjw*%%L1yc>rQJsjUSjm6255kAx(Kry~a?S=p01Gm_K&sR5 zTPI(=n#}gL%&84#hgPO z$%5;0oe2Chh3a=9jj8^|4kyG83t~$$Nn@VqTT2iy!!x1gYH4t;(o3^lNn;C~+m>WB z-HX(L;kR5vAQha`(g=cfpBdmp!Ln=_VOCe;4S zRt_{ZdS_#5?3ka|lZTSuaJ zabMB5g+Q?AeR4GjM5#gcD2Z$x=I6I{B$^^roJqf1+M2_EDrqwPXqWODrVkdWkGE8| z=Hs6&+Tw4}9zg5JW)1TRidVfQ`hEtOKA23OP7U+91E$@A*@-bfL9+rR(vGb^kW^@) zw&I&kr73-2^nEsaNoDI%{3|WF{sx`IGzjYh6d;D$%lLA2_IXG*HdV^C|AgAEMjt!_2Ynv{3_jYcObY)T6E z=^Ige^Cu!0_guh4+G`0n7{@hLh?IO;v^B#XChXUe^baY4l6BB2F--jfgW=i4cR!i1Rdk z2T*#R2p)__`oUlItJRP2-pIdzcQ3(mb2N!ocPLsFBAEn7#|!8CtE3Ur#-JZ#lzPlgIs@)+K3+Nci z=@Q8YXd9jN)_oy@uK`d<3R1fUy4D5)1<3~v^O;X&91BTD+f1ww$FV6@oRcs|B}_;O zT9o<1gurctu_h4iUT>Fk$dw z{o^&v8XLxB7}A$#PeIH;TnpQTv>8gP;@VVlH8QSIE8Nu3Vudv!HM;=8--UI!0@1gV zE58%LcvlcGNDUh34jTvuV6{}wV&_D$t$z~IaL9yX+thr{v2>n&LBjOUL5qA}nEqJg z{YxiT5&!uO$lC$UnTo7%=X3`cQJ)jirx60zaHJ)G(ZF&q3&8uBZ^MO zQayihcGpcGRCiIqXczC=-IwTY{M8~DUpAsEq6bIHSO`H&Z9N2fxmL5n&U z6!@_LdtFiP2Fgw6i+)!E#p6NJ;j16t<+IxMOH(NIxHO_@>cMJz=+AVjXgbYLV^v8fzB%MZ=J(O3fE9)H~T6JSgJXz|7@)BL*jfcJz5K4<_#OhOPKO8wM)m@-a zUOG|6(U`qxy$`bBI694X7&RUhM`az0=%pAxj-xTK{TSM)I^yU{mrC))9LJ!}LzvR> z*dUY#yD`5^Kl)j|Q}kO2=2$2~tPV{5R@uxY7Bj4#PK&X5NPNDfC_0Vozvev*Mp0DO zL7XazPODLQ^g&VdrGpYS7J`grLH1U=*h-Xdc7>&*+1kFMUm3x6m{rF8 zon;aw5o(;6=Zlh9h4N}QlvghR%H;l{A6{w$hG`6}&?s1OODcyflt2AAMkO9YYx?uI zDn?DOQ+bxmtDzESAeL}oyf4nc6qKjB;xqwgW{v3A1Dt^srZFf<k_e5`y!-l1xZ| zLTNn5k57ApFtpM1?wZk-4bj^xzCpIX#uOp>=x&G~Qn}Wc zIn)D(tdO~s#cIC++ouRRBoHYKnxIa3GpbacW&eh<{~_^cKw1WpljNF@@vB0lBKpnZ#qpiS@)q@F`skX&5RkPei0xe2=I zW1uXVAwo)lat>y4PMwy_1{(zeVaYVrV@yQQbFgyf$he6JI-{FVtOzRWXfS2a+6|qP zkEaUVFm}-mSl&e<DUeTui*?xwTv20sz9olx3LvWHOMRg;RfWZtt;S{2Hh z3uOdNf<`0-LK-T9<~681X$94By#qw6ZW6RDiPy(_k(#d{lv;srKnTM$hQX1_J!r@m zHp-V43bsCUTbfjgR1R5i1kIy;g+ArUIu=ng_5*ZVngrWV+6*#B1Z{>DFm)~JT=vaL z%_whm6JImEp*pcZgd70#Fet(>y)_H@(Pr*a%+2+HLj)Zbj1)^{^g$7{xlO_jgXb8=KEHRkAC`ggEH~J-s0G>!AatZ9ZqENYse zebhAH9xP+jc?cipZGx=TDQ{-B%Jb~rzDCaOyc)EsCF%B_-FYo2cU6(M=?pvmR1q2t zob$tw8a2)U8^>eeyod;Z7e?I-+R&2&(SH!t zcrQ>3y~954HxW7l7|EGP-5TQ(8zaTScn1*xUL!dNDG!5ljG9T;UFs(Co$n<~GL|rz zuY-FpPI48>t6fpbfwHhpgr*Zpw`p8Zs!^`9QAR41mN6I;r@Z7Iq~ioYF={5+uZmGE z3na<~2#XgO4!J0`y&x6kX>KU*(%HADM}&?C$_1sSap541f?G#xaj+&FE?d5nG3o-? z@dcGoRTZOVc~qX&w&gE{gT=nU#V9XmNBKTi96JB5nJ4fSFrgqdYn+)j&MbxVF5DBH z@-D%JBB<^~q`DlVW>MtUF-q34i1uvr;}~^OA(|I~%n_sZzzWFVE`nxU zRN5bW?^q%dFD;VCFjrE+iB*1>>X`MU_+4A|kO zX;Ob9aY=*wV z-N`@k7P^x^WLh1zqIH{_+}@`v^3hcy^lfxF0%9N0pydY5Q7^WHw#e?VMDNGQus6bk zwu7*ID(uY;Qh65G`IgA>XIn|EyIabT0uln8qb~%N_cu z4fL4}g#AASz7fqxtyn-loXw{FzY2WstNs6oRC6y0HV|;|alt!c`LZI+ByNz=U z^Wl620|}(GIAo&~_|hPZ!VbY(U)t!KuW_v+ED$i4W|_uih6NLLx(#!N4YOYcz)KNN zF3pG1ssNZzmwA+zKz~c1OE;mF%huphns$SmblRQ<(3H1CSU7+#Gm!L^cvyrD6sdvQ za5kb4cp2t+Sr}x(AuvCQa}3jVyM(z6e&MnVU+G+ygYsNAn2#<5%;*jgHi%$qP2+NX ztPg{mQwki0t*lbukFab{QFpMs%bFk&6$JBhRh|}vCdKs*6s^RU`(YHeGVi7Oh`!Js z{hkQB5HOdgA?Y9(c99J;+=jUyQ3PS|as7Sl&B_;DD#JP*xD za~)yuqYotaW1p`?`0+I0 zArM~PgSLLeN`Ww+w!iu-IavphA`s4}+7^{ZFBAwrzFFd?!ZoEv`r@X-Xj3z(+#B~3 zy7VvXFT%zEH?`a}u87yTa8A~WXW6*8_NSLPQ!A0kKX53_@8X;ag|d#xK2i7osW5<4 zmz`m12g_*X@ue25#$r*!@szet2t z0_Cb4B-?Nwv{4>XD4%A_Ab1s4?kc+P=kwp3T+Y!l7$~PYUR4F5{l`^xsA0wOR_)K| z{Fi%z2-`{+SjRN%rR0V*>?s?g#==nNzpG$}X=H~S0_T)*jwSM`I{&3%vD1=i=Dj77 zmX7jlH;H^k=f4$yim-a1q?MV*)%va=3=3f`&PxjAGj;w;t3YeoZgK#eQ^z?*`AnVv z(qM&Yn_W=$q5O~=%I9?cGp`U~yMb~w{KeIJ2N(9Hje`9EtL++Ufkas#Ju11C(nplWW?wzI=2=}o5r<;8s)H! za>PPW=f7(@(fSZ%!GUjXCg48{C9022IU=8Z}D9V z_jRr7S>p>j{}sF_!u|mBwS}gU?x&d%Gb|lHu9&}o)l=BJwgjn^NGa^iE#w?TN9R9T z2XU(N-`on7M;{dSz9^DweQhP$x>&)r(2{HSx(WD8I{y{DEcyokHXU1#bnP4ZpQ2&= zpK8H&%b=GIsiX%3k%Qh`GDv+#DeIW)OLhKBk4N()$I_EZ;8HO?11ZOqi_U*zzZ3mK zhzpM5ItWq5sQ!qgI!5)!>~)Mv$28O3r%C6(mD>c~-lndQphv2^1lb+GxY|FFKk&;_ z;JYpfi5*-DL8jAxuo*z3uju?&@L$pYJn9gOeBCi?k^7%deaP;TWp{x5Dn_3FuER24 zSBB+NU(L;JQ+XEHSC?W011&Zoxon@W!|vfa*X{FHbp9JVRP;|Jpkt;nvQz_IVFO)h z18qlu!TE0_q%krO3&??QZa3#7j5_~~gcL@m`mWx{G?cSUyrr{`&VTEL=syZDBTG%= zdVRR)f1?ePsbTg(s&xJvS%I{f5a|3jFNkxbERYG;Ic1{#$H->Xwz#R$K05!6?JxT0 z0OWdfa(#uC%48d4iVdR9f7b`0tv>(FO9F_x{M^?eajs86iws|>T%U<@cKzN``I^pu zE7yqra|s4B%?Q#k^K2M+cBnV~mf-8r7!~Kg>tWW{lTgm*aBp@ zNGBr~<#}#P^$nf>RxK3$Hxdx$a|3pza+lKo78|Hc1AU{;e;KuC-vF6#2%J~JIfnTL z`#sW}jJ-&mzS7C)Lb>ba;9ENX&A&+W-vpQ&1|iwfxzC2dIZG|ow^%MZ|J{&`M7vrQ z1n1SMyi#IW??BN?d;=tNgR5k|rSsqXGerL<2nLcFWlQEs8>ZTZQRlxKAekHLArB6N z^IABk!l0~UF@3Afe>XItc{A7?Ves1zqzG?-2ybu^;SCVs4Xz^Wp!44(h_DXSqaeaj zHF`atx2Z9<5@E+Q83;!~gric3l>*_s4$eV*6bNMPj{##Hc`nQ7YMh_A~w2EEtGmiXWLw_t4 zv8fJk9DiVH6k{lBCR%SA#OYD1EuH8g1#%gMHWG$F~JH zLb-0Nb7+e-E+%**PtbcJ`(MVmr5i>6E{vNQfV5eQ_$L}lj(U)?7-&CY0=>+V8I0t? zI;)6TK>JF{vt0MX3y_UxV!D~mEe7>~Ll$lMGSiUK!AD<6%MT82{^2K9ATt+#$QXXA|RIGsI2RGmfw5oCirZ;-#tPhwSj{baOVQVL%533km2Y~VDd4wpoVh{)_I%69s~3-EF*;tDRA^H|S%aF{lS`75VWQKyMf*!bbu+3)0Eb7Y*Up+t3*b`p4;VCy@n{ z&2qdnJ3k%Lc6^;G>mA5Ep&!d7bXG2&&Qs9xg9~(430jrAL3fn_y7XZYo=wmVrZFy4 zOM0RWJxM`#1t46XftJlkbREGvj`{hVQxQbgF=ZG0ANk@eNHc4n0}M*ul`5Ac>k#UC z9P^{PxoUPjs5@@Wjz2g$u^jq11deg>ZnOJoDrT2IQH0OJ?8apxb?Dj6wr7`b%?_cS zj_Bi{nB(|sW!jm{FQeI6KNgX7SR%DEnO~#w=!149KdJaXt{8oI+4WCX$Z3r$LtVL= zmi*v0t!lKYcbnG17))!?wIaNTrqy8@<82SR)SlKdHLags!&U`1*yAASamO$j-oebL zZKB@6$T~TLFXY0EH_)+{J3V-UoWb}Y)LHISesGz=c(~K?Y$o2ea_~XSVBts+z78`O z4|h5q3nTYB;p+)oT}_9V(g&qj;}Lkqmq5k`SAha*HNFCgPKwq>79yoR)_6#6yu0LD zG49w2BD{jeh2$o{v8ZwH=5ezJ^52pUzsLGp2?yx~^s!fo@JI2;1eo;%y)6rWtk)w| z)+0YJz$2?)5#hD;2o^g#P^%prk@a^X!ndox6Y=vnKfiv1(R34174)fJ3jaZ$`CTf{ zhldmPp|%#O4l}m?wj141{QL!mTMKWw6T@W(BH3>KRmX6R)^JT&=SVaQLyCtMgbjt7 zFQ6;nu%UXWZ20i(46mUM(aYjD-y_0XXsAlln5e%!34hly)E+g|p|kP#(BUt#u_D>z znIq`Wi!7kcbA-npsui{5m7TLXv;#xU&lTaHVW^4mNc!uBaCmGj#CB^aT(3tPXoe-4 zI2?kD4&gsEvw*gdl-I*egn3WQ^&0MQG=^K6Ey6o#xJJ{Ml&0702gh&+)NqHfxAOds zrY%T&F`t+KnpryM?4b^!mYkb&W`}RZQ2Dor@Lw_1q%_w zM7x!NAvCLE&M7mLb?hpR7=CPsliJbT>EA6XBKMyD5sH(OmWhZnz;qL)f0N#@M*Pdc zgg*GMs2sT)&NdRwAcC7{b3K^VwSseKMCV0W2azbRyuj&|70gWqXjkYI5p3s|Sit0+ zDk35YrqwiZYyqJ=Eg(pNVSYIUf3}4N#EfsEBkMUCBp~vo=VU-Y^e0_poz{VyAcUK| zh49Nbj5~IXh!~7WoL_sEb4HxX-v`Ewg|X5by*rQp1Y%quWp=y$nj0CL82QJI6nF- zFbg_Vp0%tSy8+Vi$<0V~{bw1I1=NZ1E;pc~{Q#6RR76Y%&=fd^DYmN3uz~Vypsz3@ zbZtrsQW_SOUE{(4&Pf;?1PNvev}sDQFU%AZ<)yALPY}#WBBGFBplVZf)Q(tW!z|V? zNAsogoB~~&Lb}Gzb72za80IL#Bf(4!K%xVUmt>}5DpTpZAD^}V^?blA?hp~H0W&q< zG;#whcNek7hB0lJ|4R2d6+w7v36@8>*M;PiqDRJ3qLGNm`UP~==! zMgBMc1=H_D#6tvwxl9|RVIH<&HZ#mknD@VNoFX@!TZ>c=i6}R{ko*wkF(fUNtar$T zy#!fRZWmIIn`Dli0Ld(yAtGu3Gi?x3lZJWPhIz(@!5)L0__SoC6v%^}_(Jkg14EP( zmvtao9xh?j`E$uy?x zgGI#4Hg$uhK2|K<{4`j`GzzHf<`;Hx4#Sa~mvs=Sa`S}&Dvw@h^L=cS!i6xW9rDGU z9s~|od-yE_xHr8kBAS6a9g${wyB6|WHtyRR_qRSW5KM<;rsn~Y13}>+&Z$5k>zM2} zY^+F-(_uc-O&79Cl-IZk^0!Aow)_VX@iCFX70iGjm6!g6ag^KNE7{b_%m_rwAlDA* znmPXqfxqZNogwYj9eyV}XCE=K>i!X2HYE%EZE`*iqP|@{H3nTH?$qLMxZZI;#TZn_O}J0M3$?A~Kn9 zI!$ACsm8(3N@pT3v~ZeaKKbT=;^?OYA+INAQ1 zb3|k{x|^408U=oO5w=hdauMJR*%cjclJR05q{`oDt9Y@EsthrxA9t6sQ3e#BV(I`LL zD2Eiv|6n0>&RBrCEvSYxRJ>SRtn#pC2H|=Kh>jNv+VLb^)p+ZRzuz1}xk^O#0A-;E zNuM(!arm<==?{tG@7Gtxi-kkbG8wYqc(IuF7dl?ZI$AA%Kb(*#UMx&SO2hbeyzuvf z6%h48toOoP2etA|3yV=sF3^YBKLpHqGep!$#N1>Wh1h&bbBj7zGe-qj%&=>U7YkdF z^ciC@Y5U-z7>weDtb;gJyja|>^5}yn(xYIz(ALEY3WGr5=1Behw*z)Ti--yaY$2jR zVV8!*xmgJ~Dn!Bh7s+^02&Yz907Q-#i+ebyP8hO|x%?|6S78a7m-z~@unOgFdt872 zzrdBBCZb}A3)5PZZ+YaXID%2}A}XFfs5MyxF)s4Bt%(>#Yx0+fNr&V9&#u{|oaSBHzCX^TnI ze6;3-By>2XKtyGr!^JSVCByYX+(3QsOMOwJWOqly|uTy#}D-L=iO!Kud-r*_v^a4V0sSPFRl-u>wodkTReV95{voKF_f1;uPLB*v?6cl<*uqN)J14C=K!Rl{IWEUUt$oPs%NoQxpL;F*@yKpq@HiUx5G4vyX=kaaAklNO-} z5oB3CQUeGa5#%IX5t8XGgJWOT?%-D5Y8hm++|P~rX**H($DWk}82y?lN9R$?t)FJC6*=LfhI1pWj z`H~e6N4eWh#y{X{kj)${qV|BS*ffn5f!a&I$2iLEw@Nm(GR4hk-Rib7_;;D`wdN5K z)s7BVfM-Ry?(hrlL;idz>Pz~dx?6!&S&`$~-S^bp7b5Babysd0D{a0Xo!xagyK6yP zSGrRcqr0s8MAR{Kw-R(K^+rGHH|l}U9Z|ni7At z(qEa3R>OUzzcLr)q%S^x@)U~U3l@uLK{(Z>u`12di|7+HPPAd+yovD;KUUTuH9(0u zeiU_ZPNICPP&&}UWt+3g4`T$mp`1$J0xh^&L+Th4bZeU5j_MrCGhq) z$7`H(Y#am(mdt7SGIEr_mzHdXJUDVJB^k+chyQ7%3Z)4xNKL&_I#Aw?avyyOJO?P_ zgoqvil$+y`>NLtFHVXU{qXhm-#*Lek&~iAWq2k6;Q{`cPBokTh0MT*d=0en(t|;FD zC2O0APA8N)(^#!TeDrlT3WB6Wxm`w$n;X%(8M5H0v9yYFDr(3&Uai2V{5Wdd+=k|R zF}@>e1i}iK8k%u4iOEZRt6|owBi)!!zZ1;4^&)yam{-H+tnSd_n_x3%E9TQ-*L3b! zosC3$0FD_;n>Yv2(YZs`L7eK`v6Q|8r9Aqem~nccgk4>Pw#6>6u!7aDR&YilVCQTR z(Rl<5l~_}tVR6#7404tQi^C?}Q>{LPbPR}m?pWr>IS81(;+A#Hbw+^XT4SK&AYZOE zLr|XLCd4zAf@|735xp2(YYLFC>y`WZ=p_WB&K=P>2x$kurUvaAT)TT4-4&&ZXp_3@ zG7VE-dquC6-SNIYdL4hDujJ^9HxnM&bY0|sk@qO-FQV^6hh`2^yXL#gkNISW75qVW zSb>(bjq@?Of7PJFRi}&S&D3GLX{^oF3-Ji`A-j82c84|p*8&+eOemJ3wia#uAC+D$NFBD#TKx=mx9-r7XJV#8oR z1I@tO1O7o}GIFfNyw}NiL9!wHittF7Y6-J$5L&pz({(8*Pj!>bnPUNCju+8y17@9R z8te5ve)KywOpAs&v%icT>&nrd{@j&{9m~i=>T}1L7bu_xv}*K~&N_Ihb>yXdmJ0v4 zF1+MtB6=@?)(0b1Y2EqM2Ez7DN#{&ldD6LKy$5LsWWv#7StaLKI%lfyf7Yj?MYb=@ z`W%$!y20Qd3WXv+D5CchOqFSrMrxSvZJ16C)8|GRKh|UQ*E_x+Uq;&>$GJn+J5Y4| zSPyeqzt0V(Zydo~C8E0lQwrrQty(SH+ljcIHcqN)F< zscDm^sQI8P_t4}GjH53l+$L< zNBx57rx6qSivfYa-7o}63wgll#K^8|z!@4h7`HnVMK%maBLBcqWVwfPDvHQDCJV+c zkV5eW2y%mqAUEWp+*OdlbazrTM+^ujG6-@bELBF40TGNNzaJkEDcO|U-vBXgAPe-F zYCm#{bLWZygV5ndSlUM1f2a-tj^&W&jsb(|gVL9cNobc05%+`tqf_ce%zI-B`nR-2 zjk_@$<*pOy_biQjt{8A3jaz9Nw_tau#=XcnE{+oRxD9CANaG?R@wiPWXm%O51Ld7= z^9`AWaVJ-b0cjZbmUyH_OA`lNO+)cXX23O+#XuoK#-v*?<6Gz#a4IG(r)?qSc|Ga1 zL0ZpS(vdPStfgtxLpo5qQJ#xry}K?yIJo_kz-}o)E86w@EL14H!no`|V!#*zZ#0cE z1blfFGhnO@j=h%ze;H(vXxW0a7kbFCYdM7r`Q5yK$R`T=82a+_g8oZFm-(TNZoEj? z@`DR>8OA9a;tEawuG6wN#DH8tm*pTG*U-~!=;;bN6x%;K9hK!H6#`btiUA7<`nYM_s)Nsfg*J4df(}cN zvGCRavd!my}orXQU``~ z=yiXOg6=?Fr;_%q{J{+xV!SQT75d+Rp8SOva2ud+OF?SU(6`&rXC;I%2D=cOdhG`eXAz#&}x+QlWyDA6%esD?_VFH|X$>2zt91P)X1&rg3|o zhJMh7en>%wkCrj`Hpua|eULB5;NmdODW59qm@*tUXJl}tDs2H#nv%5VHN#FVozyZ_p zku_>|5ot13-(HB8v`yw%T|As~prG@ftiuwiSY4d0^5}zNbwsY5*6rnJThV)35!mt5 zqTRk3smhube{h=?V#Mt&ZqtgKi)rP(A_mmcw0caVyi_mRi!>MM`d^|fkRnf#F}>VC z%Ro$qV|p=7P`|+->v#r{v2q6Gk!U`s_Y5L4Bwpf&AbygYq=A%5t5-e#~I* zHZfo~W>8*g8h7~Vpo!DH9ju$_gHo*W3bd`H389qKsvP!SPKOe&U|rsX@;0||qxxao zN&CfsHjI0RA5xkg_ah!x{WH%4KK7IEZ~I53(<3j70pHLgn9&{O`jKyYJ<_2cp1-OcC4;!2h0?KI8! zjyj}z$BglYxqoylhMT=r4EO`X-Dx1%>VSiv9`3jrF8UOFjs6~*1tCR33$njP*e|Z* zoF3}V;iygX9_kJn>Pq1WprNpCcj=jV(5p3+=TvJb+yUf-qA8Z{PPz-rIg5sB;ha4b zH2qHJ=7(o>97Cz zl-I-Em4X(jUNajo8^f(n5uSJ&4!9M8)|z<`7xi$7YPbQ|`A*+~rZC^TYA~PaZ_&(p zIA;$9O}vX@v!$UlvjKF5D1Kac&cjd@fk?%AsPi2|CDTx_v6=rvlQ1N@KA3eT|Bz$_ z#b?SZ8Y+HfV6*UyBBo=ead)9+y3xUe1!L>* zAi5WPi)Jv_y8}Q{aFm$na8hs-1Cdvjbr6a2$}5~+S;5>5e|ERW0Z9Uiq1T$GY!{v! zz}#Jkv`@oKcEC(gFfn8N{0du@Et{s(Cfs%gr^w2-jjiZ zEr>jecveua>K_R9tmF^;Ta#DOstk#@2k)Z8lRu^Zbg=%!&Y%uI5uT0IVT)q_^eG#_uOySvt4)0Ax+N zYc|>1_@oU~t%2gMmEQB-4z%yWy0iCO(ZD%|iJKu|Ho+5Ziu8rq6pwNWtUl6-KZ9U~ z3QrwiHbEQjvz^fMHVlpj>UJS+uk^2*ppKhJ9ofIG=-`}$=~ghcXwl#T(}Z&Jy}mH? z{>J12;dvb}_rXowSF4xm4I8FO!^F>&9{9d6v?X7qJn%~TmRfpXENJ{%33Oi?TBZ8} z-It5Yuw}gig&heg@%`mUF?G zoL_|JcThi&hhzt*|Jc+$Hg%_r1P{P69w1hZ1S=~!hv6s^$U2BuMS_(LDvw@he~zse zdx{4j%m*r5aO+X-Y7YY&fIG8~h%pEkajUY#5^~Im#K^8I2AgddC$0Fv)iPF8LNb*U zxHwjtP00{{>3qDQDa3+ACOhT6+9TA$@n{F+7;Oa*M%< zLVgnjEq*WqDaWCiA!3Svv$@hV9vQB2mfASW6wcXW zWq{dSjn=i02M3r{VR;pGt%wWY2otw5Q3vWTf5lor!? zG+#^QZX4wug)#)#+Kk7j_`AVOaJZA-%XI?I19tHEG`KIw0ZWxqeJ!UgkDduxv*L28uv`ep1IioSV27Rw*rgAPm|DO-hH&wi zKI_IjON7!@K^W{C&iPyhmdD`K9t#E{2bPjl&Z)p6>m=8|CD&u|XrAON#K+Q6?iyHz z(w|Q%st_?di3`)Jiq}GX)#hrXtXkN|VCs)mLmETps8Q=s;5-AWrF(22$~#=8@n4KO z>34yDVVOomYSwY!T^dS#lM@36$nqHa6%+vP1XL9unb_K#oZ>&0dS)9RYuyu8LBXpi zz!*#uH&$vcJ$Ea>cu?@tS0CdK@!+ya;Nif>TMZ%JV{>3s$n0$IFn) zF|6fmupH<9PZ8ImuI`_S;in$wRY`FOkWR`;?}2zmoQU-Y@e^T4?G|yY(8RGPDB`3A zGJZXQ^?QQ8$L9D|Qo%W@~99O()hmrZu zepSQ<6K%U`JgMVKY(JYeM9~h5lp*ekPP9G*Mh!uCooekQoC=ojlv`+kMi8Cu#Q1&;#Q0PFKX;s5|zL#MQw-VfX4S-}AlzasHbkb_9s4b4+84 z*5BAmY~mC}d|rtRl+|#=)rFW62g;j0oMYPaDkW_-&Az&~Hk=1vL-MVL?pFV^?p8y0 zt6g>XeDY)K!$j;2pxuHM+yajxgF);lo0e~%Af5BCk+F13JX#KcOjRtsIaB4~!bq~R z-oeTx4;{1arH*YQ$V}!Q4veuHEwA(jjg7poo3TcSF%0-2N`a+ zVES9=aKYjBW|Fc#%gH*%OGf7m--+h5^KdwcWXzB2j$=?~xP?%XQ{}X_dQcbtkJH+k zf@%&X-YRp!P>ej`FA=*0)7pyJKb5SfRb)?#w^=maM=~OBEl2B3m<&hcn`v*Qul-~l zpjAY^+3T>Ed|1wBD->sIUGKSGKye7mv=zIQt?mCjA6Up!et6W!gXy5leSt zPbDLD==t#77`yP;GPO(>l*^#~R4Q81-kF2;&9q?p=1|u0GF?z3(Vv2CJ(cf;{+>jC ziiBADkLXWrMs=+l`i1L&UR*9>A0+e+)2Pw=jaZyQEr0VcW#M$_JFBM-AsxfITzG{9 ztMS8QMsKhS^CVbJ66%uw5v(Qy)j6(Up8%}r0})Fbp_&TQc-mtH;#hF9X9d@tHY<^r=Bh(Lhnn9i(W*B z(+-GO+MGOHZyL|ou9`O|d7k$H6z=NM*qyo7lM3iM2k3rqvb8(m>O1kAb|5!(rvZGlLQ8U}94f;nKr+$RI? zHaO*N6b?A>^2@e4&^*F@UczjH(rlxXwU=bJVH(>C++Z%w1?1qM^8ZFPeg zu@Xa;wu`tk0P`%EpKZ`E|FU7Ae=rjIz1WBx85N%$gtkeLh>D7XhkihitaJ`(DCqDaU53`=y`IlUBDd)!tmikOyxJA#Y2YmC z5^<{u2Zr=Qv0kJ#Hjb%qE?X$W%=4XSO-CvYGizEnCsA&fC@(<0ULc3*h4Ml&%G2CX zE~icG818C>eS(Ygn+ z;NW7GaZY(3S;r!}Vyq;4(Ll!m4l)?!6|e%Lei54SB8kaM$6th5znJO9eB}r*XCb(J z4CWV2(|9RZGsEFo*1uOVV^hKxm@k&2wLUJHHDK1qC0Pe?s^gML+fmBnSqd#zMk?4E z^ik^q3oCfh)e5epS6XuBiMS5Hz66zcsY=6sM}*P}_EVMy!eO5R%S#@lK|tidVs>#3 z0;abpWS!)yms~H=BWb=|FXf`#b+>*My}UK$Y7s}*Y%f)r#>+{X>ld4=o3d(QU&2o6 zrFuYKHCT<>go0+5QK20#lSTNb+f@%@)G-Aj?l?w$ISC1YR)v+nXejj>M%>^0fq#L7 zQ_Rbl#>;uG9Uer73u8q5snlV$X*6KtC_9Wl&Cy|eVDApw(VBKUK7?tj(BbOCB0dZq zHeiF(077|aprgGCxbfk#I|w7~3K?7)2B9ro6Cj|_Pny=!cl(s*g-V+&Mb?mtRxS(G zfEhNp&hY900IdrZ@reY48NQ+~2jb}~TlwW`JQM`dqxVA6a0f;&u{G2o>F>wZk}_p~ zEnyBSn0;t*$ano3uzn54+@y2$eSn$qn21jX%qz)A*cK@1Twudos9~(YtuQ$Fjp^^Fs~G#MTsxWD<;ZI-C(Xs1Wdtb5q~AYG@Hgw?a||}vSHF}m_ste zywZmD?N}ZaV%Cx)r91;&6QF>wIoj#s*LT8*cZRtF?Eui~6(T+pKs#ZnJGEbrA8iAT z(LmR%kU?f=9@-W{CLCnenw*m`I0cfI+zIEkbF;5>c2=Rh+70Gf+QF4xBjTqJOs8qQ znyZ&;stuE?VXlppVP+>*e`gOQqQcBt+9gq5g&A4zK+$35RhY}G9#@#(0W-lA@dbc+ z6}tZFAq_*@ccsJ&Y?vw;XkLX@yjlc#aG+V+z&YiQWF3p?T3k|)m|lglyh_Sq1rylA zwK(8&-6qtLsH{57hrVch6+Zn{^65UlAbks{m!^vNl|+5WG#d3WIewK*U81Se=gCm> zY7g4_ft61&YiawSLyfG1NL8p=+okg8g+fg_Zpa9?5o*>*YUYL8I0WTMZn)Q74%{`n zMSK}>8w-(aA>V4_-llP{J5dIk#uBvEuk7(J5A`WV)-l<2F^UX=Y;+N1BLvy#D#+{T zwcmwPMEw0k20^}7pqKvvn+&m!e3)9^MhNjWlE`%r%5h%{L;;-#yd?4(Jnw5m+$1vc zT#UOSO2k)V+}8?_x^;BGMv}q}hu`?E^g)gLS{d4vW89JGl2+oi3M4w#c#m6$@+Q}D zpTfAaLPY!vG%oDvbsPv(RNCPj7vWov`+5-C1=F}#EE@OqFr-M|abF*f@^rUxucv#R z+}}ie6UKeL*fib<(sJHKL&@3hrYsF~T!yaKOVOHca#ZMA=TUiH_UpqG&Stc#a^Rqc z>#@0_JJ8qbks6ePkRKck`D;d4+Uspd9d6(m^!E9x=S2Jm0Dl95c%x2(e`tfZDe&u` zmm%&AIGi_RU_-=RM^QzExa;4S&~K!ph4Y+1(EpLpZ)Bk^TS3bYF3@ijqLt|iy$8@a z-6DP;LD!i^Q>KRg+J^o{L1)a8q414Hv~B?^hr)H__SJ=6#ySPvg%%WlErkPgMy-NA zhPoaLnm;%iT9R&p2%9`^&^N3H^ejISe-O}3nMlVp^v^alA|T5o>kb!2|FcW=im;O4Myu;PQi`p$3N{H8s0|j~Wi}g&ReD4}oLi zyDBvJe{FCaXeBtd|8#!a<%bjq8FOe|M*&2=fO12(gx)m>Es`B9fF6bY9qIM1WTfE= zT7Gaew4irEjJtAOq3K?8N~K6R3DCPLOk=mc*GxEBLnj0%=uvP=bkf@eQ`<#9cTgdC zU5CnBBwX(#AwM|^mcr0Yc)HnY${(CfQ9)sE*FK~}ZqPT<_t{g<6$$hW@$N{Z220Wj z{cLDl46vkcyk3Ut-H_w%B*>RT^?C|_`dcsHK(L;89T=RiRhld=v=q(b`oRFy{`v@n^I)U-O#w$njNb){-r(6-&jtZDHF zM?-5`Zz2S~Ng=^!uQHncG4qmfA|VOWdNTv5T~BM6J+1T9v_|9qbk2M;8z~o);dADC znL{9?bEd508H`rv-!}_UT;c%33`SogXYghT>P$5Q`N7dp&!7^mYEa=bgE0nXF#d>0 zxQu4dZW_({U8;o3?HQy}R)y*}JJIqGF{u6Dn>{Ev?iiNp4oJRc$gVj^@yQR4h8ABl zw77Y=4XI%I3TBH0+RMKciB#%88dDqd z3RZ_crXf-E<6i);ujCwW%c;}1u$FJ-IXgv{V-wJ&`IAV`1iT%WzOyrUgfP;?=Fjpa+OG!OI;o^jkmFYm{_!dEGXZmuSV1_XV=pO3+2_s z-yTBs&JKCvW62d2L96Ma_if1i?Y)xn1wZ~>>)RD5qB|Y_UF-S|&S}cGt5I9$>=YBv zqPyeSrbt*uUG6oFcW|BtMH~Smti0m~GWCnoQY&v!LcQK5_3FJmSr4GgS^pLZCFt@U zgp7A^X8>7dt@h)8x8R*j6lH^re-m07#yNCJ&RW*d2kiLX$)bkn-wOO#el_$vu)KH3 z^7PP{%eX)cJZ7y(pf@4k!E9TC<-q@jFM`D1!7{zmjN$m_nx(@zhYrbU$vVsxPHSE? zj*8hTk1_S2B%XHfLFq3i%orsS=$O$Gj8w#fj>Bai{egs*B&1{v#XqJjE#{nZDY8!Y z-;#o+6a)06*v{S;33pQ8MMwxeRJNi^By6Ix1|*!SsciKKkwACLEuE(EF1}wPf&7W` zg1baQ70TZYK+5CArQZ;~3$AyEW0Go@TS{9P$}8b>y>lNRZErl?8=L2dgss$N9#RWW zcRcPp=$hr-a-<4Ol5g=#$xvtyYIRzL+FIv|f^z)h=yKs^kwD+&zuRIOdxpp^%j6F6 zUFgNT$Iub)5KHA=QFpn=zyr=>5P694^y{HX(?tTEIQGDp_CN)}K)?IjlY>-<$*R3u zX@|-y#ytg8?_^}#n{X|WS?y^>aT_RkXI0w6Ihzu(ZVzoQ zv?_yg!b9kC{4kO5I=Xx>5J`Fn+Vi{z==W%O)ShQUn93{4_pp5L`7Td(UvxR{JCQ&a z*zdtZyeB=x1Z)K9RonMUk;=iwyOIq_oTDxwV_9eQUq%g`z&tp#5FPaKH;SHphjm5J8P zNXJ->NLsD+NR3Kbt+2z^M(5LhWRjDw5(#t~YCUEe?-#I1PF#xe?6*Y1k0^g1s`dfY z2))o7M(<;U_mB6-hZO%zbarw&<;T*UDYRwcvv~662$AqBp8NpX@k7-Qk#CVEgK(6QtCA+IYUW0>25qXeThhnrsvvBExrMwB(dHh5X zicIj_{tkwvZP3SD0-aaepbd2@Z-<_b%h9X?59!cABhhi{rd*MjN+Wfc#wWRQBpmj5 zq(dm~u|}eu(Z^f@GvJ-k26CnJw^6JB_en7NAT@H1k~5Y@xlSa~ckZ9$BFXvWjF6*z zQh=gjYZTfn$rAL=$+p3L0oO6r?=hs~)(EuI zk|p3*JFSg_R2~{adsh8~9s77{ECQk(p}oXe+Ju21u=kp@C) zvIH~W&DX|M&Z+Z*tV7S#!~b9(@VlSFm_98+50!(n#u~o&Ost^J$n+`pv}2SnDE{^C3ti>XO_RA=B+@&eU%+<1Eat9q!_ifX z>}s>Kt1qyoUvgAPq5jh8KbSUkwE9SN;D)N)>~Y}HSHeiEKel9i_X4IHH~kEaA#k`lD;t{ zS1WY}g`Bp;kE0OPeO-pW$>hE+LMlPumdROb^mQ5a;5umDGz_|8wn+RGgMKr_H1@}{ z#!tW2&+krX{5R0qZ&RRxcOp#Dz+WM|7v%(1MCJPtzNq3?MK)dDsDs?;yX{`xb|4X^dk;(QAwzl=%6K!RU)2p)sh& z#J)>Hle==cxI)hNyF3)rFPD1H_i4Fk-WWPgOt)a$o>G7uv~f% z0vnpWj%;Y3NTk<9_Q#vXfh6`hGxMMw=>y?EKNg9Iaco3+ZE_p6e-ql)Lv?5y1xL{9 zGbkvK?g#n)YEWq3O`1ybJ1YkL85dn)Ozy8xU$8l{lJ58Y7PUQ+ns7)p=RLvB(y5JYP3 z9OOVSN?0zv2Z4dieGCS&Bts+~hJhSNGL3_2Y#{k-p&>2GK)RKI%svdsMWP+34#+(} z%){|X8OMP}st19OaU6ga{8)|}HjezWk%4hg>46>y&0!n|pdAO=(9&TX2jK1w9EWJ~ zZ|L;{t{%)oD{dEny1J;O z*OFoGbMjG$1?Yk>ej>-9qes_ql&~jtQ;VOV1V8msi=V?5KK}yXdv~H!odKP1W`9`QaBh-D()QQ;2@N+TzU@zSTW8`Xor$2bl`3x2Lb4I9V2 zbYx&0Tp9?WIgH~VwBsN-Q-^W<9EhibAewmv(l~yGWBZxrWE;oNWi$dUfHaP>|2J~X zYnI0G^D#U{hhnv@D(e+F=I!_6$ni7u@n^bp>SY}B{=`D$n#Lil(;>d-p{*Av3tp1O zaR`$>oQB7IjH6&Q9))onf?XYEA8zTzApjjZj+yxwN5KXZLM;wM7>CI*XyZ5>gpx2S zaZ`)KP=dp~)Z*|ElqCC%!RUAif{f!Z=5;s^P43F&;-94;4p*SK)>{zs4XhxH<1p0Y za04xY+FH$@fIN)ja05~!Rk#_4tR);v2zE(ty@hP&-!7$a1O|SjmlTdfq9p#Gq;Lcp zb0ph2$dMG3uv~f%0^=zB8pg5cX)*9*7{`%p)A$vaY&aP%cmu|vBF8}31aGYtz|%)V z1&*{J9fK;-T?@>k*JouQM>Gq)3iXIC;mj=>}NgvHYg^z(O#1@|nFqjyGFi28eLWm|(QzlKd zBYGQ}YO3i?QwAep(jbIfVGu$Hxdwyol`DED`hA|Y*4}5IIp_ZVShd%B)?VN5^Q`B2 z*4q2*z32B{v}lDAS>g9Waq}R^@BL`ec8RqD0W$gz0%Xdes)Ic5@%uS zXu4fJIhK(E`D-6Mxw$2{jNLJJEY*E^~L+N)sGA@yVS-=@bo)owYR8%LJI_+L`MF`@8 zW7I5q6CAtSP;?&m9CtT_cI$A7nKE=A^@eea-56tcA-em)u{)O*?I?-dVmEHFyGZ)` z7`Vmm1a1My=yVK7aO|E&DU(^ytHj z8z6gj(Jou*xB%IUuk7^$q?nz*1c+{J5+HjCki8j<5eSgI_{3fbkmC1Dfb2!xy|DqZ zmjKxt43Gx6{?7~ZG3`u%?86`T1p;J7C>S7PdKK*kqh=A*Q-ZKK`1oCTRpnl0J)pF?7&R_L4f?(iq)gTk%UK}2J5@$V?X4& zHHB!A+dY5mqDZs^ZxPG=tv?BYKV=6I7e;@!Lb3&kUT5xRsh2R)tp((tz&i6Mp7m#2 zdIrMi&jQ-|K&Rv|6GnfIq@kEj(RJp}^)zi^EW6Ik81nyxQOWHlj1CY22XbuaaDQut z8w{h8X-44#IrNfnk4dj3%b7A}=Rh7MAE~#_j2mpi=r5H1s}w=pI#aTj-h|O#S(F0w z@YjI9AoQ0GteD9~_i^loS>mEh%v-CR)1M%{vzA{wF9ZQ&W!tuW5Vb!Jm{}oB1p8( z7-88J{w~D1W32FZKUxOMNr|lR_ecqbAjsdvv}n7;f)GX%L0B#izpcO6x!!)W|eJj7dP&bDE6&rW_LB>5c-QQ8tlow^c6fts-X!u+VHTQhJm zepHmV=4Uk6WB(V$gBhIL5}t7(bWkuFkmwK^-<<`R;c z_A>rz6G8_|Xb|5>;N%Ui6Y53DrKi2npV`J9>#f>& z7Cv$YJt%qbjPacDvNQ}qQb6g0)C-}~WjchMa9h_2PeBkDLZ#duB7~f94n=2AyGl4= z2!-{W#!M`_mzw)O^ry!#boWBY2^Z2bKw1(w4}FnN5vh++M2jS#cn>X=wc|>}Rg`MF zm=G%6Yzz_JMDzBhhA8DGDIw&9cTx5s^+ISuKF1@Zk#ax;2|~z9V+iX02?eM%1Mc=ph_eVf*`7t7HyXpOUv(&?uUd>$$P3ppRk{!4Ca%WghI9zY zZzvruu^}`OkKuQ4Cn<#@A=IVsNij9HxjY1I34NQvN> zkzk}$1|wzSZsQ=4TzbVt%A^*|3Xu{aQX;`fnZ(AMUmG01LX z10hFGUCjKU`y^if5+89eh7;o>4w2&g&q#5I6i0i67by;r;v|lgNevjDNO1(HT4q7- z*(UvM4B-$dPF$q8txcpjM2ZuP6qhAkBE{K9`Ja(uq+t1>9Bqj)f-E-f!^R59_+E01 z6_N+jGE|016e-DgOma-5B$v{n?Gg(@q}=y3kut7Eb-0>HNv?Dq{=}`^5}RC($2HhU z86c5@>x_Fh zW6GMzZXoL3&DPSS@1~fAVCKI6&%GzhO<5L#l=c*PbjU6QWo?4)J=x~Jlq`B>H_d;O z$$#SBDR^W`E>dqHxVOf*cPdJ!79)sT2<|Zy~tvB93wI)NK@rii8V+kqUjEpza@M1R;3e1Y?D? zJ~&;B719X%w0{4~3TeZ{NrND11bLdaORN>-VWR;@s1AH-hBGLOpn)#}lo1A^>3XJ-V!(x^jors#grup+Fs) z7-}m}_vERp^ME=OsKZLFR$NvFv^rnctN}036;G=RW1tQrm=BXpZfsy;zz5_x_o6dY zR)3%lD|Ma2hghgR8o{X0{AE+ZEf*zAx znfGb(y8M+_tE?KJjvVPatv#qG{PDz_xzc2G>&;KQ!CwY)oQDyrO0kOZc=9)0;hYssH|OZI=Zjx9OFe8 zTipPsJwZ-;V>sNXs zXp+5|&yMLql#V9Z%X|vTF&Oz6F>(xwWQzf%s^c-BwC(3Q$MUPbM&YM8YeXEhpJRu_ISh|Wt#HdfRuib?ezib?ez%5fVRM|Pw^ zii9M& zCxLQurnOkTKG~b3cXZ80$-BDZP11WYC?_#5Ck3|yVzF60#bPT|$1g!SIn#AIL@dfz zF(_MuC|}2*{3{0K@;^eLf6bRcY+@@?KF34ZMfK2%sRjr@?5V#b}XWdYyvr3=Dgns)rqf&0p~iM zWCwEd4I$Nu%Y6nO-g@+?o2X?OOq84rd@*~uPIySC_Ka677h1(~p<1kWa$1;&u&}96 zl$`w&h+|u;PI9r(2~M3QVl-lRql!f|t4EO_PPK@&oFQHtgD4$pY=@0>*qW#Vk)dgc zhO$A3836-nAr|kntEo^p&$%4VqhD5?^5EQ=`0FeaqdA{ttc0=n`=p)Dwtw_+4%aiq z_;%-^lwmUDk@C-pG8ekNjP`Q&!No_0hZ~8;5!>8whw5~`;J`Jz+QTu|Fk+24vWQi`4 zC4x4>zq+ia#7(BqsgUdQt3FVj?t)Gi%+#%|p~EbfZL@U7Y6b)KYbKrUmWn0Q)peb& z5_%q6%bl7IeCJTh|D~Bf9I;lRi_sqlf!D<-Q4P~ z_#QHCESYsdGOq;4)4dR3zktw^>0T-*3CYOS&A17wldLD*D_y6@ zW^I{yBO#Mx$$X>96dKDk1jzKjg?sc0;E84Cl^HTUh@T$i0ih++W38YhA~XMV$PAsW zI`Q%^U0kPEt|5bZ5B4!+I-4YK5^HCZj1N!!NKIoTLW6va<_aUtDndjL_>S!sl) z;2)>t2ZYu-rxXcJB03A?MdcA+sm^j+<&_mvE1)HH$ZYRrZfz5~7 zIu{8YW@N$3W>at)-g8fe=Uy5rET`OCQWuWTU_xmxmd`>Ai33y?C+M*sB)4O z?n1aPAmk*urE+?v;Lsj-18bpdVMcXOo%x&uU0mmkQbPv?A6#$gtk&~r(q!jnrDDmP z-oQzX0X*@rg zm|j^zbTa7tX@Ja`D0!y%mxrgxkX41unZ=ZnfY6dTvr14Bky&&BWcp23o%wxgv%HV*|(m98ubB_3aoOPBQ1D#Qisq8_}Ij7on^0ym0-$EzX(ivjtXwS*MK`PA1 z;(C(|^2tv5Z2^*GU@8CwlYubH??dSqU?!8g_%A~{A79E3hNh*RkLmLz569Df2->By zRQ5z@=d(cc=E4FiE*S&uLQDHTP5UanXUd+UD>A9PO6l|-N|CK&?7b|jMQ?C>Zw+d} zzG%roAjkirvX=nadxz_sd%!^c2;?vex!gb+ORbQK1w3~cCrC0(2zV|QI(J(Wz@;Mv z@C%jw5`gC(aGin_4Y>3g09_0CS`cu30PsBG_B@H(gn;LfX3yKz6!3chuiUA!w*Xj> z;yUM>47-$z-G?eI;MW>(gfXhQBK3?~z%&+UFN?YBYmIt-TLzR+@m&L>KHMM3JKs{- zdw@JY&vh;staW^t2zaR0LjDkVWVHtEEi(Xxw44xW}5G;*4D%0yaTh@W35eje0vnZ*1JeN>koKwgL^ z^fCL9WtRZiU?ER4klJ;+waf%FWlPF7l(xMJ*|$IeW_Ofm6&r<0@3GYNg+=buP-LbI!5){o2Cg zFp&Hv&AYaR{;jr)a_NzWB7O=KK>5niKdx0>?iRpm*SR>~2P_Eyj?)}9;A9?L!YMBj zh2(o(`fDY#GWAgujO23Bz9wMHn*lcQ1J&hzz%I_GZ1uq&2!L^EjT>n&?!WNS66azZ z?&2Xp=#Q4nD%3|l*u_l1#T8A# zq%G#N-!7RY4?W7U4|qu?Jz|!AOu1Y><#T0&>LNGyE}7ywecSqg5((h0YBNRF^M=PJ`=Q#w{xww_gV6d=;g`R#Kkny7T~@Ly*wlHYp#Vk2;#$ z)<)(dUq(K-tW^_3RG$Fy;I^s@pR59vvdu@{7C`>DL6#&_-H%fy->kaqmQ%L5&gEQo zTC#frr|{fRo5g=xtv6DdA)Z^S8g?W=I-kF`cnIMH`!!W{bnfv5mPa2O}R6gwlEGanWqT zzg5?31ProQ75ZQU0$|trnmvwYl9#UJdg#in=%e$}?2-BiFv&|sCKdA1m0P4E$nkmU z$^!s~f~1J88u`lQ$Q;%6W++`%Nb$q5>n#CFw?--LGAD8z1AKxikFwJnnu5}rgR>F&bTX8SN>WjR9vUuNZ&%m0Xppe?TTB&LmQHp`eCJh zDUi^4Y4#R$Qu)A~ z)Ou7eDj(`f|JFr!QrV;{*R&qS5A0n((v_>VudZB;a(CaZx}~FBe-Z=VWRyp;=ClNw zTh-n2b>};ca@~6C+EqrmZs(eTjB?%1(>1GHw*pY7om zTOV_pR<7Gcx?+^;Mwp`ZK&@Oi6Q@SGZhf`HC?|hA+q%rk1#Cqop%szbU*1EuA1$3D z4?D`S_7sVxYjCP-TE;{Z^ZumVcbr_Mx=qD2190PkIH{N>-$>Kd=AXLendS{$v!*d_X6C({@iJ=~<7Cz}#>cE_jEh;*7!Q;E z>yuCOB*A-VwUM%!7}6hJog=G!^uw#p01P)kHp|f@gIQL6gIWHOta4<{9Y_QX9$?He z(wHSjU+sjgS#nO-Dp-%nIm0TX!y)HPU9)D%A?b@>GYa95bC#}Iv*etuYt}3|=jfU- zOHRJ77_;OU|1@UFG45&1l4HEnm?g(Jr!h;8@l7$yDy+(1+HnTfQDlM9ACH|gO&|H* zGLR%au%W40o{~3!Cp@llCSjJrEF9O7^u=4MtXb+bPtPpR>6&Mj=XK3`OU?_r=9y)! zu6bs8QP(`PyrgTMSzgvPYZl|2)-1+1tyzp~TC*6>v}Rea2e4)_eko>os)6UpZbhqV zN)5qdKY}|)(!KecKXzFfyn!C|O-=L6p_t~%msQT6nC3bbpCLTMA*R`4Ow&C_<66^n z@2+dsG~IjXnl(*#^CYA-P4`|}W=+%m6kW5X>3*uNS<`es&5j}ow7YRoW18;9KaFX+ z8}~G(>2AE!n5MgNPGg$x#y7<@Pw!=0u?DRwC`<4Y{UP5uJM@w7G1t{1UDwnswb_{E z?vGV>xyBvR%XMx{(Po)zZ)0|6t4ct4W_e22JhKqM$UL(=qidd7YIV&s%W7To%%X2w zhdr~bv7>0S7zedxG5%@IV%*c3#dxPRi*ZhC7UP?;IpSl)&X7_{IUXV(Bj&x3n7Z|s zAujDxVhp2KrPcC4<=qoh_nnyL#uV4NiTjv%%-l@lF+H#^>fd2jr5>#R)U0WGbh1k6 z9Mhw-u36Lc$ksJ$njT$r&6=hMyIe-Grs-k!xh9x;7zZ_`>0$iSn5KtuPh*-M#ygE^ zdKl+4rs-jPQ#@w%<-A057h3hD6rzXzsPf!geI#bt;mNFxOvhLod7@$TEshb9pr2iV z@g|?8dfbWeZX$=@%x{TeJTU@GdXH+YsP(HJkLsFdyvKCS`c;p|bH)0rR_lrw@7ZZQnE8$C49%tFVKV(; z=()r65k`?ssgdD#Y)a*2y}8ruF{8+)R2KZ91(cXuiL%jK^A?7?x?1)48N=O7mcP|( z^ybzW!}ZM6M6BU@o}g>ia6M1dHEXz@?R3o=u4j8)vxe(=lCD|9^*mYEtl@fg&^2SY zo@j+b8pHK8K5h)x)3~@XTu zx~09f&@JtybBt^0$gGq5t)q9Vp7K22t?UDa$N!!Tmxm4FY8$E2b(~;S8 znXY*@s?s&jM$2{0v(XA&^KA5pu2~xyU$!aKvHZq|UVbAP?7t zmyHT3uKlm#4|J%4rEar}D#dgN8j(JETPUQiM6QmHG>iThS`|*A7AjTEl5V@BI23WH zg-gwUcc(~A9UW;F2|E#b{X_rTQ@U(WA`3mIPgh5z$e5w0!^z38?iWr8CuKGZg^oNq zto}>;N&Lm|l%Y3_3We3LB3JDqDI-VTL{)S_T9Be^znNN}l+h!R{Z7}Rs$Jidu{X+@ zTr5i0VJV|;ku!IhYEjBiUEOV}BL($?u-ap)#Z(XfGOSoa<=m2#+hnADrdEpZm~mmX zU#dy%+%WZ4uZGnhrandLM?D-?f13IV2nxhkywHuVbK z|BkRaXzGiK^f&(e*)Ld3r|bRZ>5Ce>h1jNxfR?k#oXHasu@l-M=oJBr`#M zmG1vhILR^fTB#p(csPkE5P6-{TUUgW_)qF<_4z-BlTu85ot8fwPD(ZP^-^#3R5&Ta z)Hmq*l5kRUQ?Hl$Q3c_o7N)*Y%a05v9b)R6q<(a(a1yR9c$=l(rYxLnf zoOGC}Z|Fdw?5!7!^YPU`5M}HAcA`3`;yVN6`e-wT) zC8^yGEyrF*Q=gyIZkN=LSQ<_`hW^(lwc984HW!AI+8X%*sUI~koJ8)H{;r~axpepp-4w9LR_M~^2Y z=rk2;IrPZ>E*!Z;&%6Yw>kQ|egu;=F>BWPNSgps5aO6^{9X3D&mubO>!)_c( z<#JuQ{jfWwQm8ApVMwPr!Hz=jeRbxxJ3E8Iw9! zaj=fELHgV*|J;Q?(9^X&cfqoi*ONOy!y`?5l6+;D;j99~b6U$V;j7F*GR`_HEk{}t zC;bsAu}O*(eow{^BuxTJ7dlxGkNFf!w@dj43u6g z!^!;33?|ccMyv{7aqMW)O|riJ!2r&i(#v&ZH^ z9T5!ScoU7>&nyxPHv53=}&1R?FRW9hC+`KxXOrJnteS+WYUr)EirlsJc(G`YeXI;pB|oPudxjoh= z+=qLu2}j=1xu(seaHQTJ>p4RGr*P6iEfOF5TMwpvOdm2BXP9O^*e0@2McC=&4aOtF z9jyN8fh+aCh!<$1x#vJRx z{(-70>?G?mL}|UagiZiQelC4*ib}=5N33$4JNkyNI58xT*^(Sn7PZs&B1wqku0ica z-8?#^bOsC$)HyJ85<{fQOHXUARVOjT9erKrPHtbcyP1cZPu8c6Xs^fUAQdx0mTte3 zxlh?Er*m2<#bu6DJIFshB_X7qL)!*Qy)<1a|6D8okhz)r)N?|i!k*zI`I9UxLpJh% zl8T9ZeHhB5C;9HOl5o-=p1G3tM|gI*8_1DF-N>SN$dN#fObq!hkTd^K^7`#vK#m$_wY(<^IX((m8iibCAnzhD z@2ZK1ylX4%4T-c&KMTkOBb2;eI10j}J;?b{$OTczN*^+vd@6<=RYEC^ha3gusKk)+ zD(j>D6<_TK&UK2*taCoA2fxG2=9(yIoo*k&Y^JXu7qKdhoD(y$`)&7WgrhmY$CGu#KG$qx48C*4Z+8 z8qng6oVq0*bW8@rwM+>5E1+xY)xQB9!_~xC9?8%F`yZpbvB}R-P`#jr@3b3{G1Z(_ zgW4I-8Jmn@Js-0UB+n)y`^c~xvl&?ec4OOs+cu8fNxXhNOV~{yT|sXwSa;X5fP-Dmh~!j%7mZ1TC*Tcg-?Lr-C&h)^X*WbGQ(ufltq?QJ58#P#VFL`Oio$&tqOPJ zl#&!mdH9OMv`RU;R}pI$?|+252bAhz&WCFYwz9&tq!&e2)h1j^`q17t5!V*a0{rYN zDtxv8m%Glm_MR=tpP`d1Y<>W?cNDh5!s1{hTNA(%bS3dYhrWk&1a?}j3SSEBI4n7i z+aYEO^={X~>dmgTR-q4j2&;`~J1&QkK-+OcXdjwL+e75%p=B z`r7K0YGHLw4HshML+-V(4V;_6A;#^XeODsbmaTzZeS``R2lk#^$~q6WC;&S`jxFpR zQEgduMB96q!+Z1`#`@ts#k7|sgnbFvW!+R*-YL9io$HJ*@|;Si?Xc%mI&)iKy$90z zwseUHvfDjdC=E8d-NTgLBU9={vg{9AE-@6xlf}mCEEY>~d?xMf6Hz==-g|odHWi)@ z#qmXy10Ka0+5#TMnE~6B`L;P!#>6(`t0{F-X#!kF``U!S@~rQo`&GD7fDgD%DQVvX z+`<^(MFHT&2H0k~Qo^*fCF&nayJY^-wvbtbg+oTf&2*bsRlz;9)gA6c%nl2QeS!_I^fS*~;yrB?Xat2~iiWBF}B zrgs6c7Az$@mu^YOuLgcqZ>aF|@SA|@6H5IohthtQTdPT3D_QPvd2nayiz>_?1Ejm_ zOw90%{-*Bb%{IFvKN8+HO2PGTu13Vp6A0W1t3(fbb%<}umC%HBl=Za7UO@;qL^t+I1%7 zd9dFHU>gIlKSW`Fv#?t^cY6ZZ?X*i8iqp20j`x5JwY-3NF)^>!HpD|5;vQY7Z2>Bw40w0SYF|MvaM2w0PL2z&Scg* z9rvnb3^41p=Yr}m18n2oC9YhFt0U%G7OQB`ab^8cWY1XHdSn|CFeI*AiL1ETJ8}dJ zS58&xI2cZDPg!T3MzP2Bd{t%2vB}x$1UU{D3P0k0GO1>AE*y^RNds{|xqu=$CJ^^W zvb2f?Co`{;i{klBE~0&8LVi`kZ>YM8*ndJ0+2 znE5t6{BW!9?E&E7K5(0n02B99&}&MDjr%DnQV|x`wl#<`2r&PPn{rMh6vQ8lG#|0?r%S~;YqZ|vom9w`c0NzLYfrP;FH0PrE zN<9GZ{rQxw9`Mu{;AsKi=~^<-#{K*2V&==cbdJ)RAPK;D>yaT-A#q-RN)$T z1$N9dfM*`3)SCcLEp?q~nVv26*23EI?Eq}O4|@#ZA)CsnYblbto5GU1r%LLMhm{w9 zrv0eYXTVO&q||w^pUdzTc1r;Eizw{326h@jHBD<3yAzu>l=fkXVB5-T;WHhjeiGO^ z*O}hWgWVQ@C9n7^#(#X+wgW8ecFx@wukCaaz;sCfaoV<(d+MtTmD&gF^nMgS%W=u# zYx_q4mPBsnw(W-ob~;*3*ILDDJADc5Rf%Aam7HF)R3*s`$?5p~3@#mYmP<<0!`m#E zlpX~(KW%BJI<`LnK$e>kp?Fzt21?Fon&plq|BD~YU_xd{mTTe%Gsto?B+JEF=D1WS zKD}5a9Sy}9HLf$Wk4NzsP0{+j{37K|iToO6ZFB6;7Px`4w_cHnjBT=GfV%{MS+oV%X1SS6TJ6?YKdSr`Al216y+~zuE)2y#1>BZlKNRnRs57YNT|#mqYZp1o5g-2w1}Rj%`px4TKYQ--&;WLfu}j5)PVmdX7T4ZDSN z8{=UgiZGt+ZsK8o0QRXGl_XCiKE$H<5IV|x06RGV%bgPsmYgfF4^5%y-A(K@ z+(T^A9;!s}8m)*??w_71jGE1DK$%M=*p}jN_#S`UmjA=UZE&6Pksiernur(oj|3=I zM=5@9f$^boF?|!@ay+D5JS1*PPJ9I5Cm&Wx&jMUN(sgFDCpU4wCI+}J0Q{T*wsBux z%9&G8|3vnRVw>`EN=1N$$nLkYYGgG5nf2B3&9uwX7{{>Pc`#i0tx9?WhO^sJ>OH5~ zAUv$Ez8T=BS86}*XQTY=95}Q~g#&Rvo9UUYrzaZs?M^cMW|PEb4~geD+ogRpuFYkv#CYYtaQ@-ow$M%S5J;n{MJ3~z0@ zHvqfOhi%`-z|Lh3=4Qpi&h0~c--NJV1AG5JRU{eMxfQNcQD9*s&7!c8lqhV3sUq%0 z+xD+n*o~Yk9@0eHxdimw1BqZya)DiTrHZr$wxYmw=C!hBj!=171JnX@f0gI&|aUA;(jPT{)&oZL2(`lW}cUt zA{{jm>j{xg0g7zWt!+;F$^g$Jm(Cjy4?K^AGfxsuoF|+tpKx3BzKWbK!0?-2?Ahjw z7~nGlz~++sS{wKCHgV<_X6WP_V1aGsHBz<-i|AF&$=nqd)68R*=E*EInZ5a0Kuczd zW60l2fZ-?=kt^`|#jdlUz2`KS2q)vKk-!zWdGaN!`LW*5CuHYOgI@;*5)Sk6y!n*@ z4kBaoq-Cp+tqsU*EY06S`_?#qCo^Pa2NjW*l^3+9Wbucw8SP%$mt3qOH%L3GEg+4v z+u$ef2tMNN0U|e<8I)YmL2^O)EESRGVi%Br7qBMkToBRAZ+N&__akNjE)vefzwA*K zETL4vt;zOsK^^U)OWZCmYan1XWhyd3z?hOsZl37{I5IIX&yzGg`JFP0DHo{9TuMPa zR3$NADKQ@pC6~=LDJn7(sLC?eS=iEp;vRsvt%$H4#Fs^@tj8@>CH)gM2;37dryHcbq;a4_w%2*hdCQNm`~cPb*c z))%sITI4%rO#teNC=~uL23%N6k=;pCs0P|)6BP&5sRvN=n5*Z2T7-`++UPmP^JaMK z80NB9OxTfREg5T3KBbS%Sc?jz0)iKnvQz0q5n79eQHtVeEt*EVWU_c#^7`k)sVXAN z@gnAA@nDaZUXFc#eN&SZTAd~vu*E6#ZWRxBn|b~l$UMJlQu-cC_HCT9@NN~67hsmuyUtQB{!QjN zpnG|l=P#oO+_TBNV$UVJDEowa>>hk6IxQ8Q;&yS_^7-dyuTYL$doS%r*=B9#q{;Bc zW=?t(3MUt+rR9_*37`nRrPYa`x|{>ljE|Hf%l^`BuJf=rJ&s=XEtFpL!;%iVoM50H zZcpEwc&LYa(Vm+S>NB7oUauT^KIvhszKnH1o6tEqXhNrhuUD5PfDxk)lja_-vN8Jb z5~&1`#ZkJfwY1hF+z=3Ql3dd)ZLR$at`2#k7|s1p5N8g|8^5w}7p4ovK0)?A#cz^9-1c(PcQ?vQ4Pjb(uxp zN<%{cS!6F;8UD5`fxlIy0GE-7RX6!9WZ`t>Tn?+MLQ13OZ(P3m{&s~Nhl_+0F%DEq?6?qhvHoXnuu5%P>Y82`X1GS=rzEk3%R!pINS|X_K z@?n#Q&R5P{f!gRgd<(;dLWLf_$m%uE2kXu)B#F=!=(WOoVtB=NsR(jl-`{rquy4^c~y8=1H2aHM1)q8^{Z=y)29}or3g!zsNATD==*j(WfwSevvTBa z{i8(`*_N1YpX+XN;o9?F%3_4mC}qb{c`7{U_)w@K(;oBtq*?AC740RJcv}#83bp5p zp-|?R;mBODcnVd*gNhtWYUp(|&5x{6&bLAV=X{Lcd@P0UdpbrI@cW|h2ScG#+8}I2X#?mfodjNpoWk|A)&B8ZqyW{bafY*Ys_BPlKog>;UKa|T^=LS!A&_s6t(}bA+UbeD(mA1>o{+JEmsAo> zr?IZ}Co%6y+_w62)GXroFl5G^s_ld_xDi7okj>7*0e>9;V@BsyTmmHW``^x2|EgFa&UJbkGr^Qk@= zVys9Ls;4i-HAw3cCqC8JG?zA^(3vNPBgYsC8UJ+ovFOosl`K2jCkrW?d}ew}Yi@jD zzbA_*Bdz_OET&Qtv>#)gaU5gK{7EGbl(ASQSGD!W8l<%xAdAcy_t9pT@rA$LV7{9Ag`VI5^Xvv6iB=3{=AK8nIOAl)7` z1@LEPlIb4{M6x9_VaK=UX}6T^<68OfIRsC@SNXOvOIh86p7*Kq5cF+_2Khy;=E3D zAnu;piqZ4vBx&9jNJOgQ~35%Iyrb7TA%3C8346xVy8Ur{^vd$jw}rl#eGfK z$dY=}NRl;ZD*lIKK;mc#7{goN$WQ?O3n%R;k8A4TDr<)`Jwi@ye8r@Xhh z8f+epR0ZLyJovM&r1_!lDp|gp`t)|!d4@}V8?~CFcGR;@XR+c>L_U*3X^Cyl8mcq> z{7v@Q+R4bRou0uM&%_wRC;ChlqUEY+gm!o{}TfHbHVh zrapp~WO^gRx;E1<=wpwCH<_vy3)bdH1*WFoc~@Fyas8VnA>x10p~g^@7{1k9xd}dxY7gfE!S~Re65mq z3HT1zSySSJ@3!E*kA?oJhzRgCErIOaN5Ewb?@g|g89?(jITX1z3WE3UM~wdxj>u)8 z55Cw3mtQ;Q?@`GI0bf(%I(7J+nV)9#(WdXsz4G2)Bd(wkVs22WyrHm)MjoG;zr_+9d-v>is7+x-J}%+fF{shdr9-%5Omr?^eyypjn4Y))D2F zroIh}hn(A+G7u47QkRcq&Xu>1D|7XcZ=<@wNQX7C(YYn;c*Ehy@*wzf5B$6^&2!qQ zW=9Bkwd*{W+7S`dz`4boie)2ya>_WPCP#(mZb_%tV8}lzv#|yywM6;?Czi zFRVz`MkW>J>bXMc806tw^0^{JBZDGb{k(rt$Z{_SDYDHrD@uXf#ed>*#hc-rOR|5S z4XdTdCBC*~0sF&(+YqxscupL=V7ySQ)kmMOC6=GphDW~ZXW^VsM4dS8jtJSDz__fACE z=y^%c=Q}8|Fr<%cqBgRS7rf7x(6zJ)lk*SdURqK(@_LZT>mHNy2hqHEh-%hbnAE$@ z3k5!tbET7{X=e2KM#?rjqt9=rvLlE?nm)gtk*b=hW_=myg#tT3RO?c5Q=aV!&z*m_!}=zYP1Ax1naA%`}jRUfxC72ZCn< zk?k<7*0o{Sw(+di<&n5s zh#jEh_jOAsRl>=x#Uh(xIju*wAps|{>pDrOano|K+$LY~fok?HoL*^9+2C11GO>+yJRaiUYmIEeI3aKLw!J19(tx zTc|qvuT228k@iiApe`u|YW|6;nd}B%YfJGn@oqi57jS!guuI7G;&89!Qu1xUy_P4H z0J8i_d&zZ%)@uavYm#!B82hzy+A9*$`Zu&{(^QJwMScy>UQf=}F(4mLiOy_FBua}Z z7jv&~Psxf0TMxta!Z6O7{^sYk9zUN!y zRW#HFkVSTbm2E<{IUuwCwtgG!+Y_<6RPMs9_)ewB8*8s)>(?8t6Qr=Vd;XS^8Rf*% z`+5PTui)a75^%2%pbQq=Xu$Q|Z8*JNip-7Y^m+yDl?geyaC-D7m69!-8eQj~u4kz( znuqn4l&-oa4-i~>qapIoR`hNYAc6tpN7sM$qU6#Z_k+`=KLhsQ^+p!OTTD|f3P4@#LtU0@ zpx(f<-_V{N3-!hn+GR0~)9NyLzvIcPRZ4$>!YekEdnUX_5AT_9Koo2ZUIXf(K(?_MxG*fz+}=Qj0h1)&d&}Xz!DV*5z`=v!+g^429N)a@Tp&kAa(G zXx-w|x*W@ki*49U*^&SZx*K*R1ls}FV;88DQGmUPYrp9wos`irV8sT^2Hcyle^Z?M z^5;P&)ZfIp-_*`+Z6LCb4XZbC?l-k_$Ii@~IQN_4+;KBgDBm7?thq{Yg%vsHt!ZAs zO%@*3-|mfaBH-Rc$v1a_TZnUrHQowQA^~fN45MjTdt^E_#d3O!)by65rg%=9;8b~s zN_hxQZ?T%bor1UM`xz;-G!gHK)3>VWP-C6rtyNTlnTYG5&=s)3tG631OALWsReq^Aq>}3 z>V?Ht%Mky3Tl;6!ORm^w7}ldseP%qv`u4QTOvN*ltKqpXsFW9ASdSv_wDK9Q4KjQ& z!0;t4@N8IL!kI1%ubgNY)|b&x4qCv5S288Cf2?OJ>t!mN*sy*h?VA!Yyh=iOYj$#z;Vt-l`0#)_jb6>#%hmas<-2lOQ2M<;j;!$bz(Ul z;5_-g@@gDM?6|QdrB#5VHTcGC+H>egqB0%v?~QqZjv{Mol-Y>p8~es9vk?Pq6a&P0 z&o#-S3?Fwp6lFG6yUzOqd}YiY(nMe?bUgn~1(DG7a>T}3&Ri=jR#=7`XsB<(kn0+` z;j*!T(s(2l79dlRj&_leop^t)6~uYo4^a|C!uuHNeKAzLF7oqHA{%RE zjmUNcWF9|4`2z{%IDXgmg5T1oRO&_W`!Juf&*!Iir-t7p0e*cozu|V0KJ3dm{e;6G zhQo(LXc!vcfb3d$h;2VyLa7PJEWZ!QS0Bon6vuC12!1neQmF%kA5*i5wa3ozwVIR; zVr+x2dow&p*Ss0t6ydB4VX?%p*wluGwgDC*dkYzh{ia-scMZCUY275#>X}+R|Jv{D zDCoHi$l`It?+wYIql zs2P^TFdP@d@S`%$tboO!G|Qrj21(tX5k=OED%SpJJ!Ok^j*m7_2__`5_Mk#L$`*vO zNO_}px@@OiJU&jB!MUQ#r7BgPd;OSc{g_3{>hge4Hl96I4sH6G7Ng0>1)S4YIBYf? zJ{~~B-~b1a{f&%_`Ed!QLNp;`evAuztaDW$V-7yrjzU0xToo9_YVvV4?GhXDn#hYz zj~t^?D?}5PvQOl8smYl0gtCMp96rgQw6q*PX+@=tz<3tp$C;k*Vo zT-V8R*iM6Zus2a6yTHgk%>tlTKxX-UN(6r@5gcc~>*e*VC%dZDjqv*vH9qU>^W$!Y zmt#KAob2P+sUOBL{FDj(R3i8~*$ptmpAx~J>Ik;3B(gooh~Q6&;7{wJB?;%#4N?)h zfm;aIvq90Lkf}b^naYl0b@?m=$w)$7K1P={D^%)N=<-=#*ZDl;>#{Yf%h!gzjbV1^ z0dM_m0A~(?@AZ|2#b-q{j0{**WOY_ngRCwf^BC6AzBUoVA@cLgW4%=Be_;4IihRx$ zu+1?)M;UI9Vfaf7!_PA~s}(GUoMBjeo=HRd01J@~MTWIM&!@;ANDym(UO?$19Rt=L z;!H~vpYNmLK%k>!{u?efqii8xY-t-1+F9AsmiEkq zn#f}z3sY2D3Yu&|;V*iHuaFTJQXsjdm{QuB$_L>>{qrTJ-7TdDFQfqY20_S9PGW zKz>Kf)JMo~Je_>cH^)W(g*=+TFUxmIk6e2k5>wnb7y;iL|6&QH3gWTf9M@gO(E6N+ zDb>=&enb4mCpg9iU$&xTqmut6Z`~p*MC^hic!ZREVEoH$ig=j+A@MJBXo*ieqA7Q_ zHBKLT6vp5Xxu&J*7sGGLVrV`-{$(MhpWvA3z<<9aPQMJssW!w-4*{|X$yUlP0g3q_ zy5Ah-D;*nT${dm(&#K|o@rS(-Q#g+Dre0zk2>6R~Oz`?$n2F6gP_LlFdlu=f}?UvtU28W(v zyz{HgG)vUn@PYW|E&Q#Tt?ez&tr_9r9qG#EZ{YxjxwVb{W3acj*MH{b)^6e9dL*$D zPPKIiMbL1nVd7LH?XkAy&{e34rMC{H41;XUUjrEWCa2*~TSrog1O9ZgivVBzntA@Z zRs`pVC7(3Yb1sjl-h2!-JnrkkloAnn-@yMGLSGM)mZqL?GuQdzabK5ED(K-eP@%V>-Wq_r^^m9$jFVTfIBUVz2&5O1VxqRXup>*nW-A-+C&gv?ay}ddRDd75+7a zA!DrYuW7WDGfb=>dmz zmKJsf`zcOeOX-uo2!)Oghn>rO(WUw@ua6~J-}+OSU!H$dX~&SP|Fyw&z9|l0aXj&{ z*4#2oN^!_-89??@ql6HnAKhW74viHxa`TQ1+=rwu7h zWcM3>4Nz*(%PJd$2GUbQ%OF3rkVjh@+EZjLh`Tv++x2jtf2vA56YdQ~uJi3+!~Gk$ z%in<%?r`+E=Lfj|Y4|m)j`lO(YFp!^lfNQfXskY9Q%E&VAM5Dy_)$~}! zh_W;OzD6oRC8Xy(%b*_N##jbK+xJ@&F({Ikg`WOarA>fABd*uTrr78PFy5ne`_+ux zi0+MfF(WtT(^Qaf=dCmM%Q>b;R4Fe76zNjZ&Vkj7FJC?ftvyT&P$X^iPj z5n79B8!IWY^7(6L;}WkW#;~WV8lu5}768;H8 znU)yBa!xq|ah>r~7A0Fo)qmvZPP+sCsetA_G`DVVr)wu}s6xu+kaYlF}o_?&6$?&7D zW%!4FSLyO4ke|z3XM2uK>FK?6uiMSlX8I{ov*(|xCGsTUs59|E^83&D)6eU0J1=+P zj`AbZ&kdAD+GDSt1Xv#GsI5`y=K{PvhqBe?()9CWcnez)fIUA7i^B@+_K}p*c-ZZt zNO>aI(H8>y_;D)z3W43~I=@WwV6P0oUKN1t=fjR>cO$UBw53QKH_`T&T-s$Zjnj7Y ze}J8PP^Aw6_Lpg{^IvXp>NPq220gs}(p>tD0pOdWz}!2Q_2QRminn9<1!wq0LfvB_ zoAJ?d|5GU9hQDkM24t5`&K_h$le5__XzN>wVWqEWRDpR2eu@?ZlKf)hv=4M%v7qvuaP3VR&QP{za1ff zWnU6!!LbT{<$G1Syxq8?kh0!OKS<{+0>rC+{h$DjFrC< zHUChR{*(;9-gSQC&LnFlxj6l4J2ODcT_ga2OPIyeJMD1#QaOE>t_`%g zbGNQtr3aT6c9uP@G7e|(ovd=Z$VJ8!;>&iGBeiER>Cx0Km-5sG815PDj-shOqm7nn zOP9#cot~$<^jbRga+(q)- z)sV;?OP&OH{-rA8Y=C!XQ?}S}$v8)bH{p_zAAs#0h2@rqM8WPNN=ZEIZc(Hx5$w1V zfvv1k8J7y|7T4J`#e=;p0DE}=w$O(i7csDVNF00G$HVTyQ};;Hhzq`PZvy+k^(sRy zgZE5voxOcLGyg*mZ&Q25bphb(qrfu(CbjQj{`Yu~F7Bz8N`Qr=_HmC}iW?Db3J7g} z*t3uJ1Boc!b2bzo{77XChvMEolwBUhB2C2egb@LXclZ?V$uz)wG5ub-#n;3W_QH0r zu#L0LJ+gUuHd|%fBfz^{XCL8XTyT60aA^Q|f&sRveIHqGUkd8q^O#|=uN4h#0xU%K zPbhrrAeM+}AG=!|^T*S2wDR=`h^K9PDRd)|cxUGlYlrRVK*~k+LX1eiYib zic$xM@fW~>)V^;$WrJ{truOkH>*Cb=8YtTn@MBfppKw(k{~`Qp2C0ln`0ejYsrM34 z#zLEbNR}CkG%35?%UG;yHsxe2(KY?Y;7X5UxY>89jFmE6z3cpex+Ym>JQ)~{s|-?% zH{4S(!#y1sZUVzSo}n`2eV9LB_h+V`!N{p(FuNVi_&8?3Pju~Cn{zgs0m*zbd#j93 zbxnT;xm4Vz=3DMxy~vkkechPVqx#pgk-Imc&~vySipIO@vsN` z(LR9oxC}F?wZI;wn#;|ugKOR7&@c~nq6}|gC&{seb)&HRE$lANlkkhxHaQfbJtZOR zOTa$-uxidD=|H;4Vehi3`7AxWXXbLLS>V||@FW+k=A1c&Qbv*@IV6XsNhQESlKv!u zR|{7mtPKcFW=jrjq+J$+ILo;5#^;PxsyWZiK#$Vkc|w&Y;!#{KHA``YmdKR2f(5H^ z5hZ>dP7asSE}i0m5<1o&-; z@;je%mQbqUF!@Y4Tt%gpQYZYPNq;i;!8JdoNNovl_xNq4y&)k#d7!9zxoXbs54cg* z`ALb?sgn{(uK8w7%4X^2pX!=T`prMnHJuagm6xc>W~$~q$IVb~as+iv8f{MM^oKJy zIK1JwT4D+ChT9exZWP1KuTjnSFkA$7PFpXZwIF>&lYWZ~eUcrpMRQ%VNxwx4Ga#9d z4A$ZhUDHYbUU8r5a@FEkhIiUhc6e-C9B0{*EL)I@Wlt;_Ig3%SM~n7m6q7Mqklpnf zrk}WKak8$Nq<^10W>+>&wa62Q9d2^+CLiLg0L0n)9G&zFErdzR_PU{kNy>IzX8icC? zLXToS?HdzOd>{*o(?_WmUqUgR1enfUHND|(@l_1PtpSQ(`xGBYGr;M?II}n&IK71S z(uBbBi@>VqREwVln9P<@<^gYy0sbWb%uEoW_MN5V^lhBE1N9$Z(G>O54=_w{Sr!>P zQ;}t~q6Du3tZ6c`XwOc>aO&;CaF%Lu0EQW5ZgTTH&uRV=9@ba?4)8k|l?uzcT6C}7Yd0$D zo^DpCn3$-jsA#CDs90ENR904GR8&-yn3z;(WK^1HWZ(PF%$~FNImgfE8K1q^%&d9W zTJNlx{dYi-YqBTlKbxWPAw;PeEyyk5iw;q+OPW zblvw7(I=3?*TCUBnR?oaU~854~RbT#Mth3#pMUyGzfP{R*F8Dt$n(m zk1fXyz*_>m(>@h_WRlj{6Q~7gbZLv|a~6*SZ-yZSbEwwsIwKt=N5eZK11Fhwcx;LF z9&ak46-r?gPU-`1MhCp<;yMGf@r1~*wm~W4$u1m}qA+*`Sjq50o$Cyw zjWcS{1FtMWJPR8@@~TgFlz1rbaZ%vS1Tc)ADgFr3WVb7XKiX2<%r%F zs)$kbeR8ov=_gvt_=_|=Mt?kba`l0MeKMd~zU3w#bIo$&Y$(LJDAQRrTE32>-%FCX zsv(_*|(J0oUq*AN(Dx51M3!-d@3=^fnbCx4Qvrq-rhVFz1<@3R1ZSsgHih%;Y zWPM1L$Csu2r9k>pYMK2CPT;nXDwJx!ZkyeJCUANPq8w6VIUOU+>5dBcGjt#dF&lqM ziErj$pJX(HKSNVdXq541Xc{CLlz97d4xq|$ve9CSV;s;|Nxc0z=PBjSP>?y4WcK(o z)D6*0h&=uzu!9%`6E?KN?Fy6EDc^9UgJc}>T4E1gNJ5WLvjZ=QR>+Bhc^DRik^l{y z4Pn73Asp6vB+Zs1F^fRQumqF=Y>CvPPV4~LvJ4S^0hJ&~80Xr(TPejphVxiTa}gWN z;|HLI^EfOOC5!27Y=rW4^o`tTZpB6dJq0hm1EAmOxYYh2(1#K z-1G7sP?C1xm^0xis8MqrTA$krKyXEPliL+hEL}m9VV;uk1bEen#>;`-ez8K~+&45- zC=745LDkbnLv7N4+R&=q0>tjWD;pw^?;?VHY{2Y_2tmnX7w?xPpM!JB?T7&=jyV(o zzeOa%I_KVr_G6n%PDUWW5so<&fjJc6JBQ#9IR@rWL>@KjcM)9?IgoI6ILE+(B7-w8 zMmaj77|lqCd$-cJaI})}1ddiG9!D<^^6O}{Cc9+o5-8)UsK>$HpYtW67NrsGIA0>b z(1=}VXP+1|I>a*|R+FPB0nTf1yZXXKeJde$yz$@>o3tSt(tO{v zQFMi}yf0kQm#-Cj)=l6l0t@M+zV#^jRWny#4&4ZCb|)1*ubkAk6_sstC!C~C*wW^t zqEFxh%%rFQl!2&J0fyU@#Ob!E?vOJz(rt2Q0KY|nrcr~C@JNfOB$Q-;ozI?Bla9id zPHf&+GOdPfFIEnZ0zIR0AXg5bk2`VXOOzXh=~_8_{{8SV(n=KK8g)d?)oGaB%k>-c z(OwO*Egp8F5X*Jvbym{eAH&)4~#5MsVY zx1)tzCak#>4M5Q(m2)m(xaYB}<9v+?LK%P-h72*mkVH`8SVIspjuA5e#gP+Y214SS z6PUc8{|}sutRDj}#^liB`aR|6--qjNqYz~ZD*U~ttZRwhvPZS|u}6;er#5IOR5mya z0wZGTeGCG=1(#~0THLPK0LMVB=+ovi5c^D0l#fN6Vxx6li0zIOdfra?1y3u=$3~-4 z{@F-SUY)R|MR~5vKo|=j#pdt?Tie(?6gNl1#OF+jb)%HRQ4Y>5_(J(Nwi>nE1zG+r zK41Aawgwfor}D3=wVUmcIQA~|Z!u{I!oot|4J`rM7Hnz(!v+_1#e&cgYSS3EBIJV<$w+ZCT6-*Q`+ ztR{b4Da7S~J^3TOc~TO(W8rw9!-^1x>=##sHdf?Wmk00DKu|Gm7wY~#2K~9EQW9Qq zNHgmoAu$aX2Qzh?x9KG?3}Oy42w!@Ed0gFEp<#86k+ zOY~U`b^SuzuKrM`uCM!)u$g==&_~{Z(z?|1tDDumsXoi3F8*BnBBZ?`pj1DWcw8sQ zKhdz9*J1n<4Q%ncd|lYpF9R*IV3_Sy;zeKUx+$oeYO8~X@lv^~UlU3T<=68++wUbV z=Fc;4`mgANZ#n_r?K;zA!WNGSRXo%tY?Yub6J9hXEPfnV7efn7=$}B~{4)>BdHFMB zJ%L0*9?v=(Kxx`ycu3afqBhS~tKs(t{QiF7m+*bOg^8liJAi*C;3wcQkdDB+9{BIs z;MY0eBLO3tj6g|>f`2C9pD80C;q$kq4SZE+11RB_WGVP(W}zqdd{$&M{4?tz=SINC z`%8ua{?b=PpJu>M2y(m5iZJl^dfR!&=cr{2!iI{_*juBj}*+m z6wHKlv>0!L3FDW<={iIp!A}Gd5P<~W2r!{6dRFwoZ;b#tO0rBSOP+@O#ot69e69!? ziaYQo?ToWhamrmsuj>OR5`>M6OZcM5lJTMselQq)Q1Fn_>Q{i%62DIT1-({$Dnfd& zSEJi?Hk@enYKExYU$3QnO>{|`2ssVC&Ib0gac@=kIvXrKdywB=x1-nMWD$ZN`#=wr za!)V#?riBh?@6}w4fJ|;f(VIXuX4BRoOqebmLf@TdY)Z{!gUKi;jY&53E=RK*4aBz z^mn|jv#~~=U57?iq6L4!p`#dKVS)(Z!-R7H|D5Rt*Es`m%1r4)zh$?g*Gt!lkaO5; zI!c|ywQQuqbxuA+GZil0B+|H$#0g8)%6y9j;G9B~B0Da?TDFY?bQ2-xbAURxYk)F* zS*acX(K@Hu3mVnqHsm?7&PwO!v_jHG_11oY+*`3#gy5|os6|PY+$-e|DnHXGLWWQd zvJEIOo)`e;56JS*z0#r7ce4n=*EQ&a((LJ1gwrxFn9}d1{I#8eyG6)V?A7dcoeKjs ziv|GlfFpi;@hhYiu_EMJ^g0*V&&@Tx&K-bLztJk?&z&#)ScKrcAM`+}^z@p6Q@6jd zmXAQM*+)gl&Fod_cAYms#&|hqJ-K&o4a&|_a_?LO?c4?u5ivfuo+k`~b(@6TTmB$M zSUgaKOuz`|0seV;2G@CsI8E`3iyx3b+gF6#$zFLV4GPzGh3mYT5b^FO=7cZzRISCm z^NP`yxxwH9tQD7HfM;4o$UPjO!R`8+GJHj}9stoguhk2h=H7X-&f?yA?P%FS^>*%+ zo-ac1o)Ofd)96mE`SnBBT(qfe9#xJ!MNa zi4g811|qTp@lF9{i#tTfYRV9#^SdkA3x`C=Cdkh3j*_Wlgs#Hv6+MmGVDS_kV zTw2NOzv*ld%8Wb+)(x6rdJYQ4X}l*`j()$P-}2calsS12Cc>a5PrrPe7WnU1b|Lyz z{v|@0l?OGsT^FT$`n5pBkn5ajAFqrr5HFl2LYZqXN=Na`!;3O-nt6(T@1ftK01?V; zdr_s^b#aDdd|8%c|zXkgufxd@EDs1YL>&T}rVV)k2|BSM*Q zF9w*4>y1qpXW=y4pMKesKc2BLON26?UW}10QRr5URp>5;gD!6N(_60ws@|HB7k8jF zbDu#+aD0QXxLt%YHD3a7mjE2n(5gx`#3cZDiQGS_1ynm-&q-Bl&B;rqqwNe1V9iMm zz*l6e7l=^i@JnDrA~>$OcL}E7B`tpNOYW^^_FuMNgkFW7iI@qA<)&vM$eozsKc=hy ziGExDB|@3W6G87wgFO8zA*wk=zjYk1L4-1wUmAqs$(fgi;56YB{q~{X>IxCcY<_7T z3TCIa@KSL7QrjA!-6!pPfv%e6JJOM%zT{7qez9ct4T7)vAUj{Ijbs21zA(33Bv$>PovM1kvt3E73nW`_t zNP{)H_Y}IpaM0jjKj<{~RK3N$!APou2iVa8T=`WTqFjVBWe*0p!2k#Dl@HWI0N~(4 zAE#^X4VJYQ_Xd}tZ8-<9aj*O_3{dfz2<1ieVAzn9Wvov^GE0h3_|=}*9-DH0NjdLZ z5&AHCCSeXF)p~m7;B>kVEE&`CAJK2^RuPIJ`*Yf8x*T;#_W$Xv14Na8T)?TG(aXH~ODQs#NqCKLSr|K={UEYG$+)|i% z0cdNvtj$Rjp{p>&&_t9HH3Y8sIrWC7prrZ0)67$~7W0N8X%3~2?95xsz5jC?MCdvW zP=a#A*gh0g9jaGcU*@g52tC&x6rtQt3_ap@C3`qKvEkd`mUzOW6%){8^8i;sZ<0ne%K1aXuzl+c}&~F$RJ1p0X zH!L2f1O4}_;N|s#_eJPC?3atuDP3O?rd&S^Bp&Aef0#E6^L|*7&U(WNd4iElbjiF5 z?tV*$iO>%?MyJ~~JjY-gj(I;k>3a5!zaS_~^*RoI3D?r`4wGy7jB z^HjaXyy5w1&D?LW0owW@9O6|G`Xz^`ce_SlIYiD|uao}pCWu>n;A!TmT8nwZ+t9Y1 z1K4ujdaiz(14Zaw3@`$#=7>UL`v}l_M25oe%e?hm{}x^=LJzPf96O@j)3X?-Os{^J zu%7GRb6~$QgGF$bI=G7I3>V;zYS3wua5}j4mKqfrOfn8Nyll{Df-=relKB< zc$EDxnNmD+E2RRb)u-skoc_{zBJ>aT1F(^5McYuQqB}AGB0i2pbp7VMks)Yc-BuqN z!4r&RqD$s&VE&)|kO&LJ7$ZS|kuAoiks$8KV*l7S-hh6a9}!_a*{{Xzx&r%N&|>2d zjSX%cdF0g08!788=8f!v0(#wG1GJ5NgKTq>2s<4^Tmk=HQK^Plq=vX+JVdA5>8VGD#=MRElL6}&i?DDGQ0aDE8EkC7q8cK-k9PW&UaLF{J&V2&VKL}=WiZMN z)ALIB`N{$Qy;jK&NVlCW!p>yB87Q9B?@BoT%2QlrRLM}YO-fMOu#GK zPB9*Tlz7v%BJ4u+OHD>8HvLjT;M5HN{WdYDZ{8%rE@i)Bx9h3_()FA0;t!XbRFF8e z;{Rb@D)Mq_jm~+g@MS9ZuqL|n;U?z)XO4)lp%~+;0VqWV+f|7;wO#RZB*_(Co*>33-&8DD+s&V$-;!k_>=yL9dJxJ?)9>meoTmDiBl~SR zjpI!bVUyTzCQ6&9Um;FQPtlLp3eUSl*ktx=bGy8eH1pDOctYpf?=@{<{(pYB2z!8I)Vp1yv83tzpN83# z*6JTy)hP6P=0OqmZ}b}tr;SGbN6xFl141%yG~kX-KQ;4Iy~VuInP@%Ujt$JKdI3W` z{ksTzghQ0MUDx1JkVDMYLsUZSyIg4Ijh3|*^G4UA?M@D0V_wx>46x=h5%ymUa7_@( z6l41}AvjG?_Z>1rR~V|^!j|5S)*W_iVBSmp zFhuEnB5VtWxGn{yTn_P4cQwRy=@7}4(BFL(RckTtx-7KK<^VS4y>uG}m^V^{ZQ}st zZr2#(Z9VI*197j@tF15dUYduV>z0eKSJ87!0E&mRV}fwXU5%f8-b=h!R?sNI-ef;8 zc1*1qaSRwcChrve{^EF9BJ4f(t984^dKf!q7etNz`&IM)&(^<*un*C1EEqdB&x|*A zAWoA`(T_R3_!<%R8T;kAT^Ze_>#Jud*N+8>$LjkY&bztP%Yc1ww96{So z4q#*6wofp?D(o13!~oZ)qLdojuLrHKcRbDE47c_gFZV*vS!ar{U)ZzM?YhCk+3U+8 z@=e8Z)qI&Ziq`xg!j7Te4PfjIS!To=z}Ooie9Te(9znl?<09-&_RB)?F!qKVoK8PQ zzpd!E;vo^Nc78u z(=xHg#!~poVudXea5Li-Hh;`h^%nCo2cR{t@C`OFuO^g33=-jS9AXAavl^mP58;N$ zcT29Bmnmy4=4BS4Z7~P1F|TGU1}JS4;b(DxX1D7mP+Qxc3F2n9EBwAWujVQAtllfa z|AwA7rJ_`to;QKBH)Z+vS`BX$Evyvb7qK7QJ1*GMuNoq52%Hm1GOy-0j<-#O4@SRn z!6=^GH4dI0cZw^T?H8io+<%GiVeE%wFb?@aTR0958pql0XT0sq>8rjM;a9RBCjHIG zM~LqBsmk@^;GJ>WJAQNCxFcxLrI|OblP4I-M3+|>+nN72AiSe7#?8oGHzT|n+s%M_ z^GyHPc3gmd%WoFpW7!W;8=on$?Fd!aZf=8E?*#lYPt{w@yBXMSc3=av9dkIuX(Ie4 z3^6_vWv3eAUuuZ)*${E#>U5oEo~pH&Hy)OaXJW83ZwDWftcLBkae$p}*DV8#?c?hp zYB&}1cKnH+vnoXR?dW+6rp+y$>#|!0;WWhumSoVYyiv6EcM*O!`(ZZR(qTrtr39zt zr|9}{JM`63I9^%GR=R8$!G4D2DyUl?O z%zLc|hZrfspT!VaNhoTcSKF?J$U?5kO80@MnWt(k=4HXMtnoD7mh)b_5(6xJU4+l& z0OfAi1kYNORS8kG!teV8=e38?b5n;1Ux1zykaQ*#8m~==$LSy+Sdw|K@kUVzn74%e z3Q;;e{fco~c8Y#KaJ*MV_)7Kz)h13i{U!$BG{k?u*Uv=1`R9x9HRv~SI*KQ+Ow7Zn z?~);LzRsM!^a2sSk^K;yNi$`1U(Z&qpNPCNQRh6TcSttu^CotokM;a)5)e-6PUqWK z+t+#Zvl_nGiZLe5bi1-W`F~OoM8(SclW3ZGM#60QMgn@yJtD$iLC@@9lwyhQjh+f! zb~HqKy>*}?H2_Z4TinY|ge1w1jzc_&Ar`iX@Ygs5B6EAZ8bT-i>@tXb(}d=ps<13r(PqZG101^J6dc;g zYlRhei|{?{2g2Mr-qWuGrvaxJkJmJt&k^DK(eKXjC|%O^JDXH=@63T{ia+mY?%g>9 z4f1({XSa6(;hp*R=#oKi@=3`v7mDy7I0m?y1Ac2C<^ZQk9(@#;$BV#T36c95geDb@&pn78-|#S$V^uBezR2#F&Xrp z9Pi^i%{^6Xac?rnJz0|5#=Un}VSti%MEG$I0Lt8}JpA?)yh@JG_$D{HU3Yi?8&3Ea z0#>M>`Gk#c;T?E>@4))WUHx%_PxsiONFU4hF5kk%5I<6cUMWeXW(VE?+_c+uBivktT^+u@4e#PxupHoLmCx=Tj{*2SDhYpg z7D_g;SjiR@{IKTkT$FlL+`AQhcU^=7d=(?5r3eAOim|@By?Z+3GuZMM`E3n9r@6Zn zr3|Vj@5DhJ3RUrIJyMOIUQNNgytfOQ^f!6C{s+kXSl0hHdAlm$5Rhp~35x!66Z|G` zMT;U65-nlkt!BP6KLx{2DT8v)rva?p2OZ$i6ohd~rHx1L;JtHl@E$ix8!Nm&o_S{o zgkah|#V8I2+yg-Oa2@tx+B?%A1k>&T1MZ>uCUW;wL&6mAj2t{8#{fOZVt_Ah?nUtL%|@;DMaa7& zpa5Uo+?$P(g9^W2+^AYRK##;R4G8eve=0BBTMLyAFWd`i+*=1Ve!XySGitjWgS0>* z{o)*i8T#E0M}PzfZ9~U5My~5%i}E5xqGV@QYUR(}jrBjWGQ1-W)s`|mMAmQ4zjs$a zz~E(219JU+CfGW7Q(z{TyKsF*)<|!AfQYQM!}9- zL%~cpQ1BUqfpVb(${-Jvg8>0au~0D(We_rU(jWrKlt%`}RIp;|6mJ-_0Hgd<5s^$7 zh}<;XMAk5d*ZW7lB~a6d(!{|x5{6qId0-&iQ(L`YydOeuOcN35 zfH4gd^1f&T<2oA*Bwyo=u?`p+9vH{eHv!YIEKgIPk`P7(VDO_7%ti)f8fNb_&Q*I* z-shdY0mp_a&eV;NbkSVkP}DWW9lL zUn*+TykP83XHbGg#8kpSQ0^}>-k4^Cai0yw{SFwp2FC770s=1QAeeXewStTzES8v~VDJq+Oc;{hkZ8}P>fT#RX&2f+6ixm~#_2Jj;`z>nGh zKjr|O?*aTWaJ>OFl_>ljhRZ*J-^xkYKG%q4DkmSY94T_6Ey8X}s-P5m5oK50trG|Hv_5L1>e)HrT*!bbzh& zfIR?w2;l>@D0PJRJ;Cy;spRj0FZoxi4&ENtUG6W-+VnB;)6kvl%M&nGp6qgZ-eXQ1 z8nk@SqVyIhmr-f>#I zvLH@G1_8>0sVKN@qt?pEULGisy**GOPqRab4E8|5#2q1^0vY4M9PngB1R0Yhj|_|l z3s6gv*kLrJ0LJrsMPxK#bh=&tsxmNQY%pSNFyb6A;th<3b1?FgP!WL=&A}HC23O4y z3k-~Z!Pb9ec*FP!FsgnMkpltaUsZ0`zY7eE^KCFLu)(;{0b`H{Mq@xg$^}qUkJ5-> zq@<|8)aYZ)W>v4*{I3Q!wxcqD|BW2@?+|+x!uQDx0G`!bL?#39zv0;#W|4{jc|+*zc&O22i=BM%Ii^Kb6&?cw|MT)?QjMMS0p#*7pc4~wp| z!5CwMG1dVi!@&3ygc>;xDzHe+;3740id>{ta}Ua6?Kf4g{Wb%Xo8h}ik@hp(C|sl* zfceeRq8%bKi-5tmhdg|nU;{kS1{m(~Y>FbYJ%G0Z*D{un)m^52bp6{fsv?Hf|M>QvvoNu<}27hLzK7VDGbmz25;g z*MR-30H|$hwWku_8Y&OKr_Mv>sV zwK0m^!7gfvihNb8mOoz^Su4*bVu|{^CLkb{h-hR3xRiQ>%!I4C`QfpO4Q57O6G}5Z zWz7sY>WeHuS<_EM)&a^RId0dZW-X6=-v(v34ax@&DD?))7gu7$?NF1C!c9%;2jI&K z+|;C^4+91mkANbNRC~kN2N;X?i^wLxcob9k(FQ}2uWT^Bw!zrrfYI!MfqOq!T@DpV zD9IT7s&v9gl}84~qqH^G3&xk+;#Kt*k!^&5$@iGqPDLKH!8l}t@uLGqyMgf~ws=?V zg_?F0{>sZ$Kg+eblc>tdb2pBaHYIdP;l8@p|+8205H7eKm?J=11Sf@7(zOlNtQS=Q0 zjQni3>v6-PzP&s!`u6s~=zE$SM&DoqqiIV(z|~ZP6zR?)zaq#VN!?(UMHo&nqz;O=1@dof$*}#Zp{c-T^ z@f3LL>X+fS@*sIcd|0AX9ZxU=9#3XNJ0j!V$LTw{)Y|6g*J%J-`kd%HkYK^eCrYd! z_dVYR_5vH&3msqw8L(fYB5fMfAdHW90%F=@1e++2fR9U*s)M)n5>?K>)5>Gw#}f58 zNcwmuPq0ME6EDUZbDn@_pKvV3NI73O!JP6(MBikX^F)c;^o$9&TyMKBOK3hb#?H>uokxSI~QZc+gcUvqMUa&A&i zKd9pop4tFL^KF2!Y`Ew<6)@a|Zr77oDdi8c^qnS$l7F?N?|lvs_uD`qHE0mch#v2h zxj|7kcP-u^+8}TD3!)hy7EBX;^8n(>6qIHQ#3MEkk2*j+W&@G$0r9#5@#Iu!VSe`l z@niwyh5kV7oeU65+eP03f@pTT{)g)m<%wA~5VIX1=GZ_K8W4N0Rv`Wt4=oA4ApVC` z@jrRHL_IfU3l)yN-vh*)9MQJ~ApQrePYtv{EU|%D>Hx9K2BOphqE3Ur-1uLO9}ta@ z^J2q?6W{QzW#zq^AN(1AY+f~+hDh+xvbk=w( zohKOE>|H_PZxCzp=cySedA@+3LaunK)F0q|{Ke}faiVVx0b?%BM21v=w>tpuZ~%VQ z2DsJ$-iIT?m^lcA3$7P~X2Ot}>3(5+1Q?qJi@tS$F%xK?PP1UVFV$Oq+bz$mDg6P@ z^pvibHJM0V%(OGHtjw&0YxWgGfNVRn2Bj8bTYh65o)=2Ii04ch&%Y7eV0q&jbAKk% z^-N}HpE$SV18)`ZHUaO`Fze|Ki)>#>Olt0b?LfQ7hPK&*7D?~vOq47jY8eH9NPJIE zL77UldNpI+9SZH!Gf`JSR8F){mqK3V5AFVLK)WnV^lc+r81;+^@Q@~i0E2^h~H$j@e2 zPCG7#QcgSJ0P%+nM3(`v|2_?(37VSyfarqu0DmC9Jslv{T`i)50OHvUw+lZPt#VaV zFAs>Q-gXdCr+Gj`1$#jJtUx@A-2W^eI(d2G*(%7Z{epNMAc{jpR5U>F_sR818^E!UiKn!O&@97D6|xn3!JGn93lKdtUu8 zpLJjAx?0rj^n$N1c={Zo)F@k2$X0WL~sp%#Z zZ@z6z6;XKrQHX3j*V;`)Jz@j#r~|}fHW2v+1Rt`{6NTj{6}}(}L90U2%EuGme+LjH z0V1jZAm(B>@mzN+AhV=;DMX!Z9DtWP057uvE;WFExIw{q4uGFa z_x0Oz*^uY>gV7cb7z@UWs0zZUbGznQ7YI@79WXXHV8B5pTU9C;I!!#+2tE9b`X9ap zCZw+CFgu=WCnist_~E3&I}dix3-ZM~F9C9QPh*Z>!!UyVjh%|{;sb%_@GYip>^)0l)dIJlt0R~iq7X{pTSS{{L5G?dx@wHs_$~Up2tgx8vQSp z`c>*-&hyczPJmPN!<=&7!sIdWW6rC3ZOrrV#PbRE(F~C1Gf-vU7|@MB#sJ8=L=n{q zAkP=OT?>K?kmDN2k02l)(mcNtg?GT@Lz*?w^2npU0k!tsnpDrfV>;&{5gh>a3xZHg zl%i21qx2)v9Us0d7=Xf`lh+Sl*6?Yf?cs~6*LE%#$i{x{TmU;4c-z_jHw^duSP>mW zAc$viuw`d-FAb#q4E0cDK?R!d{+@iOvL;I&aa>G4RmT%duLYHCND$U-DdUX=@Wuk~ zsJHV%X#Nc%Is_n!gHcKi2n1hxqkWrtSW*lFi<3AsAC|1)t(z+vFfQ*zsXBNEcc1QO zZG}E2E-<2a5c~23^GBW}Iz44z7LP}REPEw5@zZd?TylwsjwZ}fw`-xtS1}sqPiLuz zAjLIkQVVeMA;=nX-#i3Sb)K>6(X_#PteF^V!xRynfUy?BB@6S6OE5&xQk|q1!lZ?X z+N6a^IN|ofKBazI4^0JciRgjUl!sDjG@VaP}d5uHx; zpz`7fqy9Qe{igx)S->K&bWtOe%4Y#<6XcN!81c8Fba<)%nNNQg?-tRSP`@|=#e@DP zt^Q~18hMX@aUu$Ty_ch-LIuXZTIdM!_LLtc6MY#{cJEL2kJ|rQE*v}Ns3n- zqbF{}{LvTJ$?nqItHL>Exg47Y2U*(pWOq9%1w6s;}<^xI0&@vIw7}q9ukgyt$Y{Ck*Jy2<{%E!7H)xxnrG<#}_5ZSV z2xJoQZ2EuuO`$D?X{Eep;f1yo(JW;&ebK%Fv`Z^QbPdp!7Pwu@lMLGJcC>QauhH5z z{n2XEZ=o$k2un+W_Q=!9x24E;rIi@jN+PUVrP0zkTxY$}wm{zM5AD$hfVMhRMArfB zau~I|-JpHnj&?UsG};e%tZx5A*ULs0+U2Rxz&ja72P?G8$3u|iM0@l`g?4!%>c~zn zw9Ap{mY4cN`+FRjuueob5iP>D0-0Ge_bWTvuWe{C=?&UuC)!SE;0?5+`xV+1!4QOa zq5V^#U4h)T!VeQxq(RQhSRW?*&XiP!4Ne=-u7FW1ryH~fC6N2nJUb*$ta-*gx8>b- z2i_IP^DB7s`}g@8Zw&-8muu!S@gSG3XhdmZLy(LUaz!(W%qJ7L($>26oqKx5c(iC8C)6Ar`vuo>3nFl=Q$^vnd_WA`b% zE0M)k7CQrR>=})>4s}e)-gsg3$|iq!JD&jF(jFov2zbjdqsv+>yfM9Ocw>6o@y49y z!5b6oz*~liQkDX|ov{jUSvmyv`z@?XQ^6?9LETiHk;|s=#AX=j*O{X%D}x)#+`g8T zVWN~3`Lpaee~7*CHW3p|%P`AVnF$dSBO&L?)EEPt*7S{u+CKU8`>pF#}=OsuH(rHJ%%(O-Ic6To=_>CNURCQ{;2tmw?F(YJ!d;=*a zMb=oZT%8FGeDrf-BnHA1T#d-Dwnv_I6LeiM>dI`0fRxW%R#&1_LGE);_m6Xcc0sv_ zNhjJax9f#kgZ4TCQDGk=50!t$+OTFgu)Yw4{vpJJv_z~gAet}8XnMl_M-N>$9(6gs zSYOD6e7aw(^3#TwMNAg3zEJCSmFF9*aDat%q7CaL8`f+mR?Pkv8i4hWg&I#Y1T8i^ ztlO&U$|EqC-45;7@W zK&}b)XV;&%z^;->A|?-Zt;u$~*2WvV9`V@qs6=nE`!Snc`3}3*Oof)|K=db)2^q77 zu5#NDv2LiY!{l4D(^hApt%tn9AKH_=4BtFj#1sJS+IW;^gBC78_L5PU?La%nhPKdw zcI`lDNF<{76{58%5Tx1=u?{;vMqw@Zy*5inL7mtdG72aAXf0Uz*3Ph1YP;4JLSE$0 zuD`m$u1ym}ObP93cDvS<8oQPdvYNF^<)NCj%WPJaI<0Dhjt=5ksqu6{VSo(}>u52O z^*YRibOV?pJswlVB z0V$t+Rg|MtK<<5KJusjFXrJC9V(Nf)J({k^{zESsQa-SSZR=K~wodI#3^@#sH* zcor!<>k}d1#?*=?>t57#uw%WXsE)M8x_$=adH%2l@(qZmOGQi*v0_KDp~_(W%7gW5 z8`eEGtj$iW?a+b!L|~wP|6v366C31yLgQiG9SZA)WYlq&VA-LuZopc+fx84Bzl!m| zx_Y6AX#>^`Rc_Zt+?vpSJt#p*79gg!Wc{NJZMy^Q22gFoE+XpCh#DZ^PSZk!IuVOg zq=^k3DAp@~8;Wml?xQU&+OCa=+eXIC$F6Sj!`A0TOegHxSmt(B z;=)1Ob=+gu35nif_a8R9x*T?Gtb~?oBEr2QvU?-emW^_4@kBwi>bg!0XOECZTiG4* zAirq8Mif@0ir65at(@+5ZA!J!#`ZF3V|&}t#-8Ru8yoCETbU0nxE2WP_8*0)vIv4= zoBvo>hB`!{vI3q5jzl8Z4N=nw~}@2 z`S60i;}m;=gg-&OYae@|Jkwur#|~1aF%kE82I>}lEMk+X4x!tUU|m|p4wKCukZX19 zaCxH18ask#+EFR8CKFcmn5wQ9HiNL6t6-Ja72f6s$T=UqFSP?*rvb*6ND-S37+Vrh z8Vro<6bu!uF+9=H8fycAs32Mr#7_#u7BG2BzAuO^G}7%C1mBfkG(*H@5d^SS;kKZ< zI}tm<4q~DW#3UPtYy-meFAV~TWeXFFmnW)VV$}eDAbLgu#AXC!DnL{r&2RMtWSSks zeKrvH+d$-cKpaybs&+zCy&n+ukaPd$6ONus0b=c0A~p{owgT(cUB(lS*g-sM1M!#* zM7{yh6Nh}4Z)+yXcwZ1(X(CrL9}q!&gL&D%MQi~^MXd;!0h40(!Qzw((|P{_d5K`0@Fiws;H%oD=( zY?lLjW4B0NRwtrx75DOQbq3_zF8lDZ_mhCTJYK}s0d6&{+7@Io@cXt5yj!BOGVliq zqt2Q2s*V}B_gY$iT*Nj(-8SIf2G*!sC9z*o9UGm-3#u(Yh}af3NOxG;I50}_Yp70VZKAfOIN@MesRN%l$(igl;)l_@;2VdB0a z7^I@tUIFc1;bigx{K_uK>-+&e{ht85DObcL0B}tNib?5lXW0Rt?Erj^4e$U1`1G3; zj2Zy0$@PU%lLvXeKNx2u07lt=L|h_a0PXfX>nUS7Rmh znpU3JFwt*kfD827_U z5tj+LJ7CogESjP6*>@a*W^E7S#z|BA36@~b2ZehT`A&ns18fo z4zNb6n`|YgK737X-s>WcTb3P&>8obn6gN#-ujayi^2C}8woOZ%+O**P)WAMidziF$ z96^znWX>z!R}-M0J13w0e#ni0vF@mdO-r0@(-McB3MM2$ zgj}jXyt)&b>TSV6(0Hrh)h3i?zaSb3;#(2NO-n8OUuzO|+$=kY**wv7v29u63OyiR zRv>CYy4sn(AZihgT3%QAcp~&^fG8>xaomX1Vm`c9YdE_^flvW)Y((O08<9A*5uqG2$9btOidZ7P0rvB?C#ALg~4deYkQ2zC5 zlo~&Pn;~!U=eKaa*IRIbh~rk|jYJf))r-Scgv*PfJeCc^whwr$y;d(95pFmVE|b$6 z87Sj*a(W|^CpJV3bGUy0_YFFTJ9jH{>B;d1GTIx=Xg<6Qe-&_NJuTw6)p?`c?bm46v)h!kA zXF%PX)7`GOu&+}$f#R_NLpXSID?UUX%G(d|z-~n*UhNxr$01@Del9B-I`UBp@UDye z1K;aX}yFfgJ;?PcGrL<u3|K!>#HZ1Kdbev=xiMh0CjvlcP44(>Z3d(p1EP8YGbr?S z6G{tV^KZnjYm!GY0#OJZFNbyoqeR<4!u+T!bsZASt`u9HHeeUxx+~qE0nyxzRG%Z_ zZ-oK7%H6JaW*P%-^B9n2Ghl+vfQcRhaOacnYwxN;sR3;HBRv&C@<_UqM8sNFP8~vuP zYeU@;TOA_6{m8rBQMerYq}-V9Fkt<&BK}br@NOQ8*}%m=#-zqX8go7xJyRs&xoLTK zm)rGTu$B4Zfm=7?M*-`5i}+$RdJi;tFBglW%wY?qnUk~w7V(VK0G-|gW!_5yFpKkY zI4%Q4xgwsw#r+=G|6UWEDmATTU#(}IT~9e$$w{sg1NFpqgPu(xBK~FS0k!LrEIqH- z^wik(w4x<1^z3+Id84UlsEB_Ldg{Q1I^2IyctAUYM=q$^t~#tXbu+y6EP$S^D?~h( zx4Kf4PD>9~H={?cZkC=(wDPtqt|#k(b2F7y7 zgDu+o$WQObLp3MD`_ViBL~9}h=rP|3ib|MYp2V=;rY;tyIq2yq|_*e{x zt=DeEbGN*Z^;~U`zq_&K?k@1Mu|IFoZtN2M`1d+?!wdD`3zba?2<*>JwJ1BIaB@yy zE`GB(Fdp01im88t;1U?Z-}>EMkD`A#nx6qw>;ydgi1hue--bG{d3SRZPWXG!_(%00 z;&iCn^+9)(Al8izd;rjTX7ayDY|;qg9dr~fH;l7%NC;pUDE@*fgl&09*AEe1YME%0|H$S@{q(!SO#}L^FPrq2|TFB zeE(>t4*>xZw!wz}n=vRz!1@o9RNxk|=oKOk^AS{nO&`KXA2w5^`3>?9+aV$a4V?&?Ut!VCkFrr_IB`i?jt?&O z!hI5Y^P?FkMMPqG^P@aS+>|(oPFuj-k19~;P0d{GWFt0CmJ)`^%gJP6!kgIV91e8l z7#7|cU|2YrhqBcV0RcB04D3-7*e#Cy?6H_Nini*QTs`O7K-{DGP4v4GT>S{KX+VC5 zfoB(E9B}oc4v3NsS2HcHo;49RfUB(kILpS>JSSH_>Oy@038@kmRG+mUXW;6`VAjX{ zLw7!0J*x^rc=zKPlm@$ZrKHxccM-#n;o*-Rsp{iKNF)t>xO(>8un=7R7`f`>E(cf7 z#x*ZFA*=XDJZxP3xDE1lpTKCYehiLLnTHP_(?Oj+h)KP(A5~oa7(QwUpi0Blh7gF5 zBAi@38<*?E)qoV$P~yZTWizS7VJU|>sl3@xf?m}`VsW(rxv8O?5`SE6z$|N^H=SHH zV#8G_VVImllZS!lt^>cG?IHS&0lymH>d$bo2v7r#D1Lo{mHX3d!>=NXU+3(=xZoG- zKgqZ8tH#N%PZCf+fFv^f8gLcPz^_lhhEMf+=*)!!aB)q3ebS6_#O@I(Y4Ph3`2CY3 z)JQ|E#pRPuNMz_7UT1U%ysh~4X%LzuIQTW-d5jNzvMR(G$4`SH5AkuP=GUj-1(kVX z_$eJ2?}Jz(_!>x&3qOUAJ{>@nhF_m1L4;}TD#a&pM1)^?w4PmVrG0sZ#wy9#Ky^#e9AC6hYkoh58Rr6x9E2Zxb+#_{8@b9 zO_a_1MD)9pvUrp4m)gP)BV zC^K2%y;h&6^Iu~YT1=;htQjjMm@a-i3O+SXr$#!;;%DOwNb)IhM2+nDo6diYGts2j z!Oy?x{3ojlojhnPK=VQ$jhdg0g-V$Xagil)?H)>tmt;yFPD3X|mWAK)0SxdV*hHVEPxO z)JQ`uetl5}iEmbrFm(R=0-^k3r-NVT>-;CHYMgQW0+Z^C8XsqBetl7+l-Up?>rlNH zVu?WKzb}x6zSu>ThF@PaLxidAZXH>|qi}-@ny3L{=|3cfBF!ZYy$*)0K zieF!LL6leucv5U zF^B1Egj|9IyS^TXGRR_=B;LiOC;0VsBUA_bjZ-EQtd#Id-W4QgCc92(_1l@^EbLc!;tf za^$c}$7x*P#$MitvTExIZ z8z)PN@3fQGp-Gp3V;g@G{rI;uzkxqna9sdUgYy-~zM0~7?JF}J+iB&n%SK^baE$fe z?6h&LNgvbUVAnU(QF!~va~*ma=?Q-A1Ecq)`Qz7Rxb;bo>;pUYF_wm3Qi6oz$0Ojw zK16q48fuN{`w-oIGIT!t8a!6seFq2y7O((yM*f?2Ae5ah`*X4Z1vv9fS$3KVK0)KuxMe=J%i{e*{ z+wI!F)9|aq;#bmKj0=9TzJ-4(jd=@eYC}wG^Rn(_rnxhFpYWaBM$p z*gwS|$CB`9hF;l^$-O_5R$6;~DIsTky#h|`M?CjWL9H==Kf<>^n-T{jm_deYQ5@Tk zS+XDDwB7d|@&pE;K33&AW4WKWa(y&vj_uD?%4~?i7OM9`ED^j5T;SOL87O&FY1Ya8 zaN7Q2h#VZdoTC8Ow*e^8PFzw(zBny~p_h+AFQEPwGxpmgBC)*rEf(l+2TMKz_D+uP^xVl8#*5q;MjpIlp=o|8=8X_@X7&TI*@Po zij++C>lOI^Kt46nSZkd;fN5}`z}I|Q84fGoWCs+Psm-&6q2FSB>SI-jGnNO6Df7{& zId-5#Df7hfK&d5h#E~3J#_ch3>;U~-PL+mZ2Wlb0^mcMA`B8L&ExIZ8z)N%!{mo!BPM}kbFmlW-!g86 zKflLAQ-B&?0q^5^Kx;ij*zl=)VjD9pjt#p7As2_F|72w!+u;Dwu_bi6tZ6|u=yO}7Zw9=Y+QbNx7&OC79JH+$5D%2YDzeD)G ztDwXuj}3oVaqK(Hf$wCtHXIv%4F;e-R(ajC_^z5VAB~!0-_&cOP&*KF=nBNbMeGh-OHA{|-3{o8X zz8#`u!!ftTu@N6(TyTu_Kj`P9a;+@U9HYa*uJ5~0?|kNzato@!uOG@$qlK17q@ACG_!Kh#kp4YhLE510Z!G*aTjuaqwpzkWa{e~_8l@GFH& zJoT}v)fvYhS}60;sQL9nt5Rk|+-6A}h{>;%!@vc8{XidfP^IBlTM*oisqN&~$SV}C zHq6X6W`7&Mq|7&wV3?8rLN9o;tq7$OI*m8mkdNEs{B>Z{Ijn6LYUxcUzl_*8SxOit zFDH{^80#EXW%28Z7>o;kvHl=`wbIIA zb^2J|nz-UJRDfj%lTec35Nj`X#daKnV+R|c-tTj#D+~nAqns`AFjW0gyPsCg!51|tu!3Fl1n@|CaXf6u{;zEd5Dij&9OrvN|`5) zhaxPABaYJ(eV~60hLzvo5j$OH0=t>7IE<^y6QM{}HbK zDOu*Qs~Qx?e#~&Y+KUaxS}cyGK8_*5G1mW>W#d?-9Q$RXBIEER7xlVk0OXZrxVSEPgy_RF#M0n|uiEsnJhge1||e7OFqm5O8S$!L=9 z;Mi6FzyRQwtV(rqtUU$tR3D9+W9_L*nJ13zX_mwhM{?|{mlem_)6pb@Dh%wqeiQwBfMY+w)jwxTj-@3jj{Q{Nb{(#Q{3`QK5H_W^_c6BCNOhs)X3c~M+n3N>>^$Iv~ z7{NN6O=B&N9mX^`Jl@xQxIV3$;@IJAG|6>v?CMW3B=xb%YtM5SQ|2&|yO%>X#}0!V zRAxg=JEX*iV`;cO!aR037iBtC8jc-?YY!Jf}UA%7xm8K zHN}c!KbN~*9c_kVsTRjZPsF(380&xLPkrmPveL?FbU4`ca}5epy63*wXwnn>>KKnw z$SQAsjjnWw3`H;-?H63ohMnC`VC`6M|2fwc2 z5>I`s;_VjOo~NUTG9QhaUme9tnTKB;C6>g8U)MYe&EQu@DM}et8h&-aZ5_1`Irw!= z3veO3{F024iCSmmjo6qkB`H2&nLw{4V%YdgCdyQ&jZ)@2E47WkATqzur)ItV1ry|# z8I(9}#9r*Wjo??s7SX>S`1K16{jF8zu=GyFuU|p&-;gNPUaWGu#jk7mfD!y+{jbqB zewEmB*tM^t6*CBMSczc$#dkrMjeX^r;R zukin`t*A9l{5DJ`{4cA#)}vqBAaD24sQv$IyHe)y z|F0dE#OZ&8IsF^Ov0sm%Nhehrj{Oz_*GE9);MjE+D_p<1QR{UtMaq0<6Nb6&F6GVN z!1mv&q0?~VH^#i25(hTg0#E){k3w%cnQX+y$x^~Fc{!Q;{R}<>FFIHB=X=+`!PUQ~ zOOB1z&%lp>9Y?1aj+y=b7*YuwWBrj_%`4n{t!&cA1POK>NkTC@eR&ZuhV%r#jx<3v zGrbSL#>{{a{5k?WN4jXCwR4aXq*Om10UwTZQ6p-N=|=+~38KV@Ut>94z^|hS<u3r@ z-0eB|HMShM5c#9<%TehU#}3JeJ?66^-Q~ypueFWv+3yivHc}Sg(@op>J3R1vB5F-k zeuve+!-ZZ^A-`_;C-}8?qUb*o{Q5oJ?dmL+{JOqY<*?tY+^%DuHL}CXVHteD2!65t z_i7KnHd*;hQYqtqXa$!2z7u5^sibq*^}TQmjvdQJkvILl*U5|~v;fDBvAFHlNJ*}b zHMAa_IEJ}>tQfV%$;W0wB3Diyj$J=TaqL(znqVT^t|zbOCV=`_RqFKrF=T>cr5wYd zQTzW`sZ!?g|FJSl;={4)ad}9N9Vh*g7*H8Bd7=8*KrTJM&TKO=k`>V&h~fVVImQk$e42J_Db>U-Z8o z9P5NXPqa&pW$I_(ouKoHR4a#VO0+n3!?ze09Ao|QG#kgVoH^`x5bA?1c1hyhsGoly zuSOMDAfFs|qkjH<99}-&WcP@a(C@w;0UwSdD;}5Ym$eT&-V8~rujz36jr#fbaV%@c zkq~VBx^V{vpgvX|amMj@2W37QHNTD@QOZ0qJl<(Z95G}L%M^-V$LZq$sx+~zodj=^24v2`7zX*siObw;MWQG^G|#e2TP1m5+Hnf<6!p)?W!*2Qz$H-xSz_ndT{y271DO$iQT_9*zg54`p z671J2;6zsfHPTp%V_gFv8RTm|t-Mj?u&yLDNpo;)9POY!R;4&&*_BM0k4DY0t`w!r z6UVMpOX7$lIX3QIAVm)AN<&GfO2e_P9Eg~292^_>vc`oB)79pMi?T)^TpZ?*_GTL* z+#M|p$GQ;nF3uOf9Q!k#j9{%}H8x`7WGP{o{BZ0RJ_9emTJ(Pa9Qzag{3~B_Y`lI3 z{%5J%brO3xwb$Qd_F*@##kk-Y>;LT3yduY%^f4U{cKum_QfaYE5^p@|34Wb~TTkZu zk;tbBsh68pN3leI++W}3}4gX_VN1p_sM)TDRl5_{1ZS( zeXN@4jN?f+Wj-1;zfR6n$~-YVSzt+g_%;4r#jlfvXi`L#hF>S)wv&|*Irw!8M**(C zkm3GHbmEdSW<6(+VdyPm&o)!T`>$4r09*6R?89!+&%aUc`m4>uug%f=SW@ZM z-arSI{dEMT(_$HHzEwT{?io zG~Nt!LsCGA0~>9D9f4IS^rnMj91H@$0n%f-{^oQxID6PYyy{f z>SNVFXDqu7pv*_3=2*9ZN|^_7w?US~5l3=t!gIg{j&-A-lc>^gtXl>|nGiWRHsKqM zs}{A5UbrapolO{KVidB7$g+DyO0aSA;}vkCM;0~G zSSye9$cBV_8ZYx<<)l3@>`it+!IEI(*rW{@fcjW9!x_sS(<$@Os5#bShEnEzDbG#u*zr}Zd>$icDfQ3{s}(RXon+VYr``39Qd{EzacixEzN zPQx+R07wQ=;=rak<{D2%u-3sbBQ{Q!5{Ajk$>i9bdYdJ_1xFLT|NKq*|QK`<&6yQ`xUpV z=ifbh!pl9Y>>iO4`rX$f;6u+UYNVkSzj{_fQtN9v+H-%o9VdI8^V2nEbk99FT%vJ?Xje$q&CK^Z9pK zqv-z{_!YFv-Sf0~$*&ys{JUqbBzMo=(+$7OUhGcw{9D%dO7-w-i(@Z#=OUon=I+@m z9VNqJ8Eno`&%b;2YK8iER(NylPWAk|XD@iVcaYsHl=PzS{c@}~=63IR8f$T^cQ7Oo zzUC8#dj5?LXo87s%V9ZO;=wUlHNY9m-pB;K2l!~z9P2$mDf7g!_drYH$P?sP&dZ8p zy$7L5B2^lW^@h`WXF%lO*kqT+RfAfuJz{Uld}kAenLHf5rm_c0J9HY3^#-|nH&f!k zra5+6cQS&tjvQvh#>rB`F!|xw-F*JNc%A6~Avks#TzxuzWC@_|PJ+X+PM%ii?iq|J zt8&;DvlpAZALAm2vHmn`ZN&BDmMr@^Ir#)yfn%qYp_JP=cGr`rz&aV6io)6G!?C;6 z^Y5O)8EC<|X}lsOnSQ+jP6SV(MjC5zEEv8G#x(IZpH`~p-{^oQ1rCng^?!Vw4}4bh z`~UCv-Rhis%`7dZrfvP56iY*CShchWQ$q;F)Y7U|tCs%V7)C=rg`s?g@kz#KSP8?b z#mbNjAq;(d!Vp5(hu`yhpL3sc?)%>F`|!AQ-q(3uulM!7uIv3i@AIc_xx@>foC=25 zSR8XdPG8i*c6WA-#RV-gkH=*pO;{eK#;)m!U#w$sC{+UHL4A$!fNcA>ny*H zNF-N-!~N1aE;tb*m2MuwiZ~oWDIbvw!inY)8EA%!Cd@ax#*UcES&3$NjX7#3$XX+5 z>Y&D^pG%EZU*zxo2{m>E@jS9w*Vwg{R*fBT7!?~nyT+WoSb@A?q{ifYe2ixu3)P#x zr!2S<6g3tfhv?Tt_Otzh|8RmDi(iY#l_;vl3hGc2m3YcCev3CMT2tL&RH%vgEy5^+ z4b@nDJ(|Yo;S>66XE3m>Vt_E2J?q%Dr_#Uh$*G8abv&y9b)1!GhS!**c7m)mlBN!7tWe&8*9`Ud{*D?ul6W3vJ$s#Dy#qHA zm@eH|H0&C4_F~gtpx;8TZnG@X4u| z@U^0wPjpd?c71h=vB=!|>Sl&CQS~+BQ~aX7y2T+0Lh003H^SC!FsiWnD$KzzV$w}S z$0h6v=BS!qX=O{R%EX~ z>qzQr{j2`o|D(Q+$_yHb)^peErVxFulSkDAjqbah`f~PSGvx&%^(E(zs&(tDHpxEL zYuL;_ps2E=SVoR&2vr%QoB0GMSi`#KAo6r4Y7LuNin5Tic}SsmG+L7%H5$nfoGJ^Ce|J`b?qyMoc8zr}v&h`| zcP|fVqH63qZV#o#x>q2ph0>|9?i*0mpbD$8>;7T+m6$}X!k@hwS|^zgAE^wKN4yfv z#0+Et2&Xm@CFfb93G+?HLKP<#AQH{+HOx^vLDm{cQ+U_<+3Re12VOnYpK=5>mPkC0 zZq?VxBI_Nvkw|s)Xb;s`t+N-KbtC;!WBR=3I$0aqi;0s|S7I|F+fsK8E0Xf0zIqfR z8{|~vUVqkJltiQl{`6SujfmFBE+{%8)I*Q8!YBg`tzkVX(Nskbov;^K@4qns!V2%X zMiyO02f`<(YVpwXT%ZS&sz+@Uqg`J;YArH1hdt^-ny?&7g%>>nGxgPD3sNtXPJQ)g zLA4iESbfbl@r%qKEqT&$30uP)wKIIJk#I$1p3Y~VX^rt{Vs>;*_!zaWGRn*zY? z!)D71M(Rt>A2Y$ThK23JW`6~WDm!K}G9^@HjBd_sPEcdV9D-h7LL+NzP8Ntl&axsW zC3#1qHFA{-AB~Kjnn+@9Ck^JT6Xc|1H2p*qwT8|4!CJ$T1_NOtdunXXD>k2;k~gTH z8cWI$T@<4o|D;Td%#DB2@Q@~|#^!Q+C^eRpg=7n*Q)5X4Eolm>uo|0tvF%qAXImru z5?ynYU&MRv?N~`P$#4?Og~zx3Xxc;*=9`R#Ngu9ZNiWmFXIrXT1YAj-|wV?saO+*@qRMO~2HboIiG-r^X`oVaHZ+-no<1 z7tdnr{kPF`0@QK^idw^p*P$dLJ&AJ9Vi{rRDUQ}i+@m8xef2CBMj2>m4eMEgW|?TB z>T90${u=`zEC`qpp2wc$qKjg*>#JvlMdtB%bx0GILs`S-O~)_ltEa@c zQYfAJ>RF4b4pmrv&D(7G)hm@e4G;HA>!N3pbn^{XM6(x_-YXwYCz`z|>|Qyd3G>aa zuUtJ?QhNoI!o{DhnFNS@)6)_7iaSVZGW=r8@QH z?8D~E3r6Zo&i6X#*4Hy(`>^>NL9vGQY7ZL8vY8A$*IzJ{W7e=_LYv&&QH?F|fgmc$ z6ln4mZ&b9Vy2GeY6UkeIQ3e~TvE+I*jnTs=^b4M2lv~9B*%wx03uF@@d~zz{UNV{4 zo!k<|XxCVBi$&(q*W-L8cRNmO4ggO8Y|%ehxm0Iu{kan zUSnEU6y+D)l$>ux^SB^Z>p(a)c3c@6nJ*pI*l~57m1u_7n4@-rtTmFR4r*+XyaT_* z@TZ(djU7ikQxo+Xw#a%1ZuHI!8Y%4Itn1`6&OU5mEd5era=!O!PmM+F!+K|PJ||RN zdJS7BMJD%OS;JELA?ZTt z)K>~&OUXeMR$q(k`@a-cxD@$v!0VUjWYr5#vJCWTE1D@yAohcB>MMnOr^sCCu)b2- zr5faH*fr8oyFnJ9q$#{>z0Y4F@4r_+=TEtU`bs69eWvRADz)E#r!ET`X}E3Im$MIB zd=dRpUvfS*=&7%;ec0kTpf-W1KvsvUj4?0%g%i|RS~@bdqZ(UmzyD67fYT<(C_~pt ztr;$wu#8EDsfn}+!pK=?_-T1)CW|KOI$3JJ|4y3ioh+42fbhww!th+C6^Jg1 z(XO$yLW|7faZyMU=CQ0{rFY^NHI`P4lnA9$V`&5}Z8fT}8Y}(O_KT$Uk=f~~u{6;| zCz@`S9EBBr^^pu`!0AM@5A&r@s%XM|ldTU8w?tKw{%ov*W2&E`x5EC)!wLRjl@1WD%3>ZYGIVYhSssZ8_?8751-Iq zZ@>TUy9EfhN1htHUM}&%C#M?1bJ@3EbWx0UjrDD?$lN^kZ47C`@+dWS{ZDvGjrApt zeVc{SsjN)L1{_IWR`o*z#fm&R(p4YS0*f+jfmP zd$DEmf{}Gh&iC)<*4VRQd$DDwf}+OyXCQJ@7TSv~dzoX_vHs1_$8=O<%PK$+mHw1x z|AXGBXbl^u4x&O$^gk$!GT2a!^*@AG_B0X0C-lqDVqjav0O6A0sj=npbO4_|6&Ie% z0VaATUIe3EV*}zWGB=L{5<;4=JW7o%zZe#3Yyb<)fFz-GYHR>O8<2@Atj3l>{ z2gvO7tYZU27oBM7<|C|#<^VE0pao8+#s)B71~iH$%s0En2DC{<$l0)KrK5I&ESdq5 zridWRIu?|7;16&0r`$n}4U7pI$4}8Uw$gqFKCmcgq_YTEHTJBt7h7>J{ZeCcexT>? zg*+Rv7aO>Y^Rg{MMN$n*8XY6ZVz%`|tEAK#IcZYo%P`g-=cugy%7Rs_3E^?fObDu*lpTrjuErkMLOP zYvpDGPE)K_{rstQzL^%d-5`*oN+B}DjzE7`)2T0KFBbfqeyJ}xe|+fL$oubSEA916UnhfqfZ7D271{6Fq#~xY2(9J*W-{6WOzd z-5{5EYD}N156|TwR)RtGQH*wt4XU@u+&m6y2x-FB38}Fgds;O%s1Zn$P&zd>h@cJH zk1DLjZoJO&>x4WK6R}6sy6D*?-8_U9HFknX8Jtdyoj`G)P$HTz-|QMYVI5~Bn&CC( zsGT5djijlA8oOEEf8V^spYjwnb^@V3F+tZ@nf?BIaKE52gehyUVa{IcCj0%joFAOw zxlV@aP1o2>SK=KtHh4Ia<*Bio?DyY;_d+kTF{;LHvfqCX-jAuwO(!Z^bD+bhP!ogO zg;53@s<9zHG)$Ao;S>5Y`~CM2ruUH4uo^2nl`i4ar;@^JYzT9Ih`y+W-9gwjHYCX+ zb3GoC9MXj4QEIGg1%9!P4M|1%iIYx^4aq{4jVi3h%HFd5s^M&7gkPfLf)g=Py1Chp z74~Ab?8P5sUv6BWPawUqYv0IW*5|xvNBYEDaXiZj!QK2SI$`eKzY^cUg%11LLdiaF? zmNyvKRxv=B%*y@ucy4)s{)JCYMeM6j62FR~80{K6iIqXf+&rFC9MXj4QEKd#FYuHa zJE;UI6-uYZPLj~CMHN296<%jh{~4KH-!iEG3@Ppo zYb;{|XC<29HRhB3UEYEJd!Rq%O=>KoAZVOyJ$t>)eg~ex)ELU5Vb$1k z&R(p%5B*YOaz3NYQ)83uV+lCbmC=C6baVG&y7&>9U&3^wqbS;qTu=*;OOT6&OsdeFN#n4L8MKRj- zHFTXt=GNEHs*onCzHS?hU)0yoYGi{@I`uV_unlcQ6;@xjZNRVHXQj!L{?<4Um@?m?|#ys z@(J~Ia&yqg+^yHJRrdSuliN{EaO%t1i`{-BY}A*WA7qg`La4qIey?1xDJW1>8k6t8;3s;^99lo=GbRUamzc>VY+RUKjklB znu@Ss>K}GY`CDu)o>UH99wy8wGCjh0is7kT;ZKbf9wx@A{NwGKC$+1GC(g^W7i4QB z&ld3~!=HLIJg253{NuJ34+(Vq;fn3}bLtdOg%Lb=`rvtDgFm&8@T^AKLOlGGt;5sL z%Tom^a$I+o!1LI8f9i?C(-t&NE3qS;dXm`kW1BkCsTtCueD1uQDm(%lReD+iq36do zjnm?!fr}A8wrQL;oD*4*zSq;|)35kbPp8k*xLTjKH{?4%Jm~n&7YR-bPOAo08^Lqe zN$}j!#h-e%@DT0c*&*M@Y2PQ=zUNA-yY2UWux$+Fu8{A{;L~IVhkUooX*dHMF4NFk z26t7_<-_OuQzz2p@NA?y-nJ$$AXxE$j>O>bt`>LqCq}~Pn8bCer(eiUW|TO zM2D*{q{B^_{?sd_L!vMuOI;`n>jryl)1)h09^S%v#x^2hAdRo6EKiHxSD%9VCrdlL zomF{6jM6K#{A=%WEa4!p!w(?sc5HN`OPp&jYxR5FrI=tm|>2l7kIBNH9^kvW{ri=jo56=ypDo54|=^CNW(?>2nSsE#q2&b;_eoYee8;B zYY?ZIv?Ha8v$9m4bWms?>wBet{B6~8RtzL@cB->XX?Xh#oyg?GaPJ9mW--pxP*nT_ z(Kv$abDVkKc4p0$^#25>f=C4;%z8;&3F;$ftXWLjELpm|V_n+``bW$BsjWi4FKC>> zzvX0)_45!tx4>siE{>G_%WC{a3Ga#PS>Lc-kh0Z#s{a8yC z$WnJk0V0lJ`PyJQ=phC`^V9ll`+nL|R8AfvEE1W;b`DE#S zcY0WhrS6_oYpK&1lVI6PU0thvEYV=8JA)!R(+q`%#u?tr0G-*V&ZKhA467V*gnpjJ z;oDyDr**;MGbbR8mcxfFhtt^EYKPA{hjV3!{POu(Q*hYRvX?rosR;F0Az*KO>>mH7 z$5q??X|j7bvoUC##TAc4Y)Y_uJl5_}hIeK==M!zlvwSpU-|1AL9>To?AbjRsf7$>D z&*FM^mR$bzLYIcGEM9t{yLXbnYW-x5tNdvb z=ps86sc^bDFVsaltS@kCFe1xa_8StZ$@<8l&!(WWy%%FmFPoxU-|(khBJ|`U`>;bl z*`~jb!SajtMs_7q4XOS``%T;tapclBaJD(Z`$`4Tx>Zme@{+bZ|EAV{6 zsTd@Vpp5!KFLayahDwh0JiCuQv!r@dB4YpYxiKn98s1b(4G_vvIY@4#GgEP<>NbCx zyrmvRk&bF}oZ%gZ&Q|3(pKtVKoLY^nV}zsS-y`2trH`Dkj;iBqLnM70^bbt+r{PTGScAqQfB*d|53}_p`4UO58#yyM=R^1b zIA6|E)(uaKh3)|s7}?WltvoHX7rM<7M9-dXObnPLdnM2fQ(Ow$)5$2tP&s3C<=8t@ z{Ll`|7k~E!{b>*3@R%t`i*|T(lI`%rA%}nF+*)J<4v+0D4!bRTq0^dmc6`RH6R?>@mWIjwDi~#G;;E+9y9D7pRs$C3r|iQ($8khNuZG!&PdE3>;>UtPy5qefiNcz zS*>6lcm_NO(938kOYt}g86^9{VmpSFX$^9L|5Cp$S! zNNb3znTFn%IUy9PCa5an{Au#oE~heLH(N`YZv?u>3na z8%2)CKRH*9-C5|FR%gqGAaI`i?^5|+fxe}XlVwOnk zogN)m5#Qz}dvrgCjqXrrboXIF0iC^9#w5Q)zqwT(S)*H@j0ZeC7)K3_lbun-=*IO! zpUw!@kF`cOjxdbN02rD+a*jvBGP-f3Y21{^0gyI*vXqm{B2UWb9=e**J#&q}kDt+v zs|y;rmDcD!_4%GputwLXvv+iTx_Cx6ZZ}pfq0v1rd-_v&W-GZ{|A#fY+!#n@&PR+c zHwk?*z=!%;qsvW2(Jy>-59L?`$j#wgZsY*$(d8C!vMBPTjP9S=jPAZq{CyG`U2bL2 z7;la4p?XGV*M1-UyhGPMmDwk>i;>FAtwv-y(Utjpp+2%k_t0K@bWEu69gJ?gi9U|e z{Syyl=8R`;7_Zj`d+C#NOb|)W_$(wlasc+|#y)CE za9DMcM=qn33P3%B!(k^1tjAHR6A!TeIYlo0{QUr*-{3h=`)sw;QH?UWj%>O@F`<3^WBH$ae7orpWyp=#crteW zV09r+xi-C|47m~eOYZS;%Qw@I7&dzd=%qLR7 zXDL@&Z$8~g3Y2rEAb;&7B{xROmHew`Nri8W8!7b&J-m2iCmu_vY4p(P;tI7IyX`Tm z4AsTrbKV$Vs1eh3Ql8T=yN){BX~cCM?ZOhe=8SdDBzDc6;53rDj_03JwyBf5j=$7t zq{4QxPcea{*M88st#tU@)?f(TRz}x}K6MMDA~Ts?Cvw7WoWd{~&Iq+mrS;0A-ees&2K|N78z0fGVf;hQDtXt<7obHmh|8t#^)Aw_C_F zX}xrwT4lA)qV@J>RUy&!_s#A)bN)P^x`Wnqf8QL=#iXh`B{iM;mMNOurm4Fy9Mh?9 zxsrL-X}ZwJ5;VAzZZ877#cq?m*GH?>XttB}P7Qd`tc)fW6bKTd&>Q)>OzJ1 z`uDtsBUUG_JoFjEed#+b%HWse=nq-z_E|u)(9`FZh(5)90p|Oxb?|&Pvgh*;@r7KL zWpSOyTsDASm&N>9pRc}_HB)+LlXyP+$B=n5&E2l~7I_R2Y5pU%rm0RJ7-|t#=4C81qAql0@pl~=5UYsc*Sm(i*CNy;uL zMoKM;%YEc*OVHxTw{yn$JInaDa0L*GM&z*T0pYly+2cV~2Oj*42kpvuN6ZfgjXZ1o zow>)jfN;nUs`EBuKpQxmya4-u@RS>+)p?U0}d5AIOLr$W#YG$vW~BXOHZIZfQ>A&_|+9yf*% zcnX4hl<^q^lc=9b6C4jFCDN4o2?bteZZyG95Uf{5s}M{;xZPv%348(;FD6Y!rdlL= z@p(~ZA}mrrq>uTJ7qP=2c}y9f3rQVv(Dh;q&3f01ml8ViBDMsArdzoKF3m=+w_iq56sanoc(< zV?Ukd4@Ru@M>@^VK;$wR>U3&UrwqI6AfNBuW0dh9Az=Nbds9`%ZKpFCmKfg6-T$Jn*Fb(q$cnD5X9|KljRRKK2!r2u(+=$O&CQ1jR-5C;hq9I-6^1vp#nNW@;_G@-_h&E z6wt-i0;GGTfG(B-3iVnU)hp3ILh`>@8Q%*53lO_*DSJ&Ym8L8}A%cbu3CRCDH!4FO z)?8eH)Vl<$X|DAU9O#fh^1o6U2Zf*>X>$ok#Kny+!OJpp!vn_<;+a^l%u~jXLeLg8 zF0m?54}pn%@gWa^%-m=Ka{unF%8>6*E};T1Db)oOf29?NOVUwg*d%fRds(I;EK)#L z{=|zqNbXX`&q7j)Y;cBg$ugQjj~BrXz4!%!`;_sE5HR&Fv1VdC-~3!sgVaKBq@fGw zrEChK-xl52w zbFxeDN@_<03FN<}hcfupLW~jSKP4BtS_w5+GB2zb-pbmom%J@?V4hM}(nT5UJ{io%{r7@`DY!WG;S7a)}A_ZjSPrM-i zEkl&i4#}lc5bO3uhH)t~@lu(IAuqOc?iM=FQ$Q1)0-6*mpl;;<-LIALxAfW^G%kyA zd)LBeviI{ zb$>Xt0(GyMr1#KQgcZ;fPXV!{+I#4$LIu=a=KpQVG^JOfb-A_f>0Y^bUcSZCYj#wx zj5|^C-^z1MA!rR6Q>-1VCXiUl5*Bj1utNgL{{dyn*M3tHkZfn%Qxa(=c?ec_NI?D@ z;+5G|2q?KJ#V$b(&0G(GOx^In$q=~vZ#k&UI3XxTs$2pJa!RR(K&EaKL61`*IIPSg zgrEv(*9Fug4J_%KLQzhUDwH_L3ba+GA}mrsR{rp!2l;=`r_6XEX%8A#40gP@!bda4 z^M64hFy$x>aV%E$BTxIq^b!7%pV5t@>Q$CNlvH)qcR4bKvjHntBR&wFGRhh?%inaMF z1|_Pyl-U#2Rk(VU?dpfh>?JB(y~=X+1JQ%O@Un{e>sBm?v z?J9;TsHWoT)YVpxzbi9URI3ro)%W`=vyZ57b*km+`$Lr3S5&w<&2shqQiZWdGhI};di50T*ZWr} z^LSKOPeCkKxAs%!38KQ)t8G`WRpww(;p)}4t4}I(h^TP&8r#+9lzAemYjE`%%hhdu zWu7D|T)oD2^(AFyhzeJ)v0dG+O!?g88eA<%xBPlTnJ1$vNJnf}zg1?YsBpEwa`pY6 zm3fM&aJ9g8^-pDYSvGKZtO7FVyeT>YS{GDnCCSFg1T zpt~~V!_{kX_1Z()uMc`DbEK#a1&!&Js~_}L<{7A_tA&=U+xIAQ9I8TGEwo(S&f1wPDqJnJT;2Y?GRKPwR|_pyxBsfl zb3}!!g_f(^|5E0;qQcdgmaC0jlsN&_OkAB=q5W!PVLVS%6^P~P=8u$lfv9kGrseA9 zFO-=lDqOwJjw%!8LR8n`>UEZ@jo&GAqNs57I?L6@Uz9mXRJeMb@Z_V<)j?T4G)CdS5-WgjT6s@$84z`dBW{Jzs;on=&sI@@k~sC9k1b z7fvn~hk58v(Of1L^+=0r!O&(kM_KgZc5nwZb-7ryAZ@P2KAQWZEv8^WeN7RIwxCfI z<64l4S?$plcVh7`#gi97Bgu|MQ5?<0Xp2{{__s2z6pLhpWU@h*uojWqq6}>z|Kt4z z}$J9a2@npl(|al| zsV*YbMG>jStK?hAACvPMu^@j%ZvKkMUr}`alDF_~=SF1~h($f(=C6qS6-DPS`5P>5 zSLU^1LH>%|{1xq^8J)l5xR$+ezA~qa1^Jup=C6qS6-DRoxCx9SO_?*Wm`(m>=Qy#N zoj@}wA{)o8z^7_u779KGakDpj0?quW*dE7rXfGG7>%@Zm&35xQyMShN{*L>Cw?|wk zW{Cy)o9*UrHu;+!oxk49!q;P!StJ(ZZ?>Di+2n6_bpCpC_q&(t=4`R3M%?_(CV#V| z^VgfXyO+!A9I+sOv)%m7ZloEVzup_M;Ho=UEXdz%H-EFq-|Xo8_5KJ8F3QDXLH_0p zcC*1+HOCi`jg&a>T(ReYpEDS7vo|M`W>!=-QqCk&y_LB@EXdy+H-B>`(2UMsN-=$K zy)O|9@;ArL-yHHcCpv#Ak6_WP%!Oh>{^q#(n?wHQMCUK11&bDCE)t6h#LeFv@;4_s zf2my<$5YB&EEeQ%j+?(ZH8i91mpUAaP0B143-UL|&EFjIHzzuOsfBp8Pnk=^g8a=* zbh0t071e==Y@|K_e!nuW2R}CvakDo!nP$JJY@{~(d`+yk%fy2G&2{rPHLu?B=gHnPznU z`c!bE#UAPwu^@lNZvKkNUvYH)`f&AY`mZu?6$|oL?B=hS{1r#%ug^g&eo$t)SWH3O z{1ubG;^_SK<@(q3n=)?`3-VX&=C61e&FK8~<@(q3w=!=R3-VX&=C7Fi6-Vc z7|L8F7UZvZzmtvPTAEuTve9=l_#>5BA^81>o4w*TnunsY(f0t?GDdNySdhPYZvN)Q z(2UMszn=7QyfW{?VjlUM=jLx7`I{G=zkU<27^=+GVnP1qx%rz%{^mvJuOHXHogsO1#C}sXbEXdzHH-GaAXh!F+AJ@N~bLVnW!{g)eDXKn&EI_TH$OUm z1LCmQrpyP#Vld+7Z$9~(ADzDeT>p0NQs#qVLH_2u`I|q1W_11r6l1|0UndsiZ@!zq z`Q&eYbp8fZVZlw!da)pX^Xr^!%n#BmkI2S=J>a?Hc}Vbeh?~9n^)wr!vN15m=X+_K zGONUb{LQ!WH&Ei*f=K=b9?hm`U?2O|WZ+4Y#^!S~azogyNzij^qK{?6J#ZTCv@7#r zA>WT!sn+DAdcLIELoOC;e7;>V%6vpDNc93M)nc(gL{c4Lu>*@ZWj>0SX3cfT#F4fYdscumc^@BoUF_z#9|Aw z+qK{ZctKON1&;%FovzG{VzC=J;9BgZ*&1bWJf9@&+MvuQ#o|EF;4V~dfb=*HqBu{gj*a1LW!8yB3)1FV?4!9q+TuT0EL7$u zv1kh#3u9c1L#W!LEKWEEuYOYIW-Jym=@uqC77OEOCPrI~r;p{zd|oV=bPF?Gi+(f* zM_Vk#;$~%T5sOTu)V0W_nd`Bz@^Qjbe3ZyjpcllV6yY(AU5N{WG-W9apMxiSh6N9a zUJ{Gd$OhMcvQtQQL=-9jEKh5D$aDO-^Ui!t;uQ<*P|MFXO# zTgeEEg;>l}<||^c7dhx!w9-5fZSgNGmMHU8v0&0IGF^+qG=0$)ANqVBc2;Hs7K@m4 zi&7nnMF}+JRy^FRAzkU?24!v)i&Uh*wHQn@(_>-fW5^j;+@{QJVo`uBb1jN!mUt|z z`7wmoAum%`jbgD3S?gMq(X5EJc$hwTsJlZfm~@M3T#I!ytD`O6#bUcMUlWTOq|vpg zqgfwiabjmI-caW2V$q1~b1j-_wnST;h6Rs!n#6)hx9E^-v7csJv<1)q-uPIVJH>)Y zw>ZwVXr~zyZSf!(JXV>zuvi?2JtwJ4{#I@;nIpRbv1@!MiiiPX9l zRWvt5Tik;M+v43~QHwOW7F%dGL|eR$1>53x#DYn;xYf1TO>=Lw#qU_KE#4y*OuEH~ zU5f)W4@OyJoPY(};&;X3aL_2tax6+?XvTRgtbAl#fdw1m7A#7$kbKu7hvo#2g_Vzt zyRcZM%=g72A1QJzrqC>iw%CeAnKC~R3npD@nQKu(b6K>-&sbC_bFWyGA?sX=3Yu%9 zEQa>SVy!Yi6pM98ooi7|vnJZ&5-ip!^CPif(v>#57WFh6qb+X3f=7WLiv^RebiZrS zLUUiV#Y<=1C(p`&#s1AE9tb7dp4vRWveuBl4bR^rcSdu|=xW~fE$H^&J z)GPBdvB*XyyB4`L^P(*-#G+A|tzyBXTT<*=Or=>EZE+KSpWz&3el8ZpNV#iKN;4R3 zvB~G#Odnr}MLAOCTCAp78Ex@j`k1K9FU5jMw`7ZJv4Li7l*KUKF>KzW%>81)q+7Dv zwP>K(6m7u{pdm+@{}GGbLF4))*J2;4{n|qQ#}fs1yTiEtzj>K5zXE@K5|ZKIuTQ0! z9^C_vJKo`T>pQU^Vb@pdH_^kMv_2)jJ_}V&A`QO&*KeZpjt=`6o=!6r6b$Qop`dn` z;$$y;`QE0eMJ-nxZLo;RUyOKSHt0hm=?p&s!AB;!q`eDde*Z&tD867N;Bm z#W%|QNhnw=mL0Gt{;(;6sN}nhP%O5|hZzwROp|xGp8qTq2ZF}(TupJx88*cs)a@39 z{x)End}RTJ=i~lU))0%$$~*+ca^}?XdW(WPND1fid}NB(i>c9G?8S>el=-Vru)M6u zv?#V)Ux_boLcJRbKDXC(v8@~mz7m&@wE0T>GF^_RQf_*_OnRNvq_jpD;m5cdpjawv$tooGJl6;CDpW&1)3T? z^&b|=N-BTla1Y6LUq>Wukg%%!AtdX9MljJL`M@S&)~}S${zAjqE?-?l#^f|=dJoIS zpO6F-5v$Zsq%t?p76}x_wt>}{2P)R3K6a`1okv; z3{5hALkS|E!^kJ)+LH!I!oDeI)(js@OqR-D%M^m3apP1?GCad35$6thNe*;Gayuk9 zseppy#;M3Yi)5iia$^yyVh>4ULPsQTGn{oQ;1`m8LE|PaP7G)Gi#Evt)NNjp;T@2S z0I+A33Uq?xrpZW)MZ(5VVscXfQs^a-=@%K35tl-;Mg?Moq$OyS;s&ungxG7NuM2y(GmQkc`ao`CjR# z0&$SsnvPi4-jM?>l3U5pt+FVEVzNUfU}Q{2-he0lRp1CAsSX%ik_@KJL!C2a?$;aFmdgA_puIu77cq&242!g_mSYiE*&TRtW+^21s6bC4DM8vS5^jv;6YPp0QVt29VC(hd^+HJahFjJXzTvj^ zCuhD4$$Ay&B_wS@4>$&lPZKJT!uJ7<1pk=#*? zO0Iy8Cz9ewPtF<#Nmms(PDr@!+?lUEIqPJbg!;SVpqHenBa#Y8x~o8MNbbx>nk|yW z7RjAcQOR}3@#H{9B=11dO9fJdq&aBZm1B|A+a!BYw|YpL%nnE-V=aAEAQh6ksI0rJ zVv~PuLIQhN9x~Y?(RI?4ZjnfxkR7W|vM-0^1QkdV5{hlLwX$WOZIe)JcS*5@hSQYW zktbDB-N;EydVPlEo@;ypS9W8f&bwAAP({(vB*| zBGIe;PFbk&MC!!(kbX2b`z5*^i!Mk*uNY*GSoiQoOUYBTt%qzE|g~ zz+fSv?AK=Lz>a>-`XYM`WxqzsKJ-QQ&MHXwB3rII&KKEZj=+;!RbU7tYuQJvt+7ZB zTO@09QRR6_nmQtx2+5}^aH5dZ1dV%=HOUz6|K!{7wOfz|FUi4k4{<7xAtV(@yG8Q4O~OpLr^-tr(>^jLIca$Ey$TE! z67qR(ktWHBvq6OyK&ai4V=&AHbmX+bTQ(NKza)kb>4#r!>X1S3_aRQ}DcCxrsp zqCZB>`I?hsRp1oZ?;}T*urqXxYDCo}&u7NQ13FIyP6bqnZ6&rgsFG!}GFOARKE8L6 z3Y;b&nC^F(Dq*U$nAr2acZCWJ2XsG7_q$B@!*svJv>XtdsSyH#=>eDNewgmJm>vPd zX6bZ555V+*%k%(D4_Hj({5`fHSptITL6_+Pm>y{INo-i%a&&CQzAg|1E{1(}XHK$h zI1}p!v0i6cYZTTGYCq0qeSD8?!C8RTVY|-qLqO~BW1aTnZ1z0weV_u_0)lD1%d`%r zbrw?z@0Iao6rlAmt#_H$!?fOFx*w*`RA97#V0y@9S`X8Di|G|WEc{~tJp|K3F4IFW zJ!CO)fArpODlk?+F#XeIdI+Y6bZp+Aqyp#Z*qr^PKoGcy%{cP^K9|aISpO62D$81< zu>Pm^V;tAK_qi120;g1|*=a#{1X_ECX6tRKa?+OpOttRK~Wrw)_xKHGWiUKXPvc^n?mb6c9|0xlGkCRa;CofSyr-Nq`=M=`ok-F_<2+nAjg} z^Ql0-fM9yuWqJ&z$1J8_VR}IYE&}v8Opm)vkHhr1W*XlM&`uS&L_je8%Vl~TrpI+` zKIoi`eil;P~GES_Lk}`d?UYu&gx->wjrK#;*YMqY7LGXalwz zEI$Oa0Y5faemn~3cNMr?KrlVwGHrlqgT=)4@wJUAFa^*PFg@WiJpt1b7885k5BTS` zt`HDR8(pR+V0uC`orCiq1XSQkKpSD&=rV1DX`^O3=QKdas=!nM!Stldv=OF_R&4&M z0);v@=bR=G1TN^$S%`I-3S5o#lUUbS)*6NNla?P306Ja;t^rhoZH?uJfNJog#`5D; zKwQxa1O(GlE>jImH5L=&1*QuKrl(z|r(k+Y zGo5=PO!uk43_wrA^t8+LG)zxhOp^fpO9f^M2&R9#Oi#n~w2n<*IL#Zh4sHJKQ{BsaJLE+0jkBe*78F@wfIqM`SCFzHY&3P1k*Dv zQ!PxjnrVU$P@4+O0rU(^&$vv_!1Rn}n$RE6Ar+V_Aef$YnVx~^8H?#0K?vgQ-q4otKQW->Sf3 zK$~FN&XVq$-^gNe5U&}Nu6yG)y5+H5hc!l%Dg zV5xv$dfsK)4AW+d=_S6^FjQbUpyy$Fo{eL7>o0#i57YDVezoUP`5!APAv^C|@JFh^ z3c<5Se7@DiSJJGCz@N{ew}T0_Qt+)oV@sxsZ$ot`5`Qju=2j5=mP~}ZCflDa*)($_ z@k_xogKiLfIl|p|2+z&YmUWT%C&53a0yheNU(k4gM~Wf*0aWtN+B@F!Df%5xslZL( zU&uh%&f54F*zv!R6M?^=EBKdGpiJ=WTwiE#@uf87O{ACqf|202tH3RSZwMMMCc5}$ zRPxpytHABxU*azJB_65R_?MDt_KU#hoxn%L6I5W8;0q8c zH-s;ySsIDI9RE{PphEBz@k@tXJVpFcb0mHh{yd@rcL@Ga(5TOK@bx~LW+eV4_}N6= z1-?EPS?A*OX-Gt7*!21!4X?37%ctTEQ~` zU&(gyhiUpE@gIYqqyqPVe}xJ7$}$K4$^@GE5%`H+!LtFpSMbY_-7dbI=ITiNNaB;M z0+oW_9W-9;=i>LFk~iL7|0m9ZpWWa6;9u>BlsfoVGib{92VwXJ!S7Om2L#Uqe6`ud zm(i?<#J>T4j|w~}cqU*&s*B%?sx=b-C;mUF0_(sxFaaA%9DKuInwb&!Nhg4RP6gHr zo(b5%ovmFz4MCdak@(B;=OYz(NbpR+tuZdX1(kf$;T`X!Rp7r+fq#PE8iP!B@LLmT zCPm_3Vw=MH`LN(8BQ-9*fM!u7{#)?u!yXZQP0(O#9P)qb7E}!p`21er*}Oaoej5{T zTfT$e7DqEN5`QlEf2%;X;F*BiHn{kyGz%l~OTj;{0*?uv3AnA@#n;iSkHkL-{#6xt zT<}c5?RgGf$SDRz>1R zg8x7THVVEqXf$TJ_%>9BBJs0$sKHL{N$`!CNV$V=%%+(eiGL9O|ENHX;F*Ap`&|55 zn(HF*Z-DI7dOG+s||@lB|9N8m5%1^y%z*aZG{CgAG@4*vCI zn*Ad2=Yl^?1vU$w3HbUJ7hg=XG!nlQ{8=jSyx^IDO>r*15mj>}{z>rTRA3AECMICh zR0rRbL^CxK|1tOrRNw`{GXa~{x%eWQB@y_^UBO?X0xt@F9dgjcZ=hKli6066Dix>~ z{K25HGsnfZ(~OD4&*J9wVHJ28{LUPt(!uY{qd7Se{~-KZRNxiCGXZzDx%g_DHIeu? zz&EJCtAb|&?#g!YhiUpE@qdDEQh^5WyO@Bx);joI6KLi~;4eJ^Jo9&};F*BC4!HO# znj0eVmxJdPWt-rcfN%73@rO{gN8(q3Z&iWq;NR$nlsfn~GH4Eu#J|K}Tp6nZI|N^f zG;9387!J#j3h)DumjCt9`~OS7h5ru~cunxlL8Cd<#qUMc8iBv87hl2qRp52-%}l`N z5(nQrm}X`q{#@{}D$pc&CSY@uix1K)kHjwpf0PRB6g(5~&14tff@)tR{z-0%K39QV z;NN5dzFF+x-%O{O5sCi<{!|rsL-0(%H)~z|GMZ%?&r@XnVo$z~(B-@o*p;pV&0=ArEvcbhqrCAt( zpE3meD=P4=;8_yhZg=r@H0vYrSAl;`1zH5plCV3=!S6O{CTP4j15@t8;w=?;4~yMd z$ZFRjmu6mM4?Og#Cqf?xel@b+#jm4T9f|(|{(UO2SMd9T#yi7Z{6SQQBk)(GuqT_P z0w02ZXE;*f;NQuiIUy2%0r&+f@R8svkX9F8NwX>vzY>2As=&vBZw(rIGF^NdszZ_Z zf5X321@?j8lZli&_&wP)b0hJegTF}yJ`sF5;?BuEYiX|2cy9)-?8X=FJdyfTESiGG zyY8&q(}F5;R$j?Nk2iRX(+d9GWW=47@21m?oRwG3!=t-Z;B&zjBaO}o-d#r1nw8>~ zwQ61YF#I!A;0wVw291^^7rz_T-iQ%j$wS{a=BmJ#;9HWAA_w2nkLKVA{8bA4Vinjg z_#&ji#h20yM&gI^_Yyj(z<&ha5H#LPbn(roS|ah+z`s%jz5@SVBI3@;_fl!5YrHoD zSFOR~Ru%ZKSmYz_tbA`O&B$4K)pkCFqlUf~{079GmG9NjjGUEM{R}@(yuT5Ad(e14 z&l$n{CQWNrid$9&ruGHDRRz8U|9&1)?c%4IU zc`ovu;136l4<MdF_W|Dg(e5B`G*NR^A9Omk`^o=*ZkJVph65PTKl&dCpI zXx3@GHv`jp&;wVRgJRJdH1@i)@`E;1k+X8zSnyw~z)#@!W+Lva+?!1^a#l`T2%cyC zKMTGb+2@R4?^>GHtQ5Db3`~2Buj<)}9uoY%pz&dbi$8$sV8n>0y$7D1=r7 zV8or19}TCOt?}LrTzwxF>_vYUiz39Gl^>PTjGUEMzYhL-75G!|4MF2$cUFGXj4E=%iD9{eLJ)+hJ^WQ&V0rdb+^=aqN! zMir|BzXfsUvltgoz&>q=i0HK=;NPuc1K>X+AfHWf z@Sl;u&yphXGxRZEPhPr#L17aTHaTJw$;E>$!jqV3b0 z>*+VM=v}U26Y-^$8f|46PP56D(F}H{Ayli81`n0D?bBo3xk$wyp~pJ?X27jM<8$U0 zuQ;Z2DQvh}#rB|&&&k5)*}4xweV&A*N~Cr!Q}OYZ^>%?EleP5>M%+-SVviPUYW8!+ zhlkSzCCwrqv76BwP_>FblGqXb85t708Cf`%#Gm8GpU+Pvbh=Yw7y5OLPIpMd`gM&? z>~DP=C6F^#BGM6|_}sd}&*;q|tI6l3OvD)(`rnh?wU(ad8b7}M_cn`YsMirl6kK$JuMWLTg7)9ZcIb&rMm0_c} z&oc^Y(;7wLSn)~x2pV4`S-$M2DRMx%|5cCTjdZ#%^oK@KNJMzr8k@u@z927OE;9(1r%Q-BdH!5sW6*HMp3xY=X zXEN5pJEUu5t?s^XBZo}IFXWe!3+vS+>Nu>8Eh(6J9?oB{VviN)*CKm$m1wdmnj3Il zQ;~u%q>e*W-ZoTHiRCJuU$jaUQXvW&Us`oMlScs!K^5DRKE9-mzs%Kr2ue3|Wb`vP zz;LIEPh|8xOJ*1QIQ03{#WF(Q%r}u$Vu^4uVJ!M^Dh|zj!2ZnYx){2-Ma3pdHw8#g z2SVFPbD3D_1IJ1ta9svw6)N^PF$*Hi>O$Eul@8RuAQQ{9@HMDQ^bohMQ1M6WAzqgu z$e^*Gg;hxA0NSi#dqc862FcPx6x4o3ygx~XIO_-=aonrokC7qHEgs4csZ%D?+~Si% z$8us=sKIe&=s2BD-syP_Ka^!zjgk2}tC#$5p!{!`&)2u-v;voOT7if3|Fpvg?Orx- z^j0eMrIH`g;b+6t7n~Tw@vG_X@q7L3W68^`KV;}K+@SFl)1C``sW<@S5wf*Rwe?j>%M4*&-Z+sicKM5Uu_5)U$ezxb(Fz;Rg2U?`d^>u zqlWTdR!>VEHWc~i0RPLBIZzTYl>fGblSy)8b#+> zZEADiKZ*ma1 z7-%XY_f3I^%G-vD^>phx72ivBN)=KeLK^jAGv{OacuU3hl|CAS#$hDWRX+ zh0sq@@$yrIJ*Ul|!LmX9_}+*ZtjyxMTm$BOEIdf9Uj3T0ac#~w`sc*O-EWyo-xj;> zhP9!Uq0fB`w^~$ef86?(In>6UmMNu~x1g$LRc)Re&fCTmYm+HvM>MQ0yfTt)jO0=k z-`mQRXMZQYw@b&;8A5mnuWY;8m_%*W@Y*}Lu(suH@i^T5NW~7o-8RDZU8Z(dlkG;; z5~AAAIdL&W%?621aV!1LQt@f_6bqaE^KiSE4c~V% zJ~q%YH<`vQe$*ep3=Uqv^Z7TM7>9;*-d{1Ps)I`$EuxY+0dEdu)XewPA zac!PF5}&8y``E69&Hj1M0Ju`fks`}ABKtja=KCzqv~7UXo&EEE$F-kS>>ynGo(O(l ztt~Z?G^@llp(#d6JTwPf8gXqt&0ULCd|#`k!e{^dJY4%-$dLoO1DONg*CV@y$C~|N zZL6l{KZtvWRqP4k-hrU;!(g2;O?C)XJMIb94@B+-wzM1-F7^; zGi(;Pfw7MC&S?JkKp&KzkV1V0)`zmR%-^X0mcabY^6&0bPYVX)-CrtpFy8%8h*-hX z=F+U<>ZA2?F$gmjhZgX#cGpcRegF;);yLw|9O6)advTHDH`t^sxHfDx70vaL7cSZ4 zFbXl*D1Zl}0Fesm$mc6r2v`P6Vt$;UEjn>VkJnVRIhmppZEE;B&pa8NPaFw zxE`_QX;c}_3Ms`!7gLJgsQBY$Zde;>_L9y5%?fBKoMI{MsB+hYe*htKDyjh*YF^D8Dh)ETub? z-`1h4kM@mTe>)JOcZYH~3*D4xxL!XOALhYNi;5pajR5gH*&suu%>Bjecn+5%4c5hn z>*C=GWHt3|KdyLdI8M9Q#nMGYXS#|#ndlsDKn`n5O(e}ja`6!w)||sl9-65xjg)Wc z8p`*uia)`2E$q5jx)Z=6ArBhAXIQT7r`b-^C!E$Zh_@sI?saiVH(V=HvBPlfcM9Tn zE(LfaM7miZu0ivACNkVZQ|r=*YfA{suD?|LU|iEniuHf1u9p-7=qBU{TNF5DiTyo@ ztQ8*Xx)|2RlDb;*9PZ6mv6!I?tp%M>S@V9-X;)lrG z*LUdgLpWny7xj^zgV(bPE_qIR3L1ZK6{dvrVLIeXw(0BQlDF*Z;`KRrSE^!9!Mi^O zBUbRlTsI3awhkhV#i8rxa^dT*;!hHXtc|v;bRBK9uip$jM>+@^fBLM|QAT_HBxj@j z2hsUM?|H0XhP9!UXfBP%-`iE}Y54o652@7A6y`roB#w*6TL;5=|CE!H(b-7~YlnDq zS$i*2vBQP8GHA3X>Kw~{`ph|^to=%X%9#&IU*>C$~I(xR^=%j6dC5fwX9)Ga~de@WJKVv4r!Mda_? zG1KK*`?iFJnLgPX&$5YFZcwpVSpF{wnPOS)=P((upWEQY(En*~j$BSeHFP(Tq{?r%D~oEGXrAbt-4Z=yG26764YK|4|-)Q8`qk z9R9Bzie(Sl55SgprtdlxdnSGVMP2-rue}yK-OR(vI&iF{WhaJPVm({V=y zynHe6&ccke=>mTH0A$M(odW)g!uhKPon2^QZD^%{m%mNER;bu)akMRH{9UFCSTi3& zb(rYv_J#BQ&8qfyj>{X?4)Oj;0C;ON3f{lV5N?=+D#_k~i~`pnnZkz^llTV`%2n)W z!8Qg>-&9?)D;T4%VG8K+&`&gIkib)tGBJy5j#Wd<@#caD|SClgOeo_8~ zPRW)?uexM8qGT!7ZKjGHqoh-W!HYkX`nGr#n+WKFaf@}u z-&iK9*s)^S6f{*_s8~&3GpgNE=D+GP-@QQs=oIV95m@$Av1enc;t;FMS=3FHj${bh zD%Rbt_A!Iuj<>Ny#h;}*rTTm;M~EG=S`T9-6|yZ=#f}ro)d(qI|E5vWY>R-B}!ql#PkHSop46Eyv}M=IWt%2;_zsNzh&$tl@eSrr%FhE}p2gn!$aDt0_> z`SI4zo?G04*Q;B60Vow&nAME(y??FG&>dO zq)=LBCkm&NRI-%TfQYv3?w7cmqhim&-A?$|i3JUJg{)ICQo^#SsVJ0A;$n!(+qOKs zfj^o%tN1Y;d3eLAkbWurK{Li$Ei`Q_s{I!2Y>A8%0$t3uyt`oqpQ`4o*mLnNCLh5& z91@}!3OYtM8$x3>JTy~X8Y!aYt}5R8Yr8kB5Eg_rg>2nW&+yMtu@j_&wxHQLMh{=3 zq^VPSV{gikXO!mw>Kubq>j`|r?-T+B+?fLIJeUsc0)9uY(-gB$Zli8wi_TWf?2P-J z(JF zbH)oWg@_(bIHKF0R}(#F?f>0jElB_x>MW=L6sM)IIQB!l&=|^ZjlShM|X{ zhcJZs38BX`gkcE75QbtHCOv#ShRHAtlQ4u~H0jT(RjXD_ty;BeC`yxIG?@(Z_`T1$ zpYM0y@7nXcdYyL9`J8j^x#ymH?)}`)=X1Y=eH@Nj8Kw`nVir$$FT$+dsy&CFdXl(T z&9#u~=%ZB{qw#_P>#0eaKnm`uS_e}w)9!XKucOWpx zS7VVFH4;(&xRdT&beIX-Z@CL6i56grc4y%awC`CHxI`+L0yL=KluOWh>CQ(2XgJb@ z&!=G;@shFhS??iS9Ev?Zh@|K6)`OTQdkRXY}S-w{1hM7?Dua4Gc$ z`T#?0!%(DXy00eSKybU&td>;kt5MV5;vrM3318rw7I#PV$mf_xoCk&g`PMWBR$wSF zOmx~iqSZsu$;k4bEkAlNroCzcmx*clK&48mB0=TB=1roe02mviCbwISnD!`+S#**K zXWDRx-zj`_3=9X0a-dx+kWm?^1DZt-W0g>k!)-`Bx)Adwn!pG#uibNkgSE$0Sr=#@ z%o9~XJQs|a+~ROl5fyWPH{lD-&I2%Ip(p}IYE(S7GY^z^Hi65jBRCQ$wRH%Wpd}(b zi)SEND*f2b!UAwRA!`)&#;+8~GJt@Ugxz7nmssATg$PvHnwS}8rkX&u@K*tKTGL~~ zC1|bG)PSA#Yx~DW3k%R}rQfGEcFC_2>1KdgfKjhpg0_nEGS@+O+ln4TC3~*diAoyd+O{c|ptfxXnDA9r z`Y~bgoRDo>5m7QT%>+gw9inX^+qNRO6irgkq?+*6R+^p-(ZW!&wr~NPaW{x$GC;Bt zFVfrgtNx;&gb1W*(;w%ab;0E(aHH_20mIab$|dMft%--%Ia<@>^lWGtFv3dH|Mg#* z0B>$U0!FE{atWF%eK7M26UY^YQ9!X;IP*IbxLHWWK&4f+49@K)aEp*DJtvIeejkMD zAvOAbmp-V9?}G{x9%-#xCUSsn+qfWY8)*W!qB2ZlSae8yJuX~=+O~ae!Z)h)xS+5A zwr%4GiUr&#j23Ac6Si$rEq${}()E0=J2@2b5~vxGt?6SS0(K0J`-u+h>X%Fp62zA$%gzbB!Je?2g)UAnR=0x^zByqX<-3u z+nyjO7QAf&_lPu&NwjTyLbwFg{IZ-?Zl0B$piOKst#rm}JMGa4D)|aQUSse5cl3OwT4U29uK2 zyLH?P-6xXC0HI7D)E#O9V}wM6CJnKqK_+m&kcI%+*61~G9%}+)g`5pEMEfAA0Mv`= zgZ8*_usqj<@3FS55jkL^s(g}hRF`f7{}PoOfe!UUv2Y36E)i0fYXT1nLx<<|qp6T) z{b2$gq<%E3-(YL-Z6@%LkOl);N@{-J1pY0gEFj-CO?CwNc+HVS^n(mf1C3UwH!5;D%-gD&+G*6yv4BAr9RYD$YUf8pLH@HA3;(Cd5HUVmyS%1$<%a4969yVv)? zV|&E(dQ)b%GR$~-7bH(NfoDY$Gx~R%u?J@C5o<&xp6Ui>m*=tl(a<6320o~TF zN$Qql)?9R)2|uSJs^l<{18jCLxdD|onZS5d?&SfcI--ujTT+v{{&s*s?g#~D|(wnIJdlQ%-(v1M=oQzr`T!L;C z>G|)O@C#OYldu4tD*X%>7ye{8Lsdwgv$t!dg-cLJa>2r1P2g1+_I80mIsg`O8}piw z1_8sZst559%gk~i4+m(5KLGa51%eqtg%wO=b_S>8MpG*d4`7Oo0WvBF+nR-n4 zGYjP=fev`~6uvcK!}Lw6N=^WVsO2KAXgb2S&{H@8i=L(PmtJDRuS6|+CB`Bxt3}T~ zBQ=S3fGj9VrI?S>XNRjr&t4X>XayF{G=Yg?Q2{VTEmCnot3+4}J%!bxUkND3gkOzX z^lFSnT2_mm3A~L( z`w(FJOjL_hT+nhXQhIq$Vd?YIK}73mCh(3(PXyX@D_~9LVG>kq%g}-5Ju@M?9 zrF8eAf0#gp2)237zJslxX9X+b1TE$Z*0DIg#01_&aNof|lWy{qzG3h1_RWGc0#oH? zk*u|*$}cC#e$kpntNvY8KgzeuVwt)HS=xq+4>jR8qb??`LwuPR;(&^6^VbLHHek*Fx zTWXQKxnfK9xt*4+ZL^TNRO$g(6^ME%%2UPXZ_uZ8&*z!T1smf(?05l{i`c=c6cft; z(jO+O7C|?P4lVo_9b)MV$71QRCj55P(zm0Q+LE%106JL@m|W)VG0b z$y%yqwe-bAEMf;CWh}tzMQV{^ozybJT3Tl2 zNpxu8zvvK4UwjlxUp3*1sHHj>)KXirmTK8rIs++2!T$Y$9JN%7+0^pl^=j#hx2dHs z7DO!l4^NQTf}Vt>`{w|aYN=`wv;s?&Uh!XaNGd2hla47dfhti_={X1Vu_LHAdY7bxon|L5eImX3u%d;BGyKhN17tm=GdwxYgM9xY1uyu^N+{0V9IytKF9Jufl)&1*M-k7>_= z^v8j=dsK^{(mhI-?&(d3T1xAe9d5!OMlJnNEw%P(+1mFLI$n`VfL0A3Ew+g6N=9GsV**pfuvX6*kg9Q`;(`tk!?e&-SS%WU8KM1|2~UbzG%3a+EvrT2ABLA5 zk^!lJ^_UjLW8+U%i^iWFv1lF^)tSIFEE<4s224G ziZnL;Rgsp}qL-OU#?KS&K(qQti%p`m(OUGmZ_&#aGqzTmz;v;w*>nD8vw(^VDp^43 zvPg~-7K>iKA0KTr;g6ygX`uTSY1vvtrh1vjsDC4>{+6j0X>mA8U%pN)dU8P4bDE@hxUY%#hOk)Dh}kl< z?Qr(f4^tv`MP_`9p&l1c_yQO6{?OE@i>Jnfp_bLfuLR(oCe;Hh`|*+%JE(5LLUr+k zM&HGpO`EXjD-);@lRG`<;KAx*6&Ey3gtgF9SS)&leQ*w-2~Uq&G+ix{8Q+%dpw+Uq z?E|DTq#nRi+q5_q^{=oRmOs~NQh8-m#Kdiw*lGfEF!5jyXiyVXi=g$GsPy{(qC+fw zH5E(uGU4i|rPWbOZOK}yWwrEGqTrQnQl00dCRTnHEQXru3Gx)UcRNTayzo< zM-!NfrK!olNNXut6wSd>Tlgvr$lC@OJYUyhRix}XkBY`Tl zREw2T%lp>SY1YzO-_qC4;`sr)D79i~70{)Ysun>z#ZoQ&7ad~hYXw+(stM1GTB?IV zEwv?Usg|v!?D)TSmQ?3Chh$hwr8taQUb{pseJw{VeeITrrR`Wc#02JH=^+HpA*E`m zXi>BTOKsu5=#W%UemqaE7n;C)QBn%D>4;vJWJmOT9ddTYx8=xWZ81B#%O%*cWPvDY z^PEG6StaRK$$}Uqwj5DnF<%KOZN^d)s6)x2!vGx5j9<>fr39mc|yetVt$-&uQ_z+%x}58$o8`CNi_iuAl%6P{A`O?KIV!!#gy*aD8|>^3WC#u9Mnt5~#>pp|z$YSI29S1;RxUy7 zRhnIz1y-8<-+|nCa?tQzb63XRgs2E(KOj-nRS>6EENWl;otLh2V~Zf zCeR?Hd|--I^$lC-rA-8N`EOVz)1sDa=Q4g5F8X;u>g;v$SAQzgzS|JyD&XGycUKvylX<|&T)W-G7e3E;kS~u}u zA_ov0_;n(a{j6~&unv_+5)wy_Q0tUS&@64+L=#?RrDq8XP-LZlLz;VuPer;2sJ7C= zCFm6OE6)g4Tj}3~1!z_2w@yTwcP2j*=~mAV6ZjnIqcVU3l~yi6^?Rpji6*?pO5ZIkK!uh580im9V7*9J0L@lfxCCv|u`n<9p>%6aG}K zdwUO&1G=or3sK3o(?(I*+2@)6&0st0ma%D6&F-ize<->2c-V;C8tRElXReWy?@dgp21 zqKe&kzkoZ07A!i3F>=f(wMfJj%|+N2dJ2n072FlhpJu{eL@i>49rclx)uM_k;oVKN z0~6IEElRen*h?*{_*=xHm#~Ptj<3a{iGYnj6&JKwEYdmsSxR z={bCaE(?-(xi63z=Ga0&0?eObnsfZJE=ZdF1xc%_kKD6Z%q~LSeHIrlH{q|MF8(UU z#adPuzsoA*-CLx3AYEOo#lckf?tSXwcME+NzuU!wLt_HpV)Ak6K%REGiVG?)S1Mf= zQgOo4>F=>Dn$EP{f<^nwTfFk$Xf@)!f5K0w9hc`hgHu(hyzzS+}{bI0a(Mn>?ZB{^{#pY+23aBIL+- z$CG6vs#+km#;F>mw!FV5I|65zKpVCkPtHBQT4hAV@nnnRNB9aX(o=yr=KW)FOtT4Z z!5DlL|4!@s)bjqGqSkXx$X30u!NSAsr-%~DhYUnrOPt9<`HhZ^ z`^?_|{7^*X^TW!0cVOsA5alrP=<)sOV!7v}SLx@6l^1dTn+*T=`L0V|EUnD9tvHdf zcVepALWeYO)RKO8Sot=%B*yoD*LNfN^3FN25|G~P^}EB$rTTrIlb%AoS(dA}?+%^x z31V2UYUqFu7+N(4n!t~AKsrwSzZ@Om9~^93l}?YQ%QxDe4v4fz8uY(MJIbeA+7!J30uv{8zIQ1WTYC|_KBNGPCcl>C_~&B5YH zgR%Gs!`q6&?>VOs1q?$`aY_OpFCL15Q~CqRJr!WfBqoaK+!B0;E%rg|cMOlngIFz# z_hVj^6f-BWp)!ey`IH=>NypBl=Mxe>OTY({&NPytC!Nm@7`4lEbIMr2gXm8;pC$Wc zs-h89$u!~^6ZnZnoYLeur;-@)^rT<>N;X1nr6)g2@1Z`bza0+Q2aD*Jg_o4kPaCU_ z!`~?;{QZvpuDV{TmnwnUsJ~Aog`Jvf-6eBFG(xH-l8;Gy+c5RiTF*HxUHz>ph^kW? zeSe?29%N%r1!BuwY&pn;f3UX1&Qn!exja#H0&QxGOf#pE=T94fs<>$ew|$g`E!?Yg zV9RN3o-?%E+9E1CfKF@?1w$P`Ue}FNfGr=Li!B39_{SY>`RIPpFFHNv^rWaQLy5zo z5{KQY>^$|+Y;55s=ND`_JqhqsMpT@h0u1nNu}Dt^(n%kEhB3F8@K%h`Y-Inpxq31Z zAI%oEo^yts!ew$fonSem4}HzJlX)r*x3M+(8e;1r6WESnXQTr4>LgKi#vni@b5V5$ z!~KkkZdGx(uWA*lMwq~_qN?6=&a`=FGU-o({EQZ$EhY%_qCqIJTXNX#d?g?FRT>n1 zi~h_$sBvOss-rR*xs(6GDfgK0Pnr`a%ZI*^Y_X%0KE5O&Ve%@m%X5a2xfntpr`y(@ z$q+g-CRu&9k$U2i)tOj-<_^hZH}fN<8Nu+})93q@rPEzyzu0HCxTF zP6%DTY8w4{QqO9Jb)g}F-t3tZKjzWL0uDdhrY-&Wv;W!BDW{2DVvFaTm8&hCLI_De z{$mPI6Jx^Ao+kXG5e|6?zT1RbH4RO9hnDif*>AM;tX$9e=Rm7@oUQDve8^+{aIr{C zHM!Ah{Er}=vvAf~r9JDx%qc8Y7VymOXCmFE+@A@GTHRo^C3}CV0~pRVKSzFE<(F-6Pkoc%=B?V_Y5YH{ zJtreW8$Z?a>#BoXFJ0Q)do9swnqgcYQ%z@gHMD&ytCs2l6Yj7nClbsur%e43;B}`A z49)0H#Tg?(drQUBxXr7%#RUGq;tW#p*)|oc3Q}=KBo$|niZgmk#naAVlk-Ir-o9h{ zo5rT_G#>e#oep%T;|r`ww9Qf zY{I|pXv_3nv4!oPb4bPKcBkTVNX6&$mWromaL>paSO3A5bCUp@ibch_q~dcUsn{aK zXIw6qR6P9#jHx!^PK?M3>%&b z)N3XYWy49u!y~D9cmYUEDvrZZg@x6awV=*~f7fhL?flPdQO#0m`gc;F=bX1u!@8Q= zSjiUWr2%p?>M!Ef5Ae&;wc>e$;Yg1g#dgN4ZlX0sCTM8Qd8F6#J8f&I=)6{-jl5Vr z-BxoxO*~)5UZk4Lp4FT`9FEMM)ksTO6f9uF=Z_r+%!~uMjN8xe^qdQFqHC86`h)JU z)FYG6$id>LOmHVGz90v%{udP&E#XpyQ>iTg8$Xu6s)FCk&QtOsY@u4}~^@*0qzr!HV3x}cS7ex6!i=9g^{ z%^b$YM!pH|Od~Rf09D$dGnta4l1x0EnMs~nFEeSZ`iTC_5pZP3=x^-SPa9`mgTJ|5 z{&Pov&wQH8!=y^jxsbWRcUNWuq{g0Ihreew;_p%u?1QNn4g_pc5ET~^RTs+VRO0Uo zg^#Q}H;F{oWm~b&ozS!m^l@pW$9W8xqR7!^WtZlr-eyT|{RJ=nn zsu={s8qwuBS>4I#VnRAACK<)yHjZlUrE}((po2A8sel~}qAZJKlod%vStO&Zm}C@( zqY4XaxF@KsGKo8DGOBt0e(oNY1-71BgjR8+OQfmy(Pw?JXJ2euBO@ z$M9VVK_JW7#6Gy-5b2lMuh{>=6OuvSz376>1hbQW*sML^l<~tv&s0CV4Y*d!^qkA` zbxU)Dq{P{Ix-y>q1mq+jS!l25dz2gU{IXQQ;F>d(7OyqIAT7QuA86Nr7Oj_!1q#Ul z8%lcUEapOKjLxbUopj_JkLG2X#9gF$^8RSzE>xxqGryz@Gh6N@)6F5m=L{8FJZA*a zeFW%a%xI*VITz@{Y|a(BFq<>7JK>F>r6c;o;wQWf?S9!dbnXxuy50m`8aje7znmoi zy*ZZ^pVT#iHjOBuv0sR@dZ{In_ePY%II+8$FVefKq3v@oqwSZP#9e87OaM!7&3z0Q zA~gd=(Y$v#!{qX`o@tA&nOl#=UzuPCi!U$ooGTKvYg9!kq%uG6T|N<{qNf6}WizS! z9h2x-TVnHGEwXbNI#(nBQ=)nAiWJZRJ<}Gp)MoK=%{eBRh%Hx4@tiAjtu3OW1`vIc zIIm~~u+PCoKvnDZs{X3+r+ApyR zuUy&UIoZ~mGAgsv0skgKZe`g}BHJ9Ec zcc`jZ+*kEHt@_;rcSqG#^y5_x8m;rLAdYel)ASz1d*;%eo^fQ`aNZa@Rb7<{Zx(Is zzIPfW0VXcIDjUf0T}TMY?mL}1Z$8d=)g-!_9p`-<6I?qwXFjQ8-t%IQ=Uk1arRqOy ztF9*ZT`e)|uc5vu^2^bs+SR!5>LERhlUy7L%#wsbsKnv6e-~VWDPv4a@|B5$2Cb8d+iJ^{_z=BPp6R;2GBq*;N z2FTi~=eVvTIvYI`OvaY$7$Db|SX)E|A#$B~NELK~boEq_g7BjzxDUeDmjE;#^XgvV zLB{?jagW}{ecd`3JmK}6k#@xaJHiHmiOgy@cIB!>5*ZNMX9 z2tdd(iGP^^^P0yFMDa~+ zqEixOtj-QDbj9ebh|x&{7GF;Tjy8#Mt~s+;%+5bHFDAqnpCuIm)zOrcn+IBm9zP|; z;l8P@n0mMg9)PL2)t+;6vYM*O>L4``#gg4}8-bP>Rk1j#u&{n-EIi&M`bT8PZX(qm zhkdQ09bibKR5HrVgMsv(y@dno^RX(;1P{cjn@c?B7ROp8DhQ;T%OeUZL8^Kx5L;N( zuKLL&?u)kw>e#hP{an#6I)QSvMKa1QslY%~^-M{;AdxWpA`|=@w%mfzx2CHts-gl? zCAO%78ju}s^04I-B6!uGCXr*Nd)o5Jxm->Voj^s@mRpB`#-~TSyYb1B*fPQd55ksP zseBZ@MfIwJ$iKDPx8+tv;u?bj>7-BIqm%A3i77UW;-5Qz(gMSiq86x8)sn$RVa}+0 z`koOj87vOBVYK9E47=I{55}-jIAXLN#j1=j8dZ;Bs)`;Q?T=bj6^o5uiZ1s(16pk*?cY~HNH_RSsf~nLox&W|qgK`O~rv7ljq!q`{}49tF57<>mfJTHp}D6FYEnsbX_x=>2UN8(;>mTlr{V8TTJi}?7WRm zy1iBdMk>0k3YbDQOaISSbK6D;GOQ$7N;RE5tGTTOj@Dj6eCeIEbeu^%(1um)a9jF@ zSRplgPToN6M;UInlZtNNXjOGDcf?{=_Waay@K7wy8wgm>ii*56U@*NW3i1eqJc-M= z=bc1V16?<>#3XXU_KwM^fwnH?rKdc+oY$__NJh!SHF-5O*H2DyxQ(g?nH%y<@G!Bf z-E;29R8Ok1F3`yNEq6E|Dc!2#a8!wfebifbi~`N; z>3F=gtRGh0V}b**>W+HPxpSymr7D^rHT&MWgPyyix1L+ZqG;v>lX&os31L~b=og(p zhuR{!<<4v%vWUl|=u0unNc^+uxx=yL&JNGHizsFdtt#-)U6H$hyOKcqi)8FuHLRCb zR+``u2;W6-+(qMY)v{$wO#7L{LwZXQ%XfpJN_agdf0P<1<2pYD@OLj{T*u+IGnZe) zJ>n=697JvT`1bB3Ybwg}^ML|CMdTB-`Es-EXPY?OcII;K9A=F&iHGSRUoO9c6zR|% zZ(f$K;rY=;QlIDC!(d?aEw8qt?{3n@-D7Q4GWs?S^vlsfe)m{7yk3G}#SmJO3FI@L-NzqdhjN*;{WNyOi~K1OG&U&c%sca6uxAf(x{X}mfiVUvUMMprkd8|5=NLPkzqGN7a7;9bhuiTS2}Nnh zN``vlCaDr2tNN+ozQLfqEqqoo$E{jsg2!O$eT2;zM+b?jm;foV@VSqL&wV>Ad>GF& zA27ia5FX0!qqWL(6->iS@c)Df_m1gO z=iC%QJ26VmMjJz(8PmYX@XtouRD^+%L(QbJw`g;P37#y1U7mCQV5?`bkIIJeO)bz9 z0C@|_KgeuTm2}}w@+r2)$SPVk^FtFHf}Z>7o%>mHkVyH7Cg*-e)cqOgkx;vTI3Q!l zpS9v}t7^5hpUtgPL{$M$rK)Z|&qphz{i}z=lxc#e2~!ooRu5J1J4zOn@2r$AVP}7R zNyQ2fyVL}Sidci^j3tyMa+~d2s==X{z~{8uq}9v~({3}t)8QRUM~}6$=PjhCv8liy zQP{+-)r^5Ac!n@#dd>r+4%*F6^f+Tj0NL0vmND}{4R*x++K}@vTx!X2Khe{4qUZc8 zgG(tQ(fw;f&c6s4ON{&Jxme*K+l7Wtq1eewfstr^I$qK)DNi#hk-=07Y&cYZPV7! zOVildI7?LFg9ocs6+cE}(J9jYHMKAmn_z}8ReO$?ZJ9m?rO6N05h!2D9$NQL&X6Sd zCmrR7a~$sbb#0LJ_NfV;jb1MsAXEtve#6D_ashcjDbt)s|9X|^^7BU=Zriao4HKU= z!E;0v;p;K#QN>TSI9?O5UfQwt5}3+N@LXZ)@|=g*^bjVJjG{@(^a@O`n&5Dl9_kMa z*G}T+Q!FauRr1F}$$)I}`T653N!>A>z4mM3pH<0uqKC2lP@(GKw@xhTi5~LDLyV1w zWP35v*(Kt%?)lz9?rB}y}nrcaG6-!s~Tz7o$QV8W`Y;du7@juPR)Fq)BVhM5zdQb zzUCM40Z#`m7T!+JDNNJO;P)+@LR?blN(6m+9ZYPtXTemM<~ff}uuRiI(}5wlxv)s+ zv^MS+C7i;I5pvwmFnoH9=R7hH=t3gqXBeDE7&Vp{{TT-5kt%47JEk&feT1O5wMKu2 z!FiPUdsG&>aW7fZW^D>L^)*XO@DiHxC;|3plST}`nPAaIe=s~+4q>7Mu{~&XvrJ?$ zgW=O{OoDw)@KVvkczn!NJ^a9dMIC=IJlYIlz38#0f^L>cIc6|?b_%a{B$(i3=y{BQ zd(6%}{1SolSTZoc9}JHXW{;(dtQ`z-xNX{J_oHf86C5F`@WErnYSMk|zbh)=<=6sh z;(l{L9P`;~q}ijrLZpj5rzlnXc+4=+QlO0J-YlcB`^N#C#~Qg1v(pua`wss+gx+Km zyb`@dG@__nt&%KQlmTR-k}P7#@{&G(PQZ~MWv%{0TuQ%e(B-$ zQwiDgP4IdVgZByB!<=&OjH8FgNe{PFAkuw$zB7&<9v9QYak$^Z>o;M}5W^v_q7xXY z>87RDPd9AJ%Qrqc{5G5f?>G~@L3l@cPH}?v=?3=8B_f_E1d1_1=0!0lu21Fm{)s6- zHGLX$%Dwbyi3#3_&f)}scG27ok3xRI1ZACEj9JCG(LOCE^Ar#2?$fX1`*cGsk`qiY zS0r-*<^_K^7mos!oesZGzmD(I4ZkD#h6&y*l9d3Hwm*Q2>p>g4`}FJhKK+6l;OQ*R zZxKn7+LJa9%Q^Lm>I(FWdtqYbJqo5L(*Qej%Bk^B5(iHX!DU}d55}BE|71QFB6SfM zak$@uU(84E6cZdRda?5Px!jlFZ(8a$u8;inI?F<=&1%8)g(D`UC{=u>=`!W z{%wMJ!bGG#ou|?CY>ghVEL62PDk|9iy zBiA=xObv@n@J?zdNdlN#Szc^pktA&>84L`GsX^u;X^&<(<;a3#L=1-)WbDXQzJ&KGQqorsm^nr$yTO^aZgDD&`1w$k-&;M=lmH5zL@oJ z9Panx#x5!^HNkt(`%E@ap{Zd@BsJUvUt}e+X&7tg1{1tjcq=^T*?}54awz#TQ-Eqe zax8)^1ffLEmR7&)*SYCt-Z^7NEkMt+1A(F17CC!d(IL{{O&`I;TzQ``4Fw8pWk2|+ z{GfpZ$Fs!jvl%v1TtQ{u_|Xx$7vA(6j{(M;;26zG+#NjxArhO&tXCfaf zsyaO9Ih*F?EN(>yB#^iDL{E%~1=O!2T@^BY{HwZn~ODzfTbMGcnFXIh^7&+7kTqhNj}8<|TPE->Ns0-U2-6_I4w-QrJfWx#nU;BI zddCEx5hmLFylu0b9Ia@kG-vT@6MR+}Xz%kQtnCbu>JLotIU$b#MyUmI4z!|r7WceU z4X44&MS$gugy_d6_`Hyc0cK$A{Q7dpGfeOWAy<0N3n@`IJYNqfW_tam+;@o`6kk6; z3$sk{MI>KH0n*e6Iqq3eonF6w6Q(On@FihN1BO|qr+sv&`0DF=Y?y0; zCvd2uS<3VSOr0k9vM|x+7i^p5jAli(&9mv23Bo{|U&ym<{*MX1BBVT^L`kzJn&7KK zDgmn04O?=!f$n31uL-%zb6y+}b;An{keXtmp*GG9TOL6&V1ngHzBm9Ftj5cU%Zlph zA2X6n@C{)Y4A9B+#f-g7@J%7ntuN+V67e!oNcljik`@d$!MB7|3QVzF2btj8LYe|J zSgzAe@Esvx>WgjKpl^<$ila=hLdb2NQ^xe;kMc4HRFbYghkvuNyFp?YRlbW_`Z2c zV!0kL{K$Zyz+h{BJF_R`kAyrJAb0uZzmy3YGdZ^=#G6lgm@HDHwwLNuS?eiGnan6t zgv{6;PaP3u8zIST=lh~{K({g?vz4K~aHCW^B#9(FE&6iuS(JY?Xb1vdt#ANXX5e z^QsLLIiOfkIf~B~&=hyNv9#)Y8L;1);9{g-C0Jg~RQJna!io+@+7^(GJBe7OS#!;u zV}kV}O+3F^Y^7KDsND4`U0M`>@UPTehV&8>{6wUSfqIpG?phzM6KSE>Asu(ZuhzX1 z%eR`~5|L)6d5umZFuxt3r&t7+Fv&y@>Gd&tzuU&`(A@PVxD>(H=*ZWYEkrQW3NDQk zw3si*DsIM~CfFc?%pk9I>TN;WKkYj3wE{?EG1X56-+F#okH7e~+^TO-_5Se}L5pST zBC+iqEPmDmmx=mL&nX|Q?kKJEQ8`{u>1pVVJB?S|(bh(*I!tf{(&d8zPo?FoTSetV z2wOn9xASsE$qyv`mCRy|qJ&5+XL=yfy^!Fe@>oad^(g7>C|gx>4;#RvO>m_sVM2L5 z*(zbFtZ08xBJ}>Eq?c1>Rmm(iMp%xnLdomNfK4be*(sWX5?eq?ZwJ7Nk{|K)Oct=K zMG52V^%~pLwYDo(Yggz|Zb4i2Phs;h+buu-10^hXn?y;C=e)uAl5lCYN}6Jn*m6XP z#e5}IY;m@l;2M;?!7zIR$8tyc}6vkuCvj5RRYc zqY{KlmmnM;doZa=v&^f_G{MhBn&wY*v~D>ERM9>nE%ZJ}#~mUn((P;j&df2v^+-=- znKO}eNN0cN=Z5v#1OCb1L5o?hw=)6GBsp&oK{DaQGAmeMqhv#zpv8PaX0e&0Oz;a4 zEc2YV(ls*LC)miCSPi)bQ~jj!UAbSjk>N)&Qvk^>l2k0_tMB5fa*D-pW^Z z$eEpr=HU)oKyTcEpW=?6PRBTwV4FlbAE;GnIZjj28j%*dSlHW?V$S|!_j)Da~@cTm#XX_=~oL_Cj0@Me^}?E)iIi5xh-|by{k3+5O)9n=$p;p* z-Lh>wO4wN0B1%|syugs%_i7NRTa3u!n$9MZd6pRfi2Vv^)oOcIWCT@-uO_iJDWemL^VR&~SkgE%}`k)DJ z6;duxp=+#;Q?Z=e=yoAjc+Pta(mkw~-(`A!S2B@5K)=t6dRdIN%C&x4rLIL7Ecdn36ch{4$mo*{V$NcO)wZ0IZg2jvQd9 zsNUHB@;d6@H^DAp8U~QPglU$K=1FsYSp?HZCitf?k&G%C)xyNHYembIiJPL;(@pR{ z!o;YpY*HpUbx_epVcJf9SUuYW{}QGq&-tK_WxCr(6Vx#a48JNT7lEPHF`w{zxevCs-BqM>fHEu10|7-#MOx_c z)?eJge&VHHFW|kKlZ?BYNYj=N8&z7)(NnZRq=nvqblf3)D$Tvmigx2VBHidYldNOp z%sWM8ezpaq;||PIY5Kb9G~@O~dJ@i=G~DLRM$MaUUrlEInRh;Rr7o_2{R_c=7&jn- z!vU5gB;2+HE66Q@JP)%^$6Sk9!Op7@JlD8E5o9$|HAs_e=MX#mClTe7Vxqh)F3Gmp zB$0GAXU zbDG-ZX7tM&#l61t@%ujZrH_v@;F3oKaP|7q$H(lxNR@(87^-7iNUoln7-DZ{BN_A^Q8g5TNWX!_W=dr-}k z4$qmItzGb81t^g)HGxi)_ur=`0n+BU_uo&zY8?2Fm$XQ*q1GjS&Oe zK-zn0;U5bzaISIpM!_`PFs;ifm`E`b$nwK<+DMRG6vVwJP7AwsL%~AhCW``mGJTZB z`A2CK9l-S!SR_t?ALm^c@roKbb00KJXKYm`sR?rA({v`C=>=$zFq~cs_lJ z9bL3$WwvqmMO8I@Qq2+vcXvH)omoxjR}aS1{)*y<$R?q#+kPm}BcI%T(bawAQ#HX~ zof#w3eVd@8^v^+9f248ulPa-rMzdN!ne&#a>wyO9|1;6HV8%eM5Avf=dR>N&JlKmy z;tVXDk=9E;{aH#i#~C+;YGyFPW-_se=6mg7M>7ce8Ew9!ED}>qXSA9~z|KrSMW48O zZne$%gL;^P_NShiWu7yOIa2Crw&x1XBraxFVET^|u)UmK6p7oJ)iBDvi|^_mhx%pP zQU4*yuVJ=1fNEypm09KLH8~7u7RhK(?!{?;O{N;M<{?xw#{*imnrisx6amG)*XK+C zDYptn$shmtLL;7ELq0rI6tsHIT=Joqww3KWoHnNe=n|XCu&KAxT;}#c$nir#7_0oU z`oSbzjDFJPVd$Tm4cN8hOrl^eZkapEH*jtN$k-iQXc9_MKsx)oD4WQMYbf7I@xIHTcrx*jab{FFwA!5YB zJR1vgJV`CFP#cMbdBnoJm{^Fztq%;5y|$lmk3`ix8a>~}f}9O9k64&TEEtnxV__cc znim@jjo1;FQ0C!;dA-DfF)OKNZ{r?CHS>vu`8M&-zLp~Go-b!qY)wEN-&tLZ*W{3o z`DK9QKmR+Ct&#+~KW{ZVrK59y;~p(KyF6z>v4n@&2~~3T#R3O#MXw}-|8e%kf)p4< zx1T(==J;jnp`Gqy8x#+vQO$y4&#ALF6LW`vV&Q@bev~Yz0IBRHN_LuwowpkISQOL| zk#*G?C2~+joeL!SQBpSmB(;|)*@^wnwRafzI8jjTISU7C@{q`?!{K$}a3bqg`J<;y z5F$ID#EnIw;rFkFAFvaJ1k*w+UpSOXC0#5OLNyKcmveErb->OOss3K$9xtkzJ!esY zdHkv$H=J-+)m2($C!Hk&S_PZlNgaERa5MGn_ozpeX=-I8Zb9~Rha|7F}0 zsA^Gx=PYJ*&mvULVpv4fEaHe&voqch%NK0~5%;UyQN2Z=$thZxM4o#>}0+LZ6OQ?FHsXon* zAck)oZXMc(QNQ+ScT|JSZG?kPf^;yFu3s7^UY;FB7l z7M4!OGW_s>RveoKvCJNv<1}Ivje18cID~a+I7Y~ zO~mlSQpPi#FQ4Eq84GxH{x0A9R;-7x(eH5S{75-EEiJ(>OImty-mckHv%$DSsb(qT zxxvwDF?`I2w8jj@|yw z>+#1JcbF)^2^>f(Zj{Js5G9e|XdpP2?GPOF!)~{t;6&s80|m<%gv(mB`{e8HWmLMX z$d4|I#6_1~tC-!Uq2Uzco+TQnllF)S@)`EBcA&$LrRDf$`7m7RC!aXnx?{J`QFW$q z|B0&Q^w#o;s!G1LRaR?xG$&5sp#NpO2eOctMyVAJliYj`g(N3uH^=~5? ztx;~*#g;~aiM^!qa5z$Yu$qf>IoD%!p(tGnOhaNE8BU9)bM zaW6#GDnfU)4WZ?H*t%*gAjzO_r>|~3gxD_idUok5x^z`7yuwyp_sC$MgrakE4}oQ@Xy11~irR z?0T~Qvf0MHN`%{i4&C`&#%Ac%Lh1lIEs4$0YlPGZ5M2mPFEnnBkcgKx36^Vxaj%86 zCIMg?74>V3d!3N_0QeJ9!iZx&JtFu;;dHSR4!8UQd(MR1sLZxs^mT{F;<&N1#N zAq@luSyHBPM+<2Xkfx;S9OK?Dq%>f##{HL&MgqB(lx*Aw zgp>=6QqqjGjQgOFMge)2>wM!rB&0kb-*R1H+NCm)HOM=a)L5?V#(hCZH9)N;bs6_XA=LtP zN^0E6xMf1B1L~DD^Kj$7B&2$vK}pR&8F##p8h}Pi`qQ`*gwzN$DQPje@)aR90nJLP zzt6a@3aJ@bucVnY=rtj&2R2#~j|$3#v=L~rBusr>NG(9Ck{Vg~ydk7kpv{sPFmDQ} z4QQ8>Axz>=9F{fAB<^H(-uE`poyd!N7D3!;L?&qv*OrKs=d2xSF5DZmncOHd?3ylU z^5#G!#iqrj*d#VOSA1cDeW`fuP=Em1!)jYQ95hRHk;8w=h}CMZ#c0jx)~fe6N$XiB z28}yN^b&<@aZW@pv9)$$RBu6?UcDBhw)lEHE=({qq8{$7_JMJ-G|}3`Nn-m$aHKoh8DY)!m>}y}4BR%rFGuf6K21Q#9!M<{^Gw5v8CUL3L^m!s?z`yy z6gxg8-mpW9#e+CA^+B#-$9v{-A?ENNA#!jx8>~xeRFirX#>u;ht1l9Ww*)JqQADo^BX!u zT14u*MT91?CTtO&2#%rB6?+DG&tZ%S$}Za%LpS)zQ~|o`me^E+IVxm z>;rE^mjqO6oH<`simG^Xl!ls!IdOQzobjw6ry4gCbH2p|8!)ka0g0QW?PH0oNz{8F!M9 z+C69U0L=n>ox|4p0OM9c-aG&()zPQL5`Sb>VXOb4rP=EZ_zyMiN5Ws~IW4K01@?N( zW`WHUAeYl*KMVYva_$K;P*zv{^RwCi5J4Dfg>0;omX{KnR6{sa@&#z6yWrjFP5<*nRr@xopEQ0UhMcLLG6&@mM-7vv#`Ua-Yv{W zTe_^%h1%_Oi}_AZE=OsuacfZeO#;BO%XjWK`0ks?&Zl)Q7Kn3iGwy8RuLtbXs+vaw zbA&{^wEF(eH*PJYR{Y(Xr_Noz+y1~rb?!cwTjze80%<^ub0rOlqoWc1?FcxscZleHKEaO3#;p^* z69JZaq)08c46^fDUDUbXR&%MvI#;OO&b65D+1GMSuI~{q4v59ISF+MMf^||E6t&EPX z$vXsk3ORSh1mmtn?^fEil>vm$wOH=^d~MX{Td{O&x%IhFyM1mk-{&bTepclecbzDm z=sE4UftfjF6M`ap zFyn3zGH&_Fc8?Y#-LpX*V7q7kF4hwb#{EM0>7H%2d-kWrG9-SYdwz=Tp3d0rks+~- z?%9^I!;m=OLiDaO?w9D@h8^2%_h>QFJzr`|WPQDj?%C#dk5Ie2$6|i>9PkKAn~l3s zl+ryvlLq`GzpWCIJVolcY-wa7+ywv6?03`x@~wURvgN=J(R;daThaTA3y>PHLyN=x*yo{!KZE`pZpmc`@i7RU-Ej1{W;eg_dC(k z?m62N)WdUbHtzS3wkH66Ea@rZ{vf1203McvbChv^6cXOuj<+DKe#^L9g+xQQCs{!z z+IAr&0sXDuVB`KIB*JmKow(;P4Q>-sGLT{gnZ$k;QVKA@l9-P=goKy2r&`hy<8BvH zDlpKJ`WW|DAq@luDQWH*#_bf+ARx_>GK~A1kkSA~EY>&iPS5W`Vu)@}w_N8N_YWbZ z19onkOM>hY(hy*%%)|${RLdphmEa@u~+Eqw7z(^(4 z?rK7gkVXQzmg`3olC7NWxxgqTu?rmv2#KKCo@YtBn@~_lc|g9BKJ8~hu8_zG+Y6M` z{DcXGgj4`9;-o=Gm{3?q465y(B^_fzi9+&#LLIILz0XT3Gfb$TkPAKMR~#h6%scGn z+wn+09U-GN-yZZe=RyTdXm?nD#c`eVp0Ji5cF(n=;N4w$FScXc$LttCIEkqJ-h}o* zvXf5!&6ljTm5`nohPP=Y2b2D1cbZUtSbu}{cb~P@vNDb=D-B%wvg$l0*2G@(ObHAB6=J256;{WaOz z!`))k4a;scp~GO?DG$ik1}?kPga!&JAF$(O*#jo@cOex3cAPA_&V&vZ(pZ3TBGuNi zzmsc1Y=}bg`tFQAsW!t_OQNS*J17oeMp$&439*L)o7cBbv1QHk-EgGxMh1n&tQ!uc zq0944=qM!n6nlMlsj-qJwvwYFZNr{JnSN#$nb6U&?o#9R-L=iK`s3&52rCh^ZnO!d z!M1A~(5`M+y~%`*5mGxq9Kp4S{CBL7Ish9pi>giNI3dxOyV{sp_qhojFQhK7?`}3` zmTxwp6CmxD01z|iniDXg6NS_Vurt*1Z%rs&NDjbAf@}F!6FNyqEoJKOd+KKgDq*g2@Mm{U?AO+m>m8gq;z12k``ZP zLjM%f5P+bjjg16XhL8x}-AFZ%7GG~dXA5ZuW+;LK+3+S;567bcvAifP70@WRD}>|$g_f(-gsv1)Ay8yVnud#3Xc$kV=6vOZv%#a)eX{Ot2)TjO&Cn0Vr3}v}_Z)UP$G@L?zW9XhI`} zG!dv!(sa0P5K;wDX}JzDp&Nx%2~=6q5hiq#kg9+wR**2s719)-+LFjWHw&p6sIh`4 zn$WF6ssU=1w3_Z1C8S!QPDzUoH=)r&ssrk+;3+0_n~>^(1|?1Z!h~)YQUlOvxz049 zJRvm#O-fpQyb0YQq$Z%*a-D5LcM7Q)SZ_%em{7iu)&m=rH2pghx?4yaffmd4pb6b0 zq!yr6N!82(_X?>MXtP|8m{5U`+JJV;wa$d@6H+_SVY!|#p)o@006Hz{856o+NS#2J zK5RPTJ~mcMO_(2WIe1_D`?O?nR(c6+y&v%^kS)AkUuTHi8`vVdb>@g$4LO>P{v&2_ zKl``|bC!BU!(rVTHi{OJ2F9ueEf$D|4KICW`q+=_!xZxG3XK&1d)@qd#Q%Qu?C$eRd{{-Vklb+ zgI@8g!hufYepRNp_SoAi?p^!#O#{+ZKZ`H>Z0JB1OGlXSv1aE1s3Ji7(ty4UF|q7N zE*@jT$Jz6~Z%Pw;ZW@BwIQ_^}7*+}|Kp@g!&fMzTw+xto`kU<0o1L<&=O4X^$|Fxl z<%uRd*jKq-ROasFtGrj#iaM`vppR8ag!Lte`!E*F)6 zjTbFSyd1efp5$SoDz#(B9`y_YNutf`%a83z#~yW$?btve z2?wc{-=rne~4>RGDr3ts^9g{$jCcH=a*hpC}92Y?-4~~?1 z8g^92zSrND?-S0H-*kyTl$Bp89NDe(+L19z|EC-_NCX}I9aTId&Gq_{C}h|MM@kVV z9#t+sRA`Q>lqX(&gEbNI3`<^UF8(_TW_W#FI@WC#)?du%y`dTS-E^OLbl6-$VBQ)6 zF9s@iXhVXqH%HX3jk1RZK^wj!yY_6_ZoD6mZNfwRD2^K#X{SijL?gg7;SY=u9UJmu z21Yr(*gY`Ph?%D@ibEr-(X$d@CwjC{6+7*;Qm<)JsI~q-VX;{b?Vt zXsI&cQ&B0Stj7Ltou9^Ih_n(>=k*N_iVlo$0%(6xV+TeYjwEW2>BId@KNJ2(Z;d}@ z2x`9(l|ZqE@i8oaB{PKSl<-hIdQ(~g>8VrF6YbBkO4&MU*xQ89>aF?5FgA`EA_{>v ztMp-naY48YC>N!AI^%DS^?V{#dre8V)w$b5ZGMg>$)5s{wuNp{T^DL|U3?16qsugy%6o%Pc~+UAC(UkI-y; zETNZJ0N^LN;F|E|_QGjG1X!@hh22f~3VUIM5P@dBu=rdPzSds2Lx=$05s3*Ve4V{8 zPKaJ#@|9kA!-TK57v2;iK+};}{E`XZVlOb(l4wBEa4Ye%3EyfjtPvuRV=w$>!lUek zAB6~%>4o|ACVZD(IBqu~0+o7UIU^?DUKk)mpw?a>?(eo2P7)%}sTUUf(}WA`g^Psf z_3h{Ch5Bnv_&$5#Rv`id^upXU6CPtP6bca-Y$a|o;rs1{SA+;K9nkXnyG(ejy)aFP zfNlBmX(s$HdtrqT0o(HBH75Lky};nbJ5F*fJFVONw?1cw}==I$_ z$zEV>@u`CQEA1kqD6{3C{7SAkL-y2#7qOtP59S#Gak{#Tiv zIwZ9vL4a+Fug^323!TK3;=)ny8X@rup1*x=a&DDCYF%M_dwk&pQCX;G7AMm2u3c|( zpN6QgJ#JE($U(LC*RMDEH(3=YlK#R;I9FF*f79gO>LN&gA$6tD)s>g}n*7Bsg7gt!BfPW+7-raw1_bC(mpMrKo!e@|NGJ#}PSzm<6sC41sV$-~XGGOc&2gl%;) zKMrM{)C-x#CjZ{F%zNv|w095DWGYG?F!>Lrl{}bM z;(Sht^*beZc&4n26yWx|Jeq`pva|J_XH!;bv#M-lO2P9e_}Jt>mR7(fX}XG7zZ3ff zymv@skT|T=W{~x^mCOfhahClxlzB39icK{p|M9fU$Lq+nek=3ja(KUxJREI=YG=Jw zlKGRBd2%8p^8#d2q^r_0SJjbe{Z8gBo;kT(@^G76^5-M(PV)CixkXZgL{W2Rt-M8&ey=UPlOMLFck+{=k}k(^T%d=^Uz1j{ zCauKzoD%D|O1g|d7_G3VInHH?^(srcWLqU&8d)V>nx~Zf9wq0P{J*7@{4K4-`J58# zcS_bGY=jix7(6tYSt12fZ58QqiOs4mzmfuas^{pC*4yr-%UUr6i6$gp5%fDRxQKTZ zh^ug2_&}5YqKlxqG^xNXw-J9YHTnOr5vL>+h@%-J>hB#*{%bCxr2>OQ)3}XzVv@;! z-9?aHNbj#jmVtxh^?=uJQbEo*Jj9M)UQs8+Ay&hb1F0YQ_q)@AaQt=eX4sZW&cAlNjY^S zpA=7N-UdxIqqv@-OCXN{h|*3;^RIE=6P0m;hK%|dqn4V64P5%tdda=hjwhO&JG=_F z(WXzL4ySkypXWr?zVAskJ@u?<*vMAY(~cJhuG-e%r|&flTe%3T%i-0yukA$V^u~tf z$hq{Zm~tGBi6wbLHI#hl*Inp8 z^n!HDr>5aN8$AQ`e3uj&>YjLnal?q){HkeqEkc`{0id(_hWc#MCoz%={;<4f{zOHE&ez3`q%@*Eb7TV?vT_sj&%=$<&#B=h*|(a)Ex z3KC-(kHT3U^?)Qz$>Z>%3tsL{v?|2uOyA$`QgS&fjt>epR!-l@ zmo?}yT3v)&OCWxu-2mq)1p$Atqc9wCgZyO23cJt2lu@Qsv)R-J1o(fd}_@h z*i;kzw-@>)papr%QmHkA%TYy=#*Bwk$$%iyrVwfWE~XXKo<~j`Ma~|zx{kD78Pd#Y zRKYf6LYr1d>z-t7Ss;L$7dE3dodJW%m5ie(81j!5qQWf|>$xnPuNA=U4KuXOa==6N zWN3G`dwC%h${^9UG(}xQ!2bHES3=!Wl(n3?ptADLkVkb(vwU?JnE_DuMIB;od;zIJO#k z+XF%3=seMnpvh6ij;1Xft(zd!8y?*p*R7t+TOv94u~9il0H+rq z)$1HhHXps*w5CPyaN_|Bzd^iVg4V3!N)8@M!1udfnENWk785b6Aw?#K=NcGCf2z%iGhL+!8 z-!XVMXTcxOX5wN#DY6ckY6@e1R)hVF|d$?Of-NaLurMrpJwnUeP z*{9;z8~QO*-9(Q&Sp0039Nh9yb1C(;^dhIZw$!olN%kX4m*X~w^=tbM4S)dmhKp>e zMMzUmWkb~Yge91PLo?2#(sNM-a)QKhol|B|LZ!bLJ<)vT9PNmU61Nbg&VveW&tQGz ztsQFfVQp19AC4=7iWeeM-Q|IJ=ua8&1g&$7#Nlelr~~aGsJ-MPaol1emMF~4SPoQ# zehDCJxQGPCAkj{3vS&m44isD%^gtzUn49?e+(W<0~ZHdQwvyQ9K;V zBch#}ZS6ECET?t{;Pno!sH$B(|K;W~$5%kHAS6GYrgXeI`i!^E$wF?=fC~2ztY>lB zk2@;>I9&yxs&xDc-1^%5%E088_&9fTYE(QyqJ7&iFDxiLI4?wfJN1ql+rBMsen{P( zoNhn-U}_BHQWB_e%f@>j1iWSM z&Vm^MfdZazy`BwFvk80l11my*x@Yeghb8ae)RS?Ky(w9^CCEFwlf5(xK!64~=Rp`3 zXQ}nBdd{}qRj;O7Z^xxjEhj3R>>St|`olJI_88Aw*hL?(7pXLoRO;leejaI3}o3amu}xC5}N&^xWct*a;5_wodz6DD1p+LTJCi$|SCCcro-GfqS|C@RAaOzxz>TzcaNPucFAr`eR-H4>^SBuo zfYU_OdB~&sZpIbEBDAumKY?VN$OV|8hl*0)s$L8)xSfU*sT3#nhQWEnP|rSt7`}D; zA1C&Pmg_y?k_U$Rc0XV^w+%NS_Y@6on;5KzG}L!5vKUwwa2qqkLE@xVVz3?<>bs3u z48P^d=&wYK)3E70Vldh(@&1&jy%O(FjkV$x!_zQOEl!$>TO|hTfuz2hr^T>~E3Mi6 zKWP=NMhw;iL&indQ1;FzBUq4}R1+l1+KSS8ls$E~o#|Lvv>xotxSw2h94E1dMih-5>t(FGbU1FflcG*Q5>idWQ41L=3kpjlL zF1v!nDWzht9vJHTbb%Pg5ao#&cM%NEBZh`Hm;Tt)=F%Tqg}Kz{WibLsoeft3Lx|f#Z*|Ib@&t*laRHV9T`BRdodrl{*Uq@n@Z2{?9-I~$+U`WPc>er>JUI22f4)ba zAaPorz&LquWdg0`!BvrC=TrZ=@D_kmOK~1DAmhSYQ9i+F%I4To$Y>$bu z8pEior_oYQSC{HMqO7|y2W3SLlxz&19>tYG={!(oYzvCAGdB|R@bh#GKV3bR^I&Jj zJ;kCN$<4>)_~}z|OGIfsP-fhREK0V+ma)h>eF<)}D6I#|jC+?w`50k+MHM8vsqH(D zC`a2Cz3hUpLiJ_rd+VXnk{>820eD2i@LwomMJxj(kIK09^Lv5IaK zZnuTV`NhSzc6QC}zC`16LsH-KJ@1j_0=U%7s~dHo+iEum*REMaeI=Vl)Rt~FL85!x zaJ09ezL{6w2dM-HM2VXpQgV5CE4HE3u~c-K-I%}Nc^Mab`JAsAG_tLxoh_Y zIL)=fIn0l}LciuP)X;~S1$3wKbl0@JA3Icw)(ZrQGc-Op4;&faVS$ZL^Fe`AE$91w zcyOxa{Q~>#KmY;SWswzUOv15UoLX^YUEqTyF$u zoo#^@ui=dI$K|2lDed3eos%f<4e5L`$$4l7eYX3S(u;2Dn(kgv-mZe8~ zIHrbqW5Hl?v=_$~INTu?S<|6U$jZy%=`Q*p zab`TlL*+Wtb9CxVdep`6q4?@cM2~ALz#)n=+u{b(=XQEs9^51WM(;Bx;pPfZP0pN) zQ`g*yV-#o3$1N6M2l33sIAuPcm&1cwtr&@>s+_q|pjaNSt#KZLW%o^MQ z03X-G6C`@7Z~xuz<-swt_V|Dw9$YB`I&zAnXDP0m07`py!)ealag98<(ePaVxIDO- z0?fI4&cp=*DD6pJ_go10ElPVX#4VA4Kg)w-+%X-mmj}0A;6izDo5e$m?711I@ooN> z^5DJ}_>DY4;;g6uO3#Yo3MGK7J*yB$#+#0(%Y!Quprp=H4HlRt4{j1< zI#Y1gB;1_>qvXM@5a=lnPKKUvoIJQK0#djIM_!xG|CT36^zsB~e7!uJZ0r28Jh)Z@ zNb1!JC)+wxPkUioFKjcN$IFAmHq*JcJUH3bxsyD&xdNPA=`|NOU%<$NTMX#5S03C$ zfD=hVuZM8!1V}=!b+}CeB%#+PTs3*HaHl-D{Q{Ivul+&dY?7c4uHnHY1=`4iE0zG# za&|GUGp%dTt$gWgi~vrp!g**V8Q=dB<#T*dj8<^=RNPWgS`U;N-x(9-KEh5F6;4YT z=MiOZJ8<4SNZk{ZgK4^aHw~&FaZaHqtq01C@1}|JbPV4pDqL?Uork_I<9LK9d03<4 z8RzuI%@d{dh_deC3{mp*TL&c0nTON#+IgVNI3hv*UDiVsxN5Pn2ELT$b53=TIJZb_ z)`QU*-;;;!%9to{Wv~rlPfSN>&n?3ZrcY9bdu~@;1*~C*n}JDP1jE+-4d3 z4g#38p1V0n^tRSN=OA$?D?V-S_9pqgFABTl z-Xy=bwmc+(oXo&3`9sfe$3S~uMD+47DZS?c7S~D2%-W<#*8}cEZ13ekqK^(q{3yY)3=H?NSseU z=uKzTJHHS&7%PV7d){o)aQK8dwGO zr(%9>t^9c~Jn07J&Ae8$IQn;Q=2`OK)*)@gF`hT$J^`F|)in95SdaS}31QpFz|Qg! zta>h?h$;>QiN1C&h82COjD3siSTVQO3h8>$^X9Nt=}T(+%~yFWCVmcU75#bBK1=<1 zh5R45pndk}c;EdZSMY&!+vrE@?Wem$e$h5a;G9dvfV)#lzjg10^t+RQEfk{jP_20@ z#0>=_neks*plICp1G_vJIo9*$UM!v<(Z5tBLACBjhV*YR zMtZhB@>c0uMKV7EAi^Ee}vnEgz zD=GF$HPZ=Hvr1}xWm_yCHIMr9f&fl+TQ#eaWLFMHLRhmhu(N#BYR{W0zA9X*epgbz zD{Jew@!Hl}fv(ZTo;PK>=!3+7{fBzS>qY#OD{VEJ@>|s`eKEsEz}pQd&VB8ZLm-wwv>)W?c~0tkJCar!l)5*bO&2EWLp} z0BWCM&C0+o4@Ps)Y}#n?;1-3YH;@b&I4@m###8GGYZm7yMt@Ek)u3iyZWq4l;09I) zi9u?RbZ|qIrZ)0-Qm+Na7*2kAYHzjQ%1I2G3dckBa**UPoRUy64%&j-1}DYHlV;;> z2>rG<95cbQoAZOVK~;^cx`!=z>0``2L1HikI(Ru;m-SCC(`{It1#$*<88hZpXTad) zux|;KlJyzb8Sza>Nfr!A)}gG6Jr8rnQm8|Ua4M5uAD1@AhG`@X%P9k6j#w`c8&3It z^>wwZ3e)5w#ab7;l#IQ}**9b{q<2CZW~I?!CcjO^*p)6ThtP6|EIBAEDUh*Sos^+8 zvZ1nHoa9Fawvxt~kdi7jw5pE2vby@l(Teq4WhixR=%ioj8+TSHg+?$m93fNz%*+fa z6GJIqL-qYZQpmP(_Xde!0d5^!R~DwT&4%%yB9(0!*yZ@R?P3cO!<9|bKdogYY}n>H ztaY)=@v3ZR`*08T_K=2om4R(uRUH>nmOz&&bY5`bGDE`Qtk{qLHH^Qq`-Mh@M0p!pJ4KO|?2Ru+#agka7!@b-E6}sBRj^ z-{aCalCEQ9JzdB6PlCj#nL%Q-O6B5adSA@DxD6G4)Y4R7=X6&-ib^_KH%T7Ul~V&J zv=TXP9^G~AMU5`30@?1O#!T#L-~@We(F=ma7@C`@`^wtrbzvZ{tPQ5mRt}HJ!326c!o)yA&K2Z zhT~u^q8i+0lHCc_+ZU3kK4opv@Sc%KaGVhi$w; z#&Ymg!tN#P)utw?_r}NW!tKXAdzVRaxTw)7_GiYJGQ`eiMUbY^4 zAV`ekSaQhD0@1RQx=F1dd!?I6&Iv_~iwB7+EWpsBYfbVZNJ$+fF>VrWX({(x5Ilmc7%txP?|w zlQE_spTnV#Q8JyVT4$MmSh2B4Q1JTH&O^({@7Fvpa$%9 zO*EUtVgrUJJu`VB@PPt;N`Lk`_aEw+Hwg?Bzk4POTmEL=N(Fp86M_oQY)%F25yi82 znYU8`dlj(y6Z1|g;FFos@eShtdZKh>|Lj5W=B%h8co$ld9TpMrO=wKA?;`U0#fuD? z>ynskuaM{Z7{jYcHqpuB6|%OcF}$hmLfR?hjmwNVF%@#0LN-K<>6Hp8Rml26!!$4C zI(Cta{!D4G=El4><7oG08ll@|?y*-uZ~>+1jR|uf5w9#U=3OX$vI$y6$kRs{vn3VM zU22|PZOnVAkTVs+XUoj{sgUy&^0%Li*_sL&C^_$5ZIs1M^4V%#CC7Wd=N)kdMG?7& zHu)I6>?CS~*+u?rTjzOxKjQr(quI58yoXF2W4?(;75G|If6V@PG)|3e;Wvk( z6W(Xu^pC*XTHc7?0`Dk!-|}1HEl%_HF+&~xSsL#Qu9i1Zm z;9rAx`^E^pshOojo4KOCx4}22~vdRhfW!4XQc{HgYi8V3rWwq#_F&TrgXZj#7e(8cdtR zSpt2cOR>#S_x=~gFLJOLxOKYmn>g4CNIz){1>Uv|E)pwarC3Xe+`iA)VtUChY2RSB zBFTA0c2?vx;}<(v27JG>v4w}Au8Q4hNTs#uRK-p-ek%u018!?${MHVhuGj~Rf0TpW z6nmcW+c?-A_}(+dZ|mS0z^${5&qFt*w!FdY*%PtqSOGjeoB6>@faG3LqW89aY9ZS%M=a>-+{i z+1>QJIQX0jb^F=IKLzT3k&^Yo?{zo+sVeJ8$wnK0pYiGUgg04yr}0mBc(cU^jNi@S zEtdas7>j#?F>kNmU;_P<-wU`hQc@%K z9W9N2wu|0x#rHS=-zXHPUE{}F%bYEaOHJaFhCykF-!MJR=(D?m-z^)#>eXj8EHBY+K;_9~pn7 zgGV>0WE}NJfvD4^AU5g!(GIq6P^nTK<48M$6lwFpFHsfWdY$pBlzdmk-}{a6Ct&!* zNXZ(d@4eQ>p9sE%8WL~Nzd!Fh`I8`DLzRdtPh)GO$mVIb{XNpw!Pwu`mfs|kw-u7D zl*M#9jV#{2^XIyfyhzYxu@W=KS(t}TmFvaC(l<7c2^1>}ClM#5F-z@crPXCiIZJcZ zWg$l4*7wnYVQ*2Y*+=%+V*Eu&`J$)suXH-R2L07*T?GvpMyh&u0$z<|Rb-`l`!?eT z;-;p>8_XOto%mmYTSrRvD}L(@#{adfh?Fcz2)|(bc@8fX-rm*t*E+mh_`R2nf1Se* z3BP};@fRTPgh%MblR#Yan4aGebTM;iYo7qH3&TxtAU;OH4GS^ZmMvp71I%*bXA z;kCAj&sFARtG%pL$64C&XB#k30hS>~{y*6_BjHPKJe(Ao?x>V6(kHGq|70I7cYiD`U#iG*QeWN^{gsTX)AX2%^fv}gjg zJa&v_9aeM!oo!4*5O0|kspk#BATm6P8(1t0X{+a(s8xh5$L%TW!GD_f4AeleLX zf9sYrnN(VDdC5$CvSFoHOa_T#m5DaV;J3qi$S;4$FR$Y#N8zWEL7{&}5edp#PWUo2q(~Jh>wa62`Xf8%UP(qGE77T6 zQ?Plb>*t(SsUYmntMpVA^v$lki6X;&FRD5E36#6@MRvU-`xY+}r+K(m84_I(1<7~0 zhFRiV@rjs9IZgE{?{vzakH1x5fD6nZ?-!B}CiaR<**3@#Gelu;?t>8D8YHGCgT#zQ z5__MSu0JcxG_gJ{nw#;w3Jv;jN48{EA)i-Hdtm+(8D}X~izBCr>sFdZxrt0maZOEg;Y)K(w_Kus0s0BX z-wwSUN46=frG^N6UiX&NGwXAc^Vmz``I4HRWBiv=JTHo;h36GMXMFrj-4hTvGsYntImpJR*;iX~4p0}w)m zokM0`TCW-S;PT0o7#f(lzT^QizuNfV74b(0iNG@{~BU6GISrn+Ofd(QmIqk3Xcx=bF+46ZruDG9@@!j%^p3$fd?O z-nrs!Ic^dqfY&l?&oYtAXsTr;Gp2PQ{0gz*?}-0O=O3qVW^+lk@b|dyAh4os3om1I zE2=iw_-j+phK6-9{o2yKrY{5C`%O&&bwJyppn^h+Ag%;`dz_0aH&yC3UNZ&MxT2aO zH#b5k!^@1K$xMtOrZQbX)!Nq36fk5KeQd@FA>E;|AkBwLp?t}VDH^8)7BIvYedXVj zq}~@`UlSkOdgD~@nRu??bcZm%q8(#A|B%MYP~G+6r_=b(+~9>^)-uv#II-8r!~7G zgTAAq|MkouF|T*M^fS}+VT$Ha`LE@)#V;#B_QEu+Qq-7UGkb-CGE#KtQm6CUuE^<8 zPl{^ug)%yHv!lMQd62m7`}(xTZKkEFX=7$xssY#0kNk$SeZRCa-ZpJzn4;fo4ifW6 z*GtI=%%;9Eaki;t?dd zFa~|)$nE6!9YyugC*o=PFh}kvf_78Av~AP0N)aCnHi^LsN|&*^mc!;dop(lq#GQG+ zOi{x2Ua2xWY;{OY9luM9(O;w}u_Uck()T+0yOsxuKh3L`eqEYAOwpg_1&O;S)k|BQ zrqw`Hbe0o-H}m5qcBot{u2;-Z{dwDtM>(Ej8Dz(xqRSn}l8PX4PpUv1&yYGi#Th)0 zI-YwdlzUT+>6bj+(mY`@?rjVGR1wnq{*r!ln%*v=i$1n{?!)bZdVc|2^bgrbHlli# z@;nCInTbPJ6XWJZJ3oreQv9(cc0E2vwYbEt(=V3S&NG`#WTumEqFiU((ruRXuC6*Q86cL1W!?ondW9?jmSM_Wz(r8O_}gC@C{$@KxAN!T)OR7>nst&v7v1nbYI6Z&DYf|m`jW$$AUs%%!p;=p;mhnC>hKk2 zhS1Zt>K(qGIw$y=zwk5_w+5mAOxY?(JUkD%8YT{Z&kPh^2rd%-*e-1k|H=$v27mZZ z{2Y-(_z{gY$K+ozegfZr*Tf!Eu9O>F%8$!iGMC(QK5ZkevSBmu{T1I$CCYE>JC;iD z-VhV}p5SEye55w^Zvp&Umzvmtl>c}W`w{<2!nZ$SV(J9s-`c~(ewH6czj4H1EP3zW zrr=xpjYnuDk9?o*H@<;{enU*G-@a4sT9&I}+1kuBx=t)Kphq|`LV-}MjjnYpssTsn zAkB`!rcrB~R*?mX6-6oOjapgK8I9Row*GL7(fZj|bXprxm_;>|Z<8X^hxRTKEWOhZQbAY@xtWHW`R0{tc|}buf))hW4#suzGB2T7;T& zcQd^)6}*vc+G!CqS8Co-yS2K)22tD6 z8==J%iDa(K!)c+E+6Wygsoy)&A)f6%MMj^yQfrD@)w#(uky2GWRs9T9Q*r8@>vX_2 zd=2?0tD0-=-2B*Z>!$b~O6o^8*TYUn59-+iq%e!0@w~mY#o{PeF=5R%sUUQ`+Qb4i9^H2wi@$@S zQ9nyTy>D?eJtoh1bST?fiJbSZF&ha!9jb<{w-DN*iG)?s>+i9ow_0soIUVD*7%!@} zb4ArdR8)kJ>S|HFH`UN~TKrB_t*opmRN-xdb?U@xaj#XO^K2~?%mYNjklx}c1s_#r zgC+B|w9JMcWIOVV8AEWj6}mxWYegnSE-l$2+q%e@37*$7+e#}E*>1>MQY@i`5s|(B zyfK#(+|Ei{4_V7Rk)53;JIN;6%6xC6F}Dyo%*tFX;!YyIkgR*jX7trROXz!B4X1j% zmZPC-GobeA(NrhkqM~t`6myHFji;ycZ%^}FAw63JYt4Coukr6B zcmq-k$Ie9Yw#CN(Gej$`o1a$8l8YlTtm=gKnMkw+-VrhU z-i=xOJdNv~%};5zC;UnpM?6}9d1Hy+EkU(;+#aIPvv^ST&GrlhC@R$79-#omLCGq6 zWFp{f3Fw14ekl?`NzjhfKGj-J^a~aDo;^MRDgssK`p3Jt=0f{?wjD%SEHqMQD7*)F z1TXZG-`U0W5IVv?!J%HD9f5zML%l&CTw#w@JnffMi1I;ussc1xlzaVCpajhnWr5#S zspUbd5$U@+P~kltDOqTgEoLVuu-O#x$h#eX_q!4DN)EX@LWTOM(I<3tHtMlOrf;r2 zkvRei#y!9Xn~ejN01m!5FhJmz5DWxVUmk)%0w086a2`+V7;aEB%u~Ucol<+J)Yce% zcVJvxX22)`Zr(_c#@3K5hwp+7xK66qn%VsE7#UZU;d-aIW;rfCvj)*f z&f5r!09Wa3e4nuDdFD!KtPB!=<(am#@e0Qaz(xlumFBBlHp<-SVKDD_)7%a7Um36e zdQpn`Pj#6cu*^&9FyAQ69n5`Vz9>jMm98pF)68st1EM#YDVV|Tw~Lu1GnQFN!}BQ3 zzgYT#c~er}sRfA3lSn$a>O;*3mS7l1E2uEuZS=L#XJz?vV-oyTmOMqRd1|@oOV3NK zF&gfut$F|!{aSWDX-qzbKD8XTCQa7Bku|pGe~m--m86)aQadmX(~RnP zL;0~vNItmJ7``qD39cqhMu#f0P`*QzGAj1Cn0{*v-}-|=y=t1NdB`+wQhU!BhbkM7 zo5VN~q5&WVi4YA0an>Y6gVe%fFU#2$ZtSleExqoTy<@SV$B%tL|K9LuJ-doME{3nw z62mS5st;P2V+hq@)xxn0F(|TMqd<$z8UGJYWw8(z|*>x7)*kt?A7{$)wH(nv?0xLDjG6XrMWpBW|KxVUGsFH%aIP zoeVTX{F13z{ra56P(-Sca)shf@R@~q-PNB8zVDN7W=N!Dp5U6^IyES`$i|M>sX@V| z9I3%~wpdjmnOF%ky$o@-#go%GqT$GVrX1yNTxy2K+BNirv{jxf<%`ht2hgG&sLbuh zxq8dgKbJKUiG^fH9wD1NliN0TmS>cZ?q+B%b9S2wI^G7vRVc1kZJagJ4CE208rh9l z;&Ud*+nI0smNj&)YX_$+3Huf-p@jpWtOU@)UCe-7nl&8_dI!qFtDS{XJ2&^@8Jv&2 ziI5>YsLGw812i{7+S&}IKg?^OS(WS+@j^nX|7n;KD^>hj+eXMXoo(Ma!+cCGtsNXB zo^778ZMP*>F0pKOz~<5(XM?hsX*aRWjh1)MHpek)Ku;EbQ_I{o1eWGzX9TPBMRGOd)^OBR$JNvW~Ox)HnniIxW)BAB0&Ussu5BhG+n&U_}ZI zJOo{?>p-+i70it=hcP{6@86(W7}|@aeqLczXJR64WK+u0ynA%MJf*h5`I_>k)V64;bK*kw zEKSEKgSJr8_N&)N)vNrCAHNs%?!%)P8{IhY+&0sf%%bY4tGUKsSej4WRbNw1Un7PK zVA#2rL*_x^IhGL5Gm#R>(UxSI*HF<*OgYidGi!SO3e#6yKPdQCGg!e_1c?_5O<#3& zZ?SJG(bEBRgbvIo7{h3(E}}et3?t=GOEQ>R@9zu}>!;%G#KwY6<}PA>r04Mt2@)?* zqhILi!v9G49`1a%PZT31(*2xykUw6zbmNLs`X8{u`zvXY{vv$WtiZ?@*<5?6l-uwp zPp7Ya)DlfqI#*inbW3l$iTlkP(7#lwHf4p94jLATn$ehUZ@IJR9TIEr`af*;^eQhx z(>3=p&0tg;9q9@+O&x0^>K(&!x26BHc9k2RYAC(PeYQ1^UPZ`GJ}QochZR!r`XbTr zO-k{)kcG&irBiRhIt0a5K1YOLvm-m!)&cRJhPS*aKc#FjNa4#` zd_<44%wt!HWVA?XjokUTp~6KgocL9UFW^RdXu2Ead+}rHe_D-K|Fi14Amh_@ ztN;1qLfCl;s3_k5OlB#EIlkuc z?nIG+9@>iIJphz|K&!ZzR4jnD@qU124wO<5d+zm{gOJxA^wD7ZP6Mbj=;Mp*OAMeg zQJz3DEM-^4EwL{t5Z4W~yWGB`0MZ(E*O=7mT5H%{6I1JHtzkdjr`op>pd20VeqMjix8s;!QYF4Fc0EnpBrR(8473aC zRjU5v@$RquLjOd_cAwy%gzBXv1GIOHU*-%+3XQi*YeZ-%|KUw`X${g+e%JGMX${g+ zen*v-)^;f$=hX)PR0mqcd&(*`0SMbV8&7vg`MkHE-wlLv<@4^R{q7ERi=SKW`DZww zEZMrlFPGsY6!hUA{T{?I@mv^HWz!KZZ0=V z|9pp(D<9wH_jRZkw0n?!nE{!tKzj$-cNvr|;(On(bd<`L4}a?qa7fv*>!1EWhgALc zec-EWhp#N&qdU1Y*dbNF-ADRE9O?$zGuKyle<{;?p}+X76g72Me(pNdAMTK<*heG$ z5y~o6v3_bkBSBYlKEH`_H_9~C?`Cs1X7L~3bWPpZ(4RehX5!<&o5YE9-U~*0$ z8Y?1v_b6jD8ffyjf$8!qTNvfKS24>r{S<2Y)3wpjThz%^Cd)Za$}WJohbDE^osR#- zI1-qgK90j&nv26VBspC#6oqJ*7o{hPw9v1Af>di$VD}%4*%_*SWlNCwM|E0tb%tu8 zPG+D}{h?JoAZedmnU5^tVAcj+b}MA$_!KB zQzw-Inqll)i4793b;VWC+hup8lgmEU3@l{8+i)oUvkfH-X%;gfOUktVwMmv#Kc|Xt zZw4WC+!D@&FvuXx(;~Z8;w69q5Y5N!65%*0pU$PJsX&omrdfjwpoat0gZPb*cpkA%cAD4*Wf1=q67LEUZ}iBNY=hFo^y^C68$EENMc7e4%7Z-4UxZ2X z=vSnbb z;G@>mFy2G^iAw+GD%@&nf`s}%iiT|#QE5@~@qH!|5!GrOvqDQ1VGvJKeJ?7GnQAlU zO{Rixc_}K@nJCS6sM_rh-$cr=;QHk&BO6}v!m)#hw5gi zJ{oVLM~iA{kl4a5QND62+7_xJGb4ZOoCyxaZ#Ls-qr2MLIBM=#E%>5##Ns7ZwK?xb z(i+#U<42d6=;_GZ!j{tZv`j{TIx<1XtO{j}LJblyiyBlJ>BP>U-+jk@jI) zn(G`=7J}+Xv)yPY&Gi&c+BK5)tchNLv=5QCCoOGChHaoa(m-k3T=RC)Hc8qWCi*L+ z?Lk@%%S@MhL54I?9ciF+?pT;p4TQAO zHs2Oo|5W8$&QwYJ#zY@R+E;YA-}OpKdniL12x;R(X`pmUAE{&8(~@?Fi9V0C?|KD^ z13^mK-!r6vkTxNd20~huwQYT^v|RO|A3kBC?;-6#5ajraQqs0$NCVZ$H&8mI?_2)` zOwT^L#Y7z%4BE9Kg$5`Wa-Xmwnm~0lfzUL@+PyzRlS3&@ z4mnL~yC3c}u^5`-OM@IfzUMS)Teh~=3)O0}TehL5SXNz4Aqq8x$ZEAGtQEG;! z{8d3t;rf)OrWu+*bu@ueX^N3i_`}=_QA(4GbDB0P_d1za2Q(F~4|19wNNH-Hp$UYh zutvr}sd9>S%+TaeN|QrYQ-c%Hv^!y9XQ8R-fgq;^yZpACVm&i7fzUL@)i1@NX_U$- zW~X%NG&z*g_#*lw>ik^l+L{y zGBknEG&;;ZP+HUPt$(`OO#U*Y?O9-A%aGQI94cFvvirUaX`nh~0YaMXzhi%?BTWw& z_H;9`wMZ*l7v!AQIVJ6H8PY&?q=C}Xo~@PE@C>AVe71?bgS68+2RY@b{yX+|hBQze zX`r;Uck4*wiJ!N7u8Dn)wDRRa&e_9Lwtbc%4OA!JKp3vMp+|vXFN6@F3^> z(ok9!)92bAKnQ6gT`345&Gz3}tdQ~BQb?96-(E0TM{WL<@(iHn1r>4hmxS7vAe)zJh>YhrSzL`HQkz_$)S`chn%Jb%Dpm^ z^$40SS{US9p6VB}9?sANs#8uNG`VtmG((d^DNPPJP2VZ^PBU3AqUmz_jB8q@()2=x zCQ$rl_7TH^0;0-x;8`zasB$Q!$|0-jkTIy*^+%Jn169|w3UcPB8^-nwRiHZA2TEt( z2N{|iN@;S)X?hh+ds~{UZ_zZLM)UjBke>BTh9(f2!fsV@XtEu6)^{1297<_&Xn=P( zTK0Tq;zj&rb&M9=8oP2XY)jb3O-)?;qBd?#kh8FctR173bNqTjJEd06AsU+G^k;m5 zRczO*g~KF-J6AO8l8}WpLC(#LMH)8atu5hX?N56q>Fg%}${UBs}{tN0&r+=pUNo)M9oK;XE2T&8B_Vk0yS3sAowx z^iW9|hMGM>*siNh{B3f7303N;uSvIEjl?(G48H)4JX8}R!>8Khykq?XZE~z%JKw14t`zI+fL|#tdx4pKtkTZaisu1kS~9HqT`bUOYQOo?SuC(&3J0P%V!X zZF1zp>@vG?zN25tK(cgmee?~qibp*32D)Y6(OT(;9SsMGy$|Vs znOU3I29u!6Ol)H+nS|eW5pHh1iEVrbTk+bZNF}!MtBz+`G{{+YMSaHS*BY<9|941# z1@vFnOJAFSFtN+NPMLmiV)I95CRUf*DY1W<8RXm_)Fw86;V%+<*d@-8zs!Ste!Yq1 zO%9W0ZGNd)O6_I{RC584#CYTR%IbeSbvROJl0e-Y%1>rHIY96dmH8f-N#y3g@E&??Az z;LiGtPnM+(BC$nphxB)1PGP< zVw0PYnVHxoeVri>u7X?#5`Wodn~dd%Kv+~Zu}yAvJP-8Ya z>T#PD^We8`={2ixJe+3ESvk+yl-Vv1sc`nV9=BN#($9nbK)v*}Z7nRll?PJxA6$Be zglV-^mGQ0_6N^3H8y;DPJCS*sLLA8u$31fN^=vHaRUPN`iYXgZ?0VUJVj?ZHn@Fb- zJEEl}$Ln=(A!_S$@AZ7DKrP>zYx`|)%p|yCk}*>c22EeGu=xnZ5%fLo0K&6r!VZwu z?2cxL{+!Bt&C2lR*Excxqe0HoamK0IE!IP-$u)M5`*UC)LN045OuCSPmUCUmNwzB*7^k_bW&(TrrFtCNWpP=I_a)%- zZaj(~UAzOyp1r+4@iE9JMVMe?UK2^Sh7W!DX62EjL2lF622ok+6y zDZN@0yKgiXLb1Z?*<TBx1dkR;*~_a5 z*}dD$O@*Aa+A3a_X3BnDOnau8OCkA#wQWNgA$uE}%Tgg_?@7#_YjiTo(R7*ny+V$* z2c$SM#&MfHbK6Xw&iREvq7_o``f5Tr$51C^2_YRbLRJvM$-g=@549ODIlrovvz!p* z)CpNi2y*I#tRVzBbwcip@&3h)xTUrXPWRf%Zt$C!BdRTVjY=L{W*p|ts(m;Vjd^> zFp)JprYpfm?iVfPAJW?L|9GK!kq}$D4UawmS#fib(S}2^hze`(6kQftJl;w>x<+K> zBBQ)QGTTCS9nTG*UNKulIwrYMWK-bYeSjM#(?z6vL^v;>tw!3*7TRKbv_78~NESso zweZr!AZN`cbx`4{g}pcP*zW)K)Pj8uF$E>MW|BYuqmxq+QfW_4c}*kPcn4Z3i?R%P zGT$6$PgmqTv&-})(&+fb-ivueMDQ+>zAxU>D@TRTe%S$8L#QEf|T!+c@G4g67FMosf7pTDUfT zv?JbRc?ZYIO8=xt$qoxE;^d|DF7%Z__UK2I&5#0%&q9>L9V{M{#`a)^KQWCP*bZrF zT&2;Wfok?^rlo3Gkh4}>bqIe;p`RJ5`r5@o&U1x!7s0F0{DDe6UCVZj_1(?jBvTsZ z2DG6e1wqa_=6dTEHX1dG9fOe~;DQdN8*!ghnt3#z=a`{Bw}7MJw#CrJdb~6zdDmKb zLoNL|qCeH#Ci(?I&fjS?OfbG~Zqyy2pP41MOW$t61*m-v)Bm0)DfiegMscO<6VE&= zZnYxrh*GnQsP;Z;51&Skw^tA^wIDf54^KS~+C!GLFQ$xjAi7?!rJ18_OuRgs8ixrY z`(a_67=NM#pG-`sY%j2&;5YW{x)ac7jiKs=(!RLUQ1eVeG$=UW?H9VBA z?y~o8JB**w(|`6z?k8h3m_=iB%7x>T#C|`=&;?5>zj<$|(`Y+XoyIHegPb>+LO#z_ z+MX-h$9(Gldk<~9iB3p2Tm)>vOu+x9pSHW@I^pUywVUMwDFW_Aj31Ug*NZ0!=0J>> zeW@2OaQeG1`&l0B(rA_L#0qmVVtZ9;>t5nk*c@3zARou z@a~p69&4^whva$x+#KguL^?D2&spl0gcQ2C$1_0N`hhw;Tz7mjybdX?QrEp&ztQ>Rk#>0YGs{|dSxhHo{nP<=X zcgmg9;Y4@5u1oHmP95Fhy4Ja~6-vM9jmw>&(Dry2NWnN<$4~*O_ZLwM|D4Cco= zEH4`Qt<&S>PXt`=fXN>V_?-iO{usal2O{bzYWhVZH=y}tN$ZTX>f&hR_xXAuC>mJ^ zVSlpFb}83IBR4^F7}Ya6CeCLpIh56r(&q|oFPlxI&~MM_)f{FzLDr3m5WN?n{aTsf z+4i~&mZ<(B%Q4gT`2xz^PoJ@G#es^H#!m;B(eO^C!AF0j&-!$N(eq<(pqt`6e^^i~kq*9zhx(5}R%&FzG2p#4a|r+*5;5LeqHVm$R znwuF!o?j8BdZxh#=<$ z#zNYA4cjo&k<*bCBP~6)oV5J;VPn2Q8)vX{UKnlqa$faoR>EJC$|;6BGn;u{ycu+# z?B_ykrMW^t7IW zqt$tmrkD>2U5;C4W6lj@(33qA(RT$o8|UFRN+=(QC%fXSw5qBL?-wI|OBk(>1FnygL0xoLlp^M*1oyM}T^wfZoO;8qZY{by<*j%b077Jg*t^lQ|Ba zyP){Sm`$b~voG@oI=dtHQ{LryQ+^Mc1S9aiLv^69oeqJvRCv2f(muQLGD=G}oO9kY z278_VNF#f#e_xd`L_7cQjKN;({}jQDq2Bo}t>-h&eEJGTT7qtX%}gUrdv1_qF!9$N z%ZumC8~wYFokq|d@+o1Tyk*P{rUNorHh;R#m?tPHUf}9TMwq|i?b7ZXd`~LSCUiBv z?w%M3`*glBdVNz2=gi>VdEHe&8kq!}b@;Aor!ePJE6B;?bZ!?!K%s(+V4S{iBk#!-j zE+%B(e$8f6G}{#Ny(z8@*&?oL)1o$HGa;Y$Rvn-Vwvsm~WVT_*4&}VM=)~#F^bEsx zbd00f4^2&%x*-P=928?%$&HaMddtbqv|67ycLEOtdU;+BH!Nw>X)m1n?sji1x{!?u zX=u)Y*QI1rT)dIBk~ma$og|4~|kXCqKv1qQUrSWgEH2W^p3FzDl zpeeeqSn1iNl~S~`G@f!-wZuH51(Sa_0nJXfBxl-XQ)og|32aj*D>=!c@lVWLX+=Ce|y> z|Jm!p4stVN#t>^?Z|U-IH9^VU#*Br+S^4?~fgVssK5^(F# zDseqwv^ADz-^@u4`(7l^L(-*|WM8QZUX$*czB27Eecmq82me1U>A%PmlVjKXj@DyNs9n0xek_ah z%j5535o(v&%4`AjMI=Ja^7ycbUT6FK$;bfExvVHe**h}GQRWF<5E<+!lc1U(BSRcz zVS{OU3s2+4lg!qLi{29%4j-@UH5cXGk&(pxjrVXsUz`#d1=`C_3h46(BcnlcS+gjv zdqmacLf+*AebzKG4umc3K{XR2swAM!o=xXSCF@5-?2JY#@?kzS5jDD0HuigHOk7<+!H3fZ<7h|CIE42_MMV}oNdkpwHIv?&+?i+hcBo(n2 z1ViHo#9jmy@)Ec&*^k9u5`U!R2Em#&u?-I1B)D&K>}3c4V2S6%UUBd?!OuRAz3Sjy zHg<7rql5R@*sigEIC!66&7Rn64&HBx4~sD!@vn`PJZxkC9(zOC9VuDqdlW~skVsb? zKU>@?jq_~VIVbiO^k-2<(KnAUr%1sT)1KnvGeK$~pS`4k-D4r522!)bu4_P9pwG)R zP%6$gmpS%!4p5HbuF+7bINNyk>befeRQc6BY!@IPl~~P#rp(3JGMb=w`NgMF`D}op z{}Xbh@}@ZjLysp>G2LhU*$y*Ay~2fV)8?(DUApiNx?1X!T(sbM|N2>PaWFTqO`r#y zS?gf=e7~6xa=w*R-)K2MztPZK{CqR

    Q>~1)Z}d-4bQ;O9)4Ai1sctgXrEq8*e5m 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 {5qZ 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 tP+-|>e8j|tcbxGsSSZ@82rk#4? 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 b4uP>o;xTyB>dErG(j_EVMp`F4c7X8zA$;~s literal 0 HcmV?d00001 diff --git a/ genplus-gx/genplus.txt b/ genplus-gx/genplus.txt new file mode 100644 index 0000000..29eb462 --- /dev/null +++ b/ genplus-gx/genplus.txt @@ -0,0 +1,359 @@ +×××-–—————————————————————————————————-———————————————————————————————————-××× + + ·gGGgø + —————— ·gg• gGee• gGGg ×× ——————————— + þg þ¨ þ¨ g × + ——— þg øg þEeeø þgggg gge·e• ggg•· þ ggg•· ——— + þgG gg þe þ¨ Ng þ· g¨ þi gg¨ + — ·gG ggg þg· þ gg þg g××Sg þg gSggg — + —————— ¨þggg¨ ¨gggg• þ g ¨g×××× ¨g þ× ¨gg ——— + ·•ggg ·•gg + ————————P —— L — U S ——————— + softdev.tehskeen.com + ø°º–––————————————————————————————————————————————————————————————————————×·. +°Ø¨–; -×× description ××- +·/ –––––———— –––––––––– ––—————––––––—— ——–––––– –––––————— + + Genesis Plus emulates the Sega's Genesis/Mega Drive system. It was + originally created by Charles MacDonald and ported to the Nintendo GameCube + by The "Genesis Plus" Team. It is an open source emulator and a community + project which aims to bring you blast processing into the past. + + Using this "emulator" you will be able to enjoy all of your classic 16bit + games in all of their glory. GenesisPlus has been converted from a PC + based platform to run on the GameCube's proprietary PPC Gekko processor + and features customized code to give you the best gaming experience + possible. + + This port is based on Genesis Plus 1.2 sourcecode but it's also featuring a lot of + modifications & additions to improve games compatibility, emulation accuracy + and various peripheral supports. See changelog.txt for the whole history. + + ... Features ... + + • accurate & full speed Sega Genesis emulation + • Stereo Sound (@48 kHz) + • PAL Megadrive (50Hz) timings support + • 1~4 Players support + • 6-Buttons Joypad support + • Sega TeamPlayer & EA 4-Way Play support + • J-Cart support (autodetected) + • partial Sega Menacer support (autodetected for Menacer 6-in-1 game) + • Freeze State support + • SRAM support + • serial EEPROM support (Megaman Willy Wars, NBA JAM, Wonderboy in Monsterworld...) + • Banked ROM support (Super Street Fighter 2) + • Banked SRAM support (Phantasy Star 4) + • Game Genie Codes support + • ROM Information Screen + • Zipped Roms support + • Interleaved (.smd) Roms support + • Load game from SDCARD or DVD (4.7GB DVD support for Wii users) + • Load/Save SRAM and FreezeState files (compressed) from/to Memory Card & SDCARD + • SRAM autoload + • SDLOAD or IPL reboot option + + + + ø°º–––————————————————————————————————————————————————————————————————————×·. +°Ø¨–; ×-× installation ×-× +·/ –––––———— –––––––––– ––—————––––––—— ——–––––– –––––————— + +The emulator is provided as a .dol which is a Gamecube Executable. You only need to load and run +the DOL on your GC or WII (Gamecube controller is needed) using various methods (Bootable DVD, SDLOAD,...) +If you have no idea on how to load&run a DOL, please go here on follow the available guides: +http://modyawii.tehskeen.com/ (Booting Homebrew Section) + +SDCARD users should create a directory named "genplus" at the root of the SDCARD. +Inside this directory, you have to create then a subdirectory named "roms" to put all your roms. +You should also create a subdirectory named "saves" where SRAM and FreezeState files will be saved. + +If using a DVD to load the roms, the format of the image you burned must be ISO9960 +or you won't be able to read from it. The maximal readable size is 1.35GB for Gamecube users +and 4.7GB for Wii users. + +IMPORTANT: When putting roms either on DVD or SDCARD, it is recommended to use subdirectories as there is + a limit of 1000 files per directory. + + + + ø°º–––————————————————————————————————————————————————————————————————————×·. +°Ø¨–; -×× usage -×× +·/ –––––———— –––––––––– ––—————––––––—— ——–––––– –––––————— + + You'll start off with the main introduction screen and after pressing "A" + you will be at the main menu. Note that at anytime during gameplay you can + return to the main menu by tapping on that little Z button (you know, the + one on your controller). + + Pressing 'L + Z' Triggers during Gameplay will execute a "Soft Reset". + This should be like pressing the RESET button on a real Genesis. + This is needed by some games to unlock special features and by the X-Men + game to complete the "Mojo's Crunch" level. + + Pressing 'B' in any menu will get you back to the previous screen. + + Of course it's a menu so you have yourself a few things to choose from. + So here's a list and what they do. + + + PLAY GAME: Takes you into or back to the game. + ----------------------------------------------------------------------------------- + + + GAME INFOS: Shows basic ROM information + ----------------------------------------------------------------------------------- + + This screen shows some basic information for the loaded ROM. + Of note is the supports area at the bottom of the list. + Use Up/Down buttons or Analog Stick to scrolldown the screen. + If the ROM supports 6-button gamepads, they are automatically selected for you. + Otherwise, the standard 3-button pad is used. (This can also be forced in Joypad Config menu) + + + RESET GAME: Performs a soft-reset on the genesis virtual console + ----------------------------------------------------------------------------------- + + + LOAD NEW GAME: Let you load a new game from DVD or SDCARD + ----------------------------------------------------------------------------------- + + When entering the rom selection menu (DVD or SDCARD), following controls are used: + + . A button : load the selected file + . B button : go up one directory + . Z button : quit the file selection menu + . L/R triggers : go down/up one full page + . Left/Right buttons or Analog stick : scroll the selected entry's filename when it can't be full displayed + . Up/Down buttons or Analog stick : select previous/next file + + * Load from DVD: + **************** + + A DVD browser is displayed. Navigate and select your ROM from here. + IMPORTANT: Your DVD must be in ISO9660 format + + * Load from SDCARD: + ******************* + + A SDCARD browser is displayed. Navigate and select your ROM from here. + IMPORTANT: To load roms from SDCARD, you have to use a SDCARD adapter in MC SlotA + On the SDCARD, roms must be initially placed in /genplus/roms subdirectory + + In both cases, the maximum number of files per directory (DVD or SDCARD) is 1000. + It is *recommended* to use subdirectories. + + + EMULATOR OPTIONS: Let you configure various options + ----------------------------------------------------------------------------------- + + Misc Options: + ************* + + X and Y are to try to compensate for TVs with high overscan, or if + you just want to play on a smaller area. + + VDP Latency is used to be more accurate in term of VRAM write timing, + it is required by some games (Chaos Engine...) to be displayed properly + (OFF by default, automatically set when specific roms are detected) + + DMA Timing is used to be more accurate in term of DMA copy to V-RAM timing, + it is required by some games (Legend of Galahad...) to be displayed properly + (ON by default) + + ALT. timing let you modify the line rendering timing. This is used in some games + (Road Rash series, Legend of Galahad) which have single line display glitch + (OFF by default, automatically set when specific roms are detected) + + NOTE: These options are now automatically set when loading a game which need special timing fixes. + These fixes are also now automatically desactivated when the current game doesn't need them. + For your information, games that actually need special timings to run properly are: + .Legend of Galahad & Road Rash series (single line not rendered properly) + .Sesame Street Counting Cafe (don't boot) + .Chaos Engine/Soldiers of Fortune (graphic glitches when scrolling) + + CPU Mode let you force the CPU speed for the game: + * AUTO: orignal CPU speed is automatically detected + * NTSC: 60hz Genesis display + * PAL: 50Hz Genesis display + The game will automatically be be reloaded after you change this setting. + + REGION let you force the region setting for the game: + when changing region setting, some games may display different things but also may not load + if they have some internal region detection code. + * AUTO: orignal game region is automatically detected + * EUR (europe 50Hz), USA (usa 60Hz), JAPAN (japan 60Hz) or JAPAN_PAL (japan 50Hz) + The game will automatically be be reloaded after you change this setting. + + SRAM AUTOLOAD let you enable/disable automatic SRAM loading when starting a new game. + The detection order is: MCARD (SLOTA) > MCARD (SLOTB) > SDCARD (SLOTA) > SDCARD (SLOTB) + + + Sound Options: + ************** + + PSG VOLUME let you adjust the global volume level for the PSG output (0~200%) + FM Volume let you adjust the global volume level for the FM output (0~200%) + Default values depends on the current FM & PSG core and are automatically set when switching between cores. + + BOOST VOLUME let you modify the overall sound level (0~4x). + This could be useful when adjusting FM and PSG relative levels. + Setting those values too high may produce some bad effects. + + HQ YM2612 is only useful when selecting Gens FM core, in order to have the most accurate YM2612 emulation. + + FM CORE let you choose which YM2612 emulation core to use, both have specific issues with some games: + * GENS is the core used in Gens, a famous Genesis emulator for PC platforms + * MAME is the one used in MAME (DEFAULT) + + PSG CORE let you choose which PSG emulation core to use: + * MAME is the one used in MAME + * SMSP is the one developped by Maxim from smspower.org (DEFAULT) + + + + Configure Joypads: + ****************** + + Allows you to configure the joypads. + Here you can remap all 6 buttons, and adjust the Analog stick + sensitivity. A lower value is more sensitive. + + IMPORTANT: the Analog Stick is also used when emulating the Sega Menacer lightgun, + so you may want to reduce the sensibility when playing the Menacer 6-in-1 game + + + TYPE let you choose the type of the emulated Genesis gamepads (3-Buttons or 6-Buttons) + Genesis Plus automatically detects and set this option if the current game supports 6-Buttons but + you can also force use of 3-Buttons gamepads if you prefer. + + * 3BUTTONS: use classic Genesis controllers + * 6BUTTONS: use 6-Buttons Genesis controllers + + + PORTA and PORTB let you choose which type of device to be plugged in each two Genesis input ports: + + * GAMEPAD: single gamepad (3 or 6-buttons, see above) + * MULTITAP: multiplayer adapter (Sega Teamplayer or EA 4-Way Play) + * NONE: unplugged + + IMPORTANT: + + 1/ MULTITAP should only be plugged if the game is supporting one of the multiplayer adapter. + Actually, both Sega Teamplayer and EA 4-Way Play adapters are supported. + Games are usually supporting only one of the above adapters but Genesis Plus automatically detect + which one should be used. + + 3/ Most multiplayer games will work with MULTITAP plugged in PORTA but some of them require + a GAMEPAD to be plugged in PORTA and the MULTITAP to be plugged in PORTB. + + 4/ MULTITAP shouldn't be plugged in both ports since only games supporting more than 4 players + can take advantage of this configuration. As we only have 4 controllers max. on the Gamecube, + only the 4 first gamepads will effectively been seen as plugged. + + 5/ J-Cart games (Micromachines games, Pete Sampras games, Super Skidmarks) use a built-in adapter + to enable 2 additional gamepads to be plugged and are not compatible with any of the above adapters. + So, do not activate MULTITAP with those games, they are automatically detected by the system which + configure itself to enable up to 4 players support. + + 6/ Be sure that all controllers are correctly plugged when you switch on the console, otherwise, + they won't be detected. Also don't unplug any controllers or you will need to reboot the system. + + 7/ Changing Controller Type or Port settings will reset the current game. + + 8/ When the 6-in-1 Menacer game is detected, PORTA is forced to NONE and PORTB forced to MENACER, you + can not change those settings as long as you don't load another rom (previous settings will be restored) + + + + Game Genie Cheats: + ****************** + + Code entry for those of you into cheating :) + This screen lets you enter up to eight Game Genie codes. + Use the A key to select/release an entry + Use the B key to exit. + + + + MEMORY MANAGER: Let you managed SRAM and FreezeState files + ----------------------------------------------------------------------------------- + + . SRAM Manager: Let you load/save SRAM data from/to the selected device + . STATE Manager: Let you load/save FreezeState data from/to the selected device + + For each submenu, you can now choose the device type and location. + Be sure to set this according to your system configuration before saving/loading files. + + . Device: Let you choose the device to use: SDCARD or MCARD + . SLOT: Let you choose which MC slot to use for the device + + IMPORTANT: + + 1/ when using NGC Memory Card in SLOTA, some mounting errors may occur. In this case, + remove and insert the Memory Card again before trying to save/load anything. + + 2/ when using SDCARD, the directory /genplus/saves must exist + + 3/ for Wii users, please note that the SD slot can *NOT* be acceeded so use a SD-Adapter in a MC SLot + + + + STOP DVD MOTOR: Stop the DVD motor and the disc from spinning during playtime + ----------------------------------------------------------------------------------- + + + SYSTEM REBOOT: + ----------------------------------------------------------------------------------- + + For users of SDLoad or PSOLoad, you can call this to go back. + For others, this will reboot the system + + + + ø°º–––————————————————————————————————————————————————————————————————————×·. +°Ø¨–; ××- develloper notes ××- +·/ –––––———— –––––––––– ––—————––––––—— ——–––––– –––––————— + +According to the GNU status of this project, the sourcecode MUST be included in any binary releases you made. +To recompile the sourcecode, you will need to have installed: + . DevkitPPC environment + . libOGC last sources + +You also need to replace the gu_psasm.S file which is located in the /LIBBOGC directory (from the root of libogc source directory) +with the one included in this release and then recompile/reinstall libogc. + +If you have no idea on how to compile DOLs , please refer to this thread: +http://www.tehskeen.com/forums/showthread.php?t=2968. + + + ø°º–––————————————————————————————————————————————————————————————————————×·. +°Ø¨–; ××- credits ××- +·/ –––––———— –––––––––– ––—————––––––—— ——–––––– –––––————— + + coding - the "genesis plus team" + softdev + honkeykong + markcube + + additionnal code and support - eke-eke + + graphics - brakken + + documentation - softdev (chm) + brakken (user d0x) + eke-eke (rewrite and changelog updates) + + additional credits: + + • Stephane Dallongeville for the YM2612 core from his GENS project (http://gens.consolemul.com/) and + for making Gens opensource, which has been an unvaluable help while upgrading this emulator + • Maxim for his SN76489 core (http://www.smspower.org), already use ins SMSPlus + • People at SMSPower's and SpritesMind's forums (http://www.spritesmind.net) for their technical help + • Notaz for Picodrive's (Sega Genesis/MegaCD Emulator for GP2X) sourcecode from which + unlicensed games support and Virtua racing SVP faking has been taken. + + (see /doc for original credits) + + +×××-–—————————————————————————————————-———————————————————————————————————-××× diff --git a/ genplus-gx/gu_psasm.S b/ genplus-gx/gu_psasm.S new file mode 100644 index 0000000..b030e74 --- /dev/null +++ b/ genplus-gx/gu_psasm.S @@ -0,0 +1,694 @@ +#include + +#define A00_A01 fr0 +#define A02_A03 fr1 +#define A10_A11 fr2 +#define A12_A13 fr3 +#define A20_A21 fr4 +#define A22_A23 fr5 + +#define B00_B01 fr6 +#define B02_B03 fr7 +#define B10_B11 fr8 +#define B12_B13 fr9 +#define B20_B21 fr10 +#define B22_B23 fr11 + +#define D00_D01 fr12 +#define D02_D03 fr13 +#define D10_D11 fr14 +#define D12_D13 fr15 +#define D20_D21 fr2 +#define D22_D23 fr0 + +#define UNIT01 fr31 + +#define RET_REG fr1 +#define V1_XY fr2 +#define V1_Z fr3 +#define V2_XY fr4 +#define V2_Z fr5 +#define D1_XY fr6 +#define D1_Z fr7 +#define D2_XY fr8 +#define D2_Z fr9 +#define W1_XY fr10 +#define W1_Z fr11 +#define W2_XY fr12 +#define W2_Z fr13 + + .globl ps_guMtxConcat + //r3 = mtxA, r4 = mtxB, r5 = mtxAB +ps_guMtxConcat: + stwu r1,-64(r1) + psq_l A00_A01,0(r3),0,0 + stfd fr14,8(r1) + psq_l B00_B01,0(r4),0,0 + lis r6,Unit01@ha + psq_l B02_B03,8(r4),0,0 + stfd fr15,16(r1) + addi 6,6,Unit01@l + stfd fr31,40(r1) + psq_l B10_B11,16(r4),0,0 + ps_muls0 D00_D01,B00_B01,A00_A01 + psq_l A10_A11,16(r3),0,0 + ps_muls0 D02_D03,B02_B03,A00_A01 + psq_l UNIT01,0(r6),0,0 + ps_muls0 D10_D11,B00_B01,A10_A11 + psq_l B12_B13,24(r4),0,0 + ps_muls0 D12_D13,B02_B03,A10_A11 + psq_l A02_A03,8(r3),0,0 + ps_madds1 D00_D01,B10_B11,A00_A01,D00_D01 + psq_l A12_A13,24(r3),0,0 + ps_madds1 D10_D11,B10_B11,A10_A11,D10_D11 + psq_l B20_B21,32(r4),0,0 + ps_madds1 D02_D03,B12_B13,A00_A01,D02_D03 + psq_l B22_B23,40(r4),0,0 + ps_madds1 D12_D13,B12_B13,A10_A11,D12_D13 + psq_l A20_A21,32(r3),0,0 + psq_l A22_A23,40(r3),0,0 + ps_madds0 D00_D01,B20_B21,A02_A03,D00_D01 + ps_madds0 D02_D03,B22_B23,A02_A03,D02_D03 + ps_madds0 D10_D11,B20_B21,A12_A13,D10_D11 + ps_madds0 D12_D13,B22_B23,A12_A13,D12_D13 + psq_st D00_D01,0(r5),0,0 + ps_muls0 D20_D21,B00_B01,A20_A21 + ps_madds1 D02_D03,UNIT01,A02_A03,D02_D03 + ps_muls0 D22_D23,B02_B03,A20_A21 + psq_st D10_D11,16(r5),0,0 + ps_madds1 D12_D13,UNIT01,A12_A13,D12_D13 + psq_st D02_D03,8(r5),0,0 + ps_madds1 D20_D21,B10_B11,A20_A21,D20_D21 + ps_madds1 D22_D23,B12_B13,A20_A21,D22_D23 + ps_madds0 D20_D21,B20_B21,A22_A23,D20_D21 + lfd fr14,8(r1) + psq_st D12_D13,24(r5),0,0 + ps_madds0 D22_D23,B22_B23,A22_A23,D22_D23 + psq_st D20_D21,32(r5),0,0 + ps_madds1 D22_D23,UNIT01,A22_A23,D22_D23 + lfd fr15,16(r1) + psq_st D22_D23,40(r5),0,0 + lfd fr31,40(r1) + addi r1,r1,64 + blr + + .globl ps_guMtxIdentity + //r3 == mtx +ps_guMtxIdentity: + lis r9,Unit01@ha + addi r9,r9,Unit01@l + lfs fr0,0(r9) + lfs fr1,4(r9) + psq_st fr0,8(r3),0,0 + ps_merge01 fr2,fr0,fr1 + psq_st fr0,24(r3),0,0 + ps_merge10 fr3,fr1,fr0 + psq_st fr0,32(r3),0,0 + psq_st fr2,16(r3),0,0 + psq_st fr3,0(r3),0,0 + psq_st fr3,40(r3),0,0 + blr + + .globl ps_guMtxCopy + //r3 = src, r4 = dst +ps_guMtxCopy: + psq_l fr0,0(r3),0,0 + psq_st fr0,0(r4),0,0 + psq_l fr1,8(r3),0,0 + psq_st fr1,8(r4),0,0 + psq_l fr2,16(r3),0,0 + psq_st fr2,16(r4),0,0 + psq_l fr3,24(r3),0,0 + psq_st fr3,24(r4),0,0 + psq_l fr4,32(r3),0,0 + psq_st fr4,32(r4),0,0 + psq_l fr5,40(r3),0,0 + psq_st fr5,40(r4),0,0 + blr + + .globl ps_guMtxTranspose + //r3 = src, r4 = xpose +ps_guMtxTranspose: + lis r9,Unit01@ha + addi r9,r9,Unit01@l + lfs fr0,0(r9) + psq_l fr1,0(r3),0,0 + stfs fr0,44(r4) + psq_l fr2,16(r3),0,0 + ps_merge00 fr5,fr1,fr2 + psq_l fr3,8(r3),1,0 + ps_merge11 fr6,fr1,fr2 + psq_l fr4,24(r3),1,0 + psq_st fr5,0(r4),0,0 + psq_l fr1,32(r3),0,0 + ps_merge00 fr7,fr3,fr4 + psq_st fr6,16(r4),0,0 + ps_merge00 fr5,fr1,fr0 + psq_st fr7,32(r4),0,0 + ps_merge10 fr6,fr1,fr0 + psq_st fr5,8(r4),0,0 + lfs fr3,40(r3) + psq_st fr6,24(r4),0,0 + stfs fr3,40(r4) + blr + + .globl ps_guMtxInverse + //r3 = src, r4 = inv +ps_guMtxInverse: + psq_l fr0,0(r3),1,0 + psq_l fr1,4(r3),0,0 + psq_l fr2,16(r3),1,0 + ps_merge10 fr6,fr1,fr0 + psq_l fr3,20(r3),0,0 + psq_l fr4,32(r3),1,0 + ps_merge10 fr7,fr3,fr2 + psq_l fr5,36(r3),0,0 + ps_mul fr11,fr3,fr6 + ps_mul fr13,fr5,fr7 + ps_merge10 fr8,fr5,fr4 + ps_msub fr11,fr1,fr7,fr11 + ps_mul fr12,fr1,fr8 + ps_msub fr13,fr3,fr8,fr13 + ps_mul fr10,fr3,fr4 + ps_msub fr12,fr5,fr6,fr12 + ps_mul fr9,fr0,fr5 + ps_mul fr8,fr1,fr2 + ps_sub fr6,fr6,fr6 + ps_msub fr10,fr2,fr5,fr10 + ps_mul fr7,fr0,fr13 + ps_msub fr9,fr1,fr4,fr9 + ps_madd fr7,fr2,fr12,fr7 + ps_msub fr8,fr0,fr3,fr8 + ps_madd fr7,fr4,fr11,fr7 + ps_cmpo0 cr0,fr7,fr6 + bne 0f + li r3,0 + blr + +0: fres fr0,fr7 + ps_add fr6,fr0,fr0 + ps_mul fr5,fr0,fr0 + ps_nmsub fr0,fr7,fr5,fr6 + lfs fr1,12(r3) + ps_muls0 fr13,fr13,fr0 + lfs fr2,28(r3) + ps_muls0 fr12,fr12,fr0 + lfs fr3,44(r3) + ps_muls0 fr11,fr11,fr0 + ps_merge00 fr5,fr13,fr12 + ps_muls0 fr10,fr10,fr0 + ps_merge11 fr4,fr13,fr12 + ps_muls0 fr9,fr9,fr0 + psq_st fr5,0(r4),0,0 + ps_mul fr6,fr13,fr1 + psq_st fr4,16(r4),0,0 + ps_muls0 fr8,fr8,fr0 + ps_madd fr6,fr12,fr2,fr6 + psq_st fr10,32(r4),1,0 + ps_nmadd fr6,fr11,fr3,fr6 + psq_st fr9,36(r4),1,0 + ps_mul fr7,fr10,fr1 + ps_merge00 fr5,fr11,fr6 + psq_st fr8,40(r4),1,0 + ps_merge11 fr4,fr11,fr6 + psq_st fr5,8(r4),0,0 + ps_madd fr7,fr9,fr2,fr7 + psq_st fr4,24(r4),0,0 + ps_nmadd fr7,fr8,fr3,fr7 + li r3,1 + psq_st fr7,44(r4),1,0 + blr + + .globl ps_guMtxInvXpos + //r3 = src, r4 = invx +ps_guMtxInvXpos: + psq_l fr0, 0(r3), 1, 0 + psq_l fr1, 4(r3), 0, 0 + psq_l fr2, 16(r3), 1, 0 + ps_merge10 fr6, fr1, fr0 + psq_l fr3, 20(r3), 0, 0 + psq_l fr4, 32(r3), 1, 0 + ps_merge10 fr7, fr3, fr2 + psq_l fr5, 36(r3), 0, 0 + ps_mul fr11, fr3, fr6 + ps_merge10 fr8, fr5, fr4 + ps_mul fr13, fr5, fr7 + ps_msub fr11, fr1, fr7, fr11 + ps_mul fr12, fr1, fr8 + ps_msub fr13, fr3, fr8, fr13 + ps_msub fr12, fr5, fr6, fr12 + ps_mul fr10, fr3, fr4 + ps_mul fr9, fr0, fr5 + ps_mul fr8, fr1, fr2 + ps_msub fr10, fr2, fr5, fr10 + ps_msub fr9, fr1, fr4, fr9 + ps_msub fr8, fr0, fr3, fr8 + ps_mul fr7, fr0, fr13 + ps_sub fr1, fr1, fr1 + ps_madd fr7, fr2, fr12, fr7 + ps_madd fr7, fr4, fr11, fr7 + ps_cmpo0 cr0, fr7, fr1 + bne 0f + addi r3, 0, 0 + blr + +0: fres fr0, fr7 + psq_st fr1, 12(r4), 1, 0 + ps_add fr6, fr0, fr0 + ps_mul fr5, fr0, fr0 + psq_st fr1, 28(r4), 1, 0 + ps_nmsub fr0, fr7, fr5, fr6 + psq_st fr1, 44(r4), 1, 0 + ps_muls0 fr13, fr13, fr0 + ps_muls0 fr12, fr12, fr0 + ps_muls0 fr11, fr11, fr0 + psq_st fr13, 0(r4), 0, 0 + psq_st fr12, 16(r4), 0, 0 + ps_muls0 fr10, fr10, fr0 + ps_muls0 fr9, fr9, fr0 + psq_st fr11, 32(r4), 0, 0 + psq_st fr10, 8(r4), 1, 0 + ps_muls0 fr8, fr8, fr0 + addi r3, 0, 1 + psq_st fr9, 24(r4), 1, 0 + psq_st fr8, 40(r4), 1, 0 + blr + + .globl ps_guMtxScale + //r3 = mtx,fr1 = xS,fr2 = yS,fr3 = zS +ps_guMtxScale: + lis r9,Unit01@ha + addi r9,r9,Unit01@l + lfs fr0,0(r9) + stfs fr1,0(r3) + psq_st fr0,4(r3),0,0 + psq_st fr0,12(r3),0,0 + stfs fr2,20(r3) + psq_st fr0,24(r3),0,0 + psq_st fr0,32(r3),0,0 + stfs fr3,40(r3) + stfs fr0,44(r3) + blr + + .globl ps_guMtxScaleApply + //r3 = src,r4 = dst,fr1 = xS,fr2 = yS,fr3 = zS +ps_guMtxScaleApply: + psq_l fr4,0(r3),0,0 + psq_l fr5,8(r3),0,0 + ps_muls0 fr4,fr4,fr1 + psq_l fr6,16(r3),0,0 + ps_muls0 fr5,fr5,fr1 + psq_l fr7,24(r3),0,0 + ps_muls0 fr6,fr6,fr2 + psq_l fr8,32(r3),0,0 + psq_st fr4,0(r4),0,0 + ps_muls0 fr7,fr7,fr2 + psq_l fr2,40(r3),0,0 + psq_st fr5,8(r4),0,0 + ps_muls0 fr8,fr8,fr3 + psq_st fr6,16(r4),0,0 + ps_muls0 fr2,fr2,fr3 + psq_st fr7,24(r4),0,0 + psq_st fr8,32(r4),0,0 + psq_st fr2,40(r4),0,0 + blr + + .globl ps_guMtxTrans + //r3 = mtx,fr1 = xT,fr2 = yT,fr3 = zT +ps_guMtxTrans: + lis r9,Unit01@ha + addi r9,r9,Unit01@l + lfs fr4,0(r9) + lfs fr5,4(r9) + stfs fr1,12(r3) + stfs fr2,28(r3) + psq_st fr4,4(r3),0,0 + psq_st fr4,32(r3),0,0 + stfs fr5,20(r3) + stfs fr4,24(r3) + stfs fr5,40(r3) + stfs fr3,44(r3) + stfs fr5,0(r3) + blr + + .globl ps_guMtxTransApply + //r3 = src,r4 = dst,fr1 = xT,fr2 = yT,fr3 = zT +ps_guMtxTransApply: + psq_l fr4,0(r3),0,0 + psq_l fr5,8(r3),0,0 + psq_l fr7,24(r3),0,0 + psq_l fr8,40(r3),0,0 + ps_sum1 fr5,fr1,fr5,fr5 + psq_l fr6,16(r3),0,0 + ps_sum1 fr7,fr2,fr7,fr7 + psq_l fr9,32(r3),0,0 + ps_sum1 fr8,fr3,fr8,fr8 + psq_st fr4,0(r4),0,0 + psq_st fr5,8(r4),0,0 + psq_st fr6,16(r4),0,0 + psq_st fr7,24(r4),0,0 + psq_st fr9,32(r4),0,0 + psq_st fr8,40(r4),0,0 + blr + + .globl ps_guMtxRotTrig + //r3 = mt,r4 = axis,fr1 = sinA,fr2 = cosA +ps_guMtxRotTrig: + lis r9,Unit01@ha + addi r9,r9,Unit01@l + lfs fr3,0(r9) + lfs fr4,4(r9) + ori r4,r4,0x20 + ps_neg fr5,fr1 + cmplwi r4,'x' + beq 0f + cmplwi r4,'y' + beq 1f + cmplwi r4,'z' + beq 2f + b 3f +0: + psq_st fr4,0(r3),1,0 + psq_st fr3,4(r3),0,0 + ps_merge00 fr6,fr1,fr2 + psq_st fr3,12(r3),0,0 + ps_merge00 fr7,fr2,fr5 + psq_st fr3,28(r3),0,0 + psq_st fr3,44(r3),1,0 + psq_st fr6,36(r3),0,0 + psq_st fr7,20(r3),0,0 + b 3f +1: + ps_merge00 fr6,fr2,fr3 + ps_merge00 fr7,fr3,fr4 + psq_st fr3,24(r3),0,0 + psq_st fr6,0(r3),0,0 + ps_merge00 fr8,fr5,fr3 + ps_merge00 fr9,fr1,fr3 + psq_st fr6,40(r3),0,0 + psq_st fr7,16(r3),0,0 + psq_st fr9,8(r3),0,0 + psq_st fr8,32(r3),0,0 + b 3f +2: + psq_st fr3,8(r3),0,0 + ps_merge00 fr6,fr1,fr2 + ps_merge00 fr8,fr2,fr5 + psq_st fr3,24(r3),0,0 + psq_st fr3,32(r3),0,0 + ps_merge00 fr7,fr4,fr3 + psq_st fr6,16(r3),0,0 + psq_st fr8,0(r3),0,0 + psq_st fr7,40(r3),0,0 +3: + blr + + .globl ps_guMtxReflect + //r3 = mtx,r4 = vec1,r5 = vec2 +ps_guMtxReflect: + lis r9,Unit01@ha + addi r9,r9,Unit01@l + lfs fr0,4(r9) + psq_l fr1,8(r5),1,0 + psq_l fr2,0(r5),0,0 + psq_l fr3,0(r4),0,0 + ps_nmadd fr5,fr1,fr0,fr1 + psq_l fr4,8(r4),1,0 + ps_nmadd fr6,fr2,fr0,fr2 + ps_muls0 fr7,fr2,fr5 + ps_mul fr8,fr6,fr3 + ps_muls0 fr9,fr2,fr6 + ps_sum0 fr8,fr8,fr8,fr8 + ps_muls1 fr10,fr2,fr6 + psq_st fr7,32(r3),0,0 + ps_sum0 fr2,fr2,fr2,fr0 + ps_nmadd fr8,fr5,fr4,fr8 + ps_sum1 fr10,fr0,fr10,fr10 + psq_st fr9,0(r3),0,0 + ps_muls0 fr11,fr2,fr8 + ps_merge00 fr12,fr5,fr8 + psq_st fr10,16(r3),0,0 + ps_merge00 fr13,fr7,fr11 + ps_muls0 fr12,fr12,fr1 + ps_merge11 fr11,fr7,fr11 + psq_st fr13,8(r3),0,0 + ps_sum0 fr12,fr12,fr12,fr0 + psq_st fr11,24(r3),0,0 + psq_st fr12,40(r3),0,0 + blr + + .globl ps_guVecAdd + //r3 = v1,r4 = v2,r5 = dst +ps_guVecAdd: + psq_l V1_XY,0(r3),0,0 + psq_l V2_XY,0(r4),0,0 + ps_add D1_XY,V1_XY,V2_XY + psq_st D1_XY,0(r5),0,0 + psq_l V1_Z,8(r3),1,0 + psq_l V2_Z,8(r4),1,0 + ps_add D1_Z,V1_Z,V2_Z + psq_st D1_Z,8(r5),1,0 + blr + + .globl ps_guVecSub + //r3 = v1,r4 = v2,r5 = dst +ps_guVecSub: + psq_l V1_XY,0(r3),0,0 + psq_l V2_XY,0(r4),0,0 + ps_sub D1_XY,V1_XY,V2_XY + psq_st D1_XY,0(r5),0,0 + psq_l V1_Z,8(r3),1,0 + psq_l V2_Z,8(r4),1,0 + ps_sub D1_Z,V1_Z,V2_Z + psq_st D1_Z,8(r5),1,0 + blr + + .globl ps_guVecScale + //r3 = src,r4 = dst,fr1 = S +ps_guVecScale: + psq_l fr2,0(r3),0,0 + psq_l fr3,8(r3),1,0 + ps_muls0 fr4,fr2,fr1 + psq_st fr4,0(r4),0,0 + ps_muls0 fr4,fr3,fr1 + psq_st fr4,8(r4),1,0 + blr + + .globl ps_guVecNormalize + //r3 = v +ps_guVecNormalize: + lis r9,NrmData@ha + addi r9,r9,NrmData@l + lfs fr0,0(r9) + lfs fr1,4(r9) + psq_l fr2,0(r3),0,0 + ps_mul fr4,fr2,fr2 + psq_l fr3,8(r3),1,0 + ps_madd fr5,fr3,fr3,fr4 + ps_sum0 fr6,fr5,fr3,fr4 + frsqrte fr7,fr6 + fmuls fr8,fr7,fr7 + fmuls fr9,fr7,fr0 + fnmsubs fr8,fr8,fr6,fr1 + fmuls fr7,fr8,fr9 + ps_muls0 fr2,fr2,fr7 + psq_st fr2,0(r3),0,0 + ps_muls0 fr3,fr3,fr7 + psq_st fr3,8(r3),1,0 + blr + + .globl ps_guVecCross + //r3 = v1,r4 = v2,r5 = v12 +ps_guVecCross: + psq_l fr1,0(r4),0,0 + lfs fr2,8(r3) + psq_l fr0,0(r3),0,0 + ps_merge10 fr6,fr1,fr1 + lfs fr3,8(r4) + ps_mul fr4,fr1,fr2 + ps_muls0 fr7,fr1,fr0 + ps_msub fr5,fr0,fr3,fr4 + ps_msub fr8,fr0,fr6,fr7 + ps_merge11 fr9,fr5,fr5 + ps_merge01 fr10,fr5,fr8 + psq_st fr9,0(r5),1,0 + ps_neg fr10,fr10 + psq_st fr10,4(r5),0,0 + blr + + .globl ps_guVecDotProduct + //r3 = vec1,r4 = vec2 +ps_guVecDotProduct: + psq_l fr2,4(r3),0,0 + psq_l fr3,4(r4),0,0 + ps_mul fr2,fr2,fr3 + psq_l fr5,0(r3),0,0 + psq_l fr4,0(r4),0,0 + ps_madd fr3,fr5,fr4,fr2 + ps_sum0 fr1,fr3,fr2,fr2 + blr + + .globl ps_guVecMultiply +ps_guVecMultiply: + psq_l fr0,0(r4),0,0 + psq_l fr2,0(r3),0,0 + psq_l fr1,8(r4),1,0 + ps_mul fr4,fr2,fr0 + psq_l fr3,8(r3),0,0 + ps_madd fr5,fr3,fr1,fr4 + psq_l fr8,16(r3),0,0 + ps_sum0 fr6,fr5,fr6,fr5 + psq_l fr9,24(r3),0,0 + ps_mul fr10,fr8,fr0 + psq_st fr6,0(r5),1,0 + ps_madd fr11,fr9,fr1,fr10 + psq_l fr2,32(r3),0,0 + ps_sum0 fr12,fr11,fr12,fr11 + psq_l fr3,40(r3),0,0 + ps_mul fr4,fr2,fr0 + psq_st fr12,4(r5),1,0 + ps_madd fr5,fr3,fr1,fr4 + ps_sum0 fr6,fr5,fr6,fr5 + psq_st fr6,8(r5),1,0 + blr + + .globl ps_guVecMultiplySR + // r3 = mt, r4 = src, r5 = dst +ps_guVecMultiplySR: + psq_l fr0,0(r3),0,0 // m[0][0], m[0][1] GQR0 = 0 + // fp6 - x y + psq_l fr6,0(r4),0,0 + psq_l fr2,16(r3),0,0 // m[1][0], m[1][1] + // fp8 = m00x m01y // next X + ps_mul fr8,fr0,fr6 + psq_l fr4,32(r3),0,0 // m[2][0], m[2][1] + // fp10 = m10x m11y // next Y + ps_mul fr10,fr2,fr6 + psq_l fr7,8(r4),1,0 // fp7 - z,1.0 + // fp12 = m20x m21y // next Z + ps_mul fr12,fr4,fr6 // YYY last FP6 usage + psq_l fr3,24(r3),0,0 // m[1][2], m[1][3] + ps_sum0 fr8,fr8,fr8,fr8 + psq_l fr5,40(r3),0,0 // m[2][2], m[2][3] + ps_sum0 fr10,fr10,fr10,fr10 + psq_l fr1,8(r3),0,0 // m[0][2], m[0][3] + ps_sum0 fr12,fr12,fr12,fr12 + ps_madd fr9,fr1,fr7,fr8 + psq_st fr9,0(r5),1,0 // store X + ps_madd fr11,fr3,fr7,fr10 + psq_st fr11,4(r5),1,0 // store Y + ps_madd fr13,fr5,fr7,fr12 + psq_st fr13,8(r5),1,0 // sore Z + blr + + .globl ps_guQuatAdd + //r3 = a, r4 = b, r5 = ab +ps_guQuatAdd: + psq_l fr0,0(r3),0,0 + psq_l fr1,0(r4),0,0 + ps_add fr1,fr0,fr1 + psq_st fr1,0(r5),0,0 + psq_l fr0,8(r3),0,0 + psq_l fr1,8(r4),0,0 + ps_add fr1,fr0,fr1 + psq_st fr1,8(r5),0,0 + blr + + .globl ps_guQuatSub + //r3 = a, r4 = b, r5 = ab +ps_guQuatSub: + psq_l fr0,0(r3),0,0 + psq_l fr1,0(r4),0,0 + ps_sub fr1,fr0,fr1 + psq_st fr1,0(r5),0,0 + psq_l fr0,8(r3),0,0 + psq_l fr1,8(r4),0,0 + ps_sub fr1,fr0,fr1 + psq_st fr1,8(r5),0,0 + blr + + .globl ps_guQuatMultiply + //r3 = a, r4 = b, r5 = ab +ps_guQuatMultiply: + psq_l fr0,0(r3),0,0 + psq_l fr1,8(r3),0,0 + psq_l fr2,0(r4),0,0 + ps_neg fr4,fr0 + psq_l fr3,8(r4),0,0 + ps_neg fr5,fr1 + ps_merge01 fr6,fr4,fr0 + ps_muls0 fr8,fr1,fr2 + ps_muls0 fr9,fr4,fr2 + ps_merge01 fr7,fr5,fr1 + ps_muls1 fr11,fr6,fr2 + ps_madds0 fr8,fr6,fr3,fr8 + ps_muls1 fr10,fr7,fr2 + ps_madds0 fr9,fr7,fr3,fr9 + ps_madds1 fr11,fr5,fr3,fr11 + ps_merge10 fr8,fr8,fr8 + ps_madds1 fr10,fr0,fr3,fr10 + ps_merge10 fr9,fr9,fr9 + ps_add fr8,fr8,fr8 + psq_st fr8,0(r5),0,0 + ps_sub fr9,fr9,fr9 + psq_st fr9,8(r5),0,0 + blr + + .globl ps_quQuatScale + //r3 = q,r4 = r, fr1 = scale +ps_guQuatScale: + psq_l fr4,0(r3),0,0 + psq_l fr5,8(r3),0,0 + ps_muls0 fr4,fr4,fr1 + psq_st fr4,0(r4),0,0 + ps_muls0 fr5,fr5,fr1 + psq_st fr5,8(r4),0,0 + blr + + .globl ps_guQuatDotProduct + //r3 = p, r4 = q ; fr1 = res +ps_guQuatDotProduct: + psq_l fr2,0(r3),0,0 + psq_l fr4,0(r4),0,0 + ps_mul fr1,fr2,fr4 + psq_l fr3,8(r3),0,0 + psq_l fr5,8(r4),0,0 + ps_madd fr1,fr3,fr5,fr1 + ps_sum0 fr1,fr1,fr1,fr1 + blr + + .globl ps_guQuatNormalize + //r3 = src, r4 = unit +ps_guQuatNormalize: + lis r9,NrmData@ha + addi r9,r9,NrmData@l + lfs fr9,0(r9) + lfs fr10,4(r9) + lis r9,QuatEpsilon@ha + lfs fr8,QuatEpsilon@l(r9) + psq_l fr0,0(r3),0,0 + ps_mul fr2,fr0,fr0 + psq_l fr1,8(r3),0,0 + ps_sub fr5,fr8,fr8 + ps_madd fr2,fr2,fr2,fr2 + frsqrte fr3,fr2 + ps_sub fr4,fr2,fr8 + fmul fr6,fr3,fr3 + fmul fr7,fr3,fr9 + fnmsub fr6,fr6,fr2,fr10 + fmul fr3,fr6,fr7 + ps_sel fr3,fr4,fr3,fr5 + ps_muls0 fr0,fr0,fr3 + ps_muls0 fr1,fr1,fr3 + psq_st fr0,0(r4),0,0 + psq_st fr1,8(r4),0,0 + blr + + .section .data + .balign 4 +QuatEpsilon: + .float 0.00001 +Unit01: + .float 0.0, 1.0 +NrmData: + .float 0.5, 3.0 diff --git a/ genplus-gx/pcutil/Makefile b/ genplus-gx/pcutil/Makefile new file mode 100644 index 0000000..18d05ce --- /dev/null +++ b/ genplus-gx/pcutil/Makefile @@ -0,0 +1,3 @@ +inject: inject.c + @gcc -O2 -Wall inject.c -o inject + @strip inject diff --git a/ genplus-gx/pcutil/inject.c b/ genplus-gx/pcutil/inject.c new file mode 100644 index 0000000..73098cb --- /dev/null +++ b/ genplus-gx/pcutil/inject.c @@ -0,0 +1,154 @@ +/**************************************************************************** + * Genesis Plus 1.04 + * + * Developer ROM injector. + * + * You should set ROMOFFSET to match ngc.c, as this will change as the + * binary expands and/or contracts. + ****************************************************************************/ +#include +#include +#include + +#define DOLHEADERLENGTH 256 // GC DOL Header Length +#define MAXTEXT 7 // Maximum 7 Text Sections +#define MAXDATA 11 // Maximum 11 Data Sections + +struct DOLHEADER{ + unsigned int textOffsets[MAXTEXT]; + unsigned int dataOffsets[MAXDATA]; + + unsigned int textAddress[MAXTEXT]; + unsigned int dataAddress[MAXDATA]; + + unsigned int textLength[MAXTEXT]; + unsigned int dataLength[MAXDATA]; + + unsigned int bssAddress; + unsigned int bssLength; + + unsigned int entryPoint; + unsigned int unused[MAXTEXT]; +} dolheader; + +unsigned int FLIP32(unsigned int b) +{ + unsigned int c; + + c = ( b & 0xff000000 ) >> 24; + c |= ( b & 0xff0000 ) >> 8; + c |= ( b & 0xff00 ) << 8; + c |= ( b & 0xff ) << 24; + + return c; +} + +#define ROMOFFSET 0x80600000 + +int main( int argc, char *argv[] ) +{ + FILE *infile, *outfile; + char *dol; + char *rom; + int dollen, romlen, outlen; + char *sig = "GENPLUSR"; + + if ( argc != 4 ) + { + printf("Usage : %s genplus.dol genesisrom.smd output.dol\n", argv[0]); + return 1; + } + + /*** Try to open all three handles ***/ + infile = fopen(argv[1], "rb"); + if ( infile == NULL ) + { + printf("Unable to open %s for reading\n", argv[1]); + return 1; + } + + /*** Allocate and load ***/ + fseek(infile, 0, SEEK_END); + dollen=ftell(infile); + fseek(infile, 0, SEEK_SET); + + dol = calloc(sizeof(char), dollen + 32); + + if ( fread(dol, 1, dollen, infile ) != dollen ) + { + free(dol); + printf("Error reading %s\n", argv[1]); + fclose(infile); + return 1; + } + + fclose(infile); + + infile = fopen(argv[2], "rb"); + if ( infile == NULL ) + { + printf("Unable to open %s for reading\n", argv[2]); + free(dol); + return 1; + } + + /*** Allocate and load ***/ + fseek( infile, 0, SEEK_END); + romlen = ftell(infile); + fseek( infile, 0, SEEK_SET); + rom = calloc( sizeof(char), romlen + 48 ); + + if ( fread(rom, 1, romlen, infile) != romlen ) + { + printf("Error reading %s\n", argv[2]); + fclose(infile); + free(rom); + free(dol); + return 1; + } + + fclose(infile); + + /*** Ok, now have both in memory - so update the dol header and get this file done -;) ***/ + memcpy(&dolheader, dol, DOLHEADERLENGTH); + + /*** Align to 32 bytes - no real reason, I just like it -;) ***/ + if ( dollen & 0x1f ) + dollen = ( dollen & ~0x1f ) + 0x20; + + dolheader.dataOffsets[1] = FLIP32(dollen); + dolheader.dataAddress[1] = FLIP32(ROMOFFSET); + dolheader.dataLength[1] = FLIP32(romlen + 32); + + /*** Move the updated header back ***/ + memcpy(dol, &dolheader, DOLHEADERLENGTH); + + outfile = fopen(argv[3], "wb"); + if ( outfile == NULL ) + { + printf("Unable to open %s for writing!\n", argv[3]); + free(rom); + free(dol); + } + + /*** Now simply update the files ***/ + fwrite(dol, 1, dollen, outfile); + fwrite(sig, 1, 8, outfile); + + outlen = FLIP32(romlen); + fwrite(&outlen, 1, 4, outfile); + + char align[32]; + memset(align, 0, 32); + fwrite(align, 1, 20, outfile); + fwrite(rom, 1, romlen, outfile); + fclose(outfile); + + free(dol); + free(rom); + + printf("Output file %s created successfully\n", argv[3]); + + return 0; +} + diff --git a/ genplus-gx/pcutil/inject.exe b/ genplus-gx/pcutil/inject.exe new file mode 100644 index 0000000000000000000000000000000000000000..7c428ba9b611765849fc1f4d7087493e7e82ad4c GIT binary patch literal 6656 zcmeHLeQaCR6~A%K>bCh}OCTF5yh;uby3Tw4_bFmbJlg?B~Sb*q;5| zrl{4@Io^1Bvd9=?h;E{}rf%5d*8Lww4IHd*p4EnLTlKw*oLbH92u_+%gsDaPw zE^wW9SL$(FVyTk;Jxk*B_|*M6MFAwa%_i794gIOACB0X<Xil3A@RZl6^SnoHFpCRmvQU&yNoF&5HJ zA=jL6kSGO)?e9NX3N5vKwiV>Xl9&oB(QA{kz!hkV(iW5O0GkLmIm#H@|}Bb^?IpSc|z z%AYPbEXhyh%GDy{Zp86Hd-`%*zMa|CqIuZh^Z*9dw@)p{*%N^QTHR@CSKd@ckG}_x z?7UWS{zKD>apg_Wc;TIY55)P)6)Q%ExVkTM6wi@DqrHg30@|D@ofTk{#{ZNQ-i!VkD3c% z$wWs+-X4Q&(^a`v6;njEfTZBJ8e!w^Z1mqC1F(H7=Bc}JU_{)gtLB7nA`6d#t%tu4 zQA1G=9%0v|cr?`+W3(P(Wr*{$(pBJQ!?#)Zf(hhS5zpxtnZn18`EKFuG?yheO~`wB z*i<@;VgH(hh_nl{DxRb0e1zIlRNhXYQ{AYY#r-yC_xlWqc0xp}t3kkOht&!rsX_Xj z;8&53^^d5ezr1l9PDeH=SEG}Y@t~k=G;2TnJ8vv_LHC{P!$R$8Fiwtg6Uk^wpiqtz ztF#eT?WrWUiX0`$4Wi>4e-hTIK)MzSq>vVx5D+pvRMLM7#e&1+mGyJ#OtcPB@{Wu= zasB-;LwFLYB?VobG_kEmVOzV0J4#YkrWdelaX2mxD@VK(8+!9O4vsW&QKQ_u%CUt z&WigzU8c8fb+=J1h@LkUe4Rdrj{lXUp%2@K^zOm?$EEj|Na`o(PYFS=vS>Y%Z%(6u z69GH%M&n6BV;3V+7lxMl8QurRMC)oSm`}^qbg=Rll)23NB3<@<5{4WQ`n6AZ-=O;oRxZDrd(y8`5%I{WnL90}{`PTy zFI-Ef_via7)BRn9zr|GO{WK9oMWe~8&BpX)WzIghm5T0zwvty;(HS>goVfiI+L+#c z(&gi=RyKGWba+hBnZj5qvV3}5!G#^Y#eGNbJk=PPUGYm$NB$JOZ*ychJ`dU#E)1Q$ zf)gG5kWAx^NLG=a8*w&C3mqR_&8H0LxCcSKdWF=Q^u96un@r-D-pBjC+;)6s3_5BN z#U8sLo8r>!fkzzeLnGp|jTng(yu~BWj)*6S91)+VNfDEYVF*UVAL!guI`>>+lygt( z+?RB2Dlx{nXLNEnF%D7@M-%Vxc`Px(=kdh5e150ol^Z63c@%L14JBPZ)@o%uhejM$ ztO-51Bz7OJKlZ&Dv1`kgu}o8V7~BPAMCD3nOCbE{#Sxn^RcY08JYq9hDy%GF#p#bM zqs3}@6XCYCz?otzOIQTN)>fgGZzRN4nP`PvX%j|l7C25TwsmUxW{48?T(O=Xpkmvo z%qbIVM)BSE#gthnxL|C2qW{ijEZA}64?KrTtQ!>1ni8XrFPIO~)R$8Bccb*>tjx=1d7F^IARBHccqkA}>$Bti1?3*~^c4w{jWXp@IHI3zZ(9 zqB**P)zCaWRec_~GO3KICe><8PePyfhYD3JLqV3RVky<7Di&fgsiFy!F+pEo(Ug_? z?IUoOOK$8tJO5dGwV$dh_n<^|d_tLLNPtM{mqqzb=n1%%g=o zx-yS8<NXmcK2pGTMF(Uv@#<zhz(=?g_J%`&p4xDaTL?ttU_>U#N*3y5Vki^{2_ebp_WHZ96#oI*{mxFGB*+0F z5S096&aubd3n)NkpJ6d+sY~S0wr)K8^yS9T3JBK%{cZ9p0A;}$- zLp58%-p3`Op+TTI;8_bDhuG|BYi`^lHdV8#@V!-$dj*dZ(YXa@I4p%^Z@@2fRE6(= z%i7wz@Ym&Xac~9v9&guO-VOEl+yyT+x|bTbsdX{7U6LE+K+i5`kJKovbpl-{gz=~Q z4OdqSYZ?U0r&}-9)+PU=IGbV62XlD!ZH!Ik&`a7n*0dWxp#nMpKEP2xcANly8gLFU z2ABlQ0A>LUz6t?l00FQLP!DJVv;g)4Isn~(AfOk}4;TQP0GtA3$EO`b0c&)->7*MO z`yLZ}y>e?PK&6ZTf6TUd{TboA*Hr}aVQ7~a5$147h=}A< z%;61m;;Z3!!9)Fl-A^-C*bJVqBt6DNgGZKpKDOQ9p^MCIg$zB5 zK6(v3QjaTmgzSFJuxO4A7{cBzztcy2`prHc9u)WN5?eN`uXV#XMj3Selh6}BfXrXXLI}$J~0}= literal 0 HcmV?d00001 diff --git a/ genplus-gx/pcutil/injectlnx b/ genplus-gx/pcutil/injectlnx new file mode 100644 index 0000000000000000000000000000000000000000..fb6d7cc71966e4eeae0502d1bf1521842192032f GIT binary patch literal 4660 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 EKcha0)Bpeg literal 0 HcmV?d00001 diff --git a/ genplus-gx/source/cpu/cpuintrf.h b/ genplus-gx/source/cpu/cpuintrf.h new file mode 100644 index 0000000..148cad4 --- /dev/null +++ b/ genplus-gx/source/cpu/cpuintrf.h @@ -0,0 +1,30 @@ + +#ifndef CPUINTRF_H +#define CPUINTRF_H + +#include "osd_cpu.h" + +#define CPU_16BIT_PORT 0x4000 +#define CPU_FLAGS_MASK 0xff00 +#define CLEAR_LINE 0 +#define ASSERT_LINE 1 +#define REG_PREVIOUSPC -1 +#define REG_SP_CONTENTS -2 + +/* daisy-chain link */ +typedef struct { + void (*reset)(int); /* reset callback */ + int (*interrupt_entry)(int); /* entry callback */ + void (*interrupt_reti)(int); /* reti callback */ + int irq_param; /* callback paramater */ +} Z80_DaisyChain; + +#define Z80_MAXDAISY 4 /* maximum of daisy chan device */ + +#define Z80_INT_REQ 0x01 /* interrupt request mask */ +#define Z80_INT_IEO 0x02 /* interrupt disable mask(IEO) */ + +#define Z80_VECTOR(device,state) (((device)<<8)|(state)) + + +#endif /* CPUINTRF_H */ diff --git a/ genplus-gx/source/cpu/m68k.h b/ genplus-gx/source/cpu/m68k.h new file mode 100644 index 0000000..6fc93b3 --- /dev/null +++ b/ genplus-gx/source/cpu/m68k.h @@ -0,0 +1,342 @@ +#ifndef M68K__HEADER +#define M68K__HEADER + +/* ======================================================================== */ +/* ========================= LICENSING & COPYRIGHT ======================== */ +/* ======================================================================== */ +/* + * MUSASHI + * Version 3.3 + * + * A portable Motorola M680x0 processor emulation engine. + * Copyright 1998-2001 Karl Stenerud. All rights reserved. + * + * This code may be freely used for non-commercial purposes as long as this + * copyright notice remains unaltered in the source code and any binary files + * containing this code in compiled form. + * + * All other lisencing terms must be negotiated with the author + * (Karl Stenerud). + * + * The latest version of this code can be obtained at: + * http://kstenerud.cjb.net + */ + + + +/* ======================================================================== */ +/* ============================ GENERAL DEFINES =========================== */ + +/* ======================================================================== */ + +/* There are 7 levels of interrupt to the 68K. + * A transition from < 7 to 7 will cause a non-maskable interrupt (NMI). + */ +#define M68K_IRQ_NONE 0 +#define M68K_IRQ_1 1 +#define M68K_IRQ_2 2 +#define M68K_IRQ_3 3 +#define M68K_IRQ_4 4 +#define M68K_IRQ_5 5 +#define M68K_IRQ_6 6 +#define M68K_IRQ_7 7 + + +/* Special interrupt acknowledge values. + * Use these as special returns from the interrupt acknowledge callback + * (specified later in this header). + */ + +/* Causes an interrupt autovector (0x18 + interrupt level) to be taken. + * This happens in a real 68K if VPA or AVEC is asserted during an interrupt + * acknowledge cycle instead of DTACK. + */ +#define M68K_INT_ACK_AUTOVECTOR 0xffffffff + +/* Causes the spurious interrupt vector (0x18) to be taken + * This happens in a real 68K if BERR is asserted during the interrupt + * acknowledge cycle (i.e. no devices responded to the acknowledge). + */ +#define M68K_INT_ACK_SPURIOUS 0xfffffffe + + +/* CPU types for use in m68k_set_cpu_type() */ +enum +{ + M68K_CPU_TYPE_INVALID, + M68K_CPU_TYPE_68000, + M68K_CPU_TYPE_68010, + M68K_CPU_TYPE_68EC020, + M68K_CPU_TYPE_68020, + M68K_CPU_TYPE_68030, /* Supported by disassembler ONLY */ + M68K_CPU_TYPE_68040 /* Supported by disassembler ONLY */ +}; + +/* Registers used by m68k_get_reg() and m68k_set_reg() */ +typedef enum +{ + /* Real registers */ + M68K_REG_D0, /* Data registers */ + M68K_REG_D1, + M68K_REG_D2, + M68K_REG_D3, + M68K_REG_D4, + M68K_REG_D5, + M68K_REG_D6, + M68K_REG_D7, + M68K_REG_A0, /* Address registers */ + M68K_REG_A1, + M68K_REG_A2, + M68K_REG_A3, + M68K_REG_A4, + M68K_REG_A5, + M68K_REG_A6, + M68K_REG_A7, + M68K_REG_PC, /* Program Counter */ + M68K_REG_SR, /* Status Register */ + M68K_REG_SP, /* The current Stack Pointer (located in A7) */ + M68K_REG_USP, /* User Stack Pointer */ + M68K_REG_ISP, /* Interrupt Stack Pointer */ + M68K_REG_MSP, /* Master Stack Pointer */ + M68K_REG_SFC, /* Source Function Code */ + M68K_REG_DFC, /* Destination Function Code */ + M68K_REG_VBR, /* Vector Base Register */ + M68K_REG_CACR, /* Cache Control Register */ + M68K_REG_CAAR, /* Cache Address Register */ + + /* Assumed registers */ + /* These are cheat registers which emulate the 1-longword prefetch + * present in the 68000 and 68010. + */ + M68K_REG_PREF_ADDR, /* Last prefetch address */ + M68K_REG_PREF_DATA, /* Last prefetch data */ + + /* Convenience registers */ + M68K_REG_PPC, /* Previous value in the program counter */ + M68K_REG_IR, /* Instruction register */ + M68K_REG_CPU_TYPE /* Type of CPU being run */ +} m68k_register_t; + +/* ======================================================================== */ +/* ====================== FUNCTIONS CALLED BY THE CPU ===================== */ +/* ======================================================================== */ + +/* You will have to implement these functions */ + +/* read/write functions called by the CPU to access memory. + * while values used are 32 bits, only the appropriate number + * of bits are relevant (i.e. in write_memory_8, only the lower 8 bits + * of value should be written to memory). + * + * NOTE: I have separated the immediate and PC-relative memory fetches + * from the other memory fetches because some systems require + * differentiation between PROGRAM and DATA fetches (usually + * for security setups such as encryption). + * This separation can either be achieved by setting + * M68K_SEPARATE_READS in m68kconf.h and defining + * the read functions, or by setting M68K_EMULATE_FC and + * making a function code callback function. + * Using the callback offers better emulation coverage + * because you can also monitor whether the CPU is in SYSTEM or + * USER mode, but it is also slower. + */ + +/* Read from anywhere */ +unsigned int m68k_read_memory_8(unsigned int address); +unsigned int m68k_read_memory_16(unsigned int address); +unsigned int m68k_read_memory_32(unsigned int address); + +/* Read data immediately following the PC */ +unsigned int m68k_read_immediate_16(unsigned int address); +unsigned int m68k_read_immediate_32(unsigned int address); + +/* Read data relative to the PC */ +unsigned int m68k_read_pcrelative_8(unsigned int address); +unsigned int m68k_read_pcrelative_16(unsigned int address); +unsigned int m68k_read_pcrelative_32(unsigned int address); + +/* Memory access for the disassembler */ +unsigned int m68k_read_disassembler_8 (unsigned int address); +unsigned int m68k_read_disassembler_16 (unsigned int address); +unsigned int m68k_read_disassembler_32 (unsigned int address); + +/* Write to anywhere */ +void m68k_write_memory_8(unsigned int address, unsigned int value); +void m68k_write_memory_16(unsigned int address, unsigned int value); +void m68k_write_memory_32(unsigned int address, unsigned int value); + + + +/* ======================================================================== */ +/* ============================== CALLBACKS =============================== */ +/* ======================================================================== */ + +/* These functions allow you to set callbacks to the host when specific events + * occur. Note that you must enable the corresponding value in m68kconf.h + * in order for these to do anything useful. + * Note: I have defined default callbacks which are used if you have enabled + * the corresponding #define in m68kconf.h but either haven't assigned a + * callback or have assigned a callback of NULL. + */ + +/* Set the callback for an interrupt acknowledge. + * You must enable M68K_EMULATE_INT_ACK in m68kconf.h. + * The CPU will call the callback with the interrupt level being acknowledged. + * The host program must return either a vector from 0x02-0xff, or one of the + * special interrupt acknowledge values specified earlier in this header. + * If this is not implemented, the CPU will always assume an autovectored + * interrupt, and will automatically clear the interrupt request when it + * services the interrupt. + * Default behavior: return M68K_INT_ACK_AUTOVECTOR. + */ +void m68k_set_int_ack_callback(int (*callback)(int int_level)); + + +/* Set the callback for a breakpoint acknowledge (68010+). + * You must enable M68K_EMULATE_BKPT_ACK in m68kconf.h. + * The CPU will call the callback with whatever was in the data field of the + * BKPT instruction for 68020+, or 0 for 68010. + * Default behavior: do nothing. + */ +void m68k_set_bkpt_ack_callback(void (*callback)(unsigned int data)); + + +/* Set the callback for the RESET instruction. + * You must enable M68K_EMULATE_RESET in m68kconf.h. + * The CPU calls this callback every time it encounters a RESET instruction. + * Default behavior: do nothing. + */ +void m68k_set_reset_instr_callback(void (*callback)(void)); + + +/* Set the callback for informing of a large PC change. + * You must enable M68K_MONITOR_PC in m68kconf.h. + * The CPU calls this callback with the new PC value every time the PC changes + * by a large value (currently set for changes by longwords). + * Default behavior: do nothing. + */ +void m68k_set_pc_changed_callback(void (*callback)(unsigned int new_pc)); + + +/* Set the callback for CPU function code changes. + * You must enable M68K_EMULATE_FC in m68kconf.h. + * The CPU calls this callback with the function code before every memory + * access to set the CPU's function code according to what kind of memory + * access it is (supervisor/user, program/data and such). + * Default behavior: do nothing. + */ +void m68k_set_fc_callback(void (*callback)(unsigned int new_fc)); + + +/* Set a callback for the instruction cycle of the CPU. + * You must enable M68K_INSTRUCTION_HOOK in m68kconf.h. + * The CPU calls this callback just before fetching the opcode in the + * instruction cycle. + * Default behavior: do nothing. + */ +void m68k_set_instr_hook_callback(void (*callback)(void)); + + + +/* ======================================================================== */ +/* ====================== FUNCTIONS TO ACCESS THE CPU ===================== */ +/* ======================================================================== */ + +/* Use this function to set the CPU type you want to emulate. + * Currently supported types are: M68K_CPU_TYPE_68000, M68K_CPU_TYPE_68010, + * M68K_CPU_TYPE_EC020, and M68K_CPU_TYPE_68020. + */ +void m68k_set_cpu_type(unsigned int cpu_type); + +/* Pulse the RESET pin on the CPU. + * You *MUST* reset the CPU at least once to initialize the emulation + * Note: If you didn't call m68k_set_cpu_type() before resetting + * the CPU for the first time, the CPU will be set to + * M68K_CPU_TYPE_68000. + */ +void m68k_pulse_reset(void); + +/* execute num_cycles worth of instructions. returns number of cycles used */ +int m68k_execute(int num_cycles); + +/* These functions let you read/write/modify the number of cycles left to run + * while m68k_execute() is running. + * These are useful if the 68k accesses a memory-mapped port on another device + * that requires immediate processing by another CPU. + */ +int m68k_cycles_run(void); /* Number of cycles run so far */ +int m68k_cycles_remaining(void); /* Number of cycles left */ +void m68k_modify_timeslice(int cycles); /* Modify cycles left */ +void m68k_end_timeslice(void); /* End timeslice now */ + +/* Set the IPL0-IPL2 pins on the CPU (IRQ). + * A transition from < 7 to 7 will cause a non-maskable interrupt (NMI). + * Setting IRQ to 0 will clear an interrupt request. + */ +void m68k_set_irq(unsigned int int_level); + + +/* Halt the CPU as if you pulsed the HALT pin. */ +void m68k_pulse_halt(void); + + +/* Context switching to allow multiple CPUs */ + +/* Get the size of the cpu context in bytes */ +unsigned int m68k_context_size(void); + +/* Get a cpu context */ +unsigned int m68k_get_context(void* dst); + +/* set the current cpu context */ +void m68k_set_context(void* dst); + +/* Save the current cpu context to disk. + * You must provide a function pointer of the form: + * void save_value(char* identifier, unsigned int value) + */ +void m68k_save_context( void (*save_value)(char* identifier, unsigned int value)); + +/* Load a cpu context from disk. + * You must provide a function pointer of the form: + * unsigned int load_value(char* identifier) + */ +void m68k_load_context(unsigned int (*load_value)(char* identifier)); + + + +/* Peek at the internals of a CPU context. This can either be a context + * retrieved using m68k_get_context() or the currently running context. + * If context is NULL, the currently running CPU context will be used. + */ +unsigned int m68k_get_reg(void* context, m68k_register_t reg); + +/* Poke values into the internals of the currently running CPU context */ +void m68k_set_reg(m68k_register_t reg, unsigned int value); + +/* Check if an instruction is valid for the specified CPU type */ +unsigned int m68k_is_valid_instruction(unsigned int instruction, unsigned int cpu_type); + +/* Disassemble 1 instruction using the epecified CPU type at pc. Stores + * disassembly in str_buff and returns the size of the instruction in bytes. + */ +unsigned int m68k_disassemble(char* str_buff, unsigned int pc, unsigned int cpu_type); + + +/* ======================================================================== */ +/* ============================= CONFIGURATION ============================ */ +/* ======================================================================== */ + +/* Import the configuration for this build */ +#include "m68kconf.h" + + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + +#endif /* M68K__HEADER */ + +/*** Not really required, but makes for clean compile under DevkitPPC ***/ +extern int vdp_int_ack_callback(int int_level); diff --git a/ genplus-gx/source/cpu/m68kconf.h b/ genplus-gx/source/cpu/m68kconf.h new file mode 100644 index 0000000..801a646 --- /dev/null +++ b/ genplus-gx/source/cpu/m68kconf.h @@ -0,0 +1,183 @@ +/* ======================================================================== */ +/* ========================= LICENSING & COPYRIGHT ======================== */ +/* ======================================================================== */ +/* + * MUSASHI + * Version 3.3 + * + * A portable Motorola M680x0 processor emulation engine. + * Copyright 1998-2001 Karl Stenerud. All rights reserved. + * + * This code may be freely used for non-commercial purposes as long as this + * copyright notice remains unaltered in the source code and any binary files + * containing this code in compiled form. + * + * All other lisencing terms must be negotiated with the author + * (Karl Stenerud). + * + * The latest version of this code can be obtained at: + * http://kstenerud.cjb.net + */ + + + +#ifndef M68KCONF__HEADER +#define M68KCONF__HEADER + + +/* Configuration switches. + * Use OPT_SPECIFY_HANDLER for configuration options that allow callbacks. + * OPT_SPECIFY_HANDLER causes the core to link directly to the function + * or macro you specify, rather than using callback functions whose pointer + * must be passed in using m68k_set_xxx_callback(). + */ +#define OPT_OFF 0 +#define OPT_ON 1 +#define OPT_SPECIFY_HANDLER 2 + + +/* ======================================================================== */ +/* ============================== MAME STUFF ============================== */ +/* ======================================================================== */ + +/* If you're compiling this for MAME, only change M68K_COMPILE_FOR_MAME + * to OPT_ON and use m68kmame.h to configure the 68k core. + */ +#ifndef M68K_COMPILE_FOR_MAME +#define M68K_COMPILE_FOR_MAME OPT_OFF +#endif /* M68K_COMPILE_FOR_MAME */ + +#if M68K_COMPILE_FOR_MAME == OPT_ON +#include "m68kmame.h" +#else + + + +/* ======================================================================== */ +/* ============================= CONFIGURATION ============================ */ +/* ======================================================================== */ + +/* Turn on if you want to use the following M68K variants */ +#define M68K_EMULATE_010 OPT_ON +#define M68K_EMULATE_EC020 OPT_ON +#define M68K_EMULATE_020 OPT_ON + + +/* If on, the CPU will call m68k_read_immediate_xx() for immediate addressing + * and m68k_read_pcrelative_xx() for PC-relative addressing. + * If off, all read requests from the CPU will be redirected to m68k_read_xx() + */ +#define M68K_SEPARATE_READS OPT_OFF + + +/* If on, CPU will call the interrupt acknowledge callback when it services an + * interrupt. + * If off, all interrupts will be autovectored and all interrupt requests will + * auto-clear when the interrupt is serviced. + */ +#define M68K_EMULATE_INT_ACK OPT_SPECIFY_HANDLER +#define M68K_INT_ACK_CALLBACK(A) vdp_int_ack_callback(A) + + +/* If on, CPU will call the breakpoint acknowledge callback when it encounters + * a breakpoint instruction and it is running a 68010+. + */ +#define M68K_EMULATE_BKPT_ACK OPT_OFF +#define M68K_BKPT_ACK_CALLBACK() your_bkpt_ack_handler_function() + + +/* If on, the CPU will monitor the trace flags and take trace exceptions + */ +#define M68K_EMULATE_TRACE OPT_OFF + + +/* If on, CPU will call the output reset callback when it encounters a reset + * instruction. + */ +#define M68K_EMULATE_RESET OPT_OFF +#define M68K_RESET_CALLBACK() your_reset_handler_function() + + +/* If on, CPU will call the set fc callback on every memory access to + * differentiate between user/supervisor, program/data access like a real + * 68000 would. This should be enabled and the callback should be set if you + * want to properly emulate the m68010 or higher. (moves uses function codes + * to read/write data from different address spaces) + */ +#define M68K_EMULATE_FC OPT_OFF +#define M68K_SET_FC_CALLBACK(A) your_set_fc_handler_function(A) + + +/* If on, CPU will call the pc changed callback when it changes the PC by a + * large value. This allows host programs to be nicer when it comes to + * fetching immediate data and instructions on a banked memory system. + */ +#define M68K_MONITOR_PC OPT_OFF +#define M68K_SET_PC_CALLBACK(A) your_pc_changed_handler_function(A) + + +/* If on, CPU will call the instruction hook callback before every + * instruction. + */ +#define M68K_INSTRUCTION_HOOK OPT_OFF +#define M68K_INSTRUCTION_CALLBACK() your_instruction_hook_function() + + +/* If on, the CPU will emulate the 4-byte prefetch queue of a real 68000 */ +#define M68K_EMULATE_PREFETCH OPT_OFF + + +/* If on, the CPU will generate address error exceptions if it tries to + * access a word or longword at an odd address. + * NOTE: Do not enable this! It is not working! + */ +#define M68K_EMULATE_ADDRESS_ERROR OPT_OFF + + +/* Turn on to enable logging of illegal instruction calls. + * M68K_LOG_FILEHANDLE must be #defined to a stdio file stream. + * Turn on M68K_LOG_1010_1111 to log all 1010 and 1111 calls. + */ +#define M68K_LOG_ENABLE OPT_OFF +#define M68K_LOG_1010_1111 OPT_OFF +#define M68K_LOG_FILEHANDLE some_file_handle + + +/* ----------------------------- COMPATIBILITY ---------------------------- */ + +/* The following options set optimizations that violate the current ANSI + * standard, but will be compliant under the forthcoming C9X standard. + */ + + +/* If on, the enulation core will use 64-bit integers to speed up some + * operations. +*/ +#define M68K_USE_64_BIT OPT_OFF + + +/* Set to your compiler's static inline keyword to enable it, or + * set it to blank to disable it. + * If you define INLINE in the makefile, it will override this value. + * NOTE: not enabling inline functions will SEVERELY slow down emulation. + */ +#ifndef INLINE +#define INLINE static __inline__ +#endif /* INLINE */ + + +/* If your environment requires special prefixes for system callback functions + * such as the argument to qsort(), then set them here or in the makefile. + */ +#ifndef DECL_SPEC +#define DECL_SPEC +#endif + +#endif /* M68K_COMPILE_FOR_MAME */ + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + +#endif /* M68KCONF__HEADER */ diff --git a/ genplus-gx/source/cpu/osd_cpu.h b/ genplus-gx/source/cpu/osd_cpu.h new file mode 100644 index 0000000..2c5edc2 --- /dev/null +++ b/ genplus-gx/source/cpu/osd_cpu.h @@ -0,0 +1,77 @@ +/******************************************************************************* +* * +* Define size independent data types and operations. * +* * +* The following types must be supported by all platforms: * +* * +* UINT8 - Unsigned 8-bit Integer INT8 - Signed 8-bit integer * +* UINT16 - Unsigned 16-bit Integer INT16 - Signed 16-bit integer * +* UINT32 - Unsigned 32-bit Integer INT32 - Signed 32-bit integer * +* UINT64 - Unsigned 64-bit Integer INT64 - Signed 64-bit integer * +* * +* * +* The macro names for the artithmatic operations are composed as follows: * +* * +* XXX_R_A_B, where XXX - 3 letter operation code (ADD, SUB, etc.) * +* R - The type of the result * +* A - The type of operand 1 * +* B - The type of operand 2 (if binary operation) * +* * +* Each type is one of: U8,8,U16,16,U32,32,U64,64 * +* * +*******************************************************************************/ + + +#ifndef OSD_CPU_H +#define OSD_CPU_H + +typedef unsigned char UINT8; +typedef unsigned short UINT16; +typedef unsigned int UINT32; +__extension__ typedef unsigned long long UINT64; +typedef signed char INT8; +typedef signed short INT16; +typedef signed int INT32; +__extension__ typedef signed long long INT64; + +/* Combine two 32-bit integers into a 64-bit integer */ +#define COMBINE_64_32_32(A,B) ((((UINT64)(A))<<32) | (UINT32)(B)) +#define COMBINE_U64_U32_U32(A,B) COMBINE_64_32_32(A,B) + +/* Return upper 32 bits of a 64-bit integer */ +#define HI32_32_64(A) (((UINT64)(A)) >> 32) +#define HI32_U32_U64(A) HI32_32_64(A) + +/* Return lower 32 bits of a 64-bit integer */ +#define LO32_32_64(A) ((A) & 0xffffffff) +#define LO32_U32_U64(A) LO32_32_64(A) + +#define DIV_64_64_32(A,B) ((A)/(B)) +#define DIV_U64_U64_U32(A,B) ((A)/(UINT32)(B)) + +#define MOD_32_64_32(A,B) ((A)%(B)) +#define MOD_U32_U64_U32(A,B) ((A)%(UINT32)(B)) + +#define MUL_64_32_32(A,B) ((A)*(INT64)(B)) +#define MUL_U64_U32_U32(A,B) ((A)*(UINT64)(UINT32)(B)) + + +/****************************************************************************** + * Union of UINT8, UINT16 and UINT32 in native endianess of the target + * This is used to access bytes and words in a machine independent manner. + * The upper bytes h2 and h3 normally contain zero (16 bit CPU cores) + * thus PAIR.d can be used to pass arguments to the memory system + * which expects 'int' really. + ******************************************************************************/ +typedef union { +#ifdef LSB_FIRST + struct { UINT8 l,h,h2,h3; } b; + struct { UINT16 l,h; } w; +#else + struct { UINT8 h3,h2,h,l; } b; + struct { UINT16 h,l; } w; +#endif + UINT32 d; +} PAIR; + +#endif /* defined OSD_CPU_H */ diff --git a/ genplus-gx/source/cpu/z80.c b/ genplus-gx/source/cpu/z80.c new file mode 100644 index 0000000..c657bf0 --- /dev/null +++ b/ genplus-gx/source/cpu/z80.c @@ -0,0 +1,4511 @@ +/***************************************************************************** + * + * z80.c + * Portable Z80 emulator V2.8 + * + * Copyright (C) 1998,1999,2000 Juergen Buchmueller, all rights reserved. + * + * - This source code is released as freeware for non-commercial purposes. + * - You are free to use and redistribute this code in modified or + * unmodified form, provided you list me in the credits. + * - If you modify this source code, you must add a notice to each modified + * source file that it has been changed. If you're a nice person, you + * will clearly mark each change too. :) + * - If you wish to use this for commercial purposes, please contact me at + * pullmoll@t-online.de + * - The author of this copywritten work reserves the right to change the + * terms of its usage and license at any time, including retroactively + * - This entire notice must remain in the source code. + * + * Changes in 3.2 + * - Fixed undocumented flags XF & YF of RRCA, and CF and HF of + * INI/IND/OUTI/OUTD/INIR/INDR/OTIR/OTDR [Sean Young] + * Changes in 3.1 + * - removed the REPEAT_AT_ONCE execution of LDIR/CPIR etc. opcodes + * for readabilities sake and because the implementation was buggy + * (and I was not able to find the difference) + * Changes in 3.0 + * - 'finished' switch to dynamically overrideable cycle count tables + * Changes in 2.9: + * - added methods to access and override the cycle count tables + * - fixed handling and timing of multiple DD/FD prefixed opcodes + * Changes in 2.8: + * - OUTI/OUTD/OTIR/OTDR also pre-decrement the B register now. + * This was wrong because of a bug fix on the wrong side + * (astrocade sound driver). + * Changes in 2.7: + * - removed z80_vm specific code, it's not needed (and never was). + * Changes in 2.6: + * - BUSY_LOOP_HACKS needed to call change_pc16() earlier, before + * checking the opcodes at the new address, because otherwise they + * might access the old (wrong or even NULL) banked memory region. + * Thanks to Sean Young for finding this nasty bug. + * Changes in 2.5: + * - Burning cycles always adjusts the ICount by a multiple of 4. + * - In REPEAT_AT_ONCE cases the R register wasn't incremented twice + * per repetition as it should have been. Those repeated opcodes + * could also underflow the ICount. + * - Simplified TIME_LOOP_HACKS for BC and added two more for DE + HL + * timing loops. I think those hacks weren't endian safe before too. + * Changes in 2.4: + * - z80_reset zaps the entire context, sets IX and IY to 0xffff(!) and + * sets the Z flag. With these changes the Tehkan World Cup driver + * _seems_ to work again. + * Changes in 2.3: + * - External termination of the execution loop calls z80_burn() and + * z80_vm_burn() to burn an amount of cycles (R adjustment) + * - Shortcuts which burn CPU cycles (BUSY_LOOP_HACKS and TIME_LOOP_HACKS) + * now also adjust the R register depending on the skipped opcodes. + * Changes in 2.2: + * - Fixed bugs in CPL, SCF and CCF instructions flag handling. + * - Changed variable EA and ARG16() function to UINT32; this + * produces slightly more efficient code. + * - The DD/FD XY CB opcodes where XY is 40-7F and Y is not 6/E + * are changed to calls to the X6/XE opcodes to reduce object size. + * They're hardly ever used so this should not yield a speed penalty. + * New in 2.0: + * - Optional more exact Z80 emulation (#define Z80_EXACT 1) according + * to a detailed description by Sean Young which can be found at: + * http://www.msxnet.org/tech/Z80/z80undoc.txt + *****************************************************************************/ + + +#include "shared.h" +#include "cpuintrf.h" +#include "z80.h" + +#define cpu_readop cpu_readmem16 +#define cpu_readop_arg cpu_readmem16 + +#define VERBOSE 0 + +#if VERBOSE +#define LOG(x) logerror x +#else +#define LOG(x) +#endif + +/* execute main opcodes inside a big switch statement */ +#ifndef BIG_SWITCH +#define BIG_SWITCH 1 +#endif + +/* big flags array for ADD/ADC/SUB/SBC/CP results */ +#define BIG_FLAGS_ARRAY 1 + +/* Set to 1 for a more exact (but somewhat slower) Z80 emulation */ +#define Z80_EXACT 1 + +/* on JP and JR opcodes check for tight loops */ +#define BUSY_LOOP_HACKS 1 + +/* check for delay loops counting down BC */ +#define TIME_LOOP_HACKS 1 + +#ifdef X86_ASM +#undef BIG_FLAGS_ARRAY +#define BIG_FLAGS_ARRAY 0 +#endif + +#if 0 +static UINT8 z80_reg_layout[] = { + Z80_PC, Z80_SP, Z80_AF, Z80_BC, Z80_DE, Z80_HL, -1, + Z80_IX, Z80_IY, Z80_AF2,Z80_BC2,Z80_DE2,Z80_HL2,-1, + Z80_R, Z80_I, Z80_IM, Z80_IFF1,Z80_IFF2, -1, + Z80_NMI_STATE,Z80_IRQ_STATE,Z80_DC0,Z80_DC1,Z80_DC2,Z80_DC3, 0 +}; + +static UINT8 z80_win_layout[] = { + 27, 0,53, 4, /* register window (top rows) */ + 0, 0,26,22, /* disassembler window (left colums) */ + 27, 5,53, 8, /* memory #1 window (right, upper middle) */ + 27,14,53, 8, /* memory #2 window (right, lower middle) */ + 0,23,80, 1, /* command line window (bottom rows) */ +}; +#endif + +/****************************************************************************/ +/* The Z80 registers. HALT is set to 1 when the CPU is halted, the refresh */ +/* register is calculated as follows: refresh=(Regs.R&127)|(Regs.R2&128) */ +/****************************************************************************/ +typedef struct { +/* 00 */ PAIR PREPC,PC,SP,AF,BC,DE,HL,IX,IY; +/* 24 */ PAIR AF2,BC2,DE2,HL2; +/* 34 */ UINT8 R,R2,IFF1,IFF2,HALT,IM,I; +/* 3B */ UINT8 irq_max; /* number of daisy chain devices */ +/* 3C */ INT8 request_irq; /* daisy chain next request device */ +/* 3D */ INT8 service_irq; /* daisy chain next reti handling device */ +/* 3E */ UINT8 nmi_state; /* nmi line state */ +/* 3F */ UINT8 irq_state; /* irq line state */ +/* 40 */ UINT8 int_state[Z80_MAXDAISY]; +/* 44 */ Z80_DaisyChain irq[Z80_MAXDAISY]; +/* 84 */ int (*irq_callback)(int irqline); +/* 88 */ int extra_cycles; /* extra cycles for interrupts */ +} Z80_Regs; + +#define CF 0x01 +#define NF 0x02 +#define PF 0x04 +#define VF PF +#define XF 0x08 +#define HF 0x10 +#define YF 0x20 +#define ZF 0x40 +#define SF 0x80 + +#define INT_IRQ 0x01 +#define NMI_IRQ 0x02 + +#define _PPC Z80.PREPC.d /* previous program counter */ + +#define _PCD Z80.PC.d +#define _PC Z80.PC.w.l + +#define _SPD Z80.SP.d +#define _SP Z80.SP.w.l + +#define _AFD Z80.AF.d +#define _AF Z80.AF.w.l +#define _A Z80.AF.b.h +#define _F Z80.AF.b.l + +#define _BCD Z80.BC.d +#define _BC Z80.BC.w.l +#define _B Z80.BC.b.h +#define _C Z80.BC.b.l + +#define _DED Z80.DE.d +#define _DE Z80.DE.w.l +#define _D Z80.DE.b.h +#define _E Z80.DE.b.l + +#define _HLD Z80.HL.d +#define _HL Z80.HL.w.l +#define _H Z80.HL.b.h +#define _L Z80.HL.b.l + +#define _IXD Z80.IX.d +#define _IX Z80.IX.w.l +#define _HX Z80.IX.b.h +#define _LX Z80.IX.b.l + +#define _IYD Z80.IY.d +#define _IY Z80.IY.w.l +#define _HY Z80.IY.b.h +#define _LY Z80.IY.b.l + +#define _I Z80.I +#define _R Z80.R +#define _R2 Z80.R2 +#define _IM Z80.IM +#define _IFF1 Z80.IFF1 +#define _IFF2 Z80.IFF2 +#define _HALT Z80.HALT + +int z80_ICount; +static Z80_Regs Z80; +static UINT32 EA; +static int after_EI = 0; + +static UINT8 SZ[256]; /* zero and sign flags */ +static UINT8 SZ_BIT[256]; /* zero, sign and parity/overflow (=zero) flags for BIT opcode */ +static UINT8 SZP[256]; /* zero, sign and parity flags */ +static UINT8 SZHV_inc[256]; /* zero, sign, half carry and overflow flags INC r8 */ +static UINT8 SZHV_dec[256]; /* zero, sign, half carry and overflow flags DEC r8 */ + +#include "z80daa.h" + +#if BIG_FLAGS_ARRAY +#include +static UINT8 *SZHVC_add = 0; +static UINT8 *SZHVC_sub = 0; +#endif + +#if Z80_EXACT +/* tmp1 value for ini/inir/outi/otir for [C.1-0][io.1-0] */ +static UINT8 irep_tmp1[4][4] = { + {0,0,1,0},{0,1,0,1},{1,0,1,1},{0,1,1,0} +}; + +/* tmp1 value for ind/indr/outd/otdr for [C.1-0][io.1-0] */ +static UINT8 drep_tmp1[4][4] = { + {0,1,0,0},{1,0,0,1},{0,0,1,0},{0,1,0,1} +}; + +/* tmp2 value for all in/out repeated opcodes for B.7-0 */ +static UINT8 breg_tmp2[256] = { + 0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1, + 0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0, + 1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0, + 1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1, + 0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0, + 1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1, + 0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1, + 0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0, + 1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0, + 1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1, + 0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1, + 0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0, + 1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1, + 0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0, + 1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0, + 1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1 +}; +#endif + +static UINT8 cc_op[0x100] = { + 4,10, 7, 6, 4, 4, 7, 4, 4,11, 7, 6, 4, 4, 7, 4, + 8,10, 7, 6, 4, 4, 7, 4,12,11, 7, 6, 4, 4, 7, 4, + 7,10,16, 6, 4, 4, 7, 4, 7,11,16, 6, 4, 4, 7, 4, + 7,10,13, 6,11,11,10, 4, 7,11,13, 6, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 5,10,10,10,10,11, 7,11, 5,10,10, 0,10,17, 7,11, + 5,10,10,11,10,11, 7,11, 5, 4,10,11,10, 0, 7,11, + 5,10,10,19,10,11, 7,11, 5, 4,10, 4,10, 0, 7,11, + 5,10,10, 4,10,11, 7,11, 5, 6,10, 4,10, 0, 7,11}; + +static UINT8 cc_cb[0x100] = { + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8}; + +static UINT8 cc_ed[0x100] = { + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, +12,12,15,20, 8, 8, 8, 9,12,12,15,20, 8, 8, 8, 9, +12,12,15,20, 8, 8, 8, 9,12,12,15,20, 8, 8, 8, 9, +12,12,15,20, 8, 8, 8,18,12,12,15,20, 8, 8, 8,18, +12,12,15,20, 8, 8, 8, 8,12,12,15,20, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, +16,16,16,16, 8, 8, 8, 8,16,16,16,16, 8, 8, 8, 8, +16,16,16,16, 8, 8, 8, 8,16,16,16,16, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}; + +static UINT8 cc_xy[0x100] = { + 4, 4, 4, 4, 4, 4, 4, 4, 4,15, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4,15, 4, 4, 4, 4, 4, 4, + 4,14,20,10, 9, 9, 9, 4, 4,15,20,10, 9, 9, 9, 4, + 4, 4, 4, 4,23,23,19, 4, 4,15, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4, + 4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4, + 9, 9, 9, 9, 9, 9,19, 9, 9, 9, 9, 9, 9, 9,19, 9, +19,19,19,19,19,19, 4,19, 4, 4, 4, 4, 9, 9,19, 4, + 4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4, + 4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4, + 4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4, + 4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4,14, 4,23, 4,15, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4,10, 4, 4, 4, 4, 4, 4}; + +static UINT8 cc_xycb[0x100] = { +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, +20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, +20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, +20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23}; + +/* extra cycles if jr/jp/call taken and 'interrupt latency' on rst 0-7 */ +static UINT8 cc_ex[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* DJNZ */ + 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, /* JR NZ/JR Z */ + 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, /* JR NC/JR C */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, /* LDIR/CPIR/INIR/OTIR LDDR/CPDR/INDR/OTDR */ + 6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2, + 6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2, + 6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2, + 6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2}; + +static UINT8 *cc[6] = { cc_op, cc_cb, cc_ed, cc_xy, cc_xycb, cc_ex }; +#define Z80_TABLE_dd Z80_TABLE_xy +#define Z80_TABLE_fd Z80_TABLE_xy + +static void take_interrupt(void); + +#define PROTOTYPES(tablename,prefix) \ + static __inline__ void prefix##_00(void); static __inline__ void prefix##_01(void); static __inline__ void prefix##_02(void); static __inline__ void prefix##_03(void); \ + static __inline__ void prefix##_04(void); static __inline__ void prefix##_05(void); static __inline__ void prefix##_06(void); static __inline__ void prefix##_07(void); \ + static __inline__ void prefix##_08(void); static __inline__ void prefix##_09(void); static __inline__ void prefix##_0a(void); static __inline__ void prefix##_0b(void); \ + static __inline__ void prefix##_0c(void); static __inline__ void prefix##_0d(void); static __inline__ void prefix##_0e(void); static __inline__ void prefix##_0f(void); \ + static __inline__ void prefix##_10(void); static __inline__ void prefix##_11(void); static __inline__ void prefix##_12(void); static __inline__ void prefix##_13(void); \ + static __inline__ void prefix##_14(void); static __inline__ void prefix##_15(void); static __inline__ void prefix##_16(void); static __inline__ void prefix##_17(void); \ + static __inline__ void prefix##_18(void); static __inline__ void prefix##_19(void); static __inline__ void prefix##_1a(void); static __inline__ void prefix##_1b(void); \ + static __inline__ void prefix##_1c(void); static __inline__ void prefix##_1d(void); static __inline__ void prefix##_1e(void); static __inline__ void prefix##_1f(void); \ + static __inline__ void prefix##_20(void); static __inline__ void prefix##_21(void); static __inline__ void prefix##_22(void); static __inline__ void prefix##_23(void); \ + static __inline__ void prefix##_24(void); static __inline__ void prefix##_25(void); static __inline__ void prefix##_26(void); static __inline__ void prefix##_27(void); \ + static __inline__ void prefix##_28(void); static __inline__ void prefix##_29(void); static __inline__ void prefix##_2a(void); static __inline__ void prefix##_2b(void); \ + static __inline__ void prefix##_2c(void); static __inline__ void prefix##_2d(void); static __inline__ void prefix##_2e(void); static __inline__ void prefix##_2f(void); \ + static __inline__ void prefix##_30(void); static __inline__ void prefix##_31(void); static __inline__ void prefix##_32(void); static __inline__ void prefix##_33(void); \ + static __inline__ void prefix##_34(void); static __inline__ void prefix##_35(void); static __inline__ void prefix##_36(void); static __inline__ void prefix##_37(void); \ + static __inline__ void prefix##_38(void); static __inline__ void prefix##_39(void); static __inline__ void prefix##_3a(void); static __inline__ void prefix##_3b(void); \ + static __inline__ void prefix##_3c(void); static __inline__ void prefix##_3d(void); static __inline__ void prefix##_3e(void); static __inline__ void prefix##_3f(void); \ + static __inline__ void prefix##_40(void); static __inline__ void prefix##_41(void); static __inline__ void prefix##_42(void); static __inline__ void prefix##_43(void); \ + static __inline__ void prefix##_44(void); static __inline__ void prefix##_45(void); static __inline__ void prefix##_46(void); static __inline__ void prefix##_47(void); \ + static __inline__ void prefix##_48(void); static __inline__ void prefix##_49(void); static __inline__ void prefix##_4a(void); static __inline__ void prefix##_4b(void); \ + static __inline__ void prefix##_4c(void); static __inline__ void prefix##_4d(void); static __inline__ void prefix##_4e(void); static __inline__ void prefix##_4f(void); \ + static __inline__ void prefix##_50(void); static __inline__ void prefix##_51(void); static __inline__ void prefix##_52(void); static __inline__ void prefix##_53(void); \ + static __inline__ void prefix##_54(void); static __inline__ void prefix##_55(void); static __inline__ void prefix##_56(void); static __inline__ void prefix##_57(void); \ + static __inline__ void prefix##_58(void); static __inline__ void prefix##_59(void); static __inline__ void prefix##_5a(void); static __inline__ void prefix##_5b(void); \ + static __inline__ void prefix##_5c(void); static __inline__ void prefix##_5d(void); static __inline__ void prefix##_5e(void); static __inline__ void prefix##_5f(void); \ + static __inline__ void prefix##_60(void); static __inline__ void prefix##_61(void); static __inline__ void prefix##_62(void); static __inline__ void prefix##_63(void); \ + static __inline__ void prefix##_64(void); static __inline__ void prefix##_65(void); static __inline__ void prefix##_66(void); static __inline__ void prefix##_67(void); \ + static __inline__ void prefix##_68(void); static __inline__ void prefix##_69(void); static __inline__ void prefix##_6a(void); static __inline__ void prefix##_6b(void); \ + static __inline__ void prefix##_6c(void); static __inline__ void prefix##_6d(void); static __inline__ void prefix##_6e(void); static __inline__ void prefix##_6f(void); \ + static __inline__ void prefix##_70(void); static __inline__ void prefix##_71(void); static __inline__ void prefix##_72(void); static __inline__ void prefix##_73(void); \ + static __inline__ void prefix##_74(void); static __inline__ void prefix##_75(void); static __inline__ void prefix##_76(void); static __inline__ void prefix##_77(void); \ + static __inline__ void prefix##_78(void); static __inline__ void prefix##_79(void); static __inline__ void prefix##_7a(void); static __inline__ void prefix##_7b(void); \ + static __inline__ void prefix##_7c(void); static __inline__ void prefix##_7d(void); static __inline__ void prefix##_7e(void); static __inline__ void prefix##_7f(void); \ + static __inline__ void prefix##_80(void); static __inline__ void prefix##_81(void); static __inline__ void prefix##_82(void); static __inline__ void prefix##_83(void); \ + static __inline__ void prefix##_84(void); static __inline__ void prefix##_85(void); static __inline__ void prefix##_86(void); static __inline__ void prefix##_87(void); \ + static __inline__ void prefix##_88(void); static __inline__ void prefix##_89(void); static __inline__ void prefix##_8a(void); static __inline__ void prefix##_8b(void); \ + static __inline__ void prefix##_8c(void); static __inline__ void prefix##_8d(void); static __inline__ void prefix##_8e(void); static __inline__ void prefix##_8f(void); \ + static __inline__ void prefix##_90(void); static __inline__ void prefix##_91(void); static __inline__ void prefix##_92(void); static __inline__ void prefix##_93(void); \ + static __inline__ void prefix##_94(void); static __inline__ void prefix##_95(void); static __inline__ void prefix##_96(void); static __inline__ void prefix##_97(void); \ + static __inline__ void prefix##_98(void); static __inline__ void prefix##_99(void); static __inline__ void prefix##_9a(void); static __inline__ void prefix##_9b(void); \ + static __inline__ void prefix##_9c(void); static __inline__ void prefix##_9d(void); static __inline__ void prefix##_9e(void); static __inline__ void prefix##_9f(void); \ + static __inline__ void prefix##_a0(void); static __inline__ void prefix##_a1(void); static __inline__ void prefix##_a2(void); static __inline__ void prefix##_a3(void); \ + static __inline__ void prefix##_a4(void); static __inline__ void prefix##_a5(void); static __inline__ void prefix##_a6(void); static __inline__ void prefix##_a7(void); \ + static __inline__ void prefix##_a8(void); static __inline__ void prefix##_a9(void); static __inline__ void prefix##_aa(void); static __inline__ void prefix##_ab(void); \ + static __inline__ void prefix##_ac(void); static __inline__ void prefix##_ad(void); static __inline__ void prefix##_ae(void); static __inline__ void prefix##_af(void); \ + static __inline__ void prefix##_b0(void); static __inline__ void prefix##_b1(void); static __inline__ void prefix##_b2(void); static __inline__ void prefix##_b3(void); \ + static __inline__ void prefix##_b4(void); static __inline__ void prefix##_b5(void); static __inline__ void prefix##_b6(void); static __inline__ void prefix##_b7(void); \ + static __inline__ void prefix##_b8(void); static __inline__ void prefix##_b9(void); static __inline__ void prefix##_ba(void); static __inline__ void prefix##_bb(void); \ + static __inline__ void prefix##_bc(void); static __inline__ void prefix##_bd(void); static __inline__ void prefix##_be(void); static __inline__ void prefix##_bf(void); \ + static __inline__ void prefix##_c0(void); static __inline__ void prefix##_c1(void); static __inline__ void prefix##_c2(void); static __inline__ void prefix##_c3(void); \ + static __inline__ void prefix##_c4(void); static __inline__ void prefix##_c5(void); static __inline__ void prefix##_c6(void); static __inline__ void prefix##_c7(void); \ + static __inline__ void prefix##_c8(void); static __inline__ void prefix##_c9(void); static __inline__ void prefix##_ca(void); static __inline__ void prefix##_cb(void); \ + static __inline__ void prefix##_cc(void); static __inline__ void prefix##_cd(void); static __inline__ void prefix##_ce(void); static __inline__ void prefix##_cf(void); \ + static __inline__ void prefix##_d0(void); static __inline__ void prefix##_d1(void); static __inline__ void prefix##_d2(void); static __inline__ void prefix##_d3(void); \ + static __inline__ void prefix##_d4(void); static __inline__ void prefix##_d5(void); static __inline__ void prefix##_d6(void); static __inline__ void prefix##_d7(void); \ + static __inline__ void prefix##_d8(void); static __inline__ void prefix##_d9(void); static __inline__ void prefix##_da(void); static __inline__ void prefix##_db(void); \ + static __inline__ void prefix##_dc(void); static __inline__ void prefix##_dd(void); static __inline__ void prefix##_de(void); static __inline__ void prefix##_df(void); \ + static __inline__ void prefix##_e0(void); static __inline__ void prefix##_e1(void); static __inline__ void prefix##_e2(void); static __inline__ void prefix##_e3(void); \ + static __inline__ void prefix##_e4(void); static __inline__ void prefix##_e5(void); static __inline__ void prefix##_e6(void); static __inline__ void prefix##_e7(void); \ + static __inline__ void prefix##_e8(void); static __inline__ void prefix##_e9(void); static __inline__ void prefix##_ea(void); static __inline__ void prefix##_eb(void); \ + static __inline__ void prefix##_ec(void); static __inline__ void prefix##_ed(void); static __inline__ void prefix##_ee(void); static __inline__ void prefix##_ef(void); \ + static __inline__ void prefix##_f0(void); static __inline__ void prefix##_f1(void); static __inline__ void prefix##_f2(void); static __inline__ void prefix##_f3(void); \ + static __inline__ void prefix##_f4(void); static __inline__ void prefix##_f5(void); static __inline__ void prefix##_f6(void); static __inline__ void prefix##_f7(void); \ + static __inline__ void prefix##_f8(void); static __inline__ void prefix##_f9(void); static __inline__ void prefix##_fa(void); static __inline__ void prefix##_fb(void); \ + static __inline__ void prefix##_fc(void); static __inline__ void prefix##_fd(void); static __inline__ void prefix##_fe(void); static __inline__ void prefix##_ff(void); \ +static void (*tablename[0x100])(void) = { \ + prefix##_00,prefix##_01,prefix##_02,prefix##_03,prefix##_04,prefix##_05,prefix##_06,prefix##_07, \ + prefix##_08,prefix##_09,prefix##_0a,prefix##_0b,prefix##_0c,prefix##_0d,prefix##_0e,prefix##_0f, \ + prefix##_10,prefix##_11,prefix##_12,prefix##_13,prefix##_14,prefix##_15,prefix##_16,prefix##_17, \ + prefix##_18,prefix##_19,prefix##_1a,prefix##_1b,prefix##_1c,prefix##_1d,prefix##_1e,prefix##_1f, \ + prefix##_20,prefix##_21,prefix##_22,prefix##_23,prefix##_24,prefix##_25,prefix##_26,prefix##_27, \ + prefix##_28,prefix##_29,prefix##_2a,prefix##_2b,prefix##_2c,prefix##_2d,prefix##_2e,prefix##_2f, \ + prefix##_30,prefix##_31,prefix##_32,prefix##_33,prefix##_34,prefix##_35,prefix##_36,prefix##_37, \ + prefix##_38,prefix##_39,prefix##_3a,prefix##_3b,prefix##_3c,prefix##_3d,prefix##_3e,prefix##_3f, \ + prefix##_40,prefix##_41,prefix##_42,prefix##_43,prefix##_44,prefix##_45,prefix##_46,prefix##_47, \ + prefix##_48,prefix##_49,prefix##_4a,prefix##_4b,prefix##_4c,prefix##_4d,prefix##_4e,prefix##_4f, \ + prefix##_50,prefix##_51,prefix##_52,prefix##_53,prefix##_54,prefix##_55,prefix##_56,prefix##_57, \ + prefix##_58,prefix##_59,prefix##_5a,prefix##_5b,prefix##_5c,prefix##_5d,prefix##_5e,prefix##_5f, \ + prefix##_60,prefix##_61,prefix##_62,prefix##_63,prefix##_64,prefix##_65,prefix##_66,prefix##_67, \ + prefix##_68,prefix##_69,prefix##_6a,prefix##_6b,prefix##_6c,prefix##_6d,prefix##_6e,prefix##_6f, \ + prefix##_70,prefix##_71,prefix##_72,prefix##_73,prefix##_74,prefix##_75,prefix##_76,prefix##_77, \ + prefix##_78,prefix##_79,prefix##_7a,prefix##_7b,prefix##_7c,prefix##_7d,prefix##_7e,prefix##_7f, \ + prefix##_80,prefix##_81,prefix##_82,prefix##_83,prefix##_84,prefix##_85,prefix##_86,prefix##_87, \ + prefix##_88,prefix##_89,prefix##_8a,prefix##_8b,prefix##_8c,prefix##_8d,prefix##_8e,prefix##_8f, \ + prefix##_90,prefix##_91,prefix##_92,prefix##_93,prefix##_94,prefix##_95,prefix##_96,prefix##_97, \ + prefix##_98,prefix##_99,prefix##_9a,prefix##_9b,prefix##_9c,prefix##_9d,prefix##_9e,prefix##_9f, \ + prefix##_a0,prefix##_a1,prefix##_a2,prefix##_a3,prefix##_a4,prefix##_a5,prefix##_a6,prefix##_a7, \ + prefix##_a8,prefix##_a9,prefix##_aa,prefix##_ab,prefix##_ac,prefix##_ad,prefix##_ae,prefix##_af, \ + prefix##_b0,prefix##_b1,prefix##_b2,prefix##_b3,prefix##_b4,prefix##_b5,prefix##_b6,prefix##_b7, \ + prefix##_b8,prefix##_b9,prefix##_ba,prefix##_bb,prefix##_bc,prefix##_bd,prefix##_be,prefix##_bf, \ + prefix##_c0,prefix##_c1,prefix##_c2,prefix##_c3,prefix##_c4,prefix##_c5,prefix##_c6,prefix##_c7, \ + prefix##_c8,prefix##_c9,prefix##_ca,prefix##_cb,prefix##_cc,prefix##_cd,prefix##_ce,prefix##_cf, \ + prefix##_d0,prefix##_d1,prefix##_d2,prefix##_d3,prefix##_d4,prefix##_d5,prefix##_d6,prefix##_d7, \ + prefix##_d8,prefix##_d9,prefix##_da,prefix##_db,prefix##_dc,prefix##_dd,prefix##_de,prefix##_df, \ + prefix##_e0,prefix##_e1,prefix##_e2,prefix##_e3,prefix##_e4,prefix##_e5,prefix##_e6,prefix##_e7, \ + prefix##_e8,prefix##_e9,prefix##_ea,prefix##_eb,prefix##_ec,prefix##_ed,prefix##_ee,prefix##_ef, \ + prefix##_f0,prefix##_f1,prefix##_f2,prefix##_f3,prefix##_f4,prefix##_f5,prefix##_f6,prefix##_f7, \ + prefix##_f8,prefix##_f9,prefix##_fa,prefix##_fb,prefix##_fc,prefix##_fd,prefix##_fe,prefix##_ff \ +} + +PROTOTYPES(Z80op,op); +PROTOTYPES(Z80cb,cb); +PROTOTYPES(Z80dd,dd); +PROTOTYPES(Z80ed,ed); +PROTOTYPES(Z80fd,fd); +PROTOTYPES(Z80xycb,xycb); + +/****************************************************************************/ +/* Burn an odd amount of cycles, that is instructions taking something */ +/* different from 4 T-states per opcode (and R increment) */ +/****************************************************************************/ +static __inline__ void BURNODD(int cycles, int opcodes, int cyclesum) +{ + if( cycles > 0 ) + { + _R += (cycles / cyclesum) * opcodes; + z80_ICount -= (cycles / cyclesum) * cyclesum; + } +} + +/*************************************************************** + * define an opcode function + ***************************************************************/ +#define OP(prefix,opcode) static __inline__ void prefix##_##opcode(void) + +/*************************************************************** + * adjust cycle count by n T-states + ***************************************************************/ +#define CC(prefix,opcode) z80_ICount -= cc[Z80_TABLE_##prefix][opcode] + +/*************************************************************** + * execute an opcode + ***************************************************************/ +#define EXEC(prefix,opcode) \ +{ \ + unsigned op = opcode; \ + CC(prefix,op); \ + (*Z80##prefix[op])(); \ +} + +#if BIG_SWITCH +#define EXEC_INLINE(prefix,opcode) \ +{ \ + unsigned op = opcode; \ + CC(prefix,op); \ + switch(op) \ + { \ + case 0x00:prefix##_##00();break; case 0x01:prefix##_##01();break; case 0x02:prefix##_##02();break; case 0x03:prefix##_##03();break; \ + case 0x04:prefix##_##04();break; case 0x05:prefix##_##05();break; case 0x06:prefix##_##06();break; case 0x07:prefix##_##07();break; \ + case 0x08:prefix##_##08();break; case 0x09:prefix##_##09();break; case 0x0a:prefix##_##0a();break; case 0x0b:prefix##_##0b();break; \ + case 0x0c:prefix##_##0c();break; case 0x0d:prefix##_##0d();break; case 0x0e:prefix##_##0e();break; case 0x0f:prefix##_##0f();break; \ + case 0x10:prefix##_##10();break; case 0x11:prefix##_##11();break; case 0x12:prefix##_##12();break; case 0x13:prefix##_##13();break; \ + case 0x14:prefix##_##14();break; case 0x15:prefix##_##15();break; case 0x16:prefix##_##16();break; case 0x17:prefix##_##17();break; \ + case 0x18:prefix##_##18();break; case 0x19:prefix##_##19();break; case 0x1a:prefix##_##1a();break; case 0x1b:prefix##_##1b();break; \ + case 0x1c:prefix##_##1c();break; case 0x1d:prefix##_##1d();break; case 0x1e:prefix##_##1e();break; case 0x1f:prefix##_##1f();break; \ + case 0x20:prefix##_##20();break; case 0x21:prefix##_##21();break; case 0x22:prefix##_##22();break; case 0x23:prefix##_##23();break; \ + case 0x24:prefix##_##24();break; case 0x25:prefix##_##25();break; case 0x26:prefix##_##26();break; case 0x27:prefix##_##27();break; \ + case 0x28:prefix##_##28();break; case 0x29:prefix##_##29();break; case 0x2a:prefix##_##2a();break; case 0x2b:prefix##_##2b();break; \ + case 0x2c:prefix##_##2c();break; case 0x2d:prefix##_##2d();break; case 0x2e:prefix##_##2e();break; case 0x2f:prefix##_##2f();break; \ + case 0x30:prefix##_##30();break; case 0x31:prefix##_##31();break; case 0x32:prefix##_##32();break; case 0x33:prefix##_##33();break; \ + case 0x34:prefix##_##34();break; case 0x35:prefix##_##35();break; case 0x36:prefix##_##36();break; case 0x37:prefix##_##37();break; \ + case 0x38:prefix##_##38();break; case 0x39:prefix##_##39();break; case 0x3a:prefix##_##3a();break; case 0x3b:prefix##_##3b();break; \ + case 0x3c:prefix##_##3c();break; case 0x3d:prefix##_##3d();break; case 0x3e:prefix##_##3e();break; case 0x3f:prefix##_##3f();break; \ + case 0x40:prefix##_##40();break; case 0x41:prefix##_##41();break; case 0x42:prefix##_##42();break; case 0x43:prefix##_##43();break; \ + case 0x44:prefix##_##44();break; case 0x45:prefix##_##45();break; case 0x46:prefix##_##46();break; case 0x47:prefix##_##47();break; \ + case 0x48:prefix##_##48();break; case 0x49:prefix##_##49();break; case 0x4a:prefix##_##4a();break; case 0x4b:prefix##_##4b();break; \ + case 0x4c:prefix##_##4c();break; case 0x4d:prefix##_##4d();break; case 0x4e:prefix##_##4e();break; case 0x4f:prefix##_##4f();break; \ + case 0x50:prefix##_##50();break; case 0x51:prefix##_##51();break; case 0x52:prefix##_##52();break; case 0x53:prefix##_##53();break; \ + case 0x54:prefix##_##54();break; case 0x55:prefix##_##55();break; case 0x56:prefix##_##56();break; case 0x57:prefix##_##57();break; \ + case 0x58:prefix##_##58();break; case 0x59:prefix##_##59();break; case 0x5a:prefix##_##5a();break; case 0x5b:prefix##_##5b();break; \ + case 0x5c:prefix##_##5c();break; case 0x5d:prefix##_##5d();break; case 0x5e:prefix##_##5e();break; case 0x5f:prefix##_##5f();break; \ + case 0x60:prefix##_##60();break; case 0x61:prefix##_##61();break; case 0x62:prefix##_##62();break; case 0x63:prefix##_##63();break; \ + case 0x64:prefix##_##64();break; case 0x65:prefix##_##65();break; case 0x66:prefix##_##66();break; case 0x67:prefix##_##67();break; \ + case 0x68:prefix##_##68();break; case 0x69:prefix##_##69();break; case 0x6a:prefix##_##6a();break; case 0x6b:prefix##_##6b();break; \ + case 0x6c:prefix##_##6c();break; case 0x6d:prefix##_##6d();break; case 0x6e:prefix##_##6e();break; case 0x6f:prefix##_##6f();break; \ + case 0x70:prefix##_##70();break; case 0x71:prefix##_##71();break; case 0x72:prefix##_##72();break; case 0x73:prefix##_##73();break; \ + case 0x74:prefix##_##74();break; case 0x75:prefix##_##75();break; case 0x76:prefix##_##76();break; case 0x77:prefix##_##77();break; \ + case 0x78:prefix##_##78();break; case 0x79:prefix##_##79();break; case 0x7a:prefix##_##7a();break; case 0x7b:prefix##_##7b();break; \ + case 0x7c:prefix##_##7c();break; case 0x7d:prefix##_##7d();break; case 0x7e:prefix##_##7e();break; case 0x7f:prefix##_##7f();break; \ + case 0x80:prefix##_##80();break; case 0x81:prefix##_##81();break; case 0x82:prefix##_##82();break; case 0x83:prefix##_##83();break; \ + case 0x84:prefix##_##84();break; case 0x85:prefix##_##85();break; case 0x86:prefix##_##86();break; case 0x87:prefix##_##87();break; \ + case 0x88:prefix##_##88();break; case 0x89:prefix##_##89();break; case 0x8a:prefix##_##8a();break; case 0x8b:prefix##_##8b();break; \ + case 0x8c:prefix##_##8c();break; case 0x8d:prefix##_##8d();break; case 0x8e:prefix##_##8e();break; case 0x8f:prefix##_##8f();break; \ + case 0x90:prefix##_##90();break; case 0x91:prefix##_##91();break; case 0x92:prefix##_##92();break; case 0x93:prefix##_##93();break; \ + case 0x94:prefix##_##94();break; case 0x95:prefix##_##95();break; case 0x96:prefix##_##96();break; case 0x97:prefix##_##97();break; \ + case 0x98:prefix##_##98();break; case 0x99:prefix##_##99();break; case 0x9a:prefix##_##9a();break; case 0x9b:prefix##_##9b();break; \ + case 0x9c:prefix##_##9c();break; case 0x9d:prefix##_##9d();break; case 0x9e:prefix##_##9e();break; case 0x9f:prefix##_##9f();break; \ + case 0xa0:prefix##_##a0();break; case 0xa1:prefix##_##a1();break; case 0xa2:prefix##_##a2();break; case 0xa3:prefix##_##a3();break; \ + case 0xa4:prefix##_##a4();break; case 0xa5:prefix##_##a5();break; case 0xa6:prefix##_##a6();break; case 0xa7:prefix##_##a7();break; \ + case 0xa8:prefix##_##a8();break; case 0xa9:prefix##_##a9();break; case 0xaa:prefix##_##aa();break; case 0xab:prefix##_##ab();break; \ + case 0xac:prefix##_##ac();break; case 0xad:prefix##_##ad();break; case 0xae:prefix##_##ae();break; case 0xaf:prefix##_##af();break; \ + case 0xb0:prefix##_##b0();break; case 0xb1:prefix##_##b1();break; case 0xb2:prefix##_##b2();break; case 0xb3:prefix##_##b3();break; \ + case 0xb4:prefix##_##b4();break; case 0xb5:prefix##_##b5();break; case 0xb6:prefix##_##b6();break; case 0xb7:prefix##_##b7();break; \ + case 0xb8:prefix##_##b8();break; case 0xb9:prefix##_##b9();break; case 0xba:prefix##_##ba();break; case 0xbb:prefix##_##bb();break; \ + case 0xbc:prefix##_##bc();break; case 0xbd:prefix##_##bd();break; case 0xbe:prefix##_##be();break; case 0xbf:prefix##_##bf();break; \ + case 0xc0:prefix##_##c0();break; case 0xc1:prefix##_##c1();break; case 0xc2:prefix##_##c2();break; case 0xc3:prefix##_##c3();break; \ + case 0xc4:prefix##_##c4();break; case 0xc5:prefix##_##c5();break; case 0xc6:prefix##_##c6();break; case 0xc7:prefix##_##c7();break; \ + case 0xc8:prefix##_##c8();break; case 0xc9:prefix##_##c9();break; case 0xca:prefix##_##ca();break; case 0xcb:prefix##_##cb();break; \ + case 0xcc:prefix##_##cc();break; case 0xcd:prefix##_##cd();break; case 0xce:prefix##_##ce();break; case 0xcf:prefix##_##cf();break; \ + case 0xd0:prefix##_##d0();break; case 0xd1:prefix##_##d1();break; case 0xd2:prefix##_##d2();break; case 0xd3:prefix##_##d3();break; \ + case 0xd4:prefix##_##d4();break; case 0xd5:prefix##_##d5();break; case 0xd6:prefix##_##d6();break; case 0xd7:prefix##_##d7();break; \ + case 0xd8:prefix##_##d8();break; case 0xd9:prefix##_##d9();break; case 0xda:prefix##_##da();break; case 0xdb:prefix##_##db();break; \ + case 0xdc:prefix##_##dc();break; case 0xdd:prefix##_##dd();break; case 0xde:prefix##_##de();break; case 0xdf:prefix##_##df();break; \ + case 0xe0:prefix##_##e0();break; case 0xe1:prefix##_##e1();break; case 0xe2:prefix##_##e2();break; case 0xe3:prefix##_##e3();break; \ + case 0xe4:prefix##_##e4();break; case 0xe5:prefix##_##e5();break; case 0xe6:prefix##_##e6();break; case 0xe7:prefix##_##e7();break; \ + case 0xe8:prefix##_##e8();break; case 0xe9:prefix##_##e9();break; case 0xea:prefix##_##ea();break; case 0xeb:prefix##_##eb();break; \ + case 0xec:prefix##_##ec();break; case 0xed:prefix##_##ed();break; case 0xee:prefix##_##ee();break; case 0xef:prefix##_##ef();break; \ + case 0xf0:prefix##_##f0();break; case 0xf1:prefix##_##f1();break; case 0xf2:prefix##_##f2();break; case 0xf3:prefix##_##f3();break; \ + case 0xf4:prefix##_##f4();break; case 0xf5:prefix##_##f5();break; case 0xf6:prefix##_##f6();break; case 0xf7:prefix##_##f7();break; \ + case 0xf8:prefix##_##f8();break; case 0xf9:prefix##_##f9();break; case 0xfa:prefix##_##fa();break; case 0xfb:prefix##_##fb();break; \ + case 0xfc:prefix##_##fc();break; case 0xfd:prefix##_##fd();break; case 0xfe:prefix##_##fe();break; case 0xff:prefix##_##ff();break; \ + } \ +} +#else +#define EXEC_INLINE EXEC +#endif + + +/*************************************************************** + * Enter HALT state; write 1 to fake port on first execution + ***************************************************************/ +#define ENTER_HALT { \ + _PC--; \ + _HALT = 1; \ + if( !after_EI ) \ + z80_burn( z80_ICount ); \ +} + +/*************************************************************** + * Leave HALT state; write 0 to fake port + ***************************************************************/ +#define LEAVE_HALT { \ + if( _HALT ) \ + { \ + _HALT = 0; \ + _PC++; \ + } \ +} + +/*************************************************************** + * Input a byte from given I/O port + ***************************************************************/ +#define IN(port) ((UINT8)cpu_readport16(port)) + +/*************************************************************** + * Output a byte to given I/O port + ***************************************************************/ +#define OUT(port,value) cpu_writeport16(port,value) + +/*************************************************************** + * Read a byte from given memory location + ***************************************************************/ +#define RM(addr) (UINT8)cpu_readmem16(addr) + +/*************************************************************** + * Read a word from given memory location + ***************************************************************/ +static __inline__ void RM16( UINT32 addr, PAIR *r ) +{ + r->b.l = RM(addr); + r->b.h = RM((addr+1)&0xffff); +} + +/*************************************************************** + * Write a byte to given memory location + ***************************************************************/ +#define WM(addr,value) cpu_writemem16(addr,value) + +/*************************************************************** + * Write a word to given memory location + ***************************************************************/ +static __inline__ void WM16( UINT32 addr, PAIR *r ) +{ + WM(addr,r->b.l); + WM((addr+1)&0xffff,r->b.h); +} + +/*************************************************************** + * ROP() is identical to RM() except it is used for + * reading opcodes. In case of system with memory mapped I/O, + * this function can be used to greatly speed up emulation + ***************************************************************/ +static __inline__ UINT8 ROP(void) +{ + unsigned pc = _PCD; + _PC++; + return cpu_readop(pc); +} + +/**************************************************************** + * ARG() is identical to ROP() except it is used + * for reading opcode arguments. This difference can be used to + * support systems that use different encoding mechanisms for + * opcodes and opcode arguments + ***************************************************************/ +static __inline__ UINT8 ARG(void) +{ + unsigned pc = _PCD; + _PC++; + return cpu_readop_arg(pc); +} + +static __inline__ UINT32 ARG16(void) +{ + unsigned pc = _PCD; + _PC += 2; + return cpu_readop_arg(pc) | (cpu_readop_arg((pc+1)&0xffff) << 8); +} + +/*************************************************************** + * Calculate the effective address EA of an opcode using + * IX+offset resp. IY+offset addressing. + ***************************************************************/ +#define EAX EA = (UINT32)(UINT16)(_IX+(INT8)ARG()) +#define EAY EA = (UINT32)(UINT16)(_IY+(INT8)ARG()) + +/*************************************************************** + * POP + ***************************************************************/ +#define POP(DR) { RM16( _SPD, &Z80.DR ); _SP += 2; } + +/*************************************************************** + * PUSH + ***************************************************************/ +#define PUSH(SR) { _SP -= 2; WM16( _SPD, &Z80.SR ); } + +/*************************************************************** + * JP + ***************************************************************/ +#if BUSY_LOOP_HACKS +#define JP { \ + unsigned oldpc = _PCD-1; \ + _PCD = ARG16(); \ + /* speed up busy loop */ \ + if( _PCD == oldpc ) \ + { \ + if( !after_EI ) \ + BURNODD( z80_ICount, 1, cc[Z80_TABLE_op][0xc3] ); \ + } \ + else \ + { \ + UINT8 op = cpu_readop(_PCD); \ + if( _PCD == oldpc-1 ) \ + { \ + /* NOP - JP $-1 or EI - JP $-1 */ \ + if ( op == 0x00 || op == 0xfb ) \ + { \ + if( !after_EI ) \ + BURNODD( z80_ICount-cc[Z80_TABLE_op][0x00], \ + 2, cc[Z80_TABLE_op][0x00]+cc[Z80_TABLE_op][0xc3]); \ + } \ + } \ + else \ + /* LD SP,#xxxx - JP $-3 (Galaga) */ \ + if( _PCD == oldpc-3 && op == 0x31 ) \ + { \ + if( !after_EI ) \ + BURNODD( z80_ICount-cc[Z80_TABLE_op][0x31], \ + 2, cc[Z80_TABLE_op][0x31]+cc[Z80_TABLE_op][0xc3]); \ + } \ + } \ +} +#else +#define JP { \ + _PCD = ARG16(); \ +} +#endif + +/*************************************************************** + * JP_COND + ***************************************************************/ + +#define JP_COND(cond) \ + if( cond ) \ + { \ + _PCD = ARG16(); \ + } \ + else \ + { \ + _PC += 2; \ + } + +/*************************************************************** + * JR + ***************************************************************/ +#define JR() \ +{ \ + unsigned oldpc = _PCD-1; \ + INT8 arg = (INT8)ARG(); /* ARG() also increments _PC */ \ + _PC += arg; /* so don't do _PC += ARG() */ \ + /* speed up busy loop */ \ + if( _PCD == oldpc ) \ + { \ + if( !after_EI ) \ + BURNODD( z80_ICount, 1, cc[Z80_TABLE_op][0x18] ); \ + } \ + else \ + { \ + UINT8 op = cpu_readop(_PCD); \ + if( _PCD == oldpc-1 ) \ + { \ + /* NOP - JR $-1 or EI - JR $-1 */ \ + if ( op == 0x00 || op == 0xfb ) \ + { \ + if( !after_EI ) \ + BURNODD( z80_ICount-cc[Z80_TABLE_op][0x00], \ + 2, cc[Z80_TABLE_op][0x00]+cc[Z80_TABLE_op][0x18]); \ + } \ + } \ + else \ + /* LD SP,#xxxx - JR $-3 */ \ + if( _PCD == oldpc-3 && op == 0x31 ) \ + { \ + if( !after_EI ) \ + BURNODD( z80_ICount-cc[Z80_TABLE_op][0x31], \ + 2, cc[Z80_TABLE_op][0x31]+cc[Z80_TABLE_op][0x18]); \ + } \ + } \ +} + +/*************************************************************** + * JR_COND + ***************************************************************/ +#define JR_COND(cond,opcode) \ + if( cond ) \ + { \ + INT8 arg = (INT8)ARG(); /* ARG() also increments _PC */ \ + _PC += arg; /* so don't do _PC += ARG() */ \ + CC(ex,opcode); \ + } \ + else _PC++; \ + +/*************************************************************** + * CALL + ***************************************************************/ +#define CALL() \ + EA = ARG16(); \ + PUSH( PC ); \ + _PCD = EA; + +/*************************************************************** + * CALL_COND + ***************************************************************/ +#define CALL_COND(cond,opcode) \ + if( cond ) \ + { \ + EA = ARG16(); \ + PUSH( PC ); \ + _PCD = EA; \ + CC(ex,opcode); \ + } \ + else \ + { \ + _PC+=2; \ + } + +/*************************************************************** + * RET_COND + ***************************************************************/ +#define RET_COND(cond,opcode) \ + if( cond ) \ + { \ + POP(PC); \ + CC(ex,opcode); \ + } + +/*************************************************************** + * RETN + ***************************************************************/ +#define RETN { \ + POP(PC); \ + if( _IFF1 == 0 && _IFF2 == 1 ) \ + { \ + _IFF1 = 1; \ + if( Z80.irq_state != CLEAR_LINE || \ + Z80.request_irq >= 0 ) \ + { \ + take_interrupt(); \ + } \ + } \ + else _IFF1 = _IFF2; \ +} + +/*************************************************************** + * RETI + ***************************************************************/ +#define RETI { \ + int device = Z80.service_irq; \ + POP(PC); \ +/* according to http://www.msxnet.org/tech/Z80/z80undoc.txt */ \ +/* _IFF1 = _IFF2; */ \ + if( device >= 0 ) \ + { \ + Z80.irq[device].interrupt_reti(Z80.irq[device].irq_param); \ + } \ +} + +/*************************************************************** + * LD R,A + ***************************************************************/ +#define LD_R_A { \ + _R = _A; \ + _R2 = _A & 0x80; /* keep bit 7 of R */ \ +} + +/*************************************************************** + * LD A,R + ***************************************************************/ +#define LD_A_R { \ + _A = (_R & 0x7f) | _R2; \ + _F = (_F & CF) | SZ[_A] | ( _IFF2 << 2 ); \ +} + +/*************************************************************** + * LD I,A + ***************************************************************/ +#define LD_I_A { \ + _I = _A; \ +} + +/*************************************************************** + * LD A,I + ***************************************************************/ +#define LD_A_I { \ + _A = _I; \ + _F = (_F & CF) | SZ[_A] | ( _IFF2 << 2 ); \ +} + +/*************************************************************** + * RST + ***************************************************************/ +#define RST(addr) \ + PUSH( PC ); \ + _PCD = addr; + +/*************************************************************** + * INC r8 + ***************************************************************/ +static __inline__ UINT8 INC(UINT8 value) +{ + UINT8 res = value + 1; + _F = (_F & CF) | SZHV_inc[res]; + return (UINT8)res; +} + +/*************************************************************** + * DEC r8 + ***************************************************************/ +static __inline__ UINT8 DEC(UINT8 value) +{ + UINT8 res = value - 1; + _F = (_F & CF) | SZHV_dec[res]; + return res; +} + +/*************************************************************** + * RLCA + ***************************************************************/ +#if Z80_EXACT +#define RLCA \ + _A = (_A << 1) | (_A >> 7); \ + _F = (_F & (SF | ZF | PF)) | (_A & (YF | XF | CF)) +#else +#define RLCA \ + _A = (_A << 1) | (_A >> 7); \ + _F = (_F & (SF | ZF | YF | XF | PF)) | (_A & CF) +#endif + +/*************************************************************** + * RRCA + ***************************************************************/ +#if Z80_EXACT +#define RRCA \ + _F = (_F & (SF | ZF | PF)) | (_A & CF); \ + _A = (_A >> 1) | (_A << 7); \ + _F |= (_A & (YF | XF) ) +#else +#define RRCA \ + _F = (_F & (SF | ZF | YF | XF | PF)) | (_A & CF); \ + _A = (_A >> 1) | (_A << 7) +#endif + +/*************************************************************** + * RLA + ***************************************************************/ +#if Z80_EXACT +#define RLA { \ + UINT8 res = (_A << 1) | (_F & CF); \ + UINT8 c = (_A & 0x80) ? CF : 0; \ + _F = (_F & (SF | ZF | PF)) | c | (res & (YF | XF)); \ + _A = res; \ +} +#else +#define RLA { \ + UINT8 res = (_A << 1) | (_F & CF); \ + UINT8 c = (_A & 0x80) ? CF : 0; \ + _F = (_F & (SF | ZF | YF | XF | PF)) | c; \ + _A = res; \ +} +#endif + +/*************************************************************** + * RRA + ***************************************************************/ +#if Z80_EXACT +#define RRA { \ + UINT8 res = (_A >> 1) | (_F << 7); \ + UINT8 c = (_A & 0x01) ? CF : 0; \ + _F = (_F & (SF | ZF | PF)) | c | (res & (YF | XF)); \ + _A = res; \ +} +#else +#define RRA { \ + UINT8 res = (_A >> 1) | (_F << 7); \ + UINT8 c = (_A & 0x01) ? CF : 0; \ + _F = (_F & (SF | ZF | YF | XF | PF)) | c; \ + _A = res; \ +} +#endif + +/*************************************************************** + * RRD + ***************************************************************/ +#define RRD { \ + UINT8 n = RM(_HL); \ + WM( _HL, (n >> 4) | (_A << 4) ); \ + _A = (_A & 0xf0) | (n & 0x0f); \ + _F = (_F & CF) | SZP[_A]; \ +} + +/*************************************************************** + * RLD + ***************************************************************/ +#define RLD { \ + UINT8 n = RM(_HL); \ + WM( _HL, (n << 4) | (_A & 0x0f) ); \ + _A = (_A & 0xf0) | (n >> 4); \ + _F = (_F & CF) | SZP[_A]; \ +} + +/*************************************************************** + * ADD A,n + ***************************************************************/ +#ifdef X86_ASM +#if Z80_EXACT +#define ADD(value) \ + asm ( \ + " addb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " addb %1,%1 \n" \ + " addb %1,%1 \n" /* shift to P/V bit position */ \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" \ + " movb %0,%%ah \n" /* get result */ \ + " andb $0x28,%%ah \n" /* maks flags 5+3 */ \ + " orb %%ah,%1 \n" /* put them into flags */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#else +#define ADD(value) \ + asm ( \ + " addb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " addb %1,%1 \n" \ + " addb %1,%1 \n" /* shift to P/V bit position */ \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#endif +#else +#if BIG_FLAGS_ARRAY +#define ADD(value) \ +{ \ + UINT32 ah = _AFD & 0xff00; \ + UINT32 res = (UINT8)((ah >> 8) + value); \ + _F = SZHVC_add[ah | res]; \ + _A = res; \ +} +#else +#define ADD(value) \ +{ \ + unsigned val = value; \ + unsigned res = _A + val; \ + _F = SZ[(UINT8)res] | ((res >> 8) & CF) | \ + ((_A ^ res ^ val) & HF) | \ + (((val ^ _A ^ 0x80) & (val ^ res) & 0x80) >> 5); \ + _A = (UINT8)res; \ +} +#endif +#endif + +/*************************************************************** + * ADC A,n + ***************************************************************/ +#ifdef X86_ASM +#if Z80_EXACT +#define ADC(value) \ + asm ( \ + " shrb $1,%1 \n" \ + " adcb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " addb %1,%1 \n" /* shift to P/V bit position */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" /* combine with P/V */ \ + " movb %0,%%ah \n" /* get result */ \ + " andb $0x28,%%ah \n" /* maks flags 5+3 */ \ + " orb %%ah,%1 \n" /* put them into flags */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#else +#define ADC(value) \ + asm ( \ + " shrb $1,%1 \n" \ + " adcb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " addb %1,%1 \n" /* shift to P/V bit position */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" /* combine with P/V */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#endif +#else +#if BIG_FLAGS_ARRAY +#define ADC(value) \ +{ \ + UINT32 ah = _AFD & 0xff00, c = _AFD & 1; \ + UINT32 res = (UINT8)((ah >> 8) + value + c); \ + _F = SZHVC_add[(c << 16) | ah | res]; \ + _A = res; \ +} +#else +#define ADC(value) \ +{ \ + unsigned val = value; \ + unsigned res = _A + val + (_F & CF); \ + _F = SZ[res & 0xff] | ((res >> 8) & CF) | \ + ((_A ^ res ^ val) & HF) | \ + (((val ^ _A ^ 0x80) & (val ^ res) & 0x80) >> 5); \ + _A = res; \ +} +#endif +#endif + +/*************************************************************** + * SUB n + ***************************************************************/ +#ifdef X86_ASM +#if Z80_EXACT +#define SUB(value) \ + asm ( \ + " subb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " stc \n" /* prepare to set N flag */ \ + " adcb %1,%1 \n" /* shift to P/V bit position */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" /* combine with P/V */ \ + " movb %0,%%ah \n" /* get result */ \ + " andb $0x28,%%ah \n" /* maks flags 5+3 */ \ + " orb %%ah,%1 \n" /* put them into flags */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#else +#define SUB(value) \ + asm ( \ + " subb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " stc \n" /* prepare to set N flag */ \ + " adcb %1,%1 \n" /* shift to P/V bit position */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" /* combine with P/V */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#endif +#else +#if BIG_FLAGS_ARRAY +#define SUB(value) \ +{ \ + UINT32 ah = _AFD & 0xff00; \ + UINT32 res = (UINT8)((ah >> 8) - value); \ + _F = SZHVC_sub[ah | res]; \ + _A = res; \ +} +#else +#define SUB(value) \ +{ \ + unsigned val = value; \ + unsigned res = _A - val; \ + _F = SZ[res & 0xff] | ((res >> 8) & CF) | NF | \ + ((_A ^ res ^ val) & HF) | \ + (((val ^ _A) & (_A ^ res) & 0x80) >> 5); \ + _A = res; \ +} +#endif +#endif + +/*************************************************************** + * SBC A,n + ***************************************************************/ +#ifdef X86_ASM +#if Z80_EXACT +#define SBC(value) \ + asm ( \ + " shrb $1,%1 \n" \ + " sbbb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " stc \n" /* prepare to set N flag */ \ + " adcb %1,%1 \n" /* shift to P/V bit position */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" /* combine with P/V */ \ + " movb %0,%%ah \n" /* get result */ \ + " andb $0x28,%%ah \n" /* maks flags 5+3 */ \ + " orb %%ah,%1 \n" /* put them into flags */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#else +#define SBC(value) \ + asm ( \ + " shrb $1,%1 \n" \ + " sbbb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " stc \n" /* prepare to set N flag */ \ + " adcb %1,%1 \n" /* shift to P/V bit position */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" /* combine with P/V */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#endif +#else +#if BIG_FLAGS_ARRAY +#define SBC(value) \ +{ \ + UINT32 ah = _AFD & 0xff00, c = _AFD & 1; \ + UINT32 res = (UINT8)((ah >> 8) - value - c); \ + _F = SZHVC_sub[(c<<16) | ah | res]; \ + _A = res; \ +} +#else +#define SBC(value) \ +{ \ + unsigned val = value; \ + unsigned res = _A - val - (_F & CF); \ + _F = SZ[res & 0xff] | ((res >> 8) & CF) | NF | \ + ((_A ^ res ^ val) & HF) | \ + (((val ^ _A) & (_A ^ res) & 0x80) >> 5); \ + _A = res; \ +} +#endif +#endif + +/*************************************************************** + * NEG + ***************************************************************/ +#define NEG { \ + UINT8 value = _A; \ + _A = 0; \ + SUB(value); \ +} + +/*************************************************************** + * DAA + ***************************************************************/ +#define DAA { \ + int idx = _A; \ + if( _F & CF ) idx |= 0x100; \ + if( _F & HF ) idx |= 0x200; \ + if( _F & NF ) idx |= 0x400; \ + _AF = DAATable[idx]; \ +} + +/*************************************************************** + * AND n + ***************************************************************/ +#define AND(value) \ + _A &= value; \ + _F = SZP[_A] | HF + +/*************************************************************** + * OR n + ***************************************************************/ +#define OR(value) \ + _A |= value; \ + _F = SZP[_A] + +/*************************************************************** + * XOR n + ***************************************************************/ +#define XOR(value) \ + _A ^= value; \ + _F = SZP[_A] + +/*************************************************************** + * CP n + ***************************************************************/ +#ifdef X86_ASM +#if Z80_EXACT +#define CP(value) \ + asm ( \ + " cmpb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " stc \n" /* prepare to set N flag */ \ + " adcb %1,%1 \n" /* shift to P/V bit position */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" /* combine with P/V */ \ + " movb %2,%%ah \n" /* get result */ \ + " andb $0x28,%%ah \n" /* maks flags 5+3 */ \ + " orb %%ah,%1 \n" /* put them into flags */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#else +#define CP(value) \ + asm ( \ + " cmpb %2,%0 \n" \ + " lahf \n" \ + " setob %1 \n" /* al = 1 if overflow */ \ + " stc \n" /* prepare to set N flag */ \ + " adcb %1,%1 \n" /* shift to P/V bit position */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign, zero, half carry, carry */ \ + " orb %%ah,%1 \n" /* combine with P/V */ \ + :"=r" (_A), "=r" (_F) \ + :"r" (value), "1" (_F), "0" (_A) \ + ) +#endif +#else +#if BIG_FLAGS_ARRAY +#define CP(value) \ +{ \ + UINT32 ah = _AFD & 0xff00; \ + UINT32 res = (UINT8)((ah >> 8) - value); \ + _F = SZHVC_sub[ah | res]; \ +} +#else +#define CP(value) \ +{ \ + unsigned val = value; \ + unsigned res = _A - val; \ + _F = SZ[res & 0xff] | ((res >> 8) & CF) | NF | \ + ((_A ^ res ^ val) & HF) | \ + ((((val ^ _A) & (_A ^ res)) >> 5) & VF); \ +} +#endif +#endif + +/*************************************************************** + * EX AF,AF' + ***************************************************************/ +#define EX_AF { \ + PAIR tmp; \ + tmp = Z80.AF; Z80.AF = Z80.AF2; Z80.AF2 = tmp; \ +} + +/*************************************************************** + * EX DE,HL + ***************************************************************/ +#define EX_DE_HL { \ + PAIR tmp; \ + tmp = Z80.DE; Z80.DE = Z80.HL; Z80.HL = tmp; \ +} + +/*************************************************************** + * EXX + ***************************************************************/ +#define EXX { \ + PAIR tmp; \ + tmp = Z80.BC; Z80.BC = Z80.BC2; Z80.BC2 = tmp; \ + tmp = Z80.DE; Z80.DE = Z80.DE2; Z80.DE2 = tmp; \ + tmp = Z80.HL; Z80.HL = Z80.HL2; Z80.HL2 = tmp; \ +} + +/*************************************************************** + * EX (SP),r16 + ***************************************************************/ +#define EXSP(DR) \ +{ \ + PAIR tmp = { { 0, 0, 0, 0 } }; \ + RM16( _SPD, &tmp ); \ + WM16( _SPD, &Z80.DR ); \ + Z80.DR = tmp; \ +} + + +/*************************************************************** + * ADD16 + ***************************************************************/ +#ifdef X86_ASM +#if Z80_EXACT +#define ADD16(DR,SR) \ + asm ( \ + " andb $0xc4,%1 \n" \ + " addb %%dl,%%cl \n" \ + " adcb %%dh,%%ch \n" \ + " lahf \n" \ + " andb $0x11,%%ah \n" \ + " orb %%ah,%1 \n" \ + " movb %%ch,%%ah \n" /* get result MSB */ \ + " andb $0x28,%%ah \n" /* maks flags 5+3 */ \ + " orb %%ah,%1 \n" /* put them into flags */ \ + :"=c" (Z80.DR.d), "=r" (_F) \ + :"0" (Z80.DR.d), "1" (_F), "d" (Z80.SR.d) \ + ) +#else +#define ADD16(DR,SR) \ + asm ( \ + " andb $0xc4,%1 \n" \ + " addb %%dl,%%cl \n" \ + " adcb %%dh,%%ch \n" \ + " lahf \n" \ + " andb $0x11,%%ah \n" \ + " orb %%ah,%1 \n" \ + :"=c" (Z80.DR.d), "=r" (_F) \ + :"0" (Z80.DR.d), "1" (_F), "d" (Z80.SR.d) \ + ) +#endif +#else +#define ADD16(DR,SR) \ +{ \ + UINT32 res = Z80.DR.d + Z80.SR.d; \ + _F = (_F & (SF | ZF | VF)) | \ + (((Z80.DR.d ^ res ^ Z80.SR.d) >> 8) & HF) | \ + ((res >> 16) & CF); \ + Z80.DR.w.l = (UINT16)res; \ +} +#endif + +/*************************************************************** + * ADC r16,r16 + ***************************************************************/ +#ifdef X86_ASM +#if Z80_EXACT +#define ADC16(Reg) \ + asm ( \ + " shrb $1,%1 \n" \ + " adcb %%dl,%%cl \n" \ + " lahf \n" \ + " movb %%ah,%%dl \n" \ + " adcb %%dh,%%ch \n" \ + " lahf \n" \ + " setob %1 \n" \ + " orb $0xbf,%%dl \n" /* set all but zero */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign,zero,half carry and carry */\ + " addb %1,%1 \n" \ + " orb %%ah,%1 \n" /* overflow into P/V */ \ + " andb %%dl,%1 \n" /* mask zero */ \ + " movb %%ch,%%ah \n" /* get result MSB */ \ + " andb $0x28,%%ah \n" /* maks flags 5+3 */ \ + " orb %%ah,%1 \n" /* put them into flags */ \ + :"=c" (_HLD), "=r" (_F) \ + :"0" (_HLD), "1" (_F), "d" (Z80.Reg.d) \ + ) +#else +#define ADC16(Reg) \ + asm ( \ + " shrb $1,%1 \n" \ + " adcb %%dl,%%cl \n" \ + " lahf \n" \ + " movb %%ah,%%dl \n" \ + " adcb %%dh,%%ch \n" \ + " lahf \n" \ + " setob %1 \n" \ + " orb $0xbf,%%dl \n" /* set all but zero */ \ + " addb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign,zero,half carry and carry */\ + " addb %1,%1 \n" \ + " orb %%ah,%1 \n" /* overflow into P/V */ \ + " andb %%dl,%1 \n" /* mask zero */ \ + :"=c" (_HLD), "=r" (_F) \ + :"0" (_HLD), "1" (_F), "d" (Z80.Reg.d) \ + ) +#endif +#else +#define ADC16(Reg) \ +{ \ + UINT32 res = _HLD + Z80.Reg.d + (_F & CF); \ + _F = (((_HLD ^ res ^ Z80.Reg.d) >> 8) & HF) | \ + ((res >> 16) & CF) | \ + ((res >> 8) & SF) | \ + ((res & 0xffff) ? 0 : ZF) | \ + (((Z80.Reg.d ^ _HLD ^ 0x8000) & (Z80.Reg.d ^ res) & 0x8000) >> 13); \ + _HL = (UINT16)res; \ +} +#endif + +/*************************************************************** + * SBC r16,r16 + ***************************************************************/ +#ifdef X86_ASM +#if Z80_EXACT +#define SBC16(Reg) \ +asm ( \ + " shrb $1,%1 \n" \ + " sbbb %%dl,%%cl \n" \ + " lahf \n" \ + " movb %%ah,%%dl \n" \ + " sbbb %%dh,%%ch \n" \ + " lahf \n" \ + " setob %1 \n" \ + " orb $0xbf,%%dl \n" /* set all but zero */ \ + " stc \n" \ + " adcb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign,zero,half carry and carry */\ + " addb %1,%1 \n" \ + " orb %%ah,%1 \n" /* overflow into P/V */ \ + " andb %%dl,%1 \n" /* mask zero */ \ + " movb %%ch,%%ah \n" /* get result MSB */ \ + " andb $0x28,%%ah \n" /* maks flags 5+3 */ \ + " orb %%ah,%1 \n" /* put them into flags */ \ + :"=c" (_HLD), "=r" (_F) \ + :"0" (_HLD), "1" (_F), "d" (Z80.Reg.d) \ + ) +#else +#define SBC16(Reg) \ +asm ( \ + " shrb $1,%1 \n" \ + " sbbb %%dl,%%cl \n" \ + " lahf \n" \ + " movb %%ah,%%dl \n" \ + " sbbb %%dh,%%ch \n" \ + " lahf \n" \ + " setob %1 \n" \ + " orb $0xbf,%%dl \n" /* set all but zero */ \ + " stc \n" \ + " adcb %1,%1 \n" \ + " andb $0xd1,%%ah \n" /* sign,zero,half carry and carry */\ + " addb %1,%1 \n" \ + " orb %%ah,%1 \n" /* overflow into P/V */ \ + " andb %%dl,%1 \n" /* mask zero */ \ + :"=c" (_HLD), "=r" (_F) \ + :"0" (_HLD), "1" (_F), "d" (Z80.Reg.d) \ + ) +#endif +#else +#define SBC16(Reg) \ +{ \ + UINT32 res = _HLD - Z80.Reg.d - (_F & CF); \ + _F = (((_HLD ^ res ^ Z80.Reg.d) >> 8) & HF) | NF | \ + ((res >> 16) & CF) | \ + ((res >> 8) & SF) | \ + ((res & 0xffff) ? 0 : ZF) | \ + (((Z80.Reg.d ^ _HLD) & (_HLD ^ res) &0x8000) >> 13); \ + _HL = (UINT16)res; \ +} +#endif + +/*************************************************************** + * RLC r8 + ***************************************************************/ +static __inline__ UINT8 RLC(UINT8 value) +{ + unsigned res = value; + unsigned c = (res & 0x80) ? CF : 0; + res = ((res << 1) | (res >> 7)) & 0xff; + _F = SZP[res] | c; + return res; +} + +/*************************************************************** + * RRC r8 + ***************************************************************/ +static __inline__ UINT8 RRC(UINT8 value) +{ + unsigned res = value; + unsigned c = (res & 0x01) ? CF : 0; + res = ((res >> 1) | (res << 7)) & 0xff; + _F = SZP[res] | c; + return res; +} + +/*************************************************************** + * RL r8 + ***************************************************************/ +static __inline__ UINT8 RL(UINT8 value) +{ + unsigned res = value; + unsigned c = (res & 0x80) ? CF : 0; + res = ((res << 1) | (_F & CF)) & 0xff; + _F = SZP[res] | c; + return res; +} + +/*************************************************************** + * RR r8 + ***************************************************************/ +static __inline__ UINT8 RR(UINT8 value) +{ + unsigned res = value; + unsigned c = (res & 0x01) ? CF : 0; + res = ((res >> 1) | (_F << 7)) & 0xff; + _F = SZP[res] | c; + return res; +} + +/*************************************************************** + * SLA r8 + ***************************************************************/ +static __inline__ UINT8 SLA(UINT8 value) +{ + unsigned res = value; + unsigned c = (res & 0x80) ? CF : 0; + res = (res << 1) & 0xff; + _F = SZP[res] | c; + return res; +} + +/*************************************************************** + * SRA r8 + ***************************************************************/ +static __inline__ UINT8 SRA(UINT8 value) +{ + unsigned res = value; + unsigned c = (res & 0x01) ? CF : 0; + res = ((res >> 1) | (res & 0x80)) & 0xff; + _F = SZP[res] | c; + return res; +} + +/*************************************************************** + * SLL r8 + ***************************************************************/ +static __inline__ UINT8 SLL(UINT8 value) +{ + unsigned res = value; + unsigned c = (res & 0x80) ? CF : 0; + res = ((res << 1) | 0x01) & 0xff; + _F = SZP[res] | c; + return res; +} + +/*************************************************************** + * SRL r8 + ***************************************************************/ +static __inline__ UINT8 SRL(UINT8 value) +{ + unsigned res = value; + unsigned c = (res & 0x01) ? CF : 0; + res = (res >> 1) & 0xff; + _F = SZP[res] | c; + return res; +} + +/*************************************************************** + * BIT bit,r8 + ***************************************************************/ +#define BIT(bit,reg) \ + _F = (_F & CF) | HF | SZ_BIT[reg & (1<>8) & (YF|XF)) +#else +#define BIT_XY BIT +#endif + +/*************************************************************** + * RES bit,r8 + ***************************************************************/ +static __inline__ UINT8 RES(UINT8 bit, UINT8 value) +{ + return value & ~(1< flag 5 */ \ + if( (_A + io) & 0x08 ) _F |= XF; /* bit 3 -> flag 3 */ \ + _HL++; _DE++; _BC--; \ + if( _BC ) _F |= VF; \ +} +#else +#define LDI { \ + WM( _DE, RM(_HL) ); \ + _F &= SF | ZF | YF | XF | CF; \ + _HL++; _DE++; _BC--; \ + if( _BC ) _F |= VF; \ +} +#endif + +/*************************************************************** + * CPI + ***************************************************************/ +#if Z80_EXACT +#define CPI { \ + UINT8 val = RM(_HL); \ + UINT8 res = _A - val; \ + _HL++; _BC--; \ + _F = (_F & CF) | (SZ[res] & ~(YF|XF)) | ((_A ^ val ^ res) & HF) | NF; \ + if( _F & HF ) res -= 1; \ + if( res & 0x02 ) _F |= YF; /* bit 1 -> flag 5 */ \ + if( res & 0x08 ) _F |= XF; /* bit 3 -> flag 3 */ \ + if( _BC ) _F |= VF; \ +} +#else +#define CPI { \ + UINT8 val = RM(_HL); \ + UINT8 res = _A - val; \ + _HL++; _BC--; \ + _F = (_F & CF) | SZ[res] | ((_A ^ val ^ res) & HF) | NF; \ + if( _BC ) _F |= VF; \ +} +#endif + +/*************************************************************** + * INI + ***************************************************************/ +#if Z80_EXACT +#define INI { \ + UINT8 io = IN(_BC); \ + _B--; \ + WM( _HL, io ); \ + _HL++; \ + _F = SZ[_B]; \ + if( io & SF ) _F |= NF; \ + if( ( ( (_C + 1) & 0xff) + io) & 0x100 ) _F |= HF | CF; \ + if( (irep_tmp1[_C & 3][io & 3] ^ \ + breg_tmp2[_B] ^ \ + (_C >> 2) ^ \ + (io >> 2)) & 1 ) \ + _F |= PF; \ +} +#else +#define INI { \ + _B--; \ + WM( _HL, IN(_BC) ); \ + _HL++; \ + _F = (_B) ? NF : NF | ZF; \ +} +#endif + +/*************************************************************** + * OUTI + ***************************************************************/ +#if Z80_EXACT +#define OUTI { \ + UINT8 io = RM(_HL); \ + _B--; \ + OUT( _BC, io ); \ + _HL++; \ + _F = SZ[_B]; \ + if( io & SF ) _F |= NF; \ + if( ( ( (_C + 1) & 0xff) + io) & 0x100 ) _F |= HF | CF; \ + if( (irep_tmp1[_C & 3][io & 3] ^ \ + breg_tmp2[_B] ^ \ + (_C >> 2) ^ \ + (io >> 2)) & 1 ) \ + _F |= PF; \ +} +#else +#define OUTI { \ + _B--; \ + OUT( _BC, RM(_HL) ); \ + _HL++; \ + _F = (_B) ? NF : NF | ZF; \ +} +#endif + +/*************************************************************** + * LDD + ***************************************************************/ +#if Z80_EXACT +#define LDD { \ + UINT8 io = RM(_HL); \ + WM( _DE, io ); \ + _F &= SF | ZF | CF; \ + if( (_A + io) & 0x02 ) _F |= YF; /* bit 1 -> flag 5 */ \ + if( (_A + io) & 0x08 ) _F |= XF; /* bit 3 -> flag 3 */ \ + _HL--; _DE--; _BC--; \ + if( _BC ) _F |= VF; \ +} +#else +#define LDD { \ + WM( _DE, RM(_HL) ); \ + _F &= SF | ZF | YF | XF | CF; \ + _HL--; _DE--; _BC--; \ + if( _BC ) _F |= VF; \ +} +#endif + +/*************************************************************** + * CPD + ***************************************************************/ +#if Z80_EXACT +#define CPD { \ + UINT8 val = RM(_HL); \ + UINT8 res = _A - val; \ + _HL--; _BC--; \ + _F = (_F & CF) | (SZ[res] & ~(YF|XF)) | ((_A ^ val ^ res) & HF) | NF; \ + if( _F & HF ) res -= 1; \ + if( res & 0x02 ) _F |= YF; /* bit 1 -> flag 5 */ \ + if( res & 0x08 ) _F |= XF; /* bit 3 -> flag 3 */ \ + if( _BC ) _F |= VF; \ +} +#else +#define CPD { \ + UINT8 val = RM(_HL); \ + UINT8 res = _A - val; \ + _HL--; _BC--; \ + _F = (_F & CF) | SZ[res] | ((_A ^ val ^ res) & HF) | NF; \ + if( _BC ) _F |= VF; \ +} +#endif + +/*************************************************************** + * IND + ***************************************************************/ +#if Z80_EXACT +#define IND { \ + UINT8 io = IN(_BC); \ + _B--; \ + WM( _HL, io ); \ + _HL--; \ + _F = SZ[_B]; \ + if( io & SF ) _F |= NF; \ + if( ( ( (_C - 1) & 0xff) + io) & 0x100 ) _F |= HF | CF; \ + if( (drep_tmp1[_C & 3][io & 3] ^ \ + breg_tmp2[_B] ^ \ + (_C >> 2) ^ \ + (io >> 2)) & 1 ) \ + _F |= PF; \ +} +#else +#define IND { \ + _B--; \ + WM( _HL, IN(_BC) ); \ + _HL--; \ + _F = (_B) ? NF : NF | ZF; \ +} +#endif + +/*************************************************************** + * OUTD + ***************************************************************/ +#if Z80_EXACT +#define OUTD { \ + UINT8 io = RM(_HL); \ + _B--; \ + OUT( _BC, io ); \ + _HL--; \ + _F = SZ[_B]; \ + if( io & SF ) _F |= NF; \ + if( ( ( (_C - 1) & 0xff) + io) & 0x100 ) _F |= HF | CF; \ + if( (drep_tmp1[_C & 3][io & 3] ^ \ + breg_tmp2[_B] ^ \ + (_C >> 2) ^ \ + (io >> 2)) & 1 ) \ + _F |= PF; \ +} +#else +#define OUTD { \ + _B--; \ + OUT( _BC, RM(_HL) ); \ + _HL--; \ + _F = (_B) ? NF : NF | ZF; \ +} +#endif + +/*************************************************************** + * LDIR + ***************************************************************/ +#define LDIR \ + LDI; \ + if( _BC ) \ + { \ + _PC -= 2; \ + CC(ex,0xb0); \ + } + +/*************************************************************** + * CPIR + ***************************************************************/ +#define CPIR \ + CPI; \ + if( _BC && !(_F & ZF) ) \ + { \ + _PC -= 2; \ + CC(ex,0xb1); \ + } + +/*************************************************************** + * INIR + ***************************************************************/ +#define INIR \ + INI; \ + if( _B ) \ + { \ + _PC -= 2; \ + CC(ex,0xb2); \ + } + +/*************************************************************** + * OTIR + ***************************************************************/ +#define OTIR \ + OUTI; \ + if( _B ) \ + { \ + _PC -= 2; \ + CC(ex,0xb3); \ + } + +/*************************************************************** + * LDDR + ***************************************************************/ +#define LDDR \ + LDD; \ + if( _BC ) \ + { \ + _PC -= 2; \ + CC(ex,0xb8); \ + } + +/*************************************************************** + * CPDR + ***************************************************************/ +#define CPDR \ + CPD; \ + if( _BC && !(_F & ZF) ) \ + { \ + _PC -= 2; \ + CC(ex,0xb9); \ + } + +/*************************************************************** + * INDR + ***************************************************************/ +#define INDR \ + IND; \ + if( _B ) \ + { \ + _PC -= 2; \ + CC(ex,0xba); \ + } + +/*************************************************************** + * OTDR + ***************************************************************/ +#define OTDR \ + OUTD; \ + if( _B ) \ + { \ + _PC -= 2; \ + CC(ex,0xbb); \ + } + +/*************************************************************** + * EI + ***************************************************************/ +#define EI { \ + /* If interrupts were disabled, execute one more \ + * instruction and check the IRQ line. \ + * If not, simply set interrupt flip-flop 2 \ + */ \ + if( _IFF1 == 0 ) \ + { \ + _IFF1 = _IFF2 = 1; \ + _PPC = _PCD; \ + _R++; \ + while( cpu_readop(_PCD) == 0xfb ) /* more EIs? */ \ + { \ + CC(op,0xfb); \ + _PPC =_PCD; \ + _PC++; \ + _R++; \ + } \ + if( Z80.irq_state != CLEAR_LINE || \ + Z80.request_irq >= 0 ) \ + { \ + after_EI = 1; /* avoid cycle skip hacks */ \ + EXEC(op,ROP()); \ + after_EI = 0; \ + take_interrupt(); \ + } else EXEC(op,ROP()); \ + } else _IFF2 = 1; \ +} + +/********************************************************** + * opcodes with CB prefix + * rotate, shift and bit operations + **********************************************************/ +OP(cb,00) { _B = RLC(_B); } /* RLC B */ +OP(cb,01) { _C = RLC(_C); } /* RLC C */ +OP(cb,02) { _D = RLC(_D); } /* RLC D */ +OP(cb,03) { _E = RLC(_E); } /* RLC E */ +OP(cb,04) { _H = RLC(_H); } /* RLC H */ +OP(cb,05) { _L = RLC(_L); } /* RLC L */ +OP(cb,06) { WM( _HL, RLC(RM(_HL)) ); } /* RLC (HL) */ +OP(cb,07) { _A = RLC(_A); } /* RLC A */ + +OP(cb,08) { _B = RRC(_B); } /* RRC B */ +OP(cb,09) { _C = RRC(_C); } /* RRC C */ +OP(cb,0a) { _D = RRC(_D); } /* RRC D */ +OP(cb,0b) { _E = RRC(_E); } /* RRC E */ +OP(cb,0c) { _H = RRC(_H); } /* RRC H */ +OP(cb,0d) { _L = RRC(_L); } /* RRC L */ +OP(cb,0e) { WM( _HL, RRC(RM(_HL)) ); } /* RRC (HL) */ +OP(cb,0f) { _A = RRC(_A); } /* RRC A */ + +OP(cb,10) { _B = RL(_B); } /* RL B */ +OP(cb,11) { _C = RL(_C); } /* RL C */ +OP(cb,12) { _D = RL(_D); } /* RL D */ +OP(cb,13) { _E = RL(_E); } /* RL E */ +OP(cb,14) { _H = RL(_H); } /* RL H */ +OP(cb,15) { _L = RL(_L); } /* RL L */ +OP(cb,16) { WM( _HL, RL(RM(_HL)) ); } /* RL (HL) */ +OP(cb,17) { _A = RL(_A); } /* RL A */ + +OP(cb,18) { _B = RR(_B); } /* RR B */ +OP(cb,19) { _C = RR(_C); } /* RR C */ +OP(cb,1a) { _D = RR(_D); } /* RR D */ +OP(cb,1b) { _E = RR(_E); } /* RR E */ +OP(cb,1c) { _H = RR(_H); } /* RR H */ +OP(cb,1d) { _L = RR(_L); } /* RR L */ +OP(cb,1e) { WM( _HL, RR(RM(_HL)) ); } /* RR (HL) */ +OP(cb,1f) { _A = RR(_A); } /* RR A */ + +OP(cb,20) { _B = SLA(_B); } /* SLA B */ +OP(cb,21) { _C = SLA(_C); } /* SLA C */ +OP(cb,22) { _D = SLA(_D); } /* SLA D */ +OP(cb,23) { _E = SLA(_E); } /* SLA E */ +OP(cb,24) { _H = SLA(_H); } /* SLA H */ +OP(cb,25) { _L = SLA(_L); } /* SLA L */ +OP(cb,26) { WM( _HL, SLA(RM(_HL)) ); } /* SLA (HL) */ +OP(cb,27) { _A = SLA(_A); } /* SLA A */ + +OP(cb,28) { _B = SRA(_B); } /* SRA B */ +OP(cb,29) { _C = SRA(_C); } /* SRA C */ +OP(cb,2a) { _D = SRA(_D); } /* SRA D */ +OP(cb,2b) { _E = SRA(_E); } /* SRA E */ +OP(cb,2c) { _H = SRA(_H); } /* SRA H */ +OP(cb,2d) { _L = SRA(_L); } /* SRA L */ +OP(cb,2e) { WM( _HL, SRA(RM(_HL)) ); } /* SRA (HL) */ +OP(cb,2f) { _A = SRA(_A); } /* SRA A */ + +OP(cb,30) { _B = SLL(_B); } /* SLL B */ +OP(cb,31) { _C = SLL(_C); } /* SLL C */ +OP(cb,32) { _D = SLL(_D); } /* SLL D */ +OP(cb,33) { _E = SLL(_E); } /* SLL E */ +OP(cb,34) { _H = SLL(_H); } /* SLL H */ +OP(cb,35) { _L = SLL(_L); } /* SLL L */ +OP(cb,36) { WM( _HL, SLL(RM(_HL)) ); } /* SLL (HL) */ +OP(cb,37) { _A = SLL(_A); } /* SLL A */ + +OP(cb,38) { _B = SRL(_B); } /* SRL B */ +OP(cb,39) { _C = SRL(_C); } /* SRL C */ +OP(cb,3a) { _D = SRL(_D); } /* SRL D */ +OP(cb,3b) { _E = SRL(_E); } /* SRL E */ +OP(cb,3c) { _H = SRL(_H); } /* SRL H */ +OP(cb,3d) { _L = SRL(_L); } /* SRL L */ +OP(cb,3e) { WM( _HL, SRL(RM(_HL)) ); } /* SRL (HL) */ +OP(cb,3f) { _A = SRL(_A); } /* SRL A */ + +OP(cb,40) { BIT(0,_B); } /* BIT 0,B */ +OP(cb,41) { BIT(0,_C); } /* BIT 0,C */ +OP(cb,42) { BIT(0,_D); } /* BIT 0,D */ +OP(cb,43) { BIT(0,_E); } /* BIT 0,E */ +OP(cb,44) { BIT(0,_H); } /* BIT 0,H */ +OP(cb,45) { BIT(0,_L); } /* BIT 0,L */ +OP(cb,46) { BIT(0,RM(_HL)); } /* BIT 0,(HL) */ +OP(cb,47) { BIT(0,_A); } /* BIT 0,A */ + +OP(cb,48) { BIT(1,_B); } /* BIT 1,B */ +OP(cb,49) { BIT(1,_C); } /* BIT 1,C */ +OP(cb,4a) { BIT(1,_D); } /* BIT 1,D */ +OP(cb,4b) { BIT(1,_E); } /* BIT 1,E */ +OP(cb,4c) { BIT(1,_H); } /* BIT 1,H */ +OP(cb,4d) { BIT(1,_L); } /* BIT 1,L */ +OP(cb,4e) { BIT(1,RM(_HL)); } /* BIT 1,(HL) */ +OP(cb,4f) { BIT(1,_A); } /* BIT 1,A */ + +OP(cb,50) { BIT(2,_B); } /* BIT 2,B */ +OP(cb,51) { BIT(2,_C); } /* BIT 2,C */ +OP(cb,52) { BIT(2,_D); } /* BIT 2,D */ +OP(cb,53) { BIT(2,_E); } /* BIT 2,E */ +OP(cb,54) { BIT(2,_H); } /* BIT 2,H */ +OP(cb,55) { BIT(2,_L); } /* BIT 2,L */ +OP(cb,56) { BIT(2,RM(_HL)); } /* BIT 2,(HL) */ +OP(cb,57) { BIT(2,_A); } /* BIT 2,A */ + +OP(cb,58) { BIT(3,_B); } /* BIT 3,B */ +OP(cb,59) { BIT(3,_C); } /* BIT 3,C */ +OP(cb,5a) { BIT(3,_D); } /* BIT 3,D */ +OP(cb,5b) { BIT(3,_E); } /* BIT 3,E */ +OP(cb,5c) { BIT(3,_H); } /* BIT 3,H */ +OP(cb,5d) { BIT(3,_L); } /* BIT 3,L */ +OP(cb,5e) { BIT(3,RM(_HL)); } /* BIT 3,(HL) */ +OP(cb,5f) { BIT(3,_A); } /* BIT 3,A */ + +OP(cb,60) { BIT(4,_B); } /* BIT 4,B */ +OP(cb,61) { BIT(4,_C); } /* BIT 4,C */ +OP(cb,62) { BIT(4,_D); } /* BIT 4,D */ +OP(cb,63) { BIT(4,_E); } /* BIT 4,E */ +OP(cb,64) { BIT(4,_H); } /* BIT 4,H */ +OP(cb,65) { BIT(4,_L); } /* BIT 4,L */ +OP(cb,66) { BIT(4,RM(_HL)); } /* BIT 4,(HL) */ +OP(cb,67) { BIT(4,_A); } /* BIT 4,A */ + +OP(cb,68) { BIT(5,_B); } /* BIT 5,B */ +OP(cb,69) { BIT(5,_C); } /* BIT 5,C */ +OP(cb,6a) { BIT(5,_D); } /* BIT 5,D */ +OP(cb,6b) { BIT(5,_E); } /* BIT 5,E */ +OP(cb,6c) { BIT(5,_H); } /* BIT 5,H */ +OP(cb,6d) { BIT(5,_L); } /* BIT 5,L */ +OP(cb,6e) { BIT(5,RM(_HL)); } /* BIT 5,(HL) */ +OP(cb,6f) { BIT(5,_A); } /* BIT 5,A */ + +OP(cb,70) { BIT(6,_B); } /* BIT 6,B */ +OP(cb,71) { BIT(6,_C); } /* BIT 6,C */ +OP(cb,72) { BIT(6,_D); } /* BIT 6,D */ +OP(cb,73) { BIT(6,_E); } /* BIT 6,E */ +OP(cb,74) { BIT(6,_H); } /* BIT 6,H */ +OP(cb,75) { BIT(6,_L); } /* BIT 6,L */ +OP(cb,76) { BIT(6,RM(_HL)); } /* BIT 6,(HL) */ +OP(cb,77) { BIT(6,_A); } /* BIT 6,A */ + +OP(cb,78) { BIT(7,_B); } /* BIT 7,B */ +OP(cb,79) { BIT(7,_C); } /* BIT 7,C */ +OP(cb,7a) { BIT(7,_D); } /* BIT 7,D */ +OP(cb,7b) { BIT(7,_E); } /* BIT 7,E */ +OP(cb,7c) { BIT(7,_H); } /* BIT 7,H */ +OP(cb,7d) { BIT(7,_L); } /* BIT 7,L */ +OP(cb,7e) { BIT(7,RM(_HL)); } /* BIT 7,(HL) */ +OP(cb,7f) { BIT(7,_A); } /* BIT 7,A */ + +OP(cb,80) { _B = RES(0,_B); } /* RES 0,B */ +OP(cb,81) { _C = RES(0,_C); } /* RES 0,C */ +OP(cb,82) { _D = RES(0,_D); } /* RES 0,D */ +OP(cb,83) { _E = RES(0,_E); } /* RES 0,E */ +OP(cb,84) { _H = RES(0,_H); } /* RES 0,H */ +OP(cb,85) { _L = RES(0,_L); } /* RES 0,L */ +OP(cb,86) { WM( _HL, RES(0,RM(_HL)) ); } /* RES 0,(HL) */ +OP(cb,87) { _A = RES(0,_A); } /* RES 0,A */ + +OP(cb,88) { _B = RES(1,_B); } /* RES 1,B */ +OP(cb,89) { _C = RES(1,_C); } /* RES 1,C */ +OP(cb,8a) { _D = RES(1,_D); } /* RES 1,D */ +OP(cb,8b) { _E = RES(1,_E); } /* RES 1,E */ +OP(cb,8c) { _H = RES(1,_H); } /* RES 1,H */ +OP(cb,8d) { _L = RES(1,_L); } /* RES 1,L */ +OP(cb,8e) { WM( _HL, RES(1,RM(_HL)) ); } /* RES 1,(HL) */ +OP(cb,8f) { _A = RES(1,_A); } /* RES 1,A */ + +OP(cb,90) { _B = RES(2,_B); } /* RES 2,B */ +OP(cb,91) { _C = RES(2,_C); } /* RES 2,C */ +OP(cb,92) { _D = RES(2,_D); } /* RES 2,D */ +OP(cb,93) { _E = RES(2,_E); } /* RES 2,E */ +OP(cb,94) { _H = RES(2,_H); } /* RES 2,H */ +OP(cb,95) { _L = RES(2,_L); } /* RES 2,L */ +OP(cb,96) { WM( _HL, RES(2,RM(_HL)) ); } /* RES 2,(HL) */ +OP(cb,97) { _A = RES(2,_A); } /* RES 2,A */ + +OP(cb,98) { _B = RES(3,_B); } /* RES 3,B */ +OP(cb,99) { _C = RES(3,_C); } /* RES 3,C */ +OP(cb,9a) { _D = RES(3,_D); } /* RES 3,D */ +OP(cb,9b) { _E = RES(3,_E); } /* RES 3,E */ +OP(cb,9c) { _H = RES(3,_H); } /* RES 3,H */ +OP(cb,9d) { _L = RES(3,_L); } /* RES 3,L */ +OP(cb,9e) { WM( _HL, RES(3,RM(_HL)) ); } /* RES 3,(HL) */ +OP(cb,9f) { _A = RES(3,_A); } /* RES 3,A */ + +OP(cb,a0) { _B = RES(4,_B); } /* RES 4,B */ +OP(cb,a1) { _C = RES(4,_C); } /* RES 4,C */ +OP(cb,a2) { _D = RES(4,_D); } /* RES 4,D */ +OP(cb,a3) { _E = RES(4,_E); } /* RES 4,E */ +OP(cb,a4) { _H = RES(4,_H); } /* RES 4,H */ +OP(cb,a5) { _L = RES(4,_L); } /* RES 4,L */ +OP(cb,a6) { WM( _HL, RES(4,RM(_HL)) ); } /* RES 4,(HL) */ +OP(cb,a7) { _A = RES(4,_A); } /* RES 4,A */ + +OP(cb,a8) { _B = RES(5,_B); } /* RES 5,B */ +OP(cb,a9) { _C = RES(5,_C); } /* RES 5,C */ +OP(cb,aa) { _D = RES(5,_D); } /* RES 5,D */ +OP(cb,ab) { _E = RES(5,_E); } /* RES 5,E */ +OP(cb,ac) { _H = RES(5,_H); } /* RES 5,H */ +OP(cb,ad) { _L = RES(5,_L); } /* RES 5,L */ +OP(cb,ae) { WM( _HL, RES(5,RM(_HL)) ); } /* RES 5,(HL) */ +OP(cb,af) { _A = RES(5,_A); } /* RES 5,A */ + +OP(cb,b0) { _B = RES(6,_B); } /* RES 6,B */ +OP(cb,b1) { _C = RES(6,_C); } /* RES 6,C */ +OP(cb,b2) { _D = RES(6,_D); } /* RES 6,D */ +OP(cb,b3) { _E = RES(6,_E); } /* RES 6,E */ +OP(cb,b4) { _H = RES(6,_H); } /* RES 6,H */ +OP(cb,b5) { _L = RES(6,_L); } /* RES 6,L */ +OP(cb,b6) { WM( _HL, RES(6,RM(_HL)) ); } /* RES 6,(HL) */ +OP(cb,b7) { _A = RES(6,_A); } /* RES 6,A */ + +OP(cb,b8) { _B = RES(7,_B); } /* RES 7,B */ +OP(cb,b9) { _C = RES(7,_C); } /* RES 7,C */ +OP(cb,ba) { _D = RES(7,_D); } /* RES 7,D */ +OP(cb,bb) { _E = RES(7,_E); } /* RES 7,E */ +OP(cb,bc) { _H = RES(7,_H); } /* RES 7,H */ +OP(cb,bd) { _L = RES(7,_L); } /* RES 7,L */ +OP(cb,be) { WM( _HL, RES(7,RM(_HL)) ); } /* RES 7,(HL) */ +OP(cb,bf) { _A = RES(7,_A); } /* RES 7,A */ + +OP(cb,c0) { _B = SET(0,_B); } /* SET 0,B */ +OP(cb,c1) { _C = SET(0,_C); } /* SET 0,C */ +OP(cb,c2) { _D = SET(0,_D); } /* SET 0,D */ +OP(cb,c3) { _E = SET(0,_E); } /* SET 0,E */ +OP(cb,c4) { _H = SET(0,_H); } /* SET 0,H */ +OP(cb,c5) { _L = SET(0,_L); } /* SET 0,L */ +OP(cb,c6) { WM( _HL, SET(0,RM(_HL)) ); } /* SET 0,(HL) */ +OP(cb,c7) { _A = SET(0,_A); } /* SET 0,A */ + +OP(cb,c8) { _B = SET(1,_B); } /* SET 1,B */ +OP(cb,c9) { _C = SET(1,_C); } /* SET 1,C */ +OP(cb,ca) { _D = SET(1,_D); } /* SET 1,D */ +OP(cb,cb) { _E = SET(1,_E); } /* SET 1,E */ +OP(cb,cc) { _H = SET(1,_H); } /* SET 1,H */ +OP(cb,cd) { _L = SET(1,_L); } /* SET 1,L */ +OP(cb,ce) { WM( _HL, SET(1,RM(_HL)) ); } /* SET 1,(HL) */ +OP(cb,cf) { _A = SET(1,_A); } /* SET 1,A */ + +OP(cb,d0) { _B = SET(2,_B); } /* SET 2,B */ +OP(cb,d1) { _C = SET(2,_C); } /* SET 2,C */ +OP(cb,d2) { _D = SET(2,_D); } /* SET 2,D */ +OP(cb,d3) { _E = SET(2,_E); } /* SET 2,E */ +OP(cb,d4) { _H = SET(2,_H); } /* SET 2,H */ +OP(cb,d5) { _L = SET(2,_L); } /* SET 2,L */ +OP(cb,d6) { WM( _HL, SET(2,RM(_HL)) ); }/* SET 2,(HL) */ +OP(cb,d7) { _A = SET(2,_A); } /* SET 2,A */ + +OP(cb,d8) { _B = SET(3,_B); } /* SET 3,B */ +OP(cb,d9) { _C = SET(3,_C); } /* SET 3,C */ +OP(cb,da) { _D = SET(3,_D); } /* SET 3,D */ +OP(cb,db) { _E = SET(3,_E); } /* SET 3,E */ +OP(cb,dc) { _H = SET(3,_H); } /* SET 3,H */ +OP(cb,dd) { _L = SET(3,_L); } /* SET 3,L */ +OP(cb,de) { WM( _HL, SET(3,RM(_HL)) ); } /* SET 3,(HL) */ +OP(cb,df) { _A = SET(3,_A); } /* SET 3,A */ + +OP(cb,e0) { _B = SET(4,_B); } /* SET 4,B */ +OP(cb,e1) { _C = SET(4,_C); } /* SET 4,C */ +OP(cb,e2) { _D = SET(4,_D); } /* SET 4,D */ +OP(cb,e3) { _E = SET(4,_E); } /* SET 4,E */ +OP(cb,e4) { _H = SET(4,_H); } /* SET 4,H */ +OP(cb,e5) { _L = SET(4,_L); } /* SET 4,L */ +OP(cb,e6) { WM( _HL, SET(4,RM(_HL)) ); } /* SET 4,(HL) */ +OP(cb,e7) { _A = SET(4,_A); } /* SET 4,A */ + +OP(cb,e8) { _B = SET(5,_B); } /* SET 5,B */ +OP(cb,e9) { _C = SET(5,_C); } /* SET 5,C */ +OP(cb,ea) { _D = SET(5,_D); } /* SET 5,D */ +OP(cb,eb) { _E = SET(5,_E); } /* SET 5,E */ +OP(cb,ec) { _H = SET(5,_H); } /* SET 5,H */ +OP(cb,ed) { _L = SET(5,_L); } /* SET 5,L */ +OP(cb,ee) { WM( _HL, SET(5,RM(_HL)) ); } /* SET 5,(HL) */ +OP(cb,ef) { _A = SET(5,_A); } /* SET 5,A */ + +OP(cb,f0) { _B = SET(6,_B); } /* SET 6,B */ +OP(cb,f1) { _C = SET(6,_C); } /* SET 6,C */ +OP(cb,f2) { _D = SET(6,_D); } /* SET 6,D */ +OP(cb,f3) { _E = SET(6,_E); } /* SET 6,E */ +OP(cb,f4) { _H = SET(6,_H); } /* SET 6,H */ +OP(cb,f5) { _L = SET(6,_L); } /* SET 6,L */ +OP(cb,f6) { WM( _HL, SET(6,RM(_HL)) ); } /* SET 6,(HL) */ +OP(cb,f7) { _A = SET(6,_A); } /* SET 6,A */ + +OP(cb,f8) { _B = SET(7,_B); } /* SET 7,B */ +OP(cb,f9) { _C = SET(7,_C); } /* SET 7,C */ +OP(cb,fa) { _D = SET(7,_D); } /* SET 7,D */ +OP(cb,fb) { _E = SET(7,_E); } /* SET 7,E */ +OP(cb,fc) { _H = SET(7,_H); } /* SET 7,H */ +OP(cb,fd) { _L = SET(7,_L); } /* SET 7,L */ +OP(cb,fe) { WM( _HL, SET(7,RM(_HL)) ); } /* SET 7,(HL) */ +OP(cb,ff) { _A = SET(7,_A); } /* SET 7,A */ + + +/********************************************************** +* opcodes with DD/FD CB prefix +* rotate, shift and bit operations with (IX+o) +**********************************************************/ +OP(xycb,00) { _B = RLC( RM(EA) ); WM( EA,_B ); } /* RLC B=(XY+o) */ +OP(xycb,01) { _C = RLC( RM(EA) ); WM( EA,_C ); } /* RLC C=(XY+o) */ +OP(xycb,02) { _D = RLC( RM(EA) ); WM( EA,_D ); } /* RLC D=(XY+o) */ +OP(xycb,03) { _E = RLC( RM(EA) ); WM( EA,_E ); } /* RLC E=(XY+o) */ +OP(xycb,04) { _H = RLC( RM(EA) ); WM( EA,_H ); } /* RLC H=(XY+o) */ +OP(xycb,05) { _L = RLC( RM(EA) ); WM( EA,_L ); } /* RLC L=(XY+o) */ +OP(xycb,06) { WM( EA, RLC( RM(EA) ) ); } /* RLC (XY+o) */ +OP(xycb,07) { _A = RLC( RM(EA) ); WM( EA,_A ); } /* RLC A=(XY+o) */ + +OP(xycb,08) { _B = RRC( RM(EA) ); WM( EA,_B ); } /* RRC B=(XY+o) */ +OP(xycb,09) { _C = RRC( RM(EA) ); WM( EA,_C ); } /* RRC C=(XY+o) */ +OP(xycb,0a) { _D = RRC( RM(EA) ); WM( EA,_D ); } /* RRC D=(XY+o) */ +OP(xycb,0b) { _E = RRC( RM(EA) ); WM( EA,_E ); } /* RRC E=(XY+o) */ +OP(xycb,0c) { _H = RRC( RM(EA) ); WM( EA,_H ); } /* RRC H=(XY+o) */ +OP(xycb,0d) { _L = RRC( RM(EA) ); WM( EA,_L ); } /* RRC L=(XY+o) */ +OP(xycb,0e) { WM( EA,RRC( RM(EA) ) ); } /* RRC (XY+o) */ +OP(xycb,0f) { _A = RRC( RM(EA) ); WM( EA,_A ); } /* RRC A=(XY+o) */ + +OP(xycb,10) { _B = RL( RM(EA) ); WM( EA,_B ); } /* RL B=(XY+o) */ +OP(xycb,11) { _C = RL( RM(EA) ); WM( EA,_C ); } /* RL C=(XY+o) */ +OP(xycb,12) { _D = RL( RM(EA) ); WM( EA,_D ); } /* RL D=(XY+o) */ +OP(xycb,13) { _E = RL( RM(EA) ); WM( EA,_E ); } /* RL E=(XY+o) */ +OP(xycb,14) { _H = RL( RM(EA) ); WM( EA,_H ); } /* RL H=(XY+o) */ +OP(xycb,15) { _L = RL( RM(EA) ); WM( EA,_L ); } /* RL L=(XY+o) */ +OP(xycb,16) { WM( EA,RL( RM(EA) ) ); } /* RL (XY+o) */ +OP(xycb,17) { _A = RL( RM(EA) ); WM( EA,_A ); } /* RL A=(XY+o) */ + +OP(xycb,18) { _B = RR( RM(EA) ); WM( EA,_B ); } /* RR B=(XY+o) */ +OP(xycb,19) { _C = RR( RM(EA) ); WM( EA,_C ); } /* RR C=(XY+o) */ +OP(xycb,1a) { _D = RR( RM(EA) ); WM( EA,_D ); } /* RR D=(XY+o) */ +OP(xycb,1b) { _E = RR( RM(EA) ); WM( EA,_E ); } /* RR E=(XY+o) */ +OP(xycb,1c) { _H = RR( RM(EA) ); WM( EA,_H ); } /* RR H=(XY+o) */ +OP(xycb,1d) { _L = RR( RM(EA) ); WM( EA,_L ); } /* RR L=(XY+o) */ +OP(xycb,1e) { WM( EA,RR( RM(EA) ) ); } /* RR (XY+o) */ +OP(xycb,1f) { _A = RR( RM(EA) ); WM( EA,_A ); } /* RR A=(XY+o) */ + +OP(xycb,20) { _B = SLA( RM(EA) ); WM( EA,_B ); } /* SLA B=(XY+o) */ +OP(xycb,21) { _C = SLA( RM(EA) ); WM( EA,_C ); } /* SLA C=(XY+o) */ +OP(xycb,22) { _D = SLA( RM(EA) ); WM( EA,_D ); } /* SLA D=(XY+o) */ +OP(xycb,23) { _E = SLA( RM(EA) ); WM( EA,_E ); } /* SLA E=(XY+o) */ +OP(xycb,24) { _H = SLA( RM(EA) ); WM( EA,_H ); } /* SLA H=(XY+o) */ +OP(xycb,25) { _L = SLA( RM(EA) ); WM( EA,_L ); } /* SLA L=(XY+o) */ +OP(xycb,26) { WM( EA,SLA( RM(EA) ) ); } /* SLA (XY+o) */ +OP(xycb,27) { _A = SLA( RM(EA) ); WM( EA,_A ); } /* SLA A=(XY+o) */ + +OP(xycb,28) { _B = SRA( RM(EA) ); WM( EA,_B ); } /* SRA B=(XY+o) */ +OP(xycb,29) { _C = SRA( RM(EA) ); WM( EA,_C ); } /* SRA C=(XY+o) */ +OP(xycb,2a) { _D = SRA( RM(EA) ); WM( EA,_D ); } /* SRA D=(XY+o) */ +OP(xycb,2b) { _E = SRA( RM(EA) ); WM( EA,_E ); } /* SRA E=(XY+o) */ +OP(xycb,2c) { _H = SRA( RM(EA) ); WM( EA,_H ); } /* SRA H=(XY+o) */ +OP(xycb,2d) { _L = SRA( RM(EA) ); WM( EA,_L ); } /* SRA L=(XY+o) */ +OP(xycb,2e) { WM( EA,SRA( RM(EA) ) ); } /* SRA (XY+o) */ +OP(xycb,2f) { _A = SRA( RM(EA) ); WM( EA,_A ); } /* SRA A=(XY+o) */ + +OP(xycb,30) { _B = SLL( RM(EA) ); WM( EA,_B ); } /* SLL B=(XY+o) */ +OP(xycb,31) { _C = SLL( RM(EA) ); WM( EA,_C ); } /* SLL C=(XY+o) */ +OP(xycb,32) { _D = SLL( RM(EA) ); WM( EA,_D ); } /* SLL D=(XY+o) */ +OP(xycb,33) { _E = SLL( RM(EA) ); WM( EA,_E ); } /* SLL E=(XY+o) */ +OP(xycb,34) { _H = SLL( RM(EA) ); WM( EA,_H ); } /* SLL H=(XY+o) */ +OP(xycb,35) { _L = SLL( RM(EA) ); WM( EA,_L ); } /* SLL L=(XY+o) */ +OP(xycb,36) { WM( EA,SLL( RM(EA) ) ); } /* SLL (XY+o) */ +OP(xycb,37) { _A = SLL( RM(EA) ); WM( EA,_A ); } /* SLL A=(XY+o) */ + +OP(xycb,38) { _B = SRL( RM(EA) ); WM( EA,_B ); } /* SRL B=(XY+o) */ +OP(xycb,39) { _C = SRL( RM(EA) ); WM( EA,_C ); } /* SRL C=(XY+o) */ +OP(xycb,3a) { _D = SRL( RM(EA) ); WM( EA,_D ); } /* SRL D=(XY+o) */ +OP(xycb,3b) { _E = SRL( RM(EA) ); WM( EA,_E ); } /* SRL E=(XY+o) */ +OP(xycb,3c) { _H = SRL( RM(EA) ); WM( EA,_H ); } /* SRL H=(XY+o) */ +OP(xycb,3d) { _L = SRL( RM(EA) ); WM( EA,_L ); } /* SRL L=(XY+o) */ +OP(xycb,3e) { WM( EA,SRL( RM(EA) ) ); } /* SRL (XY+o) */ +OP(xycb,3f) { _A = SRL( RM(EA) ); WM( EA,_A ); } /* SRL A=(XY+o) */ + +OP(xycb,40) { xycb_46(); } /* BIT 0,B=(XY+o) */ +OP(xycb,41) { xycb_46(); } /* BIT 0,C=(XY+o) */ +OP(xycb,42) { xycb_46(); } /* BIT 0,D=(XY+o) */ +OP(xycb,43) { xycb_46(); } /* BIT 0,E=(XY+o) */ +OP(xycb,44) { xycb_46(); } /* BIT 0,H=(XY+o) */ +OP(xycb,45) { xycb_46(); } /* BIT 0,L=(XY+o) */ +OP(xycb,46) { BIT_XY(0,RM(EA)); } /* BIT 0,(XY+o) */ +OP(xycb,47) { xycb_46(); } /* BIT 0,A=(XY+o) */ + +OP(xycb,48) { xycb_4e(); } /* BIT 1,B=(XY+o) */ +OP(xycb,49) { xycb_4e(); } /* BIT 1,C=(XY+o) */ +OP(xycb,4a) { xycb_4e(); } /* BIT 1,D=(XY+o) */ +OP(xycb,4b) { xycb_4e(); } /* BIT 1,E=(XY+o) */ +OP(xycb,4c) { xycb_4e(); } /* BIT 1,H=(XY+o) */ +OP(xycb,4d) { xycb_4e(); } /* BIT 1,L=(XY+o) */ +OP(xycb,4e) { BIT_XY(1,RM(EA)); } /* BIT 1,(XY+o) */ +OP(xycb,4f) { xycb_4e(); } /* BIT 1,A=(XY+o) */ + +OP(xycb,50) { xycb_56(); } /* BIT 2,B=(XY+o) */ +OP(xycb,51) { xycb_56(); } /* BIT 2,C=(XY+o) */ +OP(xycb,52) { xycb_56(); } /* BIT 2,D=(XY+o) */ +OP(xycb,53) { xycb_56(); } /* BIT 2,E=(XY+o) */ +OP(xycb,54) { xycb_56(); } /* BIT 2,H=(XY+o) */ +OP(xycb,55) { xycb_56(); } /* BIT 2,L=(XY+o) */ +OP(xycb,56) { BIT_XY(2,RM(EA)); } /* BIT 2,(XY+o) */ +OP(xycb,57) { xycb_56(); } /* BIT 2,A=(XY+o) */ + +OP(xycb,58) { xycb_5e(); } /* BIT 3,B=(XY+o) */ +OP(xycb,59) { xycb_5e(); } /* BIT 3,C=(XY+o) */ +OP(xycb,5a) { xycb_5e(); } /* BIT 3,D=(XY+o) */ +OP(xycb,5b) { xycb_5e(); } /* BIT 3,E=(XY+o) */ +OP(xycb,5c) { xycb_5e(); } /* BIT 3,H=(XY+o) */ +OP(xycb,5d) { xycb_5e(); } /* BIT 3,L=(XY+o) */ +OP(xycb,5e) { BIT_XY(3,RM(EA)); } /* BIT 3,(XY+o) */ +OP(xycb,5f) { xycb_5e(); } /* BIT 3,A=(XY+o) */ + +OP(xycb,60) { xycb_66(); } /* BIT 4,B=(XY+o) */ +OP(xycb,61) { xycb_66(); } /* BIT 4,C=(XY+o) */ +OP(xycb,62) { xycb_66(); } /* BIT 4,D=(XY+o) */ +OP(xycb,63) { xycb_66(); } /* BIT 4,E=(XY+o) */ +OP(xycb,64) { xycb_66(); } /* BIT 4,H=(XY+o) */ +OP(xycb,65) { xycb_66(); } /* BIT 4,L=(XY+o) */ +OP(xycb,66) { BIT_XY(4,RM(EA)); } /* BIT 4,(XY+o) */ +OP(xycb,67) { xycb_66(); } /* BIT 4,A=(XY+o) */ + +OP(xycb,68) { xycb_6e(); } /* BIT 5,B=(XY+o) */ +OP(xycb,69) { xycb_6e(); } /* BIT 5,C=(XY+o) */ +OP(xycb,6a) { xycb_6e(); } /* BIT 5,D=(XY+o) */ +OP(xycb,6b) { xycb_6e(); } /* BIT 5,E=(XY+o) */ +OP(xycb,6c) { xycb_6e(); } /* BIT 5,H=(XY+o) */ +OP(xycb,6d) { xycb_6e(); } /* BIT 5,L=(XY+o) */ +OP(xycb,6e) { BIT_XY(5,RM(EA)); } /* BIT 5,(XY+o) */ +OP(xycb,6f) { xycb_6e(); } /* BIT 5,A=(XY+o) */ + +OP(xycb,70) { xycb_76(); } /* BIT 6,B=(XY+o) */ +OP(xycb,71) { xycb_76(); } /* BIT 6,C=(XY+o) */ +OP(xycb,72) { xycb_76(); } /* BIT 6,D=(XY+o) */ +OP(xycb,73) { xycb_76(); } /* BIT 6,E=(XY+o) */ +OP(xycb,74) { xycb_76(); } /* BIT 6,H=(XY+o) */ +OP(xycb,75) { xycb_76(); } /* BIT 6,L=(XY+o) */ +OP(xycb,76) { BIT_XY(6,RM(EA)); } /* BIT 6,(XY+o) */ +OP(xycb,77) { xycb_76(); } /* BIT 6,A=(XY+o) */ + +OP(xycb,78) { xycb_7e(); } /* BIT 7,B=(XY+o) */ +OP(xycb,79) { xycb_7e(); } /* BIT 7,C=(XY+o) */ +OP(xycb,7a) { xycb_7e(); } /* BIT 7,D=(XY+o) */ +OP(xycb,7b) { xycb_7e(); } /* BIT 7,E=(XY+o) */ +OP(xycb,7c) { xycb_7e(); } /* BIT 7,H=(XY+o) */ +OP(xycb,7d) { xycb_7e(); } /* BIT 7,L=(XY+o) */ +OP(xycb,7e) { BIT_XY(7,RM(EA)); } /* BIT 7,(XY+o) */ +OP(xycb,7f) { xycb_7e(); } /* BIT 7,A=(XY+o) */ + +OP(xycb,80) { _B = RES(0, RM(EA) ); WM( EA,_B ); } /* RES 0,B=(XY+o) */ +OP(xycb,81) { _C = RES(0, RM(EA) ); WM( EA,_C ); } /* RES 0,C=(XY+o) */ +OP(xycb,82) { _D = RES(0, RM(EA) ); WM( EA,_D ); } /* RES 0,D=(XY+o) */ +OP(xycb,83) { _E = RES(0, RM(EA) ); WM( EA,_E ); } /* RES 0,E=(XY+o) */ +OP(xycb,84) { _H = RES(0, RM(EA) ); WM( EA,_H ); } /* RES 0,H=(XY+o) */ +OP(xycb,85) { _L = RES(0, RM(EA) ); WM( EA,_L ); } /* RES 0,L=(XY+o) */ +OP(xycb,86) { WM( EA, RES(0,RM(EA)) ); } /* RES 0,(XY+o) */ +OP(xycb,87) { _A = RES(0, RM(EA) ); WM( EA,_A ); } /* RES 0,A=(XY+o) */ + +OP(xycb,88) { _B = RES(1, RM(EA) ); WM( EA,_B ); } /* RES 1,B=(XY+o) */ +OP(xycb,89) { _C = RES(1, RM(EA) ); WM( EA,_C ); } /* RES 1,C=(XY+o) */ +OP(xycb,8a) { _D = RES(1, RM(EA) ); WM( EA,_D ); } /* RES 1,D=(XY+o) */ +OP(xycb,8b) { _E = RES(1, RM(EA) ); WM( EA,_E ); } /* RES 1,E=(XY+o) */ +OP(xycb,8c) { _H = RES(1, RM(EA) ); WM( EA,_H ); } /* RES 1,H=(XY+o) */ +OP(xycb,8d) { _L = RES(1, RM(EA) ); WM( EA,_L ); } /* RES 1,L=(XY+o) */ +OP(xycb,8e) { WM( EA, RES(1,RM(EA)) ); } /* RES 1,(XY+o) */ +OP(xycb,8f) { _A = RES(1, RM(EA) ); WM( EA,_A ); } /* RES 1,A=(XY+o) */ + +OP(xycb,90) { _B = RES(2, RM(EA) ); WM( EA,_B ); } /* RES 2,B=(XY+o) */ +OP(xycb,91) { _C = RES(2, RM(EA) ); WM( EA,_C ); } /* RES 2,C=(XY+o) */ +OP(xycb,92) { _D = RES(2, RM(EA) ); WM( EA,_D ); } /* RES 2,D=(XY+o) */ +OP(xycb,93) { _E = RES(2, RM(EA) ); WM( EA,_E ); } /* RES 2,E=(XY+o) */ +OP(xycb,94) { _H = RES(2, RM(EA) ); WM( EA,_H ); } /* RES 2,H=(XY+o) */ +OP(xycb,95) { _L = RES(2, RM(EA) ); WM( EA,_L ); } /* RES 2,L=(XY+o) */ +OP(xycb,96) { WM( EA, RES(2,RM(EA)) ); } /* RES 2,(XY+o) */ +OP(xycb,97) { _A = RES(2, RM(EA) ); WM( EA,_A ); } /* RES 2,A=(XY+o) */ + +OP(xycb,98) { _B = RES(3, RM(EA) ); WM( EA,_B ); } /* RES 3,B=(XY+o) */ +OP(xycb,99) { _C = RES(3, RM(EA) ); WM( EA,_C ); } /* RES 3,C=(XY+o) */ +OP(xycb,9a) { _D = RES(3, RM(EA) ); WM( EA,_D ); } /* RES 3,D=(XY+o) */ +OP(xycb,9b) { _E = RES(3, RM(EA) ); WM( EA,_E ); } /* RES 3,E=(XY+o) */ +OP(xycb,9c) { _H = RES(3, RM(EA) ); WM( EA,_H ); } /* RES 3,H=(XY+o) */ +OP(xycb,9d) { _L = RES(3, RM(EA) ); WM( EA,_L ); } /* RES 3,L=(XY+o) */ +OP(xycb,9e) { WM( EA, RES(3,RM(EA)) ); } /* RES 3,(XY+o) */ +OP(xycb,9f) { _A = RES(3, RM(EA) ); WM( EA,_A ); } /* RES 3,A=(XY+o) */ + +OP(xycb,a0) { _B = RES(4, RM(EA) ); WM( EA,_B ); } /* RES 4,B=(XY+o) */ +OP(xycb,a1) { _C = RES(4, RM(EA) ); WM( EA,_C ); } /* RES 4,C=(XY+o) */ +OP(xycb,a2) { _D = RES(4, RM(EA) ); WM( EA,_D ); } /* RES 4,D=(XY+o) */ +OP(xycb,a3) { _E = RES(4, RM(EA) ); WM( EA,_E ); } /* RES 4,E=(XY+o) */ +OP(xycb,a4) { _H = RES(4, RM(EA) ); WM( EA,_H ); } /* RES 4,H=(XY+o) */ +OP(xycb,a5) { _L = RES(4, RM(EA) ); WM( EA,_L ); } /* RES 4,L=(XY+o) */ +OP(xycb,a6) { WM( EA, RES(4,RM(EA)) ); } /* RES 4,(XY+o) */ +OP(xycb,a7) { _A = RES(4, RM(EA) ); WM( EA,_A ); } /* RES 4,A=(XY+o) */ + +OP(xycb,a8) { _B = RES(5, RM(EA) ); WM( EA,_B ); } /* RES 5,B=(XY+o) */ +OP(xycb,a9) { _C = RES(5, RM(EA) ); WM( EA,_C ); } /* RES 5,C=(XY+o) */ +OP(xycb,aa) { _D = RES(5, RM(EA) ); WM( EA,_D ); } /* RES 5,D=(XY+o) */ +OP(xycb,ab) { _E = RES(5, RM(EA) ); WM( EA,_E ); } /* RES 5,E=(XY+o) */ +OP(xycb,ac) { _H = RES(5, RM(EA) ); WM( EA,_H ); } /* RES 5,H=(XY+o) */ +OP(xycb,ad) { _L = RES(5, RM(EA) ); WM( EA,_L ); } /* RES 5,L=(XY+o) */ +OP(xycb,ae) { WM( EA, RES(5,RM(EA)) ); } /* RES 5,(XY+o) */ +OP(xycb,af) { _A = RES(5, RM(EA) ); WM( EA,_A ); } /* RES 5,A=(XY+o) */ + +OP(xycb,b0) { _B = RES(6, RM(EA) ); WM( EA,_B ); } /* RES 6,B=(XY+o) */ +OP(xycb,b1) { _C = RES(6, RM(EA) ); WM( EA,_C ); } /* RES 6,C=(XY+o) */ +OP(xycb,b2) { _D = RES(6, RM(EA) ); WM( EA,_D ); } /* RES 6,D=(XY+o) */ +OP(xycb,b3) { _E = RES(6, RM(EA) ); WM( EA,_E ); } /* RES 6,E=(XY+o) */ +OP(xycb,b4) { _H = RES(6, RM(EA) ); WM( EA,_H ); } /* RES 6,H=(XY+o) */ +OP(xycb,b5) { _L = RES(6, RM(EA) ); WM( EA,_L ); } /* RES 6,L=(XY+o) */ +OP(xycb,b6) { WM( EA, RES(6,RM(EA)) ); } /* RES 6,(XY+o) */ +OP(xycb,b7) { _A = RES(6, RM(EA) ); WM( EA,_A ); } /* RES 6,A=(XY+o) */ + +OP(xycb,b8) { _B = RES(7, RM(EA) ); WM( EA,_B ); } /* RES 7,B=(XY+o) */ +OP(xycb,b9) { _C = RES(7, RM(EA) ); WM( EA,_C ); } /* RES 7,C=(XY+o) */ +OP(xycb,ba) { _D = RES(7, RM(EA) ); WM( EA,_D ); } /* RES 7,D=(XY+o) */ +OP(xycb,bb) { _E = RES(7, RM(EA) ); WM( EA,_E ); } /* RES 7,E=(XY+o) */ +OP(xycb,bc) { _H = RES(7, RM(EA) ); WM( EA,_H ); } /* RES 7,H=(XY+o) */ +OP(xycb,bd) { _L = RES(7, RM(EA) ); WM( EA,_L ); } /* RES 7,L=(XY+o) */ +OP(xycb,be) { WM( EA, RES(7,RM(EA)) ); } /* RES 7,(XY+o) */ +OP(xycb,bf) { _A = RES(7, RM(EA) ); WM( EA,_A ); } /* RES 7,A=(XY+o) */ + +OP(xycb,c0) { _B = SET(0, RM(EA) ); WM( EA,_B ); } /* SET 0,B=(XY+o) */ +OP(xycb,c1) { _C = SET(0, RM(EA) ); WM( EA,_C ); } /* SET 0,C=(XY+o) */ +OP(xycb,c2) { _D = SET(0, RM(EA) ); WM( EA,_D ); } /* SET 0,D=(XY+o) */ +OP(xycb,c3) { _E = SET(0, RM(EA) ); WM( EA,_E ); } /* SET 0,E=(XY+o) */ +OP(xycb,c4) { _H = SET(0, RM(EA) ); WM( EA,_H ); } /* SET 0,H=(XY+o) */ +OP(xycb,c5) { _L = SET(0, RM(EA) ); WM( EA,_L ); } /* SET 0,L=(XY+o) */ +OP(xycb,c6) { WM( EA, SET(0,RM(EA)) ); } /* SET 0,(XY+o) */ +OP(xycb,c7) { _A = SET(0, RM(EA) ); WM( EA,_A ); } /* SET 0,A=(XY+o) */ + +OP(xycb,c8) { _B = SET(1, RM(EA) ); WM( EA,_B ); } /* SET 1,B=(XY+o) */ +OP(xycb,c9) { _C = SET(1, RM(EA) ); WM( EA,_C ); } /* SET 1,C=(XY+o) */ +OP(xycb,ca) { _D = SET(1, RM(EA) ); WM( EA,_D ); } /* SET 1,D=(XY+o) */ +OP(xycb,cb) { _E = SET(1, RM(EA) ); WM( EA,_E ); } /* SET 1,E=(XY+o) */ +OP(xycb,cc) { _H = SET(1, RM(EA) ); WM( EA,_H ); } /* SET 1,H=(XY+o) */ +OP(xycb,cd) { _L = SET(1, RM(EA) ); WM( EA,_L ); } /* SET 1,L=(XY+o) */ +OP(xycb,ce) { WM( EA, SET(1,RM(EA)) ); } /* SET 1,(XY+o) */ +OP(xycb,cf) { _A = SET(1, RM(EA) ); WM( EA,_A ); } /* SET 1,A=(XY+o) */ + +OP(xycb,d0) { _B = SET(2, RM(EA) ); WM( EA,_B ); } /* SET 2,B=(XY+o) */ +OP(xycb,d1) { _C = SET(2, RM(EA) ); WM( EA,_C ); } /* SET 2,C=(XY+o) */ +OP(xycb,d2) { _D = SET(2, RM(EA) ); WM( EA,_D ); } /* SET 2,D=(XY+o) */ +OP(xycb,d3) { _E = SET(2, RM(EA) ); WM( EA,_E ); } /* SET 2,E=(XY+o) */ +OP(xycb,d4) { _H = SET(2, RM(EA) ); WM( EA,_H ); } /* SET 2,H=(XY+o) */ +OP(xycb,d5) { _L = SET(2, RM(EA) ); WM( EA,_L ); } /* SET 2,L=(XY+o) */ +OP(xycb,d6) { WM( EA, SET(2,RM(EA)) ); } /* SET 2,(XY+o) */ +OP(xycb,d7) { _A = SET(2, RM(EA) ); WM( EA,_A ); } /* SET 2,A=(XY+o) */ + +OP(xycb,d8) { _B = SET(3, RM(EA) ); WM( EA,_B ); } /* SET 3,B=(XY+o) */ +OP(xycb,d9) { _C = SET(3, RM(EA) ); WM( EA,_C ); } /* SET 3,C=(XY+o) */ +OP(xycb,da) { _D = SET(3, RM(EA) ); WM( EA,_D ); } /* SET 3,D=(XY+o) */ +OP(xycb,db) { _E = SET(3, RM(EA) ); WM( EA,_E ); } /* SET 3,E=(XY+o) */ +OP(xycb,dc) { _H = SET(3, RM(EA) ); WM( EA,_H ); } /* SET 3,H=(XY+o) */ +OP(xycb,dd) { _L = SET(3, RM(EA) ); WM( EA,_L ); } /* SET 3,L=(XY+o) */ +OP(xycb,de) { WM( EA, SET(3,RM(EA)) ); } /* SET 3,(XY+o) */ +OP(xycb,df) { _A = SET(3, RM(EA) ); WM( EA,_A ); } /* SET 3,A=(XY+o) */ + +OP(xycb,e0) { _B = SET(4, RM(EA) ); WM( EA,_B ); } /* SET 4,B=(XY+o) */ +OP(xycb,e1) { _C = SET(4, RM(EA) ); WM( EA,_C ); } /* SET 4,C=(XY+o) */ +OP(xycb,e2) { _D = SET(4, RM(EA) ); WM( EA,_D ); } /* SET 4,D=(XY+o) */ +OP(xycb,e3) { _E = SET(4, RM(EA) ); WM( EA,_E ); } /* SET 4,E=(XY+o) */ +OP(xycb,e4) { _H = SET(4, RM(EA) ); WM( EA,_H ); } /* SET 4,H=(XY+o) */ +OP(xycb,e5) { _L = SET(4, RM(EA) ); WM( EA,_L ); } /* SET 4,L=(XY+o) */ +OP(xycb,e6) { WM( EA, SET(4,RM(EA)) ); } /* SET 4,(XY+o) */ +OP(xycb,e7) { _A = SET(4, RM(EA) ); WM( EA,_A ); } /* SET 4,A=(XY+o) */ + +OP(xycb,e8) { _B = SET(5, RM(EA) ); WM( EA,_B ); } /* SET 5,B=(XY+o) */ +OP(xycb,e9) { _C = SET(5, RM(EA) ); WM( EA,_C ); } /* SET 5,C=(XY+o) */ +OP(xycb,ea) { _D = SET(5, RM(EA) ); WM( EA,_D ); } /* SET 5,D=(XY+o) */ +OP(xycb,eb) { _E = SET(5, RM(EA) ); WM( EA,_E ); } /* SET 5,E=(XY+o) */ +OP(xycb,ec) { _H = SET(5, RM(EA) ); WM( EA,_H ); } /* SET 5,H=(XY+o) */ +OP(xycb,ed) { _L = SET(5, RM(EA) ); WM( EA,_L ); } /* SET 5,L=(XY+o) */ +OP(xycb,ee) { WM( EA, SET(5,RM(EA)) ); } /* SET 5,(XY+o) */ +OP(xycb,ef) { _A = SET(5, RM(EA) ); WM( EA,_A ); } /* SET 5,A=(XY+o) */ + +OP(xycb,f0) { _B = SET(6, RM(EA) ); WM( EA,_B ); } /* SET 6,B=(XY+o) */ +OP(xycb,f1) { _C = SET(6, RM(EA) ); WM( EA,_C ); } /* SET 6,C=(XY+o) */ +OP(xycb,f2) { _D = SET(6, RM(EA) ); WM( EA,_D ); } /* SET 6,D=(XY+o) */ +OP(xycb,f3) { _E = SET(6, RM(EA) ); WM( EA,_E ); } /* SET 6,E=(XY+o) */ +OP(xycb,f4) { _H = SET(6, RM(EA) ); WM( EA,_H ); } /* SET 6,H=(XY+o) */ +OP(xycb,f5) { _L = SET(6, RM(EA) ); WM( EA,_L ); } /* SET 6,L=(XY+o) */ +OP(xycb,f6) { WM( EA, SET(6,RM(EA)) ); } /* SET 6,(XY+o) */ +OP(xycb,f7) { _A = SET(6, RM(EA) ); WM( EA,_A ); } /* SET 6,A=(XY+o) */ + +OP(xycb,f8) { _B = SET(7, RM(EA) ); WM( EA,_B ); } /* SET 7,B=(XY+o) */ +OP(xycb,f9) { _C = SET(7, RM(EA) ); WM( EA,_C ); } /* SET 7,C=(XY+o) */ +OP(xycb,fa) { _D = SET(7, RM(EA) ); WM( EA,_D ); } /* SET 7,D=(XY+o) */ +OP(xycb,fb) { _E = SET(7, RM(EA) ); WM( EA,_E ); } /* SET 7,E=(XY+o) */ +OP(xycb,fc) { _H = SET(7, RM(EA) ); WM( EA,_H ); } /* SET 7,H=(XY+o) */ +OP(xycb,fd) { _L = SET(7, RM(EA) ); WM( EA,_L ); } /* SET 7,L=(XY+o) */ +OP(xycb,fe) { WM( EA, SET(7,RM(EA)) ); } /* SET 7,(XY+o) */ +OP(xycb,ff) { _A = SET(7, RM(EA) ); WM( EA,_A ); } /* SET 7,A=(XY+o) */ + +OP(illegal,1) { +} + +/********************************************************** + * IX register related opcodes (DD prefix) + **********************************************************/ +OP(dd,00) { illegal_1(); op_00(); } /* DB DD */ +OP(dd,01) { illegal_1(); op_01(); } /* DB DD */ +OP(dd,02) { illegal_1(); op_02(); } /* DB DD */ +OP(dd,03) { illegal_1(); op_03(); } /* DB DD */ +OP(dd,04) { illegal_1(); op_04(); } /* DB DD */ +OP(dd,05) { illegal_1(); op_05(); } /* DB DD */ +OP(dd,06) { illegal_1(); op_06(); } /* DB DD */ +OP(dd,07) { illegal_1(); op_07(); } /* DB DD */ + +OP(dd,08) { illegal_1(); op_08(); } /* DB DD */ +OP(dd,09) { _R++; ADD16(IX,BC); } /* ADD IX,BC */ +OP(dd,0a) { illegal_1(); op_0a(); } /* DB DD */ +OP(dd,0b) { illegal_1(); op_0b(); } /* DB DD */ +OP(dd,0c) { illegal_1(); op_0c(); } /* DB DD */ +OP(dd,0d) { illegal_1(); op_0d(); } /* DB DD */ +OP(dd,0e) { illegal_1(); op_0e(); } /* DB DD */ +OP(dd,0f) { illegal_1(); op_0f(); } /* DB DD */ + +OP(dd,10) { illegal_1(); op_10(); } /* DB DD */ +OP(dd,11) { illegal_1(); op_11(); } /* DB DD */ +OP(dd,12) { illegal_1(); op_12(); } /* DB DD */ +OP(dd,13) { illegal_1(); op_13(); } /* DB DD */ +OP(dd,14) { illegal_1(); op_14(); } /* DB DD */ +OP(dd,15) { illegal_1(); op_15(); } /* DB DD */ +OP(dd,16) { illegal_1(); op_16(); } /* DB DD */ +OP(dd,17) { illegal_1(); op_17(); } /* DB DD */ + +OP(dd,18) { illegal_1(); op_18(); } /* DB DD */ +OP(dd,19) { _R++; ADD16(IX,DE); } /* ADD IX,DE */ +OP(dd,1a) { illegal_1(); op_1a(); } /* DB DD */ +OP(dd,1b) { illegal_1(); op_1b(); } /* DB DD */ +OP(dd,1c) { illegal_1(); op_1c(); } /* DB DD */ +OP(dd,1d) { illegal_1(); op_1d(); } /* DB DD */ +OP(dd,1e) { illegal_1(); op_1e(); } /* DB DD */ +OP(dd,1f) { illegal_1(); op_1f(); } /* DB DD */ + +OP(dd,20) { illegal_1(); op_20(); } /* DB DD */ +OP(dd,21) { _R++; _IX = ARG16(); } /* LD IX,w */ +OP(dd,22) { _R++; EA = ARG16(); WM16( EA, &Z80.IX ); } /* LD (w),IX */ +OP(dd,23) { _R++; _IX++; } /* INC IX */ +OP(dd,24) { _R++; _HX = INC(_HX); } /* INC HX */ +OP(dd,25) { _R++; _HX = DEC(_HX); } /* DEC HX */ +OP(dd,26) { _R++; _HX = ARG(); } /* LD HX,n */ +OP(dd,27) { illegal_1(); op_27(); } /* DB DD */ + +OP(dd,28) { illegal_1(); op_28(); } /* DB DD */ +OP(dd,29) { _R++; ADD16(IX,IX); } /* ADD IX,IX */ +OP(dd,2a) { _R++; EA = ARG16(); RM16( EA, &Z80.IX ); } /* LD IX,(w) */ +OP(dd,2b) { _R++; _IX--; } /* DEC IX */ +OP(dd,2c) { _R++; _LX = INC(_LX); } /* INC LX */ +OP(dd,2d) { _R++; _LX = DEC(_LX); } /* DEC LX */ +OP(dd,2e) { _R++; _LX = ARG(); } /* LD LX,n */ +OP(dd,2f) { illegal_1(); op_2f(); } /* DB DD */ + +OP(dd,30) { illegal_1(); op_30(); } /* DB DD */ +OP(dd,31) { illegal_1(); op_31(); } /* DB DD */ +OP(dd,32) { illegal_1(); op_32(); } /* DB DD */ +OP(dd,33) { illegal_1(); op_33(); } /* DB DD */ +OP(dd,34) { _R++; EAX; WM( EA, INC(RM(EA)) ); } /* INC (IX+o) */ +OP(dd,35) { _R++; EAX; WM( EA, DEC(RM(EA)) ); } /* DEC (IX+o) */ +OP(dd,36) { _R++; EAX; WM( EA, ARG() ); } /* LD (IX+o),n */ +OP(dd,37) { illegal_1(); op_37(); } /* DB DD */ + +OP(dd,38) { illegal_1(); op_38(); } /* DB DD */ +OP(dd,39) { _R++; ADD16(IX,SP); } /* ADD IX,SP */ +OP(dd,3a) { illegal_1(); op_3a(); } /* DB DD */ +OP(dd,3b) { illegal_1(); op_3b(); } /* DB DD */ +OP(dd,3c) { illegal_1(); op_3c(); } /* DB DD */ +OP(dd,3d) { illegal_1(); op_3d(); } /* DB DD */ +OP(dd,3e) { illegal_1(); op_3e(); } /* DB DD */ +OP(dd,3f) { illegal_1(); op_3f(); } /* DB DD */ + +OP(dd,40) { illegal_1(); op_40(); } /* DB DD */ +OP(dd,41) { illegal_1(); op_41(); } /* DB DD */ +OP(dd,42) { illegal_1(); op_42(); } /* DB DD */ +OP(dd,43) { illegal_1(); op_43(); } /* DB DD */ +OP(dd,44) { _R++; _B = _HX; } /* LD B,HX */ +OP(dd,45) { _R++; _B = _LX; } /* LD B,LX */ +OP(dd,46) { _R++; EAX; _B = RM(EA); } /* LD B,(IX+o) */ +OP(dd,47) { illegal_1(); op_47(); } /* DB DD */ + +OP(dd,48) { illegal_1(); op_48(); } /* DB DD */ +OP(dd,49) { illegal_1(); op_49(); } /* DB DD */ +OP(dd,4a) { illegal_1(); op_4a(); } /* DB DD */ +OP(dd,4b) { illegal_1(); op_4b(); } /* DB DD */ +OP(dd,4c) { _R++; _C = _HX; } /* LD C,HX */ +OP(dd,4d) { _R++; _C = _LX; } /* LD C,LX */ +OP(dd,4e) { _R++; EAX; _C = RM(EA); } /* LD C,(IX+o) */ +OP(dd,4f) { illegal_1(); op_4f(); } /* DB DD */ + +OP(dd,50) { illegal_1(); op_50(); } /* DB DD */ +OP(dd,51) { illegal_1(); op_51(); } /* DB DD */ +OP(dd,52) { illegal_1(); op_52(); } /* DB DD */ +OP(dd,53) { illegal_1(); op_53(); } /* DB DD */ +OP(dd,54) { _R++; _D = _HX; } /* LD D,HX */ +OP(dd,55) { _R++; _D = _LX; } /* LD D,LX */ +OP(dd,56) { _R++; EAX; _D = RM(EA); } /* LD D,(IX+o) */ +OP(dd,57) { illegal_1(); op_57(); } /* DB DD */ + +OP(dd,58) { illegal_1(); op_58(); } /* DB DD */ +OP(dd,59) { illegal_1(); op_59(); } /* DB DD */ +OP(dd,5a) { illegal_1(); op_5a(); } /* DB DD */ +OP(dd,5b) { illegal_1(); op_5b(); } /* DB DD */ +OP(dd,5c) { _R++; _E = _HX; } /* LD E,HX */ +OP(dd,5d) { _R++; _E = _LX; } /* LD E,LX */ +OP(dd,5e) { _R++; EAX; _E = RM(EA); } /* LD E,(IX+o) */ +OP(dd,5f) { illegal_1(); op_5f(); } /* DB DD */ + +OP(dd,60) { _R++; _HX = _B; } /* LD HX,B */ +OP(dd,61) { _R++; _HX = _C; } /* LD HX,C */ +OP(dd,62) { _R++; _HX = _D; } /* LD HX,D */ +OP(dd,63) { _R++; _HX = _E; } /* LD HX,E */ +OP(dd,64) { } /* LD HX,HX */ +OP(dd,65) { _R++; _HX = _LX; } /* LD HX,LX */ +OP(dd,66) { _R++; EAX; _H = RM(EA); } /* LD H,(IX+o) */ +OP(dd,67) { _R++; _HX = _A; } /* LD HX,A */ + +OP(dd,68) { _R++; _LX = _B; } /* LD LX,B */ +OP(dd,69) { _R++; _LX = _C; } /* LD LX,C */ +OP(dd,6a) { _R++; _LX = _D; } /* LD LX,D */ +OP(dd,6b) { _R++; _LX = _E; } /* LD LX,E */ +OP(dd,6c) { _R++; _LX = _HX; } /* LD LX,HX */ +OP(dd,6d) { } /* LD LX,LX */ +OP(dd,6e) { _R++; EAX; _L = RM(EA); } /* LD L,(IX+o) */ +OP(dd,6f) { _R++; _LX = _A; } /* LD LX,A */ + +OP(dd,70) { _R++; EAX; WM( EA, _B ); } /* LD (IX+o),B */ +OP(dd,71) { _R++; EAX; WM( EA, _C ); } /* LD (IX+o),C */ +OP(dd,72) { _R++; EAX; WM( EA, _D ); } /* LD (IX+o),D */ +OP(dd,73) { _R++; EAX; WM( EA, _E ); } /* LD (IX+o),E */ +OP(dd,74) { _R++; EAX; WM( EA, _H ); } /* LD (IX+o),H */ +OP(dd,75) { _R++; EAX; WM( EA, _L ); } /* LD (IX+o),L */ +OP(dd,76) { illegal_1(); op_76(); } /* DB DD */ +OP(dd,77) { _R++; EAX; WM( EA, _A ); } /* LD (IX+o),A */ + +OP(dd,78) { illegal_1(); op_78(); } /* DB DD */ +OP(dd,79) { illegal_1(); op_79(); } /* DB DD */ +OP(dd,7a) { illegal_1(); op_7a(); } /* DB DD */ +OP(dd,7b) { illegal_1(); op_7b(); } /* DB DD */ +OP(dd,7c) { _R++; _A = _HX; } /* LD A,HX */ +OP(dd,7d) { _R++; _A = _LX; } /* LD A,LX */ +OP(dd,7e) { _R++; EAX; _A = RM(EA); } /* LD A,(IX+o) */ +OP(dd,7f) { illegal_1(); op_7f(); } /* DB DD */ + +OP(dd,80) { illegal_1(); op_80(); } /* DB DD */ +OP(dd,81) { illegal_1(); op_81(); } /* DB DD */ +OP(dd,82) { illegal_1(); op_82(); } /* DB DD */ +OP(dd,83) { illegal_1(); op_83(); } /* DB DD */ +OP(dd,84) { _R++; ADD(_HX); } /* ADD A,HX */ +OP(dd,85) { _R++; ADD(_LX); } /* ADD A,LX */ +OP(dd,86) { _R++; EAX; ADD(RM(EA)); } /* ADD A,(IX+o) */ +OP(dd,87) { illegal_1(); op_87(); } /* DB DD */ + +OP(dd,88) { illegal_1(); op_88(); } /* DB DD */ +OP(dd,89) { illegal_1(); op_89(); } /* DB DD */ +OP(dd,8a) { illegal_1(); op_8a(); } /* DB DD */ +OP(dd,8b) { illegal_1(); op_8b(); } /* DB DD */ +OP(dd,8c) { _R++; ADC(_HX); } /* ADC A,HX */ +OP(dd,8d) { _R++; ADC(_LX); } /* ADC A,LX */ +OP(dd,8e) { _R++; EAX; ADC(RM(EA)); } /* ADC A,(IX+o) */ +OP(dd,8f) { illegal_1(); op_8f(); } /* DB DD */ + +OP(dd,90) { illegal_1(); op_90(); } /* DB DD */ +OP(dd,91) { illegal_1(); op_91(); } /* DB DD */ +OP(dd,92) { illegal_1(); op_92(); } /* DB DD */ +OP(dd,93) { illegal_1(); op_93(); } /* DB DD */ +OP(dd,94) { _R++; SUB(_HX); } /* SUB HX */ +OP(dd,95) { _R++; SUB(_LX); } /* SUB LX */ +OP(dd,96) { _R++; EAX; SUB(RM(EA)); } /* SUB (IX+o) */ +OP(dd,97) { illegal_1(); op_97(); } /* DB DD */ + +OP(dd,98) { illegal_1(); op_98(); } /* DB DD */ +OP(dd,99) { illegal_1(); op_99(); } /* DB DD */ +OP(dd,9a) { illegal_1(); op_9a(); } /* DB DD */ +OP(dd,9b) { illegal_1(); op_9b(); } /* DB DD */ +OP(dd,9c) { _R++; SBC(_HX); } /* SBC A,HX */ +OP(dd,9d) { _R++; SBC(_LX); } /* SBC A,LX */ +OP(dd,9e) { _R++; EAX; SBC(RM(EA)); } /* SBC A,(IX+o) */ +OP(dd,9f) { illegal_1(); op_9f(); } /* DB DD */ + +OP(dd,a0) { illegal_1(); op_a0(); } /* DB DD */ +OP(dd,a1) { illegal_1(); op_a1(); } /* DB DD */ +OP(dd,a2) { illegal_1(); op_a2(); } /* DB DD */ +OP(dd,a3) { illegal_1(); op_a3(); } /* DB DD */ +OP(dd,a4) { _R++; AND(_HX); } /* AND HX */ +OP(dd,a5) { _R++; AND(_LX); } /* AND LX */ +OP(dd,a6) { _R++; EAX; AND(RM(EA)); } /* AND (IX+o) */ +OP(dd,a7) { illegal_1(); op_a7(); } /* DB DD */ + +OP(dd,a8) { illegal_1(); op_a8(); } /* DB DD */ +OP(dd,a9) { illegal_1(); op_a9(); } /* DB DD */ +OP(dd,aa) { illegal_1(); op_aa(); } /* DB DD */ +OP(dd,ab) { illegal_1(); op_ab(); } /* DB DD */ +OP(dd,ac) { _R++; XOR(_HX); } /* XOR HX */ +OP(dd,ad) { _R++; XOR(_LX); } /* XOR LX */ +OP(dd,ae) { _R++; EAX; XOR(RM(EA)); } /* XOR (IX+o) */ +OP(dd,af) { illegal_1(); op_af(); } /* DB DD */ + +OP(dd,b0) { illegal_1(); op_b0(); } /* DB DD */ +OP(dd,b1) { illegal_1(); op_b1(); } /* DB DD */ +OP(dd,b2) { illegal_1(); op_b2(); } /* DB DD */ +OP(dd,b3) { illegal_1(); op_b3(); } /* DB DD */ +OP(dd,b4) { _R++; OR(_HX); } /* OR HX */ +OP(dd,b5) { _R++; OR(_LX); } /* OR LX */ +OP(dd,b6) { _R++; EAX; OR(RM(EA)); } /* OR (IX+o) */ +OP(dd,b7) { illegal_1(); op_b7(); } /* DB DD */ + +OP(dd,b8) { illegal_1(); op_b8(); } /* DB DD */ +OP(dd,b9) { illegal_1(); op_b9(); } /* DB DD */ +OP(dd,ba) { illegal_1(); op_ba(); } /* DB DD */ +OP(dd,bb) { illegal_1(); op_bb(); } /* DB DD */ +OP(dd,bc) { _R++; CP(_HX); } /* CP HX */ +OP(dd,bd) { _R++; CP(_LX); } /* CP LX */ +OP(dd,be) { _R++; EAX; CP(RM(EA)); } /* CP (IX+o) */ +OP(dd,bf) { illegal_1(); op_bf(); } /* DB DD */ + +OP(dd,c0) { illegal_1(); op_c0(); } /* DB DD */ +OP(dd,c1) { illegal_1(); op_c1(); } /* DB DD */ +OP(dd,c2) { illegal_1(); op_c2(); } /* DB DD */ +OP(dd,c3) { illegal_1(); op_c3(); } /* DB DD */ +OP(dd,c4) { illegal_1(); op_c4(); } /* DB DD */ +OP(dd,c5) { illegal_1(); op_c5(); } /* DB DD */ +OP(dd,c6) { illegal_1(); op_c6(); } /* DB DD */ +OP(dd,c7) { illegal_1(); op_c7(); } /* DB DD */ + +OP(dd,c8) { illegal_1(); op_c8(); } /* DB DD */ +OP(dd,c9) { illegal_1(); op_c9(); } /* DB DD */ +OP(dd,ca) { illegal_1(); op_ca(); } /* DB DD */ +OP(dd,cb) { _R++; EAX; EXEC(xycb,ARG()); } /* ** DD CB xx */ +OP(dd,cc) { illegal_1(); op_cc(); } /* DB DD */ +OP(dd,cd) { illegal_1(); op_cd(); } /* DB DD */ +OP(dd,ce) { illegal_1(); op_ce(); } /* DB DD */ +OP(dd,cf) { illegal_1(); op_cf(); } /* DB DD */ + +OP(dd,d0) { illegal_1(); op_d0(); } /* DB DD */ +OP(dd,d1) { illegal_1(); op_d1(); } /* DB DD */ +OP(dd,d2) { illegal_1(); op_d2(); } /* DB DD */ +OP(dd,d3) { illegal_1(); op_d3(); } /* DB DD */ +OP(dd,d4) { illegal_1(); op_d4(); } /* DB DD */ +OP(dd,d5) { illegal_1(); op_d5(); } /* DB DD */ +OP(dd,d6) { illegal_1(); op_d6(); } /* DB DD */ +OP(dd,d7) { illegal_1(); op_d7(); } /* DB DD */ + +OP(dd,d8) { illegal_1(); op_d8(); } /* DB DD */ +OP(dd,d9) { illegal_1(); op_d9(); } /* DB DD */ +OP(dd,da) { illegal_1(); op_da(); } /* DB DD */ +OP(dd,db) { illegal_1(); op_db(); } /* DB DD */ +OP(dd,dc) { illegal_1(); op_dc(); } /* DB DD */ +OP(dd,dd) { illegal_1(); op_dd(); } /* DB DD */ +OP(dd,de) { illegal_1(); op_de(); } /* DB DD */ +OP(dd,df) { illegal_1(); op_df(); } /* DB DD */ + +OP(dd,e0) { illegal_1(); op_e0(); } /* DB DD */ +OP(dd,e1) { _R++; POP(IX); } /* POP IX */ +OP(dd,e2) { illegal_1(); op_e2(); } /* DB DD */ +OP(dd,e3) { _R++; EXSP(IX); } /* EX (SP),IX */ +OP(dd,e4) { illegal_1(); op_e4(); } /* DB DD */ +OP(dd,e5) { _R++; PUSH( IX ); } /* PUSH IX */ +OP(dd,e6) { illegal_1(); op_e6(); } /* DB DD */ +OP(dd,e7) { illegal_1(); op_e7(); } /* DB DD */ + +OP(dd,e8) { illegal_1(); op_e8(); } /* DB DD */ +OP(dd,e9) { _R++; _PC = _IX; } /* JP (IX) */ +OP(dd,ea) { illegal_1(); op_ea(); } /* DB DD */ +OP(dd,eb) { illegal_1(); op_eb(); } /* DB DD */ +OP(dd,ec) { illegal_1(); op_ec(); } /* DB DD */ +OP(dd,ed) { illegal_1(); op_ed(); } /* DB DD */ +OP(dd,ee) { illegal_1(); op_ee(); } /* DB DD */ +OP(dd,ef) { illegal_1(); op_ef(); } /* DB DD */ + +OP(dd,f0) { illegal_1(); op_f0(); } /* DB DD */ +OP(dd,f1) { illegal_1(); op_f1(); } /* DB DD */ +OP(dd,f2) { illegal_1(); op_f2(); } /* DB DD */ +OP(dd,f3) { illegal_1(); op_f3(); } /* DB DD */ +OP(dd,f4) { illegal_1(); op_f4(); } /* DB DD */ +OP(dd,f5) { illegal_1(); op_f5(); } /* DB DD */ +OP(dd,f6) { illegal_1(); op_f6(); } /* DB DD */ +OP(dd,f7) { illegal_1(); op_f7(); } /* DB DD */ + +OP(dd,f8) { illegal_1(); op_f8(); } /* DB DD */ +OP(dd,f9) { _R++; _SP = _IX; } /* LD SP,IX */ +OP(dd,fa) { illegal_1(); op_fa(); } /* DB DD */ +OP(dd,fb) { illegal_1(); op_fb(); } /* DB DD */ +OP(dd,fc) { illegal_1(); op_fc(); } /* DB DD */ +OP(dd,fd) { illegal_1(); op_fd(); } /* DB DD */ +OP(dd,fe) { illegal_1(); op_fe(); } /* DB DD */ +OP(dd,ff) { illegal_1(); op_ff(); } /* DB DD */ + +/********************************************************** + * IY register related opcodes (FD prefix) + **********************************************************/ +OP(fd,00) { illegal_1(); op_00(); } /* DB FD */ +OP(fd,01) { illegal_1(); op_01(); } /* DB FD */ +OP(fd,02) { illegal_1(); op_02(); } /* DB FD */ +OP(fd,03) { illegal_1(); op_03(); } /* DB FD */ +OP(fd,04) { illegal_1(); op_04(); } /* DB FD */ +OP(fd,05) { illegal_1(); op_05(); } /* DB FD */ +OP(fd,06) { illegal_1(); op_06(); } /* DB FD */ +OP(fd,07) { illegal_1(); op_07(); } /* DB FD */ + +OP(fd,08) { illegal_1(); op_08(); } /* DB FD */ +OP(fd,09) { _R++; ADD16(IY,BC); } /* ADD IY,BC */ +OP(fd,0a) { illegal_1(); op_0a(); } /* DB FD */ +OP(fd,0b) { illegal_1(); op_0b(); } /* DB FD */ +OP(fd,0c) { illegal_1(); op_0c(); } /* DB FD */ +OP(fd,0d) { illegal_1(); op_0d(); } /* DB FD */ +OP(fd,0e) { illegal_1(); op_0e(); } /* DB FD */ +OP(fd,0f) { illegal_1(); op_0f(); } /* DB FD */ + +OP(fd,10) { illegal_1(); op_10(); } /* DB FD */ +OP(fd,11) { illegal_1(); op_11(); } /* DB FD */ +OP(fd,12) { illegal_1(); op_12(); } /* DB FD */ +OP(fd,13) { illegal_1(); op_13(); } /* DB FD */ +OP(fd,14) { illegal_1(); op_14(); } /* DB FD */ +OP(fd,15) { illegal_1(); op_15(); } /* DB FD */ +OP(fd,16) { illegal_1(); op_16(); } /* DB FD */ +OP(fd,17) { illegal_1(); op_17(); } /* DB FD */ + +OP(fd,18) { illegal_1(); op_18(); } /* DB FD */ +OP(fd,19) { _R++; ADD16(IY,DE); } /* ADD IY,DE */ +OP(fd,1a) { illegal_1(); op_1a(); } /* DB FD */ +OP(fd,1b) { illegal_1(); op_1b(); } /* DB FD */ +OP(fd,1c) { illegal_1(); op_1c(); } /* DB FD */ +OP(fd,1d) { illegal_1(); op_1d(); } /* DB FD */ +OP(fd,1e) { illegal_1(); op_1e(); } /* DB FD */ +OP(fd,1f) { illegal_1(); op_1f(); } /* DB FD */ + +OP(fd,20) { illegal_1(); op_20(); } /* DB FD */ +OP(fd,21) { _R++; _IY = ARG16(); } /* LD IY,w */ +OP(fd,22) { _R++; EA = ARG16(); WM16( EA, &Z80.IY ); } /* LD (w),IY */ +OP(fd,23) { _R++; _IY++; } /* INC IY */ +OP(fd,24) { _R++; _HY = INC(_HY); } /* INC HY */ +OP(fd,25) { _R++; _HY = DEC(_HY); } /* DEC HY */ +OP(fd,26) { _R++; _HY = ARG(); } /* LD HY,n */ +OP(fd,27) { illegal_1(); op_27(); } /* DB FD */ + +OP(fd,28) { illegal_1(); op_28(); } /* DB FD */ +OP(fd,29) { _R++; ADD16(IY,IY); } /* ADD IY,IY */ +OP(fd,2a) { _R++; EA = ARG16(); RM16( EA, &Z80.IY ); } /* LD IY,(w) */ +OP(fd,2b) { _R++; _IY--; } /* DEC IY */ +OP(fd,2c) { _R++; _LY = INC(_LY); } /* INC LY */ +OP(fd,2d) { _R++; _LY = DEC(_LY); } /* DEC LY */ +OP(fd,2e) { _R++; _LY = ARG(); } /* LD LY,n */ +OP(fd,2f) { illegal_1(); op_2f(); } /* DB FD */ + +OP(fd,30) { illegal_1(); op_30(); } /* DB FD */ +OP(fd,31) { illegal_1(); op_31(); } /* DB FD */ +OP(fd,32) { illegal_1(); op_32(); } /* DB FD */ +OP(fd,33) { illegal_1(); op_33(); } /* DB FD */ +OP(fd,34) { _R++; EAY; WM( EA, INC(RM(EA)) ); } /* INC (IY+o) */ +OP(fd,35) { _R++; EAY; WM( EA, DEC(RM(EA)) ); } /* DEC (IY+o) */ +OP(fd,36) { _R++; EAY; WM( EA, ARG() ); } /* LD (IY+o),n */ +OP(fd,37) { illegal_1(); op_37(); } /* DB FD */ + +OP(fd,38) { illegal_1(); op_38(); } /* DB FD */ +OP(fd,39) { _R++; ADD16(IY,SP); } /* ADD IY,SP */ +OP(fd,3a) { illegal_1(); op_3a(); } /* DB FD */ +OP(fd,3b) { illegal_1(); op_3b(); } /* DB FD */ +OP(fd,3c) { illegal_1(); op_3c(); } /* DB FD */ +OP(fd,3d) { illegal_1(); op_3d(); } /* DB FD */ +OP(fd,3e) { illegal_1(); op_3e(); } /* DB FD */ +OP(fd,3f) { illegal_1(); op_3f(); } /* DB FD */ + +OP(fd,40) { illegal_1(); op_40(); } /* DB FD */ +OP(fd,41) { illegal_1(); op_41(); } /* DB FD */ +OP(fd,42) { illegal_1(); op_42(); } /* DB FD */ +OP(fd,43) { illegal_1(); op_43(); } /* DB FD */ +OP(fd,44) { _R++; _B = _HY; } /* LD B,HY */ +OP(fd,45) { _R++; _B = _LY; } /* LD B,LY */ +OP(fd,46) { _R++; EAY; _B = RM(EA); } /* LD B,(IY+o) */ +OP(fd,47) { illegal_1(); op_47(); } /* DB FD */ + +OP(fd,48) { illegal_1(); op_48(); } /* DB FD */ +OP(fd,49) { illegal_1(); op_49(); } /* DB FD */ +OP(fd,4a) { illegal_1(); op_4a(); } /* DB FD */ +OP(fd,4b) { illegal_1(); op_4b(); } /* DB FD */ +OP(fd,4c) { _R++; _C = _HY; } /* LD C,HY */ +OP(fd,4d) { _R++; _C = _LY; } /* LD C,LY */ +OP(fd,4e) { _R++; EAY; _C = RM(EA); } /* LD C,(IY+o) */ +OP(fd,4f) { illegal_1(); op_4f(); } /* DB FD */ + +OP(fd,50) { illegal_1(); op_50(); } /* DB FD */ +OP(fd,51) { illegal_1(); op_51(); } /* DB FD */ +OP(fd,52) { illegal_1(); op_52(); } /* DB FD */ +OP(fd,53) { illegal_1(); op_53(); } /* DB FD */ +OP(fd,54) { _R++; _D = _HY; } /* LD D,HY */ +OP(fd,55) { _R++; _D = _LY; } /* LD D,LY */ +OP(fd,56) { _R++; EAY; _D = RM(EA); } /* LD D,(IY+o) */ +OP(fd,57) { illegal_1(); op_57(); } /* DB FD */ + +OP(fd,58) { illegal_1(); op_58(); } /* DB FD */ +OP(fd,59) { illegal_1(); op_59(); } /* DB FD */ +OP(fd,5a) { illegal_1(); op_5a(); } /* DB FD */ +OP(fd,5b) { illegal_1(); op_5b(); } /* DB FD */ +OP(fd,5c) { _R++; _E = _HY; } /* LD E,HY */ +OP(fd,5d) { _R++; _E = _LY; } /* LD E,LY */ +OP(fd,5e) { _R++; EAY; _E = RM(EA); } /* LD E,(IY+o) */ +OP(fd,5f) { illegal_1(); op_5f(); } /* DB FD */ + +OP(fd,60) { _R++; _HY = _B; } /* LD HY,B */ +OP(fd,61) { _R++; _HY = _C; } /* LD HY,C */ +OP(fd,62) { _R++; _HY = _D; } /* LD HY,D */ +OP(fd,63) { _R++; _HY = _E; } /* LD HY,E */ +OP(fd,64) { _R++; } /* LD HY,HY */ +OP(fd,65) { _R++; _HY = _LY; } /* LD HY,LY */ +OP(fd,66) { _R++; EAY; _H = RM(EA); } /* LD H,(IY+o) */ +OP(fd,67) { _R++; _HY = _A; } /* LD HY,A */ + +OP(fd,68) { _R++; _LY = _B; } /* LD LY,B */ +OP(fd,69) { _R++; _LY = _C; } /* LD LY,C */ +OP(fd,6a) { _R++; _LY = _D; } /* LD LY,D */ +OP(fd,6b) { _R++; _LY = _E; } /* LD LY,E */ +OP(fd,6c) { _R++; _LY = _HY; } /* LD LY,HY */ +OP(fd,6d) { _R++; } /* LD LY,LY */ +OP(fd,6e) { _R++; EAY; _L = RM(EA); } /* LD L,(IY+o) */ +OP(fd,6f) { _R++; _LY = _A; } /* LD LY,A */ + +OP(fd,70) { _R++; EAY; WM( EA, _B ); } /* LD (IY+o),B */ +OP(fd,71) { _R++; EAY; WM( EA, _C ); } /* LD (IY+o),C */ +OP(fd,72) { _R++; EAY; WM( EA, _D ); } /* LD (IY+o),D */ +OP(fd,73) { _R++; EAY; WM( EA, _E ); } /* LD (IY+o),E */ +OP(fd,74) { _R++; EAY; WM( EA, _H ); } /* LD (IY+o),H */ +OP(fd,75) { _R++; EAY; WM( EA, _L ); } /* LD (IY+o),L */ +OP(fd,76) { illegal_1(); op_76(); } /* DB FD */ +OP(fd,77) { _R++; EAY; WM( EA, _A ); } /* LD (IY+o),A */ + +OP(fd,78) { illegal_1(); op_78(); } /* DB FD */ +OP(fd,79) { illegal_1(); op_79(); } /* DB FD */ +OP(fd,7a) { illegal_1(); op_7a(); } /* DB FD */ +OP(fd,7b) { illegal_1(); op_7b(); } /* DB FD */ +OP(fd,7c) { _R++; _A = _HY; } /* LD A,HY */ +OP(fd,7d) { _R++; _A = _LY; } /* LD A,LY */ +OP(fd,7e) { _R++; EAY; _A = RM(EA); } /* LD A,(IY+o) */ +OP(fd,7f) { illegal_1(); op_7f(); } /* DB FD */ + +OP(fd,80) { illegal_1(); op_80(); } /* DB FD */ +OP(fd,81) { illegal_1(); op_81(); } /* DB FD */ +OP(fd,82) { illegal_1(); op_82(); } /* DB FD */ +OP(fd,83) { illegal_1(); op_83(); } /* DB FD */ +OP(fd,84) { _R++; ADD(_HY); } /* ADD A,HY */ +OP(fd,85) { _R++; ADD(_LY); } /* ADD A,LY */ +OP(fd,86) { _R++; EAY; ADD(RM(EA)); } /* ADD A,(IY+o) */ +OP(fd,87) { illegal_1(); op_87(); } /* DB FD */ + +OP(fd,88) { illegal_1(); op_88(); } /* DB FD */ +OP(fd,89) { illegal_1(); op_89(); } /* DB FD */ +OP(fd,8a) { illegal_1(); op_8a(); } /* DB FD */ +OP(fd,8b) { illegal_1(); op_8b(); } /* DB FD */ +OP(fd,8c) { _R++; ADC(_HY); } /* ADC A,HY */ +OP(fd,8d) { _R++; ADC(_LY); } /* ADC A,LY */ +OP(fd,8e) { _R++; EAY; ADC(RM(EA)); } /* ADC A,(IY+o) */ +OP(fd,8f) { illegal_1(); op_8f(); } /* DB FD */ + +OP(fd,90) { illegal_1(); op_90(); } /* DB FD */ +OP(fd,91) { illegal_1(); op_91(); } /* DB FD */ +OP(fd,92) { illegal_1(); op_92(); } /* DB FD */ +OP(fd,93) { illegal_1(); op_93(); } /* DB FD */ +OP(fd,94) { _R++; SUB(_HY); } /* SUB HY */ +OP(fd,95) { _R++; SUB(_LY); } /* SUB LY */ +OP(fd,96) { _R++; EAY; SUB(RM(EA)); } /* SUB (IY+o) */ +OP(fd,97) { illegal_1(); op_97(); } /* DB FD */ + +OP(fd,98) { illegal_1(); op_98(); } /* DB FD */ +OP(fd,99) { illegal_1(); op_99(); } /* DB FD */ +OP(fd,9a) { illegal_1(); op_9a(); } /* DB FD */ +OP(fd,9b) { illegal_1(); op_9b(); } /* DB FD */ +OP(fd,9c) { _R++; SBC(_HY); } /* SBC A,HY */ +OP(fd,9d) { _R++; SBC(_LY); } /* SBC A,LY */ +OP(fd,9e) { _R++; EAY; SBC(RM(EA)); } /* SBC A,(IY+o) */ +OP(fd,9f) { illegal_1(); op_9f(); } /* DB FD */ + +OP(fd,a0) { illegal_1(); op_a0(); } /* DB FD */ +OP(fd,a1) { illegal_1(); op_a1(); } /* DB FD */ +OP(fd,a2) { illegal_1(); op_a2(); } /* DB FD */ +OP(fd,a3) { illegal_1(); op_a3(); } /* DB FD */ +OP(fd,a4) { _R++; AND(_HY); } /* AND HY */ +OP(fd,a5) { _R++; AND(_LY); } /* AND LY */ +OP(fd,a6) { _R++; EAY; AND(RM(EA)); } /* AND (IY+o) */ +OP(fd,a7) { illegal_1(); op_a7(); } /* DB FD */ + +OP(fd,a8) { illegal_1(); op_a8(); } /* DB FD */ +OP(fd,a9) { illegal_1(); op_a9(); } /* DB FD */ +OP(fd,aa) { illegal_1(); op_aa(); } /* DB FD */ +OP(fd,ab) { illegal_1(); op_ab(); } /* DB FD */ +OP(fd,ac) { _R++; XOR(_HY); } /* XOR HY */ +OP(fd,ad) { _R++; XOR(_LY); } /* XOR LY */ +OP(fd,ae) { _R++; EAY; XOR(RM(EA)); } /* XOR (IY+o) */ +OP(fd,af) { illegal_1(); op_af(); } /* DB FD */ + +OP(fd,b0) { illegal_1(); op_b0(); } /* DB FD */ +OP(fd,b1) { illegal_1(); op_b1(); } /* DB FD */ +OP(fd,b2) { illegal_1(); op_b2(); } /* DB FD */ +OP(fd,b3) { illegal_1(); op_b3(); } /* DB FD */ +OP(fd,b4) { _R++; OR(_HY); } /* OR HY */ +OP(fd,b5) { _R++; OR(_LY); } /* OR LY */ +OP(fd,b6) { _R++; EAY; OR(RM(EA)); } /* OR (IY+o) */ +OP(fd,b7) { illegal_1(); op_b7(); } /* DB FD */ + +OP(fd,b8) { illegal_1(); op_b8(); } /* DB FD */ +OP(fd,b9) { illegal_1(); op_b9(); } /* DB FD */ +OP(fd,ba) { illegal_1(); op_ba(); } /* DB FD */ +OP(fd,bb) { illegal_1(); op_bb(); } /* DB FD */ +OP(fd,bc) { _R++; CP(_HY); } /* CP HY */ +OP(fd,bd) { _R++; CP(_LY); } /* CP LY */ +OP(fd,be) { _R++; EAY; CP(RM(EA)); } /* CP (IY+o) */ +OP(fd,bf) { illegal_1(); op_bf(); } /* DB FD */ + +OP(fd,c0) { illegal_1(); op_c0(); } /* DB FD */ +OP(fd,c1) { illegal_1(); op_c1(); } /* DB FD */ +OP(fd,c2) { illegal_1(); op_c2(); } /* DB FD */ +OP(fd,c3) { illegal_1(); op_c3(); } /* DB FD */ +OP(fd,c4) { illegal_1(); op_c4(); } /* DB FD */ +OP(fd,c5) { illegal_1(); op_c5(); } /* DB FD */ +OP(fd,c6) { illegal_1(); op_c6(); } /* DB FD */ +OP(fd,c7) { illegal_1(); op_c7(); } /* DB FD */ + +OP(fd,c8) { illegal_1(); op_c8(); } /* DB FD */ +OP(fd,c9) { illegal_1(); op_c9(); } /* DB FD */ +OP(fd,ca) { illegal_1(); op_ca(); } /* DB FD */ +OP(fd,cb) { _R++; EAY; EXEC(xycb,ARG()); } /* ** FD CB xx */ +OP(fd,cc) { illegal_1(); op_cc(); } /* DB FD */ +OP(fd,cd) { illegal_1(); op_cd(); } /* DB FD */ +OP(fd,ce) { illegal_1(); op_ce(); } /* DB FD */ +OP(fd,cf) { illegal_1(); op_cf(); } /* DB FD */ + +OP(fd,d0) { illegal_1(); op_d0(); } /* DB FD */ +OP(fd,d1) { illegal_1(); op_d1(); } /* DB FD */ +OP(fd,d2) { illegal_1(); op_d2(); } /* DB FD */ +OP(fd,d3) { illegal_1(); op_d3(); } /* DB FD */ +OP(fd,d4) { illegal_1(); op_d4(); } /* DB FD */ +OP(fd,d5) { illegal_1(); op_d5(); } /* DB FD */ +OP(fd,d6) { illegal_1(); op_d6(); } /* DB FD */ +OP(fd,d7) { illegal_1(); op_d7(); } /* DB FD */ + +OP(fd,d8) { illegal_1(); op_d8(); } /* DB FD */ +OP(fd,d9) { illegal_1(); op_d9(); } /* DB FD */ +OP(fd,da) { illegal_1(); op_da(); } /* DB FD */ +OP(fd,db) { illegal_1(); op_db(); } /* DB FD */ +OP(fd,dc) { illegal_1(); op_dc(); } /* DB FD */ +OP(fd,dd) { illegal_1(); op_dd(); } /* DB FD */ +OP(fd,de) { illegal_1(); op_de(); } /* DB FD */ +OP(fd,df) { illegal_1(); op_df(); } /* DB FD */ + +OP(fd,e0) { illegal_1(); op_e0(); } /* DB FD */ +OP(fd,e1) { _R++; POP(IY); } /* POP IY */ +OP(fd,e2) { illegal_1(); op_e2(); } /* DB FD */ +OP(fd,e3) { _R++; EXSP(IY); } /* EX (SP),IY */ +OP(fd,e4) { illegal_1(); op_e4(); } /* DB FD */ +OP(fd,e5) { _R++; PUSH( IY ); } /* PUSH IY */ +OP(fd,e6) { illegal_1(); op_e6(); } /* DB FD */ +OP(fd,e7) { illegal_1(); op_e7(); } /* DB FD */ + +OP(fd,e8) { illegal_1(); op_e8(); } /* DB FD */ +OP(fd,e9) { _R++; _PC = _IY; } /* JP (IY) */ +OP(fd,ea) { illegal_1(); op_ea(); } /* DB FD */ +OP(fd,eb) { illegal_1(); op_eb(); } /* DB FD */ +OP(fd,ec) { illegal_1(); op_ec(); } /* DB FD */ +OP(fd,ed) { illegal_1(); op_ed(); } /* DB FD */ +OP(fd,ee) { illegal_1(); op_ee(); } /* DB FD */ +OP(fd,ef) { illegal_1(); op_ef(); } /* DB FD */ + +OP(fd,f0) { illegal_1(); op_f0(); } /* DB FD */ +OP(fd,f1) { illegal_1(); op_f1(); } /* DB FD */ +OP(fd,f2) { illegal_1(); op_f2(); } /* DB FD */ +OP(fd,f3) { illegal_1(); op_f3(); } /* DB FD */ +OP(fd,f4) { illegal_1(); op_f4(); } /* DB FD */ +OP(fd,f5) { illegal_1(); op_f5(); } /* DB FD */ +OP(fd,f6) { illegal_1(); op_f6(); } /* DB FD */ +OP(fd,f7) { illegal_1(); op_f7(); } /* DB FD */ + +OP(fd,f8) { illegal_1(); op_f8(); } /* DB FD */ +OP(fd,f9) { _R++; _SP = _IY; } /* LD SP,IY */ +OP(fd,fa) { illegal_1(); op_fa(); } /* DB FD */ +OP(fd,fb) { illegal_1(); op_fb(); } /* DB FD */ +OP(fd,fc) { illegal_1(); op_fc(); } /* DB FD */ +OP(fd,fd) { illegal_1(); op_fd(); } /* DB FD */ +OP(fd,fe) { illegal_1(); op_fe(); } /* DB FD */ +OP(fd,ff) { illegal_1(); op_ff(); } /* DB FD */ + +OP(illegal,2) +{ +} + +/********************************************************** + * special opcodes (ED prefix) + **********************************************************/ +OP(ed,00) { illegal_2(); } /* DB ED */ +OP(ed,01) { illegal_2(); } /* DB ED */ +OP(ed,02) { illegal_2(); } /* DB ED */ +OP(ed,03) { illegal_2(); } /* DB ED */ +OP(ed,04) { illegal_2(); } /* DB ED */ +OP(ed,05) { illegal_2(); } /* DB ED */ +OP(ed,06) { illegal_2(); } /* DB ED */ +OP(ed,07) { illegal_2(); } /* DB ED */ + +OP(ed,08) { illegal_2(); } /* DB ED */ +OP(ed,09) { illegal_2(); } /* DB ED */ +OP(ed,0a) { illegal_2(); } /* DB ED */ +OP(ed,0b) { illegal_2(); } /* DB ED */ +OP(ed,0c) { illegal_2(); } /* DB ED */ +OP(ed,0d) { illegal_2(); } /* DB ED */ +OP(ed,0e) { illegal_2(); } /* DB ED */ +OP(ed,0f) { illegal_2(); } /* DB ED */ + +OP(ed,10) { illegal_2(); } /* DB ED */ +OP(ed,11) { illegal_2(); } /* DB ED */ +OP(ed,12) { illegal_2(); } /* DB ED */ +OP(ed,13) { illegal_2(); } /* DB ED */ +OP(ed,14) { illegal_2(); } /* DB ED */ +OP(ed,15) { illegal_2(); } /* DB ED */ +OP(ed,16) { illegal_2(); } /* DB ED */ +OP(ed,17) { illegal_2(); } /* DB ED */ + +OP(ed,18) { illegal_2(); } /* DB ED */ +OP(ed,19) { illegal_2(); } /* DB ED */ +OP(ed,1a) { illegal_2(); } /* DB ED */ +OP(ed,1b) { illegal_2(); } /* DB ED */ +OP(ed,1c) { illegal_2(); } /* DB ED */ +OP(ed,1d) { illegal_2(); } /* DB ED */ +OP(ed,1e) { illegal_2(); } /* DB ED */ +OP(ed,1f) { illegal_2(); } /* DB ED */ + +OP(ed,20) { illegal_2(); } /* DB ED */ +OP(ed,21) { illegal_2(); } /* DB ED */ +OP(ed,22) { illegal_2(); } /* DB ED */ +OP(ed,23) { illegal_2(); } /* DB ED */ +OP(ed,24) { illegal_2(); } /* DB ED */ +OP(ed,25) { illegal_2(); } /* DB ED */ +OP(ed,26) { illegal_2(); } /* DB ED */ +OP(ed,27) { illegal_2(); } /* DB ED */ + +OP(ed,28) { illegal_2(); } /* DB ED */ +OP(ed,29) { illegal_2(); } /* DB ED */ +OP(ed,2a) { illegal_2(); } /* DB ED */ +OP(ed,2b) { illegal_2(); } /* DB ED */ +OP(ed,2c) { illegal_2(); } /* DB ED */ +OP(ed,2d) { illegal_2(); } /* DB ED */ +OP(ed,2e) { illegal_2(); } /* DB ED */ +OP(ed,2f) { illegal_2(); } /* DB ED */ + +OP(ed,30) { illegal_2(); } /* DB ED */ +OP(ed,31) { illegal_2(); } /* DB ED */ +OP(ed,32) { illegal_2(); } /* DB ED */ +OP(ed,33) { illegal_2(); } /* DB ED */ +OP(ed,34) { illegal_2(); } /* DB ED */ +OP(ed,35) { illegal_2(); } /* DB ED */ +OP(ed,36) { illegal_2(); } /* DB ED */ +OP(ed,37) { illegal_2(); } /* DB ED */ + +OP(ed,38) { illegal_2(); } /* DB ED */ +OP(ed,39) { illegal_2(); } /* DB ED */ +OP(ed,3a) { illegal_2(); } /* DB ED */ +OP(ed,3b) { illegal_2(); } /* DB ED */ +OP(ed,3c) { illegal_2(); } /* DB ED */ +OP(ed,3d) { illegal_2(); } /* DB ED */ +OP(ed,3e) { illegal_2(); } /* DB ED */ +OP(ed,3f) { illegal_2(); } /* DB ED */ + +OP(ed,40) { _B = IN(_BC); _F = (_F & CF) | SZP[_B]; } /* IN B,(C) */ +OP(ed,41) { OUT(_BC,_B); } /* OUT (C),B */ +OP(ed,42) { SBC16( BC ); } /* SBC HL,BC */ +OP(ed,43) { EA = ARG16(); WM16( EA, &Z80.BC ); } /* LD (w),BC */ +OP(ed,44) { NEG; } /* NEG */ +OP(ed,45) { RETN; } /* RETN; */ +OP(ed,46) { _IM = 0; } /* IM 0 */ +OP(ed,47) { LD_I_A; } /* LD I,A */ + +OP(ed,48) { _C = IN(_BC); _F = (_F & CF) | SZP[_C]; } /* IN C,(C) */ +OP(ed,49) { OUT(_BC,_C); } /* OUT (C),C */ +OP(ed,4a) { ADC16( BC ); } /* ADC HL,BC */ +OP(ed,4b) { EA = ARG16(); RM16( EA, &Z80.BC ); } /* LD BC,(w) */ +OP(ed,4c) { NEG; } /* NEG */ +OP(ed,4d) { RETI; } /* RETI */ +OP(ed,4e) { _IM = 0; } /* IM 0 */ +OP(ed,4f) { LD_R_A; } /* LD R,A */ + +OP(ed,50) { _D = IN(_BC); _F = (_F & CF) | SZP[_D]; } /* IN D,(C) */ +OP(ed,51) { OUT(_BC,_D); } /* OUT (C),D */ +OP(ed,52) { SBC16( DE ); } /* SBC HL,DE */ +OP(ed,53) { EA = ARG16(); WM16( EA, &Z80.DE ); } /* LD (w),DE */ +OP(ed,54) { NEG; } /* NEG */ +OP(ed,55) { RETN; } /* RETN; */ +OP(ed,56) { _IM = 1; } /* IM 1 */ +OP(ed,57) { LD_A_I; } /* LD A,I */ + +OP(ed,58) { _E = IN(_BC); _F = (_F & CF) | SZP[_E]; } /* IN E,(C) */ +OP(ed,59) { OUT(_BC,_E); } /* OUT (C),E */ +OP(ed,5a) { ADC16( DE ); } /* ADC HL,DE */ +OP(ed,5b) { EA = ARG16(); RM16( EA, &Z80.DE ); } /* LD DE,(w) */ +OP(ed,5c) { NEG; } /* NEG */ +OP(ed,5d) { RETI; } /* RETI */ +OP(ed,5e) { _IM = 2; } /* IM 2 */ +OP(ed,5f) { LD_A_R; } /* LD A,R */ + +OP(ed,60) { _H = IN(_BC); _F = (_F & CF) | SZP[_H]; } /* IN H,(C) */ +OP(ed,61) { OUT(_BC,_H); } /* OUT (C),H */ +OP(ed,62) { SBC16( HL ); } /* SBC HL,HL */ +OP(ed,63) { EA = ARG16(); WM16( EA, &Z80.HL ); } /* LD (w),HL */ +OP(ed,64) { NEG; } /* NEG */ +OP(ed,65) { RETN; } /* RETN; */ +OP(ed,66) { _IM = 0; } /* IM 0 */ +OP(ed,67) { RRD; } /* RRD (HL) */ + +OP(ed,68) { _L = IN(_BC); _F = (_F & CF) | SZP[_L]; } /* IN L,(C) */ +OP(ed,69) { OUT(_BC,_L); } /* OUT (C),L */ +OP(ed,6a) { ADC16( HL ); } /* ADC HL,HL */ +OP(ed,6b) { EA = ARG16(); RM16( EA, &Z80.HL ); } /* LD HL,(w) */ +OP(ed,6c) { NEG; } /* NEG */ +OP(ed,6d) { RETI; } /* RETI */ +OP(ed,6e) { _IM = 0; } /* IM 0 */ +OP(ed,6f) { RLD; } /* RLD (HL) */ + +OP(ed,70) { UINT8 res = IN(_BC); _F = (_F & CF) | SZP[res]; } /* IN 0,(C) */ +OP(ed,71) { OUT(_BC,0); } /* OUT (C),0 */ +OP(ed,72) { SBC16( SP ); } /* SBC HL,SP */ +OP(ed,73) { EA = ARG16(); WM16( EA, &Z80.SP ); } /* LD (w),SP */ +OP(ed,74) { NEG; } /* NEG */ +OP(ed,75) { RETN; } /* RETN; */ +OP(ed,76) { _IM = 1; } /* IM 1 */ +OP(ed,77) { illegal_2(); } /* DB ED,77 */ + +OP(ed,78) { _A = IN(_BC); _F = (_F & CF) | SZP[_A]; } /* IN E,(C) */ +OP(ed,79) { OUT(_BC,_A); } /* OUT (C),E */ +OP(ed,7a) { ADC16( SP ); } /* ADC HL,SP */ +OP(ed,7b) { EA = ARG16(); RM16( EA, &Z80.SP ); } /* LD SP,(w) */ +OP(ed,7c) { NEG; } /* NEG */ +OP(ed,7d) { RETI; } /* RETI */ +OP(ed,7e) { _IM = 2; } /* IM 2 */ +OP(ed,7f) { illegal_2(); } /* DB ED,7F */ + +OP(ed,80) { illegal_2(); } /* DB ED */ +OP(ed,81) { illegal_2(); } /* DB ED */ +OP(ed,82) { illegal_2(); } /* DB ED */ +OP(ed,83) { illegal_2(); } /* DB ED */ +OP(ed,84) { illegal_2(); } /* DB ED */ +OP(ed,85) { illegal_2(); } /* DB ED */ +OP(ed,86) { illegal_2(); } /* DB ED */ +OP(ed,87) { illegal_2(); } /* DB ED */ + +OP(ed,88) { illegal_2(); } /* DB ED */ +OP(ed,89) { illegal_2(); } /* DB ED */ +OP(ed,8a) { illegal_2(); } /* DB ED */ +OP(ed,8b) { illegal_2(); } /* DB ED */ +OP(ed,8c) { illegal_2(); } /* DB ED */ +OP(ed,8d) { illegal_2(); } /* DB ED */ +OP(ed,8e) { illegal_2(); } /* DB ED */ +OP(ed,8f) { illegal_2(); } /* DB ED */ + +OP(ed,90) { illegal_2(); } /* DB ED */ +OP(ed,91) { illegal_2(); } /* DB ED */ +OP(ed,92) { illegal_2(); } /* DB ED */ +OP(ed,93) { illegal_2(); } /* DB ED */ +OP(ed,94) { illegal_2(); } /* DB ED */ +OP(ed,95) { illegal_2(); } /* DB ED */ +OP(ed,96) { illegal_2(); } /* DB ED */ +OP(ed,97) { illegal_2(); } /* DB ED */ + +OP(ed,98) { illegal_2(); } /* DB ED */ +OP(ed,99) { illegal_2(); } /* DB ED */ +OP(ed,9a) { illegal_2(); } /* DB ED */ +OP(ed,9b) { illegal_2(); } /* DB ED */ +OP(ed,9c) { illegal_2(); } /* DB ED */ +OP(ed,9d) { illegal_2(); } /* DB ED */ +OP(ed,9e) { illegal_2(); } /* DB ED */ +OP(ed,9f) { illegal_2(); } /* DB ED */ + +OP(ed,a0) { LDI; } /* LDI */ +OP(ed,a1) { CPI; } /* CPI */ +OP(ed,a2) { INI; } /* INI */ +OP(ed,a3) { OUTI; } /* OUTI */ +OP(ed,a4) { illegal_2(); } /* DB ED */ +OP(ed,a5) { illegal_2(); } /* DB ED */ +OP(ed,a6) { illegal_2(); } /* DB ED */ +OP(ed,a7) { illegal_2(); } /* DB ED */ + +OP(ed,a8) { LDD; } /* LDD */ +OP(ed,a9) { CPD; } /* CPD */ +OP(ed,aa) { IND; } /* IND */ +OP(ed,ab) { OUTD; } /* OUTD */ +OP(ed,ac) { illegal_2(); } /* DB ED */ +OP(ed,ad) { illegal_2(); } /* DB ED */ +OP(ed,ae) { illegal_2(); } /* DB ED */ +OP(ed,af) { illegal_2(); } /* DB ED */ + +OP(ed,b0) { LDIR; } /* LDIR */ +OP(ed,b1) { CPIR; } /* CPIR */ +OP(ed,b2) { INIR; } /* INIR */ +OP(ed,b3) { OTIR; } /* OTIR */ +OP(ed,b4) { illegal_2(); } /* DB ED */ +OP(ed,b5) { illegal_2(); } /* DB ED */ +OP(ed,b6) { illegal_2(); } /* DB ED */ +OP(ed,b7) { illegal_2(); } /* DB ED */ + +OP(ed,b8) { LDDR; } /* LDDR */ +OP(ed,b9) { CPDR; } /* CPDR */ +OP(ed,ba) { INDR; } /* INDR */ +OP(ed,bb) { OTDR; } /* OTDR */ +OP(ed,bc) { illegal_2(); } /* DB ED */ +OP(ed,bd) { illegal_2(); } /* DB ED */ +OP(ed,be) { illegal_2(); } /* DB ED */ +OP(ed,bf) { illegal_2(); } /* DB ED */ + +OP(ed,c0) { illegal_2(); } /* DB ED */ +OP(ed,c1) { illegal_2(); } /* DB ED */ +OP(ed,c2) { illegal_2(); } /* DB ED */ +OP(ed,c3) { illegal_2(); } /* DB ED */ +OP(ed,c4) { illegal_2(); } /* DB ED */ +OP(ed,c5) { illegal_2(); } /* DB ED */ +OP(ed,c6) { illegal_2(); } /* DB ED */ +OP(ed,c7) { illegal_2(); } /* DB ED */ + +OP(ed,c8) { illegal_2(); } /* DB ED */ +OP(ed,c9) { illegal_2(); } /* DB ED */ +OP(ed,ca) { illegal_2(); } /* DB ED */ +OP(ed,cb) { illegal_2(); } /* DB ED */ +OP(ed,cc) { illegal_2(); } /* DB ED */ +OP(ed,cd) { illegal_2(); } /* DB ED */ +OP(ed,ce) { illegal_2(); } /* DB ED */ +OP(ed,cf) { illegal_2(); } /* DB ED */ + +OP(ed,d0) { illegal_2(); } /* DB ED */ +OP(ed,d1) { illegal_2(); } /* DB ED */ +OP(ed,d2) { illegal_2(); } /* DB ED */ +OP(ed,d3) { illegal_2(); } /* DB ED */ +OP(ed,d4) { illegal_2(); } /* DB ED */ +OP(ed,d5) { illegal_2(); } /* DB ED */ +OP(ed,d6) { illegal_2(); } /* DB ED */ +OP(ed,d7) { illegal_2(); } /* DB ED */ + +OP(ed,d8) { illegal_2(); } /* DB ED */ +OP(ed,d9) { illegal_2(); } /* DB ED */ +OP(ed,da) { illegal_2(); } /* DB ED */ +OP(ed,db) { illegal_2(); } /* DB ED */ +OP(ed,dc) { illegal_2(); } /* DB ED */ +OP(ed,dd) { illegal_2(); } /* DB ED */ +OP(ed,de) { illegal_2(); } /* DB ED */ +OP(ed,df) { illegal_2(); } /* DB ED */ + +OP(ed,e0) { illegal_2(); } /* DB ED */ +OP(ed,e1) { illegal_2(); } /* DB ED */ +OP(ed,e2) { illegal_2(); } /* DB ED */ +OP(ed,e3) { illegal_2(); } /* DB ED */ +OP(ed,e4) { illegal_2(); } /* DB ED */ +OP(ed,e5) { illegal_2(); } /* DB ED */ +OP(ed,e6) { illegal_2(); } /* DB ED */ +OP(ed,e7) { illegal_2(); } /* DB ED */ + +OP(ed,e8) { illegal_2(); } /* DB ED */ +OP(ed,e9) { illegal_2(); } /* DB ED */ +OP(ed,ea) { illegal_2(); } /* DB ED */ +OP(ed,eb) { illegal_2(); } /* DB ED */ +OP(ed,ec) { illegal_2(); } /* DB ED */ +OP(ed,ed) { illegal_2(); } /* DB ED */ +OP(ed,ee) { illegal_2(); } /* DB ED */ +OP(ed,ef) { illegal_2(); } /* DB ED */ + +OP(ed,f0) { illegal_2(); } /* DB ED */ +OP(ed,f1) { illegal_2(); } /* DB ED */ +OP(ed,f2) { illegal_2(); } /* DB ED */ +OP(ed,f3) { illegal_2(); } /* DB ED */ +OP(ed,f4) { illegal_2(); } /* DB ED */ +OP(ed,f5) { illegal_2(); } /* DB ED */ +OP(ed,f6) { illegal_2(); } /* DB ED */ +OP(ed,f7) { illegal_2(); } /* DB ED */ + +OP(ed,f8) { illegal_2(); } /* DB ED */ +OP(ed,f9) { illegal_2(); } /* DB ED */ +OP(ed,fa) { illegal_2(); } /* DB ED */ +OP(ed,fb) { illegal_2(); } /* DB ED */ +OP(ed,fc) { illegal_2(); } /* DB ED */ +OP(ed,fd) { illegal_2(); } /* DB ED */ +OP(ed,fe) { illegal_2(); } /* DB ED */ +OP(ed,ff) { illegal_2(); } /* DB ED */ + +#if TIME_LOOP_HACKS + +#define CHECK_BC_LOOP \ +if( _BC > 1 && _PCD < 0xfffc ) { \ + UINT8 op1 = cpu_readop(_PCD); \ + UINT8 op2 = cpu_readop(_PCD+1); \ + if( (op1==0x78 && op2==0xb1) || (op1==0x79 && op2==0xb0) ) \ + { \ + UINT8 op3 = cpu_readop(_PCD+2); \ + UINT8 op4 = cpu_readop(_PCD+3); \ + if( op3==0x20 && op4==0xfb ) \ + { \ + int cnt = \ + cc[Z80_TABLE_op][0x78] + \ + cc[Z80_TABLE_op][0xb1] + \ + cc[Z80_TABLE_op][0x20] + \ + cc[Z80_TABLE_ex][0x20]; \ + while( _BC > 0 && z80_ICount > cnt ) \ + { \ + BURNODD( cnt, 4, cnt ); \ + _BC--; \ + } \ + } \ + else \ + if( op3 == 0xc2 ) \ + { \ + UINT8 ad1 = cpu_readop_arg(_PCD+3); \ + UINT8 ad2 = cpu_readop_arg(_PCD+4); \ + if( (ad1 + 256 * ad2) == (_PCD - 1) ) \ + { \ + int cnt = \ + cc[Z80_TABLE_op][0x78] + \ + cc[Z80_TABLE_op][0xb1] + \ + cc[Z80_TABLE_op][0xc2] + \ + cc[Z80_TABLE_ex][0xc2]; \ + while( _BC > 0 && z80_ICount > cnt ) \ + { \ + BURNODD( cnt, 4, cnt ); \ + _BC--; \ + } \ + } \ + } \ + } \ +} + +#define CHECK_DE_LOOP \ +if( _DE > 1 && _PCD < 0xfffc ) { \ + UINT8 op1 = cpu_readop(_PCD); \ + UINT8 op2 = cpu_readop(_PCD+1); \ + if( (op1==0x7a && op2==0xb3) || (op1==0x7b && op2==0xb2) ) \ + { \ + UINT8 op3 = cpu_readop(_PCD+2); \ + UINT8 op4 = cpu_readop(_PCD+3); \ + if( op3==0x20 && op4==0xfb ) \ + { \ + int cnt = \ + cc[Z80_TABLE_op][0x7a] + \ + cc[Z80_TABLE_op][0xb3] + \ + cc[Z80_TABLE_op][0x20] + \ + cc[Z80_TABLE_ex][0x20]; \ + while( _DE > 0 && z80_ICount > cnt ) \ + { \ + BURNODD( cnt, 4, cnt ); \ + _DE--; \ + } \ + } \ + else \ + if( op3==0xc2 ) \ + { \ + UINT8 ad1 = cpu_readop_arg(_PCD+3); \ + UINT8 ad2 = cpu_readop_arg(_PCD+4); \ + if( (ad1 + 256 * ad2) == (_PCD - 1) ) \ + { \ + int cnt = \ + cc[Z80_TABLE_op][0x7a] + \ + cc[Z80_TABLE_op][0xb3] + \ + cc[Z80_TABLE_op][0xc2] + \ + cc[Z80_TABLE_ex][0xc2]; \ + while( _DE > 0 && z80_ICount > cnt ) \ + { \ + BURNODD( cnt, 4, cnt ); \ + _DE--; \ + } \ + } \ + } \ + } \ +} + +#define CHECK_HL_LOOP \ +if( _HL > 1 && _PCD < 0xfffc ) { \ + UINT8 op1 = cpu_readop(_PCD); \ + UINT8 op2 = cpu_readop(_PCD+1); \ + if( (op1==0x7c && op2==0xb5) || (op1==0x7d && op2==0xb4) ) \ + { \ + UINT8 op3 = cpu_readop(_PCD+2); \ + UINT8 op4 = cpu_readop(_PCD+3); \ + if( op3==0x20 && op4==0xfb ) \ + { \ + int cnt = \ + cc[Z80_TABLE_op][0x7c] + \ + cc[Z80_TABLE_op][0xb5] + \ + cc[Z80_TABLE_op][0x20] + \ + cc[Z80_TABLE_ex][0x20]; \ + while( _HL > 0 && z80_ICount > cnt ) \ + { \ + BURNODD( cnt, 4, cnt ); \ + _HL--; \ + } \ + } \ + else \ + if( op3==0xc2 ) \ + { \ + UINT8 ad1 = cpu_readop_arg(_PCD+3); \ + UINT8 ad2 = cpu_readop_arg(_PCD+4); \ + if( (ad1 + 256 * ad2) == (_PCD - 1) ) \ + { \ + int cnt = \ + cc[Z80_TABLE_op][0x7c] + \ + cc[Z80_TABLE_op][0xb5] + \ + cc[Z80_TABLE_op][0xc2] + \ + cc[Z80_TABLE_ex][0xc2]; \ + while( _HL > 0 && z80_ICount > cnt ) \ + { \ + BURNODD( cnt, 4, cnt ); \ + _HL--; \ + } \ + } \ + } \ + } \ +} + +#else + +#define CHECK_BC_LOOP +#define CHECK_DE_LOOP +#define CHECK_HL_LOOP + +#endif + +/********************************************************** + * main opcodes + **********************************************************/ +OP(op,00) { } /* NOP */ +OP(op,01) { _BC = ARG16(); } /* LD BC,w */ +OP(op,02) { WM( _BC, _A ); } /* LD (BC),A */ +OP(op,03) { _BC++; } /* INC BC */ +OP(op,04) { _B = INC(_B); } /* INC B */ +OP(op,05) { _B = DEC(_B); } /* DEC B */ +OP(op,06) { _B = ARG(); } /* LD B,n */ +OP(op,07) { RLCA; } /* RLCA */ + +OP(op,08) { EX_AF; } /* EX AF,AF' */ +OP(op,09) { ADD16(HL,BC); } /* ADD HL,BC */ +OP(op,0a) { _A = RM(_BC); } /* LD A,(BC) */ +OP(op,0b) { _BC--; CHECK_BC_LOOP; } /* DEC BC */ +OP(op,0c) { _C = INC(_C); } /* INC C */ +OP(op,0d) { _C = DEC(_C); } /* DEC C */ +OP(op,0e) { _C = ARG(); } /* LD C,n */ +OP(op,0f) { RRCA; } /* RRCA */ + +OP(op,10) { _B--; JR_COND( _B, 0x10 ); } /* DJNZ o */ +OP(op,11) { _DE = ARG16(); } /* LD DE,w */ +OP(op,12) { WM( _DE, _A ); } /* LD (DE),A */ +OP(op,13) { _DE++; } /* INC DE */ +OP(op,14) { _D = INC(_D); } /* INC D */ +OP(op,15) { _D = DEC(_D); } /* DEC D */ +OP(op,16) { _D = ARG(); } /* LD D,n */ +OP(op,17) { RLA; } /* RLA */ + +OP(op,18) { JR(); } /* JR o */ +OP(op,19) { ADD16(HL,DE); } /* ADD HL,DE */ +OP(op,1a) { _A = RM(_DE); } /* LD A,(DE) */ +OP(op,1b) { _DE--; CHECK_DE_LOOP; } /* DEC DE */ +OP(op,1c) { _E = INC(_E); } /* INC E */ +OP(op,1d) { _E = DEC(_E); } /* DEC E */ +OP(op,1e) { _E = ARG(); } /* LD E,n */ +OP(op,1f) { RRA; } /* RRA */ + +OP(op,20) { JR_COND( !(_F & ZF), 0x20 ); } /* JR NZ,o */ +OP(op,21) { _HL = ARG16(); } /* LD HL,w */ +OP(op,22) { EA = ARG16(); WM16( EA, &Z80.HL ); } /* LD (w),HL */ +OP(op,23) { _HL++; } /* INC HL */ +OP(op,24) { _H = INC(_H); } /* INC H */ +OP(op,25) { _H = DEC(_H); } /* DEC H */ +OP(op,26) { _H = ARG(); } /* LD H,n */ +OP(op,27) { DAA; } /* DAA */ + +OP(op,28) { JR_COND( _F & ZF, 0x28 ); } /* JR Z,o */ +OP(op,29) { ADD16(HL,HL); } /* ADD HL,HL */ +OP(op,2a) { EA = ARG16(); RM16( EA, &Z80.HL ); } /* LD HL,(w) */ +OP(op,2b) { _HL--; CHECK_HL_LOOP; } /* DEC HL */ +OP(op,2c) { _L = INC(_L); } /* INC L */ +OP(op,2d) { _L = DEC(_L); } /* DEC L */ +OP(op,2e) { _L = ARG(); } /* LD L,n */ +OP(op,2f) { _A ^= 0xff; _F = (_F&(SF|ZF|PF|CF))|HF|NF|(_A&(YF|XF)); } /* CPL */ + +OP(op,30) { JR_COND( !(_F & CF), 0x30 ); } /* JR NC,o */ +OP(op,31) { _SP = ARG16(); } /* LD SP,w */ +OP(op,32) { EA = ARG16(); WM( EA, _A ); } /* LD (w),A */ +OP(op,33) { _SP++; } /* INC SP */ +OP(op,34) { WM( _HL, INC(RM(_HL)) ); } /* INC (HL) */ +OP(op,35) { WM( _HL, DEC(RM(_HL)) ); } /* DEC (HL) */ +OP(op,36) { WM( _HL, ARG() ); } /* LD (HL),n */ +OP(op,37) { _F = (_F & (SF|ZF|PF)) | CF | (_A & (YF|XF)); } /* SCF */ + +OP(op,38) { JR_COND( _F & CF, 0x38 ); } /* JR C,o */ +OP(op,39) { ADD16(HL,SP); } /* ADD HL,SP */ +OP(op,3a) { EA = ARG16(); _A = RM( EA ); } /* LD A,(w) */ +OP(op,3b) { _SP--; } /* DEC SP */ +OP(op,3c) { _A = INC(_A); } /* INC A */ +OP(op,3d) { _A = DEC(_A); } /* DEC A */ +OP(op,3e) { _A = ARG(); } /* LD A,n */ +OP(op,3f) { _F = ((_F&(SF|ZF|PF|CF))|((_F&CF)<<4)|(_A&(YF|XF)))^CF; } /* CCF */ +//OP(op,3f) { _F = ((_F & ~(HF|NF)) | ((_F & CF)<<4)) ^ CF; } /* CCF */ + +OP(op,40) { } /* LD B,B */ +OP(op,41) { _B = _C; } /* LD B,C */ +OP(op,42) { _B = _D; } /* LD B,D */ +OP(op,43) { _B = _E; } /* LD B,E */ +OP(op,44) { _B = _H; } /* LD B,H */ +OP(op,45) { _B = _L; } /* LD B,L */ +OP(op,46) { _B = RM(_HL); } /* LD B,(HL) */ +OP(op,47) { _B = _A; } /* LD B,A */ + +OP(op,48) { _C = _B; } /* LD C,B */ +OP(op,49) { } /* LD C,C */ +OP(op,4a) { _C = _D; } /* LD C,D */ +OP(op,4b) { _C = _E; } /* LD C,E */ +OP(op,4c) { _C = _H; } /* LD C,H */ +OP(op,4d) { _C = _L; } /* LD C,L */ +OP(op,4e) { _C = RM(_HL); } /* LD C,(HL) */ +OP(op,4f) { _C = _A; } /* LD C,A */ + +OP(op,50) { _D = _B; } /* LD D,B */ +OP(op,51) { _D = _C; } /* LD D,C */ +OP(op,52) { } /* LD D,D */ +OP(op,53) { _D = _E; } /* LD D,E */ +OP(op,54) { _D = _H; } /* LD D,H */ +OP(op,55) { _D = _L; } /* LD D,L */ +OP(op,56) { _D = RM(_HL); } /* LD D,(HL) */ +OP(op,57) { _D = _A; } /* LD D,A */ + +OP(op,58) { _E = _B; } /* LD E,B */ +OP(op,59) { _E = _C; } /* LD E,C */ +OP(op,5a) { _E = _D; } /* LD E,D */ +OP(op,5b) { } /* LD E,E */ +OP(op,5c) { _E = _H; } /* LD E,H */ +OP(op,5d) { _E = _L; } /* LD E,L */ +OP(op,5e) { _E = RM(_HL); } /* LD E,(HL) */ +OP(op,5f) { _E = _A; } /* LD E,A */ + +OP(op,60) { _H = _B; } /* LD H,B */ +OP(op,61) { _H = _C; } /* LD H,C */ +OP(op,62) { _H = _D; } /* LD H,D */ +OP(op,63) { _H = _E; } /* LD H,E */ +OP(op,64) { } /* LD H,H */ +OP(op,65) { _H = _L; } /* LD H,L */ +OP(op,66) { _H = RM(_HL); } /* LD H,(HL) */ +OP(op,67) { _H = _A; } /* LD H,A */ + +OP(op,68) { _L = _B; } /* LD L,B */ +OP(op,69) { _L = _C; } /* LD L,C */ +OP(op,6a) { _L = _D; } /* LD L,D */ +OP(op,6b) { _L = _E; } /* LD L,E */ +OP(op,6c) { _L = _H; } /* LD L,H */ +OP(op,6d) { } /* LD L,L */ +OP(op,6e) { _L = RM(_HL); } /* LD L,(HL) */ +OP(op,6f) { _L = _A; } /* LD L,A */ + +OP(op,70) { WM( _HL, _B ); } /* LD (HL),B */ +OP(op,71) { WM( _HL, _C ); } /* LD (HL),C */ +OP(op,72) { WM( _HL, _D ); } /* LD (HL),D */ +OP(op,73) { WM( _HL, _E ); } /* LD (HL),E */ +OP(op,74) { WM( _HL, _H ); } /* LD (HL),H */ +OP(op,75) { WM( _HL, _L ); } /* LD (HL),L */ +OP(op,76) { ENTER_HALT; } /* HALT */ +OP(op,77) { WM( _HL, _A ); } /* LD (HL),A */ + +OP(op,78) { _A = _B; } /* LD A,B */ +OP(op,79) { _A = _C; } /* LD A,C */ +OP(op,7a) { _A = _D; } /* LD A,D */ +OP(op,7b) { _A = _E; } /* LD A,E */ +OP(op,7c) { _A = _H; } /* LD A,H */ +OP(op,7d) { _A = _L; } /* LD A,L */ +OP(op,7e) { _A = RM(_HL); } /* LD A,(HL) */ +OP(op,7f) { } /* LD A,A */ + +OP(op,80) { ADD(_B); } /* ADD A,B */ +OP(op,81) { ADD(_C); } /* ADD A,C */ +OP(op,82) { ADD(_D); } /* ADD A,D */ +OP(op,83) { ADD(_E); } /* ADD A,E */ +OP(op,84) { ADD(_H); } /* ADD A,H */ +OP(op,85) { ADD(_L); } /* ADD A,L */ +OP(op,86) { ADD(RM(_HL)); } /* ADD A,(HL) */ +OP(op,87) { ADD(_A); } /* ADD A,A */ + +OP(op,88) { ADC(_B); } /* ADC A,B */ +OP(op,89) { ADC(_C); } /* ADC A,C */ +OP(op,8a) { ADC(_D); } /* ADC A,D */ +OP(op,8b) { ADC(_E); } /* ADC A,E */ +OP(op,8c) { ADC(_H); } /* ADC A,H */ +OP(op,8d) { ADC(_L); } /* ADC A,L */ +OP(op,8e) { ADC(RM(_HL)); } /* ADC A,(HL) */ +OP(op,8f) { ADC(_A); } /* ADC A,A */ + +OP(op,90) { SUB(_B); } /* SUB B */ +OP(op,91) { SUB(_C); } /* SUB C */ +OP(op,92) { SUB(_D); } /* SUB D */ +OP(op,93) { SUB(_E); } /* SUB E */ +OP(op,94) { SUB(_H); } /* SUB H */ +OP(op,95) { SUB(_L); } /* SUB L */ +OP(op,96) { SUB(RM(_HL)); } /* SUB (HL) */ +OP(op,97) { SUB(_A); } /* SUB A */ + +OP(op,98) { SBC(_B); } /* SBC A,B */ +OP(op,99) { SBC(_C); } /* SBC A,C */ +OP(op,9a) { SBC(_D); } /* SBC A,D */ +OP(op,9b) { SBC(_E); } /* SBC A,E */ +OP(op,9c) { SBC(_H); } /* SBC A,H */ +OP(op,9d) { SBC(_L); } /* SBC A,L */ +OP(op,9e) { SBC(RM(_HL)); } /* SBC A,(HL) */ +OP(op,9f) { SBC(_A); } /* SBC A,A */ + +OP(op,a0) { AND(_B); } /* AND B */ +OP(op,a1) { AND(_C); } /* AND C */ +OP(op,a2) { AND(_D); } /* AND D */ +OP(op,a3) { AND(_E); } /* AND E */ +OP(op,a4) { AND(_H); } /* AND H */ +OP(op,a5) { AND(_L); } /* AND L */ +OP(op,a6) { AND(RM(_HL)); } /* AND (HL) */ +OP(op,a7) { AND(_A); } /* AND A */ + +OP(op,a8) { XOR(_B); } /* XOR B */ +OP(op,a9) { XOR(_C); } /* XOR C */ +OP(op,aa) { XOR(_D); } /* XOR D */ +OP(op,ab) { XOR(_E); } /* XOR E */ +OP(op,ac) { XOR(_H); } /* XOR H */ +OP(op,ad) { XOR(_L); } /* XOR L */ +OP(op,ae) { XOR(RM(_HL)); } /* XOR (HL) */ +OP(op,af) { XOR(_A); } /* XOR A */ + +OP(op,b0) { OR(_B); } /* OR B */ +OP(op,b1) { OR(_C); } /* OR C */ +OP(op,b2) { OR(_D); } /* OR D */ +OP(op,b3) { OR(_E); } /* OR E */ +OP(op,b4) { OR(_H); } /* OR H */ +OP(op,b5) { OR(_L); } /* OR L */ +OP(op,b6) { OR(RM(_HL)); } /* OR (HL) */ +OP(op,b7) { OR(_A); } /* OR A */ + +OP(op,b8) { CP(_B); } /* CP B */ +OP(op,b9) { CP(_C); } /* CP C */ +OP(op,ba) { CP(_D); } /* CP D */ +OP(op,bb) { CP(_E); } /* CP E */ +OP(op,bc) { CP(_H); } /* CP H */ +OP(op,bd) { CP(_L); } /* CP L */ +OP(op,be) { CP(RM(_HL)); } /* CP (HL) */ +OP(op,bf) { CP(_A); } /* CP A */ + +OP(op,c0) { RET_COND( !(_F & ZF), 0xc0 ); } /* RET NZ */ +OP(op,c1) { POP(BC); } /* POP BC */ +OP(op,c2) { JP_COND( !(_F & ZF) ); } /* JP NZ,a */ +OP(op,c3) { JP; } /* JP a */ +OP(op,c4) { CALL_COND( !(_F & ZF), 0xc4 ); } /* CALL NZ,a */ +OP(op,c5) { PUSH( BC ); } /* PUSH BC */ +OP(op,c6) { ADD(ARG()); } /* ADD A,n */ +OP(op,c7) { RST(0x00); } /* RST 0 */ + +OP(op,c8) { RET_COND( _F & ZF, 0xc8 ); } /* RET Z */ +OP(op,c9) { POP(PC); } /* RET */ +OP(op,ca) { JP_COND( _F & ZF ); } /* JP Z,a */ +OP(op,cb) { _R++; EXEC(cb,ROP()); } /* **** CB xx */ +OP(op,cc) { CALL_COND( _F & ZF, 0xcc ); } /* CALL Z,a */ +OP(op,cd) { CALL(); } /* CALL a */ +OP(op,ce) { ADC(ARG()); } /* ADC A,n */ +OP(op,cf) { RST(0x08); } /* RST 1 */ + +OP(op,d0) { RET_COND( !(_F & CF), 0xd0 ); } /* RET NC */ +OP(op,d1) { POP(DE); } /* POP DE */ +OP(op,d2) { JP_COND( !(_F & CF) ); } /* JP NC,a */ +OP(op,d3) { unsigned n = ARG() | (_A << 8); OUT( n, _A ); } /* OUT (n),A */ +OP(op,d4) { CALL_COND( !(_F & CF), 0xd4 ); } /* CALL NC,a */ +OP(op,d5) { PUSH( DE ); } /* PUSH DE */ +OP(op,d6) { SUB(ARG()); } /* SUB n */ +OP(op,d7) { RST(0x10); } /* RST 2 */ + +OP(op,d8) { RET_COND( _F & CF, 0xd8 ); } /* RET C */ +OP(op,d9) { EXX; } /* EXX */ +OP(op,da) { JP_COND( _F & CF ); } /* JP C,a */ +OP(op,db) { unsigned n = ARG() | (_A << 8); _A = IN( n ); } /* IN A,(n) */ +OP(op,dc) { CALL_COND( _F & CF, 0xdc ); } /* CALL C,a */ +OP(op,dd) { _R++; EXEC(dd,ROP()); } /* **** DD xx */ +OP(op,de) { SBC(ARG()); } /* SBC A,n */ +OP(op,df) { RST(0x18); } /* RST 3 */ + +OP(op,e0) { RET_COND( !(_F & PF), 0xe0 ); } /* RET PO */ +OP(op,e1) { POP(HL); } /* POP HL */ +OP(op,e2) { JP_COND( !(_F & PF) ); } /* JP PO,a */ +OP(op,e3) { EXSP(HL); } /* EX HL,(SP) */ +OP(op,e4) { CALL_COND( !(_F & PF), 0xe4 ); } /* CALL PO,a */ +OP(op,e5) { PUSH( HL ); } /* PUSH HL */ +OP(op,e6) { AND(ARG()); } /* AND n */ +OP(op,e7) { RST(0x20); } /* RST 4 */ + +OP(op,e8) { RET_COND( _F & PF, 0xe8 ); } /* RET PE */ +OP(op,e9) { _PC = _HL; } /* JP (HL) */ +OP(op,ea) { JP_COND( _F & PF ); } /* JP PE,a */ +OP(op,eb) { EX_DE_HL; } /* EX DE,HL */ +OP(op,ec) { CALL_COND( _F & PF, 0xec ); } /* CALL PE,a */ +OP(op,ed) { _R++; EXEC(ed,ROP()); } /* **** ED xx */ +OP(op,ee) { XOR(ARG()); } /* XOR n */ +OP(op,ef) { RST(0x28); } /* RST 5 */ + +OP(op,f0) { RET_COND( !(_F & SF), 0xf0 ); } /* RET P */ +OP(op,f1) { POP(AF); } /* POP AF */ +OP(op,f2) { JP_COND( !(_F & SF) ); } /* JP P,a */ +OP(op,f3) { _IFF1 = _IFF2 = 0; } /* DI */ +OP(op,f4) { CALL_COND( !(_F & SF), 0xf4 ); } /* CALL P,a */ +OP(op,f5) { PUSH( AF ); } /* PUSH AF */ +OP(op,f6) { OR(ARG()); } /* OR n */ +OP(op,f7) { RST(0x30); } /* RST 6 */ + +OP(op,f8) { RET_COND( _F & SF, 0xf8 ); } /* RET M */ +OP(op,f9) { _SP = _HL; } /* LD SP,HL */ +OP(op,fa) { JP_COND(_F & SF); } /* JP M,a */ +OP(op,fb) { EI; } /* EI */ +OP(op,fc) { CALL_COND( _F & SF, 0xfc ); } /* CALL M,a */ +OP(op,fd) { _R++; EXEC(fd,ROP()); } /* **** FD xx */ +OP(op,fe) { CP(ARG()); } /* CP n */ +OP(op,ff) { RST(0x38); } /* RST 7 */ + + +static void take_interrupt(void) +{ + if( _IFF1 ) + { + int irq_vector; + + /* there isn't a valid previous program counter */ + _PPC = -1; + + /* Check if processor was halted */ + LEAVE_HALT; + + if( Z80.irq_max ) /* daisy chain mode */ + { + if( Z80.request_irq >= 0 ) + { + /* Clear both interrupt flip flops */ + _IFF1 = _IFF2 = 0; + irq_vector = Z80.irq[Z80.request_irq].interrupt_entry(Z80.irq[Z80.request_irq].irq_param); + Z80.request_irq = -1; + } else return; + } + else + { + /* Clear both interrupt flip flops */ + _IFF1 = _IFF2 = 0; + /* call back the cpu interface to retrieve the vector */ + irq_vector = (*Z80.irq_callback)(0); + } + + /* Interrupt mode 2. Call [Z80.I:databyte] */ + if( _IM == 2 ) + { + irq_vector = (irq_vector & 0xff) | (_I << 8); + PUSH( PC ); + RM16( irq_vector, &Z80.PC ); + /* CALL opcode timing */ + Z80.extra_cycles += cc[Z80_TABLE_op][0xcd]; + } + else + /* Interrupt mode 1. RST 38h */ + if( _IM == 1 ) + { + PUSH( PC ); + _PCD = 0x0038; + /* RST $38 + 'interrupt latency' cycles */ + Z80.extra_cycles += cc[Z80_TABLE_op][0xff] + cc[Z80_TABLE_ex][0xff]; + } + else + { + /* Interrupt mode 0. We check for CALL and JP instructions, */ + /* if neither of these were found we assume a 1 byte opcode */ + /* was placed on the databus */ + switch (irq_vector & 0xff0000) + { + case 0xcd0000: /* call */ + PUSH( PC ); + _PCD = irq_vector & 0xffff; + /* CALL $xxxx + 'interrupt latency' cycles */ + Z80.extra_cycles += cc[Z80_TABLE_op][0xcd] + cc[Z80_TABLE_ex][0xff]; + break; + case 0xc30000: /* jump */ + _PCD = irq_vector & 0xffff; + /* JP $xxxx + 2 cycles */ + Z80.extra_cycles += cc[Z80_TABLE_op][0xc3] + cc[Z80_TABLE_ex][0xff]; + break; + default: /* rst (or other opcodes?) */ + PUSH( PC ); + _PCD = irq_vector & 0x0038; + /* RST $xx + 2 cycles */ + Z80.extra_cycles += cc[Z80_TABLE_op][_PCD] + cc[Z80_TABLE_ex][_PCD]; + break; + } + } + } +} + +/**************************************************************************** + * Reset registers to their initial values + ****************************************************************************/ +void z80_reset(void *param) +{ + Z80_DaisyChain *daisy_chain = (Z80_DaisyChain *)param; + int i, p; +#if BIG_FLAGS_ARRAY + if( !SZHVC_add || !SZHVC_sub ) + { + int oldval, newval, val; + UINT8 *padd, *padc, *psub, *psbc; + /* allocate big flag arrays once */ + SZHVC_add = (UINT8 *)malloc(2*256*256); + SZHVC_sub = (UINT8 *)malloc(2*256*256); + if( !SZHVC_add || !SZHVC_sub ) + { + LOG(("Z80: failed to allocate 2 * 128K flags arrays!!!\n")); + raise(SIGABRT); + } + padd = &SZHVC_add[ 0*256]; + padc = &SZHVC_add[256*256]; + psub = &SZHVC_sub[ 0*256]; + psbc = &SZHVC_sub[256*256]; + for (oldval = 0; oldval < 256; oldval++) + { + for (newval = 0; newval < 256; newval++) + { + /* add or adc w/o carry set */ + val = newval - oldval; + *padd = (newval) ? ((newval & 0x80) ? SF : 0) : ZF; +#if Z80_EXACT + *padd |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */ +#endif + if( (newval & 0x0f) < (oldval & 0x0f) ) *padd |= HF; + if( newval < oldval ) *padd |= CF; + if( (val^oldval^0x80) & (val^newval) & 0x80 ) *padd |= VF; + padd++; + + /* adc with carry set */ + val = newval - oldval - 1; + *padc = (newval) ? ((newval & 0x80) ? SF : 0) : ZF; +#if Z80_EXACT + *padc |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */ +#endif + if( (newval & 0x0f) <= (oldval & 0x0f) ) *padc |= HF; + if( newval <= oldval ) *padc |= CF; + if( (val^oldval^0x80) & (val^newval) & 0x80 ) *padc |= VF; + padc++; + + /* cp, sub or sbc w/o carry set */ + val = oldval - newval; + *psub = NF | ((newval) ? ((newval & 0x80) ? SF : 0) : ZF); +#if Z80_EXACT + *psub |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */ +#endif + if( (newval & 0x0f) > (oldval & 0x0f) ) *psub |= HF; + if( newval > oldval ) *psub |= CF; + if( (val^oldval) & (oldval^newval) & 0x80 ) *psub |= VF; + psub++; + + /* sbc with carry set */ + val = oldval - newval - 1; + *psbc = NF | ((newval) ? ((newval & 0x80) ? SF : 0) : ZF); +#if Z80_EXACT + *psbc |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */ +#endif + if( (newval & 0x0f) >= (oldval & 0x0f) ) *psbc |= HF; + if( newval >= oldval ) *psbc |= CF; + if( (val^oldval) & (oldval^newval) & 0x80 ) *psbc |= VF; + psbc++; + } + } + } +#endif + for (i = 0; i < 256; i++) + { + p = 0; + if( i&0x01 ) ++p; + if( i&0x02 ) ++p; + if( i&0x04 ) ++p; + if( i&0x08 ) ++p; + if( i&0x10 ) ++p; + if( i&0x20 ) ++p; + if( i&0x40 ) ++p; + if( i&0x80 ) ++p; + SZ[i] = i ? i & SF : ZF; +#if Z80_EXACT + SZ[i] |= (i & (YF | XF)); /* undocumented flag bits 5+3 */ +#endif + SZ_BIT[i] = i ? i & SF : ZF | PF; +#if Z80_EXACT + SZ_BIT[i] |= (i & (YF | XF)); /* undocumented flag bits 5+3 */ +#endif + SZP[i] = SZ[i] | ((p & 1) ? 0 : PF); + SZHV_inc[i] = SZ[i]; + if( i == 0x80 ) SZHV_inc[i] |= VF; + if( (i & 0x0f) == 0x00 ) SZHV_inc[i] |= HF; + SZHV_dec[i] = SZ[i] | NF; + if( i == 0x7f ) SZHV_dec[i] |= VF; + if( (i & 0x0f) == 0x0f ) SZHV_dec[i] |= HF; + } + + memset(&Z80, 0, sizeof(Z80)); + _IX = _IY = 0xffff; /* IX and IY are FFFF after a reset! */ + _F = ZF; /* Zero flag is set */ + Z80.request_irq = -1; + Z80.service_irq = -1; + Z80.nmi_state = CLEAR_LINE; + Z80.irq_state = CLEAR_LINE; + + if( daisy_chain ) + { + while( daisy_chain->irq_param != -1 && Z80.irq_max < Z80_MAXDAISY ) + { + /* set callbackhandler after reti */ + Z80.irq[Z80.irq_max] = *daisy_chain; + /* device reset */ + if( Z80.irq[Z80.irq_max].reset ) + Z80.irq[Z80.irq_max].reset(Z80.irq[Z80.irq_max].irq_param); + Z80.irq_max++; + daisy_chain++; + } + } + +} + +void z80_exit(void) +{ +#if BIG_FLAGS_ARRAY + if (SZHVC_add) free(SZHVC_add); + SZHVC_add = NULL; + if (SZHVC_sub) free(SZHVC_sub); + SZHVC_sub = NULL; +#endif +} + +void z80_end_timeslice(void) +{ + z80_ICount = 0; +} + +/**************************************************************************** + * Execute 'cycles' T-states. Return number of T-states really executed + ****************************************************************************/ +int z80_execute(int cycles) +{ + z80_ICount = cycles - Z80.extra_cycles; + Z80.extra_cycles = 0; + + do + { + _PPC = _PCD; + _R++; + EXEC_INLINE(op,ROP()); + } while( z80_ICount > 0 ); + + z80_ICount -= Z80.extra_cycles; + Z80.extra_cycles = 0; + + return cycles - z80_ICount; +} + +/**************************************************************************** + * Burn 'cycles' T-states. Adjust R register for the lost time + ****************************************************************************/ +void z80_burn(int cycles) +{ + if( cycles > 0 ) + { + /* NOP takes 4 cycles per instruction */ + int n = (cycles + 3) / 4; + _R += n; + z80_ICount -= 4 * n; + } +} + +/**************************************************************************** + * Get all registers in given buffer + ****************************************************************************/ +unsigned z80_get_context (void *dst) +{ + if( dst ) + *(Z80_Regs*)dst = Z80; + return sizeof(Z80_Regs); +} + +/**************************************************************************** + * Set all registers to given values + ****************************************************************************/ +void z80_set_context (void *src) +{ + if( src ) + Z80 = *(Z80_Regs*)src; +} + +/**************************************************************************** + * Get a pointer to a cycle count table + ****************************************************************************/ +void *z80_get_cycle_table (int which) +{ + if (which >= 0 && which <= Z80_TABLE_xycb) + return cc[which]; + return NULL; +} + +/**************************************************************************** + * Set a new cycle count table + ****************************************************************************/ +void z80_set_cycle_table (int which, void *new_table) +{ + if (which >= 0 && which <= Z80_TABLE_ex) + cc[which] = new_table; +} + +/**************************************************************************** + * Return program counter + ****************************************************************************/ +unsigned z80_get_pc (void) +{ + return _PCD; +} + +/**************************************************************************** + * Set program counter + ****************************************************************************/ +void z80_set_pc (unsigned val) +{ + _PC = val; +} + +/**************************************************************************** + * Return stack pointer + ****************************************************************************/ +unsigned z80_get_sp (void) +{ + return _SPD; +} + +/**************************************************************************** + * Set stack pointer + ****************************************************************************/ +void z80_set_sp (unsigned val) +{ + _SP = val; +} + +/**************************************************************************** + * Return a specific register + ****************************************************************************/ +unsigned z80_get_reg (int regnum) +{ + switch( regnum ) + { + case Z80_PC: return Z80.PC.w.l; + case Z80_SP: return Z80.SP.w.l; + case Z80_AF: return Z80.AF.w.l; + case Z80_BC: return Z80.BC.w.l; + case Z80_DE: return Z80.DE.w.l; + case Z80_HL: return Z80.HL.w.l; + case Z80_IX: return Z80.IX.w.l; + case Z80_IY: return Z80.IY.w.l; + case Z80_R: return (Z80.R & 0x7f) | (Z80.R2 & 0x80); + case Z80_I: return Z80.I; + case Z80_AF2: return Z80.AF2.w.l; + case Z80_BC2: return Z80.BC2.w.l; + case Z80_DE2: return Z80.DE2.w.l; + case Z80_HL2: return Z80.HL2.w.l; + case Z80_IM: return Z80.IM; + case Z80_IFF1: return Z80.IFF1; + case Z80_IFF2: return Z80.IFF2; + case Z80_HALT: return Z80.HALT; + case Z80_NMI_STATE: return Z80.nmi_state; + case Z80_IRQ_STATE: return Z80.irq_state; + case Z80_DC0: return Z80.int_state[0]; + case Z80_DC1: return Z80.int_state[1]; + case Z80_DC2: return Z80.int_state[2]; + case Z80_DC3: return Z80.int_state[3]; + case REG_PREVIOUSPC: return Z80.PREPC.w.l; + default: + if( regnum <= REG_SP_CONTENTS ) + { + unsigned offset = _SPD + 2 * (REG_SP_CONTENTS - regnum); + if( offset < 0xffff ) + return RM( offset ) | ( RM( offset + 1) << 8 ); + } + } + return 0; +} + +/**************************************************************************** + * Set a specific register + ****************************************************************************/ +void z80_set_reg (int regnum, unsigned val) +{ + switch( regnum ) + { + case Z80_PC: Z80.PC.w.l = val; break; + case Z80_SP: Z80.SP.w.l = val; break; + case Z80_AF: Z80.AF.w.l = val; break; + case Z80_BC: Z80.BC.w.l = val; break; + case Z80_DE: Z80.DE.w.l = val; break; + case Z80_HL: Z80.HL.w.l = val; break; + case Z80_IX: Z80.IX.w.l = val; break; + case Z80_IY: Z80.IY.w.l = val; break; + case Z80_R: Z80.R = val; Z80.R2 = val & 0x80; break; + case Z80_I: Z80.I = val; break; + case Z80_AF2: Z80.AF2.w.l = val; break; + case Z80_BC2: Z80.BC2.w.l = val; break; + case Z80_DE2: Z80.DE2.w.l = val; break; + case Z80_HL2: Z80.HL2.w.l = val; break; + case Z80_IM: Z80.IM = val; break; + case Z80_IFF1: Z80.IFF1 = val; break; + case Z80_IFF2: Z80.IFF2 = val; break; + case Z80_HALT: Z80.HALT = val; break; + case Z80_NMI_STATE: z80_set_nmi_line(val); break; + case Z80_IRQ_STATE: z80_set_irq_line(0,val); break; + case Z80_DC0: Z80.int_state[0] = val; break; + case Z80_DC1: Z80.int_state[1] = val; break; + case Z80_DC2: Z80.int_state[2] = val; break; + case Z80_DC3: Z80.int_state[3] = val; break; + default: + if( regnum <= REG_SP_CONTENTS ) + { + unsigned offset = _SPD + 2 * (REG_SP_CONTENTS - regnum); + if( offset < 0xffff ) + { + WM( offset, val & 0xff ); + WM( offset+1, (val >> 8) & 0xff ); + } + } + } +} + +/**************************************************************************** + * Set NMI line state + ****************************************************************************/ +void z80_set_nmi_line(int state) +{ + if( Z80.nmi_state == state ) return; + + Z80.nmi_state = state; + if( state == CLEAR_LINE ) return; + + _PPC = -1; /* there isn't a valid previous program counter */ + LEAVE_HALT; /* Check if processor was halted */ + + _IFF1 = 0; + PUSH( PC ); + _PCD = 0x0066; + Z80.extra_cycles += 11; +} + +/**************************************************************************** + * Set IRQ line state + ****************************************************************************/ +void z80_set_irq_line(int irqline, int state) +{ + Z80.irq_state = state; + if( state == CLEAR_LINE ) return; + + if( Z80.irq_max ) + { + int daisychain, device, int_state; + daisychain = (*Z80.irq_callback)(irqline); + daisychain = 0xFF; + device = daisychain >> 8; + int_state = daisychain & 0xff; + + if( Z80.int_state[device] != int_state ) + { + LOG((" change\n")); + /* set new interrupt status */ + Z80.int_state[device] = int_state; + /* check interrupt status */ + Z80.request_irq = Z80.service_irq = -1; + + /* search higher IRQ or IEO */ + for( device = 0 ; device < Z80.irq_max ; device ++ ) + { + /* IEO = disable ? */ + if( Z80.int_state[device] & Z80_INT_IEO ) + { + Z80.request_irq = -1; /* if IEO is disable , masking lower IRQ */ + Z80.service_irq = device; /* set highest interrupt service device */ + } + /* IRQ = request ? */ + if( Z80.int_state[device] & Z80_INT_REQ ) + Z80.request_irq = device; + } + if( Z80.request_irq < 0 ) return; + } + else + { + LOG((" no change\n")); + return; + } + } + take_interrupt(); +} + +/**************************************************************************** + * Set IRQ vector callback + ****************************************************************************/ +void z80_set_irq_callback(int (*callback)(int)) +{ + Z80.irq_callback = callback; +} + +#if 0 +/**************************************************************************** + * Save CPU state + ****************************************************************************/ +void z80_state_save(void *file) +{ + int cpu = cpu_getactivecpu(); + state_save_UINT16(file, "z80", cpu, "AF", &Z80.AF.w.l, 1); + state_save_UINT16(file, "z80", cpu, "BC", &Z80.BC.w.l, 1); + state_save_UINT16(file, "z80", cpu, "DE", &Z80.DE.w.l, 1); + state_save_UINT16(file, "z80", cpu, "HL", &Z80.HL.w.l, 1); + state_save_UINT16(file, "z80", cpu, "IX", &Z80.IX.w.l, 1); + state_save_UINT16(file, "z80", cpu, "IY", &Z80.IY.w.l, 1); + state_save_UINT16(file, "z80", cpu, "PC", &Z80.PC.w.l, 1); + state_save_UINT16(file, "z80", cpu, "SP", &Z80.SP.w.l, 1); + state_save_UINT16(file, "z80", cpu, "AF2", &Z80.AF2.w.l, 1); + state_save_UINT16(file, "z80", cpu, "BC2", &Z80.BC2.w.l, 1); + state_save_UINT16(file, "z80", cpu, "DE2", &Z80.DE2.w.l, 1); + state_save_UINT16(file, "z80", cpu, "HL2", &Z80.HL2.w.l, 1); + state_save_UINT8(file, "z80", cpu, "R", &Z80.R, 1); + state_save_UINT8(file, "z80", cpu, "R2", &Z80.R2, 1); + state_save_UINT8(file, "z80", cpu, "IFF1", &Z80.IFF1, 1); + state_save_UINT8(file, "z80", cpu, "IFF2", &Z80.IFF2, 1); + state_save_UINT8(file, "z80", cpu, "HALT", &Z80.HALT, 1); + state_save_UINT8(file, "z80", cpu, "IM", &Z80.IM, 1); + state_save_UINT8(file, "z80", cpu, "I", &Z80.I, 1); + state_save_UINT8(file, "z80", cpu, "irq_max", &Z80.irq_max, 1); + state_save_INT8(file, "z80", cpu, "request_irq", &Z80.request_irq, 1); + state_save_INT8(file, "z80", cpu, "service_irq", &Z80.service_irq, 1); + state_save_UINT8(file, "z80", cpu, "int_state", Z80.int_state, 4); + state_save_UINT8(file, "z80", cpu, "nmi_state", &Z80.nmi_state, 1); + state_save_UINT8(file, "z80", cpu, "irq_state", &Z80.irq_state, 1); + /* daisy chain needs to be saved by z80ctc.c somehow */ +} + +/**************************************************************************** + * Load CPU state + ****************************************************************************/ +void z80_state_load(void *file) +{ + int cpu = cpu_getactivecpu(); + state_load_UINT16(file, "z80", cpu, "AF", &Z80.AF.w.l, 1); + state_load_UINT16(file, "z80", cpu, "BC", &Z80.BC.w.l, 1); + state_load_UINT16(file, "z80", cpu, "DE", &Z80.DE.w.l, 1); + state_load_UINT16(file, "z80", cpu, "HL", &Z80.HL.w.l, 1); + state_load_UINT16(file, "z80", cpu, "IX", &Z80.IX.w.l, 1); + state_load_UINT16(file, "z80", cpu, "IY", &Z80.IY.w.l, 1); + state_load_UINT16(file, "z80", cpu, "PC", &Z80.PC.w.l, 1); + state_load_UINT16(file, "z80", cpu, "SP", &Z80.SP.w.l, 1); + state_load_UINT16(file, "z80", cpu, "AF2", &Z80.AF2.w.l, 1); + state_load_UINT16(file, "z80", cpu, "BC2", &Z80.BC2.w.l, 1); + state_load_UINT16(file, "z80", cpu, "DE2", &Z80.DE2.w.l, 1); + state_load_UINT16(file, "z80", cpu, "HL2", &Z80.HL2.w.l, 1); + state_load_UINT8(file, "z80", cpu, "R", &Z80.R, 1); + state_load_UINT8(file, "z80", cpu, "R2", &Z80.R2, 1); + state_load_UINT8(file, "z80", cpu, "IFF1", &Z80.IFF1, 1); + state_load_UINT8(file, "z80", cpu, "IFF2", &Z80.IFF2, 1); + state_load_UINT8(file, "z80", cpu, "HALT", &Z80.HALT, 1); + state_load_UINT8(file, "z80", cpu, "IM", &Z80.IM, 1); + state_load_UINT8(file, "z80", cpu, "I", &Z80.I, 1); + state_load_UINT8(file, "z80", cpu, "irq_max", &Z80.irq_max, 1); + state_load_INT8(file, "z80", cpu, "request_irq", &Z80.request_irq, 1); + state_load_INT8(file, "z80", cpu, "service_irq", &Z80.service_irq, 1); + state_load_UINT8(file, "z80", cpu, "int_state", Z80.int_state, 4); + state_load_UINT8(file, "z80", cpu, "nmi_state", &Z80.nmi_state, 1); + state_load_UINT8(file, "z80", cpu, "irq_state", &Z80.irq_state, 1); + /* daisy chain needs to be restored by z80ctc.c somehow */ +} + +/**************************************************************************** + * Return a formatted string for a register + ****************************************************************************/ +const char *z80_info(void *context, int regnum) +{ + static char buffer[32][47+1]; + static int which = 0; + Z80_Regs *r = context; + + which = ++which % 32; + buffer[which][0] = '\0'; + if( !context ) + r = &Z80; + + switch( regnum ) + { + case CPU_INFO_REG+Z80_PC: sprintf(buffer[which], "PC:%04X", r->PC.w.l); break; + case CPU_INFO_REG+Z80_SP: sprintf(buffer[which], "SP:%04X", r->SP.w.l); break; + case CPU_INFO_REG+Z80_AF: sprintf(buffer[which], "AF:%04X", r->AF.w.l); break; + case CPU_INFO_REG+Z80_BC: sprintf(buffer[which], "BC:%04X", r->BC.w.l); break; + case CPU_INFO_REG+Z80_DE: sprintf(buffer[which], "DE:%04X", r->DE.w.l); break; + case CPU_INFO_REG+Z80_HL: sprintf(buffer[which], "HL:%04X", r->HL.w.l); break; + case CPU_INFO_REG+Z80_IX: sprintf(buffer[which], "IX:%04X", r->IX.w.l); break; + case CPU_INFO_REG+Z80_IY: sprintf(buffer[which], "IY:%04X", r->IY.w.l); break; + case CPU_INFO_REG+Z80_R: sprintf(buffer[which], "R:%02X", (r->R & 0x7f) | (r->R2 & 0x80)); break; + case CPU_INFO_REG+Z80_I: sprintf(buffer[which], "I:%02X", r->I); break; + case CPU_INFO_REG+Z80_AF2: sprintf(buffer[which], "AF'%04X", r->AF2.w.l); break; + case CPU_INFO_REG+Z80_BC2: sprintf(buffer[which], "BC'%04X", r->BC2.w.l); break; + case CPU_INFO_REG+Z80_DE2: sprintf(buffer[which], "DE'%04X", r->DE2.w.l); break; + case CPU_INFO_REG+Z80_HL2: sprintf(buffer[which], "HL'%04X", r->HL2.w.l); break; + case CPU_INFO_REG+Z80_IM: sprintf(buffer[which], "IM:%X", r->IM); break; + case CPU_INFO_REG+Z80_IFF1: sprintf(buffer[which], "IFF1:%X", r->IFF1); break; + case CPU_INFO_REG+Z80_IFF2: sprintf(buffer[which], "IFF2:%X", r->IFF2); break; + case CPU_INFO_REG+Z80_HALT: sprintf(buffer[which], "HALT:%X", r->HALT); break; + case CPU_INFO_REG+Z80_NMI_STATE: sprintf(buffer[which], "NMI:%X", r->nmi_state); break; + case CPU_INFO_REG+Z80_IRQ_STATE: sprintf(buffer[which], "IRQ:%X", r->irq_state); break; + case CPU_INFO_REG+Z80_DC0: if(Z80.irq_max >= 1) sprintf(buffer[which], "DC0:%X", r->int_state[0]); break; + case CPU_INFO_REG+Z80_DC1: if(Z80.irq_max >= 2) sprintf(buffer[which], "DC1:%X", r->int_state[1]); break; + case CPU_INFO_REG+Z80_DC2: if(Z80.irq_max >= 3) sprintf(buffer[which], "DC2:%X", r->int_state[2]); break; + case CPU_INFO_REG+Z80_DC3: if(Z80.irq_max >= 4) sprintf(buffer[which], "DC3:%X", r->int_state[3]); break; + case CPU_INFO_FLAGS: + sprintf(buffer[which], "%c%c%c%c%c%c%c%c", + r->AF.b.l & 0x80 ? 'S':'.', + r->AF.b.l & 0x40 ? 'Z':'.', + r->AF.b.l & 0x20 ? '5':'.', + r->AF.b.l & 0x10 ? 'H':'.', + r->AF.b.l & 0x08 ? '3':'.', + r->AF.b.l & 0x04 ? 'P':'.', + r->AF.b.l & 0x02 ? 'N':'.', + r->AF.b.l & 0x01 ? 'C':'.'); + break; + case CPU_INFO_NAME: return "Z80"; + case CPU_INFO_FAMILY: return "Zilog Z80"; + case CPU_INFO_VERSION: return "3.2"; + case CPU_INFO_FILE: return __FILE__; + case CPU_INFO_CREDITS: return "Copyright (C) 1998,1999 Juergen Buchmueller, all rights reserved."; + case CPU_INFO_REG_LAYOUT: return (const char *)z80_reg_layout; + case CPU_INFO_WIN_LAYOUT: return (const char *)z80_win_layout; + } + return buffer[which]; +} + +unsigned z80_dasm( char *buffer, unsigned pc ) +{ +#ifdef MAME_DEBUG + return DasmZ80( buffer, pc ); +#else + sprintf( buffer, "$%02X", cpu_readop(pc) ); + return 1; +#endif +} +#endif diff --git a/ genplus-gx/source/cpu/z80.h b/ genplus-gx/source/cpu/z80.h new file mode 100644 index 0000000..c921dcf --- /dev/null +++ b/ genplus-gx/source/cpu/z80.h @@ -0,0 +1,62 @@ +#ifndef Z80_H +#define Z80_H + +#include "cpuintrf.h" +#include "osd_cpu.h" + +enum { + Z80_PC=1, Z80_SP, Z80_AF, Z80_BC, Z80_DE, Z80_HL, + Z80_IX, Z80_IY, Z80_AF2, Z80_BC2, Z80_DE2, Z80_HL2, + Z80_R, Z80_I, Z80_IM, Z80_IFF1, Z80_IFF2, Z80_HALT, + Z80_NMI_STATE, Z80_IRQ_STATE, Z80_DC0, Z80_DC1, Z80_DC2, Z80_DC3 +}; + +enum { + Z80_TABLE_op, + Z80_TABLE_cb, + Z80_TABLE_ed, + Z80_TABLE_xy, + Z80_TABLE_xycb, + Z80_TABLE_ex /* cycles counts for taken jr/jp/call and interrupt latency (rst opcodes) */ +}; + +extern int z80_ICount; /* T-state count */ + +#define Z80_IGNORE_INT -1 /* Ignore interrupt */ +#define Z80_NMI_INT -2 /* Execute NMI */ +#define Z80_IRQ_INT -1000 /* Execute IRQ */ + +extern void z80_reset (void *param); +extern void z80_exit (void); +extern void z80_end_timeslice(void); +extern int z80_execute(int cycles); +extern void z80_burn(int cycles); +extern unsigned z80_get_context (void *dst); +extern void z80_set_context (void *src); +extern void *z80_get_cycle_table (int which); +extern void z80_set_cycle_table (int which, void *new_tbl); +extern unsigned z80_get_pc (void); +extern void z80_set_pc (unsigned val); +extern unsigned z80_get_sp (void); +extern void z80_set_sp (unsigned val); +extern unsigned z80_get_reg (int regnum); +extern void z80_set_reg (int regnum, unsigned val); +extern void z80_set_nmi_line(int state); +extern void z80_set_irq_line(int irqline, int state); +extern void z80_set_irq_callback(int (*irq_callback)(int)); +extern void z80_state_save(void *file); +extern void z80_state_load(void *file); +extern const char *z80_info(void *context, int regnum); +extern unsigned z80_dasm(char *buffer, unsigned pc); + +#ifdef MAME_DEBUG +extern unsigned DasmZ80(char *buffer, unsigned pc); +#endif + +unsigned int cpu_readport16(unsigned int port); +void cpu_writeport16(unsigned int port, unsigned int data); +unsigned int cpu_readmem16(unsigned int address); +void cpu_writemem16(unsigned int address, unsigned int data); + +#endif + diff --git a/ genplus-gx/source/cpu/z80daa.h b/ genplus-gx/source/cpu/z80daa.h new file mode 100644 index 0000000..44dbbd3 --- /dev/null +++ b/ genplus-gx/source/cpu/z80daa.h @@ -0,0 +1,2051 @@ +static UINT16 DAATable[0x800] = { + (0x00<<8) +ZF +VF , + (0x01<<8) , + (0x02<<8) , + (0x03<<8) +VF , + (0x04<<8) , + (0x05<<8) +VF , + (0x06<<8) +VF , + (0x07<<8) , + (0x08<<8) +XF , + (0x09<<8) +XF+VF , + (0x10<<8) +HF , + (0x11<<8) +HF +VF , + (0x12<<8) +HF +VF , + (0x13<<8) +HF , + (0x14<<8) +HF +VF , + (0x15<<8) +HF , + (0x10<<8) , + (0x11<<8) +VF , + (0x12<<8) +VF , + (0x13<<8) , + (0x14<<8) +VF , + (0x15<<8) , + (0x16<<8) , + (0x17<<8) +VF , + (0x18<<8) +XF+VF , + (0x19<<8) +XF , + (0x20<<8) +YF+HF , + (0x21<<8) +YF+HF +VF , + (0x22<<8) +YF+HF +VF , + (0x23<<8) +YF+HF , + (0x24<<8) +YF+HF +VF , + (0x25<<8) +YF+HF , + (0x20<<8) +YF , + (0x21<<8) +YF +VF , + (0x22<<8) +YF +VF , + (0x23<<8) +YF , + (0x24<<8) +YF +VF , + (0x25<<8) +YF , + (0x26<<8) +YF , + (0x27<<8) +YF +VF , + (0x28<<8) +YF +XF+VF , + (0x29<<8) +YF +XF , + (0x30<<8) +YF+HF +VF , + (0x31<<8) +YF+HF , + (0x32<<8) +YF+HF , + (0x33<<8) +YF+HF +VF , + (0x34<<8) +YF+HF , + (0x35<<8) +YF+HF +VF , + (0x30<<8) +YF +VF , + (0x31<<8) +YF , + (0x32<<8) +YF , + (0x33<<8) +YF +VF , + (0x34<<8) +YF , + (0x35<<8) +YF +VF , + (0x36<<8) +YF +VF , + (0x37<<8) +YF , + (0x38<<8) +YF +XF , + (0x39<<8) +YF +XF+VF , + (0x40<<8) +HF , + (0x41<<8) +HF +VF , + (0x42<<8) +HF +VF , + (0x43<<8) +HF , + (0x44<<8) +HF +VF , + (0x45<<8) +HF , + (0x40<<8) , + (0x41<<8) +VF , + (0x42<<8) +VF , + (0x43<<8) , + (0x44<<8) +VF , + (0x45<<8) , + (0x46<<8) , + (0x47<<8) +VF , + (0x48<<8) +XF+VF , + (0x49<<8) +XF , + (0x50<<8) +HF +VF , + (0x51<<8) +HF , + (0x52<<8) +HF , + (0x53<<8) +HF +VF , + (0x54<<8) +HF , + (0x55<<8) +HF +VF , + (0x50<<8) +VF , + (0x51<<8) , + (0x52<<8) , + (0x53<<8) +VF , + (0x54<<8) , + (0x55<<8) +VF , + (0x56<<8) +VF , + (0x57<<8) , + (0x58<<8) +XF , + (0x59<<8) +XF+VF , + (0x60<<8) +YF+HF +VF , + (0x61<<8) +YF+HF , + (0x62<<8) +YF+HF , + (0x63<<8) +YF+HF +VF , + (0x64<<8) +YF+HF , + (0x65<<8) +YF+HF +VF , + (0x60<<8) +YF +VF , + (0x61<<8) +YF , + (0x62<<8) +YF , + (0x63<<8) +YF +VF , + (0x64<<8) +YF , + (0x65<<8) +YF +VF , + (0x66<<8) +YF +VF , + (0x67<<8) +YF , + (0x68<<8) +YF +XF , + (0x69<<8) +YF +XF+VF , + (0x70<<8) +YF+HF , + (0x71<<8) +YF+HF +VF , + (0x72<<8) +YF+HF +VF , + (0x73<<8) +YF+HF , + (0x74<<8) +YF+HF +VF , + (0x75<<8) +YF+HF , + (0x70<<8) +YF , + (0x71<<8) +YF +VF , + (0x72<<8) +YF +VF , + (0x73<<8) +YF , + (0x74<<8) +YF +VF , + (0x75<<8) +YF , + (0x76<<8) +YF , + (0x77<<8) +YF +VF , + (0x78<<8) +YF +XF+VF , + (0x79<<8) +YF +XF , + (0x80<<8)+SF +HF , + (0x81<<8)+SF +HF +VF , + (0x82<<8)+SF +HF +VF , + (0x83<<8)+SF +HF , + (0x84<<8)+SF +HF +VF , + (0x85<<8)+SF +HF , + (0x80<<8)+SF , + (0x81<<8)+SF +VF , + (0x82<<8)+SF +VF , + (0x83<<8)+SF , + (0x84<<8)+SF +VF , + (0x85<<8)+SF , + (0x86<<8)+SF , + (0x87<<8)+SF +VF , + (0x88<<8)+SF +XF+VF , + (0x89<<8)+SF +XF , + (0x90<<8)+SF +HF +VF , + (0x91<<8)+SF +HF , + (0x92<<8)+SF +HF , + (0x93<<8)+SF +HF +VF , + (0x94<<8)+SF +HF , + (0x95<<8)+SF +HF +VF , + (0x90<<8)+SF +VF , + (0x91<<8)+SF , + (0x92<<8)+SF , + (0x93<<8)+SF +VF , + (0x94<<8)+SF , + (0x95<<8)+SF +VF , + (0x96<<8)+SF +VF , + (0x97<<8)+SF , + (0x98<<8)+SF +XF , + (0x99<<8)+SF +XF+VF , + (0x00<<8) +ZF +HF +VF +CF, + (0x01<<8) +HF +CF, + (0x02<<8) +HF +CF, + (0x03<<8) +HF +VF +CF, + (0x04<<8) +HF +CF, + (0x05<<8) +HF +VF +CF, + (0x00<<8) +ZF +VF +CF, + (0x01<<8) +CF, + (0x02<<8) +CF, + (0x03<<8) +VF +CF, + (0x04<<8) +CF, + (0x05<<8) +VF +CF, + (0x06<<8) +VF +CF, + (0x07<<8) +CF, + (0x08<<8) +XF +CF, + (0x09<<8) +XF+VF +CF, + (0x10<<8) +HF +CF, + (0x11<<8) +HF +VF +CF, + (0x12<<8) +HF +VF +CF, + (0x13<<8) +HF +CF, + (0x14<<8) +HF +VF +CF, + (0x15<<8) +HF +CF, + (0x10<<8) +CF, + (0x11<<8) +VF +CF, + (0x12<<8) +VF +CF, + (0x13<<8) +CF, + (0x14<<8) +VF +CF, + (0x15<<8) +CF, + (0x16<<8) +CF, + (0x17<<8) +VF +CF, + (0x18<<8) +XF+VF +CF, + (0x19<<8) +XF +CF, + (0x20<<8) +YF+HF +CF, + (0x21<<8) +YF+HF +VF +CF, + (0x22<<8) +YF+HF +VF +CF, + (0x23<<8) +YF+HF +CF, + (0x24<<8) +YF+HF +VF +CF, + (0x25<<8) +YF+HF +CF, + (0x20<<8) +YF +CF, + (0x21<<8) +YF +VF +CF, + (0x22<<8) +YF +VF +CF, + (0x23<<8) +YF +CF, + (0x24<<8) +YF +VF +CF, + (0x25<<8) +YF +CF, + (0x26<<8) +YF +CF, + (0x27<<8) +YF +VF +CF, + (0x28<<8) +YF +XF+VF +CF, + (0x29<<8) +YF +XF +CF, + (0x30<<8) +YF+HF +VF +CF, + (0x31<<8) +YF+HF +CF, + (0x32<<8) +YF+HF +CF, + (0x33<<8) +YF+HF +VF +CF, + (0x34<<8) +YF+HF +CF, + (0x35<<8) +YF+HF +VF +CF, + (0x30<<8) +YF +VF +CF, + (0x31<<8) +YF +CF, + (0x32<<8) +YF +CF, + (0x33<<8) +YF +VF +CF, + (0x34<<8) +YF +CF, + (0x35<<8) +YF +VF +CF, + (0x36<<8) +YF +VF +CF, + (0x37<<8) +YF +CF, + (0x38<<8) +YF +XF +CF, + (0x39<<8) +YF +XF+VF +CF, + (0x40<<8) +HF +CF, + (0x41<<8) +HF +VF +CF, + (0x42<<8) +HF +VF +CF, + (0x43<<8) +HF +CF, + (0x44<<8) +HF +VF +CF, + (0x45<<8) +HF +CF, + (0x40<<8) +CF, + (0x41<<8) +VF +CF, + (0x42<<8) +VF +CF, + (0x43<<8) +CF, + (0x44<<8) +VF +CF, + (0x45<<8) +CF, + (0x46<<8) +CF, + (0x47<<8) +VF +CF, + (0x48<<8) +XF+VF +CF, + (0x49<<8) +XF +CF, + (0x50<<8) +HF +VF +CF, + (0x51<<8) +HF +CF, + (0x52<<8) +HF +CF, + (0x53<<8) +HF +VF +CF, + (0x54<<8) +HF +CF, + (0x55<<8) +HF +VF +CF, + (0x50<<8) +VF +CF, + (0x51<<8) +CF, + (0x52<<8) +CF, + (0x53<<8) +VF +CF, + (0x54<<8) +CF, + (0x55<<8) +VF +CF, + (0x56<<8) +VF +CF, + (0x57<<8) +CF, + (0x58<<8) +XF +CF, + (0x59<<8) +XF+VF +CF, + (0x60<<8) +YF+HF +VF +CF, + (0x61<<8) +YF+HF +CF, + (0x62<<8) +YF+HF +CF, + (0x63<<8) +YF+HF +VF +CF, + (0x64<<8) +YF+HF +CF, + (0x65<<8) +YF+HF +VF +CF, + (0x60<<8) +YF +VF +CF, + (0x61<<8) +YF +CF, + (0x62<<8) +YF +CF, + (0x63<<8) +YF +VF +CF, + (0x64<<8) +YF +CF, + (0x65<<8) +YF +VF +CF, + (0x66<<8) +YF +VF +CF, + (0x67<<8) +YF +CF, + (0x68<<8) +YF +XF +CF, + (0x69<<8) +YF +XF+VF +CF, + (0x70<<8) +YF+HF +CF, + (0x71<<8) +YF+HF +VF +CF, + (0x72<<8) +YF+HF +VF +CF, + (0x73<<8) +YF+HF +CF, + (0x74<<8) +YF+HF +VF +CF, + (0x75<<8) +YF+HF +CF, + (0x70<<8) +YF +CF, + (0x71<<8) +YF +VF +CF, + (0x72<<8) +YF +VF +CF, + (0x73<<8) +YF +CF, + (0x74<<8) +YF +VF +CF, + (0x75<<8) +YF +CF, + (0x76<<8) +YF +CF, + (0x77<<8) +YF +VF +CF, + (0x78<<8) +YF +XF+VF +CF, + (0x79<<8) +YF +XF +CF, + (0x80<<8)+SF +HF +CF, + (0x81<<8)+SF +HF +VF +CF, + (0x82<<8)+SF +HF +VF +CF, + (0x83<<8)+SF +HF +CF, + (0x84<<8)+SF +HF +VF +CF, + (0x85<<8)+SF +HF +CF, + (0x80<<8)+SF +CF, + (0x81<<8)+SF +VF +CF, + (0x82<<8)+SF +VF +CF, + (0x83<<8)+SF +CF, + (0x84<<8)+SF +VF +CF, + (0x85<<8)+SF +CF, + (0x86<<8)+SF +CF, + (0x87<<8)+SF +VF +CF, + (0x88<<8)+SF +XF+VF +CF, + (0x89<<8)+SF +XF +CF, + (0x90<<8)+SF +HF +VF +CF, + (0x91<<8)+SF +HF +CF, + (0x92<<8)+SF +HF +CF, + (0x93<<8)+SF +HF +VF +CF, + (0x94<<8)+SF +HF +CF, + (0x95<<8)+SF +HF +VF +CF, + (0x90<<8)+SF +VF +CF, + (0x91<<8)+SF +CF, + (0x92<<8)+SF +CF, + (0x93<<8)+SF +VF +CF, + (0x94<<8)+SF +CF, + (0x95<<8)+SF +VF +CF, + (0x96<<8)+SF +VF +CF, + (0x97<<8)+SF +CF, + (0x98<<8)+SF +XF +CF, + (0x99<<8)+SF +XF+VF +CF, + (0xA0<<8)+SF +YF+HF +VF +CF, + (0xA1<<8)+SF +YF+HF +CF, + (0xA2<<8)+SF +YF+HF +CF, + (0xA3<<8)+SF +YF+HF +VF +CF, + (0xA4<<8)+SF +YF+HF +CF, + (0xA5<<8)+SF +YF+HF +VF +CF, + (0xA0<<8)+SF +YF +VF +CF, + (0xA1<<8)+SF +YF +CF, + (0xA2<<8)+SF +YF +CF, + (0xA3<<8)+SF +YF +VF +CF, + (0xA4<<8)+SF +YF +CF, + (0xA5<<8)+SF +YF +VF +CF, + (0xA6<<8)+SF +YF +VF +CF, + (0xA7<<8)+SF +YF +CF, + (0xA8<<8)+SF +YF +XF +CF, + (0xA9<<8)+SF +YF +XF+VF +CF, + (0xB0<<8)+SF +YF+HF +CF, + (0xB1<<8)+SF +YF+HF +VF +CF, + (0xB2<<8)+SF +YF+HF +VF +CF, + (0xB3<<8)+SF +YF+HF +CF, + (0xB4<<8)+SF +YF+HF +VF +CF, + (0xB5<<8)+SF +YF+HF +CF, + (0xB0<<8)+SF +YF +CF, + (0xB1<<8)+SF +YF +VF +CF, + (0xB2<<8)+SF +YF +VF +CF, + (0xB3<<8)+SF +YF +CF, + (0xB4<<8)+SF +YF +VF +CF, + (0xB5<<8)+SF +YF +CF, + (0xB6<<8)+SF +YF +CF, + (0xB7<<8)+SF +YF +VF +CF, + (0xB8<<8)+SF +YF +XF+VF +CF, + (0xB9<<8)+SF +YF +XF +CF, + (0xC0<<8)+SF +HF +VF +CF, + (0xC1<<8)+SF +HF +CF, + (0xC2<<8)+SF +HF +CF, + (0xC3<<8)+SF +HF +VF +CF, + (0xC4<<8)+SF +HF +CF, + (0xC5<<8)+SF +HF +VF +CF, + (0xC0<<8)+SF +VF +CF, + (0xC1<<8)+SF +CF, + (0xC2<<8)+SF +CF, + (0xC3<<8)+SF +VF +CF, + (0xC4<<8)+SF +CF, + (0xC5<<8)+SF +VF +CF, + (0xC6<<8)+SF +VF +CF, + (0xC7<<8)+SF +CF, + (0xC8<<8)+SF +XF +CF, + (0xC9<<8)+SF +XF+VF +CF, + (0xD0<<8)+SF +HF +CF, + (0xD1<<8)+SF +HF +VF +CF, + (0xD2<<8)+SF +HF +VF +CF, + (0xD3<<8)+SF +HF +CF, + (0xD4<<8)+SF +HF +VF +CF, + (0xD5<<8)+SF +HF +CF, + (0xD0<<8)+SF +CF, + (0xD1<<8)+SF +VF +CF, + (0xD2<<8)+SF +VF +CF, + (0xD3<<8)+SF +CF, + (0xD4<<8)+SF +VF +CF, + (0xD5<<8)+SF +CF, + (0xD6<<8)+SF +CF, + (0xD7<<8)+SF +VF +CF, + (0xD8<<8)+SF +XF+VF +CF, + (0xD9<<8)+SF +XF +CF, + (0xE0<<8)+SF +YF+HF +CF, + (0xE1<<8)+SF +YF+HF +VF +CF, + (0xE2<<8)+SF +YF+HF +VF +CF, + (0xE3<<8)+SF +YF+HF +CF, + (0xE4<<8)+SF +YF+HF +VF +CF, + (0xE5<<8)+SF +YF+HF +CF, + (0xE0<<8)+SF +YF +CF, + (0xE1<<8)+SF +YF +VF +CF, + (0xE2<<8)+SF +YF +VF +CF, + (0xE3<<8)+SF +YF +CF, + (0xE4<<8)+SF +YF +VF +CF, + (0xE5<<8)+SF +YF +CF, + (0xE6<<8)+SF +YF +CF, + (0xE7<<8)+SF +YF +VF +CF, + (0xE8<<8)+SF +YF +XF+VF +CF, + (0xE9<<8)+SF +YF +XF +CF, + (0xF0<<8)+SF +YF+HF +VF +CF, + (0xF1<<8)+SF +YF+HF +CF, + (0xF2<<8)+SF +YF+HF +CF, + (0xF3<<8)+SF +YF+HF +VF +CF, + (0xF4<<8)+SF +YF+HF +CF, + (0xF5<<8)+SF +YF+HF +VF +CF, + (0xF0<<8)+SF +YF +VF +CF, + (0xF1<<8)+SF +YF +CF, + (0xF2<<8)+SF +YF +CF, + (0xF3<<8)+SF +YF +VF +CF, + (0xF4<<8)+SF +YF +CF, + (0xF5<<8)+SF +YF +VF +CF, + (0xF6<<8)+SF +YF +VF +CF, + (0xF7<<8)+SF +YF +CF, + (0xF8<<8)+SF +YF +XF +CF, + (0xF9<<8)+SF +YF +XF+VF +CF, + (0x00<<8) +ZF +HF +VF +CF, + (0x01<<8) +HF +CF, + (0x02<<8) +HF +CF, + (0x03<<8) +HF +VF +CF, + (0x04<<8) +HF +CF, + (0x05<<8) +HF +VF +CF, + (0x00<<8) +ZF +VF +CF, + (0x01<<8) +CF, + (0x02<<8) +CF, + (0x03<<8) +VF +CF, + (0x04<<8) +CF, + (0x05<<8) +VF +CF, + (0x06<<8) +VF +CF, + (0x07<<8) +CF, + (0x08<<8) +XF +CF, + (0x09<<8) +XF+VF +CF, + (0x10<<8) +HF +CF, + (0x11<<8) +HF +VF +CF, + (0x12<<8) +HF +VF +CF, + (0x13<<8) +HF +CF, + (0x14<<8) +HF +VF +CF, + (0x15<<8) +HF +CF, + (0x10<<8) +CF, + (0x11<<8) +VF +CF, + (0x12<<8) +VF +CF, + (0x13<<8) +CF, + (0x14<<8) +VF +CF, + (0x15<<8) +CF, + (0x16<<8) +CF, + (0x17<<8) +VF +CF, + (0x18<<8) +XF+VF +CF, + (0x19<<8) +XF +CF, + (0x20<<8) +YF+HF +CF, + (0x21<<8) +YF+HF +VF +CF, + (0x22<<8) +YF+HF +VF +CF, + (0x23<<8) +YF+HF +CF, + (0x24<<8) +YF+HF +VF +CF, + (0x25<<8) +YF+HF +CF, + (0x20<<8) +YF +CF, + (0x21<<8) +YF +VF +CF, + (0x22<<8) +YF +VF +CF, + (0x23<<8) +YF +CF, + (0x24<<8) +YF +VF +CF, + (0x25<<8) +YF +CF, + (0x26<<8) +YF +CF, + (0x27<<8) +YF +VF +CF, + (0x28<<8) +YF +XF+VF +CF, + (0x29<<8) +YF +XF +CF, + (0x30<<8) +YF+HF +VF +CF, + (0x31<<8) +YF+HF +CF, + (0x32<<8) +YF+HF +CF, + (0x33<<8) +YF+HF +VF +CF, + (0x34<<8) +YF+HF +CF, + (0x35<<8) +YF+HF +VF +CF, + (0x30<<8) +YF +VF +CF, + (0x31<<8) +YF +CF, + (0x32<<8) +YF +CF, + (0x33<<8) +YF +VF +CF, + (0x34<<8) +YF +CF, + (0x35<<8) +YF +VF +CF, + (0x36<<8) +YF +VF +CF, + (0x37<<8) +YF +CF, + (0x38<<8) +YF +XF +CF, + (0x39<<8) +YF +XF+VF +CF, + (0x40<<8) +HF +CF, + (0x41<<8) +HF +VF +CF, + (0x42<<8) +HF +VF +CF, + (0x43<<8) +HF +CF, + (0x44<<8) +HF +VF +CF, + (0x45<<8) +HF +CF, + (0x40<<8) +CF, + (0x41<<8) +VF +CF, + (0x42<<8) +VF +CF, + (0x43<<8) +CF, + (0x44<<8) +VF +CF, + (0x45<<8) +CF, + (0x46<<8) +CF, + (0x47<<8) +VF +CF, + (0x48<<8) +XF+VF +CF, + (0x49<<8) +XF +CF, + (0x50<<8) +HF +VF +CF, + (0x51<<8) +HF +CF, + (0x52<<8) +HF +CF, + (0x53<<8) +HF +VF +CF, + (0x54<<8) +HF +CF, + (0x55<<8) +HF +VF +CF, + (0x50<<8) +VF +CF, + (0x51<<8) +CF, + (0x52<<8) +CF, + (0x53<<8) +VF +CF, + (0x54<<8) +CF, + (0x55<<8) +VF +CF, + (0x56<<8) +VF +CF, + (0x57<<8) +CF, + (0x58<<8) +XF +CF, + (0x59<<8) +XF+VF +CF, + (0x60<<8) +YF+HF +VF +CF, + (0x61<<8) +YF+HF +CF, + (0x62<<8) +YF+HF +CF, + (0x63<<8) +YF+HF +VF +CF, + (0x64<<8) +YF+HF +CF, + (0x65<<8) +YF+HF +VF +CF, + (0x06<<8) +VF , + (0x07<<8) , + (0x08<<8) +XF , + (0x09<<8) +XF+VF , + (0x0A<<8) +XF+VF , + (0x0B<<8) +XF , + (0x0C<<8) +XF+VF , + (0x0D<<8) +XF , + (0x0E<<8) +XF , + (0x0F<<8) +XF+VF , + (0x10<<8) +HF , + (0x11<<8) +HF +VF , + (0x12<<8) +HF +VF , + (0x13<<8) +HF , + (0x14<<8) +HF +VF , + (0x15<<8) +HF , + (0x16<<8) , + (0x17<<8) +VF , + (0x18<<8) +XF+VF , + (0x19<<8) +XF , + (0x1A<<8) +XF , + (0x1B<<8) +XF+VF , + (0x1C<<8) +XF , + (0x1D<<8) +XF+VF , + (0x1E<<8) +XF+VF , + (0x1F<<8) +XF , + (0x20<<8) +YF+HF , + (0x21<<8) +YF+HF +VF , + (0x22<<8) +YF+HF +VF , + (0x23<<8) +YF+HF , + (0x24<<8) +YF+HF +VF , + (0x25<<8) +YF+HF , + (0x26<<8) +YF , + (0x27<<8) +YF +VF , + (0x28<<8) +YF +XF+VF , + (0x29<<8) +YF +XF , + (0x2A<<8) +YF +XF , + (0x2B<<8) +YF +XF+VF , + (0x2C<<8) +YF +XF , + (0x2D<<8) +YF +XF+VF , + (0x2E<<8) +YF +XF+VF , + (0x2F<<8) +YF +XF , + (0x30<<8) +YF+HF +VF , + (0x31<<8) +YF+HF , + (0x32<<8) +YF+HF , + (0x33<<8) +YF+HF +VF , + (0x34<<8) +YF+HF , + (0x35<<8) +YF+HF +VF , + (0x36<<8) +YF +VF , + (0x37<<8) +YF , + (0x38<<8) +YF +XF , + (0x39<<8) +YF +XF+VF , + (0x3A<<8) +YF +XF+VF , + (0x3B<<8) +YF +XF , + (0x3C<<8) +YF +XF+VF , + (0x3D<<8) +YF +XF , + (0x3E<<8) +YF +XF , + (0x3F<<8) +YF +XF+VF , + (0x40<<8) +HF , + (0x41<<8) +HF +VF , + (0x42<<8) +HF +VF , + (0x43<<8) +HF , + (0x44<<8) +HF +VF , + (0x45<<8) +HF , + (0x46<<8) , + (0x47<<8) +VF , + (0x48<<8) +XF+VF , + (0x49<<8) +XF , + (0x4A<<8) +XF , + (0x4B<<8) +XF+VF , + (0x4C<<8) +XF , + (0x4D<<8) +XF+VF , + (0x4E<<8) +XF+VF , + (0x4F<<8) +XF , + (0x50<<8) +HF +VF , + (0x51<<8) +HF , + (0x52<<8) +HF , + (0x53<<8) +HF +VF , + (0x54<<8) +HF , + (0x55<<8) +HF +VF , + (0x56<<8) +VF , + (0x57<<8) , + (0x58<<8) +XF , + (0x59<<8) +XF+VF , + (0x5A<<8) +XF+VF , + (0x5B<<8) +XF , + (0x5C<<8) +XF+VF , + (0x5D<<8) +XF , + (0x5E<<8) +XF , + (0x5F<<8) +XF+VF , + (0x60<<8) +YF+HF +VF , + (0x61<<8) +YF+HF , + (0x62<<8) +YF+HF , + (0x63<<8) +YF+HF +VF , + (0x64<<8) +YF+HF , + (0x65<<8) +YF+HF +VF , + (0x66<<8) +YF +VF , + (0x67<<8) +YF , + (0x68<<8) +YF +XF , + (0x69<<8) +YF +XF+VF , + (0x6A<<8) +YF +XF+VF , + (0x6B<<8) +YF +XF , + (0x6C<<8) +YF +XF+VF , + (0x6D<<8) +YF +XF , + (0x6E<<8) +YF +XF , + (0x6F<<8) +YF +XF+VF , + (0x70<<8) +YF+HF , + (0x71<<8) +YF+HF +VF , + (0x72<<8) +YF+HF +VF , + (0x73<<8) +YF+HF , + (0x74<<8) +YF+HF +VF , + (0x75<<8) +YF+HF , + (0x76<<8) +YF , + (0x77<<8) +YF +VF , + (0x78<<8) +YF +XF+VF , + (0x79<<8) +YF +XF , + (0x7A<<8) +YF +XF , + (0x7B<<8) +YF +XF+VF , + (0x7C<<8) +YF +XF , + (0x7D<<8) +YF +XF+VF , + (0x7E<<8) +YF +XF+VF , + (0x7F<<8) +YF +XF , + (0x80<<8)+SF +HF , + (0x81<<8)+SF +HF +VF , + (0x82<<8)+SF +HF +VF , + (0x83<<8)+SF +HF , + (0x84<<8)+SF +HF +VF , + (0x85<<8)+SF +HF , + (0x86<<8)+SF , + (0x87<<8)+SF +VF , + (0x88<<8)+SF +XF+VF , + (0x89<<8)+SF +XF , + (0x8A<<8)+SF +XF , + (0x8B<<8)+SF +XF+VF , + (0x8C<<8)+SF +XF , + (0x8D<<8)+SF +XF+VF , + (0x8E<<8)+SF +XF+VF , + (0x8F<<8)+SF +XF , + (0x90<<8)+SF +HF +VF , + (0x91<<8)+SF +HF , + (0x92<<8)+SF +HF , + (0x93<<8)+SF +HF +VF , + (0x94<<8)+SF +HF , + (0x95<<8)+SF +HF +VF , + (0x96<<8)+SF +VF , + (0x97<<8)+SF , + (0x98<<8)+SF +XF , + (0x99<<8)+SF +XF+VF , + (0x9A<<8)+SF +XF+VF , + (0x9B<<8)+SF +XF , + (0x9C<<8)+SF +XF+VF , + (0x9D<<8)+SF +XF , + (0x9E<<8)+SF +XF , + (0x9F<<8)+SF +XF+VF , + (0x00<<8) +ZF +HF +VF +CF, + (0x01<<8) +HF +CF, + (0x02<<8) +HF +CF, + (0x03<<8) +HF +VF +CF, + (0x04<<8) +HF +CF, + (0x05<<8) +HF +VF +CF, + (0x06<<8) +VF +CF, + (0x07<<8) +CF, + (0x08<<8) +XF +CF, + (0x09<<8) +XF+VF +CF, + (0x0A<<8) +XF+VF +CF, + (0x0B<<8) +XF +CF, + (0x0C<<8) +XF+VF +CF, + (0x0D<<8) +XF +CF, + (0x0E<<8) +XF +CF, + (0x0F<<8) +XF+VF +CF, + (0x10<<8) +HF +CF, + (0x11<<8) +HF +VF +CF, + (0x12<<8) +HF +VF +CF, + (0x13<<8) +HF +CF, + (0x14<<8) +HF +VF +CF, + (0x15<<8) +HF +CF, + (0x16<<8) +CF, + (0x17<<8) +VF +CF, + (0x18<<8) +XF+VF +CF, + (0x19<<8) +XF +CF, + (0x1A<<8) +XF +CF, + (0x1B<<8) +XF+VF +CF, + (0x1C<<8) +XF +CF, + (0x1D<<8) +XF+VF +CF, + (0x1E<<8) +XF+VF +CF, + (0x1F<<8) +XF +CF, + (0x20<<8) +YF+HF +CF, + (0x21<<8) +YF+HF +VF +CF, + (0x22<<8) +YF+HF +VF +CF, + (0x23<<8) +YF+HF +CF, + (0x24<<8) +YF+HF +VF +CF, + (0x25<<8) +YF+HF +CF, + (0x26<<8) +YF +CF, + (0x27<<8) +YF +VF +CF, + (0x28<<8) +YF +XF+VF +CF, + (0x29<<8) +YF +XF +CF, + (0x2A<<8) +YF +XF +CF, + (0x2B<<8) +YF +XF+VF +CF, + (0x2C<<8) +YF +XF +CF, + (0x2D<<8) +YF +XF+VF +CF, + (0x2E<<8) +YF +XF+VF +CF, + (0x2F<<8) +YF +XF +CF, + (0x30<<8) +YF+HF +VF +CF, + (0x31<<8) +YF+HF +CF, + (0x32<<8) +YF+HF +CF, + (0x33<<8) +YF+HF +VF +CF, + (0x34<<8) +YF+HF +CF, + (0x35<<8) +YF+HF +VF +CF, + (0x36<<8) +YF +VF +CF, + (0x37<<8) +YF +CF, + (0x38<<8) +YF +XF +CF, + (0x39<<8) +YF +XF+VF +CF, + (0x3A<<8) +YF +XF+VF +CF, + (0x3B<<8) +YF +XF +CF, + (0x3C<<8) +YF +XF+VF +CF, + (0x3D<<8) +YF +XF +CF, + (0x3E<<8) +YF +XF +CF, + (0x3F<<8) +YF +XF+VF +CF, + (0x40<<8) +HF +CF, + (0x41<<8) +HF +VF +CF, + (0x42<<8) +HF +VF +CF, + (0x43<<8) +HF +CF, + (0x44<<8) +HF +VF +CF, + (0x45<<8) +HF +CF, + (0x46<<8) +CF, + (0x47<<8) +VF +CF, + (0x48<<8) +XF+VF +CF, + (0x49<<8) +XF +CF, + (0x4A<<8) +XF +CF, + (0x4B<<8) +XF+VF +CF, + (0x4C<<8) +XF +CF, + (0x4D<<8) +XF+VF +CF, + (0x4E<<8) +XF+VF +CF, + (0x4F<<8) +XF +CF, + (0x50<<8) +HF +VF +CF, + (0x51<<8) +HF +CF, + (0x52<<8) +HF +CF, + (0x53<<8) +HF +VF +CF, + (0x54<<8) +HF +CF, + (0x55<<8) +HF +VF +CF, + (0x56<<8) +VF +CF, + (0x57<<8) +CF, + (0x58<<8) +XF +CF, + (0x59<<8) +XF+VF +CF, + (0x5A<<8) +XF+VF +CF, + (0x5B<<8) +XF +CF, + (0x5C<<8) +XF+VF +CF, + (0x5D<<8) +XF +CF, + (0x5E<<8) +XF +CF, + (0x5F<<8) +XF+VF +CF, + (0x60<<8) +YF+HF +VF +CF, + (0x61<<8) +YF+HF +CF, + (0x62<<8) +YF+HF +CF, + (0x63<<8) +YF+HF +VF +CF, + (0x64<<8) +YF+HF +CF, + (0x65<<8) +YF+HF +VF +CF, + (0x66<<8) +YF +VF +CF, + (0x67<<8) +YF +CF, + (0x68<<8) +YF +XF +CF, + (0x69<<8) +YF +XF+VF +CF, + (0x6A<<8) +YF +XF+VF +CF, + (0x6B<<8) +YF +XF +CF, + (0x6C<<8) +YF +XF+VF +CF, + (0x6D<<8) +YF +XF +CF, + (0x6E<<8) +YF +XF +CF, + (0x6F<<8) +YF +XF+VF +CF, + (0x70<<8) +YF+HF +CF, + (0x71<<8) +YF+HF +VF +CF, + (0x72<<8) +YF+HF +VF +CF, + (0x73<<8) +YF+HF +CF, + (0x74<<8) +YF+HF +VF +CF, + (0x75<<8) +YF+HF +CF, + (0x76<<8) +YF +CF, + (0x77<<8) +YF +VF +CF, + (0x78<<8) +YF +XF+VF +CF, + (0x79<<8) +YF +XF +CF, + (0x7A<<8) +YF +XF +CF, + (0x7B<<8) +YF +XF+VF +CF, + (0x7C<<8) +YF +XF +CF, + (0x7D<<8) +YF +XF+VF +CF, + (0x7E<<8) +YF +XF+VF +CF, + (0x7F<<8) +YF +XF +CF, + (0x80<<8)+SF +HF +CF, + (0x81<<8)+SF +HF +VF +CF, + (0x82<<8)+SF +HF +VF +CF, + (0x83<<8)+SF +HF +CF, + (0x84<<8)+SF +HF +VF +CF, + (0x85<<8)+SF +HF +CF, + (0x86<<8)+SF +CF, + (0x87<<8)+SF +VF +CF, + (0x88<<8)+SF +XF+VF +CF, + (0x89<<8)+SF +XF +CF, + (0x8A<<8)+SF +XF +CF, + (0x8B<<8)+SF +XF+VF +CF, + (0x8C<<8)+SF +XF +CF, + (0x8D<<8)+SF +XF+VF +CF, + (0x8E<<8)+SF +XF+VF +CF, + (0x8F<<8)+SF +XF +CF, + (0x90<<8)+SF +HF +VF +CF, + (0x91<<8)+SF +HF +CF, + (0x92<<8)+SF +HF +CF, + (0x93<<8)+SF +HF +VF +CF, + (0x94<<8)+SF +HF +CF, + (0x95<<8)+SF +HF +VF +CF, + (0x96<<8)+SF +VF +CF, + (0x97<<8)+SF +CF, + (0x98<<8)+SF +XF +CF, + (0x99<<8)+SF +XF+VF +CF, + (0x9A<<8)+SF +XF+VF +CF, + (0x9B<<8)+SF +XF +CF, + (0x9C<<8)+SF +XF+VF +CF, + (0x9D<<8)+SF +XF +CF, + (0x9E<<8)+SF +XF +CF, + (0x9F<<8)+SF +XF+VF +CF, + (0xA0<<8)+SF +YF+HF +VF +CF, + (0xA1<<8)+SF +YF+HF +CF, + (0xA2<<8)+SF +YF+HF +CF, + (0xA3<<8)+SF +YF+HF +VF +CF, + (0xA4<<8)+SF +YF+HF +CF, + (0xA5<<8)+SF +YF+HF +VF +CF, + (0xA6<<8)+SF +YF +VF +CF, + (0xA7<<8)+SF +YF +CF, + (0xA8<<8)+SF +YF +XF +CF, + (0xA9<<8)+SF +YF +XF+VF +CF, + (0xAA<<8)+SF +YF +XF+VF +CF, + (0xAB<<8)+SF +YF +XF +CF, + (0xAC<<8)+SF +YF +XF+VF +CF, + (0xAD<<8)+SF +YF +XF +CF, + (0xAE<<8)+SF +YF +XF +CF, + (0xAF<<8)+SF +YF +XF+VF +CF, + (0xB0<<8)+SF +YF+HF +CF, + (0xB1<<8)+SF +YF+HF +VF +CF, + (0xB2<<8)+SF +YF+HF +VF +CF, + (0xB3<<8)+SF +YF+HF +CF, + (0xB4<<8)+SF +YF+HF +VF +CF, + (0xB5<<8)+SF +YF+HF +CF, + (0xB6<<8)+SF +YF +CF, + (0xB7<<8)+SF +YF +VF +CF, + (0xB8<<8)+SF +YF +XF+VF +CF, + (0xB9<<8)+SF +YF +XF +CF, + (0xBA<<8)+SF +YF +XF +CF, + (0xBB<<8)+SF +YF +XF+VF +CF, + (0xBC<<8)+SF +YF +XF +CF, + (0xBD<<8)+SF +YF +XF+VF +CF, + (0xBE<<8)+SF +YF +XF+VF +CF, + (0xBF<<8)+SF +YF +XF +CF, + (0xC0<<8)+SF +HF +VF +CF, + (0xC1<<8)+SF +HF +CF, + (0xC2<<8)+SF +HF +CF, + (0xC3<<8)+SF +HF +VF +CF, + (0xC4<<8)+SF +HF +CF, + (0xC5<<8)+SF +HF +VF +CF, + (0xC6<<8)+SF +VF +CF, + (0xC7<<8)+SF +CF, + (0xC8<<8)+SF +XF +CF, + (0xC9<<8)+SF +XF+VF +CF, + (0xCA<<8)+SF +XF+VF +CF, + (0xCB<<8)+SF +XF +CF, + (0xCC<<8)+SF +XF+VF +CF, + (0xCD<<8)+SF +XF +CF, + (0xCE<<8)+SF +XF +CF, + (0xCF<<8)+SF +XF+VF +CF, + (0xD0<<8)+SF +HF +CF, + (0xD1<<8)+SF +HF +VF +CF, + (0xD2<<8)+SF +HF +VF +CF, + (0xD3<<8)+SF +HF +CF, + (0xD4<<8)+SF +HF +VF +CF, + (0xD5<<8)+SF +HF +CF, + (0xD6<<8)+SF +CF, + (0xD7<<8)+SF +VF +CF, + (0xD8<<8)+SF +XF+VF +CF, + (0xD9<<8)+SF +XF +CF, + (0xDA<<8)+SF +XF +CF, + (0xDB<<8)+SF +XF+VF +CF, + (0xDC<<8)+SF +XF +CF, + (0xDD<<8)+SF +XF+VF +CF, + (0xDE<<8)+SF +XF+VF +CF, + (0xDF<<8)+SF +XF +CF, + (0xE0<<8)+SF +YF+HF +CF, + (0xE1<<8)+SF +YF+HF +VF +CF, + (0xE2<<8)+SF +YF+HF +VF +CF, + (0xE3<<8)+SF +YF+HF +CF, + (0xE4<<8)+SF +YF+HF +VF +CF, + (0xE5<<8)+SF +YF+HF +CF, + (0xE6<<8)+SF +YF +CF, + (0xE7<<8)+SF +YF +VF +CF, + (0xE8<<8)+SF +YF +XF+VF +CF, + (0xE9<<8)+SF +YF +XF +CF, + (0xEA<<8)+SF +YF +XF +CF, + (0xEB<<8)+SF +YF +XF+VF +CF, + (0xEC<<8)+SF +YF +XF +CF, + (0xED<<8)+SF +YF +XF+VF +CF, + (0xEE<<8)+SF +YF +XF+VF +CF, + (0xEF<<8)+SF +YF +XF +CF, + (0xF0<<8)+SF +YF+HF +VF +CF, + (0xF1<<8)+SF +YF+HF +CF, + (0xF2<<8)+SF +YF+HF +CF, + (0xF3<<8)+SF +YF+HF +VF +CF, + (0xF4<<8)+SF +YF+HF +CF, + (0xF5<<8)+SF +YF+HF +VF +CF, + (0xF6<<8)+SF +YF +VF +CF, + (0xF7<<8)+SF +YF +CF, + (0xF8<<8)+SF +YF +XF +CF, + (0xF9<<8)+SF +YF +XF+VF +CF, + (0xFA<<8)+SF +YF +XF+VF +CF, + (0xFB<<8)+SF +YF +XF +CF, + (0xFC<<8)+SF +YF +XF+VF +CF, + (0xFD<<8)+SF +YF +XF +CF, + (0xFE<<8)+SF +YF +XF +CF, + (0xFF<<8)+SF +YF +XF+VF +CF, + (0x00<<8) +ZF +HF +VF +CF, + (0x01<<8) +HF +CF, + (0x02<<8) +HF +CF, + (0x03<<8) +HF +VF +CF, + (0x04<<8) +HF +CF, + (0x05<<8) +HF +VF +CF, + (0x06<<8) +VF +CF, + (0x07<<8) +CF, + (0x08<<8) +XF +CF, + (0x09<<8) +XF+VF +CF, + (0x0A<<8) +XF+VF +CF, + (0x0B<<8) +XF +CF, + (0x0C<<8) +XF+VF +CF, + (0x0D<<8) +XF +CF, + (0x0E<<8) +XF +CF, + (0x0F<<8) +XF+VF +CF, + (0x10<<8) +HF +CF, + (0x11<<8) +HF +VF +CF, + (0x12<<8) +HF +VF +CF, + (0x13<<8) +HF +CF, + (0x14<<8) +HF +VF +CF, + (0x15<<8) +HF +CF, + (0x16<<8) +CF, + (0x17<<8) +VF +CF, + (0x18<<8) +XF+VF +CF, + (0x19<<8) +XF +CF, + (0x1A<<8) +XF +CF, + (0x1B<<8) +XF+VF +CF, + (0x1C<<8) +XF +CF, + (0x1D<<8) +XF+VF +CF, + (0x1E<<8) +XF+VF +CF, + (0x1F<<8) +XF +CF, + (0x20<<8) +YF+HF +CF, + (0x21<<8) +YF+HF +VF +CF, + (0x22<<8) +YF+HF +VF +CF, + (0x23<<8) +YF+HF +CF, + (0x24<<8) +YF+HF +VF +CF, + (0x25<<8) +YF+HF +CF, + (0x26<<8) +YF +CF, + (0x27<<8) +YF +VF +CF, + (0x28<<8) +YF +XF+VF +CF, + (0x29<<8) +YF +XF +CF, + (0x2A<<8) +YF +XF +CF, + (0x2B<<8) +YF +XF+VF +CF, + (0x2C<<8) +YF +XF +CF, + (0x2D<<8) +YF +XF+VF +CF, + (0x2E<<8) +YF +XF+VF +CF, + (0x2F<<8) +YF +XF +CF, + (0x30<<8) +YF+HF +VF +CF, + (0x31<<8) +YF+HF +CF, + (0x32<<8) +YF+HF +CF, + (0x33<<8) +YF+HF +VF +CF, + (0x34<<8) +YF+HF +CF, + (0x35<<8) +YF+HF +VF +CF, + (0x36<<8) +YF +VF +CF, + (0x37<<8) +YF +CF, + (0x38<<8) +YF +XF +CF, + (0x39<<8) +YF +XF+VF +CF, + (0x3A<<8) +YF +XF+VF +CF, + (0x3B<<8) +YF +XF +CF, + (0x3C<<8) +YF +XF+VF +CF, + (0x3D<<8) +YF +XF +CF, + (0x3E<<8) +YF +XF +CF, + (0x3F<<8) +YF +XF+VF +CF, + (0x40<<8) +HF +CF, + (0x41<<8) +HF +VF +CF, + (0x42<<8) +HF +VF +CF, + (0x43<<8) +HF +CF, + (0x44<<8) +HF +VF +CF, + (0x45<<8) +HF +CF, + (0x46<<8) +CF, + (0x47<<8) +VF +CF, + (0x48<<8) +XF+VF +CF, + (0x49<<8) +XF +CF, + (0x4A<<8) +XF +CF, + (0x4B<<8) +XF+VF +CF, + (0x4C<<8) +XF +CF, + (0x4D<<8) +XF+VF +CF, + (0x4E<<8) +XF+VF +CF, + (0x4F<<8) +XF +CF, + (0x50<<8) +HF +VF +CF, + (0x51<<8) +HF +CF, + (0x52<<8) +HF +CF, + (0x53<<8) +HF +VF +CF, + (0x54<<8) +HF +CF, + (0x55<<8) +HF +VF +CF, + (0x56<<8) +VF +CF, + (0x57<<8) +CF, + (0x58<<8) +XF +CF, + (0x59<<8) +XF+VF +CF, + (0x5A<<8) +XF+VF +CF, + (0x5B<<8) +XF +CF, + (0x5C<<8) +XF+VF +CF, + (0x5D<<8) +XF +CF, + (0x5E<<8) +XF +CF, + (0x5F<<8) +XF+VF +CF, + (0x60<<8) +YF+HF +VF +CF, + (0x61<<8) +YF+HF +CF, + (0x62<<8) +YF+HF +CF, + (0x63<<8) +YF+HF +VF +CF, + (0x64<<8) +YF+HF +CF, + (0x65<<8) +YF+HF +VF +CF, + (0x00<<8) +ZF +VF+NF , + (0x01<<8) +NF , + (0x02<<8) +NF , + (0x03<<8) +VF+NF , + (0x04<<8) +NF , + (0x05<<8) +VF+NF , + (0x06<<8) +VF+NF , + (0x07<<8) +NF , + (0x08<<8) +XF +NF , + (0x09<<8) +XF+VF+NF , + (0x04<<8) +NF , + (0x05<<8) +VF+NF , + (0x06<<8) +VF+NF , + (0x07<<8) +NF , + (0x08<<8) +XF +NF , + (0x09<<8) +XF+VF+NF , + (0x10<<8) +NF , + (0x11<<8) +VF+NF , + (0x12<<8) +VF+NF , + (0x13<<8) +NF , + (0x14<<8) +VF+NF , + (0x15<<8) +NF , + (0x16<<8) +NF , + (0x17<<8) +VF+NF , + (0x18<<8) +XF+VF+NF , + (0x19<<8) +XF +NF , + (0x14<<8) +VF+NF , + (0x15<<8) +NF , + (0x16<<8) +NF , + (0x17<<8) +VF+NF , + (0x18<<8) +XF+VF+NF , + (0x19<<8) +XF +NF , + (0x20<<8) +YF +NF , + (0x21<<8) +YF +VF+NF , + (0x22<<8) +YF +VF+NF , + (0x23<<8) +YF +NF , + (0x24<<8) +YF +VF+NF , + (0x25<<8) +YF +NF , + (0x26<<8) +YF +NF , + (0x27<<8) +YF +VF+NF , + (0x28<<8) +YF +XF+VF+NF , + (0x29<<8) +YF +XF +NF , + (0x24<<8) +YF +VF+NF , + (0x25<<8) +YF +NF , + (0x26<<8) +YF +NF , + (0x27<<8) +YF +VF+NF , + (0x28<<8) +YF +XF+VF+NF , + (0x29<<8) +YF +XF +NF , + (0x30<<8) +YF +VF+NF , + (0x31<<8) +YF +NF , + (0x32<<8) +YF +NF , + (0x33<<8) +YF +VF+NF , + (0x34<<8) +YF +NF , + (0x35<<8) +YF +VF+NF , + (0x36<<8) +YF +VF+NF , + (0x37<<8) +YF +NF , + (0x38<<8) +YF +XF +NF , + (0x39<<8) +YF +XF+VF+NF , + (0x34<<8) +YF +NF , + (0x35<<8) +YF +VF+NF , + (0x36<<8) +YF +VF+NF , + (0x37<<8) +YF +NF , + (0x38<<8) +YF +XF +NF , + (0x39<<8) +YF +XF+VF+NF , + (0x40<<8) +NF , + (0x41<<8) +VF+NF , + (0x42<<8) +VF+NF , + (0x43<<8) +NF , + (0x44<<8) +VF+NF , + (0x45<<8) +NF , + (0x46<<8) +NF , + (0x47<<8) +VF+NF , + (0x48<<8) +XF+VF+NF , + (0x49<<8) +XF +NF , + (0x44<<8) +VF+NF , + (0x45<<8) +NF , + (0x46<<8) +NF , + (0x47<<8) +VF+NF , + (0x48<<8) +XF+VF+NF , + (0x49<<8) +XF +NF , + (0x50<<8) +VF+NF , + (0x51<<8) +NF , + (0x52<<8) +NF , + (0x53<<8) +VF+NF , + (0x54<<8) +NF , + (0x55<<8) +VF+NF , + (0x56<<8) +VF+NF , + (0x57<<8) +NF , + (0x58<<8) +XF +NF , + (0x59<<8) +XF+VF+NF , + (0x54<<8) +NF , + (0x55<<8) +VF+NF , + (0x56<<8) +VF+NF , + (0x57<<8) +NF , + (0x58<<8) +XF +NF , + (0x59<<8) +XF+VF+NF , + (0x60<<8) +YF +VF+NF , + (0x61<<8) +YF +NF , + (0x62<<8) +YF +NF , + (0x63<<8) +YF +VF+NF , + (0x64<<8) +YF +NF , + (0x65<<8) +YF +VF+NF , + (0x66<<8) +YF +VF+NF , + (0x67<<8) +YF +NF , + (0x68<<8) +YF +XF +NF , + (0x69<<8) +YF +XF+VF+NF , + (0x64<<8) +YF +NF , + (0x65<<8) +YF +VF+NF , + (0x66<<8) +YF +VF+NF , + (0x67<<8) +YF +NF , + (0x68<<8) +YF +XF +NF , + (0x69<<8) +YF +XF+VF+NF , + (0x70<<8) +YF +NF , + (0x71<<8) +YF +VF+NF , + (0x72<<8) +YF +VF+NF , + (0x73<<8) +YF +NF , + (0x74<<8) +YF +VF+NF , + (0x75<<8) +YF +NF , + (0x76<<8) +YF +NF , + (0x77<<8) +YF +VF+NF , + (0x78<<8) +YF +XF+VF+NF , + (0x79<<8) +YF +XF +NF , + (0x74<<8) +YF +VF+NF , + (0x75<<8) +YF +NF , + (0x76<<8) +YF +NF , + (0x77<<8) +YF +VF+NF , + (0x78<<8) +YF +XF+VF+NF , + (0x79<<8) +YF +XF +NF , + (0x80<<8)+SF +NF , + (0x81<<8)+SF +VF+NF , + (0x82<<8)+SF +VF+NF , + (0x83<<8)+SF +NF , + (0x84<<8)+SF +VF+NF , + (0x85<<8)+SF +NF , + (0x86<<8)+SF +NF , + (0x87<<8)+SF +VF+NF , + (0x88<<8)+SF +XF+VF+NF , + (0x89<<8)+SF +XF +NF , + (0x84<<8)+SF +VF+NF , + (0x85<<8)+SF +NF , + (0x86<<8)+SF +NF , + (0x87<<8)+SF +VF+NF , + (0x88<<8)+SF +XF+VF+NF , + (0x89<<8)+SF +XF +NF , + (0x90<<8)+SF +VF+NF , + (0x91<<8)+SF +NF , + (0x92<<8)+SF +NF , + (0x93<<8)+SF +VF+NF , + (0x94<<8)+SF +NF , + (0x95<<8)+SF +VF+NF , + (0x96<<8)+SF +VF+NF , + (0x97<<8)+SF +NF , + (0x98<<8)+SF +XF +NF , + (0x99<<8)+SF +XF+VF+NF , + (0x34<<8) +YF +NF+CF, + (0x35<<8) +YF +VF+NF+CF, + (0x36<<8) +YF +VF+NF+CF, + (0x37<<8) +YF +NF+CF, + (0x38<<8) +YF +XF +NF+CF, + (0x39<<8) +YF +XF+VF+NF+CF, + (0x40<<8) +NF+CF, + (0x41<<8) +VF+NF+CF, + (0x42<<8) +VF+NF+CF, + (0x43<<8) +NF+CF, + (0x44<<8) +VF+NF+CF, + (0x45<<8) +NF+CF, + (0x46<<8) +NF+CF, + (0x47<<8) +VF+NF+CF, + (0x48<<8) +XF+VF+NF+CF, + (0x49<<8) +XF +NF+CF, + (0x44<<8) +VF+NF+CF, + (0x45<<8) +NF+CF, + (0x46<<8) +NF+CF, + (0x47<<8) +VF+NF+CF, + (0x48<<8) +XF+VF+NF+CF, + (0x49<<8) +XF +NF+CF, + (0x50<<8) +VF+NF+CF, + (0x51<<8) +NF+CF, + (0x52<<8) +NF+CF, + (0x53<<8) +VF+NF+CF, + (0x54<<8) +NF+CF, + (0x55<<8) +VF+NF+CF, + (0x56<<8) +VF+NF+CF, + (0x57<<8) +NF+CF, + (0x58<<8) +XF +NF+CF, + (0x59<<8) +XF+VF+NF+CF, + (0x54<<8) +NF+CF, + (0x55<<8) +VF+NF+CF, + (0x56<<8) +VF+NF+CF, + (0x57<<8) +NF+CF, + (0x58<<8) +XF +NF+CF, + (0x59<<8) +XF+VF+NF+CF, + (0x60<<8) +YF +VF+NF+CF, + (0x61<<8) +YF +NF+CF, + (0x62<<8) +YF +NF+CF, + (0x63<<8) +YF +VF+NF+CF, + (0x64<<8) +YF +NF+CF, + (0x65<<8) +YF +VF+NF+CF, + (0x66<<8) +YF +VF+NF+CF, + (0x67<<8) +YF +NF+CF, + (0x68<<8) +YF +XF +NF+CF, + (0x69<<8) +YF +XF+VF+NF+CF, + (0x64<<8) +YF +NF+CF, + (0x65<<8) +YF +VF+NF+CF, + (0x66<<8) +YF +VF+NF+CF, + (0x67<<8) +YF +NF+CF, + (0x68<<8) +YF +XF +NF+CF, + (0x69<<8) +YF +XF+VF+NF+CF, + (0x70<<8) +YF +NF+CF, + (0x71<<8) +YF +VF+NF+CF, + (0x72<<8) +YF +VF+NF+CF, + (0x73<<8) +YF +NF+CF, + (0x74<<8) +YF +VF+NF+CF, + (0x75<<8) +YF +NF+CF, + (0x76<<8) +YF +NF+CF, + (0x77<<8) +YF +VF+NF+CF, + (0x78<<8) +YF +XF+VF+NF+CF, + (0x79<<8) +YF +XF +NF+CF, + (0x74<<8) +YF +VF+NF+CF, + (0x75<<8) +YF +NF+CF, + (0x76<<8) +YF +NF+CF, + (0x77<<8) +YF +VF+NF+CF, + (0x78<<8) +YF +XF+VF+NF+CF, + (0x79<<8) +YF +XF +NF+CF, + (0x80<<8)+SF +NF+CF, + (0x81<<8)+SF +VF+NF+CF, + (0x82<<8)+SF +VF+NF+CF, + (0x83<<8)+SF +NF+CF, + (0x84<<8)+SF +VF+NF+CF, + (0x85<<8)+SF +NF+CF, + (0x86<<8)+SF +NF+CF, + (0x87<<8)+SF +VF+NF+CF, + (0x88<<8)+SF +XF+VF+NF+CF, + (0x89<<8)+SF +XF +NF+CF, + (0x84<<8)+SF +VF+NF+CF, + (0x85<<8)+SF +NF+CF, + (0x86<<8)+SF +NF+CF, + (0x87<<8)+SF +VF+NF+CF, + (0x88<<8)+SF +XF+VF+NF+CF, + (0x89<<8)+SF +XF +NF+CF, + (0x90<<8)+SF +VF+NF+CF, + (0x91<<8)+SF +NF+CF, + (0x92<<8)+SF +NF+CF, + (0x93<<8)+SF +VF+NF+CF, + (0x94<<8)+SF +NF+CF, + (0x95<<8)+SF +VF+NF+CF, + (0x96<<8)+SF +VF+NF+CF, + (0x97<<8)+SF +NF+CF, + (0x98<<8)+SF +XF +NF+CF, + (0x99<<8)+SF +XF+VF+NF+CF, + (0x94<<8)+SF +NF+CF, + (0x95<<8)+SF +VF+NF+CF, + (0x96<<8)+SF +VF+NF+CF, + (0x97<<8)+SF +NF+CF, + (0x98<<8)+SF +XF +NF+CF, + (0x99<<8)+SF +XF+VF+NF+CF, + (0xA0<<8)+SF +YF +VF+NF+CF, + (0xA1<<8)+SF +YF +NF+CF, + (0xA2<<8)+SF +YF +NF+CF, + (0xA3<<8)+SF +YF +VF+NF+CF, + (0xA4<<8)+SF +YF +NF+CF, + (0xA5<<8)+SF +YF +VF+NF+CF, + (0xA6<<8)+SF +YF +VF+NF+CF, + (0xA7<<8)+SF +YF +NF+CF, + (0xA8<<8)+SF +YF +XF +NF+CF, + (0xA9<<8)+SF +YF +XF+VF+NF+CF, + (0xA4<<8)+SF +YF +NF+CF, + (0xA5<<8)+SF +YF +VF+NF+CF, + (0xA6<<8)+SF +YF +VF+NF+CF, + (0xA7<<8)+SF +YF +NF+CF, + (0xA8<<8)+SF +YF +XF +NF+CF, + (0xA9<<8)+SF +YF +XF+VF+NF+CF, + (0xB0<<8)+SF +YF +NF+CF, + (0xB1<<8)+SF +YF +VF+NF+CF, + (0xB2<<8)+SF +YF +VF+NF+CF, + (0xB3<<8)+SF +YF +NF+CF, + (0xB4<<8)+SF +YF +VF+NF+CF, + (0xB5<<8)+SF +YF +NF+CF, + (0xB6<<8)+SF +YF +NF+CF, + (0xB7<<8)+SF +YF +VF+NF+CF, + (0xB8<<8)+SF +YF +XF+VF+NF+CF, + (0xB9<<8)+SF +YF +XF +NF+CF, + (0xB4<<8)+SF +YF +VF+NF+CF, + (0xB5<<8)+SF +YF +NF+CF, + (0xB6<<8)+SF +YF +NF+CF, + (0xB7<<8)+SF +YF +VF+NF+CF, + (0xB8<<8)+SF +YF +XF+VF+NF+CF, + (0xB9<<8)+SF +YF +XF +NF+CF, + (0xC0<<8)+SF +VF+NF+CF, + (0xC1<<8)+SF +NF+CF, + (0xC2<<8)+SF +NF+CF, + (0xC3<<8)+SF +VF+NF+CF, + (0xC4<<8)+SF +NF+CF, + (0xC5<<8)+SF +VF+NF+CF, + (0xC6<<8)+SF +VF+NF+CF, + (0xC7<<8)+SF +NF+CF, + (0xC8<<8)+SF +XF +NF+CF, + (0xC9<<8)+SF +XF+VF+NF+CF, + (0xC4<<8)+SF +NF+CF, + (0xC5<<8)+SF +VF+NF+CF, + (0xC6<<8)+SF +VF+NF+CF, + (0xC7<<8)+SF +NF+CF, + (0xC8<<8)+SF +XF +NF+CF, + (0xC9<<8)+SF +XF+VF+NF+CF, + (0xD0<<8)+SF +NF+CF, + (0xD1<<8)+SF +VF+NF+CF, + (0xD2<<8)+SF +VF+NF+CF, + (0xD3<<8)+SF +NF+CF, + (0xD4<<8)+SF +VF+NF+CF, + (0xD5<<8)+SF +NF+CF, + (0xD6<<8)+SF +NF+CF, + (0xD7<<8)+SF +VF+NF+CF, + (0xD8<<8)+SF +XF+VF+NF+CF, + (0xD9<<8)+SF +XF +NF+CF, + (0xD4<<8)+SF +VF+NF+CF, + (0xD5<<8)+SF +NF+CF, + (0xD6<<8)+SF +NF+CF, + (0xD7<<8)+SF +VF+NF+CF, + (0xD8<<8)+SF +XF+VF+NF+CF, + (0xD9<<8)+SF +XF +NF+CF, + (0xE0<<8)+SF +YF +NF+CF, + (0xE1<<8)+SF +YF +VF+NF+CF, + (0xE2<<8)+SF +YF +VF+NF+CF, + (0xE3<<8)+SF +YF +NF+CF, + (0xE4<<8)+SF +YF +VF+NF+CF, + (0xE5<<8)+SF +YF +NF+CF, + (0xE6<<8)+SF +YF +NF+CF, + (0xE7<<8)+SF +YF +VF+NF+CF, + (0xE8<<8)+SF +YF +XF+VF+NF+CF, + (0xE9<<8)+SF +YF +XF +NF+CF, + (0xE4<<8)+SF +YF +VF+NF+CF, + (0xE5<<8)+SF +YF +NF+CF, + (0xE6<<8)+SF +YF +NF+CF, + (0xE7<<8)+SF +YF +VF+NF+CF, + (0xE8<<8)+SF +YF +XF+VF+NF+CF, + (0xE9<<8)+SF +YF +XF +NF+CF, + (0xF0<<8)+SF +YF +VF+NF+CF, + (0xF1<<8)+SF +YF +NF+CF, + (0xF2<<8)+SF +YF +NF+CF, + (0xF3<<8)+SF +YF +VF+NF+CF, + (0xF4<<8)+SF +YF +NF+CF, + (0xF5<<8)+SF +YF +VF+NF+CF, + (0xF6<<8)+SF +YF +VF+NF+CF, + (0xF7<<8)+SF +YF +NF+CF, + (0xF8<<8)+SF +YF +XF +NF+CF, + (0xF9<<8)+SF +YF +XF+VF+NF+CF, + (0xF4<<8)+SF +YF +NF+CF, + (0xF5<<8)+SF +YF +VF+NF+CF, + (0xF6<<8)+SF +YF +VF+NF+CF, + (0xF7<<8)+SF +YF +NF+CF, + (0xF8<<8)+SF +YF +XF +NF+CF, + (0xF9<<8)+SF +YF +XF+VF+NF+CF, + (0x00<<8) +ZF +VF+NF+CF, + (0x01<<8) +NF+CF, + (0x02<<8) +NF+CF, + (0x03<<8) +VF+NF+CF, + (0x04<<8) +NF+CF, + (0x05<<8) +VF+NF+CF, + (0x06<<8) +VF+NF+CF, + (0x07<<8) +NF+CF, + (0x08<<8) +XF +NF+CF, + (0x09<<8) +XF+VF+NF+CF, + (0x04<<8) +NF+CF, + (0x05<<8) +VF+NF+CF, + (0x06<<8) +VF+NF+CF, + (0x07<<8) +NF+CF, + (0x08<<8) +XF +NF+CF, + (0x09<<8) +XF+VF+NF+CF, + (0x10<<8) +NF+CF, + (0x11<<8) +VF+NF+CF, + (0x12<<8) +VF+NF+CF, + (0x13<<8) +NF+CF, + (0x14<<8) +VF+NF+CF, + (0x15<<8) +NF+CF, + (0x16<<8) +NF+CF, + (0x17<<8) +VF+NF+CF, + (0x18<<8) +XF+VF+NF+CF, + (0x19<<8) +XF +NF+CF, + (0x14<<8) +VF+NF+CF, + (0x15<<8) +NF+CF, + (0x16<<8) +NF+CF, + (0x17<<8) +VF+NF+CF, + (0x18<<8) +XF+VF+NF+CF, + (0x19<<8) +XF +NF+CF, + (0x20<<8) +YF +NF+CF, + (0x21<<8) +YF +VF+NF+CF, + (0x22<<8) +YF +VF+NF+CF, + (0x23<<8) +YF +NF+CF, + (0x24<<8) +YF +VF+NF+CF, + (0x25<<8) +YF +NF+CF, + (0x26<<8) +YF +NF+CF, + (0x27<<8) +YF +VF+NF+CF, + (0x28<<8) +YF +XF+VF+NF+CF, + (0x29<<8) +YF +XF +NF+CF, + (0x24<<8) +YF +VF+NF+CF, + (0x25<<8) +YF +NF+CF, + (0x26<<8) +YF +NF+CF, + (0x27<<8) +YF +VF+NF+CF, + (0x28<<8) +YF +XF+VF+NF+CF, + (0x29<<8) +YF +XF +NF+CF, + (0x30<<8) +YF +VF+NF+CF, + (0x31<<8) +YF +NF+CF, + (0x32<<8) +YF +NF+CF, + (0x33<<8) +YF +VF+NF+CF, + (0x34<<8) +YF +NF+CF, + (0x35<<8) +YF +VF+NF+CF, + (0x36<<8) +YF +VF+NF+CF, + (0x37<<8) +YF +NF+CF, + (0x38<<8) +YF +XF +NF+CF, + (0x39<<8) +YF +XF+VF+NF+CF, + (0x34<<8) +YF +NF+CF, + (0x35<<8) +YF +VF+NF+CF, + (0x36<<8) +YF +VF+NF+CF, + (0x37<<8) +YF +NF+CF, + (0x38<<8) +YF +XF +NF+CF, + (0x39<<8) +YF +XF+VF+NF+CF, + (0x40<<8) +NF+CF, + (0x41<<8) +VF+NF+CF, + (0x42<<8) +VF+NF+CF, + (0x43<<8) +NF+CF, + (0x44<<8) +VF+NF+CF, + (0x45<<8) +NF+CF, + (0x46<<8) +NF+CF, + (0x47<<8) +VF+NF+CF, + (0x48<<8) +XF+VF+NF+CF, + (0x49<<8) +XF +NF+CF, + (0x44<<8) +VF+NF+CF, + (0x45<<8) +NF+CF, + (0x46<<8) +NF+CF, + (0x47<<8) +VF+NF+CF, + (0x48<<8) +XF+VF+NF+CF, + (0x49<<8) +XF +NF+CF, + (0x50<<8) +VF+NF+CF, + (0x51<<8) +NF+CF, + (0x52<<8) +NF+CF, + (0x53<<8) +VF+NF+CF, + (0x54<<8) +NF+CF, + (0x55<<8) +VF+NF+CF, + (0x56<<8) +VF+NF+CF, + (0x57<<8) +NF+CF, + (0x58<<8) +XF +NF+CF, + (0x59<<8) +XF+VF+NF+CF, + (0x54<<8) +NF+CF, + (0x55<<8) +VF+NF+CF, + (0x56<<8) +VF+NF+CF, + (0x57<<8) +NF+CF, + (0x58<<8) +XF +NF+CF, + (0x59<<8) +XF+VF+NF+CF, + (0x60<<8) +YF +VF+NF+CF, + (0x61<<8) +YF +NF+CF, + (0x62<<8) +YF +NF+CF, + (0x63<<8) +YF +VF+NF+CF, + (0x64<<8) +YF +NF+CF, + (0x65<<8) +YF +VF+NF+CF, + (0x66<<8) +YF +VF+NF+CF, + (0x67<<8) +YF +NF+CF, + (0x68<<8) +YF +XF +NF+CF, + (0x69<<8) +YF +XF+VF+NF+CF, + (0x64<<8) +YF +NF+CF, + (0x65<<8) +YF +VF+NF+CF, + (0x66<<8) +YF +VF+NF+CF, + (0x67<<8) +YF +NF+CF, + (0x68<<8) +YF +XF +NF+CF, + (0x69<<8) +YF +XF+VF+NF+CF, + (0x70<<8) +YF +NF+CF, + (0x71<<8) +YF +VF+NF+CF, + (0x72<<8) +YF +VF+NF+CF, + (0x73<<8) +YF +NF+CF, + (0x74<<8) +YF +VF+NF+CF, + (0x75<<8) +YF +NF+CF, + (0x76<<8) +YF +NF+CF, + (0x77<<8) +YF +VF+NF+CF, + (0x78<<8) +YF +XF+VF+NF+CF, + (0x79<<8) +YF +XF +NF+CF, + (0x74<<8) +YF +VF+NF+CF, + (0x75<<8) +YF +NF+CF, + (0x76<<8) +YF +NF+CF, + (0x77<<8) +YF +VF+NF+CF, + (0x78<<8) +YF +XF+VF+NF+CF, + (0x79<<8) +YF +XF +NF+CF, + (0x80<<8)+SF +NF+CF, + (0x81<<8)+SF +VF+NF+CF, + (0x82<<8)+SF +VF+NF+CF, + (0x83<<8)+SF +NF+CF, + (0x84<<8)+SF +VF+NF+CF, + (0x85<<8)+SF +NF+CF, + (0x86<<8)+SF +NF+CF, + (0x87<<8)+SF +VF+NF+CF, + (0x88<<8)+SF +XF+VF+NF+CF, + (0x89<<8)+SF +XF +NF+CF, + (0x84<<8)+SF +VF+NF+CF, + (0x85<<8)+SF +NF+CF, + (0x86<<8)+SF +NF+CF, + (0x87<<8)+SF +VF+NF+CF, + (0x88<<8)+SF +XF+VF+NF+CF, + (0x89<<8)+SF +XF +NF+CF, + (0x90<<8)+SF +VF+NF+CF, + (0x91<<8)+SF +NF+CF, + (0x92<<8)+SF +NF+CF, + (0x93<<8)+SF +VF+NF+CF, + (0x94<<8)+SF +NF+CF, + (0x95<<8)+SF +VF+NF+CF, + (0x96<<8)+SF +VF+NF+CF, + (0x97<<8)+SF +NF+CF, + (0x98<<8)+SF +XF +NF+CF, + (0x99<<8)+SF +XF+VF+NF+CF, + (0x94<<8)+SF +NF+CF, + (0x95<<8)+SF +VF+NF+CF, + (0x96<<8)+SF +VF+NF+CF, + (0x97<<8)+SF +NF+CF, + (0x98<<8)+SF +XF +NF+CF, + (0x99<<8)+SF +XF+VF+NF+CF, + (0xFA<<8)+SF +YF+HF+XF+VF+NF , + (0xFB<<8)+SF +YF+HF+XF +NF , + (0xFC<<8)+SF +YF+HF+XF+VF+NF , + (0xFD<<8)+SF +YF+HF+XF +NF , + (0xFE<<8)+SF +YF+HF+XF +NF , + (0xFF<<8)+SF +YF+HF+XF+VF+NF , + (0x00<<8) +ZF +VF+NF , + (0x01<<8) +NF , + (0x02<<8) +NF , + (0x03<<8) +VF+NF , + (0x04<<8) +NF , + (0x05<<8) +VF+NF , + (0x06<<8) +VF+NF , + (0x07<<8) +NF , + (0x08<<8) +XF +NF , + (0x09<<8) +XF+VF+NF , + (0x0A<<8) +HF+XF+VF+NF , + (0x0B<<8) +HF+XF +NF , + (0x0C<<8) +HF+XF+VF+NF , + (0x0D<<8) +HF+XF +NF , + (0x0E<<8) +HF+XF +NF , + (0x0F<<8) +HF+XF+VF+NF , + (0x10<<8) +NF , + (0x11<<8) +VF+NF , + (0x12<<8) +VF+NF , + (0x13<<8) +NF , + (0x14<<8) +VF+NF , + (0x15<<8) +NF , + (0x16<<8) +NF , + (0x17<<8) +VF+NF , + (0x18<<8) +XF+VF+NF , + (0x19<<8) +XF +NF , + (0x1A<<8) +HF+XF +NF , + (0x1B<<8) +HF+XF+VF+NF , + (0x1C<<8) +HF+XF +NF , + (0x1D<<8) +HF+XF+VF+NF , + (0x1E<<8) +HF+XF+VF+NF , + (0x1F<<8) +HF+XF +NF , + (0x20<<8) +YF +NF , + (0x21<<8) +YF +VF+NF , + (0x22<<8) +YF +VF+NF , + (0x23<<8) +YF +NF , + (0x24<<8) +YF +VF+NF , + (0x25<<8) +YF +NF , + (0x26<<8) +YF +NF , + (0x27<<8) +YF +VF+NF , + (0x28<<8) +YF +XF+VF+NF , + (0x29<<8) +YF +XF +NF , + (0x2A<<8) +YF+HF+XF +NF , + (0x2B<<8) +YF+HF+XF+VF+NF , + (0x2C<<8) +YF+HF+XF +NF , + (0x2D<<8) +YF+HF+XF+VF+NF , + (0x2E<<8) +YF+HF+XF+VF+NF , + (0x2F<<8) +YF+HF+XF +NF , + (0x30<<8) +YF +VF+NF , + (0x31<<8) +YF +NF , + (0x32<<8) +YF +NF , + (0x33<<8) +YF +VF+NF , + (0x34<<8) +YF +NF , + (0x35<<8) +YF +VF+NF , + (0x36<<8) +YF +VF+NF , + (0x37<<8) +YF +NF , + (0x38<<8) +YF +XF +NF , + (0x39<<8) +YF +XF+VF+NF , + (0x3A<<8) +YF+HF+XF+VF+NF , + (0x3B<<8) +YF+HF+XF +NF , + (0x3C<<8) +YF+HF+XF+VF+NF , + (0x3D<<8) +YF+HF+XF +NF , + (0x3E<<8) +YF+HF+XF +NF , + (0x3F<<8) +YF+HF+XF+VF+NF , + (0x40<<8) +NF , + (0x41<<8) +VF+NF , + (0x42<<8) +VF+NF , + (0x43<<8) +NF , + (0x44<<8) +VF+NF , + (0x45<<8) +NF , + (0x46<<8) +NF , + (0x47<<8) +VF+NF , + (0x48<<8) +XF+VF+NF , + (0x49<<8) +XF +NF , + (0x4A<<8) +HF+XF +NF , + (0x4B<<8) +HF+XF+VF+NF , + (0x4C<<8) +HF+XF +NF , + (0x4D<<8) +HF+XF+VF+NF , + (0x4E<<8) +HF+XF+VF+NF , + (0x4F<<8) +HF+XF +NF , + (0x50<<8) +VF+NF , + (0x51<<8) +NF , + (0x52<<8) +NF , + (0x53<<8) +VF+NF , + (0x54<<8) +NF , + (0x55<<8) +VF+NF , + (0x56<<8) +VF+NF , + (0x57<<8) +NF , + (0x58<<8) +XF +NF , + (0x59<<8) +XF+VF+NF , + (0x5A<<8) +HF+XF+VF+NF , + (0x5B<<8) +HF+XF +NF , + (0x5C<<8) +HF+XF+VF+NF , + (0x5D<<8) +HF+XF +NF , + (0x5E<<8) +HF+XF +NF , + (0x5F<<8) +HF+XF+VF+NF , + (0x60<<8) +YF +VF+NF , + (0x61<<8) +YF +NF , + (0x62<<8) +YF +NF , + (0x63<<8) +YF +VF+NF , + (0x64<<8) +YF +NF , + (0x65<<8) +YF +VF+NF , + (0x66<<8) +YF +VF+NF , + (0x67<<8) +YF +NF , + (0x68<<8) +YF +XF +NF , + (0x69<<8) +YF +XF+VF+NF , + (0x6A<<8) +YF+HF+XF+VF+NF , + (0x6B<<8) +YF+HF+XF +NF , + (0x6C<<8) +YF+HF+XF+VF+NF , + (0x6D<<8) +YF+HF+XF +NF , + (0x6E<<8) +YF+HF+XF +NF , + (0x6F<<8) +YF+HF+XF+VF+NF , + (0x70<<8) +YF +NF , + (0x71<<8) +YF +VF+NF , + (0x72<<8) +YF +VF+NF , + (0x73<<8) +YF +NF , + (0x74<<8) +YF +VF+NF , + (0x75<<8) +YF +NF , + (0x76<<8) +YF +NF , + (0x77<<8) +YF +VF+NF , + (0x78<<8) +YF +XF+VF+NF , + (0x79<<8) +YF +XF +NF , + (0x7A<<8) +YF+HF+XF +NF , + (0x7B<<8) +YF+HF+XF+VF+NF , + (0x7C<<8) +YF+HF+XF +NF , + (0x7D<<8) +YF+HF+XF+VF+NF , + (0x7E<<8) +YF+HF+XF+VF+NF , + (0x7F<<8) +YF+HF+XF +NF , + (0x80<<8)+SF +NF , + (0x81<<8)+SF +VF+NF , + (0x82<<8)+SF +VF+NF , + (0x83<<8)+SF +NF , + (0x84<<8)+SF +VF+NF , + (0x85<<8)+SF +NF , + (0x86<<8)+SF +NF , + (0x87<<8)+SF +VF+NF , + (0x88<<8)+SF +XF+VF+NF , + (0x89<<8)+SF +XF +NF , + (0x8A<<8)+SF +HF+XF +NF , + (0x8B<<8)+SF +HF+XF+VF+NF , + (0x8C<<8)+SF +HF+XF +NF , + (0x8D<<8)+SF +HF+XF+VF+NF , + (0x8E<<8)+SF +HF+XF+VF+NF , + (0x8F<<8)+SF +HF+XF +NF , + (0x90<<8)+SF +VF+NF , + (0x91<<8)+SF +NF , + (0x92<<8)+SF +NF , + (0x93<<8)+SF +VF+NF , + (0x34<<8) +YF +NF+CF, + (0x35<<8) +YF +VF+NF+CF, + (0x36<<8) +YF +VF+NF+CF, + (0x37<<8) +YF +NF+CF, + (0x38<<8) +YF +XF +NF+CF, + (0x39<<8) +YF +XF+VF+NF+CF, + (0x3A<<8) +YF+HF+XF+VF+NF+CF, + (0x3B<<8) +YF+HF+XF +NF+CF, + (0x3C<<8) +YF+HF+XF+VF+NF+CF, + (0x3D<<8) +YF+HF+XF +NF+CF, + (0x3E<<8) +YF+HF+XF +NF+CF, + (0x3F<<8) +YF+HF+XF+VF+NF+CF, + (0x40<<8) +NF+CF, + (0x41<<8) +VF+NF+CF, + (0x42<<8) +VF+NF+CF, + (0x43<<8) +NF+CF, + (0x44<<8) +VF+NF+CF, + (0x45<<8) +NF+CF, + (0x46<<8) +NF+CF, + (0x47<<8) +VF+NF+CF, + (0x48<<8) +XF+VF+NF+CF, + (0x49<<8) +XF +NF+CF, + (0x4A<<8) +HF+XF +NF+CF, + (0x4B<<8) +HF+XF+VF+NF+CF, + (0x4C<<8) +HF+XF +NF+CF, + (0x4D<<8) +HF+XF+VF+NF+CF, + (0x4E<<8) +HF+XF+VF+NF+CF, + (0x4F<<8) +HF+XF +NF+CF, + (0x50<<8) +VF+NF+CF, + (0x51<<8) +NF+CF, + (0x52<<8) +NF+CF, + (0x53<<8) +VF+NF+CF, + (0x54<<8) +NF+CF, + (0x55<<8) +VF+NF+CF, + (0x56<<8) +VF+NF+CF, + (0x57<<8) +NF+CF, + (0x58<<8) +XF +NF+CF, + (0x59<<8) +XF+VF+NF+CF, + (0x5A<<8) +HF+XF+VF+NF+CF, + (0x5B<<8) +HF+XF +NF+CF, + (0x5C<<8) +HF+XF+VF+NF+CF, + (0x5D<<8) +HF+XF +NF+CF, + (0x5E<<8) +HF+XF +NF+CF, + (0x5F<<8) +HF+XF+VF+NF+CF, + (0x60<<8) +YF +VF+NF+CF, + (0x61<<8) +YF +NF+CF, + (0x62<<8) +YF +NF+CF, + (0x63<<8) +YF +VF+NF+CF, + (0x64<<8) +YF +NF+CF, + (0x65<<8) +YF +VF+NF+CF, + (0x66<<8) +YF +VF+NF+CF, + (0x67<<8) +YF +NF+CF, + (0x68<<8) +YF +XF +NF+CF, + (0x69<<8) +YF +XF+VF+NF+CF, + (0x6A<<8) +YF+HF+XF+VF+NF+CF, + (0x6B<<8) +YF+HF+XF +NF+CF, + (0x6C<<8) +YF+HF+XF+VF+NF+CF, + (0x6D<<8) +YF+HF+XF +NF+CF, + (0x6E<<8) +YF+HF+XF +NF+CF, + (0x6F<<8) +YF+HF+XF+VF+NF+CF, + (0x70<<8) +YF +NF+CF, + (0x71<<8) +YF +VF+NF+CF, + (0x72<<8) +YF +VF+NF+CF, + (0x73<<8) +YF +NF+CF, + (0x74<<8) +YF +VF+NF+CF, + (0x75<<8) +YF +NF+CF, + (0x76<<8) +YF +NF+CF, + (0x77<<8) +YF +VF+NF+CF, + (0x78<<8) +YF +XF+VF+NF+CF, + (0x79<<8) +YF +XF +NF+CF, + (0x7A<<8) +YF+HF+XF +NF+CF, + (0x7B<<8) +YF+HF+XF+VF+NF+CF, + (0x7C<<8) +YF+HF+XF +NF+CF, + (0x7D<<8) +YF+HF+XF+VF+NF+CF, + (0x7E<<8) +YF+HF+XF+VF+NF+CF, + (0x7F<<8) +YF+HF+XF +NF+CF, + (0x80<<8)+SF +NF+CF, + (0x81<<8)+SF +VF+NF+CF, + (0x82<<8)+SF +VF+NF+CF, + (0x83<<8)+SF +NF+CF, + (0x84<<8)+SF +VF+NF+CF, + (0x85<<8)+SF +NF+CF, + (0x86<<8)+SF +NF+CF, + (0x87<<8)+SF +VF+NF+CF, + (0x88<<8)+SF +XF+VF+NF+CF, + (0x89<<8)+SF +XF +NF+CF, + (0x8A<<8)+SF +HF+XF +NF+CF, + (0x8B<<8)+SF +HF+XF+VF+NF+CF, + (0x8C<<8)+SF +HF+XF +NF+CF, + (0x8D<<8)+SF +HF+XF+VF+NF+CF, + (0x8E<<8)+SF +HF+XF+VF+NF+CF, + (0x8F<<8)+SF +HF+XF +NF+CF, + (0x90<<8)+SF +VF+NF+CF, + (0x91<<8)+SF +NF+CF, + (0x92<<8)+SF +NF+CF, + (0x93<<8)+SF +VF+NF+CF, + (0x94<<8)+SF +NF+CF, + (0x95<<8)+SF +VF+NF+CF, + (0x96<<8)+SF +VF+NF+CF, + (0x97<<8)+SF +NF+CF, + (0x98<<8)+SF +XF +NF+CF, + (0x99<<8)+SF +XF+VF+NF+CF, + (0x9A<<8)+SF +HF+XF+VF+NF+CF, + (0x9B<<8)+SF +HF+XF +NF+CF, + (0x9C<<8)+SF +HF+XF+VF+NF+CF, + (0x9D<<8)+SF +HF+XF +NF+CF, + (0x9E<<8)+SF +HF+XF +NF+CF, + (0x9F<<8)+SF +HF+XF+VF+NF+CF, + (0xA0<<8)+SF +YF +VF+NF+CF, + (0xA1<<8)+SF +YF +NF+CF, + (0xA2<<8)+SF +YF +NF+CF, + (0xA3<<8)+SF +YF +VF+NF+CF, + (0xA4<<8)+SF +YF +NF+CF, + (0xA5<<8)+SF +YF +VF+NF+CF, + (0xA6<<8)+SF +YF +VF+NF+CF, + (0xA7<<8)+SF +YF +NF+CF, + (0xA8<<8)+SF +YF +XF +NF+CF, + (0xA9<<8)+SF +YF +XF+VF+NF+CF, + (0xAA<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xAB<<8)+SF +YF+HF+XF +NF+CF, + (0xAC<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xAD<<8)+SF +YF+HF+XF +NF+CF, + (0xAE<<8)+SF +YF+HF+XF +NF+CF, + (0xAF<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xB0<<8)+SF +YF +NF+CF, + (0xB1<<8)+SF +YF +VF+NF+CF, + (0xB2<<8)+SF +YF +VF+NF+CF, + (0xB3<<8)+SF +YF +NF+CF, + (0xB4<<8)+SF +YF +VF+NF+CF, + (0xB5<<8)+SF +YF +NF+CF, + (0xB6<<8)+SF +YF +NF+CF, + (0xB7<<8)+SF +YF +VF+NF+CF, + (0xB8<<8)+SF +YF +XF+VF+NF+CF, + (0xB9<<8)+SF +YF +XF +NF+CF, + (0xBA<<8)+SF +YF+HF+XF +NF+CF, + (0xBB<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xBC<<8)+SF +YF+HF+XF +NF+CF, + (0xBD<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xBE<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xBF<<8)+SF +YF+HF+XF +NF+CF, + (0xC0<<8)+SF +VF+NF+CF, + (0xC1<<8)+SF +NF+CF, + (0xC2<<8)+SF +NF+CF, + (0xC3<<8)+SF +VF+NF+CF, + (0xC4<<8)+SF +NF+CF, + (0xC5<<8)+SF +VF+NF+CF, + (0xC6<<8)+SF +VF+NF+CF, + (0xC7<<8)+SF +NF+CF, + (0xC8<<8)+SF +XF +NF+CF, + (0xC9<<8)+SF +XF+VF+NF+CF, + (0xCA<<8)+SF +HF+XF+VF+NF+CF, + (0xCB<<8)+SF +HF+XF +NF+CF, + (0xCC<<8)+SF +HF+XF+VF+NF+CF, + (0xCD<<8)+SF +HF+XF +NF+CF, + (0xCE<<8)+SF +HF+XF +NF+CF, + (0xCF<<8)+SF +HF+XF+VF+NF+CF, + (0xD0<<8)+SF +NF+CF, + (0xD1<<8)+SF +VF+NF+CF, + (0xD2<<8)+SF +VF+NF+CF, + (0xD3<<8)+SF +NF+CF, + (0xD4<<8)+SF +VF+NF+CF, + (0xD5<<8)+SF +NF+CF, + (0xD6<<8)+SF +NF+CF, + (0xD7<<8)+SF +VF+NF+CF, + (0xD8<<8)+SF +XF+VF+NF+CF, + (0xD9<<8)+SF +XF +NF+CF, + (0xDA<<8)+SF +HF+XF +NF+CF, + (0xDB<<8)+SF +HF+XF+VF+NF+CF, + (0xDC<<8)+SF +HF+XF +NF+CF, + (0xDD<<8)+SF +HF+XF+VF+NF+CF, + (0xDE<<8)+SF +HF+XF+VF+NF+CF, + (0xDF<<8)+SF +HF+XF +NF+CF, + (0xE0<<8)+SF +YF +NF+CF, + (0xE1<<8)+SF +YF +VF+NF+CF, + (0xE2<<8)+SF +YF +VF+NF+CF, + (0xE3<<8)+SF +YF +NF+CF, + (0xE4<<8)+SF +YF +VF+NF+CF, + (0xE5<<8)+SF +YF +NF+CF, + (0xE6<<8)+SF +YF +NF+CF, + (0xE7<<8)+SF +YF +VF+NF+CF, + (0xE8<<8)+SF +YF +XF+VF+NF+CF, + (0xE9<<8)+SF +YF +XF +NF+CF, + (0xEA<<8)+SF +YF+HF+XF +NF+CF, + (0xEB<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xEC<<8)+SF +YF+HF+XF +NF+CF, + (0xED<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xEE<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xEF<<8)+SF +YF+HF+XF +NF+CF, + (0xF0<<8)+SF +YF +VF+NF+CF, + (0xF1<<8)+SF +YF +NF+CF, + (0xF2<<8)+SF +YF +NF+CF, + (0xF3<<8)+SF +YF +VF+NF+CF, + (0xF4<<8)+SF +YF +NF+CF, + (0xF5<<8)+SF +YF +VF+NF+CF, + (0xF6<<8)+SF +YF +VF+NF+CF, + (0xF7<<8)+SF +YF +NF+CF, + (0xF8<<8)+SF +YF +XF +NF+CF, + (0xF9<<8)+SF +YF +XF+VF+NF+CF, + (0xFA<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xFB<<8)+SF +YF+HF+XF +NF+CF, + (0xFC<<8)+SF +YF+HF+XF+VF+NF+CF, + (0xFD<<8)+SF +YF+HF+XF +NF+CF, + (0xFE<<8)+SF +YF+HF+XF +NF+CF, + (0xFF<<8)+SF +YF+HF+XF+VF+NF+CF, + (0x00<<8) +ZF +VF+NF+CF, + (0x01<<8) +NF+CF, + (0x02<<8) +NF+CF, + (0x03<<8) +VF+NF+CF, + (0x04<<8) +NF+CF, + (0x05<<8) +VF+NF+CF, + (0x06<<8) +VF+NF+CF, + (0x07<<8) +NF+CF, + (0x08<<8) +XF +NF+CF, + (0x09<<8) +XF+VF+NF+CF, + (0x0A<<8) +HF+XF+VF+NF+CF, + (0x0B<<8) +HF+XF +NF+CF, + (0x0C<<8) +HF+XF+VF+NF+CF, + (0x0D<<8) +HF+XF +NF+CF, + (0x0E<<8) +HF+XF +NF+CF, + (0x0F<<8) +HF+XF+VF+NF+CF, + (0x10<<8) +NF+CF, + (0x11<<8) +VF+NF+CF, + (0x12<<8) +VF+NF+CF, + (0x13<<8) +NF+CF, + (0x14<<8) +VF+NF+CF, + (0x15<<8) +NF+CF, + (0x16<<8) +NF+CF, + (0x17<<8) +VF+NF+CF, + (0x18<<8) +XF+VF+NF+CF, + (0x19<<8) +XF +NF+CF, + (0x1A<<8) +HF+XF +NF+CF, + (0x1B<<8) +HF+XF+VF+NF+CF, + (0x1C<<8) +HF+XF +NF+CF, + (0x1D<<8) +HF+XF+VF+NF+CF, + (0x1E<<8) +HF+XF+VF+NF+CF, + (0x1F<<8) +HF+XF +NF+CF, + (0x20<<8) +YF +NF+CF, + (0x21<<8) +YF +VF+NF+CF, + (0x22<<8) +YF +VF+NF+CF, + (0x23<<8) +YF +NF+CF, + (0x24<<8) +YF +VF+NF+CF, + (0x25<<8) +YF +NF+CF, + (0x26<<8) +YF +NF+CF, + (0x27<<8) +YF +VF+NF+CF, + (0x28<<8) +YF +XF+VF+NF+CF, + (0x29<<8) +YF +XF +NF+CF, + (0x2A<<8) +YF+HF+XF +NF+CF, + (0x2B<<8) +YF+HF+XF+VF+NF+CF, + (0x2C<<8) +YF+HF+XF +NF+CF, + (0x2D<<8) +YF+HF+XF+VF+NF+CF, + (0x2E<<8) +YF+HF+XF+VF+NF+CF, + (0x2F<<8) +YF+HF+XF +NF+CF, + (0x30<<8) +YF +VF+NF+CF, + (0x31<<8) +YF +NF+CF, + (0x32<<8) +YF +NF+CF, + (0x33<<8) +YF +VF+NF+CF, + (0x34<<8) +YF +NF+CF, + (0x35<<8) +YF +VF+NF+CF, + (0x36<<8) +YF +VF+NF+CF, + (0x37<<8) +YF +NF+CF, + (0x38<<8) +YF +XF +NF+CF, + (0x39<<8) +YF +XF+VF+NF+CF, + (0x3A<<8) +YF+HF+XF+VF+NF+CF, + (0x3B<<8) +YF+HF+XF +NF+CF, + (0x3C<<8) +YF+HF+XF+VF+NF+CF, + (0x3D<<8) +YF+HF+XF +NF+CF, + (0x3E<<8) +YF+HF+XF +NF+CF, + (0x3F<<8) +YF+HF+XF+VF+NF+CF, + (0x40<<8) +NF+CF, + (0x41<<8) +VF+NF+CF, + (0x42<<8) +VF+NF+CF, + (0x43<<8) +NF+CF, + (0x44<<8) +VF+NF+CF, + (0x45<<8) +NF+CF, + (0x46<<8) +NF+CF, + (0x47<<8) +VF+NF+CF, + (0x48<<8) +XF+VF+NF+CF, + (0x49<<8) +XF +NF+CF, + (0x4A<<8) +HF+XF +NF+CF, + (0x4B<<8) +HF+XF+VF+NF+CF, + (0x4C<<8) +HF+XF +NF+CF, + (0x4D<<8) +HF+XF+VF+NF+CF, + (0x4E<<8) +HF+XF+VF+NF+CF, + (0x4F<<8) +HF+XF +NF+CF, + (0x50<<8) +VF+NF+CF, + (0x51<<8) +NF+CF, + (0x52<<8) +NF+CF, + (0x53<<8) +VF+NF+CF, + (0x54<<8) +NF+CF, + (0x55<<8) +VF+NF+CF, + (0x56<<8) +VF+NF+CF, + (0x57<<8) +NF+CF, + (0x58<<8) +XF +NF+CF, + (0x59<<8) +XF+VF+NF+CF, + (0x5A<<8) +HF+XF+VF+NF+CF, + (0x5B<<8) +HF+XF +NF+CF, + (0x5C<<8) +HF+XF+VF+NF+CF, + (0x5D<<8) +HF+XF +NF+CF, + (0x5E<<8) +HF+XF +NF+CF, + (0x5F<<8) +HF+XF+VF+NF+CF, + (0x60<<8) +YF +VF+NF+CF, + (0x61<<8) +YF +NF+CF, + (0x62<<8) +YF +NF+CF, + (0x63<<8) +YF +VF+NF+CF, + (0x64<<8) +YF +NF+CF, + (0x65<<8) +YF +VF+NF+CF, + (0x66<<8) +YF +VF+NF+CF, + (0x67<<8) +YF +NF+CF, + (0x68<<8) +YF +XF +NF+CF, + (0x69<<8) +YF +XF+VF+NF+CF, + (0x6A<<8) +YF+HF+XF+VF+NF+CF, + (0x6B<<8) +YF+HF+XF +NF+CF, + (0x6C<<8) +YF+HF+XF+VF+NF+CF, + (0x6D<<8) +YF+HF+XF +NF+CF, + (0x6E<<8) +YF+HF+XF +NF+CF, + (0x6F<<8) +YF+HF+XF+VF+NF+CF, + (0x70<<8) +YF +NF+CF, + (0x71<<8) +YF +VF+NF+CF, + (0x72<<8) +YF +VF+NF+CF, + (0x73<<8) +YF +NF+CF, + (0x74<<8) +YF +VF+NF+CF, + (0x75<<8) +YF +NF+CF, + (0x76<<8) +YF +NF+CF, + (0x77<<8) +YF +VF+NF+CF, + (0x78<<8) +YF +XF+VF+NF+CF, + (0x79<<8) +YF +XF +NF+CF, + (0x7A<<8) +YF+HF+XF +NF+CF, + (0x7B<<8) +YF+HF+XF+VF+NF+CF, + (0x7C<<8) +YF+HF+XF +NF+CF, + (0x7D<<8) +YF+HF+XF+VF+NF+CF, + (0x7E<<8) +YF+HF+XF+VF+NF+CF, + (0x7F<<8) +YF+HF+XF +NF+CF, + (0x80<<8)+SF +NF+CF, + (0x81<<8)+SF +VF+NF+CF, + (0x82<<8)+SF +VF+NF+CF, + (0x83<<8)+SF +NF+CF, + (0x84<<8)+SF +VF+NF+CF, + (0x85<<8)+SF +NF+CF, + (0x86<<8)+SF +NF+CF, + (0x87<<8)+SF +VF+NF+CF, + (0x88<<8)+SF +XF+VF+NF+CF, + (0x89<<8)+SF +XF +NF+CF, + (0x8A<<8)+SF +HF+XF +NF+CF, + (0x8B<<8)+SF +HF+XF+VF+NF+CF, + (0x8C<<8)+SF +HF+XF +NF+CF, + (0x8D<<8)+SF +HF+XF+VF+NF+CF, + (0x8E<<8)+SF +HF+XF+VF+NF+CF, + (0x8F<<8)+SF +HF+XF +NF+CF, + (0x90<<8)+SF +VF+NF+CF, + (0x91<<8)+SF +NF+CF, + (0x92<<8)+SF +NF+CF, + (0x93<<8)+SF +VF+NF+CF, + (0x94<<8)+SF +NF+CF, + (0x95<<8)+SF +VF+NF+CF, + (0x96<<8)+SF +VF+NF+CF, + (0x97<<8)+SF +NF+CF, + (0x98<<8)+SF +XF +NF+CF, + (0x99<<8)+SF +XF+VF+NF+CF +}; + diff --git a/ genplus-gx/source/docs/Genesis_ROM_Format.txt b/ genplus-gx/source/docs/Genesis_ROM_Format.txt new file mode 100644 index 0000000..b38e911 --- /dev/null +++ b/ genplus-gx/source/docs/Genesis_ROM_Format.txt @@ -0,0 +1,373 @@ + + THE COMPLETE DOCUMENTATION ABOUT + GENESIS ROM FORMAT + + Version 1.1 + + + Release history + ^^^^^^^^^^^^^^^ + Version 1.0 (December, 1997) + - Initial Release + + Version 1.1 (January, 1998) + - Splitted rom format explained! + - New company codes + - New errors in copyright interpreting found + - Month interpreting (in copyright) + + + In this document you will find everything you need to know about +the information embedded within a Genesis ROM. You will also find +how to read all this information from the different ROM formats +(BIN, SMD and MD). + The information in this document was hacked by Volker Oth (dOnut) +and by me with help from technical documents found on internet. +The primary document from the internet that we used was gentech.txt. + If you want to change this document to add any important info about +the Genesis ROMs, do it freely but I would like to receive a copy of +the updated document. Then, I'll add your name in it and post it on my +homepage. Don't be a lamer and keep all names mentioned here! + Note that all numbers with a "H" in the left are in hexadecimal, and +the first byte of a file is the ZERO position. All information is +provided based on the BIN file-format because of the nature of this +format(see sections about each rom format). + *This document should be downloaded from my homepage. Any other site +may contain outdated material!* + If you use this information for anything, please give the proper +credits to the all these names listed below! I would thank you if you +include a link to our homepages and emails, too! + +Felipe XnaK: + http://www.classicgaming.com/launchtool + felipe@ComPorts.com +Volker Oth (dOnut): + http://members.aol.com/~volkeroth + volkeroth@aol.com + + + THE BASIC INFORMATION: + ^^^^^^^^^^^^^^^^^^^^^ + +H100: 'SEGA MEGA DRIVE' 1 +H110: '(C)SEGA 1988.JUL' 2 +H120: GAME NAME (DOMESTIC) 3 +H150: GAME NAME (OVERSEAS) 4 +H180: 'XX' 5 +H182: 'XXXXXXX-XX' 6 +H18E: XXXX 7 +H190: 'XXXXXXXXXXXXXXXX' 8 +H1A0: 00000000, XXXXXXXX 9 +H1A8: RAM 10 +H1BC: MODEM DATA 11 +H1C8: MEMO 12 +H1F0: Country in which the product 13 + can be released. + +1: This is just the console name. It can be 'SEGA MEGA DRIVE' or + 'SEGA GENESIS' depending on the console's country of origin. + +2: Copyright notice. There SHOULD be 4 characters for the company +code, a space and then the date in yyyy.mmm format; however, there are +variations. + For a listing of company codes, see "TABLE OF COMPANY CODES". +For a listing of month abbreviations, se "TABLE OF MONTH ABBREVIATIONS". +When the company uses a number as a company code, the copyright has +(in most cases!) this format: '(C)T-XX 1988.JUL', where XX is the +company code. If the company code has three digits, it should use the +space between the code and the date. + Some wrong copyrights i've found: + * The year is written as '199X' or '19XX', or doen't include the + millenium and the century. + * The company name is '00' or 'XX' + * Some companies that use a number for company code overwrite the + hiphen, not the space. + * Some companies doesn't include the '(C)' in the beginning and + others include just their name; some just include the the year + * Some copyrights have the year and month separated by ',','/', '-', + space or null character (H00). I'd found one that hasn't any separator + at all! + -- Good luck! -- + +3: This is the so-called "Domestic game name". Is the name the game has +in its country of origin. This field is 48 bytes long... + +4: ... and this is the so-called "Overseas game name". This is the name +the game has worldwide. 48 bytes long too. + +5: Type of product. This is 2 bytes long. Known values: + GM = Game + Al = Education + +6: Product code and Version number: + * The first 7 characters are the product code + * The 2 characters after the hiphen is the version number. This will + vary depending on the the type of ROM or software version + +7: Check sum, a two-bytes value (see "Calculating the Checksum") + +8: I/0 support: (this is 16 bytes long) + J = Joypad 4 = Team Play + 6 = 6-button Joypad 0 = Joystick for MS + K = Keyboard R = Serial RS232C + P = Printer T = Tablet + B = Control Ball V = Paddle Controller + F = Floppy Disk Drive C = CD-ROM + L = Activator M = Mega Mouse + +9: ROM capacity. Here you will find the start and end address of the rom, +respectively. The start address in most cases is 0 and the end address is +the size of rom in BYTES. Note that these values don't include the headers +that some rom images have (discussed later). Each address is 4-bytes long. + +10: There is a lot of information here that I can't help you with. What +I can say is that you can get the start and end positions of the backup +RAM at offset H1B4. Like in ROM addresses, you first acquire the start, +then the end address. Remember, these addresses are four bytes each. + +11: If the rom has no support for MODEM, fill this with spaces. If it has +support for MODEM, then fill in this format: 'MOxxxxyy.z', where: + xxxx Firm name the same as in 2 + yy MODEM NO. + z Version + +12: I don't know what the heck it is! But by it's name and considering +all roms that I investigated, it seems that you can write whatever you want +in this field... + +13: Countries where the game can be released. What is most interesting +here is that changing this info in some games has different behaviour. +Streets of Rage, for example, automatically changes it's name for Bare +Knuckle if you set the game for Japan. The "official" codes are: + E = Europe + J = Japan + U = USA + I've found some others as well(I do not guarantee this is correct!) + A = Asia + B = Brazil + 4 = Brazil + F = France + 8 = Hong Kong + This field can only contain three countries. This isn't really a +problem because all "unofficial" codes run as Europe! Don't forget to +set spaces to fill the bytes you don't use in this field. + + + TABLE OF COMPANY CODES: + ^^^^^^^^^^^^^^^^^^^^^^ + + This table was compiled by myself by just getting the company code +in the ROM and writing the license that appears on the tittle screen. +In other words, it probably contains errors and is missing a lot of +companies. + When two comp1anies use the same code and are different companies +(at least to my knownledge) the names are separeted by an "or". If the +companies are the same (like Acclain and Flying Edge), they're separated +by a backslash (/). + + CODE COMPANY + + ACLD Ballistic + ASCI Asciiware + RSI Razorsoft + SEGA SEGA + TREC Treco + VRGN Virgin Games + WSTN Westone + 10 Takara + 11 Taito or Accolade + 12 Capcom + 13 Data East + 14 Namco or Tengen + 15 Sunsoft + 16 Bandai + 17 Dempa + 18 Technosoft + 19 Technosoft + 20 Asmik + 22 Micronet + 23 Vic Tokai + 24 American Sammy + 29 Kyugo + 32 Wolfteam + 33 Kaneko + 35 Toaplan + 36 Tecmo + 40 Toaplan + 42 UFL Company Limited + 43 Human + 45 Game Arts + 47 Sage's Creation + 48 Tengen + 49 Renovation or Telenet + 50 Eletronic Arts + 56 Razorsoft + 58 Mentrix + 60 Victor Musical Industries + 69 Arena + 70 Virgin + 73 Soft Vision + 74 Palsoft + 76 Koei + 79 U.S. Gold + 81 Acclaim/Flying Edge + 83 Gametek + 86 Absolute + 93 Sony + 95 Konami + 97 Tradewest + 100 T*HQ Software + 101 Tecmagik + 112 Designer Software + 113 Psygnosis + 119 Accolade + 120 Code Masters + 125 Interplay + 130 Activision + 132 Shiny & Playmates + 144 Atlus + 151 Infogrames + 161 Fox Interactive + 239 Disney Interactive + +- SPECIAL CASES: + + In "Smurfs II" the copyright is just '(C) INFOGRAMES' + In "Baby's day out" rom, the copyright is: '(C) T-SNK 95-FEB', +but the company name is "HI-TECH entertainment" + + + TABLE OF MONTH ABBREVIATIONS: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +ABBREVIATIONS MONTH + + JAN January + FEB February + MAR March + APR or APL April + MAY May + JUN June + JUL July + AUG or 08 August + SEP or SEPT September + OCT October + NOV November + DEC December + + + CALCULATING THE CHECKSUM: + ^^^^^^^^^^^^^^^^^^^^^^^^ + + Genesis checksum is simple enough... All you need to do is: +1) Checksum starts as zero +2) Skip the first 512 bytes of the ROM +3) Read a byte from the rom and multiply its ascii value by 256, then sum + it to the checksum +4) Read the next byte from the rom and just sum it to the checksum +5) If you're not in the end of file, goto step 3 +6) Get the first 16 bits from the resulting checksum and discard the higher + bits +7) That's your checksum! + + + Super Magic Drive Binary file-format (.BIN): + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + This rom file-format is a simple rom dump. Nothing more to add! + + + Super Magic Drive Interleaved file-format (.SMD): + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + This is a much more complex file-format. It have a 512 bytes header +and is interleaved in 16KB blocks. These blocks have their even bytes +at the beginning and the odd bytes at the end of them. + + WHAT YOU FIND IN THE 512 BYTES HEADER: + +0: Number of blocks 1 +1: H03 * +2: SPLIT? 2 +8: HAA * +9: HBB * +ALL OTHER BYTES: H00 + +1: This first byte should have the number of 16KB blocks the rom has. +The header isn't part of the formula, so this number is: + [size of rom-512]/16386 + If the size is more than 255, the value should be H00. + +2: This byte indicates if the ROM is a part of a splitted rom series. If +the rom is the last part of the series (or isn't a splitted rom at all), +this byte should be H00. In other cases should be H40. See "CREATING +SPLITTED ROMS" for details on this format. + +*: Fixed values + + + THE DE-INTERLEAVING CODE (how to convert a SMD to a BIN): + +1) Skip the 512 bytes header +2) Get 16KB from the ROM (16384 bytes) +3) Decode the block +4) Write the decoded block to the BIN file + + DECODING A SMD BLOCK (stating byte is 0): + +1) Get Middlepoint (8192) +2) Get a byte from the block +3) If the byte position is equal or smaller than middlepoint, put it +in the first unused EVEN position of the decoded buffer +4) If the byte position is greater than middlepoint, put it in the +first unused ODD position of the decoded buffer + + To convert a BIN to a SMD, just create a header (as explained before) and +then do the reverse process! + + + Multi Game Doctor file-format (.MD): + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + The MD file format also doesn't have a header. The interleaving it uses +is equal to the SMD, but without the division in blocks! (Even bytes in +the end of file, odd bytes in the beginning). + + THE DECODING A MD (how to convert a MD to a BIN): + +1) Get middlepoint ([size of rom]/2) +2) Get a byte from the ROM +3) If the byte position is equal or smaller than the middlepoint put the +byte in [byte position]*2 of the destination buffer +4) If the byte position is greater than the middlepoint, put the byte in +([byte position]*2) - [size of rom] -1 + + + CREATING SPLITTED ROMS: + ^^^^^^^^^^^^^^^^^^^^^^^ + + Splitted ROMs are a SMD divided into pieces. Knowing this, you may +guess that you first need to convert your ROM to a SMD! :) + To have a splitted ROM created all you need is divide your SMD in +several pieces, usually all with the same size (with the exception of +the last one). After doing that, you need to add a SMD header to all +these pieces. About these SMD headers: + 1) The number of blocks embedded in them should be relative to the +piece, not to the joined ROM. + 2) As stated before, with the exception of the last piece, all roms +should have their SPLIT byte set. + + + HOW YOU CAN HELP ME WITH THIS DOCUMENT: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + - Telling me the intricacies of a MGD ROM image. I never found one, but +I do believe it's equal to MD format. + - I'm trying to find out how the sprites are saved in Genesis ROMs. If +you have this info, I would like to have it! + - I never had a rom with modem support. If you have one, please test if +the information about it is correct in this documentation (I got it from +gentech). If you find it's correct, please explain me!!! + + If you have any of this information, send it with your addresses (e-mail, +homepage, etc) so I can add this to the document! \ No newline at end of file diff --git a/ genplus-gx/source/docs/changelog b/ genplus-gx/source/docs/changelog new file mode 100644 index 0000000..548139f --- /dev/null +++ b/ genplus-gx/source/docs/changelog @@ -0,0 +1,22 @@ + + [04/20/03] + - Modified 68000 emulator to prevent 'tas.b $mem' from writing data back + after a read (fixes Gargoyles). + - Fixed bug in 68000 emulator to swap order of words written for address + register indirect pre-decremented writes (fixes Jim Power graphics). + - Added support for 240-line displays (for Super Skidmarks). + - Rewrote part of the interrupt handling (fixes some raster effects). + - Removed sprite collision detection code (never really worked). + - Optimized sprite rendering inner loop. + + [04/13/03] + - Finished up memory map for VDP DMA V-bus reads. + - Fixed handling of 68000 writes to I/O chip at even addresses. + - Fixed bit 7 handling of control register in I/O chip. + - Finished up Z80 memory map. + - Added code to handle Genesis hardware lock-ups. + - Removed some faulty code from the 68000 memory map handlers. + + [03/22/03] + - Completed implementation of Z80 banked memory handlers. + diff --git a/ genplus-gx/source/docs/eeprom.txt b/ genplus-gx/source/docs/eeprom.txt new file mode 100644 index 0000000..0213af7 --- /dev/null +++ b/ genplus-gx/source/docs/eeprom.txt @@ -0,0 +1,232 @@ +This is the result of testing EEPROM support under Genesis Plus. +Following games use custom external RAM (serial EEPROM) for backup. +It seems that different EEPROM Mapper have been used, depending upon companies. + +Eke~Eke - July 2007 + + +------------------------------------------------------- +ACCLAIM (81) +------------------------------------------------------- + +NBA Jam (UE) +NBA Jam (J) +------------ +T-081326 +T-81033 +header OK ($200001-$200001) + +TYPE: 8BITS WORD ADDRESS +SIZE_MASK: 0xFF (24C02) +PAGE_MASK: 0x03 +SDA_IN : 0x200000 (0) +SDA_OUT: 0x200000 (1) +SCL : 0x200000 (1) + +Note: this game uses a different EEPROM mapper than other Accolade games. + + +Blockbuster World Video Game Championship II (U) +NBA Jam Tournament Edition (JUE) +------------------------------------------------ +T-81406 +header KO + +TYPE: TYPE: 8BITS WORD ADDRESS +SIZE_MASK: 0xFF (24C02) +PAGE_MASK: 0x03 +SDA_IN : 0x200001 (0) +SDA_OUT: 0x200001 (0) +SCL : 0x200000 (0) + +Note: Rev 00 of the game has buggy eeprom support (incorrect data written), game backup only work with Rev01 version (released apparently in 2002, eight years later !) + + +NFL Quarterback Club (JUE) +----------------------------- +T-081276 +header OK ($200000-$200001) + +TYPE: TYPE: 8BITS WORD ADDRESS +SIZE_MASK: 0xFF (24C02) +PAGE_MASK: 0x03 +SDA_IN : 0x200001 (0) +SDA_OUT: 0x200001 (0) +SCL : 0x200000 (0) + + +NFL Quarterback Club 96 (UE) +----------------------------- +T-081586 +header OK ($200000-$200001) + +TYPE: TYPE: 8BITS WORD ADDRESS +SIZE_MASK: 0x7FF (24C16) +PAGE_MASK: 0x07 +SDA_IN : 0x200001 (0) +SDA_OUT: 0x200001 (0) +SCL : 0x200000 (0) + + +College Slam (U) +---------------- +T-81576 +header OK ($200001-$200001) + +TYPE: 16BITS WORD ADDRESS +SIZE_MASK: 0x1FFF (24C64) +PAGE_MASK: 0x07 +SDA_IN : 0x200001 (0) +SDA_OUT: 0x200001 (0) +SCL : 0x200000 (0) + + +Frank Thomas Big Hurt Baseball (UE) +---------------- +T-81476 +header OK ($200000-$200001) + +TYPE: 16BITS WORD ADDRESS +SIZE_MASK: 0x1FFF (24C64) +PAGE_MASK: 0x07 +SDA_IN : 0x200001 (0) +SDA_OUT: 0x200001 (0) +SCL : 0x200000 (0) + + + +------------------------------------------------------- +CAPCOM (12) +------------------------------------------------------- + +Megaman - The Wily Wars (E) +Rockman Mega World (J) [alt] +---------------- +T-12046 +T-12053 (checksum = 0xEA80) +header OK ($200001-$200001) + +TYPE: 7BITS WORD ADDRESS +SIZE_MASK: 0x7F (24C01) +PAGE_MASK: 0x03 +SDA_IN : 0x200001 (0) +SDA_OUT: 0x200001 (0) +SCL : 0x200001 (1) + +NOTE: the original version of Rockman Mega World (J) uses traditional SRAM, header gives $200000-$203FFF range +the alternate version uses a 128bytes serial EEPROM (X24C01) +the two versions share the same GAME NAME and PRODUCT ID + + + +------------------------------------------------------- +Electronic Arts (50) +------------------------------------------------------- + +NHLPA Hockey 93 (UE) +---------------- +T-50396 +header KO + +TYPE: 7BITS WORD ADDRESS +SIZE_MASK: 0x7F (24C01) +PAGE_MASK: 0x03 +SDA_IN : 0x200000 (7) +SDA_OUT: 0x200000 (7) +SCL : 0x200000 (6) + + +Rings of Power (UE) +---------------- +T-50176 +header KO + +TYPE: 7BITS WORD ADDRESS +SIZE_MASK: 0x7F (24C01) +PAGE_MASK: 0x03 +SDA_IN : 0x200000 (7) +SDA_OUT: 0x200000 (7) +SCL : 0x200000 (6) + + + +------------------------------------------------------- +SEGA +------------------------------------------------------- + +Greatest Heavyweights of the Ring (U) +Greatest Heavyweights of the Ring (J) +Greatest Heavyweights of the Ring (E) +----------------------------- +MK-1228 +G-5538 +PR-1993 +header OK ($200001-$200001) + +TYPE: 7BITS WORD ADDRESS +SIZE_MASK: 0x7F (24C01) +PAGE_MASK: 0x03 +SDA_IN : 0x200001 (0) +SDA_OUT: 0x200001 (0) +SCL : 0x200001 (1) + + +Wonder Boy in Monster World (UE) +Wonder Boy V - Monster World III (J) +---------------- +G-4060 +header OK ($200001-$200001) + +TYPE: 7BITS WORD ADDRESS +SIZE_MASK: 0x7F (24C01) +PAGE_MASK: 0x03 +SDA_IN : 0x200001 (0) +SDA_OUT: 0x200001 (0) +SCL : 0x200001 (1) + + + +------------------------------------------------------- +CODEMASTERS +------------------------------------------------------- + +Micro Machines 2 - Turbo Tournament (E) (J-Cart) +------------------------------------------------ +T-120096-50 +header KO + +TYPE: TYPE: 8BITS WORD ADDRESS +SIZE_MASK: 0x3FF (24C08) +PAGE_MASK: 0x0F +SDA_IN : 0x300000 (0) +SDA_OUT: 0x380001 (7) +SCL : 0x300000 (1) + +Note: this game needs the EEPROM to be initially fullfilled with the string +"PETETEST01234567" otherwise it won't initialize memory with correct data. + + +Micro Machines Military (E) (J-Cart) +------------------------------------ +00000000-00 (checksum = 0x168B or 0xCEE0) +header KO + +TYPE: TYPE: 8BITS WORD ADDRESS +SIZE_MASK: 0x3FF (24C08) +PAGE_MASK: 0x0F +SDA_IN : 0x300000 (0) +SDA_OUT: 0x380001 (7) +SCL : 0x300000 (1) + + +Micro Machines Turbo Tournament 96 (E) (J-Cart) +------------------------------------------------ +00000000-00 (checksum = 0x165E or 0x2C41) +header KO + +TYPE: TYPE: 8BITS WORD ADDRESS +SIZE_MASK: 0x7FF (24C16) +PAGE_MASK: 0xF +SDA_IN : 0x300000 (0) +SDA_OUT: 0x380001 (7) +SCL : 0x300000 (1) \ No newline at end of file diff --git a/ genplus-gx/source/docs/gamegenie.htm b/ genplus-gx/source/docs/gamegenie.htm new file mode 100644 index 0000000..a18121d --- /dev/null +++ b/ genplus-gx/source/docs/gamegenie.htm @@ -0,0 +1,235 @@ + + + GameGenie patches + + + + +
    +

    GameGenie Patching

    +
    +

      GameGenie was a device created by codemasters and galoob that +let you make cheats for games. It was plugged in the console like a normal +cartridge, and in its top the desired cartridge was plugged. These cheats are +possible because what GameGenie do is edit the RAM that stores values used by +the ROMs, setting these values to a constant that can be, for example, the +number of lifes you have!

    +

      Genecyst was the first Genesis emulator to have support +for GameGenie then, with Kgen98, Steve Snake started to use this neat feature +in his great emulator. No ROM image of a GameGenie is necessary, as some may +imagine, to use them with console emulators, these programs themselves have a +built-in feature that acts like a GameGenie, writing the codes in the emulated +RAM.

    +

      The GameGenie code consists of a eight-bytes long string, and +the valid characters are A, B, C, D, E, F, G, H, J, K, L, M, N, P, R, S, T, V, +W, X, Y, Z, 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9, all in uppercase. Each character +have a binary repressentation, which is 5-bits long.

    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CharValue
    A00000
    B00001
    C00010
    D00011
    E00100
    F00101
    G00110
    H00111
    J01000
    K01001
    L01010
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CharValue
    M01011
    N01100
    P01101
    R01110
    S01111
    T10000
    V10001
    W10010
    X10011
    Y10100
    Z10101
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CharValue
    010110
    110111
    211000
    311001
    411010
    511011
    611100
    711101
    811110
    911111
    +
    +
    +

      The cheat code should be firstly converted directly using the +table above, and then the bits should be reordered. For example, the GameGenie +code SCRA-BJX0 is translated to:

    + + + + + + + + +
    + + + + +
    Code:
    Bits:
    Id:
    +
    + + + + + + + + + + +
    SCRA
    01111000100111000000
    ijklmnopIJKLMNOPABCD
    +
    + + + + +
    -
    -
    -
    +
    + + + + +
    BJX0
    00001010001001110110
    EFGHdefghabcQRSTUVWX
    +
    +
    +

      Then rearrange (using the id) as...

    + + + + + + + + +
    + + + +
    Bits:
    Id:
    +
    + + + + + + + +
    000000001001110001110110
    ABCDEFGHIJKLMNOPQRSTUVWX
    +
    + + + +
    :
    :
    +
    + + + +
    01010100 01111000
    abcdefghijklmnop
    +
    +
    +
    +

      Which give us, in hexa, 009C76:5478. This means that +H5478 will be written at H009C76 memory offset.

    + + diff --git a/ genplus-gx/source/docs/gen-hw.txt b/ genplus-gx/source/docs/gen-hw.txt new file mode 100644 index 0000000..3fbd63f --- /dev/null +++ b/ genplus-gx/source/docs/gen-hw.txt @@ -0,0 +1,715 @@ + + Sega Genesis hardware notes + Version 0.8 (03/02/01) + + by Charles MacDonald + WWW: http://cgfm2.emuviews.com + + Unpublished work Copyright 2000, 2001 Charles MacDonald + + Here is a compilation of some notes I've written up on the Sega Genesis + hardware. Everything described herein has been checked on the real thing, + though that doesn't necessarily mean my testing methods were flawless. :) + + Version history + --------------- + [0.8] + - Added information on the SVP chip used in Virtua Racing. (section 4.2) + - Added information on EEPROM storage. (section 4.1) + - Changed miscellaneous section around. + [0.7] + - Added more information about access to the Z80 bus. (section 2.2) + - Updated the VDP register information, and removed some things + that were specific to VDP programming. (section 1.1) + - Added some background about the PSG. (section 4) + [0.6] + - Rewrote the 68000 memory map description. (section 1) + - Rewrote the Z80 memory map description. (section 2.1) + - Added memory access section. (section 1.2) + - Added a few miscellaneous topics. (section 4) + [0.5] + - Added more Z80 banking information. + - Added unused VDP address return values from the Z80 side. + - Added example of how to start up the Z80 on power-up. + - Added information on Phantasy Star 4 from Jeff Quinn. + - Added list of consoles that support Mark-III compatibility mode. + - Fixed a few typos. + [0.4] + - Added more details on 68000 and Z80 memory map. + - Added more information on VDP addresses. + - Added some thoughts on Phantasy Star 4. + [0.3] + - Added more information on I/O registers. (section 3) + - Fixed a few typos pointed out by Tim Meekins. + [0.2] + - Added section on I/O port programming and gamepads + [0.1] + - Initial release + + Table of Contents + + 1.) 68000 memory map + 1.1) VDP registers + 1.2) Memory access quirks + 1.3) Clock speeds + 2.) Sound hardware overview + 2.1) Z80 memory map + 2.2) RESET and BUSREQ registers + 2.3) Banking + 2.4) Interrupts + 3.) Input and Output + 3.1) Programming I/O ports + 3.2) Gamepad specifics + 4.) Miscellaneous + 4.1) EEPROM + 4.2) Virtua Racing + 4.3) Phantasy Star 4 + 4.4) Other topics + 5.) Credits + 6.) Disclaimer + + + 1.) 68000 memory map + + 000000-3FFFFFh : ROM + 400000-7FFFFFh : Unused (1) + 800000-9FFFFFh : Unused (2) + A00000-A0FFFFh : Z80 address space (3) + A10000-A1001Fh : I/O + A10020-BFFFFFh : Internal registers and expansion (4) + C00000-DFFFFFh : VDP (5) + E00000-FFFFFFh : RAM (6) + + 1. Reads return the MSB of the next instruction to be fetched, with the + LSB set to zero. Writes do nothing. + + 2. Reading or writing any address will lock up the machine. + This area is used for the 32X adapter. + + 3. Addresses A08000-A0FFFFh mirror A00000-A07FFFh, so the 68000 cannot + access it's own banked memory. All addresses are valid except for + the VDP which is at A07F00-A07FFFh and A0FF00-A0FFFFh, writing or + reading those addresses will lock up the machine. + + 4. Reading some addresses lock up the machine, others return the MSB + of the next instruction to be fetched with the LSB is set to zero. + + The latter applies when reading A11100h (except for bit 0 reflects + the state of the bus request) and A11200h. + + Valid addresses in this area change depending on the peripherals + and cartridges being used; the 32X, Sega CD, and games like Super + Street Fighter II and Phantasy Star 4 use addresses within this range. + + 5. The VDP is mirrored at certain locations from C00000h to DFFFFFh. In + order to explain what addresses are valid, here is a layout of each + address bit: + + MSB LSB + 110n n000 nnnn nnnn 000m mmmm + + '1' - This bit must be 1. + '0' - This bit must be 0. + 'n' - This bit can have any value. + 'm' - VDP addresses (00-1Fh) + + For example, you could read the status port at D8FF04h or C0A508h, + but not D00084h or CF00008h. Accessing invalid addresses will + lock up the machine. + + 6. The RAM is 64K in size and is repeatedly mirrored throughout the entire + range it appears in. Most games only access it at FF0000-FFFFFFh. + + 1.1) VDP registers + + The lower five bits of the address specify what memory mapped VDP register + to access: + + 00h : Data port + 02h : Data port + 04h : Control port (1) + 06h : Control port + 08h : HV counter (2) + 0Ah : HV counter + 0Ch : HV counter + 0Eh : HV counter + 11h : SN76489 PSG (3) + 13h : SN76489 PSG + 15h : SN76489 PSG + 17h : SN76489 PSG + 18h : Unused (4) + 1Ah : Unused + 1Ch : Unused + 1Eh : Unused + + 1. For reads, the upper six bits of the status flags are set to the + value of the next instruction to be fetched. Bit 6 is always zero. + For example: + + move.w $C00004, d0 ; Next word is $4E71 + nop ; d0 = -1-- 11?? ?0?? ???? + + When reading the status flags through the Z80's banked memory area, + the upper six bits are set to one. + + 2. Writing to the HV counter will cause the machine to lock up. + + 3. Reading the PSG addresses will cause the machine to lock up. + + Doing byte-wide writes to even PSG addresses has no effect. + + If you want to write to the PSG via word-wide writes, the data + must be in the LSB. For instance: + + move.b (a4)+, d0 ; PSG data in LSB + move.w d0, $C00010 ; Write to PSG + + 4. Reading the unused addresses returns the next instruction to be fetched. + For example: + + move.w $C00018, d0 ; Next word is $4E71 + nop ; d0 = $4E71 + + When reading these addresses through the Z80's banked memory area, + the value returned is always FFh. + + Writing to C00018h and C0001Ah has no effect. + + Writing to C0001Ch and C0001Eh seem to corrupt the internal state + of the VDP. Here's what each bit does: (assuming word-wide writes) + + 8E9Fh : These bits cause brief flicker in the current 8 pixels + being drawn when the write occurs. + + 5040h : These bits blank the display like bit 6 of register #1 when set. + + 2000h : This bit makes every line show the same random garbage data. + + 0100h : This bit makes random pattern data appear in the upper eight + and lower ten lines of the display, with the normal 224 lines + in the middle untouched. For those of you interested, the + display is built up like so: + + 224 lines for the active display + 10 lines unused (can show pattern data here with above bit) + 3 lines vertical blank (no border color shown) + 3 lines vertical retrace (no picture shown at all) + 13 lines vertical blank (no border color shown) + 8 lines unused (can show pattern data here with above bit) + + I know that comes up to 261 lines and not 262. But that's + all my monitor shows. + + Turning the display off makes the screen roll vertically, + and random pattern data is displayed in all lines when + this bit is set. + + 0020h : This bit causes the name table and pattern data shown to + become corrupt. Not sure if the VRAM is bad or the VDP is + just showing the wrong data. + + 1.2) Memory access quirks + + Byte-wide writes + + Writing to the VDP control or data ports is interpreted as a 16-bit + write, with the LSB duplicated in the MSB. This is regardless of writing + to an even or odd address: + + move.w #$A5, $C00003 ; Same as 'move.w #$A5A5, $C00002' + move.w #$87, $C00004 ; Same as 'move.w #$8787, $C00004' + + Byte-wide reads + + Reading from even VDP addresses returns the MSB of the 16-bit data, + and reading from odd address returns the LSB: + + move.b $C00008, d0 ; D0 = V counter + move.b $C00001, d0 ; D0 = LSB of current VDP data word + move.b $C0001F, d0 ; D0 = $71 + nop + move.b $C00004, d0 ; D0 = MSB of status flags + + Word-wide writes + + When doing word-wide writes to Z80 RAM, only the MSB is written, and + the LSB is ignored: + + 0000: AA BB CC DD ; Z80 memory + move.w #$1234, $A00000 ; do a word-wide write + 0000: 12 BB CC DD ; result + + Word-wide reads + + A word-wide read from Z80 RAM has the LSB of the data duplicated in the MSB. + + 0000: AA BB CC DD ; Z80 memory + move.w $A00000, d0 ; do a word-wide read + d0 = $AAAA ; result + + 1.3) Clock speeds + + These are for an NTSC Sega Genesis console. + + 680000 = 7.67 MHz + YM2612 = 7.67 MHz + Z80 = 3.58 MHz + SN76489 = 3.58 MHz + + If anyone has information about timing for PAL consoles, please let me know. + + 2) Sound hardware overview + + The following components used for sound generation: + + - Zilog Z80 CPU + - 8k static RAM + - Yamaha YM2612 FM sound generator + - SN76489 PSG + + 2.1) Z80 memory map + + 0000-1FFFh : RAM + 2000-3FFFh : RAM (mirror) + 4000-5FFFh : YM2612 (1) + 6000-60FFh : Bank address register (2) + 6100-7EFFh : Unused (3) + 7F00-7FFFh : VDP (4) + 8000-FFFFh : Bank area + + 1. The YM2612 has two address lines, so it is available at 4000-4003h and + is mirrored repeatedly up to 5FFFh. + + 2. Writes go to the bank address register, reads return FFh. + The value returned applies to both the 68000 and Z80. + + 3. Writes are ignored, reads return FFh. + The value returned applies to both the 68000 and Z80. + + 4. Only addresses 7F00-7F1Fh are valid, writes to 7F20-7FFFh will + lock up the machine. + + Z80 access to the VDP has the same results as doing byte-wide reads + and writes as described in section 1.2. So only the HV counter and + PSG can be used effectively. + + All I/O ports return FFh, and writing to them has no effect. The Thunder + Force games read port BFh in the IRQ subroutine, this would appear to be + a misunderstanding on the programmer's behalf. + + The 68000 can write to A06000h to set up the bank address. + + 2.2) RESET and BUSREQ registers + + Bit 0 of A11100h (byte access) or bit 8 of A11100h (word access) controls + the Z80's /BUSREQ line. + + Writing 1 to this bit will request the Z80 bus. You can then release + the bus later on by writing 0. + + Reading this bit will return 0 if the bus can be accessed by the 68000, + or 1 if the Z80 is still busy. + + If the Z80 is reset, or if it is running (meaning the 68000 does not + have the bus) it will also return 1. The only time it will switch from + 1 to 0 is right after the bus is requested, and if the Z80 is still + busy accessing memory or not. + + Bit 0 of A11200h (byte access) or bit 8 of A11200h (word access) controls + the Z80's /RESET line. + + Writing 0 to this bit will start the reset process. The Z80 manual says you + have to assert the /RESET line for three Z80 clock cycles as a reset does + not happen instantly. + + Writing 1 to this bit will stop the reset process. At this point, the Z80 + will start executing from address 0000h onwards. + + The /RESET line is shared with the YM2612. For as long as the Z80 is reset, + the YM2612 cannot be used. + + The Z80 bus can only be accessed by the 68000 when the Z80 is running + and the 68000 has the bus. (as opposed to the Z80 being reset, and/or + having the bus itself) + + Otherwise, reading $A00000-A0FFFF will return the MSB of the next + instruction to be fetched, and the LSB will be set to zero. Writes + are ignored. This even applies to the VDP area that would normally + lock up the machine. + + Interestingly enough, you can still access $A10000-A1001F during this + time, which seems to be contradictory to some documentation which says + you can only access the I/O region when the 68000 has the bus. + + On power-up, the Z80 will be reset and will have the bus. + If you want to load a Z80 program and run it, do the following: + + - Stop the reset process + - Request bus + - Load Z80 program + - Start the reset process + - Release bus + - Stop the reset process + + 2.3) Banking + + The Z80 can access the 68000's address space through a banking mechanism + which maps 32k pages to 8000-FFFFh on the Z80 side. + + Most games do this to get at large data chunks like YM2612 DAC samples. + However, you can access anything else the 68000 can. (I've tried reading + the version register and setting the VDP border color this way with + success - in fact some 32X sample code shows the PWM sound generator + programmed by the Z80 through banking) + + To specify which 32k section you want to access, write the upper nine + bits of the complete 24-bit address into bit 0 of the bank address + register, which is at 6000h (Z80) or A06000h (68000), starting with + bit 15 and ending with bit 23. + + For example: + + ld ix, $6000 ; + xor a ; + ld (ix), a ; Bit 15 = 0 + ld (ix), a ; Bit 16 = 0 + ld (ix), a ; Bit 17 = 0 + ld (ix), a ; Bit 18 = 0 + ld (ix), a ; Bit 19 = 0 + ld (ix), a ; Bit 20 = 0 + ld (ix), a ; Bit 21 = 0 + inc a ; + ld (ix), a ; Bit 22 = 1 + ld (ix), a ; Bit 23 = 1 + + After this routine executes, Z80 addresses 8000-FFFFh now correspond + to 68000 addresses C00000-C07FFFh. + + In my own tests, I've been unable to do the following: + + - Read banked 68000 RAM. (returns FFh) + - Find result of partial writes to the bank address register. + - Have the Z80 read A00000-A0FFFF through the banked memory area. + (locks up the machine) + + Steve Snake informed me that reading 68000 RAM is possible, but is not + a recommended practice by Sega. Perhaps only some models of the Genesis + allow for it. + + 2.4) Interrupts + + The Z80 runs in interrupt mode 1, where an interrupt causes a RST 38h. + However, interrupt mode 0 can be used as well, since FFh will be read + off the bus. + + The Z80 will recieve an IRQ from the VDP on scanline E0h. This happens + once per frame, every frame, regardless of frame interrupts being + disabled by the 68000. + + If the Z80 has interrupts disabled when the frame interrupt is supposed + to occur, it will be missed, rather than made pending. + + There is no way to trigger an NMI unless the Genesis has been switched + into Mark 3 compatability mode, and this only means the NMI line is + mapped to the cartridge port, it's not controllable through software. + + 3.0) Input and Output + + The Genesis has three general purpose I/O ports. Devices like gamepads, + modems, light guns, etc. can be used with them. + + Here's a read-out of the I/O registers in their default state. Each + one can be read at an even address (e.g. A1000Dh == A1000Ch) as well. + + A10001h = A0 Version register + + A10003h = 7F Data register for port A + A10005h = 7F Data register for port B + A10007h = 7F Data register for port C + + A10009h = 00 Ctrl register for port A + A1000Bh = 00 Ctrl register for port B + A1000Dh = 00 Ctrl register for port C + + A1000Fh = FF TxData register for port A + A10011h = 00 RxData register for port A + A10013h = 00 S-Ctrl register for port A + + A10015h = FF TxData register for port B + A10017h = 00 RxData register for port B + A10019h = 00 S-Ctrl register for port B + + A1001Bh = FF TxData register for port C + A1001Dh = 00 RxData register for port C + A1001Fh = 00 S-Ctrl register for port C + + Bit 7 of the Data registers can be read or written. + Any bit that is set as an input will return '1'. + Any bit that is set as an output will return the value last written. + + Bits 7-0 of the Ctrl registers can be read or written. + + Bits 7-0 of the TxData registers can be read or written. + + The RxData register will always return zero. + + Bits 7-4 of the S-Ctrl registers can be read or written. + + 3.1) Programming I/O ports + + In the context of this description, I'll assume the device plugged in is a + gamepad. However, other periperhals like multi-taps, modems, mice, light + guns, etc, exist. + + Here's a pin-out of the connector: + + Pin 1 - UP + Pin 2 - DOWN + Pin 3 - LEFT + Pin 4 - RIGHT + Pin 5 - Vcc + Pin 6 - TL + Pin 7 - TH + Pin 8 - GND + Pin 9 - TR + + Each I/O port has several associated registers. I'll only cover the + data and control registers, as the others are used for serial and + parallel communication. + + The data register corresponds to the I/O port pins like so: + + Bit 7 - (Not connected) + Bit 6 - TH + Bit 5 - TL + Bit 4 - TR + Bit 3 - RIGHT + Bit 2 - LEFT + Bit 1 - DOWN + Bit 0 - UP + + A '0' means a button has been pressed, and '1' means a button has been + released. + + Bit 7 isn't connected to any pin on the I/O port. It will latch a value + written to it, as shown: + + move.b $A10003, d0 ; D0 = $7F + move.b #$80, $A10003 ; Bit 7 = 1 + move.b $A10003, d0 ; D0 = $FF + move.b #$00, $A10003 ; Bit 7 = 0 + move.b $A10003, d0 ; D0 = $7F + + Bits 6-0 of the control register define what bits of the data register + are inputs or outputs. Gamepads use TH as an output and the remaining + pins as input, so a value of $40 would be written to the control register. + + 3.2) Gamepad specifics + + A gamepad maps the directional pad to the pins mentioned earlier + (left, right, up, down), and multiplexes the four buttons (A, B, C, Start) + through the TL and TR pins. + + The TH pin controls which pairs of buttons (either A, Start or C, B) are + output through TL and TR by the multiplexer chip. + + In order to read all the buttons, A program will set TH = 1, read the data + port, set TH = 0, and read the port again. The data returned is as follows: + + TH = 0 : ?0SA00DU + TH = 1 : ?1CBRLDU + + ? = Whatever was last written to bit 7. + S = Start + A = Button A + B = Button B + C = Button C + U = Up + D = Down + L = Left + R = Right + + A 6-button gamepad allows the extra buttons to be read based on how + many times TH is switched from 1 to 0 (and not 0 to 1). Observe the + following sequence: + + TH = 1 : ?1CBRLDU 3-button pad return value + TH = 0 : ?0SA00DU 3-button pad return value + TH = 1 : ?1CBRLDU 3-button pad return value + TH = 0 : ?0SA0000 D3-0 are forced to '0' + TH = 1 : ?1CBMXYZ Extra buttons returned in D3-0 + TH = 0 : ?0SA1111 D3-0 are forced to '1' + + M = Mode + X = Button X + Y = Button Y + Z = Button Z + + From this point on, the standard 3-button pad values will be returned + if any further TH transitions are done. + + If TH isn't modified in about 8192 (probably less than that) 68000 CPU + cycles, a 'time-out' will occur and the sequence to read 6-button values + can be done again. Games usually poll the gamepad once per frame, + which is always enough for the time-out to occur. + + I believe checking if D3-D0 are all set or clear (as shown in the list + above) would be another method to verify if 6-button or 3-button pad data + was being returned. + + Some games may access the gamepad in a way that causes 6-button values + to be returned when 3-button values are expected. To get around this, + the MODE button can be held down when powering-up the console, and + the 6-button gamepad will respond like a 3-button one. + + 4.) Miscellaneous + + The following are miscellaneous topics. + + 4.1) EEPROM + + Some cartridges use a Xicor X24C01 EEPROM chip. The chip is programmed + in a serial fashion (it has only two wires), and has 128 8-bit bytes + of storage. + + Games using EEPROM have the backup data string at offset $1B0 in the + cartridge header area formatted like so: + + 0001B0: 52 41 E8 40 00 20 00 01 00 20 00 01 + + The Sega manual describes how the above data should be interpreted. + In this case, it corresponds to a device mapped to odd memory addresses, + occupying the byte at $200001. + + The only games I know of which use an EEPROM chip are: + + - Wonderboy 3 / Monster World IV + - Rockman Megaworld + - Megaman: The Wily Wars + + 4.2) Virtua Racing + + The Virtua Racing cartridge has 2MB ROM, 128K RAM, and a custom DSP chip + called the 'Sega Virtua Processor' (SVP), which is manufactured by Sega. + To the best of my knowledge, the SVP chip has internal ROM and possibly + internal RAM. + + The main purpose of the SVP is to render polygons as 8x8 patterns, which + the game program transfers to VRAM from the 128K RAM area using DMA. + + The VR cartridge has the following memory map: + + 000000-1FFFFFh : Program ROM (2MB) + 200000-2FFFFFh : Unused + 300000-31FFFFh : On-cart RAM (128K) + 320000-3FFFFFh : (?) + 390000-39FFFFh : (?) + 3A0000-3AFFFFh : (?) + + The SVP chip has registers mapped in the I/O space: + + A15000.w - Can read and write commands + A15005.b - Reading bit 0 acts like a status flag (SVP busy?) + A15006.w - Unknown ($0000, $0001, $000A written) + A15008.w - Unknown ($0000, $0001, $0000 written) + + Commands are two bytes in size, and are read and written to A15000h. + + FFFFh - Command reset (?) (done before any access) + 'SV' - Command init (?) (written before SVP communication) + 'OK' - Command OK (?) (written after 'SV') + 'Tx' - Where 'x' equals the following value based on the command + selected in the test menu: + 0 - "DSP ROM RD" and + "DSP RAM OVER WRITE" + 1 - "DSP DRAM R/W" + 2 - "DSP IRAM R/W" + 4 - "DSP POINTER" + + To emulate the SVP chip, somebody needs to figure out how to dump the + internal ROM (the test menu shows that it has a DSP ROM reading option, + perhaps sending a certain command to the SVP makes it map it's internal + ROM within the $300000-$3FFFFF area) and figure out how the DSP works. + + All of the above information came from physically examining a VR cartridge, + and from disassembling the test menu code. (found at $1B000 for those + of you who are interested) + + 4.3) Phantasy Star 4 + + Phantasy Star 4 is a 24 megabit game with 16k of battery backed RAM + mapped to $200001-$203FFF. (odd addresses used) It has ROM in the same + area where the RAM is. I've observed that the game will always write + $01 to $A130F1 before accessing the RAM, and then write $00 when + done. It could be that bit 0 of $A130F1 controls ROM/RAM banking at + that location. + + Jeff Quinn has tested this and confirmed it to work, and also reported + an area of the game where supporting banked SRAM is important; when + your characters encounter a GEROTLUX below the town of Tyler on Dezolis, + the game will try to access the ROM data that is obscured by SRAM. + + 4.4) Other topics + + - The 68000 RESET instruction has no effect. + + - If the VDP is not accessed often enough, it will (appear) to lock up. + I'm not sure what the cause is, but any control port access is enough + to keep it going. Maybe some of the internal VDP memory is composed + of DRAM cells that lose their data after a while. This happens in + the Mark III compatability mode as well as mode 4 and mode 5. + + - The status of the YM2612 can be read at any of it's four addresses. + Since only address zero is documented as valid, it could be that the + other addresses may return an incorrect result in some situations. + + - The PSG is compatible with the Texas Instruments SN76489. It is actually + on the same physical chip as the VDP, and it's output comes directly + out of the VDP to be mixed with the YM2612. Sega did the same thing + with the System C2 (possibly System 18) and SMS VDPs as well. + + Can anyone contribute some information about the Genesis security + and operating system ROM features? I know of a few: + + - Games must write the text 'SEGA' to A14000h if the lower four + bits of the version register return 01h. + - Writing 01h to A14101h disables the OS ROM and swaps in the cart ROM. + - The OS ROM checks for 'SEGA' or ' SEGA' at offset 100h in the cart ROM. + + Here's a list of consoles that support the Mark III compatability mode. + + - Sega Mega Drive + - Sega Mega Drive 2 + - Sega Genesis + - Sega Genesis 2 + + And ones that do not: + + - Genesis 3 (Majesco) + + If anyone has tested this with the Nomad, CDX, MegaJet, etc., please + let me know. + + 5.) Credits + + I would like to thank the following people for contributing information: + + Bart Trzynadlowski, Christian Schiller, Flavio Morsoletto, Jeff Quinn, + Mike Gordon, Naflign, Omar Cornut, Steve Snake, and Tim Meekins. + + Contributors to the Sega Programming FAQ. + Gringoz for the Genesis schematics. + + 6.) Disclaimer + + If you use any information from this document, please credit me + (Charles MacDonald) and optionally provide a link to my webpage + (http://cgfm2.emuviews.com/) so interested parties can access it. + + The credit text should be present in the accompanying documentation of + whatever project which used the information, or even in the program + itself (e.g. an about box) + + Regarding distribution, you cannot put this document on another + website, nor link directly to it. + diff --git a/ genplus-gx/source/docs/genvdp.txt b/ genplus-gx/source/docs/genvdp.txt new file mode 100644 index 0000000..48f91a3 --- /dev/null +++ b/ genplus-gx/source/docs/genvdp.txt @@ -0,0 +1,1654 @@ + + Sega Genesis VDP documentation + Version 1.5f (08/10/00) + + by Charles MacDonald + WWW: http://cgfm2.emuviews.com + + Unpublished work Copyright 2000 Charles MacDonald + + + This document is very preliminary and subject to change. + + + Changes from the last version: + + (v1.5f) + - Minor update on 68k -> VDP DMA transfers. (section 11) + (v1.5e) + - More information on VDP register sets. + - Added preliminary section numbers and table of contents. + - Revised todo list. + (v1.5d) + - Fixed sprite size byte layout. + - Listed a few games that overlap low and high priority sprites. + - Mentioned game problems regarding data port access. + (v1.5c) + - Verified DMA transfer wrapping. + - Fixed MSB/LSB mixup in DMA fill description. + - Added zero length DMA behavior. + - Mentioned results of writing during fills. + - Added VRAM address register wrapping. + (v1.5) + - Added shadow / hilight info. + - Added HV counter information. + - Added notes on odd byte access. + - Expanded register list. + - Rewrote DMA section. + - Did a little work on priority and patterns. + (v1.4) + - Described 8-bit port writes. + - Expanded VDP register programming section. + - Rewrote description of external interrupts. + - Removed 8-bit VRAM fill section. + - Added VDP pinout. + - Changed introduction and overview sections. + - Removed display size list. + - Added interrupts description. + (v1.3) + - Fixed sprite limitation count. + - Added details on blanking flags in status register. + - Added status register section. + - Added notes on VSRAM/CRAM fills. + - Added scrolling section. + - Added description of backdrop color register. + - Added description of mode set #3 register. + (v1.2) + - Completed most of the DMA section. + - Added sprite masking information. + - Verified bits 5-0 of reg 23 have no effect on VRAM fills. + - Fixed CD4 description. + (v1.1) + - Verified CD4 does not affect a 68K->VDP DMA transfer. + - Verified code and address registers retain their state after half of + a command word is written to the control port. + - Added display mode list. + - Added specific VDP RAM type info. + - Added sprite section. + - Verified register writes reset the pending flag. + - Added VDP port map. + - Verified byteswap behavior for VRAM writes. + - Verified no illegal codes allowed for CRAM writes. + - Verified A15-A7 of VSRAM address is ignored. + - Verified A0 of CRAM address is ignored. + - Verified A0 of VSRAM address is ignored. + - Verified writing to 'extra' VSRAM addresses has no effect. + - Verified ignored command word bits. + - Finalized info on palette control bit. + - Started basic control port decoding section. + - Added register #0, #1 descriptions. + - Mentioned plane A clipping in window register descriptions. + (v1.0) + - Initial draft. + + Disclaimer: + + If you use any information from this document, please credit me + (Charles MacDonald) and optionally provide a link to my webpage + (http://cgfm2.emuviews.com/) so interested parties can access it. + + The credit text should be present in the accompanying documentation of + whatever project which used the information, or even in the program + itself (e.g. an about box) + + ---------------------------------------------------------------------------- + Table of Contents + ---------------------------------------------------------------------------- + + 0.) Introduction + 1.) Overview + 2.) Display Modes + 3.) VDP port map + 4.) Interrupts + 5.) HV Counter + 6.) Status Register + 7.) VDP ports + 8.) VRAM + 9.) CRAM + 10.) VSRAM + 11.) DMA + 12.) Patterns + 13.) Background Layers + 14.) Priority + 15.) Sprites + 16.) Shadow / Hilight mode + 17.) VDP registers + 18.) VDP Pinout + + + ---------------------------------------------------------------------------- + 0.) Introduction + ---------------------------------------------------------------------------- + + This is a compilation of my notes on the Sega Genesis video display + processor. + + I wanted to write this because the existing information on the VDP is + very inadequate. Many of the subtle quirks and bugs are not explained. + + I'd like to thank the following people in alphabetical order for + providing information and being helpful: + + Bart Trzynadlowski + Christian Schiller + Flavio Morsoletto + Omar Cornut + Stephane Dallongeville + + Also thanks to Sardu and Steve Snake for genecyst and KGen98, which + were both used for devloping test programs. + + I am interested in finding somebody who has a Sega Genesis copier and + would be willing to run some test programs and report the results. + + ---------------------------------------------------------------------------- + 1.) Overview + ---------------------------------------------------------------------------- + + The Genesis VDP is derived from the Master System VDP, which in turn + was derived from the Texas Instruments TMS9918. As a result, the VDP is + programmed much like it's earlier counterparts. + + Interestingly enough, none of the Sega produced VDP's are similar to the + later VDP models made by Yamaha, which were also based upon the TMS9918. + + ---------------------------------------------------------------------------- + 2.) Display Modes + ---------------------------------------------------------------------------- + + To clarify naming conventions, here is a list of display modes used by + the various video chips mentioned: + + Mode 0 - TMS9918 specific + Mode 1 - TMS9918 specific + Mode 2 - TMS9918 specific + Mode 3 - TMS9918 specific + Mode 4 - SMS mode + Mode 5 - Genesis mode + + Supported mode list: + + TMS9918 - Modes 0, 1, 2, 3 + SMS - Modes 0, 1, 2, 3, 4 + Genesis - Modes 4, 5 (possibly 0 and others as well) + + If anybody has some information about how the Game Gear would fit into + this list, let me know. I assume it's identical to the SMS, but I don't + know about the TMS9918 compatability. (if any) + + ---------------------------------------------------------------------------- + 3.) VDP port map + ---------------------------------------------------------------------------- + + The VDP occupies addresses C00000h to C0001Fh. + + C00000h - Data port (8=r/w, 16=r/w) + C00002h - Data port (mirror) + C00004h - Control port (8=r/w, 16=r/w) + C00006h - Control port (mirror) + C00008h - HV counter (8/16=r/o) + C0000Ah - HV counter (mirror) + C0000Ch - HV counter (mirror) + C0000Eh - HV counter (mirror) + C00011h - SN76489 PSG (8=w/o) + C00013h - SN76489 PSG (mirror) + C00015h - SN76489 PSG (mirror) + C00017h - SN76489 PSG (mirror) + + ---------------------------------------------------------------------------- + 4.) Interrupts + ---------------------------------------------------------------------------- + + The VDP generates all interrupts for the 68000. The only hardware + interrupts available are 2, 4, and 6. + + Vertical interrupts + ------------------- + + If bit 5 (IE0) of register #1 is set, then a level 6 interrupt will occur + when the V counter is at line E0h, roughly at H counter cycle 08h. At this + point in time, the vertical interrupt occurance flag (bit 7) will be set + in the status register. + + Line interrupts + --------------- + + The VDP has a counter that is decremented on every line. When the counter + has expired, and if bit 4 (IE1) of register #0 is set, then a level 4 + interrupt will occur. + + The counter is loaded with the contents of register #10 in the following + situations: + + - Line zero of the frame. + - When the counter has expired. + - Lines 225 through 261. (note that line 224 is not included) + + The counter is *not* loaded when register #10 is written to. + + Note that line interrupts are processed *before* vertical interrupts + within a scanline. If you trigger a line interrupt to occur on line E0h, + then the level 4 line interrupt will be taken by the 68000, not the + level 6 vertical interrupt. + + External interrupts + ------------------- + + Pin 7 of each of the three I/O ports is called the TH pin. It is connected + to the VDP. When the state of TH is changed, the following events happen: + + - If bit 7 of the control register for the associated I/O port is set, + and bit 3 of register #11 (IE2) is set, then the VDP will generate + a level 2 interrupt. + + - If bit 1 of VDP register #0 is set, the contents of the HV counter will + be latched. + + A common use for these features are in a light gun game. The light gun + can change the state of TH, which will freeze the HV counter, and then + the level 2 interrupt subroutine can read the HV counter and also + communicate with the light gun to get information like what buttons + were pressed. This is pretty much how Sega's 'Menacer' device works. + The Konami 'Justifier' light gun works on similar principles. + + I don't know if the HV counter resumes normal operation after the first + read, or if the HV counter latch bit has to be cleared and set again. + + Some games will enable the HV counter latch and never read the HV counter, + let alone use any special peripherals. (Shadow of the Beast II) + + You cannot force an external interrupt by changing the state of TH + through software. (e.g. in the normal sequence of reading the gamepad, + TH is set and cleared - this does not cause an interrupt if interrupts + are enabled) + + The data direction for TH (which corresponds to bit 6 of the data and + control registers) must be configured as an input for a peripheral + to cause an interrupt. + + ---------------------------------------------------------------------------- + 5.) HV Counter + ---------------------------------------------------------------------------- + + The HV counter returns the vertical and horizontal position of the + television's raster beam. + + Reading the HV counter will return the following data: + + VC7 VC6 VC5 VC4 VC3 VC2 VC1 VC0 (D15-D08) + HC8 HC7 HC6 HC5 HC4 HC3 HC2 HC1 (D07-D00) + + VCx = Vertical position in lines. + HCx = Horizontal position in pixels. + + According to the manual, VC0 is replaced with VC8 when in interlace mode 2. + + For 8-bit reads, the even byte (e.g. C00008h) returns the V counter, and + the odd byte (e.g. C00009h) returns the H counter. + + The V counter counts up from 00h to EAh, then it jumps back to E5h and + continues counting up to FFh. This allows it to cover the entire 262 line + display. + + The H counter counts up from 00h to E9h, then it jumps back to 93h and + continues counting up to FFh. This allows it to cover an entire 342 pixel + line. + + The H counter description is based upon known information about the SMS + VDP's H counter. The SMS has a 256x192 display, and each line consists of + 342 pixels. (that includes blanking, retrace, etc.) The description + *could* be accurate for the Genesis' 32-cell display mode. This is not + the case for the 40-cell display, where I would assume the H counter jumps + back farther at a later point in the count-up. + + In terms of emulation, I have found that turning the elapsed 68000 cycle + count into a pixel offset for the current scan line seems to provide a + reasonable return value for the H counter. However, I am quite positive + a single scanline consists of more pixels than just 256 or 320, and + in addition the 'jump-back' described above is not taken into account. + In all honesty this is a hack, not a solution. + + I would appreciate any additional information on the HV counter. + + ---------------------------------------------------------------------------- + 6.) Status Register + ---------------------------------------------------------------------------- + + Reading the control port returns a 16-bit word that allows you to observe + various states of the VDP and physical display. + + d15 - Always 0 + d14 - Always 0 + d13 - Always 1 + d12 - Always 1 + d11 - Always 0 + d10 - Always 1 + d9 - FIFO Empty + d8 - FIFO Full + d7 - Vertical interrupt pending + d6 - Sprite overflow on current scan line + d5 - Sprite collision + d4 - Odd frame + d3 - Vertical blanking + d2 - Horizontal blanking + d1 - DMA in progress + d0 - PAL mode flag + + Presumably bit 0 is set when the system display is PAL; however this same + information can be read from the version register (part of the I/O + register group - not the VDP), so maybe this bit reflects the state of + having a 240-line display enabled. + + Bit 1 is set for the duration of a DMA operation. This is only useful for + fills and copies, since the 68000 is frozen during 68k -> VDP transfers. + + Bit 2 returns the real-time status of the horizontal blanking signal. + It is set at H counter cycle E4h and cleared at H counter cycle 08h. + + Bit 3 returns the real-time status of the vertical blanking signal. + It is set on line E0h, at H counter cycle AAh, and cleared on line FFh, + at H counter cycle AAh. + + (Note: For both blanking flag descriptions, the H counter values are + very likely different for 32-cell and interlaced displays; they were + taken from a test with a 40-cell screen.) + + Bit 4 is set when the display is interlaced, and in the odd frame, + otherwise it is cleared in the even frame. This applies to both + interlace modes. + + Bit 5 is set when any sprites have non-transparent pixels overlapping one + another. This may hold true for sprites outside of the display area too. + This bit is most likely cleared at the end of the frame. + + Bit 6 is set when too many sprites are on the current scan line, meaning + when the VDP parses the 21st sprite in 40-cell mode or the 17th sprite in + 32-cell mode from the sprite list. + This bit is most likely cleared at the end of the frame. + + Bit 7 is set when a vertical interrupt occurs. This happens at line E0h, + roughly after H counter cycle 08h. I do not know under what conditions + it is cleared, presumably at the end of the frame. Reading the control + port does not clear this bit. (this could be incorrect) + + Bit 8 and 9 (FULL and EMPTY flags, respectively) are related to the FIFO; + here's what Flavio Morsoletto has to say about their use: + + "The FIFO can hold up to four 16-bit words while the VDP's busy + parsing data from VRAM. Once the 68K has written the fourth word, + FULL is raised. If the processor attempts to write one more time, it + will be frozen (/DTACK high) until the FIFO unit manages to deliver + the first stacked word to its rightful owner. EMPTY only goes 1 when + there is nothing on the stack. The intermediate state is signaled by + both of them showing 0." + + This situation only occurs during the active display period, as the + data port can be written to as many times as needed during blanking. + + I've noticed most emulators keep the EMPTY flag set, so it appears as + if the FIFO was always empty instead of being in the neutral state. This + is probably for games that would normally check and find the FIFO in a + neutral state, then write data and expect to poll the FULL flag afterwards. + + ---------------------------------------------------------------------------- + 7.) VDP ports + ---------------------------------------------------------------------------- + + The VDP is programmed entirely through the control and data ports. + Data written to the control port is formatted, so the VDP will know + how to interpret the data it recieves. + + You can divide control port data into two categories; 16-bit register sets + and 32-bit command words. + + Programming VDP registers + ------------------------- + + Any one of the 23 VDP registers can be programmed by writing 16 bits of + data to the control port. The data written has the following format: + + 1 0 ? R04 R03 R02 R01 R00 (D15-D8) + D07 D06 D05 D04 D03 D02 D01 D00 (D7-D0) + + Rxx = VDP register select (00-1F) + Dxx = VDP register data (00-FF) + + Writing to non-existant VDP registers has no effect. + + Bits 15 and 14 must be set to 1 and 0 respectively, otherwise the write + will be treated as the first half of a command word. The state of bit 13 + does not matter. + + Here's an example of programming one register: + + ; Set border color to palette $3, index $F + move.w #$873F, $00C00004 + + Since the 68000 treats 32-bit memory access as two 16-bit operations, + you can program two registers at once: + + ; Set split point bits for both window registers + move.w #$91809280, $00C00004 + + Accessing VDP RAM + ----------------- + + You can access VRAM, CRAM, or VSRAM by writing a 32-bit command word to + the control port. The data written has the following format: + + CD1 CD0 A13 A12 A11 A10 A09 A08 (D31-D24) + A07 A06 A05 A04 A03 A02 A01 A00 (D23-D16) + ? ? ? ? ? ? ? ? (D15-D8) + CD5 CD4 CD3 CD2 ? ? A15 A14 (D7-D0) + + CDx = VDP code (0-3F) + Axx = VDP address (00-FFFF) + + The state of D15 through D8, D3, and D2 are ignored. + + The VDP has an address and code register. They are used in conjunction to + handle data port accesses. The address register provides an offset into + VDP RAM to write or read data from. The code register specifies if + data port accesses will be reads or writes, and the kind of VDP RAM + to perform these operations on. + + In order for the VDP to know if the first or second 16-bit half of the + command word has been written to the control port, it maintains an internal + write-pending flag. This flag is updated when these conditions are met: + + - It is set when the first half of the command word is written. + - It is cleared when the second half of the command word is written. + - It is cleared when the data port is written to or read from. + - It is cleared when the control port is read. + + It is perfectly valid to write the first half of the command word only. + In this case, _only_ A13-A00 and CD1-CD0 are updated to reflect the new + values, while the remaining address and code bits _retain_ their former + value. + + You cannot write to a VDP register if the pending flag is set to one, + since the VDP is expecting the 2nd half of a command word. + + Writing to a VDP register will clear the code register. Games that rely + on this are Golden Axe II (will display missing SEGA logo) and Sonic 3D. + (will show intro movie in wrong colors for a few frames) It is not known + if the address register is cleared as well, but the TMS9918 manual + indicates that this is so, perhaps it applies to the Genesis as well. + + Here is a table of code register settings: + + Bits CD3-CD0 + 0000b : VRAM read + 0001b : VRAM write + 0011b : CRAM write + 0100b : VSRAM read + 0101b : VSRAM write + 1000b : CRAM read + + You cannot write data after setting up a read operation, or read data + after setting up a write operation. The write or read is ignored. + + CD4 is only set for the the VRAM copy DMA mode. + For data port accesses and 68k to VDP DMA, the state of CD4 is ignored. + + Setting CD5 will trigger a DMA operation. + + 8-bit port access + ----------------- + + Doing an 8-bit write to the control or data port is interpreted by + the VDP as a 16-bit word, with the data written used for both halfs + of the word. + + For instance, the following code writes 87h to VDP register #7: + + ; VDP sees data as 8787h + move.b #$87, $00C00004 + + This also applies to the data port. The following code sets CRAM entry + zero to pink: + + ; VDP sees data as 0E0Eh + move.l #$C0000000, $00C00004 + move.b #$0E, $00C00000 + + It's important to realize that a distinction between 8-bit and 16-bit VRAM + fills do not exist. There is only one type of fill, and depending on how + you write to the data port will determine the kind of data used in the fill. + + Odd addresses (e.g. C00007h, C00001h) function identically to even addresses + in the case of 8-bit writes. For instance, writing data to anywhere within + C00004h-C00007h would go to the control port. + + Miscellaneous + ------------- + + I've found that some games will write VDP register data to the data port, + after the code and address registers have been set to zero. I've confirmed + that this is simply a bug on the programmer's behalf, you cannot program + the VDP registers in this way. + + Games that do this include Alien Soldier and Eternal Champions. + + Some games also set up VRAM reads and try to write to VRAM; this is + also pointless as data written after a VRAM read command is issued + is ignored by the VDP. The unlicensed version of Populous does + this, along with Golden Axe II. + + ---------------------------------------------------------------------------- + 8.) VRAM + ---------------------------------------------------------------------------- + + The VDP is connected to 64K of video RAM. It is accessed as 65535 8-bit + bytes or 32768 16-bit words through the data port. + + VRAM is multipurpose; it can store pattern data, horizontal scroll data, + sprite tables, and background name tables. + + When writing 16-bit data to VRAM, having address bit 0 set will swap + the upper and lower bytes of the data written. + + The address register wraps past address FFFFh. + + ---------------------------------------------------------------------------- + 9.) CRAM + ---------------------------------------------------------------------------- + + The VDP has 64x9 bits of on-chip color RAM. It is accessed as 64 16-bit + words through the data port. Each word has the following format: + + ----bbb-ggg-rrr- + + r = Red component (0-7) + g = Green component (0-7) + b = Blue component (0-7) + + This allows for a total of 512 possible colors, with 64 colors stored + in CRAM at any given time. + + When accessing CRAM, only address bits 6 through 1 are valid. The high-order + address bits are ignored. Since CRAM is word-wide, address bit zero has + no effect. + + The address register wraps past address 7Fh. + + ---------------------------------------------------------------------------- + 10.) VSRAM + ---------------------------------------------------------------------------- + + The VDP has 40x10 bits of on-chip vertical scroll RAM. It is accessed as + 40 16-bit words through the data port. Each word has the following format: + + ------yyyyyyyyyy + + y = Vertical scroll factor (0-3FFh) + + When accessing VSRAM, only address bits 6 through 1 are valid. + The high-order address bits are ignored. Since VSRAM is word-wide, address + bit zero has no effect. + + Even though there are 40 words of VSRAM, the address register will wrap + when it passes 7Fh. Writes to the addresses beyond 50h are ignored. + + ---------------------------------------------------------------------------- + 11.) DMA + ---------------------------------------------------------------------------- + + The VDP can be programmed to move data into, copy, and fill sections of + VDP RAM, meaning VRAM, CRAM, and VSRAM. These functions are referred to + as Direct Memory Access. (DMA) + + Overview + -------- + + Bits 7 and 6 of register #23 select the type of DMA operation: + + D7 D6 + 0 ? : 68K -> VDP RAM transfer (D6 is bit 24 of source address) + 1 0 : VRAM fill + 1 1 : VRAM copy + + Bit 4 of register #1 will enable DMA operations when set. + + Some games will attempt to do DMA when it is disabled, including Phelios + and Rocket Knight Adventures. + + When doing 68K -> VDP RAM transfers, the 68000 is frozen. For VRAM fills + and copies, the 68000 runs normally, but you can only read the control + port, HV counter, and write to the PSG register. + + Writing to the control or data port during a VRAM fill seems to corrupt + the VDP registers and VRAM. + + When the length field is set to zero, the length is treated as FFFFh. + + 68000 to VDP RAM + ---------------- + + This is used to transfer data out of the 68000's address space into VRAM, + CRAM, or VSRAM. + + Registers 19, 20, specify how many 16-bit words to transfer: + + #19: L07 L06 L05 L04 L03 L02 L01 L00 + #20: L15 L14 L13 L12 L11 L10 L08 L08 + + Note that a length of 7FFFh equals FFFFh bytes transferred, and a length + of FFFFh = 1FFFF bytes transferred. + + Registers 21, 22, 23 specify the source address on the 68000 side: + + #21: S08 S07 S06 S05 S04 S03 S02 S01 + #22: S16 S15 S14 S13 S12 S11 S10 S09 + #23: 0 S23 S22 S21 S20 S19 S18 S17 + + If the source address goes past FFFFFFh, it wraps to FF0000h. + (Actually, it probably wraps at E00000h, but there's no way to tell as + the two addresses are functionally equivelant) + + When doing a transfer to CRAM, the operation is aborted once the address + register is larger than 7Fh. The only known game that requires this is + Batman & Robin, which will have palette corruption in levels 1 and 3 + otherwise. This rule may possibly apply to VSRAM transfers as well. + + A transfer is started when the following command word is written: + + CD1 CD0 A13 A12 A11 A10 A09 A08 (D31-D24) + A07 A06 A05 A04 A03 A02 A01 A00 (D23-D16) + ? ? ? ? ? ? ? ? (D15-D8) + 1 0 0 CD2 ? ? A15 A14 (D7-D0) + + CD2-CD0 specify the type of VDP RAM to write to: + + 001b - VRAM + 011b - CRAM + 101b - VSRAM + + The following events occur after the command word is written: + + - 68000 is frozen. + - VDP reads a word from source address. + - Source address is incremented by 2. + - VDP writes word to VRAM, CRAM, or VSRAM. + (For VRAM, the data is byteswapped if the address register has bit 0 set) + - Address register is incremented by the value in register #15. + - Repeat until length counter has expired. + - 68000 resumes operation. + + When a transfer is done out of the ROM area ($000000-3FFFFF), the machine + will lock up unless the write that triggers the DMA operation is done + using RAM. + + Usually this means putting the command word or the latter half of the + command word in RAM and moving that into the control port, putting + the command word on the stack and moving that into the control port, + or having the instruction that moves the command word into the control + port execute out of RAM. + + VRAM fill + --------- + + VRAM fills are used to repeatedly write a given data value to multiple + sequential addresses in VRAM. + + Registers 19, 20, specify how many 8-bit bytes to fill: + + #19: L07 L06 L05 L04 L03 L02 L01 L00 + #20: L15 L14 L13 L12 L11 L10 L08 L08 + + The address bits in registers 21, 22, 23 are ignored: + + #21: ? ? ? ? ? ? ? ? + #22: ? ? ? ? ? ? ? ? + #23: 1 0 ? ? ? ? ? ? + + A VRAM fill is started when the following command word is written: + + 0 1 A13 A12 A11 A10 A09 A08 (D31-D24) + A07 A06 A05 A04 A03 A02 A01 A00 (D23-D16) + ? ? ? ? ? ? ? ? (D15-D8) + 1 0 0 0 ? ? A15 A14 (D7-D0) + + Any write to the data port will then start a VRAM fill. The LSB of the + data is written to the address specified, then the MSB is written to + the adjacent address. The address register is incremented by the value + in VDP register 15, and the upper 8 bits are written again to the next + adjacent address, and so on. + + Here is some "C" pseudocode to illustrate a VRAM fill: + + void vram_fill(int data) + { + /* Write lower byte to address specified */ + vram[address] = (data >> 0) & 0xFF; + + do { + /* Write upper byte to adjacent address */ + vram[address ^ 1] = (data >> 8) & 0xFF; + + /* Increment address register */ + address += vdp_reg[15]; + } while(--length) + } + + Games that require accurate VRAM fill emulation include Thunder Force IV, + Contra Hard Corps, Revenge of Shinobi, Taiga Drama, and Sword of Vermillion. + + VRAM copy + --------- + + VRAM copies are used to copy blocks of VRAM data. + + Registers 19, 20, specify how many 8-bit bytes to copy: + + #19: L07 L06 L05 L04 L03 L02 L01 L00 + #20: L15 L14 L13 L12 L11 L10 L08 L08 + + The address bits in register 23 are ignored. + Registers 21, 22 specify the source address in VRAM: + + #21: S07 S06 S05 S04 S03 S02 S01 S00 + #22: S15 S14 S13 S12 S11 S10 S09 S08 + #23: 1 1 ? ? ? ? ? ? + + A VRAM copy is started when the following command word is written: + + 0 0 A13 A12 A11 A10 A09 A08 (D31-D24) + A07 A06 A05 A04 A03 A02 A01 A00 (D23-D16) + ? ? ? ? ? ? ? ? (D15-D8) + 1 1 0 0 ? ? A15 A14 (D7-D0) + + The VDP will read a byte from the source address which is then incremented + by one. The data will then be written to the destination address, which + is incremented by register #15. + + Games that use VRAM copies include Aleste, Bad Omen, and Viewpoint. + + Transfer capacity + ----------------- + + The VDP can access memory a certain number of times on each line of the + display. This is severely limited during the active display period, since + the VDP also needs to update the screen, leaving less memory accesses + left for DMA. + + According to the manual, here's a table that describes the transfer + rates of each of the three DMA types: + + DMA Mode Width Display Transfer Count + ----------------------------------------------------- + 68K > VDP 32-cell Active 16 + Blanking 167 + 40-cell Active 18 + Blanking 205 + VRAM Fill 32-cell Active 15 + Blanking 166 + 40-cell Active 17 + Blanking 204 + VRAM Copy 32-cell Active 8 + Blanking 83 + 40-cell Active 9 + Blanking 102 + + 'Active' is the active display period, 'Blanking' is either the vertical + blanking period or when the display is forcibly blanked via register #1. + + The above transfer counts are all in bytes, unless the destination is + CRAM or VSRAM for a 68K > VDP transfer, in which case it is in words. + + Miscellaneous + ------------- + + I don't know if the source address register and length counter are actually + updated during a DMA operation. I doubt it, but in theory you could have + a sequence like this: + + move.l #$94109300, $00C00004 ; length = 4k words + move.l #$96009500, $00C00004 + move.l #$97708F02, $00C00004 ; src = E00000h, inc = 02h + move.w #$40000003, $00C00004 ; VRAM write to C000h + ; 8k is transferred to VRAM C000h from RAM E00000h + + move.w #$60000003, $00C00004 ; VRAM write to E000h + ; 8k is transferred to VRAM E000h from RAM E02000h + + You can make VRAM fills affect CRAM or VSRAM by changing the CD2-CD0 bits + to the appropriate RAM type, just like how 68K -> VDP transfers work. + Due to the limited way this was tested, I can't say how exactly the fill + data is written; CRAM and VSRAM are word-wide, while VRAM is byte-wide, + to there's bound to be some differences. I'd assume the results are + the same as normal byte-wide data port access, where both the LSB and + MSB of each word are set to the same 8-bit data written. + + In the case of a VRAM fill, the CD2-CD0 bits are set to the same value + required for a VRAM write. In the same vein, VRAM copies have the code + bits set to the same setting as a VRAM read. Maybe changing the code + register would allow copies within CRAM and VSRAM? Or perhaps the code + bits only select the source address? (Not that a CRAM > VRAM copy is + particularly useful, but there you go.) + + ---------------------------------------------------------------------------- + 12.) Patterns + ---------------------------------------------------------------------------- + + All background and sprite graphics are made up of patterns. A pattern is + an 8x8 or 8x16 (interlace mode 2 only) pixel block that is made up of + fifteen colors. + + Patterns are stored in VRAM. Each pixel is represented by four bits, + meaning there are four bytes (4 bits * 8 pixels = 4 bytes) per line of + the pattern, and 32 or 64 bytes per pattern, depending if the pattern + is 8x8 or 8x16. + + Unlike other VRAM data that is stored in a specific table, patterns can + be placed anywhere. Even in the parts of other tables that aren't being + used, like a name table or sprite attribute table. + + A pixel within a pattern that uses value zero isn't shown. It acts as a + transparency indicator. + + ---------------------------------------------------------------------------- + 13.) Background Layers + ---------------------------------------------------------------------------- + + The VDP manages two background layers, called plane A and plane B. + + Name Tables + ----------- + + There are three tables stored in video RAM that define the layout for + planes A, B, and W. + + Each table is a matrix of 16-bit words. Each word has the following format: + + pccvhnnnnnnnnnnn + + p = Priority flag + c = Palette select + v = Vertical flip + h = Horizontal flip + n = Pattern name + + The pattern name is the upper 11 bits of the physical address of pattern + in video RAM. Bit zero of the name is ignored in interlace mode 2. + + The vertical and horizontal flip flags tell the VDP to draw the pattern + flipped in either direction. + + The palette select allows the pattern to be shown in one of four + 16-color palettes. + + The priority flag is described later. + + The name tables for plane A and B share the same dimensions. The name + table size cannot exceed 8192 bytes, so while a 64x64 or 128x32 name + table is allowed, a size of 128x128 or 64x128 is invalid. + + The name table for plane W is 32x32 in 32-cell mode, and 64x32 in 40-cell + mode. This size is fixed and is entirely dependant on the display width. + + Window + ------ + + The window plane operates differently from plane A or B. It can be thought + of a 'replacement' for plane A which is used under certain conditions. + That said, plane A cannot be displayed in any area where plane W is + located, it is impossible for them to overlap. + + Registers 17 and 18 define an area which the window is restricted to. + + In terms of priority and intensity calculation for shadow / hilight mode, + plane W is treated _exactly_ the same as plane A. + + Horizontal Scrolling + -------------------- + + The horizontal scroll table holds the scroll value for every line of + both planes A and B, that can be positioned anywhere within video RAM. + + Each entry of the scroll table is a 16-bit word. It has the following + format: + + ------xxxxxxxxxx + + x = Horizontal scroll value (0-3FFh) + + Bits D15 through D10 are ignored by the VDP. + + The lower three bits of the scroll value provide a pixel offset into each + column comprised of one pattern. The upper seven bits provide an offset + into each column of the name table (0-127). + + When the scroll value is larger than the width of the playfield, the + display wraps horizontally. + + Scroll values for planes A and B are stored in an interleaved fashion. + Entry #0 of the table is for plane A, entry #1 is for plane B, and this + repeats for the entire length of the table. + + The manual says the scroll table is 960 bytes in size, + and this seems like an accurate figure, considering the scroll table + address bits suggest the table can be 1024 bytes. + + However, I do not know what happens in double-resolution interlace + mode. To provide a scroll entry for both planes on every line, a total + of 1920 bytes would be needed. (480 lines x 2 planes x 2 bytes per line) + + Here is some "C" pseudocode to illustrate how the VDP reads the scroll + table depnding on the settings of bits 0 and 1 of register #11: + + void get_scroll(int line, int *scroll_a, int *scroll_b) + { + switch(vdp_reg[11] & 3) + { + case 0x00: /* Full screen */ + *scroll_a = *(word *)vram[hscb + 0]; + *scroll_b = *(word *)vram[hscb + 2]; + break; + + case 0x01: /* First eight lines */ + *scroll_a = *(word *)vram[hscb + ((line & 7) * 2) + 0]; + *scroll_b = *(word *)vram[hscb + ((line & 7) * 2) + 2]; + break; + + case 0x02: /* Every row */ + *scroll_a = *(word *)vram[hscb + ((line & ~7) * 2) + 0]; + *scroll_b = *(word *)vram[hscb + ((line & ~7) * 2) + 2]; + break; + + case 0x03: /* Every line */ + *scroll_a = *(word *)vram[hscb + (line * 2) + 0]; + *scroll_b = *(word *)vram[hscb + (line * 2) + 2]; + break; + } + } + + A scroll mode setting of 01b is not valid; however the unlicensed version + of Populous uses it. This mode is identical to per-line scrolling, however + the VDP will only read the first sixteen entries in the scroll table for + every line of the display. + + ---------------------------------------------------------------------------- + 14.) Priority + ---------------------------------------------------------------------------- + + The VDP manages a fairly complex system of priorities between the two + background layers and sprites. The basic ordering is: + + + (back) (front) + A > B > C > D > E' > F' > G' + + ' = Denotes high priority + A = Backdrop color + B = Low priority plane B + C = Low priority plane A + D = Low priority sprites + E = High priority plane B + F = High priority plane A + G = High priority sprites + + The sprite priority bit does not affect inter-sprite priority, only the + relation between background data. Low priority sprites *can* overlap high + priority sprites. Games that do this to mask other sprites include + Castlevania Bloodlines, Raiden Trad, and Alien Soldier. + + ---------------------------------------------------------------------------- + 15.) Sprites + ---------------------------------------------------------------------------- + + The Genesis can display a total of eighty 32x32 15-color sprites. + There are of course various restrictions on the display capacity, based + on current configuration of the VDP. + + Sprite Attribute Table + ---------------------- + + All sprite data is stored in a region of VRAM called sprite attribute table. + The table is 640 bytes in size. Each 8-byte entry has the following format: + + Index + 0 : ------yy yyyyyyyy + Index + 2 : ----hhvv + Index + 3 : -lllllll + Index + 4 : pccvhnnn nnnnnnnn + Index + 6 : ------xx xxxxxxxx + + y = Vertical coordinate of sprite + h = Horizontal size in cells (00b=1 cell, 11b=4 cells) + v = Vertical size in cells (00b=1 cell, 11b=4 cells) + l = Link field + p = Priority + c = Color palette + v = Vertical flip + h = Horizontal flip + n = Sprite pattern start index + x = Horizontal coordinate of sprite + + Linking + ------- + + The VDP draws sprites in a front-to-back order, starting with sprite zero. + The 7-bit link field in each list entry is an index to the next entry of + the sprite that will be drawn. If the link field is zero, then no more + sprites will be drawn after the current sprite. Here's an example: + + Sprite #00 has a link field of 2 + Sprite #01 has a link field of 7 + Sprite #02 has a link field of 4 + Sprite #03 has a link field of 0 + Sprite #04 has a link field of 3 + Sprite #05 has a link field of 2 + + In this case, sprites #00, #02, #04, #03 will be drawn, in that order. + + Coordinate System + ----------------- + + Sprites are positioned in a virtual 512x512 space. The display starts at + coordinate 128, 128, and takes up a space equal to the size of the physical + display. (usually 256x224 or 320x224) This system is convenient for + programmers; unwanted sprites can easily be hidden off screen, and sprites + can be shown partially at the top and left screen edges. + + Sprite masking, mode 1 + ---------------------- + + If a sprite has an X coordinate of zero, and has a Y coordinate that + is within range of the display, then all sprites of lower priority + will not be displayed on the lines which the sprite takes up. + + The height of the sprite is determined by the vertical size bits in + the sprite attributes; other factors like horizontal size, pattern data + used, priority bit, and color palette have no effect. + + For instance, an 8x32 sprite at coordinates 0, 128, that was sprite #4 + in the list would stop all sprites onwards for lines zero to 31 from + being shown. However, sprites #0 through #3 could still be displayed + in this area. + + Sprite masking, mode 2 + ---------------------- + + If a sprite has an X coordinate of one, the former rule is invalid. Low + priority sprites will only be masked if a sprite with an X coordinate of + zero _also_ has a sprite with an X coordinate of one on the _same_ line. + + This 'mode' is enabled when the VDP first parses a sprite with an X + coordinate of one. It is reset at the end of the frame. + + To my knowledge, the only game which uses this masking mode is Galaxy + Force II. Because of this, I cannot ensure my description is accurate for + other games which may use it. + + Sprite Drawing Limitations + -------------------------- + + The VDP will stop drawing sprites under the following conditions: + + - The 80th sprite has been drawn in 40-cell mode. + - The 64th sprite has been drawn in 32-cell mode. + - Twenty sprites on the same scanline have been drawn in 40 cell mode. + - Sixteen sprites on the same scanline have been drawn in 32 cell mode. + - 320 pixels worth of sprite data has been drawn on the same scanline + in 40 cell mode. + - 256 pixels worth of sprite data has been drawn on the same scanline + in 32 cell mode. + - The currently drawn sprite has a link field of zero. + + Sprites that are outside of the physical display area are still taken + into account. + + Link settings that create an 'infinite loop' or that have self-referencing + will not cause any unforseen problem, these kinds of loops will be broken + out of when the above sprite limitations are eventually reached. + + Because so many sprites can be shown on a single line, some games will + fill the entire display with sprites for a 'fake' third background layer. + Games that do this include 'Red Zone' by Zyrinx. + + ---------------------------------------------------------------------------- + 16.) Shadow / Hilight mode + ---------------------------------------------------------------------------- + + Shadow / hilight mode allows more colors to be displayed on screen. + + These additional colors are selected based upon the priority settings + for a background tile or sprite, and when certain kinds of sprite pixels + overlap background pixels. + + Background + ---------- + + Background tiles are shown at half intensity, or at normal intensity + if their priority bit is set. + + In the latter case, this affects all other graphics elements in the + region (usually 8x8) that the tile takes up, regardless of the tile + containing opaque pixels or not. Meaning that the backdrop color, other + background plane, and sprites will be forcibly shown at normal intensity + in a given area if a background tile has it's priority bit set. + + For instance, Ranger-X has both background layers and all sprites set + to low priority. A column in plane A uses high priority transparent + tiles. The result is that any sprites passing within that column, as + well as the plane B tiles that scroll behind it, are all shown at + normal intensity. + + Sprites + ------- + + Depending on the priority setting, sprites are shown at normal or half + intensity just like background tiles. + + Colors 0Eh, 1Eh, 2Eh, are always shown at normal intensity regardless of + priority. I'd say this a bug rather than a feature. + + Any pixel in a sprite that uses colors 3Eh or 3Fh is treated specially: + + Pixels with color 3Eh are not drawn. Instead, the underlying pixel + (from the backdrop or background) will be shown at half intensity. + + If the pixel to be overwritten is already at half intensity, then + nothing will happen. + + Pixels with color 3Fh are not drawn. Instead, the underlying pixel + (from the backdrop or background) will be shown at double intensity. + + Backdrop + -------- + + The backdrop is shown at half intensity, while the overscan region outside + of the display area is always shown at normal intensity. + + If a background tile has high priority, then the corresponding 8x8 block + of the backdrop color will be shown at normal intensity. It does not matter + if the background tile is fully opaque or not. + + Operator sprites will affect the backdrop color as well. + + Details + ------- + + It isn't known exactly how the colors are generated in shadow / hilight + mode. Currently all emulators make the half and double intensity colors + exactly half and double brightness of the current palette. + + This is not correct. At least the double intensity palette is actually + not much brighter than the normal palette. You can see a good example + of this by running any game using hilight sprites in an emulator + side-by-side to the same game running on a real Genesis. + + However, I haven't been able to figure out the colors exactly. In + particular, the introduction screen for Sonic 3D will only look correct + if the colors are exactly half and double, while this is certainly wrong + for other games. + + I've verified that the contents of CRAM entries 3Eh and 3Fh do not + affect the intensity of shadow and hilight pixels used in sprites. + + Any information on the colors used in shadow / hilight mode would be + appreciated. + + ---------------------------------------------------------------------------- + 17.) VDP registers + ---------------------------------------------------------------------------- + + All the register names are taken from the manual. + + $00 - Mode Set Register No. 1 + ----------------------------- + + d7 - No effect + d6 - No effect + d5 - No effect + d4 - IE1 (Horizontal interrupt enable) + d3 - 1= Invalid display setting + d2 - Palette select + d1 - M3 (HV counter latch enable) + d0 - Display disable + + Bit 4 will enable horizontal interrupts when set. + + When bit 2 is cleared, only bits 1, 5, and 9 are taken into account + when the VDP generates color data from each word of CRAM. (meaning + the LSB of each RGB component is the only bit used) This reduces the + available color palette from 512 to 8 colors. + + Bit 1 will cause the HV counter to be latched when a level 2 interrupt + is generated. The HV counter will resume normal operation when this bit + is cleared. (untested, need more info) + + Setting bit 0 actually turns off all display generation, as opposed to the + screen blanking feature which simply shows the backdrop color. + + $01 - Mode Set Register No. 2 + ----------------------------- + + d7 - TMS9918 / Genesis display select + d6 - DISP (Display Enable) + d5 - IE0 (Vertical Interrupt Enable) + d4 - M1 (DMA Enable) + d3 - M2 (PAL / NTSC) + d2 - SMS / Genesis display select + d1 - 0 (No effect) + d0 - 0 (See notes) + + Bit 7 seemingly puts the display in a TMS9918-like state when set, similar + to one of it's text display modes. Each 8x8 block is filled with a solid + color from the palette, and has no pattern data. The sprites seem to be + active. I couldn't select any of the other TMS9918 modes through the + usual TMS9918 mode bits. It would appear all the colors are actually + affected by CRAM, instead of using a fixed color set. + + Bit 6 will blank the display when cleared. Any line that is blanked is + filled with the backdrop color. During this time, you can freely access + VDP memory with no limitations on the number of writes per line. + + Bit 5 will enable vertical blanking interrupts when set. + + Bit 4 will enable DMA operations when set. Otherwise, nothing will happen + when a DMA command is sent to the VDP. + + Bit 3 will select between a PAL (240) and NTSC (224 lines) display. + + Bit 2 toggles between the Master System (mode 4) and Genesis (mode 5) + display modes. While in mode 4, none of the registers which normally + affect the Genesis work; and the unused registers (8, 9 - can't test 6) now + function. The mode bits which select TMS9918 modes on a real SMS have + no function here. (This is why the SMS game F16 Fighter will not work + with a Power Base Converter, it uses some of the TMS9918 modes in-game) + + The one exception is register $0C. You can set up a 320x192 display, + but the leftmost eight columns read 'garbage' data for the name table + attributes. Enabling interlace makes the display unstable. (and this + is partially true for a 320x192 picture, which shakes slightly) I'd + advise you set $0C to zero to enable a 256x192 display, which is the + normal SMS resolution. The Genesis always generates a 224 line picture; + the 192 lines in SMS mode are centered in the middle of the screen. + + I could not get the top row or right column lock features to work while + in SMS mode. Apart from this bit, the M3 pin on the cartridge connector + also puts the machine into SMS mode, which may fully enable all video + features. + + Bit 0 has an interesting effect; horizontal scrolling is disabled, and + it would almost seem like the horizontal scroll value modifies the + horizontal retrace / blanking / sync start and end positions around; the + middle of the display is blanked out, and will scroll left or right. + (note the blanked area scrolls - not the background) Moving too far in + one direction, so the blanked area is offscreen, totally corrupts the + display. + + Combining bits 7 (TMS9918 mode) and 2 (SMS mode) have no effect. + + $02 - Pattern Name Table Address for Scroll A + --------------------------------------------- + + Bits 5-3 of this register correspond to bits A15-A13 of the name table + address for plane A. + + $03 - Pattern Name Table Address for Window + --------------------------------------------- + + Bits 5-1 of this register correspond to bits A15-A11 of the name table + address for the window. + + In 40-cell mode, A11 is always forced to zero. + + $04 - Pattern Name Table Address for Scroll B + --------------------------------------------- + + Bits 2-0 of this register correspond to bits A15-A11 of the name table + address for plane B. + + $05 - Sprite Attribute Table Base Address + ----------------------------------------- + + Bits 6-0 of this register correspond to bits A15-A09 of the sprite + attribute table. + + In 40-cell mode, A09 is always forced to zero. + + $07 - Backdrop Color + -------------------- + + Bits 5-0 of this register select a palette entry to be used as the + backdrop color. + + The backdrop color is displayed in the following places: + + - The overscan area around the physical display + - Any line where the display enable bit has been cleared + + You can think of the display being filled with the backdrop color, and + then everything else being drawn over it. Any gaps where no pixels were + drawn will show the backdrop color. + + Even though palette entries 00h, 10h, 20h, and 30h cannot be used by + any patterns, these entries can be used for the backdrop color. + + $0A - H Interrupt Register + -------------------------- + + Bits 7-0 specify the value to be loaded in the counter; for complete + details see the "Interrupts" section. + + $0B - Mode Set Register No. 3 + ----------------------------- + + d7 - 0 (No effect) + d6 - 0 (No effect) + d5 - 0 (No effect) + d4 - 0 (No effect) + d3 - IE2 + d2 - VSCR + d1 - HSCR + d0 - LSCR + + Bit 3 will enable external interrupts, caused by the TH pin being set + to input mode and having the TH interrupt enable bit set. (Both of these + are controlled by the Genesis' I/O registers) + + Bit 2 selects between full screen vertical scrolling when clear, and + 2-cell column based vertical scrolling when set. + + Bits 1 and 0 determine how the VDP will parse the horizontal scroll table + when it is rendering display lines: + + HSCR LSCR + 0 0 - Full screen scroll + 0 1 - Line scroll + 1 0 - Cell scroll + 1 1 - Line scroll + + $0C - Mode Set Register No. 4 + ----------------------------- + + d7 - RS0 + d6 - 0 (No effect) + d5 - ? (See notes) + d4 - 0 (No effect) + d3 - S/TE + d2 - LSM1 + d1 - LSM0 + d0 - RS1 + + LSMx table: + 00 : No interlace + 01 : Interlace (Normal resolution) + 10 : No interlace + 11 : Interlace (Double resolution) + + RSx table: + 00 : Display is 32 cells wide + 01 : Display is 40 cells wide + 10 : Invalid display setting + 11 : Display is 40 cells wide + + Changes made to LSM0, LSM1 do not take effect until the display is no + longer in the active scan period. + + All other bits can be modified with changes taking effect immediately at + any point in the display frame. + + You should normally set the RSx bits to 00b or 11b. The unlicensed version + of Populous sets up a 40 cell display with a setting of 01b - technically + valid, but the display is distorted a bit. + + Bit 5 seems to affect the display when used in conjunction with RS0, but + only in the same way as the display appears when using a setting of 01b. + I've tried every combination of bit 6 along with the RSx bits, and the + physical width of the display was never different from 32 or 40 cells. + + $0D - H Scroll Data Table Base Address + -------------------------------------- + + Bits 5-0 of this register correspond to bits A15-A10 of the horizontal + scroll data table address. + + $0F - Auto Increment Data + ------------------------- + + Bits 7-0 specify the value to be added to the VDP's address register + after every read or write to the data port. + + A setting of zero means the address register is not incremented. + + $10 - Scroll Size + ----------------- + + d7 - 0 (No effect) + d6 - 0 (No effect) + d5 - VSZ1 + d4 - VSZ0 + d3 - 0 (No effect) + d2 - 0 (No effect) + d1 - HSZ1 + d0 - HSZ0 + + This register defines the size of the name tables for planes A and B. + Both fields can be set to the following values: + + 0 0 32 cells + 0 1 64 cells + 1 0 Invalid + 1 1 128 cells + + If the HSZ bits are set to 10b (invalid), then the first row of the name + table is shown for every line of the display. + + + $11 - Window H Position + ----------------------- + + d7 - RIGT + d6 - 0 (No effect) + d5 - 0 (No effect) + d4 - WHP5 + d3 - WHP4 + d2 - WHP3 + d1 - WHP2 + d0 - WHP1 + + This register will affect the window shown on the current line, if + the current line does not fall into the vertical range specified by + register $12. + + The WHP field defines the horizontal range of the window, in units + of two cells. (16 pixels) + + Setting the WHP field to zero disables the window. + Any nonzero value indicates how many 2-cell columns wide the window + plane is. (0=no window, 1=2 cells, 2=4 cells, 3=6 cells, etc.) + + When RIGT=0, the window is shown from column zero to the column + specified by the WHP field. + + For instance, if RIGT=0 and WHP=4, the window is displayed on columns + zero up to (and including) column seven. + + When RIGHT=1, the window is shown from the column specified in the WHP + field up to the last column in the display meaning column 31 or 39 + depending on the screen width setting. + + For instance, if RIGT=1 and WHP=4, the window is displayed on columns + eight up to (and including) column 31 or 39. + + Having WHP set to zero and RIGHT=1 is a legal setting; it means the + window is shown from column zero up to the last column in the display, + meaning the entire line is taken up by the window plane. + + There is a bug in the window processing. This occurs when the window is + showing partially on the left side of the screen, specifically when + the VDP is drawing the 2-cell column from plane A that immediately proceeds + the last column the window was drawn on. (i.e. WHP+1) + + If the lower four bits of the horizontal scroll value for the current + scan line are zero, then the name table attribute data for the current + column are fetched correctly. + + If the lower four bits of the horizontal scroll value for the current + scan line are nonzero, the name table attribute data are fetched from + next column. (WHP+2) + + In effect, you'll have N columns of the window plane, 1 column that has + identical patterns as the next column, then the remainder of the display + is drawn correctly. + + Here's a diagram to illustrate this: + w = window tiles + abc = tile columns + + D3-D0 of scroll value == 0 + wwwwwwwwwwwwwwwwaabbccddeeffgghh + + D3-D0 of scroll value != 0 + wwwwwwwwwwwwwwwwbbbbccddeeffgghh + + This register can be modified with changes taking effect immediately at + any point in the display frame. + + Plane A is not shown in any column where plane W is shown; they cannot + overlap. + + $12 - Window V Position + ----------------------- + + d7 - DOWN + d6 - 0 (No effect) + d5 - 0 (No effect) + d4 - WVP4 + d3 - WVP3 + d2 - WVP2 + d1 - WVP1 + d0 - WVP0 + + If the current scanline does not fall within the range specified by + register $12, then register $11 determines where the window is shown + for the remainder of the display. + + The WVP field defines the vertical range of the window, in units + of eight lines. + + Setting the WVP field to zero disables the window. + Any nonzero value indicates a vertical range for the window to appear + in. (0=no window, 1=lines 0-$7, 2= lines 0-$F, 3= lines 0-$17, etc.) + + When DOWN=0, the window is shown from line zero to the line specified + by the WVP field. + + For instance, if DOWN=0 and WVP=4, the window is displayed on lines + zero up to (and including) line $1F. + + When DOWN=1, the window is shown from the line specified in the WVP + field up to the last line in the display. + + For instance, if DOWN=1 and WVP=4, the window is displayed on lines $1F + up to (and including) the last line in the display. + + Having WVP set to zero and DOWN=1 is a legal setting; it means the + window is shown from line zero up to the last line in the display, + meaning the entire screen is taken up by the window plane. + + Plane A is not shown in any line where plane W is shown; they cannot + overlap. + + ---------------------------------------------------------------------------- + 18.) VDP Pinout + ---------------------------------------------------------------------------- + + This is applicable to the 315-5313 chip used in the early versions of + the original Genesis model. + + 1-8 - SD0-SD7 (VRAM data bus) + 10 - SE0 (VRAM) + 11 - SC (VRAM) + 12 - RAS (VRAM) + 13 - CAS (VRAM) + 15 - WE0 (VRAM) + 16 - OE (VRAM) + 17 - GND + 26 - AGC + 27 - R (Red video output) + 28 - G (Green video output) + 29 - B (Blue video output) + 30 - AVC + 31-38 - AD0-AD7 (VRAM address bus) + 39 - YS + 40 - SPA/8 + 41 - VSYNC (Vertical sync) + 42 - C-SYNC (Composite sync) + 43 - HSYNC (Horizontal sync) + 44 - HL (from control port HL pin) + 45 - SEL0 (from M3 on cartridge connector - forces mode 4 graphics) + 46 - PAL (PAL / NTSC select) + 47 - RESET (68000) + 49 - CLK1 (68000) + 48 - SEL1 (?) + 50 - SBCR + 51 - CLK0 + 52 - MCLK (53.64165 MHz) + 53 - EDCLK + 54 - VDD + 54-70 - CD0-CD15 (68000 data bus) + 71-93 - CA0-CA22 (68000 address bus (A23-A1)) + 94 - AVS + 95 - PSG (SN76489 PSG sound output) + 97 - GND + 98 - INT + 99 - BR + 100 - BGAK + 101 - BG + 102 - MRE0 + 103 - INTAK + 104 - IPL1 (68000) + 105 - IPL2 (68000) + 106 - IREQ + 107 - RD (68000) + 108 - WR (68000) + 109 - MI + 110 - AS (68000) + 111 - UDS (68000) + 112 - LDS (68000) + 113 - R/W + 114 - DTAK (68000) + 115 - UWR (68000) + 116 - LWR (68000) + 118 - CAS0 (VRAM) + 117 - OE0 (VRAM) + 119 - RAS0 (VRAM) + 128 - VDD + + ============================================================================ + + To-do test list + + - Last column wrapping (40 cell mode only?) + - Columns being offset by the horizontal scroll value (d3-d0) + - How line scrolling is managed in interlace mode 2 + - How sprite Y positions and VSRAM values are used in interlace mode 2 + - Vertical interrupt supression via line interrupts + - Reverse sprite stage in CV + - Mid frame sprite table changes (can't be done I think; sprite table + changes aren't seen by VDP, though changing the sprite table address + will cause a switch) + - Large sprite pattern overflow + - Result of copy and fill operations overflowing + - Result of copy operations overlapping + - Use of HV counter latch in the 6-in-1 pak. + - Source and length registers being updated during DMA + - Confirm invalid code use + - Default status flag settings + - Sprite collisions and overflows outside of the physical display area + - How many times a sprite collision and overflow can occur (per line/frame?) + + And for timing, based on the HV counter: + + - Vertical counter increment + - Horizontal blanking flag clear and set + - Vertical blank flag clear and set + - Horizontal interrupt occurance + - Vertical interrupt occurance + - Invalid periods for vertical counter + - Invalid periods for horizontal counter (test with 6-in-1 pak) + - Start/stop of physical display (use sprite collision on either edge) diff --git a/ genplus-gx/source/docs/io.htm b/ genplus-gx/source/docs/io.htm new file mode 100644 index 0000000..6b62f3d --- /dev/null +++ b/ genplus-gx/source/docs/io.htm @@ -0,0 +1,933 @@ +Sega Genesis I/O Chip and Peripherals + +

    Sega Genesis I/O Chip and Peripherals

    +By Charles MacDonald
    +
    http://cgfm2.emuviews.com +
    + +

    Contents

    + + + +

    Overview

    +

    + The I/O chip manages three 7-bit I/O ports. It also +provides an way for the CPU to read the state of several jumpers in the +system. Later versions of the Genesis hardware have the I/O chip +integrated into some of the other custom hardware, but they all +function identically. +

    + + +

    Connector details

    +

    + Ports A and B are male DB-9 connectors, while port C is +female. In the Genesis 2 and 3, there is no physical connector for port +C, but it can still be programmed and will respond like any other port. +(as if no gamepad was connected) Here are the pin assignments: +

    + +
        Pin 1 : D0
    +    Pin 2 : D1
    +    Pin 3 : D2
    +    Pin 4 : D3
    +    Pin 5 : +5V
    +    Pin 6 : TL
    +    Pin 7 : TH
    +    Pin 8 : Ground
    +    Pin 9 : TR
    +
    + + +

    CPU interface

    + +

    + The I/O chip is connected to the 68000 and Z80. When in +Mark-III compatibility mode, the I/O chip has a different set of +registers which mimic those of the SMS, which will not be discussed +here. +

    + The I/O chip is mapped to $A10000-$A1001F in the 68000/VDP/Z80 banked address space. + It is normally read and written in byte units at odd addresses. + The chip gets /LWR only, so writing to even addresses has no effect. + + Reading even addresses returns the same data you'd get from an odd address. + If a word-sized write is done, the LSB is sent to the I/O chip and the MSB is ignored. + Here are some examples to illustrate these points: +

        ; Does nothing, byte writes to even addresses are ignored
    +    move.b  #$40, $A10002
    +
    +    ; Returns contents of version register, reading even addresses is the same as reading odd ones
    +    move.b $A10000, d0
    +
    +    ; Same as writing #$40 to $A10007, the MSB is ignored
    +    move.w #$C040, $A10006
    +
    +

    + + +

    Register list

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AddressDescription
    $A10001Version
    $A10003Port A data
    $A10005Port B data
    $A10007Port C data
    $A10009Port A control
    $A1000BPort B control
    $A1000DPort C control
    $A1000FPort A TxData
    $A10011Port A RxData
    $A10013Port A serial control
    $A10015Port B TxData
    $A10017Port B RxData
    $A10019Port B serial control
    $A1001BPort C TxData
    $A1001DPort C RxData
    $A1001FPort C serial control
    + + +

    Version register

    +

    + The version register returns several types of +information, such as a hard-coded version number, settings of the +domestic/export and PAL/NTSC jumpers, and the state of a sense pin +which the Sega CD uses.

        D7 : Console is 1= Export (USA, Europe, etc.) 0= Domestic (Japan)
    +    D6 : Video type is 1= PAL, 0= NTSC
    +    D5 : Sega CD unit is 1= not present, 0= connected.
    +    D4 : Unused (always returns zero)
    +    D3 : Bit 3 of version number
    +    D2 : Bit 2 of version number
    +    D1 : Bit 1 of version number
    +    D0 : Bit 0 of version number
    +
    + + Bit 5 is used by the Sega CD, returning '0' when it is attached and '1' when it is not. + +

    + The version number is zero for the original model Genesis and MegaDrive. + All later versions of the hardware are version 1, and have additional security hardware. + +

    + Bits 7,6 are used in country protection checks. Some early games used + them to display English or Japanese text, so the same game program could + be used in both regions. Here's a list of settings: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Bit 7Bit 6TV typeRegionComments
    00NTSCJapan, Korea, Taiwan262 lines, 60 FPS
    01PALJapanNo hardware actually uses this setting
    10NTSCUSA, Canada262 lines, 60 FPS
    10PAL-MBrazil262 lines, 60 FPS
    11PALEurope, Hong Kong313 lines, 50 FPS
    + +

    + Early games stored a region compatibility code in their +header at offset $0001F1. This value could be the ASCII text J, U, or E +for Japan, USA or Europe. During game initialization, bits 7,6 could be +sampled and compared to the region type stored in the header. If there +is a mismatch, many games will fill the screen with a single color lock +up intentionally, or sometimes display an error message.

    + Later games have a slightly more complex code. + Here's the table Sega uses to determine valid codes to use: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    $A10001 Main Sales TerritoriesHardware Enable Code (numbers from 0 to F below)
    Bit 7Bit 6Hardware Type0123456789ABCDEF
    00Japan, NTSCJapan, S. Korea, TaiwanXOXOXOXOXOXOXOXO
    01Japan, PAL XXOOXXOOXXOOXXOO
    10Overseas, NTSCN. America, BrazilXXXXOOOOXXXXOOOO
    11Overseas, PALEurope, Hong KongXXXXXXXXOOOOOOOO
    + +

    + Common uses of the new code type are ASCII values '4' for N.America, 'A' for UK, and 'B' for UK and Japan. +

    + + + +

    Data register

    +

    + Writing to the data register sets the logic level of +pins configured as outputs (0= 0V, 1= +5V), and does nothing to pins +configured as inputs. Reading from the data register returns the state +of each pin. Here's a list of which bits in the data register +correspond to pins on the I/O port. +

        D7 : Unused. This bit will return any value written to it
    +    D6 : TH pin
    +    D5 : TR pin
    +    D4 : TL pin
    +    D3 : D3 pin
    +    D2 : D2 pin
    +    D1 : D1 pin
    +    D0 : D0 pin
    +
    + + If a pin is configured as an input, reading it returns +the true logic state of whatever the pin is connected to (e.g. 0 for +ground, 1 for +5V). If nothing is connected to it, the pin returns '1', +maybe due to internal pull-up resistors. +

    + If a pin is configured as an output, reading it returns the last value written to this register. +

    + + +

    Control register

    +

    + The control register determines which pins are inputs and outputs. + +

        D7 : /HL output control (see description)
    +    D6 : TH pin is 1=output, 0=input
    +    D5 : TR pin is 1=output, 0=input
    +    D4 : TL pin is 1=output, 0=input
    +    D3 : D3 pin is 1=output, 0=input
    +    D2 : D2 pin is 1=output, 0=input
    +    D1 : D1 pin is 1=output, 0=input
    +    D0 : D0 pin is 1=output, 0=input
    +
    + + If bit 7 of this register is set, and TH is configured as an input, + then whenever external hardware makes high to low transition on TH + the I/O chip will strobe it's /HL output pin low. This pin connects to + the VDP, which can be set up to latch the HV counter and/or cause a level 2 + interrupt upon /HL going low. +

    + + +

    Serial control register

    +

    + The serial control register defines how a port is used for serial + communications and provides status flags to indicate the current state + of sending or receiving data. + +

        D7 : Serial baud rate bit 1
    +    D6 : Serial baud rate bit 0
    +    D5 : TR pin functions as 1= serial input pin, 0= normal
    +    D4 : TL pin functions as 1= serial output pin, 0= normal
    +    D3 : 1= Make I/O chip strobe /HL low when a byte has been received, 0= Do nothing
    +    D2 : 1= Error receiving current byte, 0= No error
    +    D1 : 1= Rxd buffer is ready to read, 0= Rxd buffer isn't ready
    +    D0 : 1= Txd buffer is full, 0= Can write to Txd buffer
    +
    + + The available baud rates are: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    D7D6Baud rate
    004800 bps
    012400 bps
    101200 bps
    11300 bps
    + +

    + When doing serial communication, TL and/or TR can be used for sending + and receiving data. During this time the data and control registers + have no effect for whichever pin(s) are in serial mode. The rest of the + pins in the same port function normally. + +

    The intended use of bit 3 is to also have the VDP set up to +enable level 2 interrupts when /HL goes low. This way, when the I/O +chip receives a byte through the TR pin, if this bit is set then it +will strobe /HL low and cause an interrupt. So receiving data serially +can either be accomplished through manual polling or be interrupt +driven. +

    + Bits 2-0 are read-only status flags, the rest of the bits in this register can be read and written. +

    + + + +

    TxData register

    +

    + Writing a byte to this register will make the I/O chip +output the data serially through the TL pin, providing it was +configured for serial mode. You should poll bit 0 of the serial control +register until the bit returns 0 to ensure the previously written byte +has been sent and the TxData buffer is empty. +

    + + +

    RxData register

    +

    + Reading from this register returns the last byte +received serially through the TR pin. You should check bits 3,2 of the +serial control register to ensure that the RxData input buffer is full +and that there were no errors in receiving the byte (which would then +be invalid). +

    + + +

    Using serial communication

    +

    + When in serial mode, the I/O ports output TTL-level +signals. You need something like a MAX232 line driver to convert these +to RS-232 compatible signals for interfacing with (for example) a PC. +

    If you just want to do experiments on the serial ports +themselves, you can use a null modem cable with the TL/TR wires +switched around to connect port A to B. I used this for testing the +serial capabilities while writing this document. Be sure to disconnect +the +5V line as well. +

    + + +

    Peripheral devices

    + + + + +

    2-button Mark-III gamepad

    +

    + This controller has a 4-way direction pad, and two buttons (2 and 1). + Here's a description of how the controller interfaces with an I/O port: + +

        D6 : (TH) Not used
    +    D5 : (TR) Button 2
    +    D4 : (TL) Button 1
    +    D3 : (D3) D-pad Right
    +    D2 : (D2) D-pad Left
    +    D1 : (D1) D-pad Down
    +    D0 : (D0) D-pad Up
    +
    + + All buttons are active-low logic, so they return '0' when pressed and '1' when released. +

    + + +

    3-button standard gamepad

    +

    + This controller has a 4-way direction pad, and four buttons (Start, A, B, C). + It uses a multiplexer that selects 1 of 2 inputs using TH, and routes buttons Start or C to TR, and B or A to TL. + +

    + Here's a description of how the controller interfaces with an I/O port: + +

                    When TH=0          When TH=1
    +    D6 : (TH)   0                  1
    +    D5 : (TR)   Start button       Button C
    +    D4 : (TL)   Button A           Button B
    +    D3 : (D3)   0                  D-pad Right
    +    D2 : (D2)   0                  D-pad Left
    +    D1 : (D1)   D-pad Down         D-pad Down
    +    D0 : (D0)   D-pad Up           D-pad Up
    +
    + + All buttons are active-low logic, so they return '0' when pressed and '1' when released. + +

    You need a small delay between changing TH and reading the +button state back, as the multiplexer takes some time in switching +inputs. I've found about four NOPs provides a reasonable delay. +

    + Here's some example code to read a 3-button gamepad: +

    + +
    ; Returns D0 with the button states: 'SACBRLDU'
    +_read_joypad:
    +                        move.l  d1, -(a7)
    +                        move.b  #$40, $A10003
    +                        nop
    +                        nop
    +                        move.b  $A10003, d0
    +                        andi.b  #$3F, d0
    +                        move.b  #$00, $A10003
    +                        nop
    +                        nop
    +                        move.b  $A10003, d1
    +                        lsl.b   #2, d1
    +                        andi.b  #$C0, d1
    +                        or.b    d1, d0
    +                        eori.b  #$FF, d0
    +                        move.l  (a7)+, d1
    +                        rts
    +
    + + +

    Fighting Pad 6B

    +

    + Information coming soon. +

    + + +

    Lightguns (Sega Menacer, Konami Justifier)

    +

    + Information coming soon. +

    + + +

    EA 4-Way Play

    +

    + The EA 4-Way Play plugs into ports A and B, and allows up to four standard Genesis controllers to be connected at once. + +

    I've determined how the multitap works by examining the +joystick reading code from NHL '95 and trying the same routine on a +new-style Sega Team Player in 'EXTRA' mode. That said, the actual EA +4-Way Play could have some differences that Sega's compatibility mode +doesn't take care of. +

    To detect the multitap, set CTRL1 to 0x40, CTRL2 to 0x7F and +DATA2 to $7C. Reading the lower 2 bits of DATA1 will return zero if the +multitap is present. Usually these bits return 0x03 if there is no tap, +no controller, or the Sega Team Player isn't in EXTRA mode, but this +could be a behavior specific to the Team Player. +

    + To read the pads, write 0x0C, 0x1C, 0x2C, or 0x3C to DATA2 to select the controller in port A, B, C, or D. + You can then use DATA1/CTRL1 to read the pad state just like polling a regular 3-button pad in port A. + +

    + Here's some example code to use the EA 4-Way Play: +

    + +
    ; Returns D0 == 0 if the multitap is present, or D0 != 0 if it isn't
    +_detect_4wayplay:
    +                        move.b  #$40, $A10009
    +                        nop
    +                        move.b  #$7F, $A1000B
    +                        nop
    +                        move.b  #$7C, $A10005
    +                        nop
    +                        moveq   #0, d0
    +                        move.b  $A10003, d0
    +                        andi.b  #$03, d0
    +                        rts
    +
    +; Returns the state of all four 3-button gamepads in D0
    +_read_4wayplay:
    +                        move.l  d1-d3/a0, -(a7)
    +                        lea     $A10000, a0
    +                        move.l  #$0C1C2C3C, d2
    +                        moveq   #$03, d3
    +        poll:           move.b  d2, $05(a0)
    +                        nop
    +                        nop
    +                        move.b  #$40, $03(a0)
    +                        nop
    +                        nop
    +                        move.b  $A10003, d0
    +                        andi.b  #$3F, d0
    +                        move.b  #$00, $03(a0)
    +                        nop
    +                        nop
    +                        move.b  $03(a0), d1
    +                        lsl.b   #2, d1
    +                        andi.b  #$C0, d1
    +                        or.b    d1, d0
    +                        lsl.l   #8, d0
    +                        lsr.l   #8, d2
    +                        dbra    d3, poll
    +                        eori.l  #-1, d0
    +                        move.l  (a7)+, d2-d3/a0
    +                        rts
    +
    + + + +

    Sega Team Player

    +

    + The Team Player is a multitap device that allows four peripherals to be connected to the Genesis at one time. + It has a mode select switch with several settings: +

        EXTRA - All four ports are enabled. This is the setting used by
    +            EA 4-Way Play compatible games.
    +        A - Routes the peripheral in port A to port A of the Genesis.
    +        B - Routes the peripheral in port B to port A of the Genesis.
    +        C - Routes the peripheral in port C to port A of the Genesis.
    +        D - Routes the peripheral in port D to port A of the Genesis.
    +    MULTI - All four ports are enabled. This is the setting used by
    +            Team Player compatible games.
    +
    + Sega made two versions of the Team Player. The first one +was not compatible with the EA 4-Way Play and only had one cable to +connect it to port A. The second one added the "EXTRA" setting for EA +4-Way Play compatibility and provides a second cable to connect it to +port B as well. Both seem to function identically with the exception of +EXTRA mode. +

    + I don't have any programming information for this device. +

    + + +

    Sega Mega Mouse

    +

    + This is a three button mouse (left, middle, right) with an extra button + (Start) located near the thumb position. It uses a PIC16C54 microcontroller + which manages the buttons and position tracking. + +

    + The Sega Mega Mouse that is distributed in North America is incompatible with the European version of Populous 2. + The mouse functions normally but has Y axis inverted so up is down and vice-versa. + It may have been designed for the Japanese Mega Drive mouse, which is a different product with 2 buttons and unique physical appearance. + +

    + The protocol works as follows: + TH and TR are outputs which tell the microcontroller to stop or start a data transfer, and to acknowledge received data. + TL is an input which returns a busy flag for the microcontroller. + D3-D0 are inputs that return the data. + Here's a table showing the communication process: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    WriteTHTRTLD3D2D1D0Description
    $601110000Request data
    $200110000ID #0 ($0)
    $000011011ID #1 ($B)
    $200101111ID #2 ($F)
    $000011111ID #3 ($F)
    $20010Y OverX OverY SignX SignAxis sign and overflow
    $00001StartMiddleRightLeftButton state
    $20010X7X6X5X4X axis MSN
    $00001X3X2X1X0X axis LSN
    $20010Y7Y6Y5Y4Y axis MSN
    $00001Y3Y2Y1Y0Y axis LSN
    + +

    + Write #$60 when you are done polling to stop the data +transfer. If you continue to poll the mouse after collecting all the +data by writing $20 / $00, the Y axis LSN will always be returned. Sega +advises polling beyond this point will make the mouse behave +abnormally. It's possible that the PIC code in some versions of the +Mega Mouse may have problems if the poll sequence is too long. +

    + The X/Y overflow flags are supposed to be set if the mouse is moved over a distance greater than can be measured. + I can't get them to become set, maybe the mouse supports a fairly wide range of movement. + + +

    You need a considerable delay between writing new values to +TH/TR. I think the intention is to poll TL until the microcontroller +returns 'not busy', but I can't get this to work reliably. Sega's mouse +reading code also has a timeout when checking TL which would indicate +it may get stuck in a certain state. +

    + All buttons (start, left, middle, right) are active-high logic, so they return '1' when pressed and '0' when released. +

    + + +

    Miscellaneous

    +

    + After power-up, the default state of the I/O chip are as follows: +

        $A10001 = $80 (Bits 7,6,5 depend on the domestic/export, PAL/NTSC jumpers and having a Sega CD or not)
    +    $A10003 = $7F
    +    $A10005 = $7F
    +    $A10007 = $7F
    +    $A10009 = $00
    +    $A1000B = $00
    +    $A1000D = $00
    +    $A1000F = $FF
    +    $A10011 = $00
    +    $A10013 = $00
    +    $A10015 = $FF
    +    $A10017 = $00
    +    $A10019 = $00
    +    $A1001B = $FB
    +    $A1001D = $00
    +    $A1001F = $00
    +
    +

    + + +

    Disclaimer

    +
     If you use any information from this document, please credit me
    + (Charles MacDonald) and optionally provide a link to my webpage
    + (http://cgfm2.emuviews.com/) so interested parties can access it.
    +
    + The credit text should be present in the accompanying documentation of
    + whatever project which used the information, or even in the program
    + itself (e.g. an about box)
    +
    + Regarding distribution, you cannot put this document on another
    + website, nor link directly to it.
    +
    + +
    + + \ No newline at end of file diff --git a/ genplus-gx/source/docs/license b/ genplus-gx/source/docs/license new file mode 100644 index 0000000..60549be --- /dev/null +++ b/ genplus-gx/source/docs/license @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ genplus-gx/source/docs/m5hvc.txt b/ genplus-gx/source/docs/m5hvc.txt new file mode 100644 index 0000000..c9f1b2a --- /dev/null +++ b/ genplus-gx/source/docs/m5hvc.txt @@ -0,0 +1,40 @@ + + VDP timing for an NTSC Genesis in display mode 5. + Version 0.4 (11/29/00) + + by Charles MacDonald + WWW: http://cgfm2.emuviews.com + + Unpublished work Copyright 2000 Charles MacDonald + + Description 32-cell 40-cell + ---------------------------------------------------------------------------- + Range 00-93, E9-FF 00-B6, E4-FF + Display area 00-7F 00-9F + V counter increment 84, 85 A4, A5 + V-blanking in 86, 87 A7, A8 + V-blanking out 86, 87 A7, A8 + H-blanking in 93, E9 B2, E4 + H-blanking out 06, 07 06, 07 + + Comma seperated values show the H counter value before an event occurs, + and then the H counter value immediately after. + + These values shouldn't be considered 100% accurate, they are probably + off by one or two. + + Each H counter unit is equivalent to two pixels. + + The gaps at 93-E9 and B6-E4 are where the H counter 'jumps' ahead. + The H counter will never actually be set to the values 94-E8 or B7-E3. + Perhaps this is the horizontal retrace period. + + Interestingly enough, the timing values for the 32-cell display mode + are identical to that of the SMS. + + It would appear that in 40-cell mode, the horizontal blanking period + is shorter as the active display period takes more time. + + The V-blanking flag can also be forcibly set by disabling the display + through bit 6 of register #1. + diff --git a/ genplus-gx/source/docs/porting.txt b/ genplus-gx/source/docs/porting.txt new file mode 100644 index 0000000..e347bdc --- /dev/null +++ b/ genplus-gx/source/docs/porting.txt @@ -0,0 +1,89 @@ + + Introduction + + Genesis Plus has reasonable speed, and very fast rendering. Here are some + details about porting it to another platform + + Porting rules + + - This program is released under the GPL, so please release the source + code for your derivative ports. Let me know if you need an alternative + to this. + + - Do not change the name of the emulator. Something like 'Genesis Plus / MacOS' + is fine as it keeps the original name. + + - Configure the CPU emulators for little or big-endian CPUs, and use the + ALIGN_LONG option to handle unaligned memory accesses if needed. E.g. if + the emulator crashes when a game scrolls horizontally, you need to enable + it. + + Requirements + + - At this time the 16-bit rendering code has been well tested and should + be used. There is code to support 8 through 32-bit displays, but I + haven't checked if it still works. + + - Audio output, if enabled, uses stereo 16-bit samples. + + Functions to use: + + int load_rom(char *filename); + + Loads a game which can be in BIN, SMD or ZIP formats. It returns zero if + an error has occured. + + void system_init(void); + + Initializes the virtual Genesis console. Call this once during startup. + + void audio_init(int rate); + + Initialize the sound emulation part of the emulator. Pass zero or don't + call the function to disable sound. Call this after running system_init(). + + void system_reset(void); + + Resets the virtual Genesis console. Call this once during setup, and later + as needed. + + int system_frame(int skip); + + Updates the emulation for a frame. Pass 1 to prevent rendering (which can + be used for frame skipping) and 0 to render the current display. + + This function returns 0 if the virtual Genesis console has locked up. + You can do what you'd like with this information, such as notify the user, + reset the machine, etc. + + If audio is enabled, the snd.buffer[] array will hold the current audio + data for this frame. + + void system_shutdown(void); + + Shuts down the emulator. + + Variables: + + The 'bitmap' structure needs to be filled out prior to calling system_init(). + This provides the rendering code with information about the type of bitmap + it is rendering to. I would advise sticking with a 1024x512 16-bit bitmap: + + memset(&bitmap, 0, sizeof(t_bitmap)); + bitmap.width = 1024; + bitmap.height = 512; + bitmap.depth = 16; + bitmap.granularity = 2; /* Bytes per pixel */ + bitmap.pitch = (bitmap.width * bitmap.granularity); + bitmap.data = (unsigned char *)bmp->pixels; /* Pointer to your bitmap */ + bitmap.viewport.w = 256; /* Initial size of display on power-up (do not change) */ + bitmap.viewport.h = 224; + bitmap.viewport.x = 0x20; /* Offset used for rendering (do not change) */ + bitmap.viewport.y = 0x00; + bitmap.remap = 1; + + The variable 'input.pad[0]' holds the button states for the first player + gamepad. Update this prior to calling system_frame(), and use the bitmasks + defined in system.h such as 'INPUT_UP', etc. + + See the Windows/SDL and DOS drivers for examples. diff --git a/ genplus-gx/source/docs/readme.txt b/ genplus-gx/source/docs/readme.txt new file mode 100644 index 0000000..72d8fa4 --- /dev/null +++ b/ genplus-gx/source/docs/readme.txt @@ -0,0 +1,122 @@ + ---------------------------------------------------------------------------- + Genesis Plus + ---------------------------------------------------------------------------- + + Version 1.2a + by Charles Mac Donald + WWW: http://cgfm2.emuviews.com + + What's New + ---------- + + [06/22/03] + - Modified rendering code for portability + - Modified memory handling to fix banked PSG access + [05/13/03] + - Initial release + + Usage + ----- + + The Windows version runs windowed in a 16-bit desktop with NO sound or + joystick support. + + The DOS version has most of the functionality from SMS Plus, such + as audio, joysticks, etc. + + Windows/DOS controls: + + Arrow Keys - Directional pad + A,S,D,F - 1P gamepad, buttons A, B, C, Start + Tab - Reset + Esc - Exit program + + DOS only: + + End - Exit program + F1-F4 - Set frameskip level (F1 = no skip ... F4 = skip 3 frames) + F8 - Make PCX screen snapshot + F9 - Toggle VSync + F10 - Toggle speed throttling + F11 - Toggle FPS meter + + DOS details: + + You can only support a second player if you are using a joystick driver + that supports more than one joystick. (e.g. Sidewinder, dual pads, etc.) + + Type 'gen -help' on the command line for a list of useful options. + + -res set the display resolution. + -vdriver specify video driver. + -depth specify color depth. (8, 16) + -scanlines use scanlines effect. + -scale scale display to full resolution. (slow) + -vsync wait for vertical sync before blitting. + -sound enable sound. (force speed throttling) + -sndrate specify sound rate. (8000, 11025, 22050, 44100) + -sndcard specify sound card. (0-7) + -swap swap left and right stereo output. + -joy specify joystick type. + + Here is a list of all the video drivers you can pass as a parameter + to the '-vdriver' option: + + auto, safe, vga, modex, vesa2l, vesa3, vbeaf + + Here is a list of all the joystick drivers you can pass as a parameter + to the '-joy' option: + + auto, none, standard, 2pads, 4button, 6button, 8button, fspro, wingex, + sidewinder, gamepadpro, grip, grip4, sneslpt1, sneslpt2, sneslpt3, + psxlpt1, psxlpt2, psxlpt3, n64lpt1, n64lpt2, n64lpt3, db9lpt1, db9lpt2, + db9lpt3, tglpt1, tglpt2, tglpt3, wingwar, segaisa, segapci, segapci2 + + You can put any commandline option into a plain text file which should + be called "gen.cfg". Put one option per line, please. Command line options + will override anything in the configuration file. + + Currently the zip loading code can manage a zipfile where the game + image is the first thing in it. If you try to open a huge archive of + games, only the first will be played. + + Credits and Acknowlegements + --------------------------- + + I would like to thank Omar Cornut, Christian Schiller, and Chris MacDonald + for their invaluable help and support with this project. + + Richard Bannister for the Macintosh port and all of the code fixes and + suggestions that have made Genesis Plus a better program. + (http://www.bannister.org) + + The Genesis emulator authors: Bart Trzynadlowski, Quintesson, Steve Snake, + James Ponder, Stef, Gerrie, Sardu. + + The regular people and many lurkers at segadev. + + The MAME team for the CPU and sound chip emulators. + + Everyone who has contributed, donated, and submitted information to help + out Genesis Plus and my efforts documenting the Genesis hardware. + + Contact + ------- + + Charles MacDonald + E-mail: cgfm2@hotmail.com + WWW: http://cgfm2.emuviews.com + + Legal + ----- + + Copyright (C) 1999, 2000, 2001, 2002, 2003 Charles MacDonald + + The source code is distributed under the terms of the GNU General Public + License. + + The Z80 CPU emulator, 68K CPU emulator, and the PSG, YM2612 emulation code + are taken from the MAME project, and terms of their use are covered under + the MAME license. + (http://www.mame.net) + diff --git a/ genplus-gx/source/docs/ssf2tnc.txt b/ genplus-gx/source/docs/ssf2tnc.txt new file mode 100644 index 0000000..cc1860f --- /dev/null +++ b/ genplus-gx/source/docs/ssf2tnc.txt @@ -0,0 +1,189 @@ + --------------------------------------- + SSFII GENESIS TECHNICAL INFORMATION + Second Edition (July 26, 2000) + Bart Trzynadlowski + --------------------------------------- + + +The purpose of this document is to discuss the workings of the Genesis port of +Capcom's "Super Street Fighter II The New Challengers". Virtually all of this +information was originally found by others' efforts. + Please credit "those who contributed information" rather than me if +you use any of this information. You may pass this document around freely, but +please keep it unaltered. If you see any errors or have more info, contact me. +I can be reached at trzy@powernet.net. + + Second Edition: July 26, 2000 + - Major update with correct information thanks to Tim Meekins + First Edition: July 21, 2000 + - Initial release + + +0. THE SSFII CHALLENGE + +The challenge behind getting "Super Street Fighter II The New Challengers" +(SSFII) to work on a Genesis emulator lies primarily in the fact that the game +is stored on a 40 megabit (5 megabyte) cartridge. + The Sega Genesis maps ROM from 0x000000 to 0x3FFFFF which means that +the CPU can only see 4 megabytes of cartridge ROM. SSFII needed more space for +the backgrounds and thus Capcom opted for a special 5 megabyte cartridge with +bankswitching in order to access the area of ROM outside of normal range. + + +1. THE BANKSWITCHING MECHANISM + +The bankswitching mechanism probably resides on the cartridge. I'm 99% sure of +this. Sega documentation does offer a description of the mechanism, though, +which led me to suspect for a moment that perhaps the mechanism was on the +Genesis itself. + The idea is unlikely though, as that range of registers is used by the +32X for an entirely different purpose. I have been informed that that range +(which is marked as "SEGA RESERVED" in the Genesis developer's manual) can be +used for extra devices which may be present on the cartridge. + +The bankswitching mechanism is very simple. It views the addressable 4 mega- +bytes of ROM as 8 512KB regions. The first area, 0x000000-0x07FFFF is fixed +and cannot be remapped because that is where the vector table resides. + The banking registers on the cartridge work by allocating the 512KB +chunk to a given part of the addressable 4MB ROM space. Below are the +registers and what range they correspond to. The value written to a register +will cause the specified 512KB page to be mapped to that region. A page is +specified with 6 bits (bits 7 and 6 are always 0) thus allowing a possible 64 +pages (SSFII only has 10, though.) + + 0xA130F3: 0x080000 - 0x0FFFFF + 0xA130F5: 0x100000 - 0x17FFFF + 0xA130F7: 0x180000 - 0x1FFFFF + 0xA130F9: 0x200000 - 0x27FFFF + 0xA130FB: 0x280000 - 0x2FFFFF + 0xA130FD: 0x300000 - 0x37FFFF + 0xA130FF: 0x380000 - 0x3FFFFF + +The registers are accessed through byte writes. I haven't seen SSFII try to +read any of the registers, so I don't know if it's possible or not. I don't +emulate anything besides byte writes in my emulator. + There is also a register 0xA130F1. Apparently the regions specified by +0xA130F9-0xA130FF (0x200000-0x3FFFFF) can be either ROM or RAM and can be +write-protected. Here is the layout of the register as far as I know: + + 7 6 5 4 3 2 1 0 + +-----------------------+ + |??|??|??|??|??|??|WP|MD| + +-----------------------+ + + MD: Mode -- 0 = ROM, 1 = RAM + WP: Write protect -- 0 = writable, 1 = not writable + +Emulation of the 0xA130F1 register is not necessary, SSFII initializes it at +start-up by writing 0 I believe, which signifies ROM and no write protection +to the regions at 0x200000-0x3FFFFF (ROM isn't writable anyway, there isn't a +need for protection.) + +Examples: + + If 0x01 is written to register 0xA130FF, 0x080000-0x0FFFFF is visible + at 0x380000-0x3FFFFF. + If 0x08 is written to register 0xA130F9, the first 512KB of the + normally invisible upper 1MB of ROM is now visible at 0x200000- + 0x27FFFF. + +The registers simply represent address ranges in the 4MB ROM area and you can +page in data to these ranges by specifying the bank # -- it's that simple! + + +2. CHECKSUM + +SSFII contains a checksum routine which calculates the checksum of the first +4MB of the ROM; it then pages in the last 1MB of ROM to 0x300000-0x3FFFFF. +It does this by writing to the bank registers. The following code is taken +directly from the US ROM dumped by Genesis Power: + + ... Checksum first 4MB of ROM (0x000000-0x3FFFFF) ... + 0x003BEC: move.b #$08, ($A130FD) + 0x003BF4: move.b #$09, ($A130FF) + 0x003BFC: lea ($300000), a0 + ... Checksum uppper 1MB of ROM now mapped at 0x300000-0x3FFFFF ... + +The bankswitching hardware must be properly emulated before the game starts +working. If it is not, the checksum will fail and the game will hang with a +red screen. + In the Genesis Power US dump, you can jump to 0x003C3C to avoid the +checksum routine, this is where program flow transfers to if the checksum was +found to be valid. The game doesn't do anything important before the checksum +code as far as emulation is concerned. It writes the SEGA message to the +Trademark Security System register and does some joypad init stuff. + + +3. EMULATING SSFII + +SSFII is fairly straightforward to emulate. All you need to do is detect the +game, load up all 5MB, and emulate the banking registers. The easiest way to +do it, in my opinion, is to keep a second copy of the ROM and do memcpy()s +from that second copy to the ROM being emulated. + +For example, here is how Genital does it... I've got genesis.rom which is the +buffer where ROMs are loaded and executed. There is also genesis.rom_ssf2 +which is another 5MB buffer where I load the SSFII ROM to as well. + The bankswitching register emulation is done in my IOWriteByte() +function (which handles byte writes to the 0xA00000-0xBFFFFF range). The +following is the code I use: + +if (addr >= 0xa130f3 && config.ssf2_emu) +{ + switch (addr & 0xf) + { + case 0x3: /* 080000-0FFFFF */ + memcpy((genesis.rom + 0x080000), (genesis.rom_ssf2 + (data * 0x80000)), 0x80000); + break; + case 0x5: /* 100000-17FFFF */ + memcpy((genesis.rom + 0x100000), (genesis.rom_ssf2 + (data * 0x80000)), 0x80000); + break; + case 0x7: /* 180000-1FFFFF */ + memcpy((genesis.rom + 0x180000), (genesis.rom_ssf2 + (data * 0x80000)), 0x80000); + break; + case 0x9: /* 200000-27FFFF */ + memcpy((genesis.rom + 0x200000), (genesis.rom_ssf2 + (data * 0x80000)), 0x80000); + break; + case 0xb: /* 280000-2FFFFF */ + memcpy((genesis.rom + 0x280000), (genesis.rom_ssf2 + (data * 0x80000)), 0x80000); + break; + case 0xd: /* 300000-37FFFF */ + memcpy((genesis.rom + 0x300000), (genesis.rom_ssf2 + (data * 0x80000)), 0x80000); + break; + case 0xf: /* 380000-3FFFFF */ + memcpy((genesis.rom + 0x380000), (genesis.rom_ssf2 + (data * 0x80000)), 0x80000); + break; + default: + break; + } + return; +} + +Pardon the bad formatting, it just wouldn't fit correctly in the 80 columns +that the rest of the document sticks to. + The first line checks whether the address is 0xA130F3 or above (notice +how 0xA130F1 is ignored, SSFII doesn't really use it) and if SSFII emulation +is enabled (in Genital, I have a flag -- config.ssf2_emu -- which is set to 1 +to indicate SSFII emulation should occur.) The remainder of the code is a +switch () statement which handles the register emulation. + Since 0x80000 = 512KB, and the data variable holds the byte written to +the register, data * 0x80000 yields the offset into the ROM that has been +requested to be mapped. + At first glance, memcpy()s may seem inefficient and slow. Although it +is true, this doesn't apply to emulating SSFII since the game doesn't do much +(if any) bankswitching during gameplay. No slowdown due to the memcpy()s is +noticable. + +If you are using an emulator like Starscream which requires the ROMs to be +byteswapped, make certain both ROM images are byteswapped. If you don't use +2 copies of the ROM, you will find the game will still have several glitches +because the memcpy()s will be destroying the data they write over. + + +4. CONCLUSION + +That's all there is to it. This should be sufficient information for anyone +wishing to implement SSFII support in their Sega Genesis emulator. If you have +any questions at all (I'm not great at making things clear) feel free to email +me at trzy@powernet.net. + diff --git a/ genplus-gx/source/docs/todo.txt b/ genplus-gx/source/docs/todo.txt new file mode 100644 index 0000000..f138015 --- /dev/null +++ b/ genplus-gx/source/docs/todo.txt @@ -0,0 +1,79 @@ + + Here are some technical details about things that need to be fixed or + added to Genesis Plus. + + Missing features: + + - Support for 6-button controllers + - SRAM management + - Game Genie / PAR patch codes + + The VDP code could use a lot of cleaning up. + + The rendering code is missing a few bits: + + - Sprite collision + - Window bug + + I think the "C" 68000 emulator either has some bugs or I'm not using it + correctly. Older DOS-only versions used Turbo68K, which had ran games + much better, especially with regards to interrupt handling. + + Things that need to be fixed: + + - Raster garbage on third road in Thunder Blade. + + - Added country codes for Dragon Slayer, but game locks up after + passing country check. + + - No inputs in Samurai Shodown. + (This game doesn't initialize the port direction registers, at least not + directly. Emulation bug or problem with the game?) + + - Palette and raster problems in Mortal Kombat. + + - Bad raster effects and VRAM corruption in Super Skidmarks. + (Needs PAL timing) + + - Palette problems in Sonic 2 title screen. + + - Masked half of Sonic sprite visible on Sonic title screen. + + - Sprite masking doesn't work in Micro Machines subscreen. + + - Music has slow tempo in Batman & Robin. (doesn't seem to be a problem + with the YM2612 timers - Wonderboy 3 is normal) + + - Music has jerky playback in Sonic 2, 3, 3D Blast. If you run the Z80 + emulation for one scanline after requesting an interrupt, it runs fine. + + - DAC and PSG output are too loud, both are divided by two for now + (though the PSG should be a bit quieter and the DAC a bit louder) + + - Undead Line locks after selecting a stage, also the Z80 sound halts + after the first note is played. + + This game single steps the Z80 with the following code: + + MOVEM.L D0,-(A7) ; 009C7C 48 E7 80 00 + ORI #$0200,SR ; 009C80 00 7C 02 00 +; Get control of the Z-bus + MOVE.W #$0100,$00A11100 ; 009C84 33 FC 01 00 00 A1 11 00 + BTST #$00,$00A11100 ; 009C8C 08 39 00 00 00 A1 11 00 + BNE.S *-$08 [00009C8C] ; 009C94 66 F6 +; Check driver status byte. If zero, release bus and exit. + TST.B $00A00008 ; 009C96 4A 39 00 A0 00 08 + BEQ *+$0016 [00009CB2] ; 009C9C 67 00 00 14 +; Release bus and wait for Z80 to resume control. Then restart the loop +; and immediately get the bus back again, assuming the Z80 ran at least +; one instruction in the meantime. + CLR.W $00A11100 ; 009CA0 42 79 00 A1 11 00 + BTST #$00,$00A11100 ; 009CA6 08 39 00 00 00 A1 11 00 + BEQ.S *-$08 [00009CA6] ; 009CAE 67 F6 + BRA.S *-$2C [00009C84] ; 009CB0 60 D2 +; Release bus and exit. + CLR.W $00A11100 ; 009CB2 42 79 00 A1 11 00 + ANDI #$FDFF,SR ; 009CB8 02 7C FD FF + MOVEM.L (A7)+,D0 ; 009CBC 4C DF 00 01 + RTS ; 009CC0 4E 75 + diff --git a/ genplus-gx/source/eeprom.c b/ genplus-gx/source/eeprom.c new file mode 100644 index 0000000..52153f1 --- /dev/null +++ b/ genplus-gx/source/eeprom.c @@ -0,0 +1,445 @@ +#include "shared.h" +#include "rominfo.h" + +#define GAME_COUNT 21 + +typedef struct +{ + char game_id[14]; + uint16 chk; + T_EEPROM_TYPE type; +} T_GAME_ENTRY; + +T_GAME_ENTRY database[GAME_COUNT] = +{ + /* ACCLAIM mappers */ + /* 24C02 (old mapper) */ + {{"T-081326" }, 0, {8, 0xFF, 0xFF, 0x200000, 0x200000, 0x200000, 0, 1, 1}}, /* NBA Jam (UE) */ + {{"T-81033" }, 0, {8, 0xFF, 0xFF, 0x200000, 0x200000, 0x200000, 0, 1, 1}}, /* NBA Jam (J) */ + /* 24C02 */ + {{"T-81406" }, 0, {8, 0xFF, 0xFF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* NBA Jam TE */ + {{"T-081276" }, 0, {8, 0xFF, 0xFF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* NFL Quarterback Club */ + /* 24C16 */ + {{"T-081586" }, 0, {8, 0x7FF, 0x7FF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* NFL Quarterback Club '96 */ + /* 24C65 */ + {{"T-81576" }, 0, {16, 0x1FFF, 0x1FFF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* College Slam */ + {{"T-81476" }, 0, {16, 0x1FFF, 0x1FFF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* Frank Thomas Big Hurt Baseball */ + + /* EA mapper (24C01 only) */ + {{"T-50396" }, 0, {7, 0x7F, 0x7F, 0x200000, 0x200000, 0x200000, 7, 7, 6}}, /* NHLPA Hockey 93 (UE) */ + {{"T-50176" }, 0, {7, 0x7F, 0x7F, 0x200000, 0x200000, 0x200000, 7, 7, 6}}, /* Rings of Power */ + + /* SEGA mapper (24C01 only) */ + {{"T-12046" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Megaman - The Wily Wars */ + {{"T-12053" }, 0xEA80, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Rockman Mega World (J) [A] */ + {{"MK-1215" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Evander 'Real Deal' Holyfield's Boxing */ + {{"MK-1228" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Greatest Heavyweights of the Ring (U) */ + {{"G-5538" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Greatest Heavyweights of the Ring (J) */ + {{"PR-1993" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Greatest Heavyweights of the Ring (E) */ + {{"G-4060" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Wonderboy in Monster World */ + + /* CODEMASTERS mapper */ + /* 24C08 */ + {{"T-120096" }, 0, {8, 0x3FF, 0x3FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}}, /* Micro Machines 2 - Turbo Tournament (E) */ + {{"00000000-00"}, 0x168B, {8, 0x3FF, 0x3FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}}, /* Micro Machines Military */ + {{"00000000-00"}, 0xCEE0, {8, 0x3FF, 0x3FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}}, /* Micro Machines Military (Bad)*/ + /* 24C16 */ + {{"00000000-00"}, 0x165E, {8, 0x7FF, 0x7FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}}, /* Micro Machines Turbo Tournament 96 */ + {{"00000000-00"}, 0x2C41, {8, 0x7FF, 0x7FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}} /* Micro Machines Turbo Tournament 96 (Bad)*/ +}; + + +T_EEPROM eeprom; + +void EEPROM_Init() +{ + uint8 i = 0; + + /* initialize eeprom */ + memset(&eeprom, 0, sizeof(T_EEPROM)); + eeprom.sda = eeprom.old_sda = 1; + eeprom.scl = eeprom.old_scl = 1; + eeprom.state = STAND_BY; + + sram.custom = 0; + + /* look into game database */ + while ((i eeprom.type.sda_out_adr) sram.start = eeprom.type.sda_out_adr; + if (sram.start > eeprom.type.scl_adr) sram.start = eeprom.type.scl_adr; + } + else if ((sram.end - sram.start) < 2) + { + /* Game not found in database but header indicates it uses EEPROM */ + sram.custom = 1; + sram.on = 1; + sram.write = 1; + + /* set SEGA mapper as default */ + memcpy(&eeprom.type, &database[9].type, sizeof(T_EEPROM_TYPE)); + } +} + +static void Detect_START() +{ + if (eeprom.old_scl && eeprom.scl) + { + if (eeprom.old_sda && !eeprom.sda) + { + eeprom.cycles = 0; + eeprom.slave_mask = 0; + if (eeprom.type.address_bits == 7) + { + eeprom.word_address = 0; + eeprom.state = GET_WORD_ADR_7BITS; + } + else eeprom.state = GET_SLAVE_ADR; + } + } +} + +static void Detect_STOP() +{ + if (eeprom.old_scl && eeprom.scl) + { + if (!eeprom.old_sda && eeprom.sda) + { + eeprom.state = STAND_BY; + } + } +} + +void EEPROM_Write(unsigned int address, unsigned int value) +{ + uint16 sram_address = 0; + + /* decode SCL and SDA value */ + if (eeprom.type.sda_in_adr == address) eeprom.sda = (value >> eeprom.type.sda_in_bit) & 1; + else eeprom.sda = eeprom.old_sda; + if (eeprom.type.scl_adr == address) eeprom.scl = (value >> eeprom.type.scl_bit) & 1; + else eeprom.scl = eeprom.old_scl; + + /* EEPROM current state */ + switch (eeprom.state) + { + /* Standby Mode */ + case STAND_BY: + Detect_START(); + Detect_STOP(); + break; + + + /* Suspended Mode */ + case WAIT_STOP: + Detect_STOP(); + break; + + + /* Get Word Address 7 bits: MODE-1 only (24C01) + * and R/W bit + */ + case GET_WORD_ADR_7BITS: + Detect_START(); + Detect_STOP(); + + /* look for SCL LOW to HIGH transition */ + if (!eeprom.old_scl && eeprom.scl) + { + if (eeprom.cycles == 0) eeprom.cycles ++; + } + + + /* look for SCL HIGH to LOW transition */ + if (eeprom.old_scl && !eeprom.scl && (eeprom.cycles > 0)) + { + if (eeprom.cycles < 8) eeprom.word_address |= (eeprom.old_sda << (7 - eeprom.cycles)); + else if (eeprom.cycles == 8) eeprom.rw = eeprom.old_sda; + else + { /* ACK CYCLE */ + eeprom.cycles = 0; + eeprom.word_address &= eeprom.type.size_mask; + eeprom.state = eeprom.rw ? READ_DATA : WRITE_DATA; + } + + eeprom.cycles ++; + } + break; + + + /* Get Slave Address (3bits) : MODE-2 & MODE-3 only (24C01 - 24C512) (0-3bits, depending on the array size) + * or/and Word Address MSB: MODE-2 only (24C04 - 24C16) (0-3bits, depending on the array size) + * and R/W bit + */ + case GET_SLAVE_ADR: + + Detect_START(); + Detect_STOP(); + + /* look for SCL LOW to HIGH transition */ + if (!eeprom.old_scl && eeprom.scl) + { + if (eeprom.cycles == 0) eeprom.cycles ++; + } + + /* look for SCL HIGH to LOW transition */ + if (eeprom.old_scl && !eeprom.scl && (eeprom.cycles > 0)) + { + if ((eeprom.cycles > 4) && (eeprom.cycles <8)) + { + if ((eeprom.type.address_bits == 16) || + (eeprom.type.size_mask < (1 << (15 - eeprom.cycles)))) + { + /* this is a SLAVE ADDRESS bit */ + eeprom.slave_mask |= (eeprom.old_sda << (7 - eeprom.cycles)); + } + else + { + /* this is a WORD ADDRESS high bit */ + if (eeprom.old_sda) eeprom.word_address |= (1 << (15 - eeprom.cycles)); + else eeprom.word_address &= ~(1 << (15 - eeprom.cycles)); + } + } + else if (eeprom.cycles == 8) eeprom.rw = eeprom.old_sda; + else if (eeprom.cycles > 8) + { + /* ACK CYCLE */ + eeprom.cycles = 0; + if (eeprom.type.address_bits == 16) + { + /* two ADDRESS bytes */ + eeprom.state = eeprom.rw ? READ_DATA : GET_WORD_ADR_HIGH; + eeprom.slave_mask <<= 16; + } + else + { + /* one ADDRESS byte */ + eeprom.state = eeprom.rw ? READ_DATA : GET_WORD_ADR_LOW; + eeprom.slave_mask <<= 8; + } + } + + eeprom.cycles ++; + } + break; + + /* Get Word Address MSB (4-8bits depending on the array size) + * MODE-3 only (24C32 - 24C512) + */ + case GET_WORD_ADR_HIGH: + + Detect_START(); + Detect_STOP(); + + /* look for SCL HIGH to LOW transition */ + if (eeprom.old_scl && !eeprom.scl) + { + if (eeprom.cycles < 9) + { + if ((eeprom.type.size_mask + 1) < (1 << (17 - eeprom.cycles))) + { + /* ignored bit: slave mask should be right-shifted by one */ + eeprom.slave_mask >>= 1; + } + else + { + /* this is a WORD ADDRESS high bit */ + if (eeprom.old_sda) eeprom.word_address |= (1 << (16 - eeprom.cycles)); + else eeprom.word_address &= ~(1 << (16 - eeprom.cycles)); + } + + eeprom.cycles ++; + } + else + { + /* ACK CYCLE */ + eeprom.cycles = 1; + eeprom.state = GET_WORD_ADR_LOW; + } + } + break; + + + /* Get Word Address LSB: 7bits (24C01) or 8bits (24C02-24C512) + * MODE-2 and MODE-3 only (24C01 - 24C512) + */ + case GET_WORD_ADR_LOW: + + Detect_START(); + Detect_STOP(); + + /* look for SCL HIGH to LOW transition */ + if (eeprom.old_scl && !eeprom.scl) + { + if (eeprom.cycles < 9) + { + if ((eeprom.type.size_mask + 1) < (1 << (9 - eeprom.cycles))) + { + /* ignored bit (X24C01): slave mask should be right-shifted by one */ + eeprom.slave_mask >>= 1; + } + else + { + /* this is a WORD ADDRESS high bit */ + if (eeprom.old_sda) eeprom.word_address |= (1 << (8 - eeprom.cycles)); + else eeprom.word_address &= ~(1 << (8 - eeprom.cycles)); + } + + eeprom.cycles ++; + } + else + { + /* ACK CYCLE */ + eeprom.cycles = 1; + eeprom.word_address &= eeprom.type.size_mask; + eeprom.state = WRITE_DATA; + } + } + break; + + + /* + * Read Cycle + */ + case READ_DATA: + + Detect_START(); + Detect_STOP(); + + /* look for SCL HIGH to LOW transition */ + if (eeprom.old_scl && !eeprom.scl) + { + if (eeprom.cycles < 9) eeprom.cycles ++; + else + { + eeprom.cycles = 1; + + /* ACK not received */ + if (eeprom.old_sda) eeprom.state = WAIT_STOP; + } + } + break; + + + /* + * Write Cycle + */ + case WRITE_DATA: + + Detect_START(); + Detect_STOP(); + + /* look for SCL HIGH to LOW transition */ + if (eeprom.old_scl && !eeprom.scl) + { + if (eeprom.cycles < 9) + { + /* Write DATA bits (max 64kBytes) */ + sram_address = (eeprom.slave_mask | eeprom.word_address) & 0xFFFF; + if (eeprom.old_sda) sram.sram[sram_address] |= (1 << (8 - eeprom.cycles)); + else sram.sram[sram_address] &= ~(1 << (8 - eeprom.cycles)); + + if (eeprom.cycles == 8) + { + /* WORD ADDRESS is incremented (roll up at maximum pagesize) */ + eeprom.word_address = (eeprom.word_address & (0xFFFF - eeprom.type.pagewrite_mask)) | + ((eeprom.word_address + 1) & eeprom.type.pagewrite_mask); + } + + eeprom.cycles ++; + } + else eeprom.cycles = 1; /* ACK cycle */ + } + break; + } + + eeprom.old_scl = eeprom.scl; + eeprom.old_sda = eeprom.sda; +} + + +unsigned int EEPROM_Read(unsigned int address) +{ + uint16 sram_address; + uint8 sda_out = eeprom.sda; + + /* EEPROM state */ + switch (eeprom.state) + { + case READ_DATA: + if (eeprom.cycles < 9) + { + /* Return DATA bits (max 64kBytes) */ + sram_address = (eeprom.slave_mask | eeprom.word_address) & 0xFFFF; + sda_out = (sram.sram[sram_address] >> (8 - eeprom.cycles)) & 1; + + if (eeprom.cycles == 8) + { + /* WORD ADDRESS is incremented (roll up at maximum array size) */ + eeprom.word_address ++; + eeprom.word_address &= eeprom.type.size_mask; + } + } + break; + + case GET_WORD_ADR_7BITS: + case GET_SLAVE_ADR: + case GET_WORD_ADR_HIGH: + case GET_WORD_ADR_LOW: + case WRITE_DATA: + if (eeprom.cycles == 9) sda_out = 0; + break; + + default: + break; + } + + if (address == eeprom.type.sda_out_adr) return (sda_out << eeprom.type.sda_out_bit); + else return 0; +} diff --git a/ genplus-gx/source/eeprom.h b/ genplus-gx/source/eeprom.h new file mode 100644 index 0000000..0c0abd6 --- /dev/null +++ b/ genplus-gx/source/eeprom.h @@ -0,0 +1,64 @@ +/* this defines the type of EEPROM inside the game cartridge as Backup RAM + * Here are some notes from 8BitWizard (http://www.spritesmind.net/_GenDev/forum): + * + * Mode 1 (7-bit) - the chip takes a single byte with a 7-bit memory address and a R/W bit (24C01) + * Mode 2 (8-bit) - the chip takes a 7-bit device address and R/W bit followed by an 8-bit memory address; + * the device address may contain up to three more memory address bits (24C01 - 24C16). + * You can also string eight 24C01, four 24C02, two 24C08, or various combinations, set their address config lines correctly, + * and the result appears exactly the same as a 24C16 + * Mode 3 (16-bit) - the chip takes a 7-bit device address and R/W bit followed by a 16-bit memory address (24C32 and larger) + * + * Also, while most 24Cxx are addressed at 200000-2FFFFF, I have found two different ways of mapping the control lines. + * EA uses SDA on D7 (read/write) and SCL on D6 (write only), and I have found boards using different mapping (I think Accolade) + * which uses D1-read=SDA, D0-write=SDA, D1-write=SCL. Accolade also has a custom-chip mapper which may even use a third method. + */ + +typedef struct +{ + uint8 address_bits; /* number of bits needed to address the array: 7, 8 or 16 */ + uint16 size_mask; /* size of the array (in bytes) - 1 */ + uint16 pagewrite_mask; /* maximal number of bytes that can be written in a single write cycle - 1*/ + uint32 sda_in_adr; /* 68k address used by SDA_IN signal */ + uint32 sda_out_adr; /* 68k address used by SDA_OUT signal */ + uint32 scl_adr; /* address used by SCL signal */ + uint8 sda_in_bit; /* position of the SDA_IN bit */ + uint8 sda_out_bit; /* position of the SDA_OUT bit */ + uint8 scl_bit; /* position of the SCL bit */ + +} T_EEPROM_TYPE; + +typedef enum +{ + STAND_BY = 0, + WAIT_STOP, + GET_SLAVE_ADR, + GET_WORD_ADR_7BITS, + GET_WORD_ADR_HIGH, + GET_WORD_ADR_LOW, + WRITE_DATA, + READ_DATA, + +} T_EEPROM_STATE; + +typedef struct +{ + uint8 sda; + uint8 scl; + uint8 old_sda; + uint8 old_scl; + uint8 cycles; + uint8 rw; + uint16 slave_mask; + uint16 word_address; + T_EEPROM_STATE state; + T_EEPROM_TYPE type; +} T_EEPROM; + +/* global variables */ +extern T_EEPROM eeprom; + +/* Function prototypes */ +extern void EEPROM_Init(); +extern void EEPROM_Write(unsigned int address, unsigned int value); +extern unsigned int EEPROM_Read(unsigned int address); + diff --git a/ genplus-gx/source/genesis.c b/ genplus-gx/source/genesis.c new file mode 100644 index 0000000..f73566a --- /dev/null +++ b/ genplus-gx/source/genesis.c @@ -0,0 +1,184 @@ +/* + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "shared.h" + +uint8 *cart_rom; /* cart_rom NEED to be previously dynamically allocated */ +uint8 work_ram[0x10000]; /* 68K work RAM */ +uint8 zram[0x2000]; /* Z80 work RAM */ +uint8 zbusreq; /* /BUSREQ from Z80 */ +uint8 zreset; /* /RESET to Z80 */ +uint8 zbusack; /* /BUSACK to Z80 */ +uint8 zirq; /* /IRQ to Z80 */ +uint32 zbank; /* Address of Z80 bank window */ +uint8 gen_running; +uint32 lastbusreqcnt; +uint8 lastbusack; +uint32 genromsize; + +static int cpu_sync[512]; /* Z80-68K cycles synchronization table */ + +#ifdef LSB_FIRST +void bswap(uint8 *mem, int length) +{ + int i; + for(i = 0; i < length; i += 2) + { + uint8 temp = mem[i+0]; + mem[i+0] = mem[i+1]; + mem[i+1] = temp; + } +} +#endif + +/*--------------------------------------------------------------------------*/ +/* Init, reset, shutdown functions */ +/*--------------------------------------------------------------------------*/ + +void gen_init (void) +{ + int i; +#ifdef LSB_FIRST + bswap(cart_rom, genromsize); +#endif +#ifdef NGC + ShadowROM (); +#else + memcpy(shadow_rom,cart_rom,genromsize); +#endif + m68k_set_cpu_type (M68K_CPU_TYPE_68000); + m68k_pulse_reset (); + gen_running = 1; + for (i=0; i<512; i++) cpu_sync[i] = (int)(((double)i * 7.0) / 15.0); +} + +void gen_reset (void) +{ + /* Clear RAM */ + memset (work_ram, 0, sizeof (work_ram)); + memset (zram, 0, sizeof (zram)); + gen_running = 1; + zreset = 0; /* Z80 is reset */ + zbusreq = 0; /* Z80 has control of the Z bus */ + zbusack = 1; /* Z80 is busy using the Z bus */ + zbank = 0; /* Assume default bank is 000000-007FFF */ + zirq = 0; /* No interrupts occuring */ + lastbusreqcnt = 0; + lastbusack = 1; + + /* Reset the 68000 emulator */ + m68k_pulse_reset (); + z80_reset (0); + z80_set_irq_callback (z80_irq_callback); +} + +void gen_shutdown (void) +{ +} + +/*----------------------------------------------------------------------- + Bus controller chip functions + -----------------------------------------------------------------------*/ +int gen_busack_r (void) +{ + if (zbusack == 0) + { + if ((count_m68k + m68k_cycles_run() - lastbusreqcnt) > 16) + return 0; /* bus taken */ + else return (lastbusack&1); + } + else return 1; +} + +void gen_busreq_w (int state) +{ + int z80_cycles_to_run; + + input_raz (); + + if (state == 1) + { + /* Bus Request */ + lastbusreqcnt = count_m68k + m68k_cycles_run(); + lastbusack = zbusack; + if (zbusreq == 0) + { + /* Z80 stopped */ + /* z80 was ON during the last 68k cycles */ + /* we execute the appropriate number of z80 cycles */ + z80_cycles_to_run = aim_z80 - cpu_sync[aim_m68k - count_m68k -m68k_cycles_run()]; + if (z80_cycles_to_run > 0) z80_run(z80_cycles_to_run); + } + } + else + { + /* Bus released */ + if (zbusreq == 1) + { + /* Z80 started */ + /* z80 was OFF during the last 68k cycles */ + /* we burn the appropriate number of z80 cycles */ + z80_cycles_to_run = aim_z80 - cpu_sync[aim_m68k - count_m68k - m68k_cycles_run()]; + if (z80_cycles_to_run > 0) count_z80 = z80_cycles_to_run; + } + } + zbusreq = (state & 1); + zbusack = 1 ^ (zbusreq & zreset); +} + +void gen_reset_w (int state) +{ + zreset = (state & 1); + zbusack = 1 ^ (zbusreq & zreset); + + if (zreset == 0) + { + lastbusreqcnt = 0; + lastbusack = 1; + fm_reset(); + z80_reset (0); + z80_set_irq_callback (z80_irq_callback); + } +} + +void gen_bank_w (int state) +{ + zbank = ((zbank >> 1) | ((state & 1) << 23)) & 0xFF8000; +} + +int z80_irq_callback (int param) +{ + zirq = 0; + z80_set_irq_line (0, CLEAR_LINE); + return 0xFF; +} + +int vdp_int_ack_callback (int int_level) +{ + switch (int_level) + { + case 4: + hint_pending = 0; + vint_pending = 0; + break; + case 6: + vint_pending = 0; + break; + } + return M68K_INT_ACK_AUTOVECTOR; +} diff --git a/ genplus-gx/source/genesis.h b/ genplus-gx/source/genesis.h new file mode 100644 index 0000000..f425dc4 --- /dev/null +++ b/ genplus-gx/source/genesis.h @@ -0,0 +1,32 @@ + +#ifndef _GENESIS_H_ +#define _GENESIS_H_ + +/* Global variables */ +extern uint8 *cart_rom; +extern uint8 work_ram[0x10000]; +extern uint8 zram[0x2000]; +extern uint8 zbusreq; +extern uint8 zbusack; +extern uint8 zreset; +extern uint8 zirq; +extern uint32 zbank; +extern uint8 gen_running; +extern uint32 lastbusreqcnt; +extern uint8 lastbusack; +extern uint32 genromsize; + +/* Function prototypes */ +void gen_init(void); +void gen_reset(void); +void gen_shutdown(void); +int gen_busack_r(void); +void gen_busreq_w(int state); +void gen_reset_w(int state); +void gen_bank_w(int state); +void bswap(uint8 *mem, int length); +int z80_irq_callback(int param); +void m68k_irq_ack_callback(int int_level); + +#endif /* _GEN_H_ */ + diff --git a/ genplus-gx/source/hvc.h b/ genplus-gx/source/hvc.h new file mode 100644 index 0000000..8d41304 --- /dev/null +++ b/ genplus-gx/source/hvc.h @@ -0,0 +1,440 @@ + +#ifndef _HVC_H_ +#define _HVC_H_ + +/* V counter values for NTSC 192-line display */ +uint8 vc_ntsc_192[262] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, + 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF +}; + +/* V counter values for NTSC 224-line display */ +uint16 vc_ntsc_224[262] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, + 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF +}; + +/* V counter values for NTSC 240-line display */ +uint8 vc_ntsc_240[262] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 +}; + +/* V counter values for PAL 192-line display */ +uint8 vc_pal_192[313] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, + 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF +}; + +/* V counter values for PAL 224-line display */ +uint16 vc_pal_224[313] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0x100, 0x101, 0x102, + 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF +}; + +/* V counter values for PAL 240-line display */ +uint16 vc_pal_240[313] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10A, + 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, +}; + +/* + VDP timing for an NTSC Genesis in display mode 5. + Version 0.4 (11/29/00) + + by Charles MacDonald + WWW: http://cgfm2.emuviews.com + + Unpublished work Copyright 2000 Charles MacDonald + + Description 32-cell 40-cell + ---------------------------------------------------------------------------- + Range 00-93, E9-FF 00-B6, E4-FF + Display area 00-7F 00-9F + V counter increment 84, 85 A4, A5 + V-blanking in 86, 87 A7, A8 + V-blanking out 86, 87 A7, A8 + H-blanking in 93, E9 B2, E4 + H-blanking out 06, 07 06, 07 + + Comma seperated values show the H counter value before an event occurs, + and then the H counter value immediately after. + + These values shouldn't be considered 100% accurate, they are probably + off by one or two. + + Each H counter unit is equivalent to two pixels. + + The gaps at 93-E9 and B6-E4 are where the H counter 'jumps' ahead. + The H counter will never actually be set to the values 94-E8 or B7-E3. + Perhaps this is the horizontal retrace period. + + Interestingly enough, the timing values for the 32-cell display mode + are identical to that of the SMS. + + It would appear that in 40-cell mode, the horizontal blanking period + is shorter as the active display period takes more time. + + The V-blanking flag can also be forcibly set by disabling the display + through bit 6 of register #1. + +*/ + +/* +uint8 cycle2hc32[488] = { + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, + 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, + 0x0B, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x10, 0x10, + 0x10, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x14, 0x14, 0x15, 0x15, 0x15, 0x16, + 0x16, 0x16, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, + 0x1C, 0x1C, 0x1C, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x21, + 0x21, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x26, 0x26, 0x26, + 0x27, 0x27, 0x27, 0x28, 0x28, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2B, 0x2B, 0x2B, 0x2C, 0x2C, + 0x2C, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x2F, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x32, + 0x32, 0x32, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x35, 0x36, 0x36, 0x36, 0x37, 0x37, 0x37, + 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x3A, 0x3A, 0x3A, 0x3B, 0x3B, 0x3B, 0x3C, 0x3C, 0x3D, 0x3D, + 0x3D, 0x3E, 0x3E, 0x3E, 0x3F, 0x3F, 0x3F, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, + 0x43, 0x43, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x46, 0x46, 0x46, 0x47, 0x47, 0x47, 0x48, 0x48, + 0x48, 0x49, 0x49, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x4C, 0x4C, 0x4C, 0x4D, 0x4D, 0x4D, 0x4E, + 0x4E, 0x4E, 0x4F, 0x4F, 0x4F, 0x50, 0x50, 0x51, 0x51, 0x51, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, + 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x56, 0x56, 0x56, 0x57, 0x57, 0x58, 0x58, 0x58, 0x59, 0x59, + 0x59, 0x5A, 0x5A, 0x5A, 0x5B, 0x5B, 0x5B, 0x5C, 0x5C, 0x5C, 0x5D, 0x5D, 0x5E, 0x5E, 0x5E, 0x5F, + 0x5F, 0x5F, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x64, 0x64, + 0x65, 0x65, 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69, 0x6A, + 0x6A, 0x6A, 0x6B, 0x6B, 0x6C, 0x6C, 0x6C, 0x6D, 0x6D, 0x6D, 0x6E, 0x6E, 0x6E, 0x6F, 0x6F, 0x6F, + 0x70, 0x70, 0x70, 0x71, 0x71, 0x72, 0x72, 0x72, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, + 0x75, 0x76, 0x76, 0x76, 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7A, 0x7A, 0x7A, 0x7B, + 0x7B, 0x7B, 0x7C, 0x7C, 0x7C, 0x7D, 0x7D, 0x7D, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x80, 0x80, 0x80, + 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x86, + 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8A, 0x8A, 0x8A, 0x8B, 0x8B, 0x8B, + 0x8C, 0x8C, 0x8D, 0x8D, 0x8D, 0x8E, 0x8E, 0x8E, 0x8F, 0x8F, 0x8F, 0x90, 0x90, 0x90, 0x91, 0x91, + 0x91, 0x92, 0x92, 0x92, 0x93, 0x93, + 0xE9, 0xE9, 0xE9, 0xEA, 0xEA, 0xEA, 0xEB, 0xEB, 0xEB, 0xEC, + 0xEC, 0xEC, 0xED, 0xED, 0xED, 0xEE, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, + 0xF2, 0xF2, 0xF2, 0xF3, 0xF3, 0xF3, 0xF4, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF6, 0xF7, 0xF7, + 0xF7, 0xF8, 0xF8, 0xF8, 0xF9, 0xF9, 0xF9, 0xFA, 0xFA, 0xFA, 0xFB, 0xFB, 0xFB, 0xFC, 0xFC, 0xFD, + 0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF +}; +*/ + +uint8 cycle2hc32[489] = { + 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xed, + 0xed, 0xed, 0xee, 0xee, 0xee, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, + 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf8, 0xf8, + 0xf8, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, + 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09, + 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, + 0x0f, 0x0f, 0x0f, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x14, + 0x14, 0x14, 0x15, 0x15, 0x15, 0x16, 0x16, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, + 0x1a, 0x1a, 0x1a, 0x1b, 0x1b, 0x1b, 0x1c, 0x1c, 0x1c, 0x1d, 0x1d, 0x1d, 0x1e, 0x1e, 0x1f, 0x1f, + 0x1f, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, + 0x25, 0x25, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x2a, 0x2a, + 0x2a, 0x2b, 0x2b, 0x2b, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x30, + 0x30, 0x30, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x35, + 0x36, 0x36, 0x36, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x3a, 0x3a, 0x3a, 0x3b, + 0x3b, 0x3b, 0x3c, 0x3c, 0x3d, 0x3d, 0x3d, 0x3e, 0x3e, 0x3e, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x40, + 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x44, 0x44, 0x45, 0x45, 0x45, 0x46, 0x46, + 0x46, 0x47, 0x47, 0x47, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, + 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4e, 0x4e, 0x4e, 0x4f, 0x4f, 0x4f, 0x50, 0x50, 0x50, 0x51, 0x51, + 0x51, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x55, 0x56, 0x56, 0x56, 0x57, + 0x57, 0x57, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c, + 0x5d, 0x5d, 0x5d, 0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x62, + 0x62, 0x62, 0x63, 0x63, 0x64, 0x64, 0x64, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, + 0x68, 0x68, 0x68, 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, + 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x72, 0x72, 0x72, + 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76, 0x76, 0x76, 0x77, 0x77, 0x77, 0x78, 0x78, + 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, + 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x83, + 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, + 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, + 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92 +}; + + +/* +uint8 cycle2hc32[489] = { + 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xee, + 0xee, 0xee, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, + 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf9, 0xf9, + 0xf9, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, + 0x04, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0a, + 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, + 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x15, + 0x15, 0x15, 0x16, 0x16, 0x16, 0x17, 0x17, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x1a, 0x1a, 0x1a, + 0x1b, 0x1b, 0x1b, 0x1c, 0x1c, 0x1c, 0x1d, 0x1d, 0x1d, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x20, 0x20, + 0x20, 0x21, 0x21, 0x21, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, + 0x26, 0x26, 0x27, 0x27, 0x27, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x2a, 0x2a, 0x2a, 0x2b, 0x2b, + 0x2b, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x30, 0x30, 0x30, 0x31, + 0x31, 0x31, 0x32, 0x32, 0x32, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x35, 0x35, 0x36, 0x36, + 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x3a, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c, + 0x3c, 0x3c, 0x3d, 0x3d, 0x3e, 0x3e, 0x3e, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, + 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45, 0x45, 0x46, 0x46, 0x46, 0x47, 0x47, + 0x47, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c, 0x4c, + 0x4d, 0x4d, 0x4e, 0x4e, 0x4e, 0x4f, 0x4f, 0x4f, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x52, 0x52, + 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x58, + 0x58, 0x58, 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5d, 0x5d, 0x5d, + 0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, + 0x63, 0x63, 0x64, 0x64, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, + 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6b, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, + 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x72, 0x72, 0x72, 0x73, 0x73, 0x73, + 0x74, 0x74, 0x75, 0x75, 0x75, 0x76, 0x76, 0x76, 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, + 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, + 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, + 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, + 0x8a, 0x8a, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, + 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92, 0x93 +};*/ + + +/* +uint8 cycle2hc40[488] = { + 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, + 0x06, 0x07, 0x07, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C, 0x0D, + 0x0D, 0x0E, 0x0E, 0x0F, 0x0F, 0x10, 0x10, 0x10, 0x11, 0x11, 0x12, 0x12, 0x13, 0x13, 0x13, 0x14, + 0x14, 0x15, 0x15, 0x16, 0x16, 0x16, 0x17, 0x17, 0x18, 0x18, 0x19, 0x19, 0x19, 0x1A, 0x1A, 0x1B, + 0x1B, 0x1C, 0x1C, 0x1C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, + 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28, 0x29, + 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x30, + 0x30, 0x30, 0x31, 0x31, 0x32, 0x32, 0x33, 0x33, 0x33, 0x34, 0x34, 0x35, 0x35, 0x36, 0x36, 0x36, + 0x37, 0x37, 0x38, 0x38, 0x39, 0x39, 0x39, 0x3A, 0x3A, 0x3B, 0x3B, 0x3C, 0x3C, 0x3D, 0x3D, 0x3D, + 0x3E, 0x3E, 0x3F, 0x3F, 0x40, 0x40, 0x40, 0x41, 0x41, 0x42, 0x42, 0x43, 0x43, 0x43, 0x44, 0x44, + 0x45, 0x45, 0x46, 0x46, 0x46, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, + 0x4C, 0x4C, 0x4D, 0x4D, 0x4D, 0x4E, 0x4E, 0x4F, 0x4F, 0x50, 0x50, 0x50, 0x51, 0x51, 0x52, 0x52, + 0x53, 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x57, 0x57, 0x58, 0x58, 0x59, 0x59, + 0x5A, 0x5A, 0x5A, 0x5B, 0x5B, 0x5C, 0x5C, 0x5D, 0x5D, 0x5D, 0x5E, 0x5E, 0x5F, 0x5F, 0x60, 0x60, + 0x60, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x63, 0x64, 0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, + 0x67, 0x68, 0x68, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x6C, 0x6C, 0x6D, 0x6D, 0x6D, 0x6E, + 0x6E, 0x6F, 0x6F, 0x70, 0x70, 0x70, 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x73, 0x74, 0x74, 0x75, + 0x75, 0x76, 0x76, 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x7A, 0x7A, 0x7A, 0x7B, 0x7B, 0x7C, + 0x7C, 0x7D, 0x7D, 0x7D, 0x7E, 0x7E, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x81, 0x81, 0x82, 0x82, 0x83, + 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x89, 0x89, 0x8A, + 0x8A, 0x8A, 0x8B, 0x8B, 0x8C, 0x8C, 0x8D, 0x8D, 0x8D, 0x8E, 0x8E, 0x8F, 0x8F, 0x90, 0x90, 0x90, + 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95, 0x95, 0x96, 0x96, 0x97, 0x97, 0x97, + 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9B, 0x9B, 0x9C, 0x9C, 0x9D, 0x9D, 0x9D, 0x9E, 0x9E, + 0x9F, 0x9F, 0xA0, 0xA0, 0xA1, 0xA1, 0xA1, 0xA2, 0xA2, 0xA3, 0xA3, 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, + 0xA6, 0xA6, 0xA7, 0xA7, 0xA7, 0xA8, 0xA8, 0xA9, 0xA9, 0xAA, 0xAA, 0xAA, 0xAB, 0xAB, 0xAC, 0xAC, + 0xAD, 0xAD, 0xAD, 0xAE, 0xAE, 0xAF, 0xAF, 0xB0, 0xB0, 0xB1, 0xB1, 0xB1, 0xB2, 0xB2, 0xB3, 0xB3, + 0xB4, 0xB4, 0xB4, 0xB5, 0xB5, 0xB6, 0xB6, + 0xE4, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE7, 0xE7, + 0xE7, 0xE8, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED, 0xEE, 0xEE, + 0xEE, 0xEF, 0xEF, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF4, 0xF5, + 0xF5, 0xF6, 0xF6, 0xF7, 0xF7, 0xF7, 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFB, 0xFC, + 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF +};*/ + +uint8 cycle2hc40[489] = { + 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe9, 0xe9, 0xea, 0xea, + 0xea, 0xeb, 0xeb, 0xec, 0xec, 0xed, 0xed, 0xed, 0xee, 0xee, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf1, + 0xf1, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf8, + 0xf8, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfe, 0xfe, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x05, + 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, + 0x0d, 0x0d, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x10, 0x10, 0x11, 0x11, 0x12, 0x12, 0x12, 0x13, 0x13, + 0x14, 0x14, 0x15, 0x15, 0x15, 0x16, 0x16, 0x17, 0x17, 0x18, 0x18, 0x18, 0x19, 0x19, 0x1a, 0x1a, + 0x1b, 0x1b, 0x1b, 0x1c, 0x1c, 0x1d, 0x1d, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x21, 0x21, + 0x21, 0x22, 0x22, 0x23, 0x23, 0x24, 0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x27, 0x28, + 0x28, 0x29, 0x29, 0x2a, 0x2a, 0x2b, 0x2b, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2e, 0x2e, 0x2e, 0x2f, + 0x2f, 0x30, 0x30, 0x31, 0x31, 0x31, 0x32, 0x32, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x35, 0x36, + 0x36, 0x37, 0x37, 0x37, 0x38, 0x38, 0x39, 0x39, 0x3a, 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3c, 0x3d, + 0x3d, 0x3d, 0x3e, 0x3e, 0x3f, 0x3f, 0x40, 0x40, 0x40, 0x41, 0x41, 0x42, 0x42, 0x43, 0x43, 0x43, + 0x44, 0x44, 0x45, 0x45, 0x46, 0x46, 0x46, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49, 0x49, 0x4a, 0x4a, + 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4e, 0x4e, 0x4f, 0x4f, 0x50, 0x50, 0x50, 0x51, 0x51, + 0x52, 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x57, 0x57, 0x58, 0x58, + 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c, 0x5d, 0x5d, 0x5e, 0x5e, 0x5f, 0x5f, + 0x5f, 0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, 0x64, 0x64, 0x65, 0x65, 0x65, 0x66, + 0x66, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x6a, 0x6a, 0x6b, 0x6b, 0x6b, 0x6c, 0x6c, 0x6d, + 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71, 0x72, 0x72, 0x72, 0x73, 0x73, 0x74, + 0x74, 0x75, 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x7a, 0x7a, 0x7b, + 0x7b, 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, + 0x82, 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, + 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8c, 0x8c, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x8f, + 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95, 0x95, 0x96, 0x96, + 0x97, 0x97, 0x97, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d, + 0x9d, 0x9e, 0x9e, 0x9f, 0x9f, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, + 0xa4, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa7, 0xa7, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xab, + 0xab, 0xac, 0xac, 0xac, 0xad, 0xad, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1, 0xb1, 0xb2, + 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4, 0xb5, 0xb5, 0xb6 +}; + +/* +uint8 cycle2hc40[489] = { + 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xea, + 0xea, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xed, 0xed, 0xee, 0xee, 0xee, 0xef, 0xef, 0xf0, 0xf0, 0xf1, + 0xf1, 0xf1, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, + 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfd, 0xfd, 0xfe, 0xfe, + 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x05, + 0x05, 0x06, 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, + 0x0c, 0x0c, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x10, 0x10, 0x10, 0x11, 0x11, 0x12, 0x12, + 0x13, 0x13, 0x13, 0x14, 0x14, 0x15, 0x15, 0x15, 0x16, 0x16, 0x17, 0x17, 0x18, 0x18, 0x18, 0x19, + 0x19, 0x1a, 0x1a, 0x1b, 0x1b, 0x1b, 0x1c, 0x1c, 0x1d, 0x1d, 0x1d, 0x1e, 0x1e, 0x1f, 0x1f, 0x20, + 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x25, 0x25, 0x25, 0x26, 0x26, + 0x27, 0x27, 0x28, 0x28, 0x28, 0x29, 0x29, 0x2a, 0x2a, 0x2a, 0x2b, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, + 0x2d, 0x2e, 0x2e, 0x2f, 0x2f, 0x30, 0x30, 0x30, 0x31, 0x31, 0x32, 0x32, 0x32, 0x33, 0x33, 0x34, + 0x34, 0x35, 0x35, 0x35, 0x36, 0x36, 0x37, 0x37, 0x38, 0x38, 0x38, 0x39, 0x39, 0x3a, 0x3a, 0x3a, + 0x3b, 0x3b, 0x3c, 0x3c, 0x3d, 0x3d, 0x3d, 0x3e, 0x3e, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x41, 0x41, + 0x42, 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x45, 0x45, 0x45, 0x46, 0x46, 0x47, 0x47, 0x47, 0x48, + 0x48, 0x49, 0x49, 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4e, 0x4e, 0x4f, + 0x4f, 0x4f, 0x50, 0x50, 0x51, 0x51, 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x55, + 0x56, 0x56, 0x57, 0x57, 0x57, 0x58, 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, + 0x5c, 0x5d, 0x5d, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, + 0x63, 0x64, 0x64, 0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69, 0x6a, + 0x6a, 0x6a, 0x6b, 0x6b, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, + 0x71, 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, + 0x77, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7e, + 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, + 0x85, 0x85, 0x86, 0x86, 0x86, 0x87, 0x87, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b, + 0x8c, 0x8c, 0x8c, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, + 0x92, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95, 0x95, 0x96, 0x96, 0x96, 0x97, 0x97, 0x98, 0x98, 0x99, + 0x99, 0x99, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f, + 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa5, 0xa5, 0xa6, 0xa6, + 0xa6, 0xa7, 0xa7, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xab, 0xab, 0xab, 0xac, 0xac, 0xad, + 0xad, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1 +}; +*/ + + + +/* H counter values for a 256-pixel wide display (342 pixel max.) */ +/*uint8 hc_256[171] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, + 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF +};*/ + +/* H counter values for a 320-pixel wide display (422 pixels max.) */ +/*uint8 hc_320[211] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, + 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF +};*/ + +/*uint8 *hc_table[2] = { + hc_256, + hc_320, +};*/ + +#endif /* _HVC_H_ */ + diff --git a/ genplus-gx/source/input.c b/ genplus-gx/source/input.c new file mode 100644 index 0000000..0b2b5c3 --- /dev/null +++ b/ genplus-gx/source/input.c @@ -0,0 +1,508 @@ +/* + Copyright (C) 1999, 2000, 2001, 2002, 2003 Charles MacDonald + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +/* + NGC port (June 2007): Added various Peripherals emulation (Eke-Eke) +*/ + +#include "shared.h" + +t_input input; +uint8 current_pad = 0; +uint8 j_cart = 0; + +void gamepad_reset(uint8 num); +void gamepad_update(uint8 num); +void gamepad_raz(uint8 num); +void lightgun_update(void); +void lightgun_reset(void); +void teamplayer_reset(uint8 port); + +/***************************************************************************** + * Generic INPUTS Control + * + *****************************************************************************/ +void input_reset (int padtype) +{ + uint8 i; + + input.max = 0; + for (i=0; i MAX_INPUTS) input.max = MAX_INPUTS; + + /* J-CART: add two gamepad inputs */ + if (j_cart) + { + input.dev[5] = padtype; + input.dev[6] = padtype; + gamepad_reset(5); + gamepad_reset(6); + input.max+=2; + } +} + +void input_update() +{ + uint8 i; + switch (input.system[0]) + { + case SYSTEM_GAMEPAD: + if (input.dev[0] == DEVICE_6BUTTON) gamepad_update(0); + break; + + case SYSTEM_WAYPLAY: + for (i=0; i<4; i++) + { + if (input.dev[i] == DEVICE_6BUTTON) gamepad_update(i); + } + break; + } + + switch (input.system[1]) + { + case SYSTEM_GAMEPAD: + if (input.dev[4] == DEVICE_6BUTTON) gamepad_update(4); + break; + + case SYSTEM_MENACER: + lightgun_update(); + break; + } +} + +void input_raz() +{ + uint8 i; + switch (input.system[0]) + { + case SYSTEM_GAMEPAD: + if (input.dev[0] == DEVICE_6BUTTON) gamepad_raz(0); + break; + + case SYSTEM_WAYPLAY: + for (i=0; i<4; i++) + { + if (input.dev[i] == DEVICE_6BUTTON) gamepad_raz(i); + } + break; + } + + switch (input.system[1]) + { + case SYSTEM_GAMEPAD: + if (input.dev[4] == DEVICE_6BUTTON) gamepad_raz(4); + break; + } +} + +/***************************************************************************** + * LIGHTGUN specific functions + * + *****************************************************************************/ +struct gun +{ + int16 x; + int16 y; +} lightgun; + +void lightgun_reset(void) +{ + lightgun.x = bitmap.viewport.w >> 1; + lightgun.y = bitmap.viewport.h >> 1; +} + +void lightgun_update(void) +{ + if ((v_counter == lightgun.y)) + { + if (reg[0x0B] & 8) m68k_set_irq(2); + if (reg[0x00] & 2) + { + hc_latch = lightgun.x + 166; + if (hc_latch >= bitmap.viewport.w + 52) hc_latch -= (bitmap.viewport.w + 52 + 48); + hc_latch >>= 1; + } + } +} + +void lightgun_set () +{ + if ((input.pad[4] & INPUT_RIGHT)) lightgun.x ++; + if ((input.pad[4] & INPUT_LEFT)) lightgun.x --; + if ((input.pad[4] & INPUT_UP)) lightgun.y --; + if ((input.pad[4] & INPUT_DOWN)) lightgun.y ++; + + if (lightgun.x < 0) lightgun.x = 0; + else if (lightgun.x > bitmap.viewport.w-34) lightgun.x = bitmap.viewport.w-34; + + if (lightgun.y < 0) lightgun.y = 0; + else if (lightgun.y > bitmap.viewport.h-8) lightgun.y = bitmap.viewport.h-8; +} + +uint8 lightgun_read (void) +{ + uint8 retval = 0x00; + if ((input.pad[4] & INPUT_B)) retval |= 0x01; + if ((input.pad[4] & INPUT_A)) retval |= 0x02; + if ((input.pad[4] & INPUT_C)) retval |= 0x04; + if ((input.pad[4] & INPUT_START)) retval |= 0x08; + return (retval & 0x7F); +} + + +/***************************************************************************** + * GAMEPAD specific functions (2PLAYERS/4WAYPLAY) + * + *****************************************************************************/ +struct pad +{ + uint8 State; + uint8 Counter; + uint8 Delay; +} gamepad[MAX_DEVICES]; + +void gamepad_reset(uint8 i) +{ + gamepad[i].State = 0x40; + if (input.dev[i] == DEVICE_6BUTTON) gamepad_raz(i); +} + +void gamepad_raz(uint8 i) +{ + gamepad[i].Counter = 0; + gamepad[i].Delay = 0; +} + +void gamepad_update(uint8 i) +{ + if (gamepad[i].Delay++ > 25) gamepad_raz(i); +} + +uint8 gamepad_read (uint8 i) +{ + int control; + unsigned char retval = 0xFF; + + if (input.dev[i] == NO_DEVICE) return 0x7F; + + control = (gamepad[i].State & 0x40) >> 6; /* current TH state */ + + if (input.dev[i] == DEVICE_6BUTTON) + { + control += (gamepad[i].Counter & 3) << 1; /* TH transitions counter */ + } + + switch (control) + { + case 1: /*** First High ***/ + case 3: /*** Second High ***/ + case 5: /*** Third High ***/ + + /* TH = 1 : ?1CBRLDU */ + if (input.pad[i] & INPUT_C) retval &= ~0x20; + if (input.pad[i] & INPUT_B) retval &= ~0x10; + if (input.pad[i] & INPUT_UP) retval &= ~0x01; + if (input.pad[i] & INPUT_DOWN) retval &= ~0x02; + if (input.pad[i] & INPUT_LEFT) retval &= ~0x04; + if (input.pad[i] & INPUT_RIGHT) retval &= ~0x08; + break; + + case 0: /*** First low ***/ + case 2: /*** Second low ***/ + + /* TH = 0 : ?0SA00DU */ + if (input.pad[i] & INPUT_A) retval &= ~0x10; + if (input.pad[i] & INPUT_START) retval &= ~0x20; + if (input.pad[i] & INPUT_UP) retval &= ~0x01; + if (input.pad[i] & INPUT_DOWN) retval &= ~0x02; + retval &= 0xB3; + break; + + /* 6buttons specific (taken from gen-hw.txt) */ + /* A 6-button gamepad allows the extra buttons to be read based on how */ + /* many times TH is switched from 1 to 0 (and not 0 to 1). Observe the */ + /* following sequence */ + /* + TH = 1 : ?1CBRLDU 3-button pad return value + TH = 0 : ?0SA00DU 3-button pad return value + TH = 1 : ?1CBRLDU 3-button pad return value + TH = 0 : ?0SA0000 D3-0 are forced to '0' + TH = 1 : ?1CBMXYZ Extra buttons returned in D3-0 + TH = 0 : ?0SA1111 D3-0 are forced to '1' + */ + case 4: /*** Third Low ***/ + + /* TH = 0 : ?0SA0000 D3-0 are forced to '0'*/ + if (input.pad[i] & INPUT_A) retval &= ~0x10; + if (input.pad[i] & INPUT_START) retval &= ~0x20; + retval &= 0xB0; + break; + + case 6: /*** Fourth Low ***/ + + /* TH = 0 : ?0SA1111 D3-0 are forced to '1'*/ + if (input.pad[i] & INPUT_A) retval &= ~0x10; + if (input.pad[i] & INPUT_START) retval &= ~0x20; + retval &= 0xBF; + break; + + case 7: /*** Fourth High ***/ + + /* TH = 1 : ?1CBMXYZ Extra buttons returned in D3-0*/ + if (input.pad[i] & INPUT_X) retval &= ~0x04; + if (input.pad[i] & INPUT_Y) retval &= ~0x02; + if (input.pad[i] & INPUT_Z) retval &= ~0x01; + if (input.pad[i] & INPUT_B) retval &= ~0x10; + if (input.pad[i] & INPUT_C) retval &= ~0x20; + if (input.pad[i] & INPUT_MODE) retval &= ~0x08; + break; + + default: + break; + } + + /* bit7 is latched*/ + return (retval&0x7f); +} + +void gamepad_write (uint8 i, uint8 data) +{ + if (input.dev[i] == DEVICE_6BUTTON) + { + /* TH=0 to TH=1 transition */ + if (!(gamepad[i].State & 0x40) && (data & 0x40)) + { + gamepad[i].Counter++; + gamepad[i].Delay = 0; + } + } + + gamepad[i].State = data; +} + + +/***************************************************************************** + * TEAMPLAYER specific functions + * + *****************************************************************************/ +struct teamplayer +{ + uint8 State; + uint8 Counter; + uint8 Table[12]; +} teamplayer[2]; + +void teamplayer_reset(uint8 port) +{ + uint8 i; + uint8 index = 0; + uint8 pad_input = 0; + + teamplayer[port].State = 0x60; /* TH = 1, TR = 1 */ + teamplayer[port].Counter = 0; + + /* this table determines which gamepad input should be returned during acquisition sequence + index = teamplayer read table index: 0=1st read, 1=2nd read, ... + pad_input = gamepad input 0-14: 0=P1_DIR, 1=P1_SABC, 2=P1_MXYZ, 4=P2_DIR, 5=P2_SABC, ... + */ + for (i=0; i<4; i++) + { + if (input.dev[(4*port) + i] == DEVICE_3BUTTON) + { + teamplayer[port].Table[index++] = pad_input; + teamplayer[port].Table[index++] = pad_input + 1; + } + else if (input.dev[(4*port) + i] == DEVICE_6BUTTON) + { + teamplayer[port].Table[index++] = pad_input; + teamplayer[port].Table[index++] = pad_input + 1; + teamplayer[port].Table[index++] = pad_input + 2; + } + pad_input += 4; + } +} + + +/* SEGA teamplayer returns successively: + - PAD1 inputs + - PAD2 inputs + - PAD3 inputs + - PAD4 inputs + + Each PAD inputs is obtained through 2 or 3 sequential reads: + 1/ DIR buttons + 2/ START,A,C,B buttons + 3/ MODE, X,Y,Z buttons (6Button only !) +*/ +uint8 teamplayer_read(uint8 port, uint8 index) +{ + uint8 retval = 0x7F; + uint8 pad_input = teamplayer[port].Table[index] & 0x03; + uint8 pad_num = (4 * port) + ((teamplayer[port].Table[index] >> 2) & 0x03); + + switch (pad_input) + { + case 0: + /* Directions Buttons */ + if (input.pad[pad_num] & INPUT_UP) retval &= ~0x01; + if (input.pad[pad_num] & INPUT_DOWN) retval &= ~0x02; + if (input.pad[pad_num] & INPUT_LEFT) retval &= ~0x04; + if (input.pad[pad_num] & INPUT_RIGHT) retval &= ~0x08; + break; + + case 1: + /* S,A,C,B Buttons */ + if (input.pad[pad_num] & INPUT_B) retval &= ~0x01; + if (input.pad[pad_num] & INPUT_C) retval &= ~0x02; + if (input.pad[pad_num] & INPUT_A) retval &= ~0x04; + if (input.pad[pad_num] & INPUT_START) retval &= ~0x08; + break; + + case 2: + /* M,X,Y,Z Buttons (6-Buttons only)*/ + if (input.pad[pad_num] & INPUT_Z) retval &= ~0x01; + if (input.pad[pad_num] & INPUT_Y) retval &= ~0x02; + if (input.pad[pad_num] & INPUT_X) retval &= ~0x04; + if (input.pad[pad_num] & INPUT_MODE) retval &= ~0x08; + break; + } + + return retval; +} + +/***************************************************************************** + * MULTITAP generic functions (TEAMPLAYER/4WAYPLAY) + * + *****************************************************************************/ +void multitap_write (uint8 port, uint8 data) +{ + uint8 old_state; + switch (input.system[port]) + { + case SYSTEM_WAYPLAY: + if (!port) gamepad_write(current_pad, data); + else current_pad = (data >> 4) & 0x07; + break; + + case SYSTEM_TEAMPLAYER: + old_state = teamplayer[port].State; + teamplayer[port].State = (data & io_reg[port+4]) | (teamplayer[port].State & ~io_reg[port+4]); + if (old_state != teamplayer[port].State) teamplayer[port].Counter ++; + if ((data&0x60) == 0x60) teamplayer[port].Counter = 0; + break; + } +} + +uint8 multitap_read (uint8 port) +{ + uint8 retval = 0x7F; + uint8 padnum; + + switch (input.system[port]) + { + case SYSTEM_WAYPLAY: + if (port == 1) return 0x7F; + if (current_pad >= 4) return 0x70; /* multitap detection (TH2 = 1) */ + return gamepad_read(current_pad); /* 0x0C = Pad1, 0x1C = Pad2, ... */ + + case SYSTEM_TEAMPLAYER: + switch (teamplayer[port].Counter) /* acquisition sequence steps */ + { + case 0: /* initial state: TH = 1, TR = 1 */ + retval = 0x73; + break; + + case 1: /* start request: TH = 0, TR = 1 */ + retval = 0x3F; + break; + + case 2: + case 3: /* ack request: TH=0, TR handshake */ + retval = 0x00; + break; + + case 4: + case 5: + case 6: + case 7: /* gamepads type */ + padnum = (4 * port) + teamplayer[port].Counter - 4; + retval = input.dev[padnum]; + break; + + default: /* gamepads inputs acquisition */ + retval = teamplayer_read(port, teamplayer[port].Counter - 8); + break; + } + + /* TL must match TR state */ + retval &= ~0x10; + if (teamplayer[port].State & 0x20) retval |= 0x10; + return retval; + } + return retval; +} diff --git a/ genplus-gx/source/input.h b/ genplus-gx/source/input.h new file mode 100644 index 0000000..29b8be0 --- /dev/null +++ b/ genplus-gx/source/input.h @@ -0,0 +1,63 @@ +#ifndef _INPUT_H_ +#define _INPUT_H_ +#include "types.h" + +/* Input devices */ +#ifdef NGC +#define MAX_INPUTS (4) +#else +#define MAX_INPUTS (8) +#endif +#define MAX_DEVICES (8) +#define DEVICE_3BUTTON (0x00) /* 3-button gamepad */ +#define DEVICE_6BUTTON (0x01) /* 6-button gamepad */ +#define DEVICE_MOUSE (0x02) /* Sega Mouse (not supported) */ +#define DEVICE_LIGHTGUN (0x03) /* Sega Menacer */ +#define DEVICE_2BUTTON (0x04) /* 2-button gamepad (not supported) */ +#define NO_DEVICE (0x0F) /* unconnected */ + +/* Input bitmasks */ +#define INPUT_MODE (0x00000800) +#define INPUT_Z (0x00000400) +#define INPUT_Y (0x00000200) +#define INPUT_X (0x00000100) +#define INPUT_START (0x00000080) +#define INPUT_C (0x00000040) +#define INPUT_B (0x00000020) +#define INPUT_A (0x00000010) +#define INPUT_LEFT (0x00000008) +#define INPUT_RIGHT (0x00000004) +#define INPUT_DOWN (0x00000002) +#define INPUT_UP (0x00000001) + +/* System bitmasks */ +#define SYSTEM_GAMEPAD (0) /* Single Gamepad */ +#define SYSTEM_TEAMPLAYER (1) /* Sega TeamPlayer (1~8 players) */ +#define SYSTEM_WAYPLAY (2) /* EA 4-Way Play (1~4 players) */ +#define SYSTEM_MENACER (3) /* SEGA Menacer Lightgun */ +#define NO_SYSTEM (4) /* Unconnected Port*/ + +typedef struct +{ + uint8 dev[MAX_DEVICES]; /* Can be any of the DEVICE_* values */ + uint32 pad[MAX_DEVICES]; /* Can be any of the INPUT_* bitmasks */ + uint8 system[2]; /* Can be any of the SYSTEM_* bitmasks (PORTA & PORTB) */ + uint8 max; /* maximum number of connected devices */ +} t_input; + +/* global variables */ +extern t_input input; +extern uint8 j_cart; + +/* Function prototypes */ +extern void input_reset (int padtype); +extern void input_update(void); +extern void input_raz(void); +extern void lightgun_set (void); +extern uint8 lightgun_read (void); +extern uint8 gamepad_read (uint8 i); +extern void gamepad_write (uint8 i, uint8 data); +extern uint8 multitap_read (uint8 port); +extern void multitap_write (uint8 port, uint8 data); + +#endif diff --git a/ genplus-gx/source/io.c b/ genplus-gx/source/io.c new file mode 100644 index 0000000..1b7c08f --- /dev/null +++ b/ genplus-gx/source/io.c @@ -0,0 +1,215 @@ +/* + Copyright (C) 1999, 2000, 2001, 2002, 2003 Charles MacDonald + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + I/O controller chip emulation +*/ + +#include "shared.h" + +uint8 io_reg[0x10]; +uint8 region_code = REGION_USA; +uint8 pad_type = DEVICE_3BUTTON; + +/***************************************************************************** + * IO Read/Write wrappers + * + *****************************************************************************/ + +unsigned char Player1_Read (void) +{ + return gamepad_read(0); +} + +unsigned char Player2_Read (void) +{ + return gamepad_read(4); +} + +void Player1_Write (unsigned char data) +{ + gamepad_write(0, data); +} + +void Player2_Write (unsigned char data) +{ + gamepad_write(4, data); +} + +unsigned char MultiTap1_Read (void) +{ + return multitap_read(0); +} + +unsigned char MultiTap2_Read (void) +{ + return multitap_read(1); +} + +void MultiTap1_Write (unsigned char data) +{ + multitap_write(0, data); +} + +void MultiTap2_Write (unsigned char data) +{ + multitap_write(1, data); +} + +/***************************************************************************** + * I/O chip functions * + * * + ***************************************************************************** +*/ +struct port_t +{ + void (*data_w)(uint8 data); + uint8 (*data_r)(void); +} port[3]; + +void io_reset(void) +{ + /* I/O register default settings */ + uint8 io_def[0x10] = + { + 0xA0, + 0x7F, 0x7F, 0x7F, + 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x00, + 0xFF, 0x00, 0x00, + 0xFB, 0x00, 0x00, + }; + + /* Initialize I/O registers */ + memcpy (io_reg, io_def, 0x10); + + switch (input.system[0]) + { + case SYSTEM_GAMEPAD: + port[0].data_w = Player1_Write; + port[0].data_r = Player1_Read; + break; + + case SYSTEM_WAYPLAY: + case SYSTEM_TEAMPLAYER: + port[0].data_w = MultiTap1_Write; + port[0].data_r = MultiTap1_Read; + break; + + default: + port[0].data_w = NULL; + port[0].data_r = NULL; + break; + } + + switch (input.system[1]) + { + case SYSTEM_GAMEPAD: + port[1].data_w = Player2_Write; + port[1].data_r = Player2_Read; + break; + + case SYSTEM_WAYPLAY: + case SYSTEM_TEAMPLAYER: + port[1].data_w = MultiTap2_Write; + port[1].data_r = MultiTap2_Read; + break; + + case SYSTEM_MENACER: + port[1].data_w = NULL; + port[1].data_r = lightgun_read; + break; + + default: + port[1].data_w = NULL; + port[1].data_r = NULL; + break; + } + + port[2].data_w = NULL; + port[2].data_r = NULL; + + j_cart = 0; + input_reset(pad_type); +} + +void io_write(int offset, int value) +{ + switch (offset) + { + case 0x01: /* Port A Data */ + case 0x02: /* Port B Data */ + case 0x03: /* Port C Data */ + io_reg[offset] = ((value & 0x80) | (value & io_reg[offset+3])); + if(port[offset-1].data_w) port[offset-1].data_w(value); + return; + + case 0x05: /* Port B Ctrl */ + if (((value & 0x7F) == 0x7F) && + ((input.system[0] == SYSTEM_TEAMPLAYER) || + (input.system[1] == SYSTEM_TEAMPLAYER))) + { + /* autodetect 4-Way play ! */ + input.system[0] = SYSTEM_WAYPLAY; + input.system[1] = SYSTEM_WAYPLAY; + port[0].data_w = MultiTap1_Write; + port[0].data_r = MultiTap1_Read; + port[1].data_w = MultiTap2_Write; + port[1].data_r = MultiTap2_Read; + input_reset(pad_type); + } + + case 0x04: /* Port A Ctrl */ + case 0x06: /* Port C Ctrl */ + io_reg[offset] = value & 0xFF; + io_reg[offset-3] = ((io_reg[offset-3] & 0x80) | (io_reg[offset-3] & io_reg[offset])); + break; + + case 0x07: /* Port A TxData */ + case 0x0A: /* Port B TxData */ + case 0x0D: /* Port C TxData */ + io_reg[offset] = value; + break; + + case 0x09: /* Port A S-Ctrl */ + case 0x0C: /* Port B S-Ctrl */ + case 0x0F: /* Port C S-Ctrl */ + io_reg[offset] = (value & 0xF8); + break; + } +} + +int io_read(int offset) +{ + uint8 has_scd = 0x20; /* No Sega CD unit attached */ + uint8 gen_ver = 0x00; /* Version 0 hardware */ + uint8 input = 0x7F; /* default input state */ + + switch(offset) + { + case 0x00: /* Version */ + return (region_code | has_scd | gen_ver); + + case 0x01: /* Port A Data */ + case 0x02: /* Port B Data */ + case 0x03: /* Port C Data */ + if(port[offset-1].data_r) input = port[offset-1].data_r(); + return (io_reg[offset] | ((~io_reg[offset+3]) & input)); + } + + return (io_reg[offset]); +} diff --git a/ genplus-gx/source/io.h b/ genplus-gx/source/io.h new file mode 100644 index 0000000..6a0d0ff --- /dev/null +++ b/ genplus-gx/source/io.h @@ -0,0 +1,20 @@ +#ifndef _IO_H_ +#define _IO_H_ + +#define REGION_USA 0x80 +#define REGION_JAPAN_NTSC 0x00 +#define REGION_EUROPE 0xC0 +#define REGION_JAPAN_PAL 0x40 + +/* Global variables */ +extern uint8 io_reg[0x10]; +extern uint8 region_code; +extern uint8 pad_type; + +/* Function prototypes */ +extern void io_reset(void); +extern void io_write(int offset, int value); +extern int io_read(int offset); + +#endif /* _IO_H_ */ + diff --git a/ genplus-gx/source/m68k/m68kcpu.c b/ genplus-gx/source/m68k/m68kcpu.c new file mode 100644 index 0000000..1daadfe --- /dev/null +++ b/ genplus-gx/source/m68k/m68kcpu.c @@ -0,0 +1,894 @@ +/* ======================================================================== */ +/* ========================= LICENSING & COPYRIGHT ======================== */ +/* ======================================================================== */ + +#if 0 +static const char* copyright_notice = +"MUSASHI\n" +"Version 3.3 (2001-01-29)\n" +"A portable Motorola M680x0 processor emulation engine.\n" +"Copyright 1998-2001 Karl Stenerud. All rights reserved.\n" +"\n" +"This code may be freely used for non-commercial purpooses as long as this\n" +"copyright notice remains unaltered in the source code and any binary files\n" +"containing this code in compiled form.\n" +"\n" +"All other lisencing terms must be negotiated with the author\n" +"(Karl Stenerud).\n" +"\n" +"The latest version of this code can be obtained at:\n" +"http://kstenerud.cjb.net\n" +; +#endif + + +/* ======================================================================== */ +/* ================================= NOTES ================================ */ +/* ======================================================================== */ + + + +/* ======================================================================== */ +/* ================================ INCLUDES ============================== */ +/* ======================================================================== */ + +#include "m68kops.h" +#include "m68kcpu.h" + +/* ======================================================================== */ +/* ================================= DATA ================================= */ +/* ======================================================================== */ + +int m68ki_initial_cycles; +int m68ki_remaining_cycles = 0; /* Number of clocks remaining */ +uint m68ki_tracing = 0; +uint m68ki_address_space; + +#ifdef M68K_LOG_ENABLE +char* m68ki_cpu_names[9] = +{ + "Invalid CPU", + "M68000", + "M68010", + "Invalid CPU", + "M68EC020" + "Invalid CPU", + "Invalid CPU", + "Invalid CPU", + "M68020" +}; +#endif /* M68K_LOG_ENABLE */ + +/* The CPU core */ +m68ki_cpu_core m68ki_cpu = {0}; + +#if M68K_EMULATE_ADDRESS_ERROR +jmp_buf m68ki_address_error_trap; +#endif /* M68K_EMULATE_ADDRESS_ERROR */ + +/* Used by shift & rotate instructions */ +uint8 m68ki_shift_8_table[65] = +{ + 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff +}; +uint16 m68ki_shift_16_table[65] = +{ + 0x0000, 0x8000, 0xc000, 0xe000, 0xf000, 0xf800, 0xfc00, 0xfe00, 0xff00, + 0xff80, 0xffc0, 0xffe0, 0xfff0, 0xfff8, 0xfffc, 0xfffe, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff +}; +uint m68ki_shift_32_table[65] = +{ + 0x00000000, 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, 0xf8000000, + 0xfc000000, 0xfe000000, 0xff000000, 0xff800000, 0xffc00000, 0xffe00000, + 0xfff00000, 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000, 0xffff8000, + 0xffffc000, 0xffffe000, 0xfffff000, 0xfffff800, 0xfffffc00, 0xfffffe00, + 0xffffff00, 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, 0xfffffff8, + 0xfffffffc, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff +}; + + +/* Number of clock cycles to use for exception processing. + * I used 4 for any vectors that are undocumented for processing times. + */ +uint8 m68ki_exception_cycle_table[3][256] = +{ + { /* 000 */ + 4, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 50, /* 2: Bus Error (unemulated) */ + 50, /* 3: Address Error (unemulated) */ + 34, /* 4: Illegal Instruction */ + 38, /* 5: Divide by Zero -- ASG: changed from 42 */ + 40, /* 6: CHK -- ASG: chanaged from 44 */ + 34, /* 7: TRAPV */ + 34, /* 8: Privilege Violation */ + 34, /* 9: Trace */ + 4, /* 10: 1010 */ + 4, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 4, /* 14: Format Error */ + 44, /* 15: Uninitialized Interrupt */ + 4, /* 16: RESERVED */ + 4, /* 17: RESERVED */ + 4, /* 18: RESERVED */ + 4, /* 19: RESERVED */ + 4, /* 20: RESERVED */ + 4, /* 21: RESERVED */ + 4, /* 22: RESERVED */ + 4, /* 23: RESERVED */ + 44, /* 24: Spurious Interrupt */ + 44, /* 25: Level 1 Interrupt Autovector */ + 44, /* 26: Level 2 Interrupt Autovector */ + 44, /* 27: Level 3 Interrupt Autovector */ + 44, /* 28: Level 4 Interrupt Autovector */ + 44, /* 29: Level 5 Interrupt Autovector */ + 44, /* 30: Level 6 Interrupt Autovector */ + 44, /* 31: Level 7 Interrupt Autovector */ + 34, /* 32: TRAP #0 -- ASG: chanaged from 38 */ + 34, /* 33: TRAP #1 */ + 34, /* 34: TRAP #2 */ + 34, /* 35: TRAP #3 */ + 34, /* 36: TRAP #4 */ + 34, /* 37: TRAP #5 */ + 34, /* 38: TRAP #6 */ + 34, /* 39: TRAP #7 */ + 34, /* 40: TRAP #8 */ + 34, /* 41: TRAP #9 */ + 34, /* 42: TRAP #10 */ + 34, /* 43: TRAP #11 */ + 34, /* 44: TRAP #12 */ + 34, /* 45: TRAP #13 */ + 34, /* 46: TRAP #14 */ + 34, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 4, /* 59: RESERVED */ + 4, /* 60: RESERVED */ + 4, /* 61: RESERVED */ + 4, /* 62: RESERVED */ + 4, /* 63: RESERVED */ + /* 64-255: User Defined */ + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 + }, + { /* 010 */ + 4, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 126, /* 2: Bus Error (unemulated) */ + 126, /* 3: Address Error (unemulated) */ + 38, /* 4: Illegal Instruction */ + 44, /* 5: Divide by Zero */ + 44, /* 6: CHK */ + 34, /* 7: TRAPV */ + 38, /* 8: Privilege Violation */ + 38, /* 9: Trace */ + 4, /* 10: 1010 */ + 4, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 4, /* 14: Format Error */ + 44, /* 15: Uninitialized Interrupt */ + 4, /* 16: RESERVED */ + 4, /* 17: RESERVED */ + 4, /* 18: RESERVED */ + 4, /* 19: RESERVED */ + 4, /* 20: RESERVED */ + 4, /* 21: RESERVED */ + 4, /* 22: RESERVED */ + 4, /* 23: RESERVED */ + 46, /* 24: Spurious Interrupt */ + 46, /* 25: Level 1 Interrupt Autovector */ + 46, /* 26: Level 2 Interrupt Autovector */ + 46, /* 27: Level 3 Interrupt Autovector */ + 46, /* 28: Level 4 Interrupt Autovector */ + 46, /* 29: Level 5 Interrupt Autovector */ + 46, /* 30: Level 6 Interrupt Autovector */ + 46, /* 31: Level 7 Interrupt Autovector */ + 38, /* 32: TRAP #0 */ + 38, /* 33: TRAP #1 */ + 38, /* 34: TRAP #2 */ + 38, /* 35: TRAP #3 */ + 38, /* 36: TRAP #4 */ + 38, /* 37: TRAP #5 */ + 38, /* 38: TRAP #6 */ + 38, /* 39: TRAP #7 */ + 38, /* 40: TRAP #8 */ + 38, /* 41: TRAP #9 */ + 38, /* 42: TRAP #10 */ + 38, /* 43: TRAP #11 */ + 38, /* 44: TRAP #12 */ + 38, /* 45: TRAP #13 */ + 38, /* 46: TRAP #14 */ + 38, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 4, /* 59: RESERVED */ + 4, /* 60: RESERVED */ + 4, /* 61: RESERVED */ + 4, /* 62: RESERVED */ + 4, /* 63: RESERVED */ + /* 64-255: User Defined */ + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 + }, + { /* 020 */ + 4, /* 0: Reset - Initial Stack Pointer */ + 4, /* 1: Reset - Initial Program Counter */ + 50, /* 2: Bus Error (unemulated) */ + 50, /* 3: Address Error (unemulated) */ + 20, /* 4: Illegal Instruction */ + 38, /* 5: Divide by Zero */ + 40, /* 6: CHK */ + 20, /* 7: TRAPV */ + 34, /* 8: Privilege Violation */ + 25, /* 9: Trace */ + 20, /* 10: 1010 */ + 20, /* 11: 1111 */ + 4, /* 12: RESERVED */ + 4, /* 13: Coprocessor Protocol Violation (unemulated) */ + 4, /* 14: Format Error */ + 30, /* 15: Uninitialized Interrupt */ + 4, /* 16: RESERVED */ + 4, /* 17: RESERVED */ + 4, /* 18: RESERVED */ + 4, /* 19: RESERVED */ + 4, /* 20: RESERVED */ + 4, /* 21: RESERVED */ + 4, /* 22: RESERVED */ + 4, /* 23: RESERVED */ + 30, /* 24: Spurious Interrupt */ + 30, /* 25: Level 1 Interrupt Autovector */ + 30, /* 26: Level 2 Interrupt Autovector */ + 30, /* 27: Level 3 Interrupt Autovector */ + 30, /* 28: Level 4 Interrupt Autovector */ + 30, /* 29: Level 5 Interrupt Autovector */ + 30, /* 30: Level 6 Interrupt Autovector */ + 30, /* 31: Level 7 Interrupt Autovector */ + 20, /* 32: TRAP #0 */ + 20, /* 33: TRAP #1 */ + 20, /* 34: TRAP #2 */ + 20, /* 35: TRAP #3 */ + 20, /* 36: TRAP #4 */ + 20, /* 37: TRAP #5 */ + 20, /* 38: TRAP #6 */ + 20, /* 39: TRAP #7 */ + 20, /* 40: TRAP #8 */ + 20, /* 41: TRAP #9 */ + 20, /* 42: TRAP #10 */ + 20, /* 43: TRAP #11 */ + 20, /* 44: TRAP #12 */ + 20, /* 45: TRAP #13 */ + 20, /* 46: TRAP #14 */ + 20, /* 47: TRAP #15 */ + 4, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ + 4, /* 49: FP Inexact Result (unemulated) */ + 4, /* 50: FP Divide by Zero (unemulated) */ + 4, /* 51: FP Underflow (unemulated) */ + 4, /* 52: FP Operand Error (unemulated) */ + 4, /* 53: FP Overflow (unemulated) */ + 4, /* 54: FP Signaling NAN (unemulated) */ + 4, /* 55: FP Unimplemented Data Type (unemulated) */ + 4, /* 56: MMU Configuration Error (unemulated) */ + 4, /* 57: MMU Illegal Operation Error (unemulated) */ + 4, /* 58: MMU Access Level Violation Error (unemulated) */ + 4, /* 59: RESERVED */ + 4, /* 60: RESERVED */ + 4, /* 61: RESERVED */ + 4, /* 62: RESERVED */ + 4, /* 63: RESERVED */ + /* 64-255: User Defined */ + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 + } +}; + +uint8 m68ki_ea_idx_cycle_table[64] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, /* ..01.000 no memory indirect, base NULL */ + 5, /* ..01..01 memory indirect, base NULL, outer NULL */ + 7, /* ..01..10 memory indirect, base NULL, outer 16 */ + 7, /* ..01..11 memory indirect, base NULL, outer 32 */ + 0, 5, 7, 7, 0, 5, 7, 7, 0, 5, 7, 7, + 2, /* ..10.000 no memory indirect, base 16 */ + 7, /* ..10..01 memory indirect, base 16, outer NULL */ + 9, /* ..10..10 memory indirect, base 16, outer 16 */ + 9, /* ..10..11 memory indirect, base 16, outer 32 */ + 0, 7, 9, 9, 0, 7, 9, 9, 0, 7, 9, 9, + 6, /* ..11.000 no memory indirect, base 32 */ + 11, /* ..11..01 memory indirect, base 32, outer NULL */ + 13, /* ..11..10 memory indirect, base 32, outer 16 */ + 13, /* ..11..11 memory indirect, base 32, outer 32 */ + 0, 11, 13, 13, 0, 11, 13, 13, 0, 11, 13, 13 +}; + + + +/* ======================================================================== */ +/* =============================== CALLBACKS ============================== */ +/* ======================================================================== */ + +/* Default callbacks used if the callback hasn't been set yet, or if the + * callback is set to NULL + */ + +/* Interrupt acknowledge */ +static int default_int_ack_callback_data; +static int default_int_ack_callback(int int_level) +{ + default_int_ack_callback_data = int_level; + CPU_INT_LEVEL = 0; + return M68K_INT_ACK_AUTOVECTOR; +} + +/* Breakpoint acknowledge */ +static unsigned int default_bkpt_ack_callback_data; +static void default_bkpt_ack_callback(unsigned int data) +{ + default_bkpt_ack_callback_data = data; +} + +/* Called when a reset instruction is executed */ +static void default_reset_instr_callback(void) +{ +} + +/* Called when the program counter changed by a large value */ +static unsigned int default_pc_changed_callback_data; +static void default_pc_changed_callback(unsigned int new_pc) +{ + default_pc_changed_callback_data = new_pc; +} + +/* Called every time there's bus activity (read/write to/from memory */ +static unsigned int default_set_fc_callback_data; +static void default_set_fc_callback(unsigned int new_fc) +{ + default_set_fc_callback_data = new_fc; +} + +/* Called every instruction cycle prior to execution */ +static void default_instr_hook_callback(void) +{ +} + + + +/* ======================================================================== */ +/* ================================= API ================================== */ +/* ======================================================================== */ + +/* Access the internals of the CPU */ +unsigned int m68k_get_reg(void* context, m68k_register_t regnum) +{ + m68ki_cpu_core* cpu = context != NULL ?(m68ki_cpu_core*)context : &m68ki_cpu; + + switch(regnum) + { + case M68K_REG_D0: return cpu->dar[0]; + case M68K_REG_D1: return cpu->dar[1]; + case M68K_REG_D2: return cpu->dar[2]; + case M68K_REG_D3: return cpu->dar[3]; + case M68K_REG_D4: return cpu->dar[4]; + case M68K_REG_D5: return cpu->dar[5]; + case M68K_REG_D6: return cpu->dar[6]; + case M68K_REG_D7: return cpu->dar[7]; + case M68K_REG_A0: return cpu->dar[8]; + case M68K_REG_A1: return cpu->dar[9]; + case M68K_REG_A2: return cpu->dar[10]; + case M68K_REG_A3: return cpu->dar[11]; + case M68K_REG_A4: return cpu->dar[12]; + case M68K_REG_A5: return cpu->dar[13]; + case M68K_REG_A6: return cpu->dar[14]; + case M68K_REG_A7: return cpu->dar[15]; + case M68K_REG_PC: return MASK_OUT_ABOVE_32(cpu->pc); + case M68K_REG_SR: return cpu->t1_flag | + cpu->t0_flag | + (cpu->s_flag << 11) | + (cpu->m_flag << 11) | + cpu->int_mask | + ((cpu->x_flag & XFLAG_SET) >> 4) | + ((cpu->n_flag & NFLAG_SET) >> 4) | + ((!cpu->not_z_flag) << 2) | + ((cpu->v_flag & VFLAG_SET) >> 6) | + ((cpu->c_flag & CFLAG_SET) >> 8); + case M68K_REG_SP: return cpu->dar[15]; + case M68K_REG_USP: return cpu->s_flag ? cpu->sp[0] : cpu->dar[15]; + case M68K_REG_ISP: return cpu->s_flag && !cpu->m_flag ? cpu->dar[15] : cpu->sp[4]; + case M68K_REG_MSP: return cpu->s_flag && cpu->m_flag ? cpu->dar[15] : cpu->sp[6]; + case M68K_REG_SFC: return cpu->sfc; + case M68K_REG_DFC: return cpu->dfc; + case M68K_REG_VBR: return cpu->vbr; + case M68K_REG_CACR: return cpu->cacr; + case M68K_REG_CAAR: return cpu->caar; + case M68K_REG_PREF_ADDR: return cpu->pref_addr; + case M68K_REG_PREF_DATA: return cpu->pref_data; + case M68K_REG_PPC: return MASK_OUT_ABOVE_32(cpu->ppc); + case M68K_REG_IR: return cpu->ir; + case M68K_REG_CPU_TYPE: + switch(cpu->cpu_type) + { + case CPU_TYPE_000: return (unsigned int)M68K_CPU_TYPE_68000; + case CPU_TYPE_010: return (unsigned int)M68K_CPU_TYPE_68010; + case CPU_TYPE_EC020: return (unsigned int)M68K_CPU_TYPE_68EC020; + case CPU_TYPE_020: return (unsigned int)M68K_CPU_TYPE_68020; + } + return M68K_CPU_TYPE_INVALID; + default: return 0; + } + return 0; +} + +void m68k_set_reg(m68k_register_t regnum, unsigned int value) +{ + switch(regnum) + { + case M68K_REG_D0: REG_D[0] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_D1: REG_D[1] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_D2: REG_D[2] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_D3: REG_D[3] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_D4: REG_D[4] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_D5: REG_D[5] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_D6: REG_D[6] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_D7: REG_D[7] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_A0: REG_A[0] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_A1: REG_A[1] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_A2: REG_A[2] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_A3: REG_A[3] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_A4: REG_A[4] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_A5: REG_A[5] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_A6: REG_A[6] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_A7: REG_A[7] = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_PC: m68ki_jump(MASK_OUT_ABOVE_32(value)); return; + case M68K_REG_SR: m68ki_set_sr(value); return; + case M68K_REG_SP: REG_SP = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_USP: if(FLAG_S) + REG_USP = MASK_OUT_ABOVE_32(value); + else + REG_SP = MASK_OUT_ABOVE_32(value); + return; + case M68K_REG_ISP: if(FLAG_S && !FLAG_M) + REG_SP = MASK_OUT_ABOVE_32(value); + else + REG_ISP = MASK_OUT_ABOVE_32(value); + return; + case M68K_REG_MSP: if(FLAG_S && FLAG_M) + REG_SP = MASK_OUT_ABOVE_32(value); + else + REG_MSP = MASK_OUT_ABOVE_32(value); + return; + case M68K_REG_VBR: REG_VBR = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_SFC: REG_SFC = value & 7; return; + case M68K_REG_DFC: REG_DFC = value & 7; return; + case M68K_REG_CACR: REG_CACR = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_CAAR: REG_CAAR = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_PPC: REG_PPC = MASK_OUT_ABOVE_32(value); return; + case M68K_REG_IR: REG_IR = MASK_OUT_ABOVE_16(value); return; + case M68K_REG_CPU_TYPE: m68k_set_cpu_type(value); return; + default: return; + } +} + +/* Set the callbacks */ +void m68k_set_int_ack_callback(int (*callback)(int int_level)) +{ + CALLBACK_INT_ACK = callback ? callback : default_int_ack_callback; +} + +void m68k_set_bkpt_ack_callback(void (*callback)(unsigned int data)) +{ + CALLBACK_BKPT_ACK = callback ? callback : default_bkpt_ack_callback; +} + +void m68k_set_reset_instr_callback(void (*callback)(void)) +{ + CALLBACK_RESET_INSTR = callback ? callback : default_reset_instr_callback; +} + +void m68k_set_pc_changed_callback(void (*callback)(unsigned int new_pc)) +{ + CALLBACK_PC_CHANGED = callback ? callback : default_pc_changed_callback; +} + +void m68k_set_fc_callback(void (*callback)(unsigned int new_fc)) +{ + CALLBACK_SET_FC = callback ? callback : default_set_fc_callback; +} + +void m68k_set_instr_hook_callback(void (*callback)(void)) +{ + CALLBACK_INSTR_HOOK = callback ? callback : default_instr_hook_callback; +} + +#include +/* Set the CPU type. */ +void m68k_set_cpu_type(unsigned int cpu_type) +{ + switch(cpu_type) + { + case M68K_CPU_TYPE_68000: + CPU_TYPE = CPU_TYPE_000; + CPU_ADDRESS_MASK = 0x00ffffff; + CPU_SR_MASK = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */ + CYC_INSTRUCTION = m68ki_cycles[0]; + CYC_EXCEPTION = m68ki_exception_cycle_table[0]; + CYC_BCC_NOTAKE_B = -2; + CYC_BCC_NOTAKE_W = 2; + CYC_DBCC_F_NOEXP = -2; + CYC_DBCC_F_EXP = 2; + CYC_SCC_R_FALSE = 2; + CYC_MOVEM_W = 2; + CYC_MOVEM_L = 3; + CYC_SHIFT = 1; + CYC_RESET = 132; + return; + case M68K_CPU_TYPE_68010: + CPU_TYPE = CPU_TYPE_010; + CPU_ADDRESS_MASK = 0x00ffffff; + CPU_SR_MASK = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */ + CYC_INSTRUCTION = m68ki_cycles[1]; + CYC_EXCEPTION = m68ki_exception_cycle_table[1]; + CYC_BCC_NOTAKE_B = -4; + CYC_BCC_NOTAKE_W = 0; + CYC_DBCC_F_NOEXP = 0; + CYC_DBCC_F_EXP = 6; + CYC_SCC_R_FALSE = 0; + CYC_MOVEM_W = 2; + CYC_MOVEM_L = 3; + CYC_SHIFT = 1; + CYC_RESET = 130; + return; + case M68K_CPU_TYPE_68EC020: + CPU_TYPE = CPU_TYPE_EC020; + CPU_ADDRESS_MASK = 0x00ffffff; + CPU_SR_MASK = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ + CYC_INSTRUCTION = m68ki_cycles[2]; + CYC_EXCEPTION = m68ki_exception_cycle_table[2]; + CYC_BCC_NOTAKE_B = -2; + CYC_BCC_NOTAKE_W = 0; + CYC_DBCC_F_NOEXP = 0; + CYC_DBCC_F_EXP = 4; + CYC_SCC_R_FALSE = 0; + CYC_MOVEM_W = 2; + CYC_MOVEM_L = 2; + CYC_SHIFT = 0; + CYC_RESET = 518; + return; + case M68K_CPU_TYPE_68020: + CPU_TYPE = CPU_TYPE_020; + CPU_ADDRESS_MASK = 0xffffffff; + CPU_SR_MASK = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ + CYC_INSTRUCTION = m68ki_cycles[2]; + CYC_EXCEPTION = m68ki_exception_cycle_table[2]; + CYC_BCC_NOTAKE_B = -2; + CYC_BCC_NOTAKE_W = 0; + CYC_DBCC_F_NOEXP = 0; + CYC_DBCC_F_EXP = 4; + CYC_SCC_R_FALSE = 0; + CYC_MOVEM_W = 2; + CYC_MOVEM_L = 2; + CYC_SHIFT = 0; + CYC_RESET = 518; + return; + } +} + +/* Execute some instructions until we use up num_cycles clock cycles */ +/* ASG: removed per-instruction interrupt checks */ +int m68k_execute(int num_cycles) +{ + /* Make sure we're not stopped */ + if(!CPU_STOPPED) + { + /* Set our pool of clock cycles available */ + SET_CYCLES(num_cycles); + m68ki_initial_cycles = num_cycles; + + /* ASG: update cycles */ + USE_CYCLES(CPU_INT_CYCLES); + CPU_INT_CYCLES = 0; + + /* Return point if we had an address error */ + m68ki_set_address_error_trap(); /* auto-disable (see m68kcpu.h) */ + + /* Main loop. Keep going until we run out of clock cycles */ + do + { + /* Set tracing accodring to T1. (T0 is done inside instruction) */ + m68ki_trace_t1(); /* auto-disable (see m68kcpu.h) */ + + /* Set the address space for reads */ + m68ki_use_data_space(); /* auto-disable (see m68kcpu.h) */ + + /* Call external hook to peek at CPU */ + m68ki_instr_hook(); /* auto-disable (see m68kcpu.h) */ + + /* Record previous program counter */ + REG_PPC = REG_PC; + + /* Read an instruction and call its handler */ + REG_IR = m68ki_read_imm_16(); + m68ki_instruction_jump_table[REG_IR](); + USE_CYCLES(CYC_INSTRUCTION[REG_IR]); + + /* Trace m68k_exception, if necessary */ + m68ki_exception_if_trace(); /* auto-disable (see m68kcpu.h) */ + } while(GET_CYCLES() > 0); + + /* set previous PC to current PC for the next entry into the loop */ + REG_PPC = REG_PC; + + /* ASG: update cycles */ + USE_CYCLES(CPU_INT_CYCLES); + CPU_INT_CYCLES = 0; + + /* return how many clocks we used */ + return m68ki_initial_cycles - GET_CYCLES(); + } + + /* We get here if the CPU is stopped or halted */ + SET_CYCLES(0); + CPU_INT_CYCLES = 0; + + return num_cycles; +} + + +int m68k_cycles_run(void) +{ + return m68ki_initial_cycles - GET_CYCLES(); +} + +int m68k_cycles_remaining(void) +{ + return GET_CYCLES(); +} + +/* Change the timeslice */ +void m68k_modify_timeslice(int cycles) +{ + m68ki_initial_cycles += cycles; + ADD_CYCLES(cycles); +} + + +void m68k_end_timeslice(void) +{ + m68ki_initial_cycles = GET_CYCLES(); + SET_CYCLES(0); +} + + +/* ASG: rewrote so that the int_level is a mask of the IPL0/IPL1/IPL2 bits */ +/* KS: Modified so that IPL* bits match with mask positions in the SR + * and cleaned out remenants of the interrupt controller. + */ +void m68k_set_irq(unsigned int int_level) +{ + uint old_level = CPU_INT_LEVEL; + CPU_INT_LEVEL = int_level << 8; + + /* A transition from < 7 to 7 always interrupts (NMI) */ + /* Note: Level 7 can also level trigger like a normal IRQ */ + if(old_level != 0x0700 && CPU_INT_LEVEL == 0x0700) + m68ki_exception_interrupt(7); /* Edge triggered level 7 (NMI) */ + else + m68ki_check_interrupts(); /* Level triggered (IRQ) */ +} + + +/* Pulse the RESET line on the CPU */ +void m68k_pulse_reset(void) +{ + static uint emulation_initialized = 0; + + /* The first call to this function initializes the opcode handler jump table */ + if(!emulation_initialized) + { + m68ki_build_opcode_table(); + m68k_set_int_ack_callback(NULL); + m68k_set_bkpt_ack_callback(NULL); + m68k_set_reset_instr_callback(NULL); + m68k_set_pc_changed_callback(NULL); + m68k_set_fc_callback(NULL); + m68k_set_instr_hook_callback(NULL); + + emulation_initialized = 1; + } + + + if(CPU_TYPE == 0) /* KW 990319 */ + m68k_set_cpu_type(M68K_CPU_TYPE_68000); + + /* Clear all stop levels and eat up all remaining cycles */ + CPU_STOPPED = 0; + SET_CYCLES(0); + + /* Turn off tracing */ + FLAG_T1 = FLAG_T0 = 0; + m68ki_clear_trace(); + /* Interrupt mask to level 7 */ + FLAG_INT_MASK = 0x0700; + /* Reset VBR */ + REG_VBR = 0; + /* Go to supervisor mode */ + m68ki_set_sm_flag(SFLAG_SET | MFLAG_CLEAR); + + /* Invalidate the prefetch queue */ +#if M68K_EMULATE_PREFETCH + /* Set to arbitrary number since our first fetch is from 0 */ + CPU_PREF_ADDR = 0x1000; +#endif /* M68K_EMULATE_PREFETCH */ + + /* Read the initial stack pointer and program counter */ + m68ki_jump(0); + REG_SP = m68ki_read_imm_32(); + REG_PC = m68ki_read_imm_32(); + m68ki_jump(REG_PC); +} + +/* Pulse the HALT line on the CPU */ +void m68k_pulse_halt(void) +{ + CPU_STOPPED |= STOP_LEVEL_HALT; +} + + +/* Get and set the current CPU context */ +/* This is to allow for multiple CPUs */ +unsigned int m68k_context_size() +{ + return sizeof(m68ki_cpu_core); +} + +unsigned int m68k_get_context(void* dst) +{ + if(dst) *(m68ki_cpu_core*)dst = m68ki_cpu; + return sizeof(m68ki_cpu_core); +} + +void m68k_set_context(void* src) +{ + if(src) m68ki_cpu = *(m68ki_cpu_core*)src; +} + +void m68k_save_context( void (*save_value)(char*, unsigned int)) +{ + if(!save_value) + return; + + save_value("CPU_TYPE" , m68k_get_reg(NULL, M68K_REG_CPU_TYPE)); + save_value("D0" , REG_D[0]); + save_value("D1" , REG_D[1]); + save_value("D2" , REG_D[2]); + save_value("D3" , REG_D[3]); + save_value("D4" , REG_D[4]); + save_value("D5" , REG_D[5]); + save_value("D6" , REG_D[6]); + save_value("D7" , REG_D[7]); + save_value("A0" , REG_A[0]); + save_value("A1" , REG_A[1]); + save_value("A2" , REG_A[2]); + save_value("A3" , REG_A[3]); + save_value("A4" , REG_A[4]); + save_value("A5" , REG_A[5]); + save_value("A6" , REG_A[6]); + save_value("A7" , REG_A[7]); + save_value("PPC" , REG_PPC); + save_value("PC" , REG_PC); + save_value("USP" , REG_USP); + save_value("ISP" , REG_ISP); + save_value("MSP" , REG_MSP); + save_value("VBR" , REG_VBR); + save_value("SFC" , REG_SFC); + save_value("DFC" , REG_DFC); + save_value("CACR" , REG_CACR); + save_value("CAAR" , REG_CAAR); + save_value("SR" , m68ki_get_sr()); + save_value("INT_LEVEL" , CPU_INT_LEVEL); + save_value("INT_CYCLES", CPU_INT_CYCLES); + save_value("STOPPED" , (CPU_STOPPED & STOP_LEVEL_STOP) != 0); + save_value("HALTED" , (CPU_STOPPED & STOP_LEVEL_HALT) != 0); + save_value("PREF_ADDR" , CPU_PREF_ADDR); + save_value("PREF_DATA" , CPU_PREF_DATA); +} + +void m68k_load_context(unsigned int (*load_value)(char*)) +{ + unsigned int temp; + + m68k_set_cpu_type(load_value("CPU_TYPE")); + REG_PPC = load_value("PPC"); + REG_PC = load_value("PC"); + m68ki_jump(REG_PC); + CPU_INT_LEVEL = 0; + m68ki_set_sr_noint(load_value("SR")); + REG_D[0] = load_value("D0"); + REG_D[1] = load_value("D1"); + REG_D[2] = load_value("D2"); + REG_D[3] = load_value("D3"); + REG_D[4] = load_value("D4"); + REG_D[5] = load_value("D5"); + REG_D[6] = load_value("D6"); + REG_D[7] = load_value("D7"); + REG_A[0] = load_value("A0"); + REG_A[1] = load_value("A1"); + REG_A[2] = load_value("A2"); + REG_A[3] = load_value("A3"); + REG_A[4] = load_value("A4"); + REG_A[5] = load_value("A5"); + REG_A[6] = load_value("A6"); + REG_A[7] = load_value("A7"); + REG_USP = load_value("USP"); + REG_ISP = load_value("ISP"); + REG_MSP = load_value("MSP"); + REG_VBR = load_value("VBR"); + REG_SFC = load_value("SFC"); + REG_DFC = load_value("DFC"); + REG_CACR = load_value("CACR"); + REG_CAAR = load_value("CAAR"); + CPU_INT_LEVEL = load_value("INT_LEVEL"); + CPU_INT_CYCLES = load_value("INT_CYCLES"); + + CPU_STOPPED = 0; + temp = load_value("STOPPED"); + if(temp) CPU_STOPPED |= STOP_LEVEL_STOP; + temp = load_value("HALTED"); + if(temp) CPU_STOPPED |= STOP_LEVEL_HALT; + + CPU_PREF_ADDR = load_value("PREF_ADDR"); + CPU_PREF_DATA = load_value("PREF_DATA"); +} + + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ diff --git a/ genplus-gx/source/m68k/m68kcpu.h b/ genplus-gx/source/m68k/m68kcpu.h new file mode 100644 index 0000000..8bdb44c --- /dev/null +++ b/ genplus-gx/source/m68k/m68kcpu.h @@ -0,0 +1,1837 @@ +#include +/* ======================================================================== */ +/* ========================= LICENSING & COPYRIGHT ======================== */ +/* ======================================================================== */ +/* + * MUSASHI + * Version 3.3 + * + * A portable Motorola M680x0 processor emulation engine. + * Copyright 1998-2001 Karl Stenerud. All rights reserved. + * + * This code may be freely used for non-commercial purposes as long as this + * copyright notice remains unaltered in the source code and any binary files + * containing this code in compiled form. + * + * All other lisencing terms must be negotiated with the author + * (Karl Stenerud). + * + * The latest version of this code can be obtained at: + * http://kstenerud.cjb.net + */ + + + + +#ifndef M68KCPU__HEADER +#define M68KCPU__HEADER + +#include "m68k.h" +#include + +#if M68K_EMULATE_ADDRESS_ERROR +#include +#endif /* M68K_EMULATE_ADDRESS_ERROR */ + +/* ======================================================================== */ +/* ==================== ARCHITECTURE-DEPENDANT DEFINES ==================== */ +/* ======================================================================== */ + +/* Check for > 32bit sizes */ +#if UINT_MAX > 0xffffffff + #define M68K_INT_GT_32_BIT 1 +#endif + +/* Data types used in this emulation core */ +#undef sint8 +#undef sint16 +#undef sint32 +#undef sint64 +#undef uint8 +#undef uint16 +#undef uint32 +#undef uint64 +#undef sint +#undef uint + +#define sint8 signed char /* ASG: changed from char to signed char */ +#define sint16 signed short +#define sint32 signed long +#define uint8 unsigned char +#define uint16 unsigned short +#define uint32 unsigned long + +/* signed and unsigned int must be at least 32 bits wide */ +#define sint signed int +#define uint unsigned int + + +#if M68K_USE_64_BIT +#define sint64 signed long long +#define uint64 unsigned long long +#else +#define sint64 sint32 +#define uint64 uint32 +#endif /* M68K_USE_64_BIT */ + + + +/* Allow for architectures that don't have 8-bit sizes */ +#if UCHAR_MAX == 0xff + #define MAKE_INT_8(A) (sint8)(A) +#else + #undef sint8 + #define sint8 signed int + #undef uint8 + #define uint8 unsigned int + INLINE sint MAKE_INT_8(uint value) + { + return (value & 0x80) ? value | ~0xff : value & 0xff; + } +#endif /* UCHAR_MAX == 0xff */ + + +/* Allow for architectures that don't have 16-bit sizes */ +#if USHRT_MAX == 0xffff + #define MAKE_INT_16(A) (sint16)(A) +#else + #undef sint16 + #define sint16 signed int + #undef uint16 + #define uint16 unsigned int + INLINE sint MAKE_INT_16(uint value) + { + return (value & 0x8000) ? value | ~0xffff : value & 0xffff; + } +#endif /* USHRT_MAX == 0xffff */ + + +/* Allow for architectures that don't have 32-bit sizes */ +#if ULONG_MAX == 0xffffffff + #define MAKE_INT_32(A) (sint32)(A) +#else + #undef sint32 + #define sint32 signed int + #undef uint32 + #define uint32 unsigned int + INLINE sint MAKE_INT_32(uint value) + { + return (value & 0x80000000) ? value | ~0xffffffff : value & 0xffffffff; + } +#endif /* ULONG_MAX == 0xffffffff */ + + + + +/* ======================================================================== */ +/* ============================ GENERAL DEFINES =========================== */ +/* ======================================================================== */ + +/* Exception Vectors handled by emulation */ +#define EXCEPTION_BUS_ERROR 2 /* This one is not emulated! */ +#define EXCEPTION_ADDRESS_ERROR 3 /* This one is partially emulated (doesn't stack a proper frame yet) */ +#define EXCEPTION_ILLEGAL_INSTRUCTION 4 +#define EXCEPTION_ZERO_DIVIDE 5 +#define EXCEPTION_CHK 6 +#define EXCEPTION_TRAPV 7 +#define EXCEPTION_PRIVILEGE_VIOLATION 8 +#define EXCEPTION_TRACE 9 +#define EXCEPTION_1010 10 +#define EXCEPTION_1111 11 +#define EXCEPTION_FORMAT_ERROR 14 +#define EXCEPTION_UNINITIALIZED_INTERRUPT 15 +#define EXCEPTION_SPURIOUS_INTERRUPT 24 +#define EXCEPTION_INTERRUPT_AUTOVECTOR 24 +#define EXCEPTION_TRAP_BASE 32 + +/* Function codes set by CPU during data/address bus activity */ +#define FUNCTION_CODE_USER_DATA 1 +#define FUNCTION_CODE_USER_PROGRAM 2 +#define FUNCTION_CODE_SUPERVISOR_DATA 5 +#define FUNCTION_CODE_SUPERVISOR_PROGRAM 6 +#define FUNCTION_CODE_CPU_SPACE 7 + +/* CPU types for deciding what to emulate */ +#define CPU_TYPE_000 1 +#define CPU_TYPE_010 2 +#define CPU_TYPE_EC020 4 +#define CPU_TYPE_020 8 + +/* Different ways to stop the CPU */ +#define STOP_LEVEL_STOP 1 +#define STOP_LEVEL_HALT 2 + +#ifndef NULL +#define NULL ((void*)0) +#endif + +/* ======================================================================== */ +/* ================================ MACROS ================================ */ +/* ======================================================================== */ + + +/* ---------------------------- General Macros ---------------------------- */ + +/* Bit Isolation Macros */ +#define BIT_0(A) ((A) & 0x00000001) +#define BIT_1(A) ((A) & 0x00000002) +#define BIT_2(A) ((A) & 0x00000004) +#define BIT_3(A) ((A) & 0x00000008) +#define BIT_4(A) ((A) & 0x00000010) +#define BIT_5(A) ((A) & 0x00000020) +#define BIT_6(A) ((A) & 0x00000040) +#define BIT_7(A) ((A) & 0x00000080) +#define BIT_8(A) ((A) & 0x00000100) +#define BIT_9(A) ((A) & 0x00000200) +#define BIT_A(A) ((A) & 0x00000400) +#define BIT_B(A) ((A) & 0x00000800) +#define BIT_C(A) ((A) & 0x00001000) +#define BIT_D(A) ((A) & 0x00002000) +#define BIT_E(A) ((A) & 0x00004000) +#define BIT_F(A) ((A) & 0x00008000) +#define BIT_10(A) ((A) & 0x00010000) +#define BIT_11(A) ((A) & 0x00020000) +#define BIT_12(A) ((A) & 0x00040000) +#define BIT_13(A) ((A) & 0x00080000) +#define BIT_14(A) ((A) & 0x00100000) +#define BIT_15(A) ((A) & 0x00200000) +#define BIT_16(A) ((A) & 0x00400000) +#define BIT_17(A) ((A) & 0x00800000) +#define BIT_18(A) ((A) & 0x01000000) +#define BIT_19(A) ((A) & 0x02000000) +#define BIT_1A(A) ((A) & 0x04000000) +#define BIT_1B(A) ((A) & 0x08000000) +#define BIT_1C(A) ((A) & 0x10000000) +#define BIT_1D(A) ((A) & 0x20000000) +#define BIT_1E(A) ((A) & 0x40000000) +#define BIT_1F(A) ((A) & 0x80000000) + +/* Get the most significant bit for specific sizes */ +#define GET_MSB_8(A) ((A) & 0x80) +#define GET_MSB_9(A) ((A) & 0x100) +#define GET_MSB_16(A) ((A) & 0x8000) +#define GET_MSB_17(A) ((A) & 0x10000) +#define GET_MSB_32(A) ((A) & 0x80000000) +#if M68K_USE_64_BIT +#define GET_MSB_33(A) ((A) & 0x100000000) +#endif /* M68K_USE_64_BIT */ + +/* Isolate nibbles */ +#define LOW_NIBBLE(A) ((A) & 0x0f) +#define HIGH_NIBBLE(A) ((A) & 0xf0) + +/* These are used to isolate 8, 16, and 32 bit sizes */ +#define MASK_OUT_ABOVE_2(A) ((A) & 3) +#define MASK_OUT_ABOVE_8(A) ((A) & 0xff) +#define MASK_OUT_ABOVE_16(A) ((A) & 0xffff) +#define MASK_OUT_BELOW_2(A) ((A) & ~3) +#define MASK_OUT_BELOW_8(A) ((A) & ~0xff) +#define MASK_OUT_BELOW_16(A) ((A) & ~0xffff) + +/* No need to mask if we are 32 bit */ +#if M68K_INT_GT_32BIT || M68K_USE_64_BIT + #define MASK_OUT_ABOVE_32(A) ((A) & 0xffffffff) + #define MASK_OUT_BELOW_32(A) ((A) & ~0xffffffff) +#else + #define MASK_OUT_ABOVE_32(A) (A) + #define MASK_OUT_BELOW_32(A) 0 +#endif /* M68K_INT_GT_32BIT || M68K_USE_64_BIT */ + +/* Simulate address lines of 68k family */ +#define ADDRESS_68K(A) ((A)&CPU_ADDRESS_MASK) + + +/* Shift & Rotate Macros. */ +#define LSL(A, C) ((A) << (C)) +#define LSR(A, C) ((A) >> (C)) + +/* Some > 32-bit optimizations */ +#if M68K_INT_GT_32BIT + /* Shift left and right */ + #define LSR_32(A, C) ((A) >> (C)) + #define LSL_32(A, C) ((A) << (C)) +#else + /* We have to do this because the morons at ANSI decided that shifts + * by >= data size are undefined. + */ + #define LSR_32(A, C) ((C) < 32 ? (A) >> (C) : 0) + #define LSL_32(A, C) ((C) < 32 ? (A) << (C) : 0) +#endif /* M68K_INT_GT_32BIT */ + +#if M68K_USE_64_BIT + #define LSL_32_64(A, C) ((A) << (C)) + #define LSR_32_64(A, C) ((A) >> (C)) + #define ROL_33_64(A, C) (LSL_32_64(A, C) | LSR_32_64(A, 33-(C))) + #define ROR_33_64(A, C) (LSR_32_64(A, C) | LSL_32_64(A, 33-(C))) +#endif /* M68K_USE_64_BIT */ + +#define ROL_8(A, C) MASK_OUT_ABOVE_8(LSL(A, C) | LSR(A, 8-(C))) +#define ROL_9(A, C) (LSL(A, C) | LSR(A, 9-(C))) +#define ROL_16(A, C) MASK_OUT_ABOVE_16(LSL(A, C) | LSR(A, 16-(C))) +#define ROL_17(A, C) (LSL(A, C) | LSR(A, 17-(C))) +#define ROL_32(A, C) MASK_OUT_ABOVE_32(LSL_32(A, C) | LSR_32(A, 32-(C))) +#define ROL_33(A, C) (LSL_32(A, C) | LSR_32(A, 33-(C))) + +#define ROR_8(A, C) MASK_OUT_ABOVE_8(LSR(A, C) | LSL(A, 8-(C))) +#define ROR_9(A, C) (LSR(A, C) | LSL(A, 9-(C))) +#define ROR_16(A, C) MASK_OUT_ABOVE_16(LSR(A, C) | LSL(A, 16-(C))) +#define ROR_17(A, C) (LSR(A, C) | LSL(A, 17-(C))) +#define ROR_32(A, C) MASK_OUT_ABOVE_32(LSR_32(A, C) | LSL_32(A, 32-(C))) +#define ROR_33(A, C) (LSR_32(A, C) | LSL_32(A, 33-(C))) + + + +/* ------------------------------ CPU Access ------------------------------ */ + +/* Access the CPU registers */ +#define CPU_TYPE m68ki_cpu.cpu_type + +#define REG_DA m68ki_cpu.dar /* easy access to data and address regs */ +#define REG_D m68ki_cpu.dar +#define REG_A (m68ki_cpu.dar+8) +#define REG_PPC m68ki_cpu.ppc +#define REG_PC m68ki_cpu.pc +#define REG_SP_BASE m68ki_cpu.sp +#define REG_USP m68ki_cpu.sp[0] +#define REG_ISP m68ki_cpu.sp[4] +#define REG_MSP m68ki_cpu.sp[6] +#define REG_SP m68ki_cpu.dar[15] +#define REG_VBR m68ki_cpu.vbr +#define REG_SFC m68ki_cpu.sfc +#define REG_DFC m68ki_cpu.dfc +#define REG_CACR m68ki_cpu.cacr +#define REG_CAAR m68ki_cpu.caar +#define REG_IR m68ki_cpu.ir + +#define FLAG_T1 m68ki_cpu.t1_flag +#define FLAG_T0 m68ki_cpu.t0_flag +#define FLAG_S m68ki_cpu.s_flag +#define FLAG_M m68ki_cpu.m_flag +#define FLAG_X m68ki_cpu.x_flag +#define FLAG_N m68ki_cpu.n_flag +#define FLAG_Z m68ki_cpu.not_z_flag +#define FLAG_V m68ki_cpu.v_flag +#define FLAG_C m68ki_cpu.c_flag +#define FLAG_INT_MASK m68ki_cpu.int_mask + +#define CPU_INT_LEVEL m68ki_cpu.int_level /* ASG: changed from CPU_INTS_PENDING */ +#define CPU_INT_CYCLES m68ki_cpu.int_cycles /* ASG */ +#define CPU_STOPPED m68ki_cpu.stopped +#define CPU_PREF_ADDR m68ki_cpu.pref_addr +#define CPU_PREF_DATA m68ki_cpu.pref_data +#define CPU_ADDRESS_MASK m68ki_cpu.address_mask +#define CPU_SR_MASK m68ki_cpu.sr_mask + +#define CYC_INSTRUCTION m68ki_cpu.cyc_instruction +#define CYC_EXCEPTION m68ki_cpu.cyc_exception +#define CYC_BCC_NOTAKE_B m68ki_cpu.cyc_bcc_notake_b +#define CYC_BCC_NOTAKE_W m68ki_cpu.cyc_bcc_notake_w +#define CYC_DBCC_F_NOEXP m68ki_cpu.cyc_dbcc_f_noexp +#define CYC_DBCC_F_EXP m68ki_cpu.cyc_dbcc_f_exp +#define CYC_SCC_R_FALSE m68ki_cpu.cyc_scc_r_false +#define CYC_MOVEM_W m68ki_cpu.cyc_movem_w +#define CYC_MOVEM_L m68ki_cpu.cyc_movem_l +#define CYC_SHIFT m68ki_cpu.cyc_shift +#define CYC_RESET m68ki_cpu.cyc_reset + + +#define CALLBACK_INT_ACK m68ki_cpu.int_ack_callback +#define CALLBACK_BKPT_ACK m68ki_cpu.bkpt_ack_callback +#define CALLBACK_RESET_INSTR m68ki_cpu.reset_instr_callback +#define CALLBACK_PC_CHANGED m68ki_cpu.pc_changed_callback +#define CALLBACK_SET_FC m68ki_cpu.set_fc_callback +#define CALLBACK_INSTR_HOOK m68ki_cpu.instr_hook_callback + + + +/* ----------------------------- Configuration ---------------------------- */ + +/* These defines are dependant on the configuration defines in m68kconf.h */ + +/* Disable certain comparisons if we're not using all CPU types */ +#if M68K_EMULATE_020 + #define CPU_TYPE_IS_020_PLUS(A) ((A) & CPU_TYPE_020) + #define CPU_TYPE_IS_020_LESS(A) 1 +#else + #define CPU_TYPE_IS_020_PLUS(A) 0 + #define CPU_TYPE_IS_020_LESS(A) 1 +#endif + +#if M68K_EMULATE_EC020 + #define CPU_TYPE_IS_EC020_PLUS(A) ((A) & (CPU_TYPE_EC020 | CPU_TYPE_020)) + #define CPU_TYPE_IS_EC020_LESS(A) ((A) & (CPU_TYPE_000 | CPU_TYPE_010 | CPU_TYPE_EC020)) +#else + #define CPU_TYPE_IS_EC020_PLUS(A) CPU_TYPE_IS_020_PLUS(A) + #define CPU_TYPE_IS_EC020_LESS(A) CPU_TYPE_IS_020_LESS(A) +#endif + +#if M68K_EMULATE_010 + #define CPU_TYPE_IS_010(A) ((A) == CPU_TYPE_010) + #define CPU_TYPE_IS_010_PLUS(A) ((A) & (CPU_TYPE_010 | CPU_TYPE_EC020 | CPU_TYPE_020)) + #define CPU_TYPE_IS_010_LESS(A) ((A) & (CPU_TYPE_000 | CPU_TYPE_010)) +#else + #define CPU_TYPE_IS_010(A) 0 + #define CPU_TYPE_IS_010_PLUS(A) CPU_TYPE_IS_EC020_PLUS(A) + #define CPU_TYPE_IS_010_LESS(A) CPU_TYPE_IS_EC020_LESS(A) +#endif + +#if M68K_EMULATE_020 || M68K_EMULATE_EC020 + #define CPU_TYPE_IS_020_VARIANT(A) ((A) & (CPU_TYPE_EC020 | CPU_TYPE_020)) +#else + #define CPU_TYPE_IS_020_VARIANT(A) 0 +#endif + +#if M68K_EMULATE_020 || M68K_EMULATE_EC020 || M68K_EMULATE_010 + #define CPU_TYPE_IS_000(A) ((A) == CPU_TYPE_000) +#else + #define CPU_TYPE_IS_000(A) 1 +#endif + + +#if !M68K_SEPARATE_READS +#define m68k_read_immediate_16(A) m68ki_read_program_16(A) +#define m68k_read_immediate_32(A) m68ki_read_program_32(A) + +#define m68k_read_pcrelative_8(A) m68ki_read_program_8(A) +#define m68k_read_pcrelative_16(A) m68ki_read_program_16(A) +#define m68k_read_pcrelative_32(A) m68ki_read_program_32(A) +#endif /* M68K_SEPARATE_READS */ + + +/* Enable or disable callback functions */ +#if M68K_EMULATE_INT_ACK + #if M68K_EMULATE_INT_ACK == OPT_SPECIFY_HANDLER + #define m68ki_int_ack(A) M68K_INT_ACK_CALLBACK(A) + #else + #define m68ki_int_ack(A) CALLBACK_INT_ACK(A) + #endif +#else + /* Default action is to used autovector mode, which is most common */ + #define m68ki_int_ack(A) M68K_INT_ACK_AUTOVECTOR +#endif /* M68K_EMULATE_INT_ACK */ + +#if M68K_EMULATE_BKPT_ACK + #if M68K_EMULATE_BKPT_ACK == OPT_SPECIFY_HANDLER + #define m68ki_bkpt_ack(A) M68K_BKPT_ACK_CALLBACK(A) + #else + #define m68ki_bkpt_ack(A) CALLBACK_BKPT_ACK(A) + #endif +#else + #define m68ki_bkpt_ack(A) +#endif /* M68K_EMULATE_BKPT_ACK */ + +#if M68K_EMULATE_RESET + #if M68K_EMULATE_RESET == OPT_SPECIFY_HANDLER + #define m68ki_output_reset() M68K_RESET_CALLBACK() + #else + #define m68ki_output_reset() CALLBACK_RESET_INSTR() + #endif +#else + #define m68ki_output_reset() +#endif /* M68K_EMULATE_RESET */ + +#if M68K_INSTRUCTION_HOOK + #if M68K_INSTRUCTION_HOOK == OPT_SPECIFY_HANDLER + #define m68ki_instr_hook() M68K_INSTRUCTION_CALLBACK() + #else + #define m68ki_instr_hook() CALLBACK_INSTR_HOOK() + #endif +#else + #define m68ki_instr_hook() +#endif /* M68K_INSTRUCTION_HOOK */ + +#if M68K_MONITOR_PC + #if M68K_MONITOR_PC == OPT_SPECIFY_HANDLER + #define m68ki_pc_changed(A) M68K_SET_PC_CALLBACK(ADDRESS_68K(A)) + #else + #define m68ki_pc_changed(A) CALLBACK_PC_CHANGED(ADDRESS_68K(A)) + #endif +#else + #define m68ki_pc_changed(A) +#endif /* M68K_MONITOR_PC */ + + +/* Enable or disable function code emulation */ +#if M68K_EMULATE_FC + #if M68K_EMULATE_FC == OPT_SPECIFY_HANDLER + #define m68ki_set_fc(A) M68K_SET_FC_CALLBACK(A) + #else + #define m68ki_set_fc(A) CALLBACK_SET_FC(A) + #endif + #define m68ki_use_data_space() m68ki_address_space = FUNCTION_CODE_USER_DATA + #define m68ki_use_program_space() m68ki_address_space = FUNCTION_CODE_USER_PROGRAM + #define m68ki_get_address_space() m68ki_address_space +#else + #define m68ki_set_fc(A) + #define m68ki_use_data_space() + #define m68ki_use_program_space() + #define m68ki_get_address_space() FUNCTION_CODE_USER_DATA +#endif /* M68K_EMULATE_FC */ + + +/* Enable or disable trace emulation */ +#if M68K_EMULATE_TRACE + /* Initiates trace checking before each instruction (t1) */ + #define m68ki_trace_t1() m68ki_tracing = FLAG_T1 + /* adds t0 to trace checking if we encounter change of flow */ + #define m68ki_trace_t0() m68ki_tracing |= FLAG_T0 + /* Clear all tracing */ + #define m68ki_clear_trace() m68ki_tracing = 0 + /* Cause a trace exception if we are tracing */ + #define m68ki_exception_if_trace() if(m68ki_tracing) m68ki_exception_trace() +#else + #define m68ki_trace_t1() + #define m68ki_trace_t0() + #define m68ki_clear_trace() + #define m68ki_exception_if_trace() +#endif /* M68K_EMULATE_TRACE */ + + + +/* Address error */ +#if M68K_EMULATE_ADDRESS_ERROR + extern jmp_buf m68ki_address_error_trap; + #define m68ki_set_address_error_trap() if(setjmp(m68ki_address_error_trap)) m68ki_exception_address_error(); + #define m68ki_check_address_error(A) if((A)&1) longjmp(m68ki_address_error_jump, 1); +#else + #define m68ki_set_address_error_trap() + #define m68ki_check_address_error(A) +#endif /* M68K_ADDRESS_ERROR */ + +/* Logging */ +#if M68K_LOG_ENABLE + #include + extern FILE* M68K_LOG_FILEHANDLE + extern char* m68ki_cpu_names[]; + + #define M68K_DO_LOG(A) if(M68K_LOG_FILEHANDLE) fprintf A + #if M68K_LOG_1010_1111 + #define M68K_DO_LOG_EMU(A) if(M68K_LOG_FILEHANDLE) fprintf A + #else + #define M68K_DO_LOG_EMU(A) + #endif +#else + #define M68K_DO_LOG(A) + #define M68K_DO_LOG_EMU(A) +#endif + + + +/* -------------------------- EA / Operand Access ------------------------- */ + +/* + * The general instruction format follows this pattern: + * .... XXX. .... .YYY + * where XXX is register X and YYY is register Y + */ +/* Data Register Isolation */ +#define DX (REG_D[(REG_IR >> 9) & 7]) +#define DY (REG_D[REG_IR & 7]) +/* Address Register Isolation */ +#define AX (REG_A[(REG_IR >> 9) & 7]) +#define AY (REG_A[REG_IR & 7]) + + +/* Effective Address Calculations */ +#define EA_AY_AI_8() AY /* address register indirect */ +#define EA_AY_AI_16() EA_AY_AI_8() +#define EA_AY_AI_32() EA_AY_AI_8() +#define EA_AY_PI_8() (AY++) /* postincrement (size = byte) */ +#define EA_AY_PI_16() ((AY+=2)-2) /* postincrement (size = word) */ +#define EA_AY_PI_32() ((AY+=4)-4) /* postincrement (size = long) */ +#define EA_AY_PD_8() (--AY) /* predecrement (size = byte) */ +#define EA_AY_PD_16() (AY-=2) /* predecrement (size = word) */ +#define EA_AY_PD_32() (AY-=4) /* predecrement (size = long) */ +#define EA_AY_DI_8() (AY+MAKE_INT_16(m68ki_read_imm_16())) /* displacement */ +#define EA_AY_DI_16() EA_AY_DI_8() +#define EA_AY_DI_32() EA_AY_DI_8() +#define EA_AY_IX_8() m68ki_get_ea_ix(AY) /* indirect + index */ +#define EA_AY_IX_16() EA_AY_IX_8() +#define EA_AY_IX_32() EA_AY_IX_8() + +#define EA_AX_AI_8() AX +#define EA_AX_AI_16() EA_AX_AI_8() +#define EA_AX_AI_32() EA_AX_AI_8() +#define EA_AX_PI_8() (AX++) +#define EA_AX_PI_16() ((AX+=2)-2) +#define EA_AX_PI_32() ((AX+=4)-4) +#define EA_AX_PD_8() (--AX) +#define EA_AX_PD_16() (AX-=2) +#define EA_AX_PD_32() (AX-=4) +#define EA_AX_DI_8() (AX+MAKE_INT_16(m68ki_read_imm_16())) +#define EA_AX_DI_16() EA_AX_DI_8() +#define EA_AX_DI_32() EA_AX_DI_8() +#define EA_AX_IX_8() m68ki_get_ea_ix(AX) +#define EA_AX_IX_16() EA_AX_IX_8() +#define EA_AX_IX_32() EA_AX_IX_8() + +#define EA_A7_PI_8() ((REG_A[7]+=2)-2) +#define EA_A7_PD_8() (REG_A[7]-=2) + +#define EA_AW_8() MAKE_INT_16(m68ki_read_imm_16()) /* absolute word */ +#define EA_AW_16() EA_AW_8() +#define EA_AW_32() EA_AW_8() +#define EA_AL_8() m68ki_read_imm_32() /* absolute long */ +#define EA_AL_16() EA_AL_8() +#define EA_AL_32() EA_AL_8() +#define EA_PCDI_8() m68ki_get_ea_pcdi() /* pc indirect + displacement */ +#define EA_PCDI_16() EA_PCDI_8() +#define EA_PCDI_32() EA_PCDI_8() +#define EA_PCIX_8() m68ki_get_ea_pcix() /* pc indirect + index */ +#define EA_PCIX_16() EA_PCIX_8() +#define EA_PCIX_32() EA_PCIX_8() + + +#define OPER_I_8() m68ki_read_imm_8() +#define OPER_I_16() m68ki_read_imm_16() +#define OPER_I_32() m68ki_read_imm_32() + + + +/* --------------------------- Status Register ---------------------------- */ + +/* Flag Calculation Macros */ +#define CFLAG_8(A) (A) +#define CFLAG_16(A) ((A)>>8) + +#if M68K_INT_GT_32_BIT + #define CFLAG_ADD_32(S, D, R) ((R)>>24) + #define CFLAG_SUB_32(S, D, R) ((R)>>24) +#else + #define CFLAG_ADD_32(S, D, R) (((S & D) | (~R & (S | D)))>>23) + #define CFLAG_SUB_32(S, D, R) (((S & R) | (~D & (S | R)))>>23) +#endif /* M68K_INT_GT_32_BIT */ + +#define VFLAG_ADD_8(S, D, R) ((S^R) & (D^R)) +#define VFLAG_ADD_16(S, D, R) (((S^R) & (D^R))>>8) +#define VFLAG_ADD_32(S, D, R) (((S^R) & (D^R))>>24) + +#define VFLAG_SUB_8(S, D, R) ((S^D) & (R^D)) +#define VFLAG_SUB_16(S, D, R) (((S^D) & (R^D))>>8) +#define VFLAG_SUB_32(S, D, R) (((S^D) & (R^D))>>24) + +#define NFLAG_8(A) (A) +#define NFLAG_16(A) ((A)>>8) +#define NFLAG_32(A) ((A)>>24) +#define NFLAG_64(A) ((A)>>56) + +#define ZFLAG_8(A) MASK_OUT_ABOVE_8(A) +#define ZFLAG_16(A) MASK_OUT_ABOVE_16(A) +#define ZFLAG_32(A) MASK_OUT_ABOVE_32(A) + + +/* Flag values */ +#define NFLAG_SET 0x80 +#define NFLAG_CLEAR 0 +#define CFLAG_SET 0x100 +#define CFLAG_CLEAR 0 +#define XFLAG_SET 0x100 +#define XFLAG_CLEAR 0 +#define VFLAG_SET 0x80 +#define VFLAG_CLEAR 0 +#define ZFLAG_SET 0 +#define ZFLAG_CLEAR 0xffffffff + +#define SFLAG_SET 4 +#define SFLAG_CLEAR 0 +#define MFLAG_SET 2 +#define MFLAG_CLEAR 0 + +/* Turn flag values into 1 or 0 */ +#define XFLAG_AS_1() ((FLAG_X>>8)&1) +#define NFLAG_AS_1() ((FLAG_N>>7)&1) +#define VFLAG_AS_1() ((FLAG_V>>7)&1) +#define ZFLAG_AS_1() (!FLAG_Z) +#define CFLAG_AS_1() ((FLAG_C>>8)&1) + + +/* Conditions */ +#define COND_CS() (FLAG_C&0x100) +#define COND_CC() (!COND_CS()) +#define COND_VS() (FLAG_V&0x80) +#define COND_VC() (!COND_VS()) +#define COND_NE() FLAG_Z +#define COND_EQ() (!COND_NE()) +#define COND_MI() (FLAG_N&0x80) +#define COND_PL() (!COND_MI()) +#define COND_LT() ((FLAG_N^FLAG_V)&0x80) +#define COND_GE() (!COND_LT()) +#define COND_HI() (COND_CC() && COND_NE()) +#define COND_LS() (COND_CS() || COND_EQ()) +#define COND_GT() (COND_GE() && COND_NE()) +#define COND_LE() (COND_LT() || COND_EQ()) + +/* Reversed conditions */ +#define COND_NOT_CS() COND_CC() +#define COND_NOT_CC() COND_CS() +#define COND_NOT_VS() COND_VC() +#define COND_NOT_VC() COND_VS() +#define COND_NOT_NE() COND_EQ() +#define COND_NOT_EQ() COND_NE() +#define COND_NOT_MI() COND_PL() +#define COND_NOT_PL() COND_MI() +#define COND_NOT_LT() COND_GE() +#define COND_NOT_GE() COND_LT() +#define COND_NOT_HI() COND_LS() +#define COND_NOT_LS() COND_HI() +#define COND_NOT_GT() COND_LE() +#define COND_NOT_LE() COND_GT() + +/* Not real conditions, but here for convenience */ +#define COND_XS() (FLAG_X&0x100) +#define COND_XC() (!COND_XS) + + +/* Get the condition code register */ +#define m68ki_get_ccr() ((COND_XS() >> 4) | \ + (COND_MI() >> 4) | \ + (COND_EQ() << 2) | \ + (COND_VS() >> 6) | \ + (COND_CS() >> 8)) + +/* Get the status register */ +#define m68ki_get_sr() ( FLAG_T1 | \ + FLAG_T0 | \ + (FLAG_S << 11) | \ + (FLAG_M << 11) | \ + FLAG_INT_MASK | \ + m68ki_get_ccr()) + + + +/* ---------------------------- Cycle Counting ---------------------------- */ + +#define ADD_CYCLES(A) m68ki_remaining_cycles += (A) +#define USE_CYCLES(A) m68ki_remaining_cycles -= (A) +#define SET_CYCLES(A) m68ki_remaining_cycles = A +#define GET_CYCLES() m68ki_remaining_cycles +#define USE_ALL_CYCLES() m68ki_remaining_cycles = 0 + + + +/* ----------------------------- Read / Write ----------------------------- */ + +/* Read from the current address space */ +#define m68ki_read_8(A) m68ki_read_8_fc (A, FLAG_S | m68ki_get_address_space()) +#define m68ki_read_16(A) m68ki_read_16_fc(A, FLAG_S | m68ki_get_address_space()) +#define m68ki_read_32(A) m68ki_read_32_fc(A, FLAG_S | m68ki_get_address_space()) + +/* Write to the current data space */ +#define m68ki_write_8(A, V) m68ki_write_8_fc (A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_16(A, V) m68ki_write_16_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_32(A, V) m68ki_write_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) + +/* map read immediate 8 to read immediate 16 */ +#define m68ki_read_imm_8() MASK_OUT_ABOVE_8(m68ki_read_imm_16()) + +/* Map PC-relative reads */ +#define m68ki_read_pcrel_8(A) m68k_read_pcrelative_8(A) +#define m68ki_read_pcrel_16(A) m68k_read_pcrelative_16(A) +#define m68ki_read_pcrel_32(A) m68k_read_pcrelative_32(A) + +/* Read from the program space */ +#define m68ki_read_program_8(A) m68ki_read_8_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) +#define m68ki_read_program_16(A) m68ki_read_16_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) +#define m68ki_read_program_32(A) m68ki_read_32_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) + +/* Read from the data space */ +#define m68ki_read_data_8(A) m68ki_read_8_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) +#define m68ki_read_data_16(A) m68ki_read_16_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) +#define m68ki_read_data_32(A) m68ki_read_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) + + + +/* ======================================================================== */ +/* =============================== PROTOTYPES ============================= */ +/* ======================================================================== */ + +typedef struct +{ + uint cpu_type; /* CPU Type: 68000, 68010, 68EC020, or 68020 */ + uint dar[16]; /* Data and Address Registers */ + uint ppc; /* Previous program counter */ + uint pc; /* Program Counter */ + uint sp[7]; /* User, Interrupt, and Master Stack Pointers */ + uint vbr; /* Vector Base Register (m68010+) */ + uint sfc; /* Source Function Code Register (m68010+) */ + uint dfc; /* Destination Function Code Register (m68010+) */ + uint cacr; /* Cache Control Register (m68020, unemulated) */ + uint caar; /* Cache Address Register (m68020, unemulated) */ + uint ir; /* Instruction Register */ + uint t1_flag; /* Trace 1 */ + uint t0_flag; /* Trace 0 */ + uint s_flag; /* Supervisor */ + uint m_flag; /* Master/Interrupt state */ + uint x_flag; /* Extend */ + uint n_flag; /* Negative */ + uint not_z_flag; /* Zero, inverted for speedups */ + uint v_flag; /* Overflow */ + uint c_flag; /* Carry */ + uint int_mask; /* I0-I2 */ + uint int_level; /* State of interrupt pins IPL0-IPL2 -- ASG: changed from ints_pending */ + uint int_cycles; /* ASG: extra cycles from generated interrupts */ + uint stopped; /* Stopped state */ + uint pref_addr; /* Last prefetch address */ + uint pref_data; /* Data in the prefetch queue */ + uint address_mask; /* Available address pins */ + uint sr_mask; /* Implemented status register bits */ + + /* Clocks required for instructions / exceptions */ + uint cyc_bcc_notake_b; + uint cyc_bcc_notake_w; + uint cyc_dbcc_f_noexp; + uint cyc_dbcc_f_exp; + uint cyc_scc_r_false; + uint cyc_movem_w; + uint cyc_movem_l; + uint cyc_shift; + uint cyc_reset; + uint8* cyc_instruction; + uint8* cyc_exception; + + /* Callbacks to host */ + int (*int_ack_callback)(int int_line); /* Interrupt Acknowledge */ + void (*bkpt_ack_callback)(unsigned int data); /* Breakpoint Acknowledge */ + void (*reset_instr_callback)(void); /* Called when a RESET instruction is encountered */ + void (*pc_changed_callback)(unsigned int new_pc); /* Called when the PC changes by a large amount */ + void (*set_fc_callback)(unsigned int new_fc); /* Called when the CPU function code changes */ + void (*instr_hook_callback)(void); /* Called every instruction cycle prior to execution */ + +} m68ki_cpu_core; + + +extern m68ki_cpu_core m68ki_cpu; +extern sint m68ki_remaining_cycles; +extern uint m68ki_tracing; +extern uint8 m68ki_shift_8_table[]; +extern uint16 m68ki_shift_16_table[]; +extern uint m68ki_shift_32_table[]; +extern uint8 m68ki_exception_cycle_table[][256]; +extern uint m68ki_address_space; +extern uint8 m68ki_ea_idx_cycle_table[]; + + +/* Read data immediately after the program counter */ +INLINE uint m68ki_read_imm_16(void); +INLINE uint m68ki_read_imm_32(void); + +/* Read data with specific function code */ +INLINE uint m68ki_read_8_fc (uint address, uint fc); +INLINE uint m68ki_read_16_fc (uint address, uint fc); +INLINE uint m68ki_read_32_fc (uint address, uint fc); + +/* Write data with specific function code */ +INLINE void m68ki_write_8_fc (uint address, uint fc, uint value); +INLINE void m68ki_write_16_fc(uint address, uint fc, uint value); +INLINE void m68ki_write_32_fc(uint address, uint fc, uint value); + +/* Indexed and PC-relative ea fetching */ +INLINE uint m68ki_get_ea_pcdi(void); +INLINE uint m68ki_get_ea_pcix(void); +INLINE uint m68ki_get_ea_ix(uint An); + +/* Operand fetching */ +INLINE uint OPER_AY_AI_8(void); +INLINE uint OPER_AY_AI_16(void); +INLINE uint OPER_AY_AI_32(void); +INLINE uint OPER_AY_PI_8(void); +INLINE uint OPER_AY_PI_16(void); +INLINE uint OPER_AY_PI_32(void); +INLINE uint OPER_AY_PD_8(void); +INLINE uint OPER_AY_PD_16(void); +INLINE uint OPER_AY_PD_32(void); +INLINE uint OPER_AY_DI_8(void); +INLINE uint OPER_AY_DI_16(void); +INLINE uint OPER_AY_DI_32(void); +INLINE uint OPER_AY_IX_8(void); +INLINE uint OPER_AY_IX_16(void); +INLINE uint OPER_AY_IX_32(void); + +INLINE uint OPER_AX_AI_8(void); +INLINE uint OPER_AX_AI_16(void); +INLINE uint OPER_AX_AI_32(void); +INLINE uint OPER_AX_PI_8(void); +INLINE uint OPER_AX_PI_16(void); +INLINE uint OPER_AX_PI_32(void); +INLINE uint OPER_AX_PD_8(void); +INLINE uint OPER_AX_PD_16(void); +INLINE uint OPER_AX_PD_32(void); +INLINE uint OPER_AX_DI_8(void); +INLINE uint OPER_AX_DI_16(void); +INLINE uint OPER_AX_DI_32(void); +INLINE uint OPER_AX_IX_8(void); +INLINE uint OPER_AX_IX_16(void); +INLINE uint OPER_AX_IX_32(void); + +INLINE uint OPER_A7_PI_8(void); +INLINE uint OPER_A7_PD_8(void); + +INLINE uint OPER_AW_8(void); +INLINE uint OPER_AW_16(void); +INLINE uint OPER_AW_32(void); +INLINE uint OPER_AL_8(void); +INLINE uint OPER_AL_16(void); +INLINE uint OPER_AL_32(void); +INLINE uint OPER_PCDI_8(void); +INLINE uint OPER_PCDI_16(void); +INLINE uint OPER_PCDI_32(void); +INLINE uint OPER_PCIX_8(void); +INLINE uint OPER_PCIX_16(void); +INLINE uint OPER_PCIX_32(void); + +/* Stack operations */ +INLINE void m68ki_push_16(uint value); +INLINE void m68ki_push_32(uint value); +INLINE uint m68ki_pull_16(void); +INLINE uint m68ki_pull_32(void); + +/* Program flow operations */ +INLINE void m68ki_jump(uint new_pc); +INLINE void m68ki_jump_vector(uint vector); +INLINE void m68ki_branch_8(uint offset); +INLINE void m68ki_branch_16(uint offset); +INLINE void m68ki_branch_32(uint offset); + +/* Status register operations. */ +INLINE void m68ki_set_s_flag(uint value); /* Only bit 2 of value should be set (i.e. 4 or 0) */ +INLINE void m68ki_set_sm_flag(uint value); /* only bits 1 and 2 of value should be set */ +INLINE void m68ki_set_ccr(uint value); /* set the condition code register */ +INLINE void m68ki_set_sr(uint value); /* set the status register */ +INLINE void m68ki_set_sr_noint(uint value); /* set the status register */ + +/* Exception processing */ +INLINE uint m68ki_init_exception(void); /* Initial exception processing */ + +INLINE void m68ki_stack_frame_3word(uint pc, uint sr); /* Stack various frame types */ +INLINE void m68ki_stack_frame_buserr(uint pc, uint sr, uint address, uint write, uint instruction, uint fc); + +INLINE void m68ki_stack_frame_0000(uint pc, uint sr, uint vector); +INLINE void m68ki_stack_frame_0001(uint pc, uint sr, uint vector); +INLINE void m68ki_stack_frame_0010(uint sr, uint vector); +INLINE void m68ki_stack_frame_1000(uint pc, uint sr, uint vector); +INLINE void m68ki_stack_frame_1010(uint sr, uint vector, uint pc); +INLINE void m68ki_stack_frame_1011(uint sr, uint vector, uint pc); + +INLINE void m68ki_exception_trap(uint vector); +INLINE void m68ki_exception_trapN(uint vector); +INLINE void m68ki_exception_trace(void); +INLINE void m68ki_exception_privilege_violation(void); +INLINE void m68ki_exception_1010(void); +INLINE void m68ki_exception_1111(void); +INLINE void m68ki_exception_illegal(void); +INLINE void m68ki_exception_format_error(void); +INLINE void m68ki_exception_address_error(void); +INLINE void m68ki_exception_interrupt(uint int_level); +INLINE void m68ki_check_interrupts(void); /* ASG: check for interrupts */ + +/* quick disassembly (used for logging) */ +char* m68ki_disassemble_quick(unsigned int pc, unsigned int cpu_type); + + +/* ======================================================================== */ +/* =========================== UTILITY FUNCTIONS ========================== */ +/* ======================================================================== */ + + +/* ---------------------------- Read Immediate ---------------------------- */ + +/* Handles all immediate reads, does address error check, function code setting, + * and prefetching if they are enabled in m68kconf.h + */ +INLINE uint m68ki_read_imm_16(void) +{ + m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(REG_PC); /* auto-disable (see m68kcpu.h) */ +#if M68K_EMULATE_PREFETCH + if(MASK_OUT_BELOW_2(REG_PC) != CPU_PREF_ADDR) + { + CPU_PREF_ADDR = MASK_OUT_BELOW_2(REG_PC); + CPU_PREF_DATA = m68k_read_immediate_32(ADDRESS_68K(CPU_PREF_ADDR)); + } + REG_PC += 2; + return MASK_OUT_ABOVE_16(CPU_PREF_DATA >> ((2-((REG_PC-2)&2))<<3)); +#else + REG_PC += 2; + return m68k_read_immediate_16(ADDRESS_68K(REG_PC-2)); +#endif /* M68K_EMULATE_PREFETCH */ +} +INLINE uint m68ki_read_imm_32(void) +{ +#if M68K_EMULATE_PREFETCH + uint temp_val; + + m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(REG_PC); /* auto-disable (see m68kcpu.h) */ + if(MASK_OUT_BELOW_2(REG_PC) != CPU_PREF_ADDR) + { + CPU_PREF_ADDR = MASK_OUT_BELOW_2(REG_PC); + CPU_PREF_DATA = m68k_read_immediate_32(ADDRESS_68K(CPU_PREF_ADDR)); + } + temp_val = CPU_PREF_DATA; + REG_PC += 2; + if(MASK_OUT_BELOW_2(REG_PC) != CPU_PREF_ADDR) + { + CPU_PREF_ADDR = MASK_OUT_BELOW_2(REG_PC); + CPU_PREF_DATA = m68k_read_immediate_32(ADDRESS_68K(CPU_PREF_ADDR)); + temp_val = MASK_OUT_ABOVE_32((temp_val << 16) | (CPU_PREF_DATA >> 16)); + } + REG_PC += 2; + + return temp_val; +#else + m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(REG_PC); /* auto-disable (see m68kcpu.h) */ + REG_PC += 4; + return m68k_read_immediate_32(ADDRESS_68K(REG_PC-4)); +#endif /* M68K_EMULATE_PREFETCH */ +} + + + +/* ------------------------- Top level read/write ------------------------- */ + +/* Handles all memory accesses (except for immediate reads if they are + * configured to use separate functions in m68kconf.h). + * All memory accesses must go through these top level functions. + * These functions will also check for address error and set the function + * code if they are enabled in m68kconf.h. + */ +INLINE uint m68ki_read_8_fc(uint address, uint fc) +{ + m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ + return m68k_read_memory_8(ADDRESS_68K(address)); +} +INLINE uint m68ki_read_16_fc(uint address, uint fc) +{ + m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(address); /* auto-disable (see m68kcpu.h) */ + return m68k_read_memory_16(ADDRESS_68K(address)); +} +INLINE uint m68ki_read_32_fc(uint address, uint fc) +{ + m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(address); /* auto-disable (see m68kcpu.h) */ + return m68k_read_memory_32(ADDRESS_68K(address)); +} + +INLINE void m68ki_write_8_fc(uint address, uint fc, uint value) +{ + m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ + m68k_write_memory_8(ADDRESS_68K(address), value); +} +INLINE void m68ki_write_16_fc(uint address, uint fc, uint value) +{ + m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(address); /* auto-disable (see m68kcpu.h) */ + m68k_write_memory_16(ADDRESS_68K(address), value); +} +INLINE void m68ki_write_32_fc(uint address, uint fc, uint value) +{ + m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(address); /* auto-disable (see m68kcpu.h) */ + m68k_write_memory_32(ADDRESS_68K(address), value); +} + + + +/* --------------------- Effective Address Calculation -------------------- */ + +/* The program counter relative addressing modes cause operands to be + * retrieved from program space, not data space. + */ +INLINE uint m68ki_get_ea_pcdi(void) +{ + uint old_pc = REG_PC; + m68ki_use_program_space(); /* auto-disable */ + return old_pc + MAKE_INT_16(m68ki_read_imm_16()); +} + + +INLINE uint m68ki_get_ea_pcix(void) +{ + m68ki_use_program_space(); /* auto-disable */ + return m68ki_get_ea_ix(REG_PC); +} + +/* Indexed addressing modes are encoded as follows: + * + * Base instruction format: + * F E D C B A 9 8 7 6 | 5 4 3 | 2 1 0 + * x x x x x x x x x x | 1 1 0 | BASE REGISTER (An) + * + * Base instruction format for destination EA in move instructions: + * F E D C | B A 9 | 8 7 6 | 5 4 3 2 1 0 + * x x x x | BASE REG | 1 1 0 | X X X X X X (An) + * + * Brief extension format: + * F | E D C | B | A 9 | 8 | 7 6 5 4 3 2 1 0 + * D/A | REGISTER | W/L | SCALE | 0 | DISPLACEMENT + * + * Full extension format: + * F E D C B A 9 8 7 6 5 4 3 2 1 0 + * D/A | REGISTER | W/L | SCALE | 1 | BS | IS | BD SIZE | 0 | I/IS + * BASE DISPLACEMENT (0, 16, 32 bit) (bd) + * OUTER DISPLACEMENT (0, 16, 32 bit) (od) + * + * D/A: 0 = Dn, 1 = An (Xn) + * W/L: 0 = W (sign extend), 1 = L (.SIZE) + * SCALE: 00=1, 01=2, 10=4, 11=8 (*SCALE) + * BS: 0=add base reg, 1=suppress base reg (An suppressed) + * IS: 0=add index, 1=suppress index (Xn suppressed) + * BD SIZE: 00=reserved, 01=NULL, 10=Word, 11=Long (size of bd) + * + * IS I/IS Operation + * 0 000 No Memory Indirect + * 0 001 indir prex with null outer + * 0 010 indir prex with word outer + * 0 011 indir prex with long outer + * 0 100 reserved + * 0 101 indir postx with null outer + * 0 110 indir postx with word outer + * 0 111 indir postx with long outer + * 1 000 no memory indirect + * 1 001 mem indir with null outer + * 1 010 mem indir with word outer + * 1 011 mem indir with long outer + * 1 100-111 reserved + */ +INLINE uint m68ki_get_ea_ix(uint An) +{ + /* An = base register */ + uint extension = m68ki_read_imm_16(); + uint Xn = 0; /* Index register */ + uint bd = 0; /* Base Displacement */ + uint od = 0; /* Outer Displacement */ + + if(CPU_TYPE_IS_010_LESS(CPU_TYPE)) + { + /* Calculate index */ + Xn = REG_DA[extension>>12]; /* Xn */ + if(!BIT_B(extension)) /* W/L */ + Xn = MAKE_INT_16(Xn); + + /* Add base register and displacement and return */ + return An + Xn + MAKE_INT_8(extension); + } + + /* Brief extension format */ + if(!BIT_8(extension)) + { + /* Calculate index */ + Xn = REG_DA[extension>>12]; /* Xn */ + if(!BIT_B(extension)) /* W/L */ + Xn = MAKE_INT_16(Xn); + /* Add scale if proper CPU type */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + Xn <<= (extension>>9) & 3; /* SCALE */ + + /* Add base register and displacement and return */ + return An + Xn + MAKE_INT_8(extension); + } + + /* Full extension format */ + + USE_CYCLES(m68ki_ea_idx_cycle_table[extension&0x3f]); + + /* Check if base register is present */ + if(BIT_7(extension)) /* BS */ + An = 0; /* An */ + + /* Check if index is present */ + if(!BIT_6(extension)) /* IS */ + { + Xn = REG_DA[extension>>12]; /* Xn */ + if(!BIT_B(extension)) /* W/L */ + Xn = MAKE_INT_16(Xn); + Xn <<= (extension>>9) & 3; /* SCALE */ + } + + /* Check if base displacement is present */ + if(BIT_5(extension)) /* BD SIZE */ + bd = BIT_4(extension) ? m68ki_read_imm_32() : MAKE_INT_16(m68ki_read_imm_16()); + + /* If no indirect action, we are done */ + if(!(extension&7)) /* No Memory Indirect */ + return An + bd + Xn; + + /* Check if outer displacement is present */ + if(BIT_1(extension)) /* I/IS: od */ + od = BIT_0(extension) ? m68ki_read_imm_32() : MAKE_INT_16(m68ki_read_imm_16()); + + /* Postindex */ + if(BIT_2(extension)) /* I/IS: 0 = preindex, 1 = postindex */ + return m68ki_read_32(An + bd) + Xn + od; + + /* Preindex */ + return m68ki_read_32(An + bd + Xn) + od; +} + + +/* Fetch operands */ +INLINE uint OPER_AY_AI_8(void) {uint ea = EA_AY_AI_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AY_AI_16(void) {uint ea = EA_AY_AI_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AY_AI_32(void) {uint ea = EA_AY_AI_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AY_PI_8(void) {uint ea = EA_AY_PI_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AY_PI_16(void) {uint ea = EA_AY_PI_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AY_PI_32(void) {uint ea = EA_AY_PI_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AY_PD_8(void) {uint ea = EA_AY_PD_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AY_PD_16(void) {uint ea = EA_AY_PD_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AY_PD_32(void) {uint ea = EA_AY_PD_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AY_DI_8(void) {uint ea = EA_AY_DI_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AY_DI_16(void) {uint ea = EA_AY_DI_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AY_DI_32(void) {uint ea = EA_AY_DI_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AY_IX_8(void) {uint ea = EA_AY_IX_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AY_IX_16(void) {uint ea = EA_AY_IX_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AY_IX_32(void) {uint ea = EA_AY_IX_32(); return m68ki_read_32(ea);} + +INLINE uint OPER_AX_AI_8(void) {uint ea = EA_AX_AI_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AX_AI_16(void) {uint ea = EA_AX_AI_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AX_AI_32(void) {uint ea = EA_AX_AI_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AX_PI_8(void) {uint ea = EA_AX_PI_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AX_PI_16(void) {uint ea = EA_AX_PI_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AX_PI_32(void) {uint ea = EA_AX_PI_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AX_PD_8(void) {uint ea = EA_AX_PD_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AX_PD_16(void) {uint ea = EA_AX_PD_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AX_PD_32(void) {uint ea = EA_AX_PD_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AX_DI_8(void) {uint ea = EA_AX_DI_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AX_DI_16(void) {uint ea = EA_AX_DI_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AX_DI_32(void) {uint ea = EA_AX_DI_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AX_IX_8(void) {uint ea = EA_AX_IX_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AX_IX_16(void) {uint ea = EA_AX_IX_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AX_IX_32(void) {uint ea = EA_AX_IX_32(); return m68ki_read_32(ea);} + +INLINE uint OPER_A7_PI_8(void) {uint ea = EA_A7_PI_8(); return m68ki_read_8(ea); } +INLINE uint OPER_A7_PD_8(void) {uint ea = EA_A7_PD_8(); return m68ki_read_8(ea); } + +INLINE uint OPER_AW_8(void) {uint ea = EA_AW_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AW_16(void) {uint ea = EA_AW_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AW_32(void) {uint ea = EA_AW_32(); return m68ki_read_32(ea);} +INLINE uint OPER_AL_8(void) {uint ea = EA_AL_8(); return m68ki_read_8(ea); } +INLINE uint OPER_AL_16(void) {uint ea = EA_AL_16(); return m68ki_read_16(ea);} +INLINE uint OPER_AL_32(void) {uint ea = EA_AL_32(); return m68ki_read_32(ea);} +INLINE uint OPER_PCDI_8(void) {uint ea = EA_PCDI_8(); return m68ki_read_pcrel_8(ea); } +INLINE uint OPER_PCDI_16(void) {uint ea = EA_PCDI_16(); return m68ki_read_pcrel_16(ea);} +INLINE uint OPER_PCDI_32(void) {uint ea = EA_PCDI_32(); return m68ki_read_pcrel_32(ea);} +INLINE uint OPER_PCIX_8(void) {uint ea = EA_PCIX_8(); return m68ki_read_pcrel_8(ea); } +INLINE uint OPER_PCIX_16(void) {uint ea = EA_PCIX_16(); return m68ki_read_pcrel_16(ea);} +INLINE uint OPER_PCIX_32(void) {uint ea = EA_PCIX_32(); return m68ki_read_pcrel_32(ea);} + + + +/* ---------------------------- Stack Functions --------------------------- */ + +/* Push/pull data from the stack */ +INLINE void m68ki_push_16(uint value) +{ + REG_SP = MASK_OUT_ABOVE_32(REG_SP - 2); + m68ki_write_16(REG_SP, value); +} + +INLINE void m68ki_push_32(uint value) +{ + REG_SP = MASK_OUT_ABOVE_32(REG_SP - 4); + m68ki_write_32(REG_SP, value); +} + +INLINE uint m68ki_pull_16(void) +{ + REG_SP = MASK_OUT_ABOVE_32(REG_SP + 2); + return m68ki_read_16(REG_SP-2); +} + +INLINE uint m68ki_pull_32(void) +{ + REG_SP = MASK_OUT_ABOVE_32(REG_SP + 4); + return m68ki_read_32(REG_SP-4); +} + + +/* Increment/decrement the stack as if doing a push/pull but + * don't do any memory access. + */ +INLINE void m68ki_fake_push_16(void) +{ + REG_SP = MASK_OUT_ABOVE_32(REG_SP - 2); +} + +INLINE void m68ki_fake_push_32(void) +{ + REG_SP = MASK_OUT_ABOVE_32(REG_SP - 4); +} + +INLINE void m68ki_fake_pull_16(void) +{ + REG_SP = MASK_OUT_ABOVE_32(REG_SP + 2); +} + +INLINE void m68ki_fake_pull_32(void) +{ + REG_SP = MASK_OUT_ABOVE_32(REG_SP + 4); +} + + +/* ----------------------------- Program Flow ----------------------------- */ + +/* Jump to a new program location or vector. + * These functions will also call the pc_changed callback if it was enabled + * in m68kconf.h. + */ +INLINE void m68ki_jump(uint new_pc) +{ + REG_PC = new_pc; + m68ki_pc_changed(REG_PC); +} + +INLINE void m68ki_jump_vector(uint vector) +{ + REG_PC = (vector<<2) + REG_VBR; + REG_PC = m68ki_read_data_32(REG_PC); + m68ki_pc_changed(REG_PC); +} + + +/* Branch to a new memory location. + * The 32-bit branch will call pc_changed if it was enabled in m68kconf.h. + * So far I've found no problems with not calling pc_changed for 8 or 16 + * bit branches. + */ +INLINE void m68ki_branch_8(uint offset) +{ + REG_PC += MAKE_INT_8(offset); +} + +INLINE void m68ki_branch_16(uint offset) +{ + REG_PC += MAKE_INT_16(offset); +} + +INLINE void m68ki_branch_32(uint offset) +{ + REG_PC += offset; + m68ki_pc_changed(REG_PC); +} + + + +/* ---------------------------- Status Register --------------------------- */ + +/* Set the S flag and change the active stack pointer. + * Note that value MUST be 4 or 0. + */ +INLINE void m68ki_set_s_flag(uint value) +{ + /* Backup the old stack pointer */ + REG_SP_BASE[FLAG_S | ((FLAG_S>>1) & FLAG_M)] = REG_SP; + /* Set the S flag */ + FLAG_S = value; + /* Set the new stack pointer */ + REG_SP = REG_SP_BASE[FLAG_S | ((FLAG_S>>1) & FLAG_M)]; +} + +/* Set the S and M flags and change the active stack pointer. + * Note that value MUST be 0, 2, 4, or 6 (bit2 = S, bit1 = M). + */ +INLINE void m68ki_set_sm_flag(uint value) +{ + /* Backup the old stack pointer */ + REG_SP_BASE[FLAG_S | ((FLAG_S>>1) & FLAG_M)] = REG_SP; + /* Set the S and M flags */ + FLAG_S = value & SFLAG_SET; + FLAG_M = value & MFLAG_SET; + /* Set the new stack pointer */ + REG_SP = REG_SP_BASE[FLAG_S | ((FLAG_S>>1) & FLAG_M)]; +} + + +/* Set the condition code register */ +INLINE void m68ki_set_ccr(uint value) +{ + FLAG_X = BIT_4(value) << 4; + FLAG_N = BIT_3(value) << 4; + FLAG_Z = !BIT_2(value); + FLAG_V = BIT_1(value) << 6; + FLAG_C = BIT_0(value) << 8; +} + +/* Set the status register but don't check for interrupts */ +INLINE void m68ki_set_sr_noint(uint value) +{ + /* Mask out the "unimplemented" bits */ + value &= CPU_SR_MASK; + + /* Now set the status register */ + FLAG_T1 = BIT_F(value); + FLAG_T0 = BIT_E(value); + FLAG_INT_MASK = value & 0x0700; + m68ki_set_ccr(value); + m68ki_set_sm_flag((value >> 11) & 6); +} + +/* Set the status register and check for interrupts */ +INLINE void m68ki_set_sr(uint value) +{ + m68ki_set_sr_noint(value); + m68ki_check_interrupts(); +} + + +/* ------------------------- Exception Processing ------------------------- */ + +/* Initiate exception processing */ +INLINE uint m68ki_init_exception(void) +{ + /* Save the old status register */ + uint sr = m68ki_get_sr(); + + /* Turn off trace flag, clear pending traces */ + FLAG_T1 = FLAG_T0 = 0; + m68ki_clear_trace(); + /* Enter supervisor mode */ + m68ki_set_s_flag(SFLAG_SET); + + return sr; +} + +/* 3 word stack frame (68000 only) */ +INLINE void m68ki_stack_frame_3word(uint pc, uint sr) +{ + m68ki_push_32(pc); + m68ki_push_16(sr); +} + +/* Format 0 stack frame. + * This is the standard stack frame for 68010+. + */ +INLINE void m68ki_stack_frame_0000(uint pc, uint sr, uint vector) +{ + /* Stack a 3-word frame if we are 68000 */ + if(CPU_TYPE == CPU_TYPE_000) + { + m68ki_stack_frame_3word(pc, sr); + return; + } + m68ki_push_16(vector<<2); + m68ki_push_32(pc); + m68ki_push_16(sr); +} + +/* Format 1 stack frame (68020). + * For 68020, this is the 4 word throwaway frame. + */ +INLINE void m68ki_stack_frame_0001(uint pc, uint sr, uint vector) +{ + m68ki_push_16(0x1000 | (vector<<2)); + m68ki_push_32(pc); + m68ki_push_16(sr); +} + +/* Format 2 stack frame. + * This is used only by 68020 for trap exceptions. + */ +INLINE void m68ki_stack_frame_0010(uint sr, uint vector) +{ + m68ki_push_32(REG_PPC); + m68ki_push_16(0x2000 | (vector<<2)); + m68ki_push_32(REG_PC); + m68ki_push_16(sr); +} + + +/* Bus error stack frame (68000 only). + */ +INLINE void m68ki_stack_frame_buserr(uint pc, uint sr, uint address, uint write, uint instruction, uint fc) +{ + m68ki_push_32(pc); + m68ki_push_16(sr); + m68ki_push_16(REG_IR); + m68ki_push_32(address); /* access address */ + /* 0 0 0 0 0 0 0 0 0 0 0 R/W I/N FC + * R/W 0 = write, 1 = read + * I/N 0 = instruction, 1 = not + * FC 3-bit function code + */ + m68ki_push_16(((!write)<<4) | ((!instruction)<<3) | fc); +} + +/* Format 8 stack frame (68010). + * 68010 only. This is the 29 word bus/address error frame. + */ +void m68ki_stack_frame_1000(uint pc, uint sr, uint vector) +{ + /* VERSION + * NUMBER + * INTERNAL INFORMATION, 16 WORDS + */ + m68ki_fake_push_32(); + m68ki_fake_push_32(); + m68ki_fake_push_32(); + m68ki_fake_push_32(); + m68ki_fake_push_32(); + m68ki_fake_push_32(); + m68ki_fake_push_32(); + m68ki_fake_push_32(); + + /* INSTRUCTION INPUT BUFFER */ + m68ki_push_16(0); + + /* UNUSED, RESERVED (not written) */ + m68ki_fake_push_16(); + + /* DATA INPUT BUFFER */ + m68ki_push_16(0); + + /* UNUSED, RESERVED (not written) */ + m68ki_fake_push_16(); + + /* DATA OUTPUT BUFFER */ + m68ki_push_16(0); + + /* UNUSED, RESERVED (not written) */ + m68ki_fake_push_16(); + + /* FAULT ADDRESS */ + m68ki_push_32(0); + + /* SPECIAL STATUS WORD */ + m68ki_push_16(0); + + /* 1000, VECTOR OFFSET */ + m68ki_push_16(0x8000 | (vector<<2)); + + /* PROGRAM COUNTER */ + m68ki_push_32(pc); + + /* STATUS REGISTER */ + m68ki_push_16(sr); +} + +/* Format A stack frame (short bus fault). + * This is used only by 68020 for bus fault and address error + * if the error happens at an instruction boundary. + * PC stacked is address of next instruction. + */ +void m68ki_stack_frame_1010(uint sr, uint vector, uint pc) +{ + /* INTERNAL REGISTER */ + m68ki_push_16(0); + + /* INTERNAL REGISTER */ + m68ki_push_16(0); + + /* DATA OUTPUT BUFFER (2 words) */ + m68ki_push_32(0); + + /* INTERNAL REGISTER */ + m68ki_push_16(0); + + /* INTERNAL REGISTER */ + m68ki_push_16(0); + + /* DATA CYCLE FAULT ADDRESS (2 words) */ + m68ki_push_32(0); + + /* INSTRUCTION PIPE STAGE B */ + m68ki_push_16(0); + + /* INSTRUCTION PIPE STAGE C */ + m68ki_push_16(0); + + /* SPECIAL STATUS REGISTER */ + m68ki_push_16(0); + + /* INTERNAL REGISTER */ + m68ki_push_16(0); + + /* 1010, VECTOR OFFSET */ + m68ki_push_16(0xa000 | (vector<<2)); + + /* PROGRAM COUNTER */ + m68ki_push_32(pc); + + /* STATUS REGISTER */ + m68ki_push_16(sr); +} + +/* Format B stack frame (long bus fault). + * This is used only by 68020 for bus fault and address error + * if the error happens during instruction execution. + * PC stacked is address of instruction in progress. + */ +void m68ki_stack_frame_1011(uint sr, uint vector, uint pc) +{ + /* INTERNAL REGISTERS (18 words) */ + m68ki_push_32(0); + m68ki_push_32(0); + m68ki_push_32(0); + m68ki_push_32(0); + m68ki_push_32(0); + m68ki_push_32(0); + m68ki_push_32(0); + m68ki_push_32(0); + m68ki_push_32(0); + + /* VERSION# (4 bits), INTERNAL INFORMATION */ + m68ki_push_16(0); + + /* INTERNAL REGISTERS (3 words) */ + m68ki_push_32(0); + m68ki_push_16(0); + + /* DATA INTPUT BUFFER (2 words) */ + m68ki_push_32(0); + + /* INTERNAL REGISTERS (2 words) */ + m68ki_push_32(0); + + /* STAGE B ADDRESS (2 words) */ + m68ki_push_32(0); + + /* INTERNAL REGISTER (4 words) */ + m68ki_push_32(0); + m68ki_push_32(0); + + /* DATA OUTPUT BUFFER (2 words) */ + m68ki_push_32(0); + + /* INTERNAL REGISTER */ + m68ki_push_16(0); + + /* INTERNAL REGISTER */ + m68ki_push_16(0); + + /* DATA CYCLE FAULT ADDRESS (2 words) */ + m68ki_push_32(0); + + /* INSTRUCTION PIPE STAGE B */ + m68ki_push_16(0); + + /* INSTRUCTION PIPE STAGE C */ + m68ki_push_16(0); + + /* SPECIAL STATUS REGISTER */ + m68ki_push_16(0); + + /* INTERNAL REGISTER */ + m68ki_push_16(0); + + /* 1011, VECTOR OFFSET */ + m68ki_push_16(0xb000 | (vector<<2)); + + /* PROGRAM COUNTER */ + m68ki_push_32(pc); + + /* STATUS REGISTER */ + m68ki_push_16(sr); +} + + +/* Used for Group 2 exceptions. + * These stack a type 2 frame on the 020. + */ +INLINE void m68ki_exception_trap(uint vector) +{ + uint sr = m68ki_init_exception(); + + if(CPU_TYPE_IS_010_LESS(CPU_TYPE)) + m68ki_stack_frame_0000(REG_PC, sr, vector); + else + m68ki_stack_frame_0010(sr, vector); + + m68ki_jump_vector(vector); + + /* Use up some clock cycles */ + USE_CYCLES(CYC_EXCEPTION[vector]); +} + +/* Trap#n stacks a 0 frame but behaves like group2 otherwise */ +INLINE void m68ki_exception_trapN(uint vector) +{ + uint sr = m68ki_init_exception(); + m68ki_stack_frame_0000(REG_PC, sr, vector); + m68ki_jump_vector(vector); + + /* Use up some clock cycles */ + USE_CYCLES(CYC_EXCEPTION[vector]); +} + +/* Exception for trace mode */ +INLINE void m68ki_exception_trace(void) +{ + uint sr = m68ki_init_exception(); + + if(CPU_TYPE_IS_010_LESS(CPU_TYPE)) + m68ki_stack_frame_0000(REG_PC, sr, EXCEPTION_TRACE); + else + m68ki_stack_frame_0010(sr, EXCEPTION_TRACE); + + m68ki_jump_vector(EXCEPTION_TRACE); + + /* Trace nullifies a STOP instruction */ + CPU_STOPPED &= ~STOP_LEVEL_STOP; + + /* Use up some clock cycles */ + USE_CYCLES(CYC_EXCEPTION[EXCEPTION_TRACE]); +} + +/* Exception for privilege violation */ +INLINE void m68ki_exception_privilege_violation(void) +{ + uint sr = m68ki_init_exception(); + m68ki_stack_frame_0000(REG_PC, sr, EXCEPTION_PRIVILEGE_VIOLATION); + m68ki_jump_vector(EXCEPTION_PRIVILEGE_VIOLATION); + + /* Use up some clock cycles and undo the instruction's cycles */ + USE_CYCLES(CYC_EXCEPTION[EXCEPTION_PRIVILEGE_VIOLATION] - CYC_INSTRUCTION[REG_IR]); +} + +/* Exception for A-Line instructions */ +INLINE void m68ki_exception_1010(void) +{ + uint sr; +#if M68K_LOG_1010_1111 == OPT_ON + M68K_DO_LOG_EMU((M68K_LOG_FILEHANDLE "%s at %08x: called 1010 instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PPC), REG_IR, + m68ki_disassemble_quick(ADDRESS_68K(REG_PPC)))); +#endif + + sr = m68ki_init_exception(); + m68ki_stack_frame_0000(REG_PC-2, sr, EXCEPTION_1010); + m68ki_jump_vector(EXCEPTION_1010); + + /* Use up some clock cycles and undo the instruction's cycles */ + USE_CYCLES(CYC_EXCEPTION[EXCEPTION_1010] - CYC_INSTRUCTION[REG_IR]); +} + +/* Exception for F-Line instructions */ +INLINE void m68ki_exception_1111(void) +{ + uint sr; + +#if M68K_LOG_1010_1111 == OPT_ON + M68K_DO_LOG_EMU((M68K_LOG_FILEHANDLE "%s at %08x: called 1111 instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PPC), REG_IR, + m68ki_disassemble_quick(ADDRESS_68K(REG_PPC)))); +#endif + + sr = m68ki_init_exception(); + m68ki_stack_frame_0000(REG_PC-2, sr, EXCEPTION_1111); + m68ki_jump_vector(EXCEPTION_1111); + + /* Use up some clock cycles and undo the instruction's cycles */ + USE_CYCLES(CYC_EXCEPTION[EXCEPTION_1111] - CYC_INSTRUCTION[REG_IR]); +} + +/* Exception for illegal instructions */ +INLINE void m68ki_exception_illegal(void) +{ + uint sr; + + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: illegal instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PPC), REG_IR, + m68ki_disassemble_quick(ADDRESS_68K(REG_PPC)))); + + sr = m68ki_init_exception(); + m68ki_stack_frame_0000(REG_PC, sr, EXCEPTION_ILLEGAL_INSTRUCTION); + m68ki_jump_vector(EXCEPTION_ILLEGAL_INSTRUCTION); + + /* Use up some clock cycles and undo the instruction's cycles */ + USE_CYCLES(CYC_EXCEPTION[EXCEPTION_ILLEGAL_INSTRUCTION] - CYC_INSTRUCTION[REG_IR]); +} + +/* Exception for format errror in RTE */ +INLINE void m68ki_exception_format_error(void) +{ + uint sr = m68ki_init_exception(); + m68ki_stack_frame_0000(REG_PC, sr, EXCEPTION_FORMAT_ERROR); + m68ki_jump_vector(EXCEPTION_FORMAT_ERROR); + + /* Use up some clock cycles and undo the instruction's cycles */ + USE_CYCLES(CYC_EXCEPTION[EXCEPTION_FORMAT_ERROR] - CYC_INSTRUCTION[REG_IR]); +} + +/* Exception for address error */ +INLINE void m68ki_exception_address_error(void) +{ + /* Not emulated yet */ +} + + +/* Service an interrupt request and start exception processing */ +void m68ki_exception_interrupt(uint int_level) +{ + uint vector; + uint sr; + uint new_pc; + + /* Turn off the stopped state */ + CPU_STOPPED &= ~STOP_LEVEL_STOP; + + /* If we are halted, don't do anything */ + if(CPU_STOPPED) return; + + /* Acknowledge the interrupt */ + vector = m68ki_int_ack(int_level); + + /* Get the interrupt vector */ + if(vector == M68K_INT_ACK_AUTOVECTOR) + /* Use the autovectors. This is the most commonly used implementation */ + vector = EXCEPTION_INTERRUPT_AUTOVECTOR+int_level; + else if(vector == M68K_INT_ACK_SPURIOUS) + /* Called if no devices respond to the interrupt acknowledge */ + vector = EXCEPTION_SPURIOUS_INTERRUPT; + else if(vector > 255) + { + M68K_DO_LOG_EMU((M68K_LOG_FILEHANDLE "%s at %08x: Interrupt acknowledge returned invalid vector $%x\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC), vector)); + return; + } + + /* Start exception processing */ + sr = m68ki_init_exception(); + + /* Set the interrupt mask to the level of the one being serviced */ + FLAG_INT_MASK = int_level<<8; + + /* Get the new PC */ + new_pc = m68ki_read_data_32((vector<<2) + REG_VBR); + + /* If vector is uninitialized, call the uninitialized interrupt vector */ + if(new_pc == 0) + new_pc = m68ki_read_data_32((EXCEPTION_UNINITIALIZED_INTERRUPT<<2) + REG_VBR); + + /* Generate a stack frame */ + m68ki_stack_frame_0000(REG_PC, sr, vector); + if(FLAG_M && CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Create throwaway frame */ + m68ki_set_sm_flag(FLAG_S); /* clear M */ + sr |= 0x2000; /* Same as SR in master stack frame except S is forced high */ + m68ki_stack_frame_0001(REG_PC, sr, vector); + } + + m68ki_jump(new_pc); + + /* Defer cycle counting until later */ + CPU_INT_CYCLES += CYC_EXCEPTION[vector]; + +//#if !M68K_EMULATE_INT_ACK + /* Automatically clear IRQ if we are not using an acknowledge scheme */ + CPU_INT_LEVEL = 0; +//#endif /* M68K_EMULATE_INT_ACK */ +} + + +/* ASG: Check for interrupts */ +INLINE void m68ki_check_interrupts(void) +{ + if(CPU_INT_LEVEL > FLAG_INT_MASK) + m68ki_exception_interrupt(CPU_INT_LEVEL>>8); +} + + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + +#endif /* M68KCPU__HEADER */ diff --git a/ genplus-gx/source/m68k/m68kopac.c b/ genplus-gx/source/m68k/m68kopac.c new file mode 100644 index 0000000..d1ed933 --- /dev/null +++ b/ genplus-gx/source/m68k/m68kopac.c @@ -0,0 +1,11948 @@ +#include "m68kcpu.h" + +/* ======================================================================== */ +/* ========================= INSTRUCTION HANDLERS ========================= */ +/* ======================================================================== */ + + +void m68k_op_1010(void) +{ + m68ki_exception_1010(); +} + + +void m68k_op_1111(void) +{ + m68ki_exception_1111(); +} + + +void m68k_op_abcd_8_rr(void) +{ + uint* r_dst = &DX; + uint src = DY; + uint dst = *r_dst; + uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res -= 0xa0; + + FLAG_N = NFLAG_8(res); /* officially undefined */ + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +void m68k_op_abcd_8_mm_ax7(void) +{ + uint src = OPER_AY_PD_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res -= 0xa0; + + FLAG_N = NFLAG_8(res); /* officially undefined */ + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_abcd_8_mm_ay7(void) +{ + uint src = OPER_A7_PD_8(); + uint ea = EA_AX_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res -= 0xa0; + + FLAG_N = NFLAG_8(res); /* officially undefined */ + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_abcd_8_mm_axy7(void) +{ + uint src = OPER_A7_PD_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res -= 0xa0; + + FLAG_N = NFLAG_8(res); /* officially undefined */ + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_abcd_8_mm(void) +{ + uint src = OPER_AY_PD_8(); + uint ea = EA_AX_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); + + if(res > 9) + res += 6; + res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res -= 0xa0; + + FLAG_N = NFLAG_8(res); /* officially undefined */ + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_add_8_er_d(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_8(DY); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_ai(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_AI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_pi(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_pi7(void) +{ + uint* r_dst = &DX; + uint src = OPER_A7_PI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_pd(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PD_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_pd7(void) +{ + uint* r_dst = &DX; + uint src = OPER_A7_PD_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_di(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_DI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_ix(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_IX_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_aw(void) +{ + uint* r_dst = &DX; + uint src = OPER_AW_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_al(void) +{ + uint* r_dst = &DX; + uint src = OPER_AL_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_pcdi(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCDI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_pcix(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCIX_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_8_er_i(void) +{ + uint* r_dst = &DX; + uint src = OPER_I_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_d(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_16(DY); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_a(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_16(AY); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_ai(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_AI_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_pi(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PI_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_pd(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PD_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_di(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_DI_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_ix(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_IX_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_aw(void) +{ + uint* r_dst = &DX; + uint src = OPER_AW_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_al(void) +{ + uint* r_dst = &DX; + uint src = OPER_AL_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_pcdi(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCDI_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_pcix(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCIX_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_16_er_i(void) +{ + uint* r_dst = &DX; + uint src = OPER_I_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_add_32_er_d(void) +{ + uint* r_dst = &DX; + uint src = DY; + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_a(void) +{ + uint* r_dst = &DX; + uint src = AY; + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_ai(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_AI_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_pi(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PI_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_pd(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PD_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_di(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_DI_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_ix(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_IX_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_aw(void) +{ + uint* r_dst = &DX; + uint src = OPER_AW_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_al(void) +{ + uint* r_dst = &DX; + uint src = OPER_AL_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_pcdi(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCDI_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_pcix(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCIX_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_32_er_i(void) +{ + uint* r_dst = &DX; + uint src = OPER_I_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_add_8_re_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_8_re_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_8_re_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_8_re_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_8_re_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_8_re_di(void) +{ + uint ea = EA_AY_DI_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_8_re_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_8_re_aw(void) +{ + uint ea = EA_AW_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_8_re_al(void) +{ + uint ea = EA_AL_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_add_16_re_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_add_16_re_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_add_16_re_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_add_16_re_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_add_16_re_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_add_16_re_aw(void) +{ + uint ea = EA_AW_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_add_16_re_al(void) +{ + uint ea = EA_AL_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_add_32_re_ai(void) +{ + uint ea = EA_AY_AI_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_add_32_re_pi(void) +{ + uint ea = EA_AY_PI_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_add_32_re_pd(void) +{ + uint ea = EA_AY_PD_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_add_32_re_di(void) +{ + uint ea = EA_AY_DI_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_add_32_re_ix(void) +{ + uint ea = EA_AY_IX_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_add_32_re_aw(void) +{ + uint ea = EA_AW_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_add_32_re_al(void) +{ + uint ea = EA_AL_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_adda_16_d(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(DY)); +} + + +void m68k_op_adda_16_a(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(AY)); +} + + +void m68k_op_adda_16_ai(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_AY_AI_16())); +} + + +void m68k_op_adda_16_pi(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_AY_PI_16())); +} + + +void m68k_op_adda_16_pd(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_AY_PD_16())); +} + + +void m68k_op_adda_16_di(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_AY_DI_16())); +} + + +void m68k_op_adda_16_ix(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_AY_IX_16())); +} + + +void m68k_op_adda_16_aw(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_AW_16())); +} + + +void m68k_op_adda_16_al(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_AL_16())); +} + + +void m68k_op_adda_16_pcdi(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_PCDI_16())); +} + + +void m68k_op_adda_16_pcix(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_PCIX_16())); +} + + +void m68k_op_adda_16_i(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(OPER_I_16())); +} + + +void m68k_op_adda_32_d(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + DY); +} + + +void m68k_op_adda_32_a(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + AY); +} + + +void m68k_op_adda_32_ai(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_AY_AI_32()); +} + + +void m68k_op_adda_32_pi(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_AY_PI_32()); +} + + +void m68k_op_adda_32_pd(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_AY_PD_32()); +} + + +void m68k_op_adda_32_di(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_AY_DI_32()); +} + + +void m68k_op_adda_32_ix(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_AY_IX_32()); +} + + +void m68k_op_adda_32_aw(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_AW_32()); +} + + +void m68k_op_adda_32_al(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_AL_32()); +} + + +void m68k_op_adda_32_pcdi(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_PCDI_32()); +} + + +void m68k_op_adda_32_pcix(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_PCIX_32()); +} + + +void m68k_op_adda_32_i(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + OPER_I_32()); +} + + +void m68k_op_addi_8_d(void) +{ + uint* r_dst = &DY; + uint src = OPER_I_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_addi_8_ai(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_AI_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_8_pi(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_8_pi7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_8_pd(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_8_pd7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_8_di(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_DI_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_8_ix(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_IX_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_8_aw(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AW_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_8_al(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AL_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addi_16_d(void) +{ + uint* r_dst = &DY; + uint src = OPER_I_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_addi_16_ai(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_AI_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addi_16_pi(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PI_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addi_16_pd(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PD_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addi_16_di(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_DI_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addi_16_ix(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_IX_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addi_16_aw(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AW_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addi_16_al(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AL_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addi_32_d(void) +{ + uint* r_dst = &DY; + uint src = OPER_I_32(); + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_addi_32_ai(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_AI_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addi_32_pi(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PI_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addi_32_pd(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PD_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addi_32_di(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_DI_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addi_32_ix(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_IX_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addi_32_aw(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AW_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addi_32_al(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AL_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addq_8_d(void) +{ + uint* r_dst = &DY; + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_addq_8_ai(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_AI_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_8_pi(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_8_pi7(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_A7_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_8_pd(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_8_pd7(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_8_di(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_DI_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_8_ix(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_IX_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_8_aw(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AW_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_8_al(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AL_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst; + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_addq_16_d(void) +{ + uint* r_dst = &DY; + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_addq_16_a(void) +{ + uint* r_dst = &AY; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1); +} + + +void m68k_op_addq_16_ai(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_AI_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addq_16_pi(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PI_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addq_16_pd(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PD_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addq_16_di(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_DI_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addq_16_ix(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_IX_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addq_16_aw(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AW_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addq_16_al(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AL_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst; + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_addq_32_d(void) +{ + uint* r_dst = &DY; + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint dst = *r_dst; + uint res = src + dst; + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_addq_32_a(void) +{ + uint* r_dst = &AY; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1); +} + + +void m68k_op_addq_32_ai(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_AI_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addq_32_pi(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PI_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addq_32_pd(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PD_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addq_32_di(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_DI_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addq_32_ix(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_IX_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addq_32_aw(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AW_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addq_32_al(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AL_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst; + + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_addx_8_rr(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_8(DY); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +void m68k_op_addx_16_rr(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_16(DY); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; +} + + +void m68k_op_addx_32_rr(void) +{ + uint* r_dst = &DX; + uint src = DY; + uint dst = *r_dst; + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + *r_dst = res; +} + + +void m68k_op_addx_8_mm_ax7(void) +{ + uint src = OPER_AY_PD_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_addx_8_mm_ay7(void) +{ + uint src = OPER_A7_PD_8(); + uint ea = EA_AX_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_addx_8_mm_axy7(void) +{ + uint src = OPER_A7_PD_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_addx_8_mm(void) +{ + uint src = OPER_AY_PD_8(); + uint ea = EA_AX_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_V = VFLAG_ADD_8(src, dst, res); + FLAG_X = FLAG_C = CFLAG_8(res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_addx_16_mm(void) +{ + uint src = OPER_AY_PD_16(); + uint ea = EA_AX_PD_16(); + uint dst = m68ki_read_16(ea); + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_V = VFLAG_ADD_16(src, dst, res); + FLAG_X = FLAG_C = CFLAG_16(res); + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_addx_32_mm(void) +{ + uint src = OPER_AY_PD_32(); + uint ea = EA_AX_PD_32(); + uint dst = m68ki_read_32(ea); + uint res = src + dst + XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_ADD_32(src, dst, res); + FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_and_8_er_d(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (DY | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_ai(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_AI_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_pi(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PI_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_pi7(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PI_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_pd(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PD_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_pd7(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PD_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_di(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_DI_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_ix(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_IX_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_aw(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AW_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_al(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AL_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_pcdi(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCDI_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_pcix(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCIX_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_er_i(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_I_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_d(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (DY | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_ai(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_AI_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_pi(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PI_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_pd(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PD_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_di(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_DI_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_ix(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_IX_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_aw(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AW_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_al(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AL_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_pcdi(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCDI_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_pcix(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCIX_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_16_er_i(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_I_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_d(void) +{ + FLAG_Z = DX &= DY; + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_ai(void) +{ + FLAG_Z = DX &= OPER_AY_AI_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_pi(void) +{ + FLAG_Z = DX &= OPER_AY_PI_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_pd(void) +{ + FLAG_Z = DX &= OPER_AY_PD_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_di(void) +{ + FLAG_Z = DX &= OPER_AY_DI_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_ix(void) +{ + FLAG_Z = DX &= OPER_AY_IX_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_aw(void) +{ + FLAG_Z = DX &= OPER_AW_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_al(void) +{ + FLAG_Z = DX &= OPER_AL_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_pcdi(void) +{ + FLAG_Z = DX &= OPER_PCDI_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_pcix(void) +{ + FLAG_Z = DX &= OPER_PCIX_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_32_er_i(void) +{ + FLAG_Z = DX &= OPER_I_32(); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_and_8_re_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_8_re_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_8_re_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_8_re_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_8_re_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_8_re_di(void) +{ + uint ea = EA_AY_DI_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_8_re_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_8_re_aw(void) +{ + uint ea = EA_AW_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_8_re_al(void) +{ + uint ea = EA_AL_8(); + uint res = DX & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_and_16_re_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint res = DX & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_and_16_re_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint res = DX & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_and_16_re_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint res = DX & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_and_16_re_di(void) +{ + uint ea = EA_AY_DI_16(); + uint res = DX & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_and_16_re_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint res = DX & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_and_16_re_aw(void) +{ + uint ea = EA_AW_16(); + uint res = DX & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_and_16_re_al(void) +{ + uint ea = EA_AL_16(); + uint res = DX & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_and_32_re_ai(void) +{ + uint ea = EA_AY_AI_32(); + uint res = DX & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_and_32_re_pi(void) +{ + uint ea = EA_AY_PI_32(); + uint res = DX & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_and_32_re_pd(void) +{ + uint ea = EA_AY_PD_32(); + uint res = DX & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_and_32_re_di(void) +{ + uint ea = EA_AY_DI_32(); + uint res = DX & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_and_32_re_ix(void) +{ + uint ea = EA_AY_IX_32(); + uint res = DX & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_and_32_re_aw(void) +{ + uint ea = EA_AW_32(); + uint res = DX & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_and_32_re_al(void) +{ + uint ea = EA_AL_32(); + uint res = DX & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_andi_8_d(void) +{ + FLAG_Z = MASK_OUT_ABOVE_8(DY &= (OPER_I_8() | 0xffffff00)); + + FLAG_N = NFLAG_8(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_andi_8_ai(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_AI_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_8_pi(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PI_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_8_pi7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PI_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_8_pd(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PD_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_8_pd7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PD_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_8_di(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_DI_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_8_ix(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_IX_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_8_aw(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AW_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_8_al(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AL_8(); + uint res = src & m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_8(ea, res); +} + + +void m68k_op_andi_16_d(void) +{ + FLAG_Z = MASK_OUT_ABOVE_16(DY &= (OPER_I_16() | 0xffff0000)); + + FLAG_N = NFLAG_16(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_andi_16_ai(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_AI_16(); + uint res = src & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_16(ea, res); +} + + +void m68k_op_andi_16_pi(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PI_16(); + uint res = src & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_16(ea, res); +} + + +void m68k_op_andi_16_pd(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PD_16(); + uint res = src & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_16(ea, res); +} + + +void m68k_op_andi_16_di(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_DI_16(); + uint res = src & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_16(ea, res); +} + + +void m68k_op_andi_16_ix(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_IX_16(); + uint res = src & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_16(ea, res); +} + + +void m68k_op_andi_16_aw(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AW_16(); + uint res = src & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_16(ea, res); +} + + +void m68k_op_andi_16_al(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AL_16(); + uint res = src & m68ki_read_16(ea); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_16(ea, res); +} + + +void m68k_op_andi_32_d(void) +{ + FLAG_Z = DY &= (OPER_I_32()); + + FLAG_N = NFLAG_32(FLAG_Z); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_andi_32_ai(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_AI_32(); + uint res = src & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_andi_32_pi(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PI_32(); + uint res = src & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_andi_32_pd(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PD_32(); + uint res = src & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_andi_32_di(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_DI_32(); + uint res = src & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_andi_32_ix(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_IX_32(); + uint res = src & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_andi_32_aw(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AW_32(); + uint res = src & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_andi_32_al(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AL_32(); + uint res = src & m68ki_read_32(ea); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + + m68ki_write_32(ea, res); +} + + +void m68k_op_andi_16_toc(void) +{ + m68ki_set_ccr(m68ki_get_ccr() & OPER_I_16()); +} + + +void m68k_op_andi_16_tos(void) +{ + if(FLAG_S) + { + uint src = OPER_I_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(m68ki_get_sr() & src); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_asr_8_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = src >> shift; + + if(GET_MSB_8(src)) + res |= m68ki_shift_8_table[shift]; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_X = FLAG_C = src << (9-shift); +} + + +void m68k_op_asr_16_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_16(*r_dst); + uint res = src >> shift; + + if(GET_MSB_16(src)) + res |= m68ki_shift_16_table[shift]; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_X = FLAG_C = src << (9-shift); +} + + +void m68k_op_asr_32_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = *r_dst; + uint res = src >> shift; + + if(GET_MSB_32(src)) + res |= m68ki_shift_32_table[shift]; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_X = FLAG_C = src << (9-shift); +} + + +void m68k_op_asr_8_r(void) +{ + uint* r_dst = &DY; + uint shift = DX & 0x3f; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = src >> shift; + + if(shift != 0) + { + USE_CYCLES(shift<> shift; + + if(shift != 0) + { + USE_CYCLES(shift<> (shift - 1))<<8; + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + if(GET_MSB_16(src)) + { + *r_dst |= 0xffff; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffff0000; + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_16(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_asr_32_r(void) +{ + uint* r_dst = &DY; + uint shift = DX & 0x3f; + uint src = *r_dst; + uint res = src >> shift; + + if(shift != 0) + { + USE_CYCLES(shift<> (shift - 1))<<8; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + if(GET_MSB_32(src)) + { + *r_dst = 0xffffffff; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + return; + } + + *r_dst = 0; + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_32(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_asr_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = FLAG_X = src << 8; +} + + +void m68k_op_asr_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = FLAG_X = src << 8; +} + + +void m68k_op_asr_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = FLAG_X = src << 8; +} + + +void m68k_op_asr_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = FLAG_X = src << 8; +} + + +void m68k_op_asr_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = FLAG_X = src << 8; +} + + +void m68k_op_asr_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = FLAG_X = src << 8; +} + + +void m68k_op_asr_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + if(GET_MSB_16(src)) + res |= 0x8000; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = FLAG_X = src << 8; +} + + +void m68k_op_asl_8_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = MASK_OUT_ABOVE_8(src << shift); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_X = FLAG_C = src << shift; + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + src &= m68ki_shift_8_table[shift + 1]; + FLAG_V = (!(src == 0 || (src == m68ki_shift_8_table[shift + 1] && shift < 8)))<<7; +} + + +void m68k_op_asl_16_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_16(*r_dst); + uint res = MASK_OUT_ABOVE_16(src << shift); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> (8-shift); + src &= m68ki_shift_16_table[shift + 1]; + FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7; +} + + +void m68k_op_asl_32_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = *r_dst; + uint res = MASK_OUT_ABOVE_32(src << shift); + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> (24-shift); + src &= m68ki_shift_32_table[shift + 1]; + FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7; +} + + +void m68k_op_asl_8_r(void) +{ + uint* r_dst = &DY; + uint shift = DX & 0x3f; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = MASK_OUT_ABOVE_8(src << shift); + + if(shift != 0) + { + USE_CYCLES(shift<> 8; + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + src &= m68ki_shift_16_table[shift + 1]; + FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7; + return; + } + + *r_dst &= 0xffff0000; + FLAG_X = FLAG_C = ((shift == 16 ? src & 1 : 0))<<8; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; + FLAG_V = (!(src == 0))<<7; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_16(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_asl_32_r(void) +{ + uint* r_dst = &DY; + uint shift = DX & 0x3f; + uint src = *r_dst; + uint res = MASK_OUT_ABOVE_32(src << shift); + + if(shift != 0) + { + USE_CYCLES(shift<> (32 - shift)) << 8; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + src &= m68ki_shift_32_table[shift + 1]; + FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7; + return; + } + + *r_dst = 0; + FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; + FLAG_V = (!(src == 0))<<7; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_32(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_asl_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + src &= 0xc000; + FLAG_V = (!(src == 0 || src == 0xc000))<<7; +} + + +void m68k_op_asl_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + src &= 0xc000; + FLAG_V = (!(src == 0 || src == 0xc000))<<7; +} + + +void m68k_op_asl_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + src &= 0xc000; + FLAG_V = (!(src == 0 || src == 0xc000))<<7; +} + + +void m68k_op_asl_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + src &= 0xc000; + FLAG_V = (!(src == 0 || src == 0xc000))<<7; +} + + +void m68k_op_asl_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + src &= 0xc000; + FLAG_V = (!(src == 0 || src == 0xc000))<<7; +} + + +void m68k_op_asl_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + src &= 0xc000; + FLAG_V = (!(src == 0 || src == 0xc000))<<7; +} + + +void m68k_op_asl_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + src &= 0xc000; + FLAG_V = (!(src == 0 || src == 0xc000))<<7; +} + + +void m68k_op_bhi_8(void) +{ + if(COND_HI()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bls_8(void) +{ + if(COND_LS()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bcc_8(void) +{ + if(COND_CC()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bcs_8(void) +{ + if(COND_CS()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bne_8(void) +{ + if(COND_NE()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_beq_8(void) +{ + if(COND_EQ()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bvc_8(void) +{ + if(COND_VC()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bvs_8(void) +{ + if(COND_VS()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bpl_8(void) +{ + if(COND_PL()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bmi_8(void) +{ + if(COND_MI()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bge_8(void) +{ + if(COND_GE()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_blt_8(void) +{ + if(COND_LT()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bgt_8(void) +{ + if(COND_GT()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_ble_8(void) +{ + if(COND_LE()) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + return; + } + USE_CYCLES(CYC_BCC_NOTAKE_B); +} + + +void m68k_op_bhi_16(void) +{ + if(COND_HI()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bls_16(void) +{ + if(COND_LS()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bcc_16(void) +{ + if(COND_CC()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bcs_16(void) +{ + if(COND_CS()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bne_16(void) +{ + if(COND_NE()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_beq_16(void) +{ + if(COND_EQ()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bvc_16(void) +{ + if(COND_VC()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bvs_16(void) +{ + if(COND_VS()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bpl_16(void) +{ + if(COND_PL()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bmi_16(void) +{ + if(COND_MI()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bge_16(void) +{ + if(COND_GE()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_blt_16(void) +{ + if(COND_LT()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bgt_16(void) +{ + if(COND_GT()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_ble_16(void) +{ + if(COND_LE()) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_BCC_NOTAKE_W); +} + + +void m68k_op_bhi_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_HI()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bls_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LS()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bcc_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_CC()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bcs_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_CS()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bne_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_NE()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_beq_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_EQ()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bvc_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_VC()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bvs_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_VS()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bpl_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_PL()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bmi_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_MI()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bge_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_GE()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_blt_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LT()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bgt_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_GT()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_ble_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LE()) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bchg_32_r_d(void) +{ + uint* r_dst = &DY; + uint mask = 1 << (DX & 0x1f); + + FLAG_Z = *r_dst & mask; + *r_dst ^= mask; +} + + +void m68k_op_bchg_8_r_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_r_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_r_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_r_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_r_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_r_di(void) +{ + uint ea = EA_AY_DI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_r_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_r_aw(void) +{ + uint ea = EA_AW_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_r_al(void) +{ + uint ea = EA_AL_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_32_s_d(void) +{ + uint* r_dst = &DY; + uint mask = 1 << (OPER_I_8() & 0x1f); + + FLAG_Z = *r_dst & mask; + *r_dst ^= mask; +} + + +void m68k_op_bchg_8_s_ai(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_AI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_s_pi(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_PI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_s_pi7(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_A7_PI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_s_pd(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_PD_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_s_pd7(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_A7_PD_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_s_di(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_DI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_s_ix(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_IX_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_s_aw(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AW_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bchg_8_s_al(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AL_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src ^ mask); +} + + +void m68k_op_bclr_32_r_d(void) +{ + uint* r_dst = &DY; + uint mask = 1 << (DX & 0x1f); + + FLAG_Z = *r_dst & mask; + *r_dst &= ~mask; +} + + +void m68k_op_bclr_8_r_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_r_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_r_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_r_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_r_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_r_di(void) +{ + uint ea = EA_AY_DI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_r_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_r_aw(void) +{ + uint ea = EA_AW_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_r_al(void) +{ + uint ea = EA_AL_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_32_s_d(void) +{ + uint* r_dst = &DY; + uint mask = 1 << (OPER_I_8() & 0x1f); + + FLAG_Z = *r_dst & mask; + *r_dst &= ~mask; +} + + +void m68k_op_bclr_8_s_ai(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_AI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_s_pi(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_PI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_s_pi7(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_A7_PI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_s_pd(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_PD_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_s_pd7(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_A7_PD_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_s_di(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_DI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_s_ix(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_IX_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_s_aw(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AW_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bclr_8_s_al(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AL_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src & ~mask); +} + + +void m68k_op_bfchg_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint offset = (word2>>6)&31; + uint width = word2; + uint* data = &DY; + uint64 mask; + + + if(BIT_B(word2)) + offset = REG_D[offset&7]; + if(BIT_5(word2)) + width = REG_D[width&7]; + + offset &= 31; + width = ((width-1) & 31) + 1; + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + FLAG_N = NFLAG_32(*data<>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_AI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfchg_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_DI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfchg_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_IX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfchg_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AW_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfchg_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AL_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long ^ mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte ^ mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfclr_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint offset = (word2>>6)&31; + uint width = word2; + uint* data = &DY; + uint64 mask; + + + if(BIT_B(word2)) + offset = REG_D[offset&7]; + if(BIT_5(word2)) + width = REG_D[width&7]; + + + offset &= 31; + width = ((width-1) & 31) + 1; + + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + FLAG_N = NFLAG_32(*data<>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_AI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfclr_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_DI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfclr_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_IX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfclr_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AW_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfclr_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AL_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long & ~mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte & ~mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfexts_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint offset = (word2>>6)&31; + uint width = word2; + uint64 data = DY; + + + if(BIT_B(word2)) + offset = REG_D[offset&7]; + if(BIT_5(word2)) + width = REG_D[width&7]; + + offset &= 31; + width = ((width-1) & 31) + 1; + + data = ROL_32(data, offset); + FLAG_N = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2>>12)&7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfexts_32_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AY_AI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfexts_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AY_DI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfexts_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AY_IX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfexts_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AW_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfexts_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AL_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfexts_32_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_PCDI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfexts_32_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_PCIX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data = MAKE_INT_32(data) >> (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfextu_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint offset = (word2>>6)&31; + uint width = word2; + uint64 data = DY; + + + if(BIT_B(word2)) + offset = REG_D[offset&7]; + if(BIT_5(word2)) + width = REG_D[width&7]; + + offset &= 31; + width = ((width-1) & 31) + 1; + + data = ROL_32(data, offset); + FLAG_N = NFLAG_32(data); + data >>= 32 - width; + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2>>12)&7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfextu_32_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AY_AI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfextu_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AY_DI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfextu_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AY_IX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfextu_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AW_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfextu_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_AL_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfextu_32_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_PCDI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfextu_32_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint data; + uint ea = EA_PCIX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + REG_D[(word2 >> 12) & 7] = data; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfffo_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint offset = (word2>>6)&31; + uint width = word2; + uint64 data = DY; + uint bit; + + + if(BIT_B(word2)) + offset = REG_D[offset&7]; + if(BIT_5(word2)) + width = REG_D[width&7]; + + offset &= 31; + width = ((width-1) & 31) + 1; + + data = ROL_32(data, offset); + FLAG_N = NFLAG_32(data); + data >>= 32 - width; + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfffo_32_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + sint local_offset; + uint width = word2; + uint data; + uint bit; + uint ea = EA_AY_AI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << local_offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfffo_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + sint local_offset; + uint width = word2; + uint data; + uint bit; + uint ea = EA_AY_DI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << local_offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfffo_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + sint local_offset; + uint width = word2; + uint data; + uint bit; + uint ea = EA_AY_IX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << local_offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfffo_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + sint local_offset; + uint width = word2; + uint data; + uint bit; + uint ea = EA_AW_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << local_offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfffo_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + sint local_offset; + uint width = word2; + uint data; + uint bit; + uint ea = EA_AL_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << local_offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfffo_32_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + sint local_offset; + uint width = word2; + uint data; + uint bit; + uint ea = EA_PCDI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << local_offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfffo_32_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + sint local_offset; + uint width = word2; + uint data; + uint bit; + uint ea = EA_PCIX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + local_offset = offset % 8; + if(local_offset < 0) + { + local_offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + data = m68ki_read_32(ea); + data = MASK_OUT_ABOVE_32(data< 32) + data |= (m68ki_read_8(ea+4) << local_offset) >> 8; + + FLAG_N = NFLAG_32(data); + data >>= (32 - width); + + FLAG_Z = data; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1) + offset++; + + REG_D[(word2>>12)&7] = offset; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfins_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint offset = (word2>>6)&31; + uint width = word2; + uint* data = &DY; + uint64 mask; + uint64 insert = REG_D[(word2>>12)&7]; + + + if(BIT_B(word2)) + offset = REG_D[offset&7]; + if(BIT_5(word2)) + width = REG_D[width&7]; + + + offset &= 31; + width = ((width-1) & 31) + 1; + + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + insert = MASK_OUT_ABOVE_32(insert << (32 - width)); + FLAG_N = NFLAG_32(insert); + FLAG_Z = insert; + insert = ROR_32(insert, offset); + + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + *data &= ~mask; + *data |= insert; + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfins_32_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint insert_base = REG_D[(word2>>12)&7]; + uint insert_long; + uint insert_byte; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_AI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + FLAG_N = NFLAG_32(insert_base); + FLAG_Z = insert_base; + insert_long = insert_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, (data_long & ~mask_long) | insert_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + insert_byte = MASK_OUT_ABOVE_8(insert_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfins_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint insert_base = REG_D[(word2>>12)&7]; + uint insert_long; + uint insert_byte; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_DI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + FLAG_N = NFLAG_32(insert_base); + FLAG_Z = insert_base; + insert_long = insert_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, (data_long & ~mask_long) | insert_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + insert_byte = MASK_OUT_ABOVE_8(insert_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfins_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint insert_base = REG_D[(word2>>12)&7]; + uint insert_long; + uint insert_byte; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_IX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + FLAG_N = NFLAG_32(insert_base); + FLAG_Z = insert_base; + insert_long = insert_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, (data_long & ~mask_long) | insert_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + insert_byte = MASK_OUT_ABOVE_8(insert_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfins_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint insert_base = REG_D[(word2>>12)&7]; + uint insert_long; + uint insert_byte; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AW_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + FLAG_N = NFLAG_32(insert_base); + FLAG_Z = insert_base; + insert_long = insert_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, (data_long & ~mask_long) | insert_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + insert_byte = MASK_OUT_ABOVE_8(insert_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfins_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint insert_base = REG_D[(word2>>12)&7]; + uint insert_long; + uint insert_byte; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AL_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width)); + FLAG_N = NFLAG_32(insert_base); + FLAG_Z = insert_base; + insert_long = insert_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, (data_long & ~mask_long) | insert_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + insert_byte = MASK_OUT_ABOVE_8(insert_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfset_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint offset = (word2>>6)&31; + uint width = word2; + uint* data = &DY; + uint64 mask; + + + if(BIT_B(word2)) + offset = REG_D[offset&7]; + if(BIT_5(word2)) + width = REG_D[width&7]; + + + offset &= 31; + width = ((width-1) & 31) + 1; + + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + FLAG_N = NFLAG_32(*data<>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_AI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfset_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_DI_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfset_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_IX_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfset_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AW_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bfset_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AL_8(); + + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = NFLAG_32(data_long << offset); + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + m68ki_write_32(ea, data_long | mask_long); + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + m68ki_write_8(ea+4, data_byte | mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bftst_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint offset = (word2>>6)&31; + uint width = word2; + uint* data = &DY; + uint64 mask; + + + if(BIT_B(word2)) + offset = REG_D[offset&7]; + if(BIT_5(word2)) + width = REG_D[width&7]; + + + offset &= 31; + width = ((width-1) & 31) + 1; + + + mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask = ROR_32(mask, offset); + + FLAG_N = NFLAG_32(*data<>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_AI_8(); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = ((data_long & (0x80000000 >> offset))<>24; + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bftst_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_DI_8(); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = ((data_long & (0x80000000 >> offset))<>24; + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bftst_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AY_IX_8(); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = ((data_long & (0x80000000 >> offset))<>24; + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bftst_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AW_8(); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = ((data_long & (0x80000000 >> offset))<>24; + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bftst_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_AL_8(); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = ((data_long & (0x80000000 >> offset))<>24; + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bftst_32_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_PCDI_8(); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = ((data_long & (0x80000000 >> offset))<>24; + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bftst_32_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + sint offset = (word2>>6)&31; + uint width = word2; + uint mask_base; + uint data_long; + uint mask_long; + uint data_byte = 0; + uint mask_byte = 0; + uint ea = EA_PCIX_8(); + + if(BIT_B(word2)) + offset = MAKE_INT_32(REG_D[offset&7]); + if(BIT_5(word2)) + width = REG_D[width&7]; + + /* Offset is signed so we have to use ugly math =( */ + ea += offset / 8; + offset %= 8; + if(offset < 0) + { + offset += 8; + ea--; + } + width = ((width-1) & 31) + 1; + + + mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); + mask_long = mask_base >> offset; + + data_long = m68ki_read_32(ea); + FLAG_N = ((data_long & (0x80000000 >> offset))<>24; + FLAG_Z = data_long & mask_long; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + + if((width + offset) > 32) + { + mask_byte = MASK_OUT_ABOVE_8(mask_base); + data_byte = m68ki_read_8(ea+4); + FLAG_Z |= (data_byte & mask_byte); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bkpt(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + m68ki_bkpt_ack(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE) ? REG_IR & 7 : 0); /* auto-disable (see m68kcpu.h) */ + } + m68ki_exception_illegal(); +} + + +void m68k_op_bra_8(void) +{ + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_bra_16(void) +{ + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_bra_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint offset = OPER_I_32(); + REG_PC -= 4; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_32(offset); + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_bset_32_r_d(void) +{ + uint* r_dst = &DY; + uint mask = 1 << (DX & 0x1f); + + FLAG_Z = *r_dst & mask; + *r_dst |= mask; +} + + +void m68k_op_bset_8_r_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_r_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_r_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_r_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_r_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_r_di(void) +{ + uint ea = EA_AY_DI_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_r_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_r_aw(void) +{ + uint ea = EA_AW_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_r_al(void) +{ + uint ea = EA_AL_8(); + uint src = m68ki_read_8(ea); + uint mask = 1 << (DX & 7); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_32_s_d(void) +{ + uint* r_dst = &DY; + uint mask = 1 << (OPER_I_8() & 0x1f); + + FLAG_Z = *r_dst & mask; + *r_dst |= mask; +} + + +void m68k_op_bset_8_s_ai(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_AI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_s_pi(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_PI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_s_pi7(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_A7_PI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_s_pd(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_PD_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_s_pd7(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_A7_PD_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_s_di(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_DI_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_s_ix(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AY_IX_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_s_aw(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AW_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bset_8_s_al(void) +{ + uint mask = 1 << (OPER_I_8() & 7); + uint ea = EA_AL_8(); + uint src = m68ki_read_8(ea); + + FLAG_Z = src & mask; + m68ki_write_8(ea, src | mask); +} + + +void m68k_op_bsr_8(void) +{ + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); +} + + +void m68k_op_bsr_16(void) +{ + uint offset = OPER_I_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + REG_PC -= 2; + m68ki_branch_16(offset); +} + + +void m68k_op_bsr_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint offset = OPER_I_32(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + REG_PC -= 4; + m68ki_branch_32(offset); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_btst_32_r_d(void) +{ + FLAG_Z = DY & (1 << (DX & 0x1f)); +} + + +void m68k_op_btst_8_r_ai(void) +{ + FLAG_Z = OPER_AY_AI_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_pi(void) +{ + FLAG_Z = OPER_AY_PI_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_pi7(void) +{ + FLAG_Z = OPER_A7_PI_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_pd(void) +{ + FLAG_Z = OPER_AY_PD_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_pd7(void) +{ + FLAG_Z = OPER_A7_PD_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_di(void) +{ + FLAG_Z = OPER_AY_DI_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_ix(void) +{ + FLAG_Z = OPER_AY_IX_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_aw(void) +{ + FLAG_Z = OPER_AW_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_al(void) +{ + FLAG_Z = OPER_AL_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_pcdi(void) +{ + FLAG_Z = OPER_PCDI_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_pcix(void) +{ + FLAG_Z = OPER_PCIX_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_8_r_i(void) +{ + FLAG_Z = OPER_I_8() & (1 << (DX & 7)); +} + + +void m68k_op_btst_32_s_d(void) +{ + FLAG_Z = DY & (1 << (OPER_I_8() & 0x1f)); +} + + +void m68k_op_btst_8_s_ai(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_AY_AI_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_pi(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_AY_PI_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_pi7(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_A7_PI_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_pd(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_AY_PD_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_pd7(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_A7_PD_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_di(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_AY_DI_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_ix(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_AY_IX_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_aw(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_AW_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_al(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_AL_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_pcdi(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_PCDI_8() & (1 << bit); +} + + +void m68k_op_btst_8_s_pcix(void) +{ + uint bit = OPER_I_8() & 7; + + FLAG_Z = OPER_PCIX_8() & (1 << bit); +} + + +void m68k_op_callm_32_ai(void) +{ + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + { + uint ea = EA_AY_AI_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_PC += 2; +(void)ea; /* just to avoid an 'unused variable' warning */ + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_callm_32_di(void) +{ + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + { + uint ea = EA_AY_DI_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_PC += 2; +(void)ea; /* just to avoid an 'unused variable' warning */ + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_callm_32_ix(void) +{ + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + { + uint ea = EA_AY_IX_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_PC += 2; +(void)ea; /* just to avoid an 'unused variable' warning */ + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_callm_32_aw(void) +{ + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + { + uint ea = EA_AW_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_PC += 2; +(void)ea; /* just to avoid an 'unused variable' warning */ + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_callm_32_al(void) +{ + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + { + uint ea = EA_AL_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_PC += 2; +(void)ea; /* just to avoid an 'unused variable' warning */ + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_callm_32_pcdi(void) +{ + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + { + uint ea = EA_PCDI_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_PC += 2; +(void)ea; /* just to avoid an 'unused variable' warning */ + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_callm_32_pcix(void) +{ + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + { + uint ea = EA_PCIX_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_PC += 2; +(void)ea; /* just to avoid an 'unused variable' warning */ + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_AI_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_pi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PI_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_pi7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_A7_PI_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_pd(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PD_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_pd7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_A7_PD_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_DI_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_IX_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AW_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_8_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AL_8(); + uint dest = m68ki_read_8(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_8(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(*compare, dest, res); + FLAG_C = CFLAG_8(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_8(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_16_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_AI_16(); + uint dest = m68ki_read_16(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(*compare, dest, res); + FLAG_C = CFLAG_16(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_16_pi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PI_16(); + uint dest = m68ki_read_16(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(*compare, dest, res); + FLAG_C = CFLAG_16(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_16_pd(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PD_16(); + uint dest = m68ki_read_16(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(*compare, dest, res); + FLAG_C = CFLAG_16(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_16_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_DI_16(); + uint dest = m68ki_read_16(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(*compare, dest, res); + FLAG_C = CFLAG_16(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_16_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_IX_16(); + uint dest = m68ki_read_16(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(*compare, dest, res); + FLAG_C = CFLAG_16(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_16_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AW_16(); + uint dest = m68ki_read_16(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(*compare, dest, res); + FLAG_C = CFLAG_16(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_16_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AL_16(); + uint dest = m68ki_read_16(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - MASK_OUT_ABOVE_16(*compare); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(*compare, dest, res); + FLAG_C = CFLAG_16(res); + + if(COND_NE()) + *compare = MASK_OUT_BELOW_16(*compare) | dest; + else + { + USE_CYCLES(3); + m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_32_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_AI_32(); + uint dest = m68ki_read_32(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - *compare; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(*compare, dest, res); + FLAG_C = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE()) + *compare = dest; + else + { + USE_CYCLES(3); + m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_32_pi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PI_32(); + uint dest = m68ki_read_32(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - *compare; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(*compare, dest, res); + FLAG_C = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE()) + *compare = dest; + else + { + USE_CYCLES(3); + m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_32_pd(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PD_32(); + uint dest = m68ki_read_32(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - *compare; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(*compare, dest, res); + FLAG_C = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE()) + *compare = dest; + else + { + USE_CYCLES(3); + m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_DI_32(); + uint dest = m68ki_read_32(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - *compare; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(*compare, dest, res); + FLAG_C = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE()) + *compare = dest; + else + { + USE_CYCLES(3); + m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_IX_32(); + uint dest = m68ki_read_32(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - *compare; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(*compare, dest, res); + FLAG_C = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE()) + *compare = dest; + else + { + USE_CYCLES(3); + m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AW_32(); + uint dest = m68ki_read_32(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - *compare; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(*compare, dest, res); + FLAG_C = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE()) + *compare = dest; + else + { + USE_CYCLES(3); + m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint ea = EA_AL_32(); + uint dest = m68ki_read_32(ea); + uint* compare = ®_D[word2 & 7]; + uint res = dest - *compare; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(*compare, dest, res); + FLAG_C = CFLAG_SUB_32(*compare, dest, res); + + if(COND_NE()) + *compare = dest; + else + { + USE_CYCLES(3); + m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]); + } + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas2_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_32(); + uint* compare1 = ®_D[(word2 >> 16) & 7]; + uint ea1 = REG_DA[(word2 >> 28) & 15]; + uint dest1 = m68ki_read_16(ea1); + uint res1 = dest1 - MASK_OUT_ABOVE_16(*compare1); + uint* compare2 = ®_D[word2 & 7]; + uint ea2 = REG_DA[(word2 >> 12) & 15]; + uint dest2 = m68ki_read_16(ea2); + uint res2; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_16(res1); + FLAG_Z = MASK_OUT_ABOVE_16(res1); + FLAG_V = VFLAG_SUB_16(*compare1, dest1, res1); + FLAG_C = CFLAG_16(res1); + + if(COND_EQ()) + { + res2 = dest2 - MASK_OUT_ABOVE_16(*compare2); + + FLAG_N = NFLAG_16(res2); + FLAG_Z = MASK_OUT_ABOVE_16(res2); + FLAG_V = VFLAG_SUB_16(*compare2, dest2, res2); + FLAG_C = CFLAG_16(res2); + + if(COND_EQ()) + { + USE_CYCLES(3); + m68ki_write_16(ea1, REG_D[(word2 >> 22) & 7]); + m68ki_write_16(ea2, REG_D[(word2 >> 6) & 7]); + return; + } + } + *compare1 = BIT_1F(word2) ? MAKE_INT_16(dest1) : MASK_OUT_BELOW_16(*compare1) | dest1; + *compare2 = BIT_F(word2) ? MAKE_INT_16(dest2) : MASK_OUT_BELOW_16(*compare2) | dest2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cas2_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_32(); + uint* compare1 = ®_D[(word2 >> 16) & 7]; + uint ea1 = REG_DA[(word2 >> 28) & 15]; + uint dest1 = m68ki_read_32(ea1); + uint res1 = dest1 - *compare1; + uint* compare2 = ®_D[word2 & 7]; + uint ea2 = REG_DA[(word2 >> 12) & 15]; + uint dest2 = m68ki_read_32(ea2); + uint res2; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + FLAG_N = NFLAG_32(res1); + FLAG_Z = MASK_OUT_ABOVE_32(res1); + FLAG_V = VFLAG_SUB_32(*compare1, dest1, res1); + FLAG_C = CFLAG_SUB_32(*compare1, dest1, res1); + + if(COND_EQ()) + { + res2 = dest2 - *compare2; + + FLAG_N = NFLAG_32(res2); + FLAG_Z = MASK_OUT_ABOVE_32(res2); + FLAG_V = VFLAG_SUB_32(*compare2, dest2, res2); + FLAG_C = CFLAG_SUB_32(*compare2, dest2, res2); + + if(COND_EQ()) + { + USE_CYCLES(3); + m68ki_write_32(ea1, REG_D[(word2 >> 22) & 7]); + m68ki_write_32(ea2, REG_D[(word2 >> 6) & 7]); + return; + } + } + *compare1 = dest1; + *compare2 = dest2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_16_d(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(DY); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_ai(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_AY_AI_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_pi(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_AY_PI_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_pd(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_AY_PD_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_di(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_AY_DI_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_ix(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_AY_IX_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_aw(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_AW_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_al(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_AL_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_pcdi(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_PCDI_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_pcix(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_PCIX_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_16_i(void) +{ + sint src = MAKE_INT_16(DX); + sint bound = MAKE_INT_16(OPER_I_16()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); +} + + +void m68k_op_chk_32_d(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(DY); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_AY_AI_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_pi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_AY_PI_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_pd(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_AY_PD_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_AY_DI_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_AY_IX_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_AW_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_AL_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_PCDI_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_PCIX_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk_32_i(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + sint src = MAKE_INT_32(DX); + sint bound = MAKE_INT_32(OPER_I_32()); + + if(src >= 0 && src <= bound) + { + return; + } + FLAG_N = (src < 0)<<7; + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_8_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_AI_8(); + uint lower_bound = m68ki_read_8(ea); + uint upper_bound = m68ki_read_8(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_8(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_8_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_DI_8(); + uint lower_bound = m68ki_read_8(ea); + uint upper_bound = m68ki_read_8(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_8(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_8_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_IX_8(); + uint lower_bound = m68ki_read_8(ea); + uint upper_bound = m68ki_read_8(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_8(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_8_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AW_8(); + uint lower_bound = m68ki_read_8(ea); + uint upper_bound = m68ki_read_8(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_8(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_8_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AL_8(); + uint lower_bound = m68ki_read_8(ea); + uint upper_bound = m68ki_read_8(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_8(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_8_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_PCDI_8(); + uint lower_bound = m68ki_read_8(ea); + uint upper_bound = m68ki_read_8(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_8(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_8_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_PCIX_8(); + uint lower_bound = m68ki_read_8(ea); + uint upper_bound = m68ki_read_8(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_8(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_8(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_16_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_AI_16(); + uint lower_bound = m68ki_read_16(ea); + uint upper_bound = m68ki_read_16(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_16(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_16_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_DI_16(); + uint lower_bound = m68ki_read_16(ea); + uint upper_bound = m68ki_read_16(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_16(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_16_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_IX_16(); + uint lower_bound = m68ki_read_16(ea); + uint upper_bound = m68ki_read_16(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_16(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_16_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AW_16(); + uint lower_bound = m68ki_read_16(ea); + uint upper_bound = m68ki_read_16(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_16(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_16_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AL_16(); + uint lower_bound = m68ki_read_16(ea); + uint upper_bound = m68ki_read_16(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_16(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_16_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_PCDI_16(); + uint lower_bound = m68ki_read_16(ea); + uint upper_bound = m68ki_read_16(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_16(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_16_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_PCIX_16(); + uint lower_bound = m68ki_read_16(ea); + uint upper_bound = m68ki_read_16(ea + 1); + + if(!BIT_F(word2)) + compare = MAKE_INT_16(compare); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_16(FLAG_C); + FLAG_C = CFLAG_16(FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_32_ai(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_AI_32(); + uint lower_bound = m68ki_read_32(ea); + uint upper_bound = m68ki_read_32(ea + 1); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_32_di(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_DI_32(); + uint lower_bound = m68ki_read_32(ea); + uint upper_bound = m68ki_read_32(ea + 1); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_32_ix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AY_IX_32(); + uint lower_bound = m68ki_read_32(ea); + uint upper_bound = m68ki_read_32(ea + 1); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_32_aw(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AW_32(); + uint lower_bound = m68ki_read_32(ea); + uint upper_bound = m68ki_read_32(ea + 1); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_32_al(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_AL_32(); + uint lower_bound = m68ki_read_32(ea); + uint upper_bound = m68ki_read_32(ea + 1); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_32_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_PCDI_32(); + uint lower_bound = m68ki_read_32(ea); + uint upper_bound = m68ki_read_32(ea + 1); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_chk2cmp2_32_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint compare = REG_DA[(word2 >> 12) & 15]; + uint ea = EA_PCIX_32(); + uint lower_bound = m68ki_read_32(ea); + uint upper_bound = m68ki_read_32(ea + 1); + + FLAG_C = compare - lower_bound; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C); + if(COND_CS()) + { + if(BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + return; + } + + FLAG_C = upper_bound - compare; + FLAG_Z = MASK_OUT_ABOVE_32(FLAG_C); + FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); + if(COND_CS() && BIT_B(word2)) + m68ki_exception_trap(EXCEPTION_CHK); + + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_clr_8_d(void) +{ + DY &= 0xffffff00; + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_8_al(void) +{ + m68ki_write_8(EA_AL_8(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_16_d(void) +{ + DY &= 0xffff0000; + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_16_ai(void) +{ + m68ki_write_16(EA_AY_AI_16(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_16_pi(void) +{ + m68ki_write_16(EA_AY_PI_16(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_16_pd(void) +{ + m68ki_write_16(EA_AY_PD_16(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_16_di(void) +{ + m68ki_write_16(EA_AY_DI_16(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_16_ix(void) +{ + m68ki_write_16(EA_AY_IX_16(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_16_aw(void) +{ + m68ki_write_16(EA_AW_16(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_16_al(void) +{ + m68ki_write_16(EA_AL_16(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_32_d(void) +{ + DY = 0; + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_32_ai(void) +{ + m68ki_write_32(EA_AY_AI_32(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_32_pi(void) +{ + m68ki_write_32(EA_AY_PI_32(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_32_pd(void) +{ + m68ki_write_32(EA_AY_PD_32(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_32_di(void) +{ + m68ki_write_32(EA_AY_DI_32(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_32_ix(void) +{ + m68ki_write_32(EA_AY_IX_32(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_32_aw(void) +{ + m68ki_write_32(EA_AW_32(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_clr_32_al(void) +{ + m68ki_write_32(EA_AL_32(), 0); + + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; +} + + +void m68k_op_cmp_8_d(void) +{ + uint src = MASK_OUT_ABOVE_8(DY); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_ai(void) +{ + uint src = OPER_AY_AI_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_pi(void) +{ + uint src = OPER_AY_PI_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_pi7(void) +{ + uint src = OPER_A7_PI_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_pd(void) +{ + uint src = OPER_AY_PD_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_pd7(void) +{ + uint src = OPER_A7_PD_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_di(void) +{ + uint src = OPER_AY_DI_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_ix(void) +{ + uint src = OPER_AY_IX_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_aw(void) +{ + uint src = OPER_AW_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_al(void) +{ + uint src = OPER_AL_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_pcdi(void) +{ + uint src = OPER_PCDI_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_pcix(void) +{ + uint src = OPER_PCIX_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_8_i(void) +{ + uint src = OPER_I_8(); + uint dst = MASK_OUT_ABOVE_8(DX); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmp_16_d(void) +{ + uint src = MASK_OUT_ABOVE_16(DY); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_a(void) +{ + uint src = MASK_OUT_ABOVE_16(AY); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_ai(void) +{ + uint src = OPER_AY_AI_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_pi(void) +{ + uint src = OPER_AY_PI_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_pd(void) +{ + uint src = OPER_AY_PD_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_di(void) +{ + uint src = OPER_AY_DI_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_ix(void) +{ + uint src = OPER_AY_IX_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_aw(void) +{ + uint src = OPER_AW_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_al(void) +{ + uint src = OPER_AL_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_pcdi(void) +{ + uint src = OPER_PCDI_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_pcix(void) +{ + uint src = OPER_PCIX_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_16_i(void) +{ + uint src = OPER_I_16(); + uint dst = MASK_OUT_ABOVE_16(DX); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmp_32_d(void) +{ + uint src = DY; + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_a(void) +{ + uint src = AY; + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_ai(void) +{ + uint src = OPER_AY_AI_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_pi(void) +{ + uint src = OPER_AY_PI_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_pd(void) +{ + uint src = OPER_AY_PD_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_di(void) +{ + uint src = OPER_AY_DI_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_ix(void) +{ + uint src = OPER_AY_IX_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_aw(void) +{ + uint src = OPER_AW_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_al(void) +{ + uint src = OPER_AL_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_pcdi(void) +{ + uint src = OPER_PCDI_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_pcix(void) +{ + uint src = OPER_PCIX_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmp_32_i(void) +{ + uint src = OPER_I_32(); + uint dst = DX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_d(void) +{ + uint src = MAKE_INT_16(DY); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_a(void) +{ + uint src = MAKE_INT_16(AY); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_ai(void) +{ + uint src = MAKE_INT_16(OPER_AY_AI_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_pi(void) +{ + uint src = MAKE_INT_16(OPER_AY_PI_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_pd(void) +{ + uint src = MAKE_INT_16(OPER_AY_PD_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_di(void) +{ + uint src = MAKE_INT_16(OPER_AY_DI_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_ix(void) +{ + uint src = MAKE_INT_16(OPER_AY_IX_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_aw(void) +{ + uint src = MAKE_INT_16(OPER_AW_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_al(void) +{ + uint src = MAKE_INT_16(OPER_AL_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_pcdi(void) +{ + uint src = MAKE_INT_16(OPER_PCDI_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_pcix(void) +{ + uint src = MAKE_INT_16(OPER_PCIX_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_16_i(void) +{ + uint src = MAKE_INT_16(OPER_I_16()); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_d(void) +{ + uint src = DY; + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_a(void) +{ + uint src = AY; + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_ai(void) +{ + uint src = OPER_AY_AI_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_pi(void) +{ + uint src = OPER_AY_PI_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_pd(void) +{ + uint src = OPER_AY_PD_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_di(void) +{ + uint src = OPER_AY_DI_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_ix(void) +{ + uint src = OPER_AY_IX_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_aw(void) +{ + uint src = OPER_AW_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_al(void) +{ + uint src = OPER_AL_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_pcdi(void) +{ + uint src = OPER_PCDI_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_pcix(void) +{ + uint src = OPER_PCIX_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpa_32_i(void) +{ + uint src = OPER_I_32(); + uint dst = AX; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_8_d(void) +{ + uint src = OPER_I_8(); + uint dst = MASK_OUT_ABOVE_8(DY); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_ai(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_AY_AI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_pi(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_AY_PI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_pi7(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_A7_PI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_pd(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_AY_PD_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_pd7(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_A7_PD_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_di(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_AY_DI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_ix(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_AY_IX_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_aw(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_AW_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_al(void) +{ + uint src = OPER_I_8(); + uint dst = OPER_AL_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpi_8_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint src = OPER_I_8(); + uint dst = OPER_PCDI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cmpi_8_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint src = OPER_I_8(); + uint dst = OPER_PCIX_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cmpi_16_d(void) +{ + uint src = OPER_I_16(); + uint dst = MASK_OUT_ABOVE_16(DY); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpi_16_ai(void) +{ + uint src = OPER_I_16(); + uint dst = OPER_AY_AI_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpi_16_pi(void) +{ + uint src = OPER_I_16(); + uint dst = OPER_AY_PI_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpi_16_pd(void) +{ + uint src = OPER_I_16(); + uint dst = OPER_AY_PD_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpi_16_di(void) +{ + uint src = OPER_I_16(); + uint dst = OPER_AY_DI_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpi_16_ix(void) +{ + uint src = OPER_I_16(); + uint dst = OPER_AY_IX_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpi_16_aw(void) +{ + uint src = OPER_I_16(); + uint dst = OPER_AW_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpi_16_al(void) +{ + uint src = OPER_I_16(); + uint dst = OPER_AL_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpi_16_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint src = OPER_I_16(); + uint dst = OPER_PCDI_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cmpi_16_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint src = OPER_I_16(); + uint dst = OPER_PCIX_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cmpi_32_d(void) +{ + uint src = OPER_I_32(); + uint dst = DY; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_32_ai(void) +{ + uint src = OPER_I_32(); + uint dst = OPER_AY_AI_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_32_pi(void) +{ + uint src = OPER_I_32(); + uint dst = OPER_AY_PI_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_32_pd(void) +{ + uint src = OPER_I_32(); + uint dst = OPER_AY_PD_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_32_di(void) +{ + uint src = OPER_I_32(); + uint dst = OPER_AY_DI_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_32_ix(void) +{ + uint src = OPER_I_32(); + uint dst = OPER_AY_IX_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_32_aw(void) +{ + uint src = OPER_I_32(); + uint dst = OPER_AW_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_32_al(void) +{ + uint src = OPER_I_32(); + uint dst = OPER_AL_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cmpi_32_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint src = OPER_I_32(); + uint dst = OPER_PCDI_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cmpi_32_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint src = OPER_I_32(); + uint dst = OPER_PCIX_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_cmpm_8_ax7(void) +{ + uint src = OPER_AY_PI_8(); + uint dst = OPER_A7_PI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpm_8_ay7(void) +{ + uint src = OPER_A7_PI_8(); + uint dst = OPER_AX_PI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpm_8_axy7(void) +{ + uint src = OPER_A7_PI_8(); + uint dst = OPER_A7_PI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpm_8(void) +{ + uint src = OPER_AY_PI_8(); + uint dst = OPER_AX_PI_8(); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_C = CFLAG_8(res); +} + + +void m68k_op_cmpm_16(void) +{ + uint src = OPER_AY_PI_16(); + uint dst = OPER_AX_PI_16(); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_C = CFLAG_16(res); +} + + +void m68k_op_cmpm_32(void) +{ + uint src = OPER_AY_PI_32(); + uint dst = OPER_AX_PI_32(); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_C = CFLAG_SUB_32(src, dst, res); +} + + +void m68k_op_cpbcc_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_1111(); +} + + +void m68k_op_cpdbcc_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_1111(); +} + + +void m68k_op_cpgen_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_1111(); +} + + +void m68k_op_cpscc_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_1111(); +} + + +void m68k_op_cptrapcc_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_1111(); +} + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + + diff --git a/ genplus-gx/source/m68k/m68kopdm.c b/ genplus-gx/source/m68k/m68kopdm.c new file mode 100644 index 0000000..7a47d63 --- /dev/null +++ b/ genplus-gx/source/m68k/m68kopdm.c @@ -0,0 +1,13286 @@ +#include "m68kcpu.h" + +/* ======================================================================== */ +/* ========================= INSTRUCTION HANDLERS ========================= */ +/* ======================================================================== */ + + +void m68k_op_dbt_16(void) +{ + REG_PC += 2; +} + + +void m68k_op_dbf_16(void) +{ + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbhi_16(void) +{ + if(COND_NOT_HI()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbls_16(void) +{ + if(COND_NOT_LS()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbcc_16(void) +{ + if(COND_NOT_CC()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbcs_16(void) +{ + if(COND_NOT_CS()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbne_16(void) +{ + if(COND_NOT_NE()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbeq_16(void) +{ + if(COND_NOT_EQ()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbvc_16(void) +{ + if(COND_NOT_VC()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbvs_16(void) +{ + if(COND_NOT_VS()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbpl_16(void) +{ + if(COND_NOT_PL()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbmi_16(void) +{ + if(COND_NOT_MI()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbge_16(void) +{ + if(COND_NOT_GE()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dblt_16(void) +{ + if(COND_NOT_LT()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dbgt_16(void) +{ + if(COND_NOT_GT()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_dble_16(void) +{ + if(COND_NOT_LE()) + { + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(*r_dst - 1); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + if(res != 0xffff) + { + uint offset = OPER_I_16(); + REG_PC -= 2; + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_branch_16(offset); + USE_CYCLES(CYC_DBCC_F_NOEXP); + return; + } + REG_PC += 2; + USE_CYCLES(CYC_DBCC_F_EXP); + return; + } + REG_PC += 2; +} + + +void m68k_op_divs_16_d(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(DY); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_ai(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_AY_AI_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_pi(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_AY_PI_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_pd(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_AY_PD_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_di(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_AY_DI_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_ix(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_AY_IX_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_aw(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_AW_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_al(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_AL_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_pcdi(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_PCDI_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_pcix(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_PCIX_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divs_16_i(void) +{ + uint* r_dst = &DX; + sint src = MAKE_INT_16(OPER_I_16()); + sint quotient; + sint remainder; + + if(src != 0) + { + if((uint32)*r_dst == 0x80000000 && src == -1) + { + FLAG_Z = 0; + FLAG_N = NFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = 0; + return; + } + + quotient = MAKE_INT_32(*r_dst) / src; + remainder = MAKE_INT_32(*r_dst) % src; + + if(quotient == MAKE_INT_16(quotient)) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_d(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_16(DY); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_ai(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_AI_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_pi(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PI_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_pd(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PD_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_di(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_DI_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_ix(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_IX_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_aw(void) +{ + uint* r_dst = &DX; + uint src = OPER_AW_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_al(void) +{ + uint* r_dst = &DX; + uint src = OPER_AL_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_pcdi(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCDI_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_pcix(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCIX_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divu_16_i(void) +{ + uint* r_dst = &DX; + uint src = OPER_I_16(); + + if(src != 0) + { + uint quotient = *r_dst / src; + uint remainder = *r_dst % src; + + if(quotient < 0x10000) + { + FLAG_Z = quotient; + FLAG_N = NFLAG_16(quotient); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); + return; + } + FLAG_V = VFLAG_SET; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); +} + + +void m68k_op_divl_32_d(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = DY; + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = DY; + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_ai(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_AY_AI_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_AY_AI_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_pi(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_AY_PI_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_AY_PI_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_pd(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_AY_PD_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_AY_PD_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_di(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_AY_DI_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_AY_DI_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_ix(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_AY_IX_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_AY_IX_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_aw(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_AW_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_AW_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_al(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_AL_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_AL_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_pcdi(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_PCDI_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_PCDI_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_pcix(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_PCIX_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_PCIX_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_divl_32_i(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 divisor = OPER_I_32(); + uint64 dividend = 0; + uint64 quotient = 0; + uint64 remainder = 0; + + if(divisor != 0) + { + if(BIT_A(word2)) /* 64 bit */ + { + dividend = REG_D[word2 & 7]; + dividend <<= 32; + dividend |= REG_D[(word2 >> 12) & 7]; + + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor)); + if((sint64)quotient != (sint64)((sint32)quotient)) + { + FLAG_V = VFLAG_SET; + return; + } + } + else /* unsigned */ + { + quotient = dividend / divisor; + if(quotient > 0xffffffff) + { + FLAG_V = VFLAG_SET; + return; + } + remainder = dividend % divisor; + } + } + else /* 32 bit */ + { + dividend = REG_D[(word2 >> 12) & 7]; + if(BIT_B(word2)) /* signed */ + { + quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor)); + remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor)); + } + else /* unsigned */ + { + quotient = dividend / divisor; + remainder = dividend % divisor; + } + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint divisor = OPER_I_32(); + uint dividend_hi = REG_D[word2 & 7]; + uint dividend_lo = REG_D[(word2 >> 12) & 7]; + uint quotient = 0; + uint remainder = 0; + uint dividend_neg = 0; + uint divisor_neg = 0; + sint i; + uint overflow; + + if(divisor != 0) + { + /* quad / long : long quotient, long remainder */ + if(BIT_A(word2)) + { + if(BIT_B(word2)) /* signed */ + { + /* special case in signed divide */ + if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + REG_D[word2 & 7] = 0; + REG_D[(word2 >> 12) & 7] = 0x80000000; + + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + if(GET_MSB_32(dividend_hi)) + { + dividend_neg = 1; + dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0)); + dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo); + } + if(GET_MSB_32(divisor)) + { + divisor_neg = 1; + divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor); + + } + } + + /* if the upper long is greater than the divisor, we're overflowing. */ + if(dividend_hi >= divisor) + { + FLAG_V = VFLAG_SET; + return; + } + + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + remainder = (remainder << 1) + ((dividend_hi >> i) & 1); + if(remainder >= divisor) + { + remainder -= divisor; + quotient++; + } + } + for(i = 31; i >= 0; i--) + { + quotient <<= 1; + overflow = GET_MSB_32(remainder); + remainder = (remainder << 1) + ((dividend_lo >> i) & 1); + if(remainder >= divisor || overflow) + { + remainder -= divisor; + quotient++; + } + } + + if(BIT_B(word2)) /* signed */ + { + if(quotient > 0x7fffffff) + { + FLAG_V = VFLAG_SET; + return; + } + if(dividend_neg) + { + remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder); + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + if(divisor_neg) + quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient); + } + + REG_D[word2 & 7] = remainder; + REG_D[(word2 >> 12) & 7] = quotient; + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + + /* long / long: long quotient, maybe long remainder */ + if(BIT_B(word2)) /* signed */ + { + /* Special case in divide */ + if(dividend_lo == 0x80000000 && divisor == 0xffffffff) + { + FLAG_N = NFLAG_SET; + FLAG_Z = ZFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + REG_D[(word2 >> 12) & 7] = 0x80000000; + REG_D[word2 & 7] = 0; + return; + } + REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor); + } + else + { + REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor); + quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor); + } + + FLAG_N = NFLAG_32(quotient); + FLAG_Z = quotient; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_eor_8_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY ^= MASK_OUT_ABOVE_8(DX)); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_di(void) +{ + uint ea = EA_AY_DI_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_aw(void) +{ + uint ea = EA_AW_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_8_al(void) +{ + uint ea = EA_AL_8(); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_16_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY ^= MASK_OUT_ABOVE_16(DX)); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_16_aw(void) +{ + uint ea = EA_AW_16(); + uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_16_al(void) +{ + uint ea = EA_AL_16(); + uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_32_d(void) +{ + uint res = DY ^= DX; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_32_ai(void) +{ + uint ea = EA_AY_AI_32(); + uint res = DX ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_32_pi(void) +{ + uint ea = EA_AY_PI_32(); + uint res = DX ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_32_pd(void) +{ + uint ea = EA_AY_PD_32(); + uint res = DX ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_32_di(void) +{ + uint ea = EA_AY_DI_32(); + uint res = DX ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_32_ix(void) +{ + uint ea = EA_AY_IX_32(); + uint res = DX ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_32_aw(void) +{ + uint ea = EA_AW_32(); + uint res = DX ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eor_32_al(void) +{ + uint ea = EA_AL_32(); + uint res = DX ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8()); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_ai(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_AI_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_pi(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PI_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_pi7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PI_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_pd(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PD_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_pd7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PD_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_di(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_DI_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_ix(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_IX_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_aw(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AW_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_8_al(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AL_8(); + uint res = src ^ m68ki_read_8(ea); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16()); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_ai(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_AI_16(); + uint res = src ^ m68ki_read_16(ea); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_pi(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PI_16(); + uint res = src ^ m68ki_read_16(ea); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_pd(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PD_16(); + uint res = src ^ m68ki_read_16(ea); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_di(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_DI_16(); + uint res = src ^ m68ki_read_16(ea); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_ix(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_IX_16(); + uint res = src ^ m68ki_read_16(ea); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_aw(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AW_16(); + uint res = src ^ m68ki_read_16(ea); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_al(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AL_16(); + uint res = src ^ m68ki_read_16(ea); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_32_d(void) +{ + uint res = DY ^= OPER_I_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_32_ai(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_AI_32(); + uint res = src ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_32_pi(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PI_32(); + uint res = src ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_32_pd(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PD_32(); + uint res = src ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_32_di(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_DI_32(); + uint res = src ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_32_ix(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_IX_32(); + uint res = src ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_32_aw(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AW_32(); + uint res = src ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_32_al(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AL_32(); + uint res = src ^ m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_eori_16_toc(void) +{ + m68ki_set_ccr(m68ki_get_ccr() ^ OPER_I_16()); +} + + +void m68k_op_eori_16_tos(void) +{ + if(FLAG_S) + { + uint src = OPER_I_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(m68ki_get_sr() ^ src); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_exg_32_dd(void) +{ + uint* reg_a = &DX; + uint* reg_b = &DY; + uint tmp = *reg_a; + *reg_a = *reg_b; + *reg_b = tmp; +} + + +void m68k_op_exg_32_aa(void) +{ + uint* reg_a = &AX; + uint* reg_b = &AY; + uint tmp = *reg_a; + *reg_a = *reg_b; + *reg_b = tmp; +} + + +void m68k_op_exg_32_da(void) +{ + uint* reg_a = &DX; + uint* reg_b = &AY; + uint tmp = *reg_a; + *reg_a = *reg_b; + *reg_b = tmp; +} + + +void m68k_op_ext_16(void) +{ + uint* r_dst = &DY; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0); + + FLAG_N = NFLAG_16(*r_dst); + FLAG_Z = MASK_OUT_ABOVE_16(*r_dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_ext_32(void) +{ + uint* r_dst = &DY; + + *r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0); + + FLAG_N = NFLAG_32(*r_dst); + FLAG_Z = *r_dst; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_extb_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint* r_dst = &DY; + + *r_dst = MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xffffff00 : 0); + + FLAG_N = NFLAG_32(*r_dst); + FLAG_Z = *r_dst; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_illegal(void) +{ + m68ki_exception_illegal(); +} + + +void m68k_op_jmp_32_ai(void) +{ + m68ki_jump(EA_AY_AI_32()); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_jmp_32_di(void) +{ + m68ki_jump(EA_AY_DI_32()); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_jmp_32_ix(void) +{ + m68ki_jump(EA_AY_IX_32()); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_jmp_32_aw(void) +{ + m68ki_jump(EA_AW_32()); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_jmp_32_al(void) +{ + m68ki_jump(EA_AL_32()); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_jmp_32_pcdi(void) +{ + m68ki_jump(EA_PCDI_32()); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_jmp_32_pcix(void) +{ + m68ki_jump(EA_PCIX_32()); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(REG_PC == REG_PPC) + USE_ALL_CYCLES(); +} + + +void m68k_op_jsr_32_ai(void) +{ + uint ea = EA_AY_AI_32(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + m68ki_jump(ea); +} + + +void m68k_op_jsr_32_di(void) +{ + uint ea = EA_AY_DI_32(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + m68ki_jump(ea); +} + + +void m68k_op_jsr_32_ix(void) +{ + uint ea = EA_AY_IX_32(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + m68ki_jump(ea); +} + + +void m68k_op_jsr_32_aw(void) +{ + uint ea = EA_AW_32(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + m68ki_jump(ea); +} + + +void m68k_op_jsr_32_al(void) +{ + uint ea = EA_AL_32(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + m68ki_jump(ea); +} + + +void m68k_op_jsr_32_pcdi(void) +{ + uint ea = EA_PCDI_32(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + m68ki_jump(ea); +} + + +void m68k_op_jsr_32_pcix(void) +{ + uint ea = EA_PCIX_32(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_push_32(REG_PC); + m68ki_jump(ea); +} + + +void m68k_op_lea_32_ai(void) +{ + AX = EA_AY_AI_32(); +} + + +void m68k_op_lea_32_di(void) +{ + AX = EA_AY_DI_32(); +} + + +void m68k_op_lea_32_ix(void) +{ + AX = EA_AY_IX_32(); +} + + +void m68k_op_lea_32_aw(void) +{ + AX = EA_AW_32(); +} + + +void m68k_op_lea_32_al(void) +{ + AX = EA_AL_32(); +} + + +void m68k_op_lea_32_pcdi(void) +{ + AX = EA_PCDI_32(); +} + + +void m68k_op_lea_32_pcix(void) +{ + AX = EA_PCIX_32(); +} + + +void m68k_op_link_16_a7(void) +{ + REG_A[7] -= 4; + m68ki_write_32(REG_A[7], REG_A[7]); + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16())); +} + + +void m68k_op_link_16(void) +{ + uint* r_dst = &AY; + + m68ki_push_32(*r_dst); + *r_dst = REG_A[7]; + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16())); +} + + +void m68k_op_link_32_a7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_A[7] -= 4; + m68ki_write_32(REG_A[7], REG_A[7]); + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_link_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint* r_dst = &AY; + + m68ki_push_32(*r_dst); + *r_dst = REG_A[7]; + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_lsr_8_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = src >> shift; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_X = FLAG_C = src << (9-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_16_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_16(*r_dst); + uint res = src >> shift; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_X = FLAG_C = src << (9-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_32_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = *r_dst; + uint res = src >> shift; + + *r_dst = res; + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_X = FLAG_C = src << (9-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_8_r(void) +{ + uint* r_dst = &DY; + uint shift = DX & 0x3f; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = src >> shift; + + if(shift != 0) + { + USE_CYCLES(shift<> shift; + + if(shift != 0) + { + USE_CYCLES(shift<> (shift - 1))<<8; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffff0000; + FLAG_X = XFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_16(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_32_r(void) +{ + uint* r_dst = &DY; + uint shift = DX & 0x3f; + uint src = *r_dst; + uint res = src >> shift; + + if(shift != 0) + { + USE_CYCLES(shift<> (shift - 1))<<8; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + *r_dst = 0; + FLAG_X = FLAG_C = (shift == 32 ? GET_MSB_32(src)>>23 : 0); + FLAG_N = NFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_32(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_C = FLAG_X = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_C = FLAG_X = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_C = FLAG_X = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_C = FLAG_X = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_C = FLAG_X = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_C = FLAG_X = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsr_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = src >> 1; + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_CLEAR; + FLAG_Z = res; + FLAG_C = FLAG_X = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_8_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = MASK_OUT_ABOVE_8(src << shift); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src << shift; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_16_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_16(*r_dst); + uint res = MASK_OUT_ABOVE_16(src << shift); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> (8-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_32_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = *r_dst; + uint res = MASK_OUT_ABOVE_32(src << shift); + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> (24-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_8_r(void) +{ + uint* r_dst = &DY; + uint shift = DX & 0x3f; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = MASK_OUT_ABOVE_8(src << shift); + + if(shift != 0) + { + USE_CYCLES(shift<> 8; + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + *r_dst &= 0xffff0000; + FLAG_X = XFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_16(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_32_r(void) +{ + uint* r_dst = &DY; + uint shift = DX & 0x3f; + uint src = *r_dst; + uint res = MASK_OUT_ABOVE_32(src << shift); + + if(shift != 0) + { + USE_CYCLES(shift<> (32 - shift)) << 8; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + *r_dst = 0; + FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8; + FLAG_N = NFLAG_CLEAR; + FLAG_Z = ZFLAG_SET; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_32(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_lsl_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(src << 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_X = FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_move_8_d_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_di(void) +{ + uint res = OPER_AY_DI_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_aw(void) +{ + uint res = OPER_AW_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_al(void) +{ + uint res = OPER_AL_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_d_i(void) +{ + uint res = OPER_I_8(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ai_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_AX_AI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi7_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_A7_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pi_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_AX_PI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd7_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_A7_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_pd_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_AX_PD_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_di_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_AX_DI_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_ix_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_AX_IX_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_aw_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_AW_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_ai(void) +{ + uint res = OPER_AY_AI_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_pi(void) +{ + uint res = OPER_AY_PI_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_pi7(void) +{ + uint res = OPER_A7_PI_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_pd(void) +{ + uint res = OPER_AY_PD_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_pd7(void) +{ + uint res = OPER_A7_PD_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_di(void) +{ + uint res = OPER_AY_DI_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_ix(void) +{ + uint res = OPER_AY_IX_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_aw(void) +{ + uint res = OPER_AW_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_al(void) +{ + uint res = OPER_AL_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_pcdi(void) +{ + uint res = OPER_PCDI_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_pcix(void) +{ + uint res = OPER_PCIX_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_8_al_i(void) +{ + uint res = OPER_I_8(); + uint ea = EA_AL_8(); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_a(void) +{ + uint res = MASK_OUT_ABOVE_16(AY); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_ai(void) +{ + uint res = OPER_AY_AI_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_pi(void) +{ + uint res = OPER_AY_PI_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_pd(void) +{ + uint res = OPER_AY_PD_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_di(void) +{ + uint res = OPER_AY_DI_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_ix(void) +{ + uint res = OPER_AY_IX_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_aw(void) +{ + uint res = OPER_AW_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_al(void) +{ + uint res = OPER_AL_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_pcdi(void) +{ + uint res = OPER_PCDI_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_pcix(void) +{ + uint res = OPER_PCIX_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_d_i(void) +{ + uint res = OPER_I_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_a(void) +{ + uint res = MASK_OUT_ABOVE_16(AY); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_ai(void) +{ + uint res = OPER_AY_AI_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_pi(void) +{ + uint res = OPER_AY_PI_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_pd(void) +{ + uint res = OPER_AY_PD_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_di(void) +{ + uint res = OPER_AY_DI_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_ix(void) +{ + uint res = OPER_AY_IX_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_aw(void) +{ + uint res = OPER_AW_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_al(void) +{ + uint res = OPER_AL_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_pcdi(void) +{ + uint res = OPER_PCDI_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_pcix(void) +{ + uint res = OPER_PCIX_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ai_i(void) +{ + uint res = OPER_I_16(); + uint ea = EA_AX_AI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_a(void) +{ + uint res = MASK_OUT_ABOVE_16(AY); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_ai(void) +{ + uint res = OPER_AY_AI_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_pi(void) +{ + uint res = OPER_AY_PI_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_pd(void) +{ + uint res = OPER_AY_PD_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_di(void) +{ + uint res = OPER_AY_DI_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_ix(void) +{ + uint res = OPER_AY_IX_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_aw(void) +{ + uint res = OPER_AW_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_al(void) +{ + uint res = OPER_AL_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_pcdi(void) +{ + uint res = OPER_PCDI_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_pcix(void) +{ + uint res = OPER_PCIX_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pi_i(void) +{ + uint res = OPER_I_16(); + uint ea = EA_AX_PI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_a(void) +{ + uint res = MASK_OUT_ABOVE_16(AY); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_ai(void) +{ + uint res = OPER_AY_AI_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_pi(void) +{ + uint res = OPER_AY_PI_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_pd(void) +{ + uint res = OPER_AY_PD_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_di(void) +{ + uint res = OPER_AY_DI_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_ix(void) +{ + uint res = OPER_AY_IX_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_aw(void) +{ + uint res = OPER_AW_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_al(void) +{ + uint res = OPER_AL_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_pcdi(void) +{ + uint res = OPER_PCDI_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_pcix(void) +{ + uint res = OPER_PCIX_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_pd_i(void) +{ + uint res = OPER_I_16(); + uint ea = EA_AX_PD_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_a(void) +{ + uint res = MASK_OUT_ABOVE_16(AY); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_ai(void) +{ + uint res = OPER_AY_AI_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_pi(void) +{ + uint res = OPER_AY_PI_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_pd(void) +{ + uint res = OPER_AY_PD_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_di(void) +{ + uint res = OPER_AY_DI_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_ix(void) +{ + uint res = OPER_AY_IX_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_aw(void) +{ + uint res = OPER_AW_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_al(void) +{ + uint res = OPER_AL_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_pcdi(void) +{ + uint res = OPER_PCDI_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_pcix(void) +{ + uint res = OPER_PCIX_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_di_i(void) +{ + uint res = OPER_I_16(); + uint ea = EA_AX_DI_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_a(void) +{ + uint res = MASK_OUT_ABOVE_16(AY); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_ai(void) +{ + uint res = OPER_AY_AI_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_pi(void) +{ + uint res = OPER_AY_PI_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_pd(void) +{ + uint res = OPER_AY_PD_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_di(void) +{ + uint res = OPER_AY_DI_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_ix(void) +{ + uint res = OPER_AY_IX_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_aw(void) +{ + uint res = OPER_AW_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_al(void) +{ + uint res = OPER_AL_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_pcdi(void) +{ + uint res = OPER_PCDI_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_pcix(void) +{ + uint res = OPER_PCIX_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_ix_i(void) +{ + uint res = OPER_I_16(); + uint ea = EA_AX_IX_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_a(void) +{ + uint res = MASK_OUT_ABOVE_16(AY); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_ai(void) +{ + uint res = OPER_AY_AI_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_pi(void) +{ + uint res = OPER_AY_PI_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_pd(void) +{ + uint res = OPER_AY_PD_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_di(void) +{ + uint res = OPER_AY_DI_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_ix(void) +{ + uint res = OPER_AY_IX_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_aw(void) +{ + uint res = OPER_AW_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_al(void) +{ + uint res = OPER_AL_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_pcdi(void) +{ + uint res = OPER_PCDI_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_pcix(void) +{ + uint res = OPER_PCIX_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_aw_i(void) +{ + uint res = OPER_I_16(); + uint ea = EA_AW_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_a(void) +{ + uint res = MASK_OUT_ABOVE_16(AY); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_ai(void) +{ + uint res = OPER_AY_AI_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_pi(void) +{ + uint res = OPER_AY_PI_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_pd(void) +{ + uint res = OPER_AY_PD_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_di(void) +{ + uint res = OPER_AY_DI_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_ix(void) +{ + uint res = OPER_AY_IX_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_aw(void) +{ + uint res = OPER_AW_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_al(void) +{ + uint res = OPER_AL_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_pcdi(void) +{ + uint res = OPER_PCDI_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_pcix(void) +{ + uint res = OPER_PCIX_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_16_al_i(void) +{ + uint res = OPER_I_16(); + uint ea = EA_AL_16(); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_d(void) +{ + uint res = DY; + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_a(void) +{ + uint res = AY; + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_ai(void) +{ + uint res = OPER_AY_AI_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_pi(void) +{ + uint res = OPER_AY_PI_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_pd(void) +{ + uint res = OPER_AY_PD_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_di(void) +{ + uint res = OPER_AY_DI_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_ix(void) +{ + uint res = OPER_AY_IX_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_aw(void) +{ + uint res = OPER_AW_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_al(void) +{ + uint res = OPER_AL_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_pcdi(void) +{ + uint res = OPER_PCDI_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_pcix(void) +{ + uint res = OPER_PCIX_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_d_i(void) +{ + uint res = OPER_I_32(); + uint* r_dst = &DX; + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_d(void) +{ + uint res = DY; + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_a(void) +{ + uint res = AY; + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_ai(void) +{ + uint res = OPER_AY_AI_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_pi(void) +{ + uint res = OPER_AY_PI_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_pd(void) +{ + uint res = OPER_AY_PD_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_di(void) +{ + uint res = OPER_AY_DI_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_ix(void) +{ + uint res = OPER_AY_IX_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_aw(void) +{ + uint res = OPER_AW_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_al(void) +{ + uint res = OPER_AL_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_pcdi(void) +{ + uint res = OPER_PCDI_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_pcix(void) +{ + uint res = OPER_PCIX_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ai_i(void) +{ + uint res = OPER_I_32(); + uint ea = EA_AX_AI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_d(void) +{ + uint res = DY; + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_a(void) +{ + uint res = AY; + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_ai(void) +{ + uint res = OPER_AY_AI_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_pi(void) +{ + uint res = OPER_AY_PI_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_pd(void) +{ + uint res = OPER_AY_PD_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_di(void) +{ + uint res = OPER_AY_DI_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_ix(void) +{ + uint res = OPER_AY_IX_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_aw(void) +{ + uint res = OPER_AW_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_al(void) +{ + uint res = OPER_AL_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_pcdi(void) +{ + uint res = OPER_PCDI_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_pcix(void) +{ + uint res = OPER_PCIX_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pi_i(void) +{ + uint res = OPER_I_32(); + uint ea = EA_AX_PI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_d(void) +{ + uint res = DY; + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_a(void) +{ + uint res = AY; + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_ai(void) +{ + uint res = OPER_AY_AI_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_pi(void) +{ + uint res = OPER_AY_PI_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_pd(void) +{ + uint res = OPER_AY_PD_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_di(void) +{ + uint res = OPER_AY_DI_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_ix(void) +{ + uint res = OPER_AY_IX_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_aw(void) +{ + uint res = OPER_AW_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_al(void) +{ + uint res = OPER_AL_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_pcdi(void) +{ + uint res = OPER_PCDI_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_pcix(void) +{ + uint res = OPER_PCIX_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_pd_i(void) +{ + uint res = OPER_I_32(); + uint ea = EA_AX_PD_32(); + +#if GENESIS_HACKS + m68ki_write_16(ea+2, res & 0xFFFF ); + m68ki_write_16(ea, (res >> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, res); +#endif + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_d(void) +{ + uint res = DY; + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_a(void) +{ + uint res = AY; + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_ai(void) +{ + uint res = OPER_AY_AI_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_pi(void) +{ + uint res = OPER_AY_PI_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_pd(void) +{ + uint res = OPER_AY_PD_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_di(void) +{ + uint res = OPER_AY_DI_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_ix(void) +{ + uint res = OPER_AY_IX_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_aw(void) +{ + uint res = OPER_AW_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_al(void) +{ + uint res = OPER_AL_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_pcdi(void) +{ + uint res = OPER_PCDI_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_pcix(void) +{ + uint res = OPER_PCIX_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_di_i(void) +{ + uint res = OPER_I_32(); + uint ea = EA_AX_DI_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_d(void) +{ + uint res = DY; + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_a(void) +{ + uint res = AY; + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_ai(void) +{ + uint res = OPER_AY_AI_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_pi(void) +{ + uint res = OPER_AY_PI_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_pd(void) +{ + uint res = OPER_AY_PD_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_di(void) +{ + uint res = OPER_AY_DI_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_ix(void) +{ + uint res = OPER_AY_IX_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_aw(void) +{ + uint res = OPER_AW_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_al(void) +{ + uint res = OPER_AL_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_pcdi(void) +{ + uint res = OPER_PCDI_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_pcix(void) +{ + uint res = OPER_PCIX_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_ix_i(void) +{ + uint res = OPER_I_32(); + uint ea = EA_AX_IX_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_d(void) +{ + uint res = DY; + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_a(void) +{ + uint res = AY; + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_ai(void) +{ + uint res = OPER_AY_AI_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_pi(void) +{ + uint res = OPER_AY_PI_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_pd(void) +{ + uint res = OPER_AY_PD_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_di(void) +{ + uint res = OPER_AY_DI_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_ix(void) +{ + uint res = OPER_AY_IX_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_aw(void) +{ + uint res = OPER_AW_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_al(void) +{ + uint res = OPER_AL_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_pcdi(void) +{ + uint res = OPER_PCDI_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_pcix(void) +{ + uint res = OPER_PCIX_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_aw_i(void) +{ + uint res = OPER_I_32(); + uint ea = EA_AW_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_d(void) +{ + uint res = DY; + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_a(void) +{ + uint res = AY; + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_ai(void) +{ + uint res = OPER_AY_AI_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_pi(void) +{ + uint res = OPER_AY_PI_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_pd(void) +{ + uint res = OPER_AY_PD_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_di(void) +{ + uint res = OPER_AY_DI_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_ix(void) +{ + uint res = OPER_AY_IX_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_aw(void) +{ + uint res = OPER_AW_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_al(void) +{ + uint res = OPER_AL_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_pcdi(void) +{ + uint res = OPER_PCDI_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_pcix(void) +{ + uint res = OPER_PCIX_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_move_32_al_i(void) +{ + uint res = OPER_I_32(); + uint ea = EA_AL_32(); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_movea_16_d(void) +{ + AX = MAKE_INT_16(DY); +} + + +void m68k_op_movea_16_a(void) +{ + AX = MAKE_INT_16(AY); +} + + +void m68k_op_movea_16_ai(void) +{ + AX = MAKE_INT_16(OPER_AY_AI_16()); +} + + +void m68k_op_movea_16_pi(void) +{ + AX = MAKE_INT_16(OPER_AY_PI_16()); +} + + +void m68k_op_movea_16_pd(void) +{ + AX = MAKE_INT_16(OPER_AY_PD_16()); +} + + +void m68k_op_movea_16_di(void) +{ + AX = MAKE_INT_16(OPER_AY_DI_16()); +} + + +void m68k_op_movea_16_ix(void) +{ + AX = MAKE_INT_16(OPER_AY_IX_16()); +} + + +void m68k_op_movea_16_aw(void) +{ + AX = MAKE_INT_16(OPER_AW_16()); +} + + +void m68k_op_movea_16_al(void) +{ + AX = MAKE_INT_16(OPER_AL_16()); +} + + +void m68k_op_movea_16_pcdi(void) +{ + AX = MAKE_INT_16(OPER_PCDI_16()); +} + + +void m68k_op_movea_16_pcix(void) +{ + AX = MAKE_INT_16(OPER_PCIX_16()); +} + + +void m68k_op_movea_16_i(void) +{ + AX = MAKE_INT_16(OPER_I_16()); +} + + +void m68k_op_movea_32_d(void) +{ + AX = DY; +} + + +void m68k_op_movea_32_a(void) +{ + AX = AY; +} + + +void m68k_op_movea_32_ai(void) +{ + AX = OPER_AY_AI_32(); +} + + +void m68k_op_movea_32_pi(void) +{ + AX = OPER_AY_PI_32(); +} + + +void m68k_op_movea_32_pd(void) +{ + AX = OPER_AY_PD_32(); +} + + +void m68k_op_movea_32_di(void) +{ + AX = OPER_AY_DI_32(); +} + + +void m68k_op_movea_32_ix(void) +{ + AX = OPER_AY_IX_32(); +} + + +void m68k_op_movea_32_aw(void) +{ + AX = OPER_AW_32(); +} + + +void m68k_op_movea_32_al(void) +{ + AX = OPER_AL_32(); +} + + +void m68k_op_movea_32_pcdi(void) +{ + AX = OPER_PCDI_32(); +} + + +void m68k_op_movea_32_pcix(void) +{ + AX = OPER_PCIX_32(); +} + + +void m68k_op_movea_32_i(void) +{ + AX = OPER_I_32(); +} + + +void m68k_op_move_16_frc_d(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + DY = MASK_OUT_BELOW_16(DY) | m68ki_get_ccr(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_move_16_frc_ai(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + m68ki_write_16(EA_AY_AI_16(), m68ki_get_ccr()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_move_16_frc_pi(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + m68ki_write_16(EA_AY_PI_16(), m68ki_get_ccr()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_move_16_frc_pd(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + m68ki_write_16(EA_AY_PD_16(), m68ki_get_ccr()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_move_16_frc_di(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + m68ki_write_16(EA_AY_DI_16(), m68ki_get_ccr()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_move_16_frc_ix(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + m68ki_write_16(EA_AY_IX_16(), m68ki_get_ccr()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_move_16_frc_aw(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + m68ki_write_16(EA_AW_16(), m68ki_get_ccr()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_move_16_frc_al(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + m68ki_write_16(EA_AL_16(), m68ki_get_ccr()); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_move_16_toc_d(void) +{ + m68ki_set_ccr(DY); +} + + +void m68k_op_move_16_toc_ai(void) +{ + m68ki_set_ccr(OPER_AY_AI_16()); +} + + +void m68k_op_move_16_toc_pi(void) +{ + m68ki_set_ccr(OPER_AY_PI_16()); +} + + +void m68k_op_move_16_toc_pd(void) +{ + m68ki_set_ccr(OPER_AY_PD_16()); +} + + +void m68k_op_move_16_toc_di(void) +{ + m68ki_set_ccr(OPER_AY_DI_16()); +} + + +void m68k_op_move_16_toc_ix(void) +{ + m68ki_set_ccr(OPER_AY_IX_16()); +} + + +void m68k_op_move_16_toc_aw(void) +{ + m68ki_set_ccr(OPER_AW_16()); +} + + +void m68k_op_move_16_toc_al(void) +{ + m68ki_set_ccr(OPER_AL_16()); +} + + +void m68k_op_move_16_toc_pcdi(void) +{ + m68ki_set_ccr(OPER_PCDI_16()); +} + + +void m68k_op_move_16_toc_pcix(void) +{ + m68ki_set_ccr(OPER_PCIX_16()); +} + + +void m68k_op_move_16_toc_i(void) +{ + m68ki_set_ccr(OPER_I_16()); +} + + +void m68k_op_move_16_frs_d(void) +{ + if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ + { + DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr(); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_frs_ai(void) +{ + if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ + { + uint ea = EA_AY_AI_16(); + m68ki_write_16(ea, m68ki_get_sr()); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_frs_pi(void) +{ + if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ + { + uint ea = EA_AY_PI_16(); + m68ki_write_16(ea, m68ki_get_sr()); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_frs_pd(void) +{ + if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ + { + uint ea = EA_AY_PD_16(); + m68ki_write_16(ea, m68ki_get_sr()); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_frs_di(void) +{ + if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ + { + uint ea = EA_AY_DI_16(); + m68ki_write_16(ea, m68ki_get_sr()); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_frs_ix(void) +{ + if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ + { + uint ea = EA_AY_IX_16(); + m68ki_write_16(ea, m68ki_get_sr()); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_frs_aw(void) +{ + if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ + { + uint ea = EA_AW_16(); + m68ki_write_16(ea, m68ki_get_sr()); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_frs_al(void) +{ + if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ + { + uint ea = EA_AL_16(); + m68ki_write_16(ea, m68ki_get_sr()); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_d(void) +{ + if(FLAG_S) + { + m68ki_set_sr(DY); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_ai(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_AY_AI_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_pi(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_AY_PI_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_pd(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_AY_PD_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_di(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_AY_DI_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_ix(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_AY_IX_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_aw(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_AW_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_al(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_AL_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_pcdi(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_PCDI_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_pcix(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_PCIX_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_16_tos_i(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_I_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(new_sr); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_32_fru(void) +{ + if(FLAG_S) + { + AY = REG_USP; + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_move_32_tou(void) +{ + if(FLAG_S) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_USP = AY; + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_movec_32_cr(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + switch (word2 & 0xfff) + { + case 0x000: /* SFC */ + REG_DA[(word2 >> 12) & 15] = REG_SFC; + return; + case 0x001: /* DFC */ + REG_DA[(word2 >> 12) & 15] = REG_DFC; + return; + case 0x002: /* CACR */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_DA[(word2 >> 12) & 15] = REG_CACR; + return; + } + return; + case 0x800: /* USP */ + REG_DA[(word2 >> 12) & 15] = REG_USP; + return; + case 0x801: /* VBR */ + REG_DA[(word2 >> 12) & 15] = REG_VBR; + return; + case 0x802: /* CAAR */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_DA[(word2 >> 12) & 15] = REG_CAAR; + return; + } + m68ki_exception_illegal(); + break; + case 0x803: /* MSP */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_SP : REG_MSP; + return; + } + m68ki_exception_illegal(); + return; + case 0x804: /* ISP */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_ISP : REG_SP; + return; + } + m68ki_exception_illegal(); + return; + default: + m68ki_exception_illegal(); + return; + } + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_movec_32_rc(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + switch (word2 & 0xfff) + { + case 0x000: /* SFC */ + REG_SFC = REG_DA[(word2 >> 12) & 15] & 7; + return; + case 0x001: /* DFC */ + REG_DFC = REG_DA[(word2 >> 12) & 15] & 7; + return; + case 0x002: /* CACR */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_CACR = REG_DA[(word2 >> 12) & 15]; + return; + } + m68ki_exception_illegal(); + return; + case 0x800: /* USP */ + REG_USP = REG_DA[(word2 >> 12) & 15]; + return; + case 0x801: /* VBR */ + REG_VBR = REG_DA[(word2 >> 12) & 15]; + return; + case 0x802: /* CAAR */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_CAAR = REG_DA[(word2 >> 12) & 15]; + return; + } + m68ki_exception_illegal(); + return; + case 0x803: /* MSP */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* we are in supervisor mode so just check for M flag */ + if(!FLAG_M) + { + REG_MSP = REG_DA[(word2 >> 12) & 15]; + return; + } + REG_SP = REG_DA[(word2 >> 12) & 15]; + return; + } + m68ki_exception_illegal(); + return; + case 0x804: /* ISP */ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(!FLAG_M) + { + REG_SP = REG_DA[(word2 >> 12) & 15]; + return; + } + REG_ISP = REG_DA[(word2 >> 12) & 15]; + return; + } + m68ki_exception_illegal(); + return; + default: + m68ki_exception_illegal(); + return; + } + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_movem_16_re_pd(void) +{ + uint i = 0; + uint register_list = OPER_I_16(); + uint ea = AY; + uint count = 0; + + for(; i < 16; i++) + if(register_list & (1 << i)) + { + ea -= 2; + m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[15-i])); + count++; + } + AY = ea; + + USE_CYCLES(count<> 16) & 0xFFFF ); +#else + m68ki_write_32(ea, REG_DA[15-i]); +#endif + count++; + } + AY = ea; + + USE_CYCLES(count<> 8)); + m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src)); +} + + +void m68k_op_movep_32_re(void) +{ + uint ea = EA_AY_DI_32(); + uint src = DX; + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 24)); + m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 16)); + m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 8)); + m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src)); +} + + +void m68k_op_movep_16_er(void) +{ + uint ea = EA_AY_DI_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(ea) << 8) + m68ki_read_8(ea + 2)); +} + + +void m68k_op_movep_32_er(void) +{ + uint ea = EA_AY_DI_32(); + + DX = (m68ki_read_8(ea) << 24) + (m68ki_read_8(ea + 2) << 16) + + (m68ki_read_8(ea + 4) << 8) + m68ki_read_8(ea + 6); +} + + +void m68k_op_moves_8_ai(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_AI_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_8_pi(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PI_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_8_pi7(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_A7_PI_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_8_pd(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PD_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_8_pd7(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_A7_PD_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_8_di(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_DI_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_8_ix(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_IX_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_8_aw(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AW_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_8_al(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AL_8(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_16_ai(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_AI_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_16_pi(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PI_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_16_pd(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PD_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_16_di(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_DI_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_16_ix(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_IX_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_16_aw(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AW_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_16_al(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AL_16(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); + return; + } + if(BIT_F(word2)) /* Memory to address register */ + { + REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC)); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to data register */ + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_32_ai(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_AI_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to register */ + REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_32_pi(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PI_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to register */ + REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_32_pd(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_PD_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to register */ + REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_32_di(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_DI_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to register */ + REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_32_ix(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AY_IX_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to register */ + REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_32_aw(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AW_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to register */ + REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moves_32_al(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + if(FLAG_S) + { + uint word2 = OPER_I_16(); + uint ea = EA_AL_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + if(BIT_B(word2)) /* Register to memory */ + { + m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + /* Memory to register */ + REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC); + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + USE_CYCLES(2); + return; + } + m68ki_exception_privilege_violation(); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_moveq_32(void) +{ + uint res = DX = MAKE_INT_8(MASK_OUT_ABOVE_8(REG_IR)); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_d(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(DY) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_ai(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_AI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_pi(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_pd(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PD_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_di(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_DI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_ix(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_IX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_aw(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AW_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_al(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AL_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_pcdi(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCDI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_pcix(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCIX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_muls_16_i(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_I_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_d(void) +{ + uint* r_dst = &DX; + uint res = MASK_OUT_ABOVE_16(DY) * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_ai(void) +{ + uint* r_dst = &DX; + uint res = OPER_AY_AI_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_pi(void) +{ + uint* r_dst = &DX; + uint res = OPER_AY_PI_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_pd(void) +{ + uint* r_dst = &DX; + uint res = OPER_AY_PD_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_di(void) +{ + uint* r_dst = &DX; + uint res = OPER_AY_DI_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_ix(void) +{ + uint* r_dst = &DX; + uint res = OPER_AY_IX_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_aw(void) +{ + uint* r_dst = &DX; + uint res = OPER_AW_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_al(void) +{ + uint* r_dst = &DX; + uint res = OPER_AL_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_pcdi(void) +{ + uint* r_dst = &DX; + uint res = OPER_PCDI_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_pcix(void) +{ + uint* r_dst = &DX; + uint res = OPER_PCIX_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mulu_16_i(void) +{ + uint* r_dst = &DX; + uint res = OPER_I_16() * MASK_OUT_ABOVE_16(*r_dst); + + *r_dst = res; + + FLAG_Z = res; + FLAG_N = NFLAG_32(res); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_mull_32_d(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = DY; + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = DY; + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_ai(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_AY_AI_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_AY_AI_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_pi(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_AY_PI_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_AY_PI_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_pd(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_AY_PD_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_AY_PD_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_di(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_AY_DI_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_AY_DI_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_ix(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_AY_IX_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_AY_IX_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_aw(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_AW_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_AW_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_al(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_AL_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_AL_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_pcdi(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_PCDI_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_PCDI_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_pcix(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_PCIX_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_PCIX_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +void m68k_op_mull_32_i(void) +{ +#if M68K_USE_64_BIT + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint64 src = OPER_I_32(); + uint64 dst = REG_D[(word2 >> 12) & 7]; + uint64 res; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + res = (sint64)((sint32)src) * (sint64)((sint32)dst); + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = ((sint64)res != (sint32)res)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + + res = src * dst; + if(!BIT_A(word2)) + { + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_N = NFLAG_32(res); + FLAG_V = (res > 0xffffffff)<<7; + REG_D[(word2 >> 12) & 7] = FLAG_Z; + return; + } + FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32); + FLAG_N = NFLAG_64(res); + FLAG_V = VFLAG_CLEAR; + REG_D[word2 & 7] = (res >> 32); + REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); + return; + } + m68ki_exception_illegal(); + +#else + + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint word2 = OPER_I_16(); + uint src = OPER_I_32(); + uint dst = REG_D[(word2 >> 12) & 7]; + uint neg = GET_MSB_32(src ^ dst); + uint src1; + uint src2; + uint dst1; + uint dst2; + uint r1; + uint r2; + uint r3; + uint r4; + uint lo; + uint hi; + + FLAG_C = CFLAG_CLEAR; + + if(BIT_B(word2)) /* signed */ + { + if(GET_MSB_32(src)) + src = (uint)MASK_OUT_ABOVE_32(-(sint)src); + if(GET_MSB_32(dst)) + dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst); + } + + src1 = MASK_OUT_ABOVE_16(src); + src2 = src>>16; + dst1 = MASK_OUT_ABOVE_16(dst); + dst2 = dst>>16; + + + r1 = src1 * dst1; + r2 = src1 * dst2; + r3 = src2 * dst1; + r4 = src2 * dst2; + + lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16); + hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16); + + if(BIT_B(word2) && neg) + { + hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0)); + lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo); + } + + if(BIT_A(word2)) + { + REG_D[word2 & 7] = hi; + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(hi); + FLAG_Z = hi | lo; + FLAG_V = VFLAG_CLEAR; + return; + } + + REG_D[(word2 >> 12) & 7] = lo; + FLAG_N = NFLAG_32(lo); + FLAG_Z = lo; + if(BIT_B(word2)) + FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7; + else + FLAG_V = (hi != 0) << 7; + return; + } + m68ki_exception_illegal(); + +#endif +} + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + + diff --git a/ genplus-gx/source/m68k/m68kopnz.c b/ genplus-gx/source/m68k/m68kopnz.c new file mode 100644 index 0000000..60c57eb --- /dev/null +++ b/ genplus-gx/source/m68k/m68kopnz.c @@ -0,0 +1,8746 @@ +#include "m68kcpu.h" + +/* ======================================================================== */ +/* ========================= INSTRUCTION HANDLERS ========================= */ +/* ======================================================================== */ + + +void m68k_op_nbcd_8_d(void) +{ + uint* r_dst = &DY; + uint dst = *r_dst; + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_di(void) +{ + uint ea = EA_AY_DI_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_aw(void) +{ + uint ea = EA_AW_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_nbcd_8_al(void) +{ + uint ea = EA_AL_8(); + uint dst = m68ki_read_8(ea); + uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); + + if(res != 0x9a) + { + if((res & 0x0f) == 0xa) + res = (res & 0xf0) + 0x10; + + res = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + + FLAG_Z |= res; + FLAG_C = CFLAG_SET; + FLAG_X = XFLAG_SET; + } + else + { + FLAG_C = CFLAG_CLEAR; + FLAG_X = XFLAG_CLEAR; + } + FLAG_N = NFLAG_8(res); /* officially undefined */ +} + + +void m68k_op_neg_8_d(void) +{ + uint* r_dst = &DY; + uint res = 0 - MASK_OUT_ABOVE_8(*r_dst); + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = *r_dst & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_neg_8_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_8_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_8_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_8_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_8_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_8_di(void) +{ + uint ea = EA_AY_DI_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_8_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_8_aw(void) +{ + uint ea = EA_AW_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_8_al(void) +{ + uint ea = EA_AL_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_8(res); + FLAG_C = FLAG_X = CFLAG_8(res); + FLAG_V = src & res; + FLAG_Z = MASK_OUT_ABOVE_8(res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_neg_16_d(void) +{ + uint* r_dst = &DY; + uint res = 0 - MASK_OUT_ABOVE_16(*r_dst); + + FLAG_N = NFLAG_16(res); + FLAG_C = FLAG_X = CFLAG_16(res); + FLAG_V = (*r_dst & res)>>8; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_neg_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_16(res); + FLAG_C = FLAG_X = CFLAG_16(res); + FLAG_V = (src & res)>>8; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_neg_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_16(res); + FLAG_C = FLAG_X = CFLAG_16(res); + FLAG_V = (src & res)>>8; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_neg_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_16(res); + FLAG_C = FLAG_X = CFLAG_16(res); + FLAG_V = (src & res)>>8; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_neg_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_16(res); + FLAG_C = FLAG_X = CFLAG_16(res); + FLAG_V = (src & res)>>8; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_neg_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_16(res); + FLAG_C = FLAG_X = CFLAG_16(res); + FLAG_V = (src & res)>>8; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_neg_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_16(res); + FLAG_C = FLAG_X = CFLAG_16(res); + FLAG_V = (src & res)>>8; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_neg_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_16(res); + FLAG_C = FLAG_X = CFLAG_16(res); + FLAG_V = (src & res)>>8; + FLAG_Z = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_neg_32_d(void) +{ + uint* r_dst = &DY; + uint res = 0 - *r_dst; + + FLAG_N = NFLAG_32(res); + FLAG_C = FLAG_X = CFLAG_SUB_32(*r_dst, 0, res); + FLAG_V = (*r_dst & res)>>24; + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_neg_32_ai(void) +{ + uint ea = EA_AY_AI_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_32(res); + FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_neg_32_pi(void) +{ + uint ea = EA_AY_PI_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_32(res); + FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_neg_32_pd(void) +{ + uint ea = EA_AY_PD_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_32(res); + FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_neg_32_di(void) +{ + uint ea = EA_AY_DI_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_32(res); + FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_neg_32_ix(void) +{ + uint ea = EA_AY_IX_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_32(res); + FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_neg_32_aw(void) +{ + uint ea = EA_AW_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_32(res); + FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_neg_32_al(void) +{ + uint ea = EA_AL_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - src; + + FLAG_N = NFLAG_32(res); + FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + FLAG_Z = MASK_OUT_ABOVE_32(res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_negx_8_d(void) +{ + uint* r_dst = &DY; + uint res = 0 - MASK_OUT_ABOVE_8(*r_dst) - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = *r_dst & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +void m68k_op_negx_8_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_8_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_8_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_8_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_8_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_8_di(void) +{ + uint ea = EA_AY_DI_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_8_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_8_aw(void) +{ + uint ea = EA_AW_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_8_al(void) +{ + uint ea = EA_AL_8(); + uint src = m68ki_read_8(ea); + uint res = 0 - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = src & res; + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_negx_16_d(void) +{ + uint* r_dst = &DY; + uint res = 0 - MASK_OUT_ABOVE_16(*r_dst) - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = (*r_dst & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; +} + + +void m68k_op_negx_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_negx_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_negx_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_negx_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_negx_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_negx_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_negx_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = (src & res)>>8; + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_negx_32_d(void) +{ + uint* r_dst = &DY; + uint res = 0 - MASK_OUT_ABOVE_32(*r_dst) - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(*r_dst, 0, res); + FLAG_V = (*r_dst & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + *r_dst = res; +} + + +void m68k_op_negx_32_ai(void) +{ + uint ea = EA_AY_AI_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_negx_32_pi(void) +{ + uint ea = EA_AY_PI_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_negx_32_pd(void) +{ + uint ea = EA_AY_PD_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_negx_32_di(void) +{ + uint ea = EA_AY_DI_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_negx_32_ix(void) +{ + uint ea = EA_AY_IX_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_negx_32_aw(void) +{ + uint ea = EA_AW_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_negx_32_al(void) +{ + uint ea = EA_AL_32(); + uint src = m68ki_read_32(ea); + uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); + FLAG_V = (src & res)>>24; + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_nop(void) +{ + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ +} + + +void m68k_op_not_8_d(void) +{ + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_8(~*r_dst); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_di(void) +{ + uint ea = EA_AY_DI_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_aw(void) +{ + uint ea = EA_AW_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_8_al(void) +{ + uint ea = EA_AL_8(); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_16_d(void) +{ + uint* r_dst = &DY; + uint res = MASK_OUT_ABOVE_16(~*r_dst); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_16_aw(void) +{ + uint ea = EA_AW_16(); + uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_16_al(void) +{ + uint ea = EA_AL_16(); + uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_32_d(void) +{ + uint* r_dst = &DY; + uint res = *r_dst = MASK_OUT_ABOVE_32(~*r_dst); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_32_ai(void) +{ + uint ea = EA_AY_AI_32(); + uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_32_pi(void) +{ + uint ea = EA_AY_PI_32(); + uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_32_pd(void) +{ + uint ea = EA_AY_PD_32(); + uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_32_di(void) +{ + uint ea = EA_AY_DI_32(); + uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_32_ix(void) +{ + uint ea = EA_AY_IX_32(); + uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_32_aw(void) +{ + uint ea = EA_AW_32(); + uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_not_32_al(void) +{ + uint ea = EA_AL_32(); + uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_d(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= MASK_OUT_ABOVE_8(DY))); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_ai(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_AI_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_pi(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PI_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_pi7(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PI_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_pd(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PD_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_pd7(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PD_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_di(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_DI_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_ix(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_IX_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_aw(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_AW_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_al(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_AL_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_pcdi(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCDI_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_pcix(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCIX_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_er_i(void) +{ + uint res = MASK_OUT_ABOVE_8((DX |= OPER_I_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_d(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= MASK_OUT_ABOVE_16(DY))); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_ai(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_AI_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_pi(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PI_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_pd(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PD_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_di(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_DI_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_ix(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_IX_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_aw(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_AW_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_al(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_AL_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_pcdi(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCDI_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_pcix(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCIX_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_er_i(void) +{ + uint res = MASK_OUT_ABOVE_16((DX |= OPER_I_16())); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_d(void) +{ + uint res = DX |= DY; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_ai(void) +{ + uint res = DX |= OPER_AY_AI_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_pi(void) +{ + uint res = DX |= OPER_AY_PI_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_pd(void) +{ + uint res = DX |= OPER_AY_PD_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_di(void) +{ + uint res = DX |= OPER_AY_DI_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_ix(void) +{ + uint res = DX |= OPER_AY_IX_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_aw(void) +{ + uint res = DX |= OPER_AW_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_al(void) +{ + uint res = DX |= OPER_AL_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_pcdi(void) +{ + uint res = DX |= OPER_PCDI_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_pcix(void) +{ + uint res = DX |= OPER_PCIX_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_er_i(void) +{ + uint res = DX |= OPER_I_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_di(void) +{ + uint ea = EA_AY_DI_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_aw(void) +{ + uint ea = EA_AW_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_8_re_al(void) +{ + uint ea = EA_AL_8(); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_re_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_re_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_re_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_re_di(void) +{ + uint ea = EA_AY_DI_16(); + uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_re_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_re_aw(void) +{ + uint ea = EA_AW_16(); + uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_16_re_al(void) +{ + uint ea = EA_AL_16(); + uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_re_ai(void) +{ + uint ea = EA_AY_AI_32(); + uint res = DX | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_re_pi(void) +{ + uint ea = EA_AY_PI_32(); + uint res = DX | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_re_pd(void) +{ + uint ea = EA_AY_PD_32(); + uint res = DX | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_re_di(void) +{ + uint ea = EA_AY_DI_32(); + uint res = DX | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_re_ix(void) +{ + uint ea = EA_AY_IX_32(); + uint res = DX | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_re_aw(void) +{ + uint ea = EA_AW_32(); + uint res = DX | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_or_32_re_al(void) +{ + uint ea = EA_AL_32(); + uint res = DX | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_d(void) +{ + uint res = MASK_OUT_ABOVE_8((DY |= OPER_I_8())); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_ai(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_AI_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_pi(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PI_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_pi7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PI_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_pd(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PD_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_pd7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PD_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_di(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_DI_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_ix(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_IX_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_aw(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AW_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_8_al(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AL_8(); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + + m68ki_write_8(ea, res); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY |= OPER_I_16()); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_ai(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_AI_16(); + uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_pi(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PI_16(); + uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_pd(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PD_16(); + uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_di(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_DI_16(); + uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_ix(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_IX_16(); + uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_aw(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AW_16(); + uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_al(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AL_16(); + uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_32_d(void) +{ + uint res = DY |= OPER_I_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_32_ai(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_AI_32(); + uint res = src | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_32_pi(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PI_32(); + uint res = src | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_32_pd(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PD_32(); + uint res = src | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_32_di(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_DI_32(); + uint res = src | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_32_ix(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_IX_32(); + uint res = src | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_32_aw(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AW_32(); + uint res = src | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_32_al(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AL_32(); + uint res = src | m68ki_read_32(ea); + + m68ki_write_32(ea, res); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ori_16_toc(void) +{ + m68ki_set_ccr(m68ki_get_ccr() | OPER_I_16()); +} + + +void m68k_op_ori_16_tos(void) +{ + if(FLAG_S) + { + uint src = OPER_I_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_sr(m68ki_get_sr() | src); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_pack_16_rr(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Note: DX and DY are reversed in Motorola's docs */ + uint src = DY + OPER_I_16(); + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | ((src >> 4) & 0x00f0) | (src & 0x000f); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_pack_16_mm_ax7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint ea_src = EA_AY_PD_8(); + uint src = m68ki_read_8(ea_src); + ea_src = EA_AY_PD_8(); + src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16(); + + m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f)); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_pack_16_mm_ay7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint ea_src = EA_A7_PD_8(); + uint src = m68ki_read_8(ea_src); + ea_src = EA_A7_PD_8(); + src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16(); + + m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f)); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_pack_16_mm_axy7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint ea_src = EA_A7_PD_8(); + uint src = m68ki_read_8(ea_src); + ea_src = EA_A7_PD_8(); + src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16(); + + m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f)); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_pack_16_mm(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint ea_src = EA_AY_PD_8(); + uint src = m68ki_read_8(ea_src); + ea_src = EA_AY_PD_8(); + src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16(); + + m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f)); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_pea_32_ai(void) +{ + uint ea = EA_AY_AI_32(); + + m68ki_push_32(ea); +} + + +void m68k_op_pea_32_di(void) +{ + uint ea = EA_AY_DI_32(); + + m68ki_push_32(ea); +} + + +void m68k_op_pea_32_ix(void) +{ + uint ea = EA_AY_IX_32(); + + m68ki_push_32(ea); +} + + +void m68k_op_pea_32_aw(void) +{ + uint ea = EA_AW_32(); + + m68ki_push_32(ea); +} + + +void m68k_op_pea_32_al(void) +{ + uint ea = EA_AL_32(); + + m68ki_push_32(ea); +} + + +void m68k_op_pea_32_pcdi(void) +{ + uint ea = EA_PCDI_32(); + + m68ki_push_32(ea); +} + + +void m68k_op_pea_32_pcix(void) +{ + uint ea = EA_PCIX_32(); + + m68ki_push_32(ea); +} + + +void m68k_op_reset(void) +{ + if(FLAG_S) + { + m68ki_output_reset(); /* auto-disable (see m68kcpu.h) */ + USE_CYCLES(CYC_RESET); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_ror_8_s(void) +{ + uint* r_dst = &DY; + uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint shift = orig_shift & 7; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = ROR_8(src, shift); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = src << (9-orig_shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_16_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_16(*r_dst); + uint res = ROR_16(src, shift); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src << (9-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_32_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint64 src = *r_dst; + uint res = ROR_32(src, shift); + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = src << (9-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_8_r(void) +{ + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + uint shift = orig_shift & 7; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = ROR_8(src, shift); + + if(orig_shift != 0) + { + USE_CYCLES(orig_shift<> ((shift - 1) & 15)) << 8; + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_16(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_32_r(void) +{ + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + uint shift = orig_shift & 31; + uint64 src = *r_dst; + uint res = ROR_32(src, shift); + + if(orig_shift != 0) + { + USE_CYCLES(orig_shift<> ((shift - 1) & 31)) << 8; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_32(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_16(src, 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_16(src, 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_16(src, 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_16(src, 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_16(src, 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_16(src, 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_ror_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_16(src, 1); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src << 8; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_8_s(void) +{ + uint* r_dst = &DY; + uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint shift = orig_shift & 7; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = ROL_8(src, shift); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_C = src << orig_shift; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_16_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_16(*r_dst); + uint res = ROL_16(src, shift); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src >> (8-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_32_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint64 src = *r_dst; + uint res = ROL_32(src, shift); + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_C = src >> (24-shift); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_8_r(void) +{ + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + uint shift = orig_shift & 7; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = ROL_8(src, shift); + + if(orig_shift != 0) + { + USE_CYCLES(orig_shift<> 8; + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + FLAG_C = (src & 1)<<8; + FLAG_N = NFLAG_16(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_16(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_32_r(void) +{ + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + uint shift = orig_shift & 31; + uint64 src = *r_dst; + uint res = ROL_32(src, shift); + + if(orig_shift != 0) + { + USE_CYCLES(orig_shift<> (32 - shift)) << 8; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = CFLAG_CLEAR; + FLAG_N = NFLAG_32(src); + FLAG_Z = src; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_16_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rol_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_C = src >> 7; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_8_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift); + + FLAG_C = FLAG_X = res; + res = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_16_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_16(*r_dst); + uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_32_s(void) +{ +#if M68K_USE_64_BIT + + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint64 src = *r_dst; + uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); + + res = ROR_33_64(res, shift); + + FLAG_C = FLAG_X = res >> 24; + res = MASK_OUT_ABOVE_32(res); + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + +#else + + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = *r_dst; + uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift))); + uint new_x_flag = src & (1 << (shift - 1)); + + *r_dst = res; + + FLAG_C = FLAG_X = (new_x_flag != 0)<<8; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + +#endif +} + + +void m68k_op_roxr_8_r(void) +{ + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + + if(orig_shift != 0) + { + uint shift = orig_shift % 9; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift); + + USE_CYCLES(orig_shift<> 8; + res = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = FLAG_X; + FLAG_N = NFLAG_16(*r_dst); + FLAG_Z = MASK_OUT_ABOVE_16(*r_dst); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_32_r(void) +{ +#if M68K_USE_64_BIT + + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + + if(orig_shift != 0) + { + uint shift = orig_shift % 33; + uint64 src = *r_dst; + uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); + + res = ROR_33_64(res, shift); + + USE_CYCLES(orig_shift<> 24; + res = MASK_OUT_ABOVE_32(res); + + *r_dst = res; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = FLAG_X; + FLAG_N = NFLAG_32(*r_dst); + FLAG_Z = *r_dst; + FLAG_V = VFLAG_CLEAR; + +#else + + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + uint shift = orig_shift % 33; + uint src = *r_dst; + uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift))); + uint new_x_flag = src & (1 << (shift - 1)); + + if(orig_shift != 0) + USE_CYCLES(orig_shift<> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxr_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_8_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift); + + FLAG_C = FLAG_X = res; + res = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_16_s(void) +{ + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = MASK_OUT_ABOVE_16(*r_dst); + uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_32_s(void) +{ +#if M68K_USE_64_BIT + + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint64 src = *r_dst; + uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); + + res = ROL_33_64(res, shift); + + FLAG_C = FLAG_X = res >> 24; + res = MASK_OUT_ABOVE_32(res); + + *r_dst = res; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + +#else + + uint* r_dst = &DY; + uint shift = (((REG_IR >> 9) - 1) & 7) + 1; + uint src = *r_dst; + uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1))); + uint new_x_flag = src & (1 << (32 - shift)); + + *r_dst = res; + + FLAG_C = FLAG_X = (new_x_flag != 0)<<8; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + +#endif +} + + +void m68k_op_roxl_8_r(void) +{ + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + + + if(orig_shift != 0) + { + uint shift = orig_shift % 9; + uint src = MASK_OUT_ABOVE_8(*r_dst); + uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift); + + USE_CYCLES(orig_shift<> 8; + res = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = FLAG_X; + FLAG_N = NFLAG_16(*r_dst); + FLAG_Z = MASK_OUT_ABOVE_16(*r_dst); + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_32_r(void) +{ +#if M68K_USE_64_BIT + + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + + if(orig_shift != 0) + { + uint shift = orig_shift % 33; + uint64 src = *r_dst; + uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); + + res = ROL_33_64(res, shift); + + USE_CYCLES(orig_shift<> 24; + res = MASK_OUT_ABOVE_32(res); + + *r_dst = res; + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + return; + } + + FLAG_C = FLAG_X; + FLAG_N = NFLAG_32(*r_dst); + FLAG_Z = *r_dst; + FLAG_V = VFLAG_CLEAR; + +#else + + uint* r_dst = &DY; + uint orig_shift = DX & 0x3f; + uint shift = orig_shift % 33; + uint src = *r_dst; + uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1))); + uint new_x_flag = src & (1 << (32 - shift)); + + if(orig_shift != 0) + USE_CYCLES(orig_shift<> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_16_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = m68ki_read_16(ea); + uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_16_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = m68ki_read_16(ea); + uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_16_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = m68ki_read_16(ea); + uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_16_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = m68ki_read_16(ea); + uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_16_aw(void) +{ + uint ea = EA_AW_16(); + uint src = m68ki_read_16(ea); + uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_roxl_16_al(void) +{ + uint ea = EA_AL_16(); + uint src = m68ki_read_16(ea); + uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); + + FLAG_C = FLAG_X = res >> 8; + res = MASK_OUT_ABOVE_16(res); + + m68ki_write_16(ea, res); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_rtd_32(void) +{ + if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) + { + uint new_pc = m68ki_pull_32(); + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16())); + m68ki_jump(new_pc); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_rte_32(void) +{ + if(FLAG_S) + { + uint new_sr; + uint new_pc; + uint format_word; + + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + + if(CPU_TYPE_IS_000(CPU_TYPE)) + { + new_sr = m68ki_pull_16(); + new_pc = m68ki_pull_32(); + m68ki_jump(new_pc); + m68ki_set_sr(new_sr); + return; + } + + if(CPU_TYPE_IS_010(CPU_TYPE)) + { + format_word = m68ki_read_16(REG_A[7]+6) >> 12; + if(format_word == 0) + { + new_sr = m68ki_pull_16(); + new_pc = m68ki_pull_32(); + m68ki_fake_pull_16(); /* format word */ + m68ki_jump(new_pc); + m68ki_set_sr(new_sr); + return; + } + /* Not handling bus fault (9) */ + m68ki_exception_format_error(); + return; + } + + /* Otherwise it's 020 */ +rte_loop: + format_word = m68ki_read_16(REG_A[7]+6) >> 12; + switch(format_word) + { + case 0: /* Normal */ + new_sr = m68ki_pull_16(); + new_pc = m68ki_pull_32(); + m68ki_fake_pull_16(); /* format word */ + m68ki_jump(new_pc); + m68ki_set_sr(new_sr); + return; + case 1: /* Throwaway */ + new_sr = m68ki_pull_16(); + m68ki_fake_pull_32(); /* program counter */ + m68ki_fake_pull_16(); /* format word */ + m68ki_set_sr_noint(new_sr); + goto rte_loop; + case 2: /* Trap */ + new_sr = m68ki_pull_16(); + new_pc = m68ki_pull_32(); + m68ki_fake_pull_16(); /* format word */ + m68ki_fake_pull_32(); /* address */ + m68ki_jump(new_pc); + m68ki_set_sr(new_sr); + return; + } + /* Not handling long or short bus fault */ + m68ki_exception_format_error(); + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_rtm_32(void) +{ + if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) + { + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n", + m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR, + m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_rtr_32(void) +{ + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_ccr(m68ki_pull_16()); + m68ki_jump(m68ki_pull_32()); +} + + +void m68k_op_rts_32(void) +{ + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_jump(m68ki_pull_32()); +} + + +void m68k_op_sbcd_8_rr(void) +{ + uint* r_dst = &DX; + uint src = DY; + uint dst = *r_dst; + uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res += 0xa0; + + res = MASK_OUT_ABOVE_8(res); + + FLAG_N = NFLAG_8(res); /* officially undefined */ + FLAG_Z |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +void m68k_op_sbcd_8_mm_ax7(void) +{ + uint src = OPER_AY_PD_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res += 0xa0; + + res = MASK_OUT_ABOVE_8(res); + + FLAG_N = NFLAG_8(res); /* officially undefined */ + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_sbcd_8_mm_ay7(void) +{ + uint src = OPER_A7_PD_8(); + uint ea = EA_AX_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res += 0xa0; + + res = MASK_OUT_ABOVE_8(res); + + FLAG_N = NFLAG_8(res); /* officially undefined */ + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_sbcd_8_mm_axy7(void) +{ + uint src = OPER_A7_PD_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res += 0xa0; + + res = MASK_OUT_ABOVE_8(res); + + FLAG_N = NFLAG_8(res); /* officially undefined */ + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_sbcd_8_mm(void) +{ + uint src = OPER_AY_PD_8(); + uint ea = EA_AX_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); + + if(res > 9) + res -= 6; + res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); + FLAG_X = FLAG_C = (res > 0x99) << 8; + if(FLAG_C) + res += 0xa0; + + res = MASK_OUT_ABOVE_8(res); + + FLAG_N = NFLAG_8(res); /* officially undefined */ + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_st_8_d(void) +{ + DY |= 0xff; +} + + +void m68k_op_st_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), 0xff); +} + + +void m68k_op_st_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), 0xff); +} + + +void m68k_op_st_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), 0xff); +} + + +void m68k_op_st_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), 0xff); +} + + +void m68k_op_st_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), 0xff); +} + + +void m68k_op_st_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), 0xff); +} + + +void m68k_op_st_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), 0xff); +} + + +void m68k_op_st_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), 0xff); +} + + +void m68k_op_st_8_al(void) +{ + m68ki_write_8(EA_AL_8(), 0xff); +} + + +void m68k_op_sf_8_d(void) +{ + DY &= 0xffffff00; +} + + +void m68k_op_sf_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), 0); +} + + +void m68k_op_sf_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), 0); +} + + +void m68k_op_sf_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), 0); +} + + +void m68k_op_sf_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), 0); +} + + +void m68k_op_sf_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), 0); +} + + +void m68k_op_sf_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), 0); +} + + +void m68k_op_sf_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), 0); +} + + +void m68k_op_sf_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), 0); +} + + +void m68k_op_sf_8_al(void) +{ + m68ki_write_8(EA_AL_8(), 0); +} + + +void m68k_op_shi_8_d(void) +{ + if(COND_HI()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_sls_8_d(void) +{ + if(COND_LS()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_scc_8_d(void) +{ + if(COND_CC()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_scs_8_d(void) +{ + if(COND_CS()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_sne_8_d(void) +{ + if(COND_NE()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_seq_8_d(void) +{ + if(COND_EQ()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_svc_8_d(void) +{ + if(COND_VC()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_svs_8_d(void) +{ + if(COND_VS()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_spl_8_d(void) +{ + if(COND_PL()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_smi_8_d(void) +{ + if(COND_MI()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_sge_8_d(void) +{ + if(COND_GE()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_slt_8_d(void) +{ + if(COND_LT()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_sgt_8_d(void) +{ + if(COND_GT()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_sle_8_d(void) +{ + if(COND_LE()) + { + DY |= 0xff; + return; + } + DY &= 0xffffff00; +} + + +void m68k_op_shi_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_shi_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_shi_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_shi_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_shi_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_shi_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_shi_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_shi_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_shi_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_HI() ? 0xff : 0); +} + + +void m68k_op_sls_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_sls_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_sls_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_sls_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_sls_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_sls_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_sls_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_sls_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_sls_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_LS() ? 0xff : 0); +} + + +void m68k_op_scc_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scc_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scc_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scc_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scc_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scc_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scc_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scc_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scc_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_CC() ? 0xff : 0); +} + + +void m68k_op_scs_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_scs_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_scs_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_scs_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_scs_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_scs_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_scs_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_scs_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_scs_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_CS() ? 0xff : 0); +} + + +void m68k_op_sne_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_sne_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_sne_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_sne_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_sne_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_sne_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_sne_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_sne_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_sne_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_NE() ? 0xff : 0); +} + + +void m68k_op_seq_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_seq_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_seq_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_seq_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_seq_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_seq_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_seq_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_seq_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_seq_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_EQ() ? 0xff : 0); +} + + +void m68k_op_svc_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svc_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svc_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svc_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svc_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svc_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svc_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svc_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svc_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_VC() ? 0xff : 0); +} + + +void m68k_op_svs_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_svs_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_svs_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_svs_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_svs_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_svs_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_svs_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_svs_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_svs_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_VS() ? 0xff : 0); +} + + +void m68k_op_spl_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_spl_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_spl_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_spl_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_spl_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_spl_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_spl_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_spl_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_spl_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_PL() ? 0xff : 0); +} + + +void m68k_op_smi_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_smi_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_smi_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_smi_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_smi_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_smi_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_smi_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_smi_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_smi_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_MI() ? 0xff : 0); +} + + +void m68k_op_sge_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_sge_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_sge_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_sge_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_sge_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_sge_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_sge_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_sge_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_sge_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_GE() ? 0xff : 0); +} + + +void m68k_op_slt_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_slt_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_slt_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_slt_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_slt_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_slt_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_slt_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_slt_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_slt_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_LT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sgt_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_GT() ? 0xff : 0); +} + + +void m68k_op_sle_8_ai(void) +{ + m68ki_write_8(EA_AY_AI_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_sle_8_pi(void) +{ + m68ki_write_8(EA_AY_PI_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_sle_8_pi7(void) +{ + m68ki_write_8(EA_A7_PI_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_sle_8_pd(void) +{ + m68ki_write_8(EA_AY_PD_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_sle_8_pd7(void) +{ + m68ki_write_8(EA_A7_PD_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_sle_8_di(void) +{ + m68ki_write_8(EA_AY_DI_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_sle_8_ix(void) +{ + m68ki_write_8(EA_AY_IX_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_sle_8_aw(void) +{ + m68ki_write_8(EA_AW_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_sle_8_al(void) +{ + m68ki_write_8(EA_AL_8(), COND_LE() ? 0xff : 0); +} + + +void m68k_op_stop(void) +{ + if(FLAG_S) + { + uint new_sr = OPER_I_16(); + m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + CPU_STOPPED |= STOP_LEVEL_STOP; + m68ki_set_sr(new_sr); + m68ki_remaining_cycles = 0; + return; + } + m68ki_exception_privilege_violation(); +} + + +void m68k_op_sub_8_er_d(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_8(DY); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_ai(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_AI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_pi(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_pi7(void) +{ + uint* r_dst = &DX; + uint src = OPER_A7_PI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_pd(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PD_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_pd7(void) +{ + uint* r_dst = &DX; + uint src = OPER_A7_PD_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_di(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_DI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_ix(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_IX_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_aw(void) +{ + uint* r_dst = &DX; + uint src = OPER_AW_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_al(void) +{ + uint* r_dst = &DX; + uint src = OPER_AL_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_pcdi(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCDI_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_pcix(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCIX_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_8_er_i(void) +{ + uint* r_dst = &DX; + uint src = OPER_I_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_d(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_16(DY); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_a(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_16(AY); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_ai(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_AI_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_pi(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PI_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_pd(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PD_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_di(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_DI_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_ix(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_IX_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_aw(void) +{ + uint* r_dst = &DX; + uint src = OPER_AW_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_al(void) +{ + uint* r_dst = &DX; + uint src = OPER_AL_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_pcdi(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCDI_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_pcix(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCIX_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_16_er_i(void) +{ + uint* r_dst = &DX; + uint src = OPER_I_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_sub_32_er_d(void) +{ + uint* r_dst = &DX; + uint src = DY; + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_a(void) +{ + uint* r_dst = &DX; + uint src = AY; + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_ai(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_AI_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_pi(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PI_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_pd(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_PD_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_di(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_DI_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_ix(void) +{ + uint* r_dst = &DX; + uint src = OPER_AY_IX_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_aw(void) +{ + uint* r_dst = &DX; + uint src = OPER_AW_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_al(void) +{ + uint* r_dst = &DX; + uint src = OPER_AL_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_pcdi(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCDI_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_pcix(void) +{ + uint* r_dst = &DX; + uint src = OPER_PCIX_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_32_er_i(void) +{ + uint* r_dst = &DX; + uint src = OPER_I_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_sub_8_re_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_8_re_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_8_re_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_8_re_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_8_re_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_8_re_di(void) +{ + uint ea = EA_AY_DI_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_8_re_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_8_re_aw(void) +{ + uint ea = EA_AW_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_8_re_al(void) +{ + uint ea = EA_AL_8(); + uint src = MASK_OUT_ABOVE_8(DX); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_sub_16_re_ai(void) +{ + uint ea = EA_AY_AI_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_sub_16_re_pi(void) +{ + uint ea = EA_AY_PI_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_sub_16_re_pd(void) +{ + uint ea = EA_AY_PD_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_sub_16_re_di(void) +{ + uint ea = EA_AY_DI_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_sub_16_re_ix(void) +{ + uint ea = EA_AY_IX_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_sub_16_re_aw(void) +{ + uint ea = EA_AW_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_sub_16_re_al(void) +{ + uint ea = EA_AL_16(); + uint src = MASK_OUT_ABOVE_16(DX); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_sub_32_re_ai(void) +{ + uint ea = EA_AY_AI_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_sub_32_re_pi(void) +{ + uint ea = EA_AY_PI_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_sub_32_re_pd(void) +{ + uint ea = EA_AY_PD_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_sub_32_re_di(void) +{ + uint ea = EA_AY_DI_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_sub_32_re_ix(void) +{ + uint ea = EA_AY_IX_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_sub_32_re_aw(void) +{ + uint ea = EA_AW_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_sub_32_re_al(void) +{ + uint ea = EA_AL_32(); + uint src = DX; + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_suba_16_d(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY)); +} + + +void m68k_op_suba_16_a(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY)); +} + + +void m68k_op_suba_16_ai(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_AY_AI_16())); +} + + +void m68k_op_suba_16_pi(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_AY_PI_16())); +} + + +void m68k_op_suba_16_pd(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_AY_PD_16())); +} + + +void m68k_op_suba_16_di(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_AY_DI_16())); +} + + +void m68k_op_suba_16_ix(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_AY_IX_16())); +} + + +void m68k_op_suba_16_aw(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_AW_16())); +} + + +void m68k_op_suba_16_al(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_AL_16())); +} + + +void m68k_op_suba_16_pcdi(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_PCDI_16())); +} + + +void m68k_op_suba_16_pcix(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_PCIX_16())); +} + + +void m68k_op_suba_16_i(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(OPER_I_16())); +} + + +void m68k_op_suba_32_d(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - DY); +} + + +void m68k_op_suba_32_a(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - AY); +} + + +void m68k_op_suba_32_ai(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_AY_AI_32()); +} + + +void m68k_op_suba_32_pi(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_AY_PI_32()); +} + + +void m68k_op_suba_32_pd(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_AY_PD_32()); +} + + +void m68k_op_suba_32_di(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_AY_DI_32()); +} + + +void m68k_op_suba_32_ix(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_AY_IX_32()); +} + + +void m68k_op_suba_32_aw(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_AW_32()); +} + + +void m68k_op_suba_32_al(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_AL_32()); +} + + +void m68k_op_suba_32_pcdi(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_PCDI_32()); +} + + +void m68k_op_suba_32_pcix(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_PCIX_32()); +} + + +void m68k_op_suba_32_i(void) +{ + uint* r_dst = &AX; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - OPER_I_32()); +} + + +void m68k_op_subi_8_d(void) +{ + uint* r_dst = &DY; + uint src = OPER_I_8(); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_subi_8_ai(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_AI_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_8_pi(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_8_pi7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_8_pd(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_8_pd7(void) +{ + uint src = OPER_I_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_8_di(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_DI_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_8_ix(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AY_IX_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_8_aw(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AW_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_8_al(void) +{ + uint src = OPER_I_8(); + uint ea = EA_AL_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subi_16_d(void) +{ + uint* r_dst = &DY; + uint src = OPER_I_16(); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_subi_16_ai(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_AI_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subi_16_pi(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PI_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subi_16_pd(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_PD_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subi_16_di(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_DI_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subi_16_ix(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AY_IX_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subi_16_aw(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AW_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subi_16_al(void) +{ + uint src = OPER_I_16(); + uint ea = EA_AL_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subi_32_d(void) +{ + uint* r_dst = &DY; + uint src = OPER_I_32(); + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_subi_32_ai(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_AI_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subi_32_pi(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PI_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subi_32_pd(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_PD_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subi_32_di(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_DI_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subi_32_ix(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AY_IX_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subi_32_aw(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AW_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subi_32_al(void) +{ + uint src = OPER_I_32(); + uint ea = EA_AL_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subq_8_d(void) +{ + uint* r_dst = &DY; + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; +} + + +void m68k_op_subq_8_ai(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_AI_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_8_pi(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_8_pi7(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_A7_PI_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_8_pd(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_8_pd7(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_8_di(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_DI_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_8_ix(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_IX_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_8_aw(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AW_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_8_al(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AL_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src; + + FLAG_N = NFLAG_8(res); + FLAG_Z = MASK_OUT_ABOVE_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + m68ki_write_8(ea, FLAG_Z); +} + + +void m68k_op_subq_16_d(void) +{ + uint* r_dst = &DY; + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; +} + + +void m68k_op_subq_16_a(void) +{ + uint* r_dst = &AY; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1)); +} + + +void m68k_op_subq_16_ai(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_AI_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subq_16_pi(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PI_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subq_16_pd(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PD_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subq_16_di(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_DI_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subq_16_ix(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_IX_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subq_16_aw(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AW_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subq_16_al(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AL_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src; + + FLAG_N = NFLAG_16(res); + FLAG_Z = MASK_OUT_ABOVE_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + m68ki_write_16(ea, FLAG_Z); +} + + +void m68k_op_subq_32_d(void) +{ + uint* r_dst = &DY; + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint dst = *r_dst; + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + *r_dst = FLAG_Z; +} + + +void m68k_op_subq_32_a(void) +{ + uint* r_dst = &AY; + + *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1)); +} + + +void m68k_op_subq_32_ai(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_AI_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subq_32_pi(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PI_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subq_32_pd(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_PD_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subq_32_di(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_DI_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subq_32_ix(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AY_IX_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subq_32_aw(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AW_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subq_32_al(void) +{ + uint src = (((REG_IR >> 9) - 1) & 7) + 1; + uint ea = EA_AL_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src; + + FLAG_N = NFLAG_32(res); + FLAG_Z = MASK_OUT_ABOVE_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + m68ki_write_32(ea, FLAG_Z); +} + + +void m68k_op_subx_8_rr(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_8(DY); + uint dst = MASK_OUT_ABOVE_8(*r_dst); + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; +} + + +void m68k_op_subx_16_rr(void) +{ + uint* r_dst = &DX; + uint src = MASK_OUT_ABOVE_16(DY); + uint dst = MASK_OUT_ABOVE_16(*r_dst); + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; +} + + +void m68k_op_subx_32_rr(void) +{ + uint* r_dst = &DX; + uint src = DY; + uint dst = *r_dst; + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + *r_dst = res; +} + + +void m68k_op_subx_8_mm_ax7(void) +{ + uint src = OPER_AY_PD_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_subx_8_mm_ay7(void) +{ + uint src = OPER_A7_PD_8(); + uint ea = EA_AX_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_subx_8_mm_axy7(void) +{ + uint src = OPER_A7_PD_8(); + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_subx_8_mm(void) +{ + uint src = OPER_AY_PD_8(); + uint ea = EA_AX_PD_8(); + uint dst = m68ki_read_8(ea); + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_8(res); + FLAG_X = FLAG_C = CFLAG_8(res); + FLAG_V = VFLAG_SUB_8(src, dst, res); + + res = MASK_OUT_ABOVE_8(res); + FLAG_Z |= res; + + m68ki_write_8(ea, res); +} + + +void m68k_op_subx_16_mm(void) +{ + uint src = OPER_AY_PD_16(); + uint ea = EA_AX_PD_16(); + uint dst = m68ki_read_16(ea); + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_16(res); + FLAG_X = FLAG_C = CFLAG_16(res); + FLAG_V = VFLAG_SUB_16(src, dst, res); + + res = MASK_OUT_ABOVE_16(res); + FLAG_Z |= res; + + m68ki_write_16(ea, res); +} + + +void m68k_op_subx_32_mm(void) +{ + uint src = OPER_AY_PD_32(); + uint ea = EA_AX_PD_32(); + uint dst = m68ki_read_32(ea); + uint res = dst - src - XFLAG_AS_1(); + + FLAG_N = NFLAG_32(res); + FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); + FLAG_V = VFLAG_SUB_32(src, dst, res); + + res = MASK_OUT_ABOVE_32(res); + FLAG_Z |= res; + + m68ki_write_32(ea, res); +} + + +void m68k_op_swap_32(void) +{ + uint* r_dst = &DY; + + FLAG_Z = MASK_OUT_ABOVE_32(*r_dst<<16); + *r_dst = (*r_dst>>16) | FLAG_Z; + + FLAG_Z = *r_dst; + FLAG_N = NFLAG_32(*r_dst); + FLAG_C = CFLAG_CLEAR; + FLAG_V = VFLAG_CLEAR; +} + + +void m68k_op_tas_8_d(void) +{ + uint* r_dst = &DY; + + FLAG_Z = MASK_OUT_ABOVE_8(*r_dst); + FLAG_N = NFLAG_8(*r_dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + *r_dst |= 0x80; +} + + +void m68k_op_tas_8_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_tas_8_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_tas_8_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_tas_8_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_tas_8_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_tas_8_di(void) +{ + uint ea = EA_AY_DI_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_tas_8_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_tas_8_aw(void) +{ + uint ea = EA_AW_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_tas_8_al(void) +{ + uint ea = EA_AL_8(); + uint dst = m68ki_read_8(ea); + + FLAG_Z = dst; + FLAG_N = NFLAG_8(dst); + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +#if GENESIS_HACKS + /* Write-back prevented in this system */ +#else + m68ki_write_8(ea, dst | 0x80); +#endif +} + + +void m68k_op_trap(void) +{ + /* Trap#n stacks exception frame type 0 */ + m68ki_exception_trapN(EXCEPTION_TRAP_BASE + (REG_IR & 0xf)); /* HJB 990403 */ +} + + +void m68k_op_trapt(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapt_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapt_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapf(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapf_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapf_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traphi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_HI()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapls(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LS()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapcc(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_CC()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapcs(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_CS()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapne(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_NE()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapeq(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_EQ()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapvc(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_VC()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapvs(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_VS()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trappl(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_PL()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapmi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_MI()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapge(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_GE()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traplt(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LT()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapgt(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_GT()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traple(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LE()) + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traphi_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_HI()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapls_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LS()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapcc_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_CC()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapcs_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_CS()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapne_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_NE()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapeq_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_EQ()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapvc_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_VC()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapvs_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_VS()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trappl_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_PL()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapmi_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_MI()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapge_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_GE()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traplt_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LT()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapgt_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_GT()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traple_16(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LE()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 2; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traphi_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_HI()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapls_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LS()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapcc_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_CC()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapcs_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_CS()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapne_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_NE()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapeq_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_EQ()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapvc_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_VC()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapvs_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_VS()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trappl_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_PL()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapmi_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_MI()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapge_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_GE()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traplt_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LT()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapgt_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_GT()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_traple_32(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + if(COND_LE()) + { + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + return; + } + REG_PC += 4; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_trapv(void) +{ + if(COND_VC()) + { + return; + } + m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ +} + + +void m68k_op_tst_8_d(void) +{ + uint res = MASK_OUT_ABOVE_8(DY); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_ai(void) +{ + uint ea = EA_AY_AI_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_pi(void) +{ + uint ea = EA_AY_PI_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_pi7(void) +{ + uint ea = EA_A7_PI_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_pd(void) +{ + uint ea = EA_AY_PD_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_pd7(void) +{ + uint ea = EA_A7_PD_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_di(void) +{ + uint ea = EA_AY_DI_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_ix(void) +{ + uint ea = EA_AY_IX_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_aw(void) +{ + uint ea = EA_AW_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_al(void) +{ + uint ea = EA_AL_8(); + uint res = m68ki_read_8(ea); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_8_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_PCDI_8(); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_8_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_PCIX_8(); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_8_i(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_I_8(); + + FLAG_N = NFLAG_8(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_16_d(void) +{ + uint res = MASK_OUT_ABOVE_16(DY); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_16_a(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = MAKE_INT_16(AY); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_16_ai(void) +{ + uint res = OPER_AY_AI_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_16_pi(void) +{ + uint res = OPER_AY_PI_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_16_pd(void) +{ + uint res = OPER_AY_PD_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_16_di(void) +{ + uint res = OPER_AY_DI_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_16_ix(void) +{ + uint res = OPER_AY_IX_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_16_aw(void) +{ + uint res = OPER_AW_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_16_al(void) +{ + uint res = OPER_AL_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_16_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_PCDI_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_16_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_PCIX_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_16_i(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_I_16(); + + FLAG_N = NFLAG_16(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_32_d(void) +{ + uint res = DY; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_32_a(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = AY; + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_32_ai(void) +{ + uint res = OPER_AY_AI_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_32_pi(void) +{ + uint res = OPER_AY_PI_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_32_pd(void) +{ + uint res = OPER_AY_PD_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_32_di(void) +{ + uint res = OPER_AY_DI_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_32_ix(void) +{ + uint res = OPER_AY_IX_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_32_aw(void) +{ + uint res = OPER_AW_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_32_al(void) +{ + uint res = OPER_AL_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; +} + + +void m68k_op_tst_32_pcdi(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_PCDI_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_32_pcix(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_PCIX_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_tst_32_i(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint res = OPER_I_32(); + + FLAG_N = NFLAG_32(res); + FLAG_Z = res; + FLAG_V = VFLAG_CLEAR; + FLAG_C = CFLAG_CLEAR; + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_unlk_32_a7(void) +{ + REG_A[7] = m68ki_read_32(REG_A[7]); +} + + +void m68k_op_unlk_32(void) +{ + uint* r_dst = &AY; + + REG_A[7] = *r_dst; + *r_dst = m68ki_pull_32(); +} + + +void m68k_op_unpk_16_rr(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Note: DX and DY are reversed in Motorola's docs */ + uint src = DY; + uint* r_dst = &DX; + + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16()) & 0xffff); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_unpk_16_mm_ax7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint src = OPER_AY_PD_8(); + uint ea_dst; + + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(); + ea_dst = EA_A7_PD_8(); + m68ki_write_8(ea_dst, (src >> 8) & 0xff); + ea_dst = EA_A7_PD_8(); + m68ki_write_8(ea_dst, src & 0xff); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_unpk_16_mm_ay7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint src = OPER_A7_PD_8(); + uint ea_dst; + + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(); + ea_dst = EA_AX_PD_8(); + m68ki_write_8(ea_dst, (src >> 8) & 0xff); + ea_dst = EA_AX_PD_8(); + m68ki_write_8(ea_dst, src & 0xff); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_unpk_16_mm_axy7(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + uint src = OPER_A7_PD_8(); + uint ea_dst; + + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(); + ea_dst = EA_A7_PD_8(); + m68ki_write_8(ea_dst, (src >> 8) & 0xff); + ea_dst = EA_A7_PD_8(); + m68ki_write_8(ea_dst, src & 0xff); + return; + } + m68ki_exception_illegal(); +} + + +void m68k_op_unpk_16_mm(void) +{ + if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) + { + /* Note: AX and AY are reversed in Motorola's docs */ + uint src = OPER_AY_PD_8(); + uint ea_dst; + + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(); + ea_dst = EA_AX_PD_8(); + m68ki_write_8(ea_dst, (src >> 8) & 0xff); + ea_dst = EA_AX_PD_8(); + m68ki_write_8(ea_dst, src & 0xff); + return; + } + m68ki_exception_illegal(); +} + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + + diff --git a/ genplus-gx/source/m68k/m68kops.c b/ genplus-gx/source/m68k/m68kops.c new file mode 100644 index 0000000..ac79916 --- /dev/null +++ b/ genplus-gx/source/m68k/m68kops.c @@ -0,0 +1,2093 @@ +/* ======================================================================== */ +/* ========================= OPCODE TABLE BUILDER ========================= */ +/* ======================================================================== */ + +#include "m68kops.h" + +#define NUM_CPU_TYPES 3 + +void (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */ +unsigned char m68ki_cycles[NUM_CPU_TYPES][0x10000]; /* Cycles used by CPU type */ + +/* This is used to generate the opcode handler jump table */ +typedef struct +{ + void (*opcode_handler)(void); /* handler function */ + unsigned int mask; /* mask on opcode */ + unsigned int match; /* what to match after masking */ + unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */ +} opcode_handler_struct; + + +/* Opcode handler table */ +static opcode_handler_struct m68k_opcode_handler_table[] = +{ +/* function mask match 000 010 020 */ + {m68k_op_1010 , 0xf000, 0xa000, { 4, 4, 4}}, + {m68k_op_1111 , 0xf000, 0xf000, { 4, 4, 4}}, + {m68k_op_moveq_32 , 0xf100, 0x7000, { 4, 4, 2}}, + {m68k_op_cpbcc_32 , 0xf180, 0xf080, { 0, 0, 4}}, + {m68k_op_cpgen_32 , 0xf1c0, 0xf000, { 0, 0, 4}}, + {m68k_op_cpscc_32 , 0xf1c0, 0xf040, { 0, 0, 4}}, + {m68k_op_bra_8 , 0xff00, 0x6000, { 10, 10, 10}}, + {m68k_op_bsr_8 , 0xff00, 0x6100, { 18, 18, 7}}, + {m68k_op_bhi_8 , 0xff00, 0x6200, { 8, 8, 6}}, + {m68k_op_bls_8 , 0xff00, 0x6300, { 8, 8, 6}}, + {m68k_op_bcc_8 , 0xff00, 0x6400, { 8, 8, 6}}, + {m68k_op_bcs_8 , 0xff00, 0x6500, { 8, 8, 6}}, + {m68k_op_bne_8 , 0xff00, 0x6600, { 8, 8, 6}}, + {m68k_op_beq_8 , 0xff00, 0x6700, { 8, 8, 6}}, + {m68k_op_bvc_8 , 0xff00, 0x6800, { 8, 8, 6}}, + {m68k_op_bvs_8 , 0xff00, 0x6900, { 8, 8, 6}}, + {m68k_op_bpl_8 , 0xff00, 0x6a00, { 8, 8, 6}}, + {m68k_op_bmi_8 , 0xff00, 0x6b00, { 8, 8, 6}}, + {m68k_op_bge_8 , 0xff00, 0x6c00, { 8, 8, 6}}, + {m68k_op_blt_8 , 0xff00, 0x6d00, { 8, 8, 6}}, + {m68k_op_bgt_8 , 0xff00, 0x6e00, { 8, 8, 6}}, + {m68k_op_ble_8 , 0xff00, 0x6f00, { 8, 8, 6}}, + {m68k_op_btst_32_r_d , 0xf1f8, 0x0100, { 6, 6, 4}}, + {m68k_op_movep_16_er , 0xf1f8, 0x0108, { 16, 16, 12}}, + {m68k_op_btst_8_r_ai , 0xf1f8, 0x0110, { 8, 8, 8}}, + {m68k_op_btst_8_r_pi , 0xf1f8, 0x0118, { 8, 8, 8}}, + {m68k_op_btst_8_r_pd , 0xf1f8, 0x0120, { 10, 10, 9}}, + {m68k_op_btst_8_r_di , 0xf1f8, 0x0128, { 12, 12, 9}}, + {m68k_op_btst_8_r_ix , 0xf1f8, 0x0130, { 14, 14, 11}}, + {m68k_op_bchg_32_r_d , 0xf1f8, 0x0140, { 8, 8, 4}}, + {m68k_op_movep_32_er , 0xf1f8, 0x0148, { 24, 24, 18}}, + {m68k_op_bchg_8_r_ai , 0xf1f8, 0x0150, { 12, 12, 8}}, + {m68k_op_bchg_8_r_pi , 0xf1f8, 0x0158, { 12, 12, 8}}, + {m68k_op_bchg_8_r_pd , 0xf1f8, 0x0160, { 14, 14, 9}}, + {m68k_op_bchg_8_r_di , 0xf1f8, 0x0168, { 16, 16, 9}}, + {m68k_op_bchg_8_r_ix , 0xf1f8, 0x0170, { 18, 18, 11}}, + {m68k_op_bclr_32_r_d , 0xf1f8, 0x0180, { 10, 10, 4}}, + {m68k_op_movep_16_re , 0xf1f8, 0x0188, { 16, 16, 11}}, + {m68k_op_bclr_8_r_ai , 0xf1f8, 0x0190, { 12, 14, 8}}, + {m68k_op_bclr_8_r_pi , 0xf1f8, 0x0198, { 12, 14, 8}}, + {m68k_op_bclr_8_r_pd , 0xf1f8, 0x01a0, { 14, 16, 9}}, + {m68k_op_bclr_8_r_di , 0xf1f8, 0x01a8, { 16, 18, 9}}, + {m68k_op_bclr_8_r_ix , 0xf1f8, 0x01b0, { 18, 20, 11}}, + {m68k_op_bset_32_r_d , 0xf1f8, 0x01c0, { 8, 8, 4}}, + {m68k_op_movep_32_re , 0xf1f8, 0x01c8, { 24, 24, 17}}, + {m68k_op_bset_8_r_ai , 0xf1f8, 0x01d0, { 12, 12, 8}}, + {m68k_op_bset_8_r_pi , 0xf1f8, 0x01d8, { 12, 12, 8}}, + {m68k_op_bset_8_r_pd , 0xf1f8, 0x01e0, { 14, 14, 9}}, + {m68k_op_bset_8_r_di , 0xf1f8, 0x01e8, { 16, 16, 9}}, + {m68k_op_bset_8_r_ix , 0xf1f8, 0x01f0, { 18, 18, 11}}, + {m68k_op_move_8_d_d , 0xf1f8, 0x1000, { 4, 4, 2}}, + {m68k_op_move_8_d_ai , 0xf1f8, 0x1010, { 8, 8, 6}}, + {m68k_op_move_8_d_pi , 0xf1f8, 0x1018, { 8, 8, 6}}, + {m68k_op_move_8_d_pd , 0xf1f8, 0x1020, { 10, 10, 7}}, + {m68k_op_move_8_d_di , 0xf1f8, 0x1028, { 12, 12, 7}}, + {m68k_op_move_8_d_ix , 0xf1f8, 0x1030, { 14, 14, 9}}, + {m68k_op_move_8_ai_d , 0xf1f8, 0x1080, { 8, 8, 4}}, + {m68k_op_move_8_ai_ai , 0xf1f8, 0x1090, { 12, 12, 8}}, + {m68k_op_move_8_ai_pi , 0xf1f8, 0x1098, { 12, 12, 8}}, + {m68k_op_move_8_ai_pd , 0xf1f8, 0x10a0, { 14, 14, 9}}, + {m68k_op_move_8_ai_di , 0xf1f8, 0x10a8, { 16, 16, 9}}, + {m68k_op_move_8_ai_ix , 0xf1f8, 0x10b0, { 18, 18, 11}}, + {m68k_op_move_8_pi_d , 0xf1f8, 0x10c0, { 8, 8, 4}}, + {m68k_op_move_8_pi_ai , 0xf1f8, 0x10d0, { 12, 12, 8}}, + {m68k_op_move_8_pi_pi , 0xf1f8, 0x10d8, { 12, 12, 8}}, + {m68k_op_move_8_pi_pd , 0xf1f8, 0x10e0, { 14, 14, 9}}, + {m68k_op_move_8_pi_di , 0xf1f8, 0x10e8, { 16, 16, 9}}, + {m68k_op_move_8_pi_ix , 0xf1f8, 0x10f0, { 18, 18, 11}}, + {m68k_op_move_8_pd_d , 0xf1f8, 0x1100, { 8, 8, 5}}, + {m68k_op_move_8_pd_ai , 0xf1f8, 0x1110, { 12, 12, 9}}, + {m68k_op_move_8_pd_pi , 0xf1f8, 0x1118, { 12, 12, 9}}, + {m68k_op_move_8_pd_pd , 0xf1f8, 0x1120, { 14, 14, 10}}, + {m68k_op_move_8_pd_di , 0xf1f8, 0x1128, { 16, 16, 10}}, + {m68k_op_move_8_pd_ix , 0xf1f8, 0x1130, { 18, 18, 12}}, + {m68k_op_move_8_di_d , 0xf1f8, 0x1140, { 12, 12, 5}}, + {m68k_op_move_8_di_ai , 0xf1f8, 0x1150, { 16, 16, 9}}, + {m68k_op_move_8_di_pi , 0xf1f8, 0x1158, { 16, 16, 9}}, + {m68k_op_move_8_di_pd , 0xf1f8, 0x1160, { 18, 18, 10}}, + {m68k_op_move_8_di_di , 0xf1f8, 0x1168, { 20, 20, 10}}, + {m68k_op_move_8_di_ix , 0xf1f8, 0x1170, { 22, 22, 12}}, + {m68k_op_move_8_ix_d , 0xf1f8, 0x1180, { 14, 14, 7}}, + {m68k_op_move_8_ix_ai , 0xf1f8, 0x1190, { 18, 18, 11}}, + {m68k_op_move_8_ix_pi , 0xf1f8, 0x1198, { 18, 18, 11}}, + {m68k_op_move_8_ix_pd , 0xf1f8, 0x11a0, { 20, 20, 12}}, + {m68k_op_move_8_ix_di , 0xf1f8, 0x11a8, { 22, 22, 12}}, + {m68k_op_move_8_ix_ix , 0xf1f8, 0x11b0, { 24, 24, 14}}, + {m68k_op_move_32_d_d , 0xf1f8, 0x2000, { 4, 4, 2}}, + {m68k_op_move_32_d_a , 0xf1f8, 0x2008, { 4, 4, 2}}, + {m68k_op_move_32_d_ai , 0xf1f8, 0x2010, { 12, 12, 6}}, + {m68k_op_move_32_d_pi , 0xf1f8, 0x2018, { 12, 12, 6}}, + {m68k_op_move_32_d_pd , 0xf1f8, 0x2020, { 14, 14, 7}}, + {m68k_op_move_32_d_di , 0xf1f8, 0x2028, { 16, 16, 7}}, + {m68k_op_move_32_d_ix , 0xf1f8, 0x2030, { 18, 18, 9}}, + {m68k_op_movea_32_d , 0xf1f8, 0x2040, { 4, 4, 2}}, + {m68k_op_movea_32_a , 0xf1f8, 0x2048, { 4, 4, 2}}, + {m68k_op_movea_32_ai , 0xf1f8, 0x2050, { 12, 12, 6}}, + {m68k_op_movea_32_pi , 0xf1f8, 0x2058, { 12, 12, 6}}, + {m68k_op_movea_32_pd , 0xf1f8, 0x2060, { 14, 14, 7}}, + {m68k_op_movea_32_di , 0xf1f8, 0x2068, { 16, 16, 7}}, + {m68k_op_movea_32_ix , 0xf1f8, 0x2070, { 18, 18, 9}}, + {m68k_op_move_32_ai_d , 0xf1f8, 0x2080, { 12, 12, 4}}, + {m68k_op_move_32_ai_a , 0xf1f8, 0x2088, { 12, 12, 4}}, + {m68k_op_move_32_ai_ai , 0xf1f8, 0x2090, { 20, 20, 8}}, + {m68k_op_move_32_ai_pi , 0xf1f8, 0x2098, { 20, 20, 8}}, + {m68k_op_move_32_ai_pd , 0xf1f8, 0x20a0, { 22, 22, 9}}, + {m68k_op_move_32_ai_di , 0xf1f8, 0x20a8, { 24, 24, 9}}, + {m68k_op_move_32_ai_ix , 0xf1f8, 0x20b0, { 26, 26, 11}}, + {m68k_op_move_32_pi_d , 0xf1f8, 0x20c0, { 12, 12, 4}}, + {m68k_op_move_32_pi_a , 0xf1f8, 0x20c8, { 12, 12, 4}}, + {m68k_op_move_32_pi_ai , 0xf1f8, 0x20d0, { 20, 20, 8}}, + {m68k_op_move_32_pi_pi , 0xf1f8, 0x20d8, { 20, 20, 8}}, + {m68k_op_move_32_pi_pd , 0xf1f8, 0x20e0, { 22, 22, 9}}, + {m68k_op_move_32_pi_di , 0xf1f8, 0x20e8, { 24, 24, 9}}, + {m68k_op_move_32_pi_ix , 0xf1f8, 0x20f0, { 26, 26, 11}}, + {m68k_op_move_32_pd_d , 0xf1f8, 0x2100, { 12, 14, 5}}, + {m68k_op_move_32_pd_a , 0xf1f8, 0x2108, { 12, 14, 5}}, + {m68k_op_move_32_pd_ai , 0xf1f8, 0x2110, { 20, 22, 9}}, + {m68k_op_move_32_pd_pi , 0xf1f8, 0x2118, { 20, 22, 9}}, + {m68k_op_move_32_pd_pd , 0xf1f8, 0x2120, { 22, 24, 10}}, + {m68k_op_move_32_pd_di , 0xf1f8, 0x2128, { 24, 26, 10}}, + {m68k_op_move_32_pd_ix , 0xf1f8, 0x2130, { 26, 28, 12}}, + {m68k_op_move_32_di_d , 0xf1f8, 0x2140, { 16, 16, 5}}, + {m68k_op_move_32_di_a , 0xf1f8, 0x2148, { 16, 16, 5}}, + {m68k_op_move_32_di_ai , 0xf1f8, 0x2150, { 24, 24, 9}}, + {m68k_op_move_32_di_pi , 0xf1f8, 0x2158, { 24, 24, 9}}, + {m68k_op_move_32_di_pd , 0xf1f8, 0x2160, { 26, 26, 10}}, + {m68k_op_move_32_di_di , 0xf1f8, 0x2168, { 28, 28, 10}}, + {m68k_op_move_32_di_ix , 0xf1f8, 0x2170, { 30, 30, 12}}, + {m68k_op_move_32_ix_d , 0xf1f8, 0x2180, { 18, 18, 7}}, + {m68k_op_move_32_ix_a , 0xf1f8, 0x2188, { 18, 18, 7}}, + {m68k_op_move_32_ix_ai , 0xf1f8, 0x2190, { 26, 26, 11}}, + {m68k_op_move_32_ix_pi , 0xf1f8, 0x2198, { 26, 26, 11}}, + {m68k_op_move_32_ix_pd , 0xf1f8, 0x21a0, { 28, 28, 12}}, + {m68k_op_move_32_ix_di , 0xf1f8, 0x21a8, { 30, 30, 12}}, + {m68k_op_move_32_ix_ix , 0xf1f8, 0x21b0, { 32, 32, 14}}, + {m68k_op_move_16_d_d , 0xf1f8, 0x3000, { 4, 4, 2}}, + {m68k_op_move_16_d_a , 0xf1f8, 0x3008, { 4, 4, 2}}, + {m68k_op_move_16_d_ai , 0xf1f8, 0x3010, { 8, 8, 6}}, + {m68k_op_move_16_d_pi , 0xf1f8, 0x3018, { 8, 8, 6}}, + {m68k_op_move_16_d_pd , 0xf1f8, 0x3020, { 10, 10, 7}}, + {m68k_op_move_16_d_di , 0xf1f8, 0x3028, { 12, 12, 7}}, + {m68k_op_move_16_d_ix , 0xf1f8, 0x3030, { 14, 14, 9}}, + {m68k_op_movea_16_d , 0xf1f8, 0x3040, { 4, 4, 2}}, + {m68k_op_movea_16_a , 0xf1f8, 0x3048, { 4, 4, 2}}, + {m68k_op_movea_16_ai , 0xf1f8, 0x3050, { 8, 8, 6}}, + {m68k_op_movea_16_pi , 0xf1f8, 0x3058, { 8, 8, 6}}, + {m68k_op_movea_16_pd , 0xf1f8, 0x3060, { 10, 10, 7}}, + {m68k_op_movea_16_di , 0xf1f8, 0x3068, { 12, 12, 7}}, + {m68k_op_movea_16_ix , 0xf1f8, 0x3070, { 14, 14, 9}}, + {m68k_op_move_16_ai_d , 0xf1f8, 0x3080, { 8, 8, 4}}, + {m68k_op_move_16_ai_a , 0xf1f8, 0x3088, { 8, 8, 4}}, + {m68k_op_move_16_ai_ai , 0xf1f8, 0x3090, { 12, 12, 8}}, + {m68k_op_move_16_ai_pi , 0xf1f8, 0x3098, { 12, 12, 8}}, + {m68k_op_move_16_ai_pd , 0xf1f8, 0x30a0, { 14, 14, 9}}, + {m68k_op_move_16_ai_di , 0xf1f8, 0x30a8, { 16, 16, 9}}, + {m68k_op_move_16_ai_ix , 0xf1f8, 0x30b0, { 18, 18, 11}}, + {m68k_op_move_16_pi_d , 0xf1f8, 0x30c0, { 8, 8, 4}}, + {m68k_op_move_16_pi_a , 0xf1f8, 0x30c8, { 8, 8, 4}}, + {m68k_op_move_16_pi_ai , 0xf1f8, 0x30d0, { 12, 12, 8}}, + {m68k_op_move_16_pi_pi , 0xf1f8, 0x30d8, { 12, 12, 8}}, + {m68k_op_move_16_pi_pd , 0xf1f8, 0x30e0, { 14, 14, 9}}, + {m68k_op_move_16_pi_di , 0xf1f8, 0x30e8, { 16, 16, 9}}, + {m68k_op_move_16_pi_ix , 0xf1f8, 0x30f0, { 18, 18, 11}}, + {m68k_op_move_16_pd_d , 0xf1f8, 0x3100, { 8, 8, 5}}, + {m68k_op_move_16_pd_a , 0xf1f8, 0x3108, { 8, 8, 5}}, + {m68k_op_move_16_pd_ai , 0xf1f8, 0x3110, { 12, 12, 9}}, + {m68k_op_move_16_pd_pi , 0xf1f8, 0x3118, { 12, 12, 9}}, + {m68k_op_move_16_pd_pd , 0xf1f8, 0x3120, { 14, 14, 10}}, + {m68k_op_move_16_pd_di , 0xf1f8, 0x3128, { 16, 16, 10}}, + {m68k_op_move_16_pd_ix , 0xf1f8, 0x3130, { 18, 18, 12}}, + {m68k_op_move_16_di_d , 0xf1f8, 0x3140, { 12, 12, 5}}, + {m68k_op_move_16_di_a , 0xf1f8, 0x3148, { 12, 12, 5}}, + {m68k_op_move_16_di_ai , 0xf1f8, 0x3150, { 16, 16, 9}}, + {m68k_op_move_16_di_pi , 0xf1f8, 0x3158, { 16, 16, 9}}, + {m68k_op_move_16_di_pd , 0xf1f8, 0x3160, { 18, 18, 10}}, + {m68k_op_move_16_di_di , 0xf1f8, 0x3168, { 20, 20, 10}}, + {m68k_op_move_16_di_ix , 0xf1f8, 0x3170, { 22, 22, 12}}, + {m68k_op_move_16_ix_d , 0xf1f8, 0x3180, { 14, 14, 7}}, + {m68k_op_move_16_ix_a , 0xf1f8, 0x3188, { 14, 14, 7}}, + {m68k_op_move_16_ix_ai , 0xf1f8, 0x3190, { 18, 18, 11}}, + {m68k_op_move_16_ix_pi , 0xf1f8, 0x3198, { 18, 18, 11}}, + {m68k_op_move_16_ix_pd , 0xf1f8, 0x31a0, { 20, 20, 12}}, + {m68k_op_move_16_ix_di , 0xf1f8, 0x31a8, { 22, 22, 12}}, + {m68k_op_move_16_ix_ix , 0xf1f8, 0x31b0, { 24, 24, 14}}, + {m68k_op_chk_32_d , 0xf1f8, 0x4100, { 0, 0, 8}}, + {m68k_op_chk_32_ai , 0xf1f8, 0x4110, { 0, 0, 12}}, + {m68k_op_chk_32_pi , 0xf1f8, 0x4118, { 0, 0, 12}}, + {m68k_op_chk_32_pd , 0xf1f8, 0x4120, { 0, 0, 13}}, + {m68k_op_chk_32_di , 0xf1f8, 0x4128, { 0, 0, 13}}, + {m68k_op_chk_32_ix , 0xf1f8, 0x4130, { 0, 0, 15}}, + {m68k_op_chk_16_d , 0xf1f8, 0x4180, { 10, 8, 8}}, + {m68k_op_chk_16_ai , 0xf1f8, 0x4190, { 14, 12, 12}}, + {m68k_op_chk_16_pi , 0xf1f8, 0x4198, { 14, 12, 12}}, + {m68k_op_chk_16_pd , 0xf1f8, 0x41a0, { 16, 14, 13}}, + {m68k_op_chk_16_di , 0xf1f8, 0x41a8, { 18, 16, 13}}, + {m68k_op_chk_16_ix , 0xf1f8, 0x41b0, { 20, 18, 15}}, + {m68k_op_lea_32_ai , 0xf1f8, 0x41d0, { 4, 4, 6}}, + {m68k_op_lea_32_di , 0xf1f8, 0x41e8, { 8, 8, 7}}, + {m68k_op_lea_32_ix , 0xf1f8, 0x41f0, { 12, 12, 9}}, + {m68k_op_addq_8_d , 0xf1f8, 0x5000, { 4, 4, 2}}, + {m68k_op_addq_8_ai , 0xf1f8, 0x5010, { 12, 12, 8}}, + {m68k_op_addq_8_pi , 0xf1f8, 0x5018, { 12, 12, 8}}, + {m68k_op_addq_8_pd , 0xf1f8, 0x5020, { 14, 14, 9}}, + {m68k_op_addq_8_di , 0xf1f8, 0x5028, { 16, 16, 9}}, + {m68k_op_addq_8_ix , 0xf1f8, 0x5030, { 18, 18, 11}}, + {m68k_op_addq_16_d , 0xf1f8, 0x5040, { 4, 4, 2}}, + {m68k_op_addq_16_a , 0xf1f8, 0x5048, { 4, 4, 2}}, + {m68k_op_addq_16_ai , 0xf1f8, 0x5050, { 12, 12, 8}}, + {m68k_op_addq_16_pi , 0xf1f8, 0x5058, { 12, 12, 8}}, + {m68k_op_addq_16_pd , 0xf1f8, 0x5060, { 14, 14, 9}}, + {m68k_op_addq_16_di , 0xf1f8, 0x5068, { 16, 16, 9}}, + {m68k_op_addq_16_ix , 0xf1f8, 0x5070, { 18, 18, 11}}, + {m68k_op_addq_32_d , 0xf1f8, 0x5080, { 8, 8, 2}}, + {m68k_op_addq_32_a , 0xf1f8, 0x5088, { 8, 8, 2}}, + {m68k_op_addq_32_ai , 0xf1f8, 0x5090, { 20, 20, 8}}, + {m68k_op_addq_32_pi , 0xf1f8, 0x5098, { 20, 20, 8}}, + {m68k_op_addq_32_pd , 0xf1f8, 0x50a0, { 22, 22, 9}}, + {m68k_op_addq_32_di , 0xf1f8, 0x50a8, { 24, 24, 9}}, + {m68k_op_addq_32_ix , 0xf1f8, 0x50b0, { 26, 26, 11}}, + {m68k_op_subq_8_d , 0xf1f8, 0x5100, { 4, 4, 2}}, + {m68k_op_subq_8_ai , 0xf1f8, 0x5110, { 12, 12, 8}}, + {m68k_op_subq_8_pi , 0xf1f8, 0x5118, { 12, 12, 8}}, + {m68k_op_subq_8_pd , 0xf1f8, 0x5120, { 14, 14, 9}}, + {m68k_op_subq_8_di , 0xf1f8, 0x5128, { 16, 16, 9}}, + {m68k_op_subq_8_ix , 0xf1f8, 0x5130, { 18, 18, 11}}, + {m68k_op_subq_16_d , 0xf1f8, 0x5140, { 4, 4, 2}}, + {m68k_op_subq_16_a , 0xf1f8, 0x5148, { 8, 4, 2}}, + {m68k_op_subq_16_ai , 0xf1f8, 0x5150, { 12, 12, 8}}, + {m68k_op_subq_16_pi , 0xf1f8, 0x5158, { 12, 12, 8}}, + {m68k_op_subq_16_pd , 0xf1f8, 0x5160, { 14, 14, 9}}, + {m68k_op_subq_16_di , 0xf1f8, 0x5168, { 16, 16, 9}}, + {m68k_op_subq_16_ix , 0xf1f8, 0x5170, { 18, 18, 11}}, + {m68k_op_subq_32_d , 0xf1f8, 0x5180, { 8, 8, 2}}, + {m68k_op_subq_32_a , 0xf1f8, 0x5188, { 8, 8, 2}}, + {m68k_op_subq_32_ai , 0xf1f8, 0x5190, { 20, 20, 8}}, + {m68k_op_subq_32_pi , 0xf1f8, 0x5198, { 20, 20, 8}}, + {m68k_op_subq_32_pd , 0xf1f8, 0x51a0, { 22, 22, 9}}, + {m68k_op_subq_32_di , 0xf1f8, 0x51a8, { 24, 24, 9}}, + {m68k_op_subq_32_ix , 0xf1f8, 0x51b0, { 26, 26, 11}}, + {m68k_op_or_8_er_d , 0xf1f8, 0x8000, { 4, 4, 2}}, + {m68k_op_or_8_er_ai , 0xf1f8, 0x8010, { 8, 8, 6}}, + {m68k_op_or_8_er_pi , 0xf1f8, 0x8018, { 8, 8, 6}}, + {m68k_op_or_8_er_pd , 0xf1f8, 0x8020, { 10, 10, 7}}, + {m68k_op_or_8_er_di , 0xf1f8, 0x8028, { 12, 12, 7}}, + {m68k_op_or_8_er_ix , 0xf1f8, 0x8030, { 14, 14, 9}}, + {m68k_op_or_16_er_d , 0xf1f8, 0x8040, { 4, 4, 2}}, + {m68k_op_or_16_er_ai , 0xf1f8, 0x8050, { 8, 8, 6}}, + {m68k_op_or_16_er_pi , 0xf1f8, 0x8058, { 8, 8, 6}}, + {m68k_op_or_16_er_pd , 0xf1f8, 0x8060, { 10, 10, 7}}, + {m68k_op_or_16_er_di , 0xf1f8, 0x8068, { 12, 12, 7}}, + {m68k_op_or_16_er_ix , 0xf1f8, 0x8070, { 14, 14, 9}}, + {m68k_op_or_32_er_d , 0xf1f8, 0x8080, { 6, 6, 2}}, + {m68k_op_or_32_er_ai , 0xf1f8, 0x8090, { 14, 14, 6}}, + {m68k_op_or_32_er_pi , 0xf1f8, 0x8098, { 14, 14, 6}}, + {m68k_op_or_32_er_pd , 0xf1f8, 0x80a0, { 16, 16, 7}}, + {m68k_op_or_32_er_di , 0xf1f8, 0x80a8, { 18, 18, 7}}, + {m68k_op_or_32_er_ix , 0xf1f8, 0x80b0, { 20, 20, 9}}, + {m68k_op_divu_16_d , 0xf1f8, 0x80c0, {140, 108, 44}}, + {m68k_op_divu_16_ai , 0xf1f8, 0x80d0, {144, 112, 48}}, + {m68k_op_divu_16_pi , 0xf1f8, 0x80d8, {144, 112, 48}}, + {m68k_op_divu_16_pd , 0xf1f8, 0x80e0, {146, 114, 49}}, + {m68k_op_divu_16_di , 0xf1f8, 0x80e8, {148, 116, 49}}, + {m68k_op_divu_16_ix , 0xf1f8, 0x80f0, {150, 118, 51}}, + {m68k_op_sbcd_8_rr , 0xf1f8, 0x8100, { 6, 6, 4}}, + {m68k_op_sbcd_8_mm , 0xf1f8, 0x8108, { 18, 18, 16}}, + {m68k_op_or_8_re_ai , 0xf1f8, 0x8110, { 12, 12, 8}}, + {m68k_op_or_8_re_pi , 0xf1f8, 0x8118, { 12, 12, 8}}, + {m68k_op_or_8_re_pd , 0xf1f8, 0x8120, { 14, 14, 9}}, + {m68k_op_or_8_re_di , 0xf1f8, 0x8128, { 16, 16, 9}}, + {m68k_op_or_8_re_ix , 0xf1f8, 0x8130, { 18, 18, 11}}, + {m68k_op_pack_16_rr , 0xf1f8, 0x8140, { 0, 0, 6}}, + {m68k_op_pack_16_mm , 0xf1f8, 0x8148, { 0, 0, 13}}, + {m68k_op_or_16_re_ai , 0xf1f8, 0x8150, { 12, 12, 8}}, + {m68k_op_or_16_re_pi , 0xf1f8, 0x8158, { 12, 12, 8}}, + {m68k_op_or_16_re_pd , 0xf1f8, 0x8160, { 14, 14, 9}}, + {m68k_op_or_16_re_di , 0xf1f8, 0x8168, { 16, 16, 9}}, + {m68k_op_or_16_re_ix , 0xf1f8, 0x8170, { 18, 18, 11}}, + {m68k_op_unpk_16_rr , 0xf1f8, 0x8180, { 0, 0, 8}}, + {m68k_op_unpk_16_mm , 0xf1f8, 0x8188, { 0, 0, 13}}, + {m68k_op_or_32_re_ai , 0xf1f8, 0x8190, { 20, 20, 8}}, + {m68k_op_or_32_re_pi , 0xf1f8, 0x8198, { 20, 20, 8}}, + {m68k_op_or_32_re_pd , 0xf1f8, 0x81a0, { 22, 22, 9}}, + {m68k_op_or_32_re_di , 0xf1f8, 0x81a8, { 24, 24, 9}}, + {m68k_op_or_32_re_ix , 0xf1f8, 0x81b0, { 26, 26, 11}}, + {m68k_op_divs_16_d , 0xf1f8, 0x81c0, {158, 122, 56}}, + {m68k_op_divs_16_ai , 0xf1f8, 0x81d0, {162, 126, 60}}, + {m68k_op_divs_16_pi , 0xf1f8, 0x81d8, {162, 126, 60}}, + {m68k_op_divs_16_pd , 0xf1f8, 0x81e0, {164, 128, 61}}, + {m68k_op_divs_16_di , 0xf1f8, 0x81e8, {166, 130, 61}}, + {m68k_op_divs_16_ix , 0xf1f8, 0x81f0, {168, 132, 63}}, + {m68k_op_sub_8_er_d , 0xf1f8, 0x9000, { 4, 4, 2}}, + {m68k_op_sub_8_er_ai , 0xf1f8, 0x9010, { 8, 8, 6}}, + {m68k_op_sub_8_er_pi , 0xf1f8, 0x9018, { 8, 8, 6}}, + {m68k_op_sub_8_er_pd , 0xf1f8, 0x9020, { 10, 10, 7}}, + {m68k_op_sub_8_er_di , 0xf1f8, 0x9028, { 12, 12, 7}}, + {m68k_op_sub_8_er_ix , 0xf1f8, 0x9030, { 14, 14, 9}}, + {m68k_op_sub_16_er_d , 0xf1f8, 0x9040, { 4, 4, 2}}, + {m68k_op_sub_16_er_a , 0xf1f8, 0x9048, { 4, 4, 2}}, + {m68k_op_sub_16_er_ai , 0xf1f8, 0x9050, { 8, 8, 6}}, + {m68k_op_sub_16_er_pi , 0xf1f8, 0x9058, { 8, 8, 6}}, + {m68k_op_sub_16_er_pd , 0xf1f8, 0x9060, { 10, 10, 7}}, + {m68k_op_sub_16_er_di , 0xf1f8, 0x9068, { 12, 12, 7}}, + {m68k_op_sub_16_er_ix , 0xf1f8, 0x9070, { 14, 14, 9}}, + {m68k_op_sub_32_er_d , 0xf1f8, 0x9080, { 6, 6, 2}}, + {m68k_op_sub_32_er_a , 0xf1f8, 0x9088, { 6, 6, 2}}, + {m68k_op_sub_32_er_ai , 0xf1f8, 0x9090, { 14, 14, 6}}, + {m68k_op_sub_32_er_pi , 0xf1f8, 0x9098, { 14, 14, 6}}, + {m68k_op_sub_32_er_pd , 0xf1f8, 0x90a0, { 16, 16, 7}}, + {m68k_op_sub_32_er_di , 0xf1f8, 0x90a8, { 18, 18, 7}}, + {m68k_op_sub_32_er_ix , 0xf1f8, 0x90b0, { 20, 20, 9}}, + {m68k_op_suba_16_d , 0xf1f8, 0x90c0, { 8, 8, 2}}, + {m68k_op_suba_16_a , 0xf1f8, 0x90c8, { 8, 8, 2}}, + {m68k_op_suba_16_ai , 0xf1f8, 0x90d0, { 12, 12, 6}}, + {m68k_op_suba_16_pi , 0xf1f8, 0x90d8, { 12, 12, 6}}, + {m68k_op_suba_16_pd , 0xf1f8, 0x90e0, { 14, 14, 7}}, + {m68k_op_suba_16_di , 0xf1f8, 0x90e8, { 16, 16, 7}}, + {m68k_op_suba_16_ix , 0xf1f8, 0x90f0, { 18, 18, 9}}, + {m68k_op_subx_8_rr , 0xf1f8, 0x9100, { 4, 4, 2}}, + {m68k_op_subx_8_mm , 0xf1f8, 0x9108, { 18, 18, 12}}, + {m68k_op_sub_8_re_ai , 0xf1f8, 0x9110, { 12, 12, 8}}, + {m68k_op_sub_8_re_pi , 0xf1f8, 0x9118, { 12, 12, 8}}, + {m68k_op_sub_8_re_pd , 0xf1f8, 0x9120, { 14, 14, 9}}, + {m68k_op_sub_8_re_di , 0xf1f8, 0x9128, { 16, 16, 9}}, + {m68k_op_sub_8_re_ix , 0xf1f8, 0x9130, { 18, 18, 11}}, + {m68k_op_subx_16_rr , 0xf1f8, 0x9140, { 4, 4, 2}}, + {m68k_op_subx_16_mm , 0xf1f8, 0x9148, { 18, 18, 12}}, + {m68k_op_sub_16_re_ai , 0xf1f8, 0x9150, { 12, 12, 8}}, + {m68k_op_sub_16_re_pi , 0xf1f8, 0x9158, { 12, 12, 8}}, + {m68k_op_sub_16_re_pd , 0xf1f8, 0x9160, { 14, 14, 9}}, + {m68k_op_sub_16_re_di , 0xf1f8, 0x9168, { 16, 16, 9}}, + {m68k_op_sub_16_re_ix , 0xf1f8, 0x9170, { 18, 18, 11}}, + {m68k_op_subx_32_rr , 0xf1f8, 0x9180, { 8, 6, 2}}, + {m68k_op_subx_32_mm , 0xf1f8, 0x9188, { 30, 30, 12}}, + {m68k_op_sub_32_re_ai , 0xf1f8, 0x9190, { 20, 20, 8}}, + {m68k_op_sub_32_re_pi , 0xf1f8, 0x9198, { 20, 20, 8}}, + {m68k_op_sub_32_re_pd , 0xf1f8, 0x91a0, { 22, 22, 9}}, + {m68k_op_sub_32_re_di , 0xf1f8, 0x91a8, { 24, 24, 9}}, + {m68k_op_sub_32_re_ix , 0xf1f8, 0x91b0, { 26, 26, 11}}, + {m68k_op_suba_32_d , 0xf1f8, 0x91c0, { 6, 6, 2}}, + {m68k_op_suba_32_a , 0xf1f8, 0x91c8, { 6, 6, 2}}, + {m68k_op_suba_32_ai , 0xf1f8, 0x91d0, { 14, 14, 6}}, + {m68k_op_suba_32_pi , 0xf1f8, 0x91d8, { 14, 14, 6}}, + {m68k_op_suba_32_pd , 0xf1f8, 0x91e0, { 16, 16, 7}}, + {m68k_op_suba_32_di , 0xf1f8, 0x91e8, { 18, 18, 7}}, + {m68k_op_suba_32_ix , 0xf1f8, 0x91f0, { 20, 20, 9}}, + {m68k_op_cmp_8_d , 0xf1f8, 0xb000, { 4, 4, 2}}, + {m68k_op_cmp_8_ai , 0xf1f8, 0xb010, { 8, 8, 6}}, + {m68k_op_cmp_8_pi , 0xf1f8, 0xb018, { 8, 8, 6}}, + {m68k_op_cmp_8_pd , 0xf1f8, 0xb020, { 10, 10, 7}}, + {m68k_op_cmp_8_di , 0xf1f8, 0xb028, { 12, 12, 7}}, + {m68k_op_cmp_8_ix , 0xf1f8, 0xb030, { 14, 14, 9}}, + {m68k_op_cmp_16_d , 0xf1f8, 0xb040, { 4, 4, 2}}, + {m68k_op_cmp_16_a , 0xf1f8, 0xb048, { 4, 4, 2}}, + {m68k_op_cmp_16_ai , 0xf1f8, 0xb050, { 8, 8, 6}}, + {m68k_op_cmp_16_pi , 0xf1f8, 0xb058, { 8, 8, 6}}, + {m68k_op_cmp_16_pd , 0xf1f8, 0xb060, { 10, 10, 7}}, + {m68k_op_cmp_16_di , 0xf1f8, 0xb068, { 12, 12, 7}}, + {m68k_op_cmp_16_ix , 0xf1f8, 0xb070, { 14, 14, 9}}, + {m68k_op_cmp_32_d , 0xf1f8, 0xb080, { 6, 6, 2}}, + {m68k_op_cmp_32_a , 0xf1f8, 0xb088, { 6, 6, 2}}, + {m68k_op_cmp_32_ai , 0xf1f8, 0xb090, { 14, 14, 6}}, + {m68k_op_cmp_32_pi , 0xf1f8, 0xb098, { 14, 14, 6}}, + {m68k_op_cmp_32_pd , 0xf1f8, 0xb0a0, { 16, 16, 7}}, + {m68k_op_cmp_32_di , 0xf1f8, 0xb0a8, { 18, 18, 7}}, + {m68k_op_cmp_32_ix , 0xf1f8, 0xb0b0, { 20, 20, 9}}, + {m68k_op_cmpa_16_d , 0xf1f8, 0xb0c0, { 6, 6, 4}}, + {m68k_op_cmpa_16_a , 0xf1f8, 0xb0c8, { 6, 6, 4}}, + {m68k_op_cmpa_16_ai , 0xf1f8, 0xb0d0, { 10, 10, 8}}, + {m68k_op_cmpa_16_pi , 0xf1f8, 0xb0d8, { 10, 10, 8}}, + {m68k_op_cmpa_16_pd , 0xf1f8, 0xb0e0, { 12, 12, 9}}, + {m68k_op_cmpa_16_di , 0xf1f8, 0xb0e8, { 14, 14, 9}}, + {m68k_op_cmpa_16_ix , 0xf1f8, 0xb0f0, { 16, 16, 11}}, + {m68k_op_eor_8_d , 0xf1f8, 0xb100, { 4, 4, 2}}, + {m68k_op_cmpm_8 , 0xf1f8, 0xb108, { 12, 12, 9}}, + {m68k_op_eor_8_ai , 0xf1f8, 0xb110, { 12, 12, 8}}, + {m68k_op_eor_8_pi , 0xf1f8, 0xb118, { 12, 12, 8}}, + {m68k_op_eor_8_pd , 0xf1f8, 0xb120, { 14, 14, 9}}, + {m68k_op_eor_8_di , 0xf1f8, 0xb128, { 16, 16, 9}}, + {m68k_op_eor_8_ix , 0xf1f8, 0xb130, { 18, 18, 11}}, + {m68k_op_eor_16_d , 0xf1f8, 0xb140, { 4, 4, 2}}, + {m68k_op_cmpm_16 , 0xf1f8, 0xb148, { 12, 12, 9}}, + {m68k_op_eor_16_ai , 0xf1f8, 0xb150, { 12, 12, 8}}, + {m68k_op_eor_16_pi , 0xf1f8, 0xb158, { 12, 12, 8}}, + {m68k_op_eor_16_pd , 0xf1f8, 0xb160, { 14, 14, 9}}, + {m68k_op_eor_16_di , 0xf1f8, 0xb168, { 16, 16, 9}}, + {m68k_op_eor_16_ix , 0xf1f8, 0xb170, { 18, 18, 11}}, + {m68k_op_eor_32_d , 0xf1f8, 0xb180, { 8, 6, 2}}, + {m68k_op_cmpm_32 , 0xf1f8, 0xb188, { 20, 20, 9}}, + {m68k_op_eor_32_ai , 0xf1f8, 0xb190, { 20, 20, 8}}, + {m68k_op_eor_32_pi , 0xf1f8, 0xb198, { 20, 20, 8}}, + {m68k_op_eor_32_pd , 0xf1f8, 0xb1a0, { 22, 22, 9}}, + {m68k_op_eor_32_di , 0xf1f8, 0xb1a8, { 24, 24, 9}}, + {m68k_op_eor_32_ix , 0xf1f8, 0xb1b0, { 26, 26, 11}}, + {m68k_op_cmpa_32_d , 0xf1f8, 0xb1c0, { 6, 6, 4}}, + {m68k_op_cmpa_32_a , 0xf1f8, 0xb1c8, { 6, 6, 4}}, + {m68k_op_cmpa_32_ai , 0xf1f8, 0xb1d0, { 14, 14, 8}}, + {m68k_op_cmpa_32_pi , 0xf1f8, 0xb1d8, { 14, 14, 8}}, + {m68k_op_cmpa_32_pd , 0xf1f8, 0xb1e0, { 16, 16, 9}}, + {m68k_op_cmpa_32_di , 0xf1f8, 0xb1e8, { 18, 18, 9}}, + {m68k_op_cmpa_32_ix , 0xf1f8, 0xb1f0, { 20, 20, 11}}, + {m68k_op_and_8_er_d , 0xf1f8, 0xc000, { 4, 4, 2}}, + {m68k_op_and_8_er_ai , 0xf1f8, 0xc010, { 8, 8, 6}}, + {m68k_op_and_8_er_pi , 0xf1f8, 0xc018, { 8, 8, 6}}, + {m68k_op_and_8_er_pd , 0xf1f8, 0xc020, { 10, 10, 7}}, + {m68k_op_and_8_er_di , 0xf1f8, 0xc028, { 12, 12, 7}}, + {m68k_op_and_8_er_ix , 0xf1f8, 0xc030, { 14, 14, 9}}, + {m68k_op_and_16_er_d , 0xf1f8, 0xc040, { 4, 4, 2}}, + {m68k_op_and_16_er_ai , 0xf1f8, 0xc050, { 8, 8, 6}}, + {m68k_op_and_16_er_pi , 0xf1f8, 0xc058, { 8, 8, 6}}, + {m68k_op_and_16_er_pd , 0xf1f8, 0xc060, { 10, 10, 7}}, + {m68k_op_and_16_er_di , 0xf1f8, 0xc068, { 12, 12, 7}}, + {m68k_op_and_16_er_ix , 0xf1f8, 0xc070, { 14, 14, 9}}, + {m68k_op_and_32_er_d , 0xf1f8, 0xc080, { 6, 6, 2}}, + {m68k_op_and_32_er_ai , 0xf1f8, 0xc090, { 14, 14, 6}}, + {m68k_op_and_32_er_pi , 0xf1f8, 0xc098, { 14, 14, 6}}, + {m68k_op_and_32_er_pd , 0xf1f8, 0xc0a0, { 16, 16, 7}}, + {m68k_op_and_32_er_di , 0xf1f8, 0xc0a8, { 18, 18, 7}}, + {m68k_op_and_32_er_ix , 0xf1f8, 0xc0b0, { 20, 20, 9}}, + {m68k_op_mulu_16_d , 0xf1f8, 0xc0c0, { 54, 30, 27}}, + {m68k_op_mulu_16_ai , 0xf1f8, 0xc0d0, { 58, 34, 31}}, + {m68k_op_mulu_16_pi , 0xf1f8, 0xc0d8, { 58, 34, 31}}, + {m68k_op_mulu_16_pd , 0xf1f8, 0xc0e0, { 60, 36, 32}}, + {m68k_op_mulu_16_di , 0xf1f8, 0xc0e8, { 62, 38, 32}}, + {m68k_op_mulu_16_ix , 0xf1f8, 0xc0f0, { 64, 40, 34}}, + {m68k_op_abcd_8_rr , 0xf1f8, 0xc100, { 6, 6, 4}}, + {m68k_op_abcd_8_mm , 0xf1f8, 0xc108, { 18, 18, 16}}, + {m68k_op_and_8_re_ai , 0xf1f8, 0xc110, { 12, 12, 8}}, + {m68k_op_and_8_re_pi , 0xf1f8, 0xc118, { 12, 12, 8}}, + {m68k_op_and_8_re_pd , 0xf1f8, 0xc120, { 14, 14, 9}}, + {m68k_op_and_8_re_di , 0xf1f8, 0xc128, { 16, 16, 9}}, + {m68k_op_and_8_re_ix , 0xf1f8, 0xc130, { 18, 18, 11}}, + {m68k_op_exg_32_dd , 0xf1f8, 0xc140, { 6, 6, 2}}, + {m68k_op_exg_32_aa , 0xf1f8, 0xc148, { 6, 6, 2}}, + {m68k_op_and_16_re_ai , 0xf1f8, 0xc150, { 12, 12, 8}}, + {m68k_op_and_16_re_pi , 0xf1f8, 0xc158, { 12, 12, 8}}, + {m68k_op_and_16_re_pd , 0xf1f8, 0xc160, { 14, 14, 9}}, + {m68k_op_and_16_re_di , 0xf1f8, 0xc168, { 16, 16, 9}}, + {m68k_op_and_16_re_ix , 0xf1f8, 0xc170, { 18, 18, 11}}, + {m68k_op_exg_32_da , 0xf1f8, 0xc188, { 6, 6, 2}}, + {m68k_op_and_32_re_ai , 0xf1f8, 0xc190, { 20, 20, 8}}, + {m68k_op_and_32_re_pi , 0xf1f8, 0xc198, { 20, 20, 8}}, + {m68k_op_and_32_re_pd , 0xf1f8, 0xc1a0, { 22, 22, 9}}, + {m68k_op_and_32_re_di , 0xf1f8, 0xc1a8, { 24, 24, 9}}, + {m68k_op_and_32_re_ix , 0xf1f8, 0xc1b0, { 26, 26, 11}}, + {m68k_op_muls_16_d , 0xf1f8, 0xc1c0, { 54, 32, 27}}, + {m68k_op_muls_16_ai , 0xf1f8, 0xc1d0, { 58, 36, 31}}, + {m68k_op_muls_16_pi , 0xf1f8, 0xc1d8, { 58, 36, 31}}, + {m68k_op_muls_16_pd , 0xf1f8, 0xc1e0, { 60, 38, 32}}, + {m68k_op_muls_16_di , 0xf1f8, 0xc1e8, { 62, 40, 32}}, + {m68k_op_muls_16_ix , 0xf1f8, 0xc1f0, { 64, 42, 34}}, + {m68k_op_add_8_er_d , 0xf1f8, 0xd000, { 4, 4, 2}}, + {m68k_op_add_8_er_ai , 0xf1f8, 0xd010, { 8, 8, 6}}, + {m68k_op_add_8_er_pi , 0xf1f8, 0xd018, { 8, 8, 6}}, + {m68k_op_add_8_er_pd , 0xf1f8, 0xd020, { 10, 10, 7}}, + {m68k_op_add_8_er_di , 0xf1f8, 0xd028, { 12, 12, 7}}, + {m68k_op_add_8_er_ix , 0xf1f8, 0xd030, { 14, 14, 9}}, + {m68k_op_add_16_er_d , 0xf1f8, 0xd040, { 4, 4, 2}}, + {m68k_op_add_16_er_a , 0xf1f8, 0xd048, { 4, 4, 2}}, + {m68k_op_add_16_er_ai , 0xf1f8, 0xd050, { 8, 8, 6}}, + {m68k_op_add_16_er_pi , 0xf1f8, 0xd058, { 8, 8, 6}}, + {m68k_op_add_16_er_pd , 0xf1f8, 0xd060, { 10, 10, 7}}, + {m68k_op_add_16_er_di , 0xf1f8, 0xd068, { 12, 12, 7}}, + {m68k_op_add_16_er_ix , 0xf1f8, 0xd070, { 14, 14, 9}}, + {m68k_op_add_32_er_d , 0xf1f8, 0xd080, { 6, 6, 2}}, + {m68k_op_add_32_er_a , 0xf1f8, 0xd088, { 6, 6, 2}}, + {m68k_op_add_32_er_ai , 0xf1f8, 0xd090, { 14, 14, 6}}, + {m68k_op_add_32_er_pi , 0xf1f8, 0xd098, { 14, 14, 6}}, + {m68k_op_add_32_er_pd , 0xf1f8, 0xd0a0, { 16, 16, 7}}, + {m68k_op_add_32_er_di , 0xf1f8, 0xd0a8, { 18, 18, 7}}, + {m68k_op_add_32_er_ix , 0xf1f8, 0xd0b0, { 20, 20, 9}}, + {m68k_op_adda_16_d , 0xf1f8, 0xd0c0, { 8, 8, 2}}, + {m68k_op_adda_16_a , 0xf1f8, 0xd0c8, { 8, 8, 2}}, + {m68k_op_adda_16_ai , 0xf1f8, 0xd0d0, { 12, 12, 6}}, + {m68k_op_adda_16_pi , 0xf1f8, 0xd0d8, { 12, 12, 6}}, + {m68k_op_adda_16_pd , 0xf1f8, 0xd0e0, { 14, 14, 7}}, + {m68k_op_adda_16_di , 0xf1f8, 0xd0e8, { 16, 16, 7}}, + {m68k_op_adda_16_ix , 0xf1f8, 0xd0f0, { 18, 18, 9}}, + {m68k_op_addx_8_rr , 0xf1f8, 0xd100, { 4, 4, 2}}, + {m68k_op_addx_8_mm , 0xf1f8, 0xd108, { 18, 18, 12}}, + {m68k_op_add_8_re_ai , 0xf1f8, 0xd110, { 12, 12, 8}}, + {m68k_op_add_8_re_pi , 0xf1f8, 0xd118, { 12, 12, 8}}, + {m68k_op_add_8_re_pd , 0xf1f8, 0xd120, { 14, 14, 9}}, + {m68k_op_add_8_re_di , 0xf1f8, 0xd128, { 16, 16, 9}}, + {m68k_op_add_8_re_ix , 0xf1f8, 0xd130, { 18, 18, 11}}, + {m68k_op_addx_16_rr , 0xf1f8, 0xd140, { 4, 4, 2}}, + {m68k_op_addx_16_mm , 0xf1f8, 0xd148, { 18, 18, 12}}, + {m68k_op_add_16_re_ai , 0xf1f8, 0xd150, { 12, 12, 8}}, + {m68k_op_add_16_re_pi , 0xf1f8, 0xd158, { 12, 12, 8}}, + {m68k_op_add_16_re_pd , 0xf1f8, 0xd160, { 14, 14, 9}}, + {m68k_op_add_16_re_di , 0xf1f8, 0xd168, { 16, 16, 9}}, + {m68k_op_add_16_re_ix , 0xf1f8, 0xd170, { 18, 18, 11}}, + {m68k_op_addx_32_rr , 0xf1f8, 0xd180, { 8, 6, 2}}, + {m68k_op_addx_32_mm , 0xf1f8, 0xd188, { 30, 30, 12}}, + {m68k_op_add_32_re_ai , 0xf1f8, 0xd190, { 20, 20, 8}}, + {m68k_op_add_32_re_pi , 0xf1f8, 0xd198, { 20, 20, 8}}, + {m68k_op_add_32_re_pd , 0xf1f8, 0xd1a0, { 22, 22, 9}}, + {m68k_op_add_32_re_di , 0xf1f8, 0xd1a8, { 24, 24, 9}}, + {m68k_op_add_32_re_ix , 0xf1f8, 0xd1b0, { 26, 26, 11}}, + {m68k_op_adda_32_d , 0xf1f8, 0xd1c0, { 6, 6, 2}}, + {m68k_op_adda_32_a , 0xf1f8, 0xd1c8, { 6, 6, 2}}, + {m68k_op_adda_32_ai , 0xf1f8, 0xd1d0, { 14, 14, 6}}, + {m68k_op_adda_32_pi , 0xf1f8, 0xd1d8, { 14, 14, 6}}, + {m68k_op_adda_32_pd , 0xf1f8, 0xd1e0, { 16, 16, 7}}, + {m68k_op_adda_32_di , 0xf1f8, 0xd1e8, { 18, 18, 7}}, + {m68k_op_adda_32_ix , 0xf1f8, 0xd1f0, { 20, 20, 9}}, + {m68k_op_asr_8_s , 0xf1f8, 0xe000, { 6, 6, 6}}, + {m68k_op_lsr_8_s , 0xf1f8, 0xe008, { 6, 6, 4}}, + {m68k_op_roxr_8_s , 0xf1f8, 0xe010, { 6, 6, 12}}, + {m68k_op_ror_8_s , 0xf1f8, 0xe018, { 6, 6, 8}}, + {m68k_op_asr_8_r , 0xf1f8, 0xe020, { 6, 6, 6}}, + {m68k_op_lsr_8_r , 0xf1f8, 0xe028, { 6, 6, 6}}, + {m68k_op_roxr_8_r , 0xf1f8, 0xe030, { 6, 6, 12}}, + {m68k_op_ror_8_r , 0xf1f8, 0xe038, { 6, 6, 8}}, + {m68k_op_asr_16_s , 0xf1f8, 0xe040, { 6, 6, 6}}, + {m68k_op_lsr_16_s , 0xf1f8, 0xe048, { 6, 6, 4}}, + {m68k_op_roxr_16_s , 0xf1f8, 0xe050, { 6, 6, 12}}, + {m68k_op_ror_16_s , 0xf1f8, 0xe058, { 6, 6, 8}}, + {m68k_op_asr_16_r , 0xf1f8, 0xe060, { 6, 6, 6}}, + {m68k_op_lsr_16_r , 0xf1f8, 0xe068, { 6, 6, 6}}, + {m68k_op_roxr_16_r , 0xf1f8, 0xe070, { 6, 6, 12}}, + {m68k_op_ror_16_r , 0xf1f8, 0xe078, { 6, 6, 8}}, + {m68k_op_asr_32_s , 0xf1f8, 0xe080, { 8, 8, 6}}, + {m68k_op_lsr_32_s , 0xf1f8, 0xe088, { 8, 8, 4}}, + {m68k_op_roxr_32_s , 0xf1f8, 0xe090, { 8, 8, 12}}, + {m68k_op_ror_32_s , 0xf1f8, 0xe098, { 8, 8, 8}}, + {m68k_op_asr_32_r , 0xf1f8, 0xe0a0, { 8, 8, 6}}, + {m68k_op_lsr_32_r , 0xf1f8, 0xe0a8, { 8, 8, 6}}, + {m68k_op_roxr_32_r , 0xf1f8, 0xe0b0, { 8, 8, 12}}, + {m68k_op_ror_32_r , 0xf1f8, 0xe0b8, { 8, 8, 8}}, + {m68k_op_asl_8_s , 0xf1f8, 0xe100, { 6, 6, 8}}, + {m68k_op_lsl_8_s , 0xf1f8, 0xe108, { 6, 6, 4}}, + {m68k_op_roxl_8_s , 0xf1f8, 0xe110, { 6, 6, 12}}, + {m68k_op_rol_8_s , 0xf1f8, 0xe118, { 6, 6, 8}}, + {m68k_op_asl_8_r , 0xf1f8, 0xe120, { 6, 6, 8}}, + {m68k_op_lsl_8_r , 0xf1f8, 0xe128, { 6, 6, 6}}, + {m68k_op_roxl_8_r , 0xf1f8, 0xe130, { 6, 6, 12}}, + {m68k_op_rol_8_r , 0xf1f8, 0xe138, { 6, 6, 8}}, + {m68k_op_asl_16_s , 0xf1f8, 0xe140, { 6, 6, 8}}, + {m68k_op_lsl_16_s , 0xf1f8, 0xe148, { 6, 6, 4}}, + {m68k_op_roxl_16_s , 0xf1f8, 0xe150, { 6, 6, 12}}, + {m68k_op_rol_16_s , 0xf1f8, 0xe158, { 6, 6, 8}}, + {m68k_op_asl_16_r , 0xf1f8, 0xe160, { 6, 6, 8}}, + {m68k_op_lsl_16_r , 0xf1f8, 0xe168, { 6, 6, 6}}, + {m68k_op_roxl_16_r , 0xf1f8, 0xe170, { 6, 6, 12}}, + {m68k_op_rol_16_r , 0xf1f8, 0xe178, { 6, 6, 8}}, + {m68k_op_asl_32_s , 0xf1f8, 0xe180, { 8, 8, 8}}, + {m68k_op_lsl_32_s , 0xf1f8, 0xe188, { 8, 8, 4}}, + {m68k_op_roxl_32_s , 0xf1f8, 0xe190, { 8, 8, 12}}, + {m68k_op_rol_32_s , 0xf1f8, 0xe198, { 8, 8, 8}}, + {m68k_op_asl_32_r , 0xf1f8, 0xe1a0, { 8, 8, 8}}, + {m68k_op_lsl_32_r , 0xf1f8, 0xe1a8, { 8, 8, 6}}, + {m68k_op_roxl_32_r , 0xf1f8, 0xe1b0, { 8, 8, 12}}, + {m68k_op_rol_32_r , 0xf1f8, 0xe1b8, { 8, 8, 8}}, + {m68k_op_cpdbcc_32 , 0xf1f8, 0xf048, { 0, 0, 4}}, + {m68k_op_cptrapcc_32 , 0xf1f8, 0xf078, { 0, 0, 4}}, + {m68k_op_rtm_32 , 0xfff0, 0x06c0, { 0, 0, 19}}, + {m68k_op_trap , 0xfff0, 0x4e40, { 4, 4, 4}}, + {m68k_op_btst_8_r_pi7 , 0xf1ff, 0x011f, { 8, 8, 8}}, + {m68k_op_btst_8_r_pd7 , 0xf1ff, 0x0127, { 10, 10, 9}}, + {m68k_op_btst_8_r_aw , 0xf1ff, 0x0138, { 12, 12, 8}}, + {m68k_op_btst_8_r_al , 0xf1ff, 0x0139, { 16, 16, 8}}, + {m68k_op_btst_8_r_pcdi , 0xf1ff, 0x013a, { 12, 12, 9}}, + {m68k_op_btst_8_r_pcix , 0xf1ff, 0x013b, { 14, 14, 11}}, + {m68k_op_btst_8_r_i , 0xf1ff, 0x013c, { 8, 8, 6}}, + {m68k_op_bchg_8_r_pi7 , 0xf1ff, 0x015f, { 12, 12, 8}}, + {m68k_op_bchg_8_r_pd7 , 0xf1ff, 0x0167, { 14, 14, 9}}, + {m68k_op_bchg_8_r_aw , 0xf1ff, 0x0178, { 16, 16, 8}}, + {m68k_op_bchg_8_r_al , 0xf1ff, 0x0179, { 20, 20, 8}}, + {m68k_op_bclr_8_r_pi7 , 0xf1ff, 0x019f, { 12, 14, 8}}, + {m68k_op_bclr_8_r_pd7 , 0xf1ff, 0x01a7, { 14, 16, 9}}, + {m68k_op_bclr_8_r_aw , 0xf1ff, 0x01b8, { 16, 18, 8}}, + {m68k_op_bclr_8_r_al , 0xf1ff, 0x01b9, { 20, 22, 8}}, + {m68k_op_bset_8_r_pi7 , 0xf1ff, 0x01df, { 12, 12, 8}}, + {m68k_op_bset_8_r_pd7 , 0xf1ff, 0x01e7, { 14, 14, 9}}, + {m68k_op_bset_8_r_aw , 0xf1ff, 0x01f8, { 16, 16, 8}}, + {m68k_op_bset_8_r_al , 0xf1ff, 0x01f9, { 20, 20, 8}}, + {m68k_op_move_8_d_pi7 , 0xf1ff, 0x101f, { 8, 8, 6}}, + {m68k_op_move_8_d_pd7 , 0xf1ff, 0x1027, { 10, 10, 7}}, + {m68k_op_move_8_d_aw , 0xf1ff, 0x1038, { 12, 12, 6}}, + {m68k_op_move_8_d_al , 0xf1ff, 0x1039, { 16, 16, 6}}, + {m68k_op_move_8_d_pcdi , 0xf1ff, 0x103a, { 12, 12, 7}}, + {m68k_op_move_8_d_pcix , 0xf1ff, 0x103b, { 14, 14, 9}}, + {m68k_op_move_8_d_i , 0xf1ff, 0x103c, { 8, 8, 4}}, + {m68k_op_move_8_ai_pi7 , 0xf1ff, 0x109f, { 12, 12, 8}}, + {m68k_op_move_8_ai_pd7 , 0xf1ff, 0x10a7, { 14, 14, 9}}, + {m68k_op_move_8_ai_aw , 0xf1ff, 0x10b8, { 16, 16, 8}}, + {m68k_op_move_8_ai_al , 0xf1ff, 0x10b9, { 20, 20, 8}}, + {m68k_op_move_8_ai_pcdi , 0xf1ff, 0x10ba, { 16, 16, 9}}, + {m68k_op_move_8_ai_pcix , 0xf1ff, 0x10bb, { 18, 18, 11}}, + {m68k_op_move_8_ai_i , 0xf1ff, 0x10bc, { 12, 12, 6}}, + {m68k_op_move_8_pi_pi7 , 0xf1ff, 0x10df, { 12, 12, 8}}, + {m68k_op_move_8_pi_pd7 , 0xf1ff, 0x10e7, { 14, 14, 9}}, + {m68k_op_move_8_pi_aw , 0xf1ff, 0x10f8, { 16, 16, 8}}, + {m68k_op_move_8_pi_al , 0xf1ff, 0x10f9, { 20, 20, 8}}, + {m68k_op_move_8_pi_pcdi , 0xf1ff, 0x10fa, { 16, 16, 9}}, + {m68k_op_move_8_pi_pcix , 0xf1ff, 0x10fb, { 18, 18, 11}}, + {m68k_op_move_8_pi_i , 0xf1ff, 0x10fc, { 12, 12, 6}}, + {m68k_op_move_8_pd_pi7 , 0xf1ff, 0x111f, { 12, 12, 9}}, + {m68k_op_move_8_pd_pd7 , 0xf1ff, 0x1127, { 14, 14, 10}}, + {m68k_op_move_8_pd_aw , 0xf1ff, 0x1138, { 16, 16, 9}}, + {m68k_op_move_8_pd_al , 0xf1ff, 0x1139, { 20, 20, 9}}, + {m68k_op_move_8_pd_pcdi , 0xf1ff, 0x113a, { 16, 16, 10}}, + {m68k_op_move_8_pd_pcix , 0xf1ff, 0x113b, { 18, 18, 12}}, + {m68k_op_move_8_pd_i , 0xf1ff, 0x113c, { 12, 12, 7}}, + {m68k_op_move_8_di_pi7 , 0xf1ff, 0x115f, { 16, 16, 9}}, + {m68k_op_move_8_di_pd7 , 0xf1ff, 0x1167, { 18, 18, 10}}, + {m68k_op_move_8_di_aw , 0xf1ff, 0x1178, { 20, 20, 9}}, + {m68k_op_move_8_di_al , 0xf1ff, 0x1179, { 24, 24, 9}}, + {m68k_op_move_8_di_pcdi , 0xf1ff, 0x117a, { 20, 20, 10}}, + {m68k_op_move_8_di_pcix , 0xf1ff, 0x117b, { 22, 22, 12}}, + {m68k_op_move_8_di_i , 0xf1ff, 0x117c, { 16, 16, 7}}, + {m68k_op_move_8_ix_pi7 , 0xf1ff, 0x119f, { 18, 18, 11}}, + {m68k_op_move_8_ix_pd7 , 0xf1ff, 0x11a7, { 20, 20, 12}}, + {m68k_op_move_8_ix_aw , 0xf1ff, 0x11b8, { 22, 22, 11}}, + {m68k_op_move_8_ix_al , 0xf1ff, 0x11b9, { 26, 26, 11}}, + {m68k_op_move_8_ix_pcdi , 0xf1ff, 0x11ba, { 22, 22, 12}}, + {m68k_op_move_8_ix_pcix , 0xf1ff, 0x11bb, { 24, 24, 14}}, + {m68k_op_move_8_ix_i , 0xf1ff, 0x11bc, { 18, 18, 9}}, + {m68k_op_move_32_d_aw , 0xf1ff, 0x2038, { 16, 16, 6}}, + {m68k_op_move_32_d_al , 0xf1ff, 0x2039, { 20, 20, 6}}, + {m68k_op_move_32_d_pcdi , 0xf1ff, 0x203a, { 16, 16, 7}}, + {m68k_op_move_32_d_pcix , 0xf1ff, 0x203b, { 18, 18, 9}}, + {m68k_op_move_32_d_i , 0xf1ff, 0x203c, { 12, 12, 6}}, + {m68k_op_movea_32_aw , 0xf1ff, 0x2078, { 16, 16, 6}}, + {m68k_op_movea_32_al , 0xf1ff, 0x2079, { 20, 20, 6}}, + {m68k_op_movea_32_pcdi , 0xf1ff, 0x207a, { 16, 16, 7}}, + {m68k_op_movea_32_pcix , 0xf1ff, 0x207b, { 18, 18, 9}}, + {m68k_op_movea_32_i , 0xf1ff, 0x207c, { 12, 12, 6}}, + {m68k_op_move_32_ai_aw , 0xf1ff, 0x20b8, { 24, 24, 8}}, + {m68k_op_move_32_ai_al , 0xf1ff, 0x20b9, { 28, 28, 8}}, + {m68k_op_move_32_ai_pcdi , 0xf1ff, 0x20ba, { 24, 24, 9}}, + {m68k_op_move_32_ai_pcix , 0xf1ff, 0x20bb, { 26, 26, 11}}, + {m68k_op_move_32_ai_i , 0xf1ff, 0x20bc, { 20, 20, 8}}, + {m68k_op_move_32_pi_aw , 0xf1ff, 0x20f8, { 24, 24, 8}}, + {m68k_op_move_32_pi_al , 0xf1ff, 0x20f9, { 28, 28, 8}}, + {m68k_op_move_32_pi_pcdi , 0xf1ff, 0x20fa, { 24, 24, 9}}, + {m68k_op_move_32_pi_pcix , 0xf1ff, 0x20fb, { 26, 26, 11}}, + {m68k_op_move_32_pi_i , 0xf1ff, 0x20fc, { 20, 20, 8}}, + {m68k_op_move_32_pd_aw , 0xf1ff, 0x2138, { 24, 26, 9}}, + {m68k_op_move_32_pd_al , 0xf1ff, 0x2139, { 28, 30, 9}}, + {m68k_op_move_32_pd_pcdi , 0xf1ff, 0x213a, { 24, 26, 10}}, + {m68k_op_move_32_pd_pcix , 0xf1ff, 0x213b, { 26, 28, 12}}, + {m68k_op_move_32_pd_i , 0xf1ff, 0x213c, { 20, 22, 9}}, + {m68k_op_move_32_di_aw , 0xf1ff, 0x2178, { 28, 28, 9}}, + {m68k_op_move_32_di_al , 0xf1ff, 0x2179, { 32, 32, 9}}, + {m68k_op_move_32_di_pcdi , 0xf1ff, 0x217a, { 28, 28, 10}}, + {m68k_op_move_32_di_pcix , 0xf1ff, 0x217b, { 30, 30, 12}}, + {m68k_op_move_32_di_i , 0xf1ff, 0x217c, { 24, 24, 9}}, + {m68k_op_move_32_ix_aw , 0xf1ff, 0x21b8, { 30, 30, 11}}, + {m68k_op_move_32_ix_al , 0xf1ff, 0x21b9, { 34, 34, 11}}, + {m68k_op_move_32_ix_pcdi , 0xf1ff, 0x21ba, { 30, 30, 12}}, + {m68k_op_move_32_ix_pcix , 0xf1ff, 0x21bb, { 32, 32, 14}}, + {m68k_op_move_32_ix_i , 0xf1ff, 0x21bc, { 26, 26, 11}}, + {m68k_op_move_16_d_aw , 0xf1ff, 0x3038, { 12, 12, 6}}, + {m68k_op_move_16_d_al , 0xf1ff, 0x3039, { 16, 16, 6}}, + {m68k_op_move_16_d_pcdi , 0xf1ff, 0x303a, { 12, 12, 7}}, + {m68k_op_move_16_d_pcix , 0xf1ff, 0x303b, { 14, 14, 9}}, + {m68k_op_move_16_d_i , 0xf1ff, 0x303c, { 8, 8, 4}}, + {m68k_op_movea_16_aw , 0xf1ff, 0x3078, { 12, 12, 6}}, + {m68k_op_movea_16_al , 0xf1ff, 0x3079, { 16, 16, 6}}, + {m68k_op_movea_16_pcdi , 0xf1ff, 0x307a, { 12, 12, 7}}, + {m68k_op_movea_16_pcix , 0xf1ff, 0x307b, { 14, 14, 9}}, + {m68k_op_movea_16_i , 0xf1ff, 0x307c, { 8, 8, 4}}, + {m68k_op_move_16_ai_aw , 0xf1ff, 0x30b8, { 16, 16, 8}}, + {m68k_op_move_16_ai_al , 0xf1ff, 0x30b9, { 20, 20, 8}}, + {m68k_op_move_16_ai_pcdi , 0xf1ff, 0x30ba, { 16, 16, 9}}, + {m68k_op_move_16_ai_pcix , 0xf1ff, 0x30bb, { 18, 18, 11}}, + {m68k_op_move_16_ai_i , 0xf1ff, 0x30bc, { 12, 12, 6}}, + {m68k_op_move_16_pi_aw , 0xf1ff, 0x30f8, { 16, 16, 8}}, + {m68k_op_move_16_pi_al , 0xf1ff, 0x30f9, { 20, 20, 8}}, + {m68k_op_move_16_pi_pcdi , 0xf1ff, 0x30fa, { 16, 16, 9}}, + {m68k_op_move_16_pi_pcix , 0xf1ff, 0x30fb, { 18, 18, 11}}, + {m68k_op_move_16_pi_i , 0xf1ff, 0x30fc, { 12, 12, 6}}, + {m68k_op_move_16_pd_aw , 0xf1ff, 0x3138, { 16, 16, 9}}, + {m68k_op_move_16_pd_al , 0xf1ff, 0x3139, { 20, 20, 9}}, + {m68k_op_move_16_pd_pcdi , 0xf1ff, 0x313a, { 16, 16, 10}}, + {m68k_op_move_16_pd_pcix , 0xf1ff, 0x313b, { 18, 18, 12}}, + {m68k_op_move_16_pd_i , 0xf1ff, 0x313c, { 12, 12, 7}}, + {m68k_op_move_16_di_aw , 0xf1ff, 0x3178, { 20, 20, 9}}, + {m68k_op_move_16_di_al , 0xf1ff, 0x3179, { 24, 24, 9}}, + {m68k_op_move_16_di_pcdi , 0xf1ff, 0x317a, { 20, 20, 10}}, + {m68k_op_move_16_di_pcix , 0xf1ff, 0x317b, { 22, 22, 12}}, + {m68k_op_move_16_di_i , 0xf1ff, 0x317c, { 16, 16, 7}}, + {m68k_op_move_16_ix_aw , 0xf1ff, 0x31b8, { 22, 22, 11}}, + {m68k_op_move_16_ix_al , 0xf1ff, 0x31b9, { 26, 26, 11}}, + {m68k_op_move_16_ix_pcdi , 0xf1ff, 0x31ba, { 22, 22, 12}}, + {m68k_op_move_16_ix_pcix , 0xf1ff, 0x31bb, { 24, 24, 14}}, + {m68k_op_move_16_ix_i , 0xf1ff, 0x31bc, { 18, 18, 9}}, + {m68k_op_chk_32_aw , 0xf1ff, 0x4138, { 0, 0, 12}}, + {m68k_op_chk_32_al , 0xf1ff, 0x4139, { 0, 0, 12}}, + {m68k_op_chk_32_pcdi , 0xf1ff, 0x413a, { 0, 0, 13}}, + {m68k_op_chk_32_pcix , 0xf1ff, 0x413b, { 0, 0, 15}}, + {m68k_op_chk_32_i , 0xf1ff, 0x413c, { 0, 0, 12}}, + {m68k_op_chk_16_aw , 0xf1ff, 0x41b8, { 18, 16, 12}}, + {m68k_op_chk_16_al , 0xf1ff, 0x41b9, { 22, 20, 12}}, + {m68k_op_chk_16_pcdi , 0xf1ff, 0x41ba, { 18, 16, 13}}, + {m68k_op_chk_16_pcix , 0xf1ff, 0x41bb, { 20, 18, 15}}, + {m68k_op_chk_16_i , 0xf1ff, 0x41bc, { 14, 12, 10}}, + {m68k_op_lea_32_aw , 0xf1ff, 0x41f8, { 8, 8, 6}}, + {m68k_op_lea_32_al , 0xf1ff, 0x41f9, { 12, 12, 6}}, + {m68k_op_lea_32_pcdi , 0xf1ff, 0x41fa, { 8, 8, 7}}, + {m68k_op_lea_32_pcix , 0xf1ff, 0x41fb, { 12, 12, 9}}, + {m68k_op_addq_8_pi7 , 0xf1ff, 0x501f, { 12, 12, 8}}, + {m68k_op_addq_8_pd7 , 0xf1ff, 0x5027, { 14, 14, 9}}, + {m68k_op_addq_8_aw , 0xf1ff, 0x5038, { 16, 16, 8}}, + {m68k_op_addq_8_al , 0xf1ff, 0x5039, { 20, 20, 8}}, + {m68k_op_addq_16_aw , 0xf1ff, 0x5078, { 16, 16, 8}}, + {m68k_op_addq_16_al , 0xf1ff, 0x5079, { 20, 20, 8}}, + {m68k_op_addq_32_aw , 0xf1ff, 0x50b8, { 24, 24, 8}}, + {m68k_op_addq_32_al , 0xf1ff, 0x50b9, { 28, 28, 8}}, + {m68k_op_subq_8_pi7 , 0xf1ff, 0x511f, { 12, 12, 8}}, + {m68k_op_subq_8_pd7 , 0xf1ff, 0x5127, { 14, 14, 9}}, + {m68k_op_subq_8_aw , 0xf1ff, 0x5138, { 16, 16, 8}}, + {m68k_op_subq_8_al , 0xf1ff, 0x5139, { 20, 20, 8}}, + {m68k_op_subq_16_aw , 0xf1ff, 0x5178, { 16, 16, 8}}, + {m68k_op_subq_16_al , 0xf1ff, 0x5179, { 20, 20, 8}}, + {m68k_op_subq_32_aw , 0xf1ff, 0x51b8, { 24, 24, 8}}, + {m68k_op_subq_32_al , 0xf1ff, 0x51b9, { 28, 28, 8}}, + {m68k_op_or_8_er_pi7 , 0xf1ff, 0x801f, { 8, 8, 6}}, + {m68k_op_or_8_er_pd7 , 0xf1ff, 0x8027, { 10, 10, 7}}, + {m68k_op_or_8_er_aw , 0xf1ff, 0x8038, { 12, 12, 6}}, + {m68k_op_or_8_er_al , 0xf1ff, 0x8039, { 16, 16, 6}}, + {m68k_op_or_8_er_pcdi , 0xf1ff, 0x803a, { 12, 12, 7}}, + {m68k_op_or_8_er_pcix , 0xf1ff, 0x803b, { 14, 14, 9}}, + {m68k_op_or_8_er_i , 0xf1ff, 0x803c, { 10, 8, 4}}, + {m68k_op_or_16_er_aw , 0xf1ff, 0x8078, { 12, 12, 6}}, + {m68k_op_or_16_er_al , 0xf1ff, 0x8079, { 16, 16, 6}}, + {m68k_op_or_16_er_pcdi , 0xf1ff, 0x807a, { 12, 12, 7}}, + {m68k_op_or_16_er_pcix , 0xf1ff, 0x807b, { 14, 14, 9}}, + {m68k_op_or_16_er_i , 0xf1ff, 0x807c, { 10, 8, 4}}, + {m68k_op_or_32_er_aw , 0xf1ff, 0x80b8, { 18, 18, 6}}, + {m68k_op_or_32_er_al , 0xf1ff, 0x80b9, { 22, 22, 6}}, + {m68k_op_or_32_er_pcdi , 0xf1ff, 0x80ba, { 18, 18, 7}}, + {m68k_op_or_32_er_pcix , 0xf1ff, 0x80bb, { 20, 20, 9}}, + {m68k_op_or_32_er_i , 0xf1ff, 0x80bc, { 16, 14, 6}}, + {m68k_op_divu_16_aw , 0xf1ff, 0x80f8, {148, 116, 48}}, + {m68k_op_divu_16_al , 0xf1ff, 0x80f9, {152, 120, 48}}, + {m68k_op_divu_16_pcdi , 0xf1ff, 0x80fa, {148, 116, 49}}, + {m68k_op_divu_16_pcix , 0xf1ff, 0x80fb, {150, 118, 51}}, + {m68k_op_divu_16_i , 0xf1ff, 0x80fc, {144, 112, 46}}, + {m68k_op_sbcd_8_mm_ay7 , 0xf1ff, 0x810f, { 18, 18, 16}}, + {m68k_op_or_8_re_pi7 , 0xf1ff, 0x811f, { 12, 12, 8}}, + {m68k_op_or_8_re_pd7 , 0xf1ff, 0x8127, { 14, 14, 9}}, + {m68k_op_or_8_re_aw , 0xf1ff, 0x8138, { 16, 16, 8}}, + {m68k_op_or_8_re_al , 0xf1ff, 0x8139, { 20, 20, 8}}, + {m68k_op_pack_16_mm_ay7 , 0xf1ff, 0x814f, { 0, 0, 13}}, + {m68k_op_or_16_re_aw , 0xf1ff, 0x8178, { 16, 16, 8}}, + {m68k_op_or_16_re_al , 0xf1ff, 0x8179, { 20, 20, 8}}, + {m68k_op_unpk_16_mm_ay7 , 0xf1ff, 0x818f, { 0, 0, 13}}, + {m68k_op_or_32_re_aw , 0xf1ff, 0x81b8, { 24, 24, 8}}, + {m68k_op_or_32_re_al , 0xf1ff, 0x81b9, { 28, 28, 8}}, + {m68k_op_divs_16_aw , 0xf1ff, 0x81f8, {166, 130, 60}}, + {m68k_op_divs_16_al , 0xf1ff, 0x81f9, {170, 134, 60}}, + {m68k_op_divs_16_pcdi , 0xf1ff, 0x81fa, {166, 130, 61}}, + {m68k_op_divs_16_pcix , 0xf1ff, 0x81fb, {168, 132, 63}}, + {m68k_op_divs_16_i , 0xf1ff, 0x81fc, {162, 126, 58}}, + {m68k_op_sub_8_er_pi7 , 0xf1ff, 0x901f, { 8, 8, 6}}, + {m68k_op_sub_8_er_pd7 , 0xf1ff, 0x9027, { 10, 10, 7}}, + {m68k_op_sub_8_er_aw , 0xf1ff, 0x9038, { 12, 12, 6}}, + {m68k_op_sub_8_er_al , 0xf1ff, 0x9039, { 16, 16, 6}}, + {m68k_op_sub_8_er_pcdi , 0xf1ff, 0x903a, { 12, 12, 7}}, + {m68k_op_sub_8_er_pcix , 0xf1ff, 0x903b, { 14, 14, 9}}, + {m68k_op_sub_8_er_i , 0xf1ff, 0x903c, { 10, 8, 4}}, + {m68k_op_sub_16_er_aw , 0xf1ff, 0x9078, { 12, 12, 6}}, + {m68k_op_sub_16_er_al , 0xf1ff, 0x9079, { 16, 16, 6}}, + {m68k_op_sub_16_er_pcdi , 0xf1ff, 0x907a, { 12, 12, 7}}, + {m68k_op_sub_16_er_pcix , 0xf1ff, 0x907b, { 14, 14, 9}}, + {m68k_op_sub_16_er_i , 0xf1ff, 0x907c, { 10, 8, 4}}, + {m68k_op_sub_32_er_aw , 0xf1ff, 0x90b8, { 18, 18, 6}}, + {m68k_op_sub_32_er_al , 0xf1ff, 0x90b9, { 22, 22, 6}}, + {m68k_op_sub_32_er_pcdi , 0xf1ff, 0x90ba, { 18, 18, 7}}, + {m68k_op_sub_32_er_pcix , 0xf1ff, 0x90bb, { 20, 20, 9}}, + {m68k_op_sub_32_er_i , 0xf1ff, 0x90bc, { 16, 14, 6}}, + {m68k_op_suba_16_aw , 0xf1ff, 0x90f8, { 16, 16, 6}}, + {m68k_op_suba_16_al , 0xf1ff, 0x90f9, { 20, 20, 6}}, + {m68k_op_suba_16_pcdi , 0xf1ff, 0x90fa, { 16, 16, 7}}, + {m68k_op_suba_16_pcix , 0xf1ff, 0x90fb, { 18, 18, 9}}, + {m68k_op_suba_16_i , 0xf1ff, 0x90fc, { 14, 12, 4}}, + {m68k_op_subx_8_mm_ay7 , 0xf1ff, 0x910f, { 18, 18, 12}}, + {m68k_op_sub_8_re_pi7 , 0xf1ff, 0x911f, { 12, 12, 8}}, + {m68k_op_sub_8_re_pd7 , 0xf1ff, 0x9127, { 14, 14, 9}}, + {m68k_op_sub_8_re_aw , 0xf1ff, 0x9138, { 16, 16, 8}}, + {m68k_op_sub_8_re_al , 0xf1ff, 0x9139, { 20, 20, 8}}, + {m68k_op_sub_16_re_aw , 0xf1ff, 0x9178, { 16, 16, 8}}, + {m68k_op_sub_16_re_al , 0xf1ff, 0x9179, { 20, 20, 8}}, + {m68k_op_sub_32_re_aw , 0xf1ff, 0x91b8, { 24, 24, 8}}, + {m68k_op_sub_32_re_al , 0xf1ff, 0x91b9, { 28, 28, 8}}, + {m68k_op_suba_32_aw , 0xf1ff, 0x91f8, { 18, 18, 6}}, + {m68k_op_suba_32_al , 0xf1ff, 0x91f9, { 22, 22, 6}}, + {m68k_op_suba_32_pcdi , 0xf1ff, 0x91fa, { 18, 18, 7}}, + {m68k_op_suba_32_pcix , 0xf1ff, 0x91fb, { 20, 20, 9}}, + {m68k_op_suba_32_i , 0xf1ff, 0x91fc, { 16, 14, 6}}, + {m68k_op_cmp_8_pi7 , 0xf1ff, 0xb01f, { 8, 8, 6}}, + {m68k_op_cmp_8_pd7 , 0xf1ff, 0xb027, { 10, 10, 7}}, + {m68k_op_cmp_8_aw , 0xf1ff, 0xb038, { 12, 12, 6}}, + {m68k_op_cmp_8_al , 0xf1ff, 0xb039, { 16, 16, 6}}, + {m68k_op_cmp_8_pcdi , 0xf1ff, 0xb03a, { 12, 12, 7}}, + {m68k_op_cmp_8_pcix , 0xf1ff, 0xb03b, { 14, 14, 9}}, + {m68k_op_cmp_8_i , 0xf1ff, 0xb03c, { 8, 8, 4}}, + {m68k_op_cmp_16_aw , 0xf1ff, 0xb078, { 12, 12, 6}}, + {m68k_op_cmp_16_al , 0xf1ff, 0xb079, { 16, 16, 6}}, + {m68k_op_cmp_16_pcdi , 0xf1ff, 0xb07a, { 12, 12, 7}}, + {m68k_op_cmp_16_pcix , 0xf1ff, 0xb07b, { 14, 14, 9}}, + {m68k_op_cmp_16_i , 0xf1ff, 0xb07c, { 8, 8, 4}}, + {m68k_op_cmp_32_aw , 0xf1ff, 0xb0b8, { 18, 18, 6}}, + {m68k_op_cmp_32_al , 0xf1ff, 0xb0b9, { 22, 22, 6}}, + {m68k_op_cmp_32_pcdi , 0xf1ff, 0xb0ba, { 18, 18, 7}}, + {m68k_op_cmp_32_pcix , 0xf1ff, 0xb0bb, { 20, 20, 9}}, + {m68k_op_cmp_32_i , 0xf1ff, 0xb0bc, { 14, 14, 6}}, + {m68k_op_cmpa_16_aw , 0xf1ff, 0xb0f8, { 14, 14, 8}}, + {m68k_op_cmpa_16_al , 0xf1ff, 0xb0f9, { 18, 18, 8}}, + {m68k_op_cmpa_16_pcdi , 0xf1ff, 0xb0fa, { 14, 14, 9}}, + {m68k_op_cmpa_16_pcix , 0xf1ff, 0xb0fb, { 16, 16, 11}}, + {m68k_op_cmpa_16_i , 0xf1ff, 0xb0fc, { 10, 10, 6}}, + {m68k_op_cmpm_8_ay7 , 0xf1ff, 0xb10f, { 12, 12, 9}}, + {m68k_op_eor_8_pi7 , 0xf1ff, 0xb11f, { 12, 12, 8}}, + {m68k_op_eor_8_pd7 , 0xf1ff, 0xb127, { 14, 14, 9}}, + {m68k_op_eor_8_aw , 0xf1ff, 0xb138, { 16, 16, 8}}, + {m68k_op_eor_8_al , 0xf1ff, 0xb139, { 20, 20, 8}}, + {m68k_op_eor_16_aw , 0xf1ff, 0xb178, { 16, 16, 8}}, + {m68k_op_eor_16_al , 0xf1ff, 0xb179, { 20, 20, 8}}, + {m68k_op_eor_32_aw , 0xf1ff, 0xb1b8, { 24, 24, 8}}, + {m68k_op_eor_32_al , 0xf1ff, 0xb1b9, { 28, 28, 8}}, + {m68k_op_cmpa_32_aw , 0xf1ff, 0xb1f8, { 18, 18, 8}}, + {m68k_op_cmpa_32_al , 0xf1ff, 0xb1f9, { 22, 22, 8}}, + {m68k_op_cmpa_32_pcdi , 0xf1ff, 0xb1fa, { 18, 18, 9}}, + {m68k_op_cmpa_32_pcix , 0xf1ff, 0xb1fb, { 20, 20, 11}}, + {m68k_op_cmpa_32_i , 0xf1ff, 0xb1fc, { 14, 14, 8}}, + {m68k_op_and_8_er_pi7 , 0xf1ff, 0xc01f, { 8, 8, 6}}, + {m68k_op_and_8_er_pd7 , 0xf1ff, 0xc027, { 10, 10, 7}}, + {m68k_op_and_8_er_aw , 0xf1ff, 0xc038, { 12, 12, 6}}, + {m68k_op_and_8_er_al , 0xf1ff, 0xc039, { 16, 16, 6}}, + {m68k_op_and_8_er_pcdi , 0xf1ff, 0xc03a, { 12, 12, 7}}, + {m68k_op_and_8_er_pcix , 0xf1ff, 0xc03b, { 14, 14, 9}}, + {m68k_op_and_8_er_i , 0xf1ff, 0xc03c, { 10, 8, 4}}, + {m68k_op_and_16_er_aw , 0xf1ff, 0xc078, { 12, 12, 6}}, + {m68k_op_and_16_er_al , 0xf1ff, 0xc079, { 16, 16, 6}}, + {m68k_op_and_16_er_pcdi , 0xf1ff, 0xc07a, { 12, 12, 7}}, + {m68k_op_and_16_er_pcix , 0xf1ff, 0xc07b, { 14, 14, 9}}, + {m68k_op_and_16_er_i , 0xf1ff, 0xc07c, { 10, 8, 4}}, + {m68k_op_and_32_er_aw , 0xf1ff, 0xc0b8, { 18, 18, 6}}, + {m68k_op_and_32_er_al , 0xf1ff, 0xc0b9, { 22, 22, 6}}, + {m68k_op_and_32_er_pcdi , 0xf1ff, 0xc0ba, { 18, 18, 7}}, + {m68k_op_and_32_er_pcix , 0xf1ff, 0xc0bb, { 20, 20, 9}}, + {m68k_op_and_32_er_i , 0xf1ff, 0xc0bc, { 16, 14, 6}}, + {m68k_op_mulu_16_aw , 0xf1ff, 0xc0f8, { 62, 38, 31}}, + {m68k_op_mulu_16_al , 0xf1ff, 0xc0f9, { 66, 42, 31}}, + {m68k_op_mulu_16_pcdi , 0xf1ff, 0xc0fa, { 62, 38, 32}}, + {m68k_op_mulu_16_pcix , 0xf1ff, 0xc0fb, { 64, 40, 34}}, + {m68k_op_mulu_16_i , 0xf1ff, 0xc0fc, { 58, 34, 29}}, + {m68k_op_abcd_8_mm_ay7 , 0xf1ff, 0xc10f, { 18, 18, 16}}, + {m68k_op_and_8_re_pi7 , 0xf1ff, 0xc11f, { 12, 12, 8}}, + {m68k_op_and_8_re_pd7 , 0xf1ff, 0xc127, { 14, 14, 9}}, + {m68k_op_and_8_re_aw , 0xf1ff, 0xc138, { 16, 16, 8}}, + {m68k_op_and_8_re_al , 0xf1ff, 0xc139, { 20, 20, 8}}, + {m68k_op_and_16_re_aw , 0xf1ff, 0xc178, { 16, 16, 8}}, + {m68k_op_and_16_re_al , 0xf1ff, 0xc179, { 20, 20, 8}}, + {m68k_op_and_32_re_aw , 0xf1ff, 0xc1b8, { 24, 24, 8}}, + {m68k_op_and_32_re_al , 0xf1ff, 0xc1b9, { 28, 28, 8}}, + {m68k_op_muls_16_aw , 0xf1ff, 0xc1f8, { 62, 40, 31}}, + {m68k_op_muls_16_al , 0xf1ff, 0xc1f9, { 66, 44, 31}}, + {m68k_op_muls_16_pcdi , 0xf1ff, 0xc1fa, { 62, 40, 32}}, + {m68k_op_muls_16_pcix , 0xf1ff, 0xc1fb, { 64, 42, 34}}, + {m68k_op_muls_16_i , 0xf1ff, 0xc1fc, { 58, 36, 29}}, + {m68k_op_add_8_er_pi7 , 0xf1ff, 0xd01f, { 8, 8, 6}}, + {m68k_op_add_8_er_pd7 , 0xf1ff, 0xd027, { 10, 10, 7}}, + {m68k_op_add_8_er_aw , 0xf1ff, 0xd038, { 12, 12, 6}}, + {m68k_op_add_8_er_al , 0xf1ff, 0xd039, { 16, 16, 6}}, + {m68k_op_add_8_er_pcdi , 0xf1ff, 0xd03a, { 12, 12, 7}}, + {m68k_op_add_8_er_pcix , 0xf1ff, 0xd03b, { 14, 14, 9}}, + {m68k_op_add_8_er_i , 0xf1ff, 0xd03c, { 10, 8, 4}}, + {m68k_op_add_16_er_aw , 0xf1ff, 0xd078, { 12, 12, 6}}, + {m68k_op_add_16_er_al , 0xf1ff, 0xd079, { 16, 16, 6}}, + {m68k_op_add_16_er_pcdi , 0xf1ff, 0xd07a, { 12, 12, 7}}, + {m68k_op_add_16_er_pcix , 0xf1ff, 0xd07b, { 14, 14, 9}}, + {m68k_op_add_16_er_i , 0xf1ff, 0xd07c, { 10, 8, 4}}, + {m68k_op_add_32_er_aw , 0xf1ff, 0xd0b8, { 18, 18, 6}}, + {m68k_op_add_32_er_al , 0xf1ff, 0xd0b9, { 22, 22, 6}}, + {m68k_op_add_32_er_pcdi , 0xf1ff, 0xd0ba, { 18, 18, 7}}, + {m68k_op_add_32_er_pcix , 0xf1ff, 0xd0bb, { 20, 20, 9}}, + {m68k_op_add_32_er_i , 0xf1ff, 0xd0bc, { 16, 14, 6}}, + {m68k_op_adda_16_aw , 0xf1ff, 0xd0f8, { 16, 16, 6}}, + {m68k_op_adda_16_al , 0xf1ff, 0xd0f9, { 20, 20, 6}}, + {m68k_op_adda_16_pcdi , 0xf1ff, 0xd0fa, { 16, 16, 7}}, + {m68k_op_adda_16_pcix , 0xf1ff, 0xd0fb, { 18, 18, 9}}, + {m68k_op_adda_16_i , 0xf1ff, 0xd0fc, { 14, 12, 4}}, + {m68k_op_addx_8_mm_ay7 , 0xf1ff, 0xd10f, { 18, 18, 12}}, + {m68k_op_add_8_re_pi7 , 0xf1ff, 0xd11f, { 12, 12, 8}}, + {m68k_op_add_8_re_pd7 , 0xf1ff, 0xd127, { 14, 14, 9}}, + {m68k_op_add_8_re_aw , 0xf1ff, 0xd138, { 16, 16, 8}}, + {m68k_op_add_8_re_al , 0xf1ff, 0xd139, { 20, 20, 8}}, + {m68k_op_add_16_re_aw , 0xf1ff, 0xd178, { 16, 16, 8}}, + {m68k_op_add_16_re_al , 0xf1ff, 0xd179, { 20, 20, 8}}, + {m68k_op_add_32_re_aw , 0xf1ff, 0xd1b8, { 24, 24, 8}}, + {m68k_op_add_32_re_al , 0xf1ff, 0xd1b9, { 28, 28, 8}}, + {m68k_op_adda_32_aw , 0xf1ff, 0xd1f8, { 18, 18, 6}}, + {m68k_op_adda_32_al , 0xf1ff, 0xd1f9, { 22, 22, 6}}, + {m68k_op_adda_32_pcdi , 0xf1ff, 0xd1fa, { 18, 18, 7}}, + {m68k_op_adda_32_pcix , 0xf1ff, 0xd1fb, { 20, 20, 9}}, + {m68k_op_adda_32_i , 0xf1ff, 0xd1fc, { 16, 14, 6}}, + {m68k_op_ori_8_d , 0xfff8, 0x0000, { 8, 8, 2}}, + {m68k_op_ori_8_ai , 0xfff8, 0x0010, { 16, 16, 8}}, + {m68k_op_ori_8_pi , 0xfff8, 0x0018, { 16, 16, 8}}, + {m68k_op_ori_8_pd , 0xfff8, 0x0020, { 18, 18, 9}}, + {m68k_op_ori_8_di , 0xfff8, 0x0028, { 20, 20, 9}}, + {m68k_op_ori_8_ix , 0xfff8, 0x0030, { 22, 22, 11}}, + {m68k_op_ori_16_d , 0xfff8, 0x0040, { 8, 8, 2}}, + {m68k_op_ori_16_ai , 0xfff8, 0x0050, { 16, 16, 8}}, + {m68k_op_ori_16_pi , 0xfff8, 0x0058, { 16, 16, 8}}, + {m68k_op_ori_16_pd , 0xfff8, 0x0060, { 18, 18, 9}}, + {m68k_op_ori_16_di , 0xfff8, 0x0068, { 20, 20, 9}}, + {m68k_op_ori_16_ix , 0xfff8, 0x0070, { 22, 22, 11}}, + {m68k_op_ori_32_d , 0xfff8, 0x0080, { 16, 14, 2}}, + {m68k_op_ori_32_ai , 0xfff8, 0x0090, { 28, 28, 8}}, + {m68k_op_ori_32_pi , 0xfff8, 0x0098, { 28, 28, 8}}, + {m68k_op_ori_32_pd , 0xfff8, 0x00a0, { 30, 30, 9}}, + {m68k_op_ori_32_di , 0xfff8, 0x00a8, { 32, 32, 9}}, + {m68k_op_ori_32_ix , 0xfff8, 0x00b0, { 34, 34, 11}}, + {m68k_op_chk2cmp2_8_ai , 0xfff8, 0x00d0, { 0, 0, 22}}, + {m68k_op_chk2cmp2_8_di , 0xfff8, 0x00e8, { 0, 0, 23}}, + {m68k_op_chk2cmp2_8_ix , 0xfff8, 0x00f0, { 0, 0, 25}}, + {m68k_op_andi_8_d , 0xfff8, 0x0200, { 8, 8, 2}}, + {m68k_op_andi_8_ai , 0xfff8, 0x0210, { 16, 16, 8}}, + {m68k_op_andi_8_pi , 0xfff8, 0x0218, { 16, 16, 8}}, + {m68k_op_andi_8_pd , 0xfff8, 0x0220, { 18, 18, 9}}, + {m68k_op_andi_8_di , 0xfff8, 0x0228, { 20, 20, 9}}, + {m68k_op_andi_8_ix , 0xfff8, 0x0230, { 22, 22, 11}}, + {m68k_op_andi_16_d , 0xfff8, 0x0240, { 8, 8, 2}}, + {m68k_op_andi_16_ai , 0xfff8, 0x0250, { 16, 16, 8}}, + {m68k_op_andi_16_pi , 0xfff8, 0x0258, { 16, 16, 8}}, + {m68k_op_andi_16_pd , 0xfff8, 0x0260, { 18, 18, 9}}, + {m68k_op_andi_16_di , 0xfff8, 0x0268, { 20, 20, 9}}, + {m68k_op_andi_16_ix , 0xfff8, 0x0270, { 22, 22, 11}}, + {m68k_op_andi_32_d , 0xfff8, 0x0280, { 14, 14, 2}}, + {m68k_op_andi_32_ai , 0xfff8, 0x0290, { 28, 28, 8}}, + {m68k_op_andi_32_pi , 0xfff8, 0x0298, { 28, 28, 8}}, + {m68k_op_andi_32_pd , 0xfff8, 0x02a0, { 30, 30, 9}}, + {m68k_op_andi_32_di , 0xfff8, 0x02a8, { 32, 32, 9}}, + {m68k_op_andi_32_ix , 0xfff8, 0x02b0, { 34, 34, 11}}, + {m68k_op_chk2cmp2_16_ai , 0xfff8, 0x02d0, { 0, 0, 22}}, + {m68k_op_chk2cmp2_16_di , 0xfff8, 0x02e8, { 0, 0, 23}}, + {m68k_op_chk2cmp2_16_ix , 0xfff8, 0x02f0, { 0, 0, 25}}, + {m68k_op_subi_8_d , 0xfff8, 0x0400, { 8, 8, 2}}, + {m68k_op_subi_8_ai , 0xfff8, 0x0410, { 16, 16, 8}}, + {m68k_op_subi_8_pi , 0xfff8, 0x0418, { 16, 16, 8}}, + {m68k_op_subi_8_pd , 0xfff8, 0x0420, { 18, 18, 9}}, + {m68k_op_subi_8_di , 0xfff8, 0x0428, { 20, 20, 9}}, + {m68k_op_subi_8_ix , 0xfff8, 0x0430, { 22, 22, 11}}, + {m68k_op_subi_16_d , 0xfff8, 0x0440, { 8, 8, 2}}, + {m68k_op_subi_16_ai , 0xfff8, 0x0450, { 16, 16, 8}}, + {m68k_op_subi_16_pi , 0xfff8, 0x0458, { 16, 16, 8}}, + {m68k_op_subi_16_pd , 0xfff8, 0x0460, { 18, 18, 9}}, + {m68k_op_subi_16_di , 0xfff8, 0x0468, { 20, 20, 9}}, + {m68k_op_subi_16_ix , 0xfff8, 0x0470, { 22, 22, 11}}, + {m68k_op_subi_32_d , 0xfff8, 0x0480, { 16, 14, 2}}, + {m68k_op_subi_32_ai , 0xfff8, 0x0490, { 28, 28, 8}}, + {m68k_op_subi_32_pi , 0xfff8, 0x0498, { 28, 28, 8}}, + {m68k_op_subi_32_pd , 0xfff8, 0x04a0, { 30, 30, 9}}, + {m68k_op_subi_32_di , 0xfff8, 0x04a8, { 32, 32, 9}}, + {m68k_op_subi_32_ix , 0xfff8, 0x04b0, { 34, 34, 11}}, + {m68k_op_chk2cmp2_32_ai , 0xfff8, 0x04d0, { 0, 0, 22}}, + {m68k_op_chk2cmp2_32_di , 0xfff8, 0x04e8, { 0, 0, 23}}, + {m68k_op_chk2cmp2_32_ix , 0xfff8, 0x04f0, { 0, 0, 25}}, + {m68k_op_addi_8_d , 0xfff8, 0x0600, { 8, 8, 2}}, + {m68k_op_addi_8_ai , 0xfff8, 0x0610, { 16, 16, 8}}, + {m68k_op_addi_8_pi , 0xfff8, 0x0618, { 16, 16, 8}}, + {m68k_op_addi_8_pd , 0xfff8, 0x0620, { 18, 18, 9}}, + {m68k_op_addi_8_di , 0xfff8, 0x0628, { 20, 20, 9}}, + {m68k_op_addi_8_ix , 0xfff8, 0x0630, { 22, 22, 11}}, + {m68k_op_addi_16_d , 0xfff8, 0x0640, { 8, 8, 2}}, + {m68k_op_addi_16_ai , 0xfff8, 0x0650, { 16, 16, 8}}, + {m68k_op_addi_16_pi , 0xfff8, 0x0658, { 16, 16, 8}}, + {m68k_op_addi_16_pd , 0xfff8, 0x0660, { 18, 18, 9}}, + {m68k_op_addi_16_di , 0xfff8, 0x0668, { 20, 20, 9}}, + {m68k_op_addi_16_ix , 0xfff8, 0x0670, { 22, 22, 11}}, + {m68k_op_addi_32_d , 0xfff8, 0x0680, { 16, 14, 2}}, + {m68k_op_addi_32_ai , 0xfff8, 0x0690, { 28, 28, 8}}, + {m68k_op_addi_32_pi , 0xfff8, 0x0698, { 28, 28, 8}}, + {m68k_op_addi_32_pd , 0xfff8, 0x06a0, { 30, 30, 9}}, + {m68k_op_addi_32_di , 0xfff8, 0x06a8, { 32, 32, 9}}, + {m68k_op_addi_32_ix , 0xfff8, 0x06b0, { 34, 34, 11}}, + {m68k_op_callm_32_ai , 0xfff8, 0x06d0, { 0, 0, 64}}, + {m68k_op_callm_32_di , 0xfff8, 0x06e8, { 0, 0, 65}}, + {m68k_op_callm_32_ix , 0xfff8, 0x06f0, { 0, 0, 67}}, + {m68k_op_btst_32_s_d , 0xfff8, 0x0800, { 10, 10, 4}}, + {m68k_op_btst_8_s_ai , 0xfff8, 0x0810, { 12, 12, 8}}, + {m68k_op_btst_8_s_pi , 0xfff8, 0x0818, { 12, 12, 8}}, + {m68k_op_btst_8_s_pd , 0xfff8, 0x0820, { 14, 14, 9}}, + {m68k_op_btst_8_s_di , 0xfff8, 0x0828, { 16, 16, 9}}, + {m68k_op_btst_8_s_ix , 0xfff8, 0x0830, { 18, 18, 11}}, + {m68k_op_bchg_32_s_d , 0xfff8, 0x0840, { 12, 12, 4}}, + {m68k_op_bchg_8_s_ai , 0xfff8, 0x0850, { 16, 16, 8}}, + {m68k_op_bchg_8_s_pi , 0xfff8, 0x0858, { 16, 16, 8}}, + {m68k_op_bchg_8_s_pd , 0xfff8, 0x0860, { 18, 18, 9}}, + {m68k_op_bchg_8_s_di , 0xfff8, 0x0868, { 20, 20, 9}}, + {m68k_op_bchg_8_s_ix , 0xfff8, 0x0870, { 22, 22, 11}}, + {m68k_op_bclr_32_s_d , 0xfff8, 0x0880, { 14, 14, 4}}, + {m68k_op_bclr_8_s_ai , 0xfff8, 0x0890, { 16, 16, 8}}, + {m68k_op_bclr_8_s_pi , 0xfff8, 0x0898, { 16, 16, 8}}, + {m68k_op_bclr_8_s_pd , 0xfff8, 0x08a0, { 18, 18, 9}}, + {m68k_op_bclr_8_s_di , 0xfff8, 0x08a8, { 20, 20, 9}}, + {m68k_op_bclr_8_s_ix , 0xfff8, 0x08b0, { 22, 22, 11}}, + {m68k_op_bset_32_s_d , 0xfff8, 0x08c0, { 12, 12, 4}}, + {m68k_op_bset_8_s_ai , 0xfff8, 0x08d0, { 16, 16, 8}}, + {m68k_op_bset_8_s_pi , 0xfff8, 0x08d8, { 16, 16, 8}}, + {m68k_op_bset_8_s_pd , 0xfff8, 0x08e0, { 18, 18, 9}}, + {m68k_op_bset_8_s_di , 0xfff8, 0x08e8, { 20, 20, 9}}, + {m68k_op_bset_8_s_ix , 0xfff8, 0x08f0, { 22, 22, 11}}, + {m68k_op_eori_8_d , 0xfff8, 0x0a00, { 8, 8, 2}}, + {m68k_op_eori_8_ai , 0xfff8, 0x0a10, { 16, 16, 8}}, + {m68k_op_eori_8_pi , 0xfff8, 0x0a18, { 16, 16, 8}}, + {m68k_op_eori_8_pd , 0xfff8, 0x0a20, { 18, 18, 9}}, + {m68k_op_eori_8_di , 0xfff8, 0x0a28, { 20, 20, 9}}, + {m68k_op_eori_8_ix , 0xfff8, 0x0a30, { 22, 22, 11}}, + {m68k_op_eori_16_d , 0xfff8, 0x0a40, { 8, 8, 2}}, + {m68k_op_eori_16_ai , 0xfff8, 0x0a50, { 16, 16, 8}}, + {m68k_op_eori_16_pi , 0xfff8, 0x0a58, { 16, 16, 8}}, + {m68k_op_eori_16_pd , 0xfff8, 0x0a60, { 18, 18, 9}}, + {m68k_op_eori_16_di , 0xfff8, 0x0a68, { 20, 20, 9}}, + {m68k_op_eori_16_ix , 0xfff8, 0x0a70, { 22, 22, 11}}, + {m68k_op_eori_32_d , 0xfff8, 0x0a80, { 16, 14, 2}}, + {m68k_op_eori_32_ai , 0xfff8, 0x0a90, { 28, 28, 8}}, + {m68k_op_eori_32_pi , 0xfff8, 0x0a98, { 28, 28, 8}}, + {m68k_op_eori_32_pd , 0xfff8, 0x0aa0, { 30, 30, 9}}, + {m68k_op_eori_32_di , 0xfff8, 0x0aa8, { 32, 32, 9}}, + {m68k_op_eori_32_ix , 0xfff8, 0x0ab0, { 34, 34, 11}}, + {m68k_op_cas_8_ai , 0xfff8, 0x0ad0, { 0, 0, 16}}, + {m68k_op_cas_8_pi , 0xfff8, 0x0ad8, { 0, 0, 16}}, + {m68k_op_cas_8_pd , 0xfff8, 0x0ae0, { 0, 0, 17}}, + {m68k_op_cas_8_di , 0xfff8, 0x0ae8, { 0, 0, 17}}, + {m68k_op_cas_8_ix , 0xfff8, 0x0af0, { 0, 0, 19}}, + {m68k_op_cmpi_8_d , 0xfff8, 0x0c00, { 8, 8, 2}}, + {m68k_op_cmpi_8_ai , 0xfff8, 0x0c10, { 12, 12, 6}}, + {m68k_op_cmpi_8_pi , 0xfff8, 0x0c18, { 12, 12, 6}}, + {m68k_op_cmpi_8_pd , 0xfff8, 0x0c20, { 14, 14, 7}}, + {m68k_op_cmpi_8_di , 0xfff8, 0x0c28, { 16, 16, 7}}, + {m68k_op_cmpi_8_ix , 0xfff8, 0x0c30, { 18, 18, 9}}, + {m68k_op_cmpi_16_d , 0xfff8, 0x0c40, { 8, 8, 2}}, + {m68k_op_cmpi_16_ai , 0xfff8, 0x0c50, { 12, 12, 6}}, + {m68k_op_cmpi_16_pi , 0xfff8, 0x0c58, { 12, 12, 6}}, + {m68k_op_cmpi_16_pd , 0xfff8, 0x0c60, { 14, 14, 7}}, + {m68k_op_cmpi_16_di , 0xfff8, 0x0c68, { 16, 16, 7}}, + {m68k_op_cmpi_16_ix , 0xfff8, 0x0c70, { 18, 18, 9}}, + {m68k_op_cmpi_32_d , 0xfff8, 0x0c80, { 14, 12, 2}}, + {m68k_op_cmpi_32_ai , 0xfff8, 0x0c90, { 20, 20, 6}}, + {m68k_op_cmpi_32_pi , 0xfff8, 0x0c98, { 20, 20, 6}}, + {m68k_op_cmpi_32_pd , 0xfff8, 0x0ca0, { 22, 22, 7}}, + {m68k_op_cmpi_32_di , 0xfff8, 0x0ca8, { 24, 24, 7}}, + {m68k_op_cmpi_32_ix , 0xfff8, 0x0cb0, { 26, 26, 9}}, + {m68k_op_cas_16_ai , 0xfff8, 0x0cd0, { 0, 0, 16}}, + {m68k_op_cas_16_pi , 0xfff8, 0x0cd8, { 0, 0, 16}}, + {m68k_op_cas_16_pd , 0xfff8, 0x0ce0, { 0, 0, 17}}, + {m68k_op_cas_16_di , 0xfff8, 0x0ce8, { 0, 0, 17}}, + {m68k_op_cas_16_ix , 0xfff8, 0x0cf0, { 0, 0, 19}}, + {m68k_op_moves_8_ai , 0xfff8, 0x0e10, { 0, 18, 9}}, + {m68k_op_moves_8_pi , 0xfff8, 0x0e18, { 0, 18, 9}}, + {m68k_op_moves_8_pd , 0xfff8, 0x0e20, { 0, 20, 10}}, + {m68k_op_moves_8_di , 0xfff8, 0x0e28, { 0, 26, 10}}, + {m68k_op_moves_8_ix , 0xfff8, 0x0e30, { 0, 30, 12}}, + {m68k_op_moves_16_ai , 0xfff8, 0x0e50, { 0, 18, 9}}, + {m68k_op_moves_16_pi , 0xfff8, 0x0e58, { 0, 18, 9}}, + {m68k_op_moves_16_pd , 0xfff8, 0x0e60, { 0, 20, 10}}, + {m68k_op_moves_16_di , 0xfff8, 0x0e68, { 0, 26, 10}}, + {m68k_op_moves_16_ix , 0xfff8, 0x0e70, { 0, 30, 12}}, + {m68k_op_moves_32_ai , 0xfff8, 0x0e90, { 0, 22, 9}}, + {m68k_op_moves_32_pi , 0xfff8, 0x0e98, { 0, 22, 9}}, + {m68k_op_moves_32_pd , 0xfff8, 0x0ea0, { 0, 28, 10}}, + {m68k_op_moves_32_di , 0xfff8, 0x0ea8, { 0, 32, 10}}, + {m68k_op_moves_32_ix , 0xfff8, 0x0eb0, { 0, 36, 12}}, + {m68k_op_cas_32_ai , 0xfff8, 0x0ed0, { 0, 0, 16}}, + {m68k_op_cas_32_pi , 0xfff8, 0x0ed8, { 0, 0, 16}}, + {m68k_op_cas_32_pd , 0xfff8, 0x0ee0, { 0, 0, 17}}, + {m68k_op_cas_32_di , 0xfff8, 0x0ee8, { 0, 0, 17}}, + {m68k_op_cas_32_ix , 0xfff8, 0x0ef0, { 0, 0, 19}}, + {m68k_op_move_8_aw_d , 0xfff8, 0x11c0, { 12, 12, 4}}, + {m68k_op_move_8_aw_ai , 0xfff8, 0x11d0, { 16, 16, 8}}, + {m68k_op_move_8_aw_pi , 0xfff8, 0x11d8, { 16, 16, 8}}, + {m68k_op_move_8_aw_pd , 0xfff8, 0x11e0, { 18, 18, 9}}, + {m68k_op_move_8_aw_di , 0xfff8, 0x11e8, { 20, 20, 9}}, + {m68k_op_move_8_aw_ix , 0xfff8, 0x11f0, { 22, 22, 11}}, + {m68k_op_move_8_al_d , 0xfff8, 0x13c0, { 16, 16, 6}}, + {m68k_op_move_8_al_ai , 0xfff8, 0x13d0, { 20, 20, 10}}, + {m68k_op_move_8_al_pi , 0xfff8, 0x13d8, { 20, 20, 10}}, + {m68k_op_move_8_al_pd , 0xfff8, 0x13e0, { 22, 22, 11}}, + {m68k_op_move_8_al_di , 0xfff8, 0x13e8, { 24, 24, 11}}, + {m68k_op_move_8_al_ix , 0xfff8, 0x13f0, { 26, 26, 13}}, + {m68k_op_move_8_pi7_d , 0xfff8, 0x1ec0, { 8, 8, 4}}, + {m68k_op_move_8_pi7_ai , 0xfff8, 0x1ed0, { 12, 12, 8}}, + {m68k_op_move_8_pi7_pi , 0xfff8, 0x1ed8, { 12, 12, 8}}, + {m68k_op_move_8_pi7_pd , 0xfff8, 0x1ee0, { 14, 14, 9}}, + {m68k_op_move_8_pi7_di , 0xfff8, 0x1ee8, { 16, 16, 9}}, + {m68k_op_move_8_pi7_ix , 0xfff8, 0x1ef0, { 18, 18, 11}}, + {m68k_op_move_8_pd7_d , 0xfff8, 0x1f00, { 8, 8, 5}}, + {m68k_op_move_8_pd7_ai , 0xfff8, 0x1f10, { 12, 12, 9}}, + {m68k_op_move_8_pd7_pi , 0xfff8, 0x1f18, { 12, 12, 9}}, + {m68k_op_move_8_pd7_pd , 0xfff8, 0x1f20, { 14, 14, 10}}, + {m68k_op_move_8_pd7_di , 0xfff8, 0x1f28, { 16, 16, 10}}, + {m68k_op_move_8_pd7_ix , 0xfff8, 0x1f30, { 18, 18, 12}}, + {m68k_op_move_32_aw_d , 0xfff8, 0x21c0, { 16, 16, 4}}, + {m68k_op_move_32_aw_a , 0xfff8, 0x21c8, { 16, 16, 4}}, + {m68k_op_move_32_aw_ai , 0xfff8, 0x21d0, { 24, 24, 8}}, + {m68k_op_move_32_aw_pi , 0xfff8, 0x21d8, { 24, 24, 8}}, + {m68k_op_move_32_aw_pd , 0xfff8, 0x21e0, { 26, 26, 9}}, + {m68k_op_move_32_aw_di , 0xfff8, 0x21e8, { 28, 28, 9}}, + {m68k_op_move_32_aw_ix , 0xfff8, 0x21f0, { 30, 30, 11}}, + {m68k_op_move_32_al_d , 0xfff8, 0x23c0, { 20, 20, 6}}, + {m68k_op_move_32_al_a , 0xfff8, 0x23c8, { 20, 20, 6}}, + {m68k_op_move_32_al_ai , 0xfff8, 0x23d0, { 28, 28, 10}}, + {m68k_op_move_32_al_pi , 0xfff8, 0x23d8, { 28, 28, 10}}, + {m68k_op_move_32_al_pd , 0xfff8, 0x23e0, { 30, 30, 11}}, + {m68k_op_move_32_al_di , 0xfff8, 0x23e8, { 32, 32, 11}}, + {m68k_op_move_32_al_ix , 0xfff8, 0x23f0, { 34, 34, 13}}, + {m68k_op_move_16_aw_d , 0xfff8, 0x31c0, { 12, 12, 4}}, + {m68k_op_move_16_aw_a , 0xfff8, 0x31c8, { 12, 12, 4}}, + {m68k_op_move_16_aw_ai , 0xfff8, 0x31d0, { 16, 16, 8}}, + {m68k_op_move_16_aw_pi , 0xfff8, 0x31d8, { 16, 16, 8}}, + {m68k_op_move_16_aw_pd , 0xfff8, 0x31e0, { 18, 18, 9}}, + {m68k_op_move_16_aw_di , 0xfff8, 0x31e8, { 20, 20, 9}}, + {m68k_op_move_16_aw_ix , 0xfff8, 0x31f0, { 22, 22, 11}}, + {m68k_op_move_16_al_d , 0xfff8, 0x33c0, { 16, 16, 6}}, + {m68k_op_move_16_al_a , 0xfff8, 0x33c8, { 16, 16, 6}}, + {m68k_op_move_16_al_ai , 0xfff8, 0x33d0, { 20, 20, 10}}, + {m68k_op_move_16_al_pi , 0xfff8, 0x33d8, { 20, 20, 10}}, + {m68k_op_move_16_al_pd , 0xfff8, 0x33e0, { 22, 22, 11}}, + {m68k_op_move_16_al_di , 0xfff8, 0x33e8, { 24, 24, 11}}, + {m68k_op_move_16_al_ix , 0xfff8, 0x33f0, { 26, 26, 13}}, + {m68k_op_negx_8_d , 0xfff8, 0x4000, { 4, 4, 2}}, + {m68k_op_negx_8_ai , 0xfff8, 0x4010, { 12, 12, 8}}, + {m68k_op_negx_8_pi , 0xfff8, 0x4018, { 12, 12, 8}}, + {m68k_op_negx_8_pd , 0xfff8, 0x4020, { 14, 14, 9}}, + {m68k_op_negx_8_di , 0xfff8, 0x4028, { 16, 16, 9}}, + {m68k_op_negx_8_ix , 0xfff8, 0x4030, { 18, 18, 11}}, + {m68k_op_negx_16_d , 0xfff8, 0x4040, { 4, 4, 2}}, + {m68k_op_negx_16_ai , 0xfff8, 0x4050, { 12, 12, 8}}, + {m68k_op_negx_16_pi , 0xfff8, 0x4058, { 12, 12, 8}}, + {m68k_op_negx_16_pd , 0xfff8, 0x4060, { 14, 14, 9}}, + {m68k_op_negx_16_di , 0xfff8, 0x4068, { 16, 16, 9}}, + {m68k_op_negx_16_ix , 0xfff8, 0x4070, { 18, 18, 11}}, + {m68k_op_negx_32_d , 0xfff8, 0x4080, { 6, 6, 2}}, + {m68k_op_negx_32_ai , 0xfff8, 0x4090, { 20, 20, 8}}, + {m68k_op_negx_32_pi , 0xfff8, 0x4098, { 20, 20, 8}}, + {m68k_op_negx_32_pd , 0xfff8, 0x40a0, { 22, 22, 9}}, + {m68k_op_negx_32_di , 0xfff8, 0x40a8, { 24, 24, 9}}, + {m68k_op_negx_32_ix , 0xfff8, 0x40b0, { 26, 26, 11}}, + {m68k_op_move_16_frs_d , 0xfff8, 0x40c0, { 6, 4, 8}}, + {m68k_op_move_16_frs_ai , 0xfff8, 0x40d0, { 12, 12, 12}}, + {m68k_op_move_16_frs_pi , 0xfff8, 0x40d8, { 12, 12, 12}}, + {m68k_op_move_16_frs_pd , 0xfff8, 0x40e0, { 14, 14, 13}}, + {m68k_op_move_16_frs_di , 0xfff8, 0x40e8, { 16, 16, 13}}, + {m68k_op_move_16_frs_ix , 0xfff8, 0x40f0, { 18, 18, 15}}, + {m68k_op_clr_8_d , 0xfff8, 0x4200, { 4, 4, 2}}, + {m68k_op_clr_8_ai , 0xfff8, 0x4210, { 12, 8, 8}}, + {m68k_op_clr_8_pi , 0xfff8, 0x4218, { 12, 8, 8}}, + {m68k_op_clr_8_pd , 0xfff8, 0x4220, { 14, 10, 9}}, + {m68k_op_clr_8_di , 0xfff8, 0x4228, { 16, 12, 9}}, + {m68k_op_clr_8_ix , 0xfff8, 0x4230, { 18, 14, 11}}, + {m68k_op_clr_16_d , 0xfff8, 0x4240, { 4, 4, 2}}, + {m68k_op_clr_16_ai , 0xfff8, 0x4250, { 12, 8, 8}}, + {m68k_op_clr_16_pi , 0xfff8, 0x4258, { 12, 8, 8}}, + {m68k_op_clr_16_pd , 0xfff8, 0x4260, { 14, 10, 9}}, + {m68k_op_clr_16_di , 0xfff8, 0x4268, { 16, 12, 9}}, + {m68k_op_clr_16_ix , 0xfff8, 0x4270, { 18, 14, 11}}, + {m68k_op_clr_32_d , 0xfff8, 0x4280, { 6, 6, 2}}, + {m68k_op_clr_32_ai , 0xfff8, 0x4290, { 20, 12, 8}}, + {m68k_op_clr_32_pi , 0xfff8, 0x4298, { 20, 12, 8}}, + {m68k_op_clr_32_pd , 0xfff8, 0x42a0, { 22, 14, 9}}, + {m68k_op_clr_32_di , 0xfff8, 0x42a8, { 24, 16, 9}}, + {m68k_op_clr_32_ix , 0xfff8, 0x42b0, { 26, 20, 11}}, + {m68k_op_move_16_frc_d , 0xfff8, 0x42c0, { 0, 4, 4}}, + {m68k_op_move_16_frc_ai , 0xfff8, 0x42d0, { 0, 12, 8}}, + {m68k_op_move_16_frc_pi , 0xfff8, 0x42d8, { 0, 12, 8}}, + {m68k_op_move_16_frc_pd , 0xfff8, 0x42e0, { 0, 14, 9}}, + {m68k_op_move_16_frc_di , 0xfff8, 0x42e8, { 0, 16, 9}}, + {m68k_op_move_16_frc_ix , 0xfff8, 0x42f0, { 0, 18, 11}}, + {m68k_op_neg_8_d , 0xfff8, 0x4400, { 4, 4, 2}}, + {m68k_op_neg_8_ai , 0xfff8, 0x4410, { 12, 12, 8}}, + {m68k_op_neg_8_pi , 0xfff8, 0x4418, { 12, 12, 8}}, + {m68k_op_neg_8_pd , 0xfff8, 0x4420, { 14, 14, 9}}, + {m68k_op_neg_8_di , 0xfff8, 0x4428, { 16, 16, 9}}, + {m68k_op_neg_8_ix , 0xfff8, 0x4430, { 18, 18, 11}}, + {m68k_op_neg_16_d , 0xfff8, 0x4440, { 4, 4, 2}}, + {m68k_op_neg_16_ai , 0xfff8, 0x4450, { 12, 12, 8}}, + {m68k_op_neg_16_pi , 0xfff8, 0x4458, { 12, 12, 8}}, + {m68k_op_neg_16_pd , 0xfff8, 0x4460, { 14, 14, 9}}, + {m68k_op_neg_16_di , 0xfff8, 0x4468, { 16, 16, 9}}, + {m68k_op_neg_16_ix , 0xfff8, 0x4470, { 18, 18, 11}}, + {m68k_op_neg_32_d , 0xfff8, 0x4480, { 6, 6, 2}}, + {m68k_op_neg_32_ai , 0xfff8, 0x4490, { 20, 20, 8}}, + {m68k_op_neg_32_pi , 0xfff8, 0x4498, { 20, 20, 8}}, + {m68k_op_neg_32_pd , 0xfff8, 0x44a0, { 22, 22, 9}}, + {m68k_op_neg_32_di , 0xfff8, 0x44a8, { 24, 24, 9}}, + {m68k_op_neg_32_ix , 0xfff8, 0x44b0, { 26, 26, 11}}, + {m68k_op_move_16_toc_d , 0xfff8, 0x44c0, { 12, 12, 4}}, + {m68k_op_move_16_toc_ai , 0xfff8, 0x44d0, { 16, 16, 8}}, + {m68k_op_move_16_toc_pi , 0xfff8, 0x44d8, { 16, 16, 8}}, + {m68k_op_move_16_toc_pd , 0xfff8, 0x44e0, { 18, 18, 9}}, + {m68k_op_move_16_toc_di , 0xfff8, 0x44e8, { 20, 20, 9}}, + {m68k_op_move_16_toc_ix , 0xfff8, 0x44f0, { 22, 22, 11}}, + {m68k_op_not_8_d , 0xfff8, 0x4600, { 4, 4, 2}}, + {m68k_op_not_8_ai , 0xfff8, 0x4610, { 12, 12, 8}}, + {m68k_op_not_8_pi , 0xfff8, 0x4618, { 12, 12, 8}}, + {m68k_op_not_8_pd , 0xfff8, 0x4620, { 14, 14, 9}}, + {m68k_op_not_8_di , 0xfff8, 0x4628, { 16, 16, 9}}, + {m68k_op_not_8_ix , 0xfff8, 0x4630, { 18, 18, 11}}, + {m68k_op_not_16_d , 0xfff8, 0x4640, { 4, 4, 2}}, + {m68k_op_not_16_ai , 0xfff8, 0x4650, { 12, 12, 8}}, + {m68k_op_not_16_pi , 0xfff8, 0x4658, { 12, 12, 8}}, + {m68k_op_not_16_pd , 0xfff8, 0x4660, { 14, 14, 9}}, + {m68k_op_not_16_di , 0xfff8, 0x4668, { 16, 16, 9}}, + {m68k_op_not_16_ix , 0xfff8, 0x4670, { 18, 18, 11}}, + {m68k_op_not_32_d , 0xfff8, 0x4680, { 6, 6, 2}}, + {m68k_op_not_32_ai , 0xfff8, 0x4690, { 20, 20, 8}}, + {m68k_op_not_32_pi , 0xfff8, 0x4698, { 20, 20, 8}}, + {m68k_op_not_32_pd , 0xfff8, 0x46a0, { 22, 22, 9}}, + {m68k_op_not_32_di , 0xfff8, 0x46a8, { 24, 24, 9}}, + {m68k_op_not_32_ix , 0xfff8, 0x46b0, { 26, 26, 11}}, + {m68k_op_move_16_tos_d , 0xfff8, 0x46c0, { 12, 12, 8}}, + {m68k_op_move_16_tos_ai , 0xfff8, 0x46d0, { 16, 16, 12}}, + {m68k_op_move_16_tos_pi , 0xfff8, 0x46d8, { 16, 16, 12}}, + {m68k_op_move_16_tos_pd , 0xfff8, 0x46e0, { 18, 18, 13}}, + {m68k_op_move_16_tos_di , 0xfff8, 0x46e8, { 20, 20, 13}}, + {m68k_op_move_16_tos_ix , 0xfff8, 0x46f0, { 22, 22, 15}}, + {m68k_op_nbcd_8_d , 0xfff8, 0x4800, { 6, 6, 6}}, + {m68k_op_link_32 , 0xfff8, 0x4808, { 0, 0, 6}}, + {m68k_op_nbcd_8_ai , 0xfff8, 0x4810, { 12, 12, 10}}, + {m68k_op_nbcd_8_pi , 0xfff8, 0x4818, { 12, 12, 10}}, + {m68k_op_nbcd_8_pd , 0xfff8, 0x4820, { 14, 14, 11}}, + {m68k_op_nbcd_8_di , 0xfff8, 0x4828, { 16, 16, 11}}, + {m68k_op_nbcd_8_ix , 0xfff8, 0x4830, { 18, 18, 13}}, + {m68k_op_swap_32 , 0xfff8, 0x4840, { 4, 4, 4}}, + {m68k_op_bkpt , 0xfff8, 0x4848, { 0, 10, 10}}, + {m68k_op_pea_32_ai , 0xfff8, 0x4850, { 10, 10, 9}}, + {m68k_op_pea_32_di , 0xfff8, 0x4868, { 16, 16, 10}}, + {m68k_op_pea_32_ix , 0xfff8, 0x4870, { 20, 20, 12}}, + {m68k_op_ext_16 , 0xfff8, 0x4880, { 4, 4, 4}}, + {m68k_op_movem_16_re_ai , 0xfff8, 0x4890, { 12, 12, 8}}, + {m68k_op_movem_16_re_pd , 0xfff8, 0x48a0, { 8, 8, 4}}, + {m68k_op_movem_16_re_di , 0xfff8, 0x48a8, { 16, 16, 9}}, + {m68k_op_movem_16_re_ix , 0xfff8, 0x48b0, { 18, 18, 11}}, + {m68k_op_ext_32 , 0xfff8, 0x48c0, { 4, 4, 4}}, + {m68k_op_movem_32_re_ai , 0xfff8, 0x48d0, { 16, 16, 8}}, + {m68k_op_movem_32_re_pd , 0xfff8, 0x48e0, { 8, 8, 4}}, + {m68k_op_movem_32_re_di , 0xfff8, 0x48e8, { 20, 20, 9}}, + {m68k_op_movem_32_re_ix , 0xfff8, 0x48f0, { 22, 22, 11}}, + {m68k_op_extb_32 , 0xfff8, 0x49c0, { 0, 0, 4}}, + {m68k_op_tst_8_d , 0xfff8, 0x4a00, { 4, 4, 2}}, + {m68k_op_tst_8_ai , 0xfff8, 0x4a10, { 8, 8, 6}}, + {m68k_op_tst_8_pi , 0xfff8, 0x4a18, { 8, 8, 6}}, + {m68k_op_tst_8_pd , 0xfff8, 0x4a20, { 10, 10, 7}}, + {m68k_op_tst_8_di , 0xfff8, 0x4a28, { 12, 12, 7}}, + {m68k_op_tst_8_ix , 0xfff8, 0x4a30, { 14, 14, 9}}, + {m68k_op_tst_16_d , 0xfff8, 0x4a40, { 4, 4, 2}}, + {m68k_op_tst_16_a , 0xfff8, 0x4a48, { 0, 0, 2}}, + {m68k_op_tst_16_ai , 0xfff8, 0x4a50, { 8, 8, 6}}, + {m68k_op_tst_16_pi , 0xfff8, 0x4a58, { 8, 8, 6}}, + {m68k_op_tst_16_pd , 0xfff8, 0x4a60, { 10, 10, 7}}, + {m68k_op_tst_16_di , 0xfff8, 0x4a68, { 12, 12, 7}}, + {m68k_op_tst_16_ix , 0xfff8, 0x4a70, { 14, 14, 9}}, + {m68k_op_tst_32_d , 0xfff8, 0x4a80, { 4, 4, 2}}, + {m68k_op_tst_32_a , 0xfff8, 0x4a88, { 0, 0, 2}}, + {m68k_op_tst_32_ai , 0xfff8, 0x4a90, { 12, 12, 6}}, + {m68k_op_tst_32_pi , 0xfff8, 0x4a98, { 12, 12, 6}}, + {m68k_op_tst_32_pd , 0xfff8, 0x4aa0, { 14, 14, 7}}, + {m68k_op_tst_32_di , 0xfff8, 0x4aa8, { 16, 16, 7}}, + {m68k_op_tst_32_ix , 0xfff8, 0x4ab0, { 18, 18, 9}}, + {m68k_op_tas_8_d , 0xfff8, 0x4ac0, { 4, 4, 4}}, + {m68k_op_tas_8_ai , 0xfff8, 0x4ad0, { 18, 18, 16}}, + {m68k_op_tas_8_pi , 0xfff8, 0x4ad8, { 18, 18, 16}}, + {m68k_op_tas_8_pd , 0xfff8, 0x4ae0, { 20, 20, 17}}, + {m68k_op_tas_8_di , 0xfff8, 0x4ae8, { 22, 22, 17}}, + {m68k_op_tas_8_ix , 0xfff8, 0x4af0, { 24, 24, 19}}, + {m68k_op_mull_32_d , 0xfff8, 0x4c00, { 0, 0, 43}}, + {m68k_op_mull_32_ai , 0xfff8, 0x4c10, { 0, 0, 47}}, + {m68k_op_mull_32_pi , 0xfff8, 0x4c18, { 0, 0, 47}}, + {m68k_op_mull_32_pd , 0xfff8, 0x4c20, { 0, 0, 48}}, + {m68k_op_mull_32_di , 0xfff8, 0x4c28, { 0, 0, 48}}, + {m68k_op_mull_32_ix , 0xfff8, 0x4c30, { 0, 0, 50}}, + {m68k_op_divl_32_d , 0xfff8, 0x4c40, { 0, 0, 84}}, + {m68k_op_divl_32_ai , 0xfff8, 0x4c50, { 0, 0, 88}}, + {m68k_op_divl_32_pi , 0xfff8, 0x4c58, { 0, 0, 88}}, + {m68k_op_divl_32_pd , 0xfff8, 0x4c60, { 0, 0, 89}}, + {m68k_op_divl_32_di , 0xfff8, 0x4c68, { 0, 0, 89}}, + {m68k_op_divl_32_ix , 0xfff8, 0x4c70, { 0, 0, 91}}, + {m68k_op_movem_16_er_ai , 0xfff8, 0x4c90, { 16, 16, 12}}, + {m68k_op_movem_16_er_pi , 0xfff8, 0x4c98, { 12, 12, 8}}, + {m68k_op_movem_16_er_di , 0xfff8, 0x4ca8, { 20, 20, 13}}, + {m68k_op_movem_16_er_ix , 0xfff8, 0x4cb0, { 22, 22, 15}}, + {m68k_op_movem_32_er_ai , 0xfff8, 0x4cd0, { 20, 20, 12}}, + {m68k_op_movem_32_er_pi , 0xfff8, 0x4cd8, { 12, 12, 8}}, + {m68k_op_movem_32_er_di , 0xfff8, 0x4ce8, { 24, 24, 13}}, + {m68k_op_movem_32_er_ix , 0xfff8, 0x4cf0, { 26, 26, 15}}, + {m68k_op_link_16 , 0xfff8, 0x4e50, { 16, 16, 5}}, + {m68k_op_unlk_32 , 0xfff8, 0x4e58, { 12, 12, 6}}, + {m68k_op_move_32_tou , 0xfff8, 0x4e60, { 4, 6, 2}}, + {m68k_op_move_32_fru , 0xfff8, 0x4e68, { 4, 6, 2}}, + {m68k_op_jsr_32_ai , 0xfff8, 0x4e90, { 16, 16, 4}}, + {m68k_op_jsr_32_di , 0xfff8, 0x4ea8, { 18, 18, 5}}, + {m68k_op_jsr_32_ix , 0xfff8, 0x4eb0, { 22, 22, 7}}, + {m68k_op_jmp_32_ai , 0xfff8, 0x4ed0, { 8, 8, 4}}, + {m68k_op_jmp_32_di , 0xfff8, 0x4ee8, { 10, 10, 5}}, + {m68k_op_jmp_32_ix , 0xfff8, 0x4ef0, { 12, 12, 7}}, + {m68k_op_st_8_d , 0xfff8, 0x50c0, { 6, 4, 4}}, + {m68k_op_dbt_16 , 0xfff8, 0x50c8, { 12, 12, 6}}, + {m68k_op_st_8_ai , 0xfff8, 0x50d0, { 12, 12, 10}}, + {m68k_op_st_8_pi , 0xfff8, 0x50d8, { 12, 12, 10}}, + {m68k_op_st_8_pd , 0xfff8, 0x50e0, { 14, 14, 11}}, + {m68k_op_st_8_di , 0xfff8, 0x50e8, { 16, 16, 11}}, + {m68k_op_st_8_ix , 0xfff8, 0x50f0, { 18, 18, 13}}, + {m68k_op_sf_8_d , 0xfff8, 0x51c0, { 4, 4, 4}}, + {m68k_op_dbf_16 , 0xfff8, 0x51c8, { 14, 14, 6}}, + {m68k_op_sf_8_ai , 0xfff8, 0x51d0, { 12, 12, 10}}, + {m68k_op_sf_8_pi , 0xfff8, 0x51d8, { 12, 12, 10}}, + {m68k_op_sf_8_pd , 0xfff8, 0x51e0, { 14, 14, 11}}, + {m68k_op_sf_8_di , 0xfff8, 0x51e8, { 16, 16, 11}}, + {m68k_op_sf_8_ix , 0xfff8, 0x51f0, { 18, 18, 13}}, + {m68k_op_shi_8_d , 0xfff8, 0x52c0, { 4, 4, 4}}, + {m68k_op_dbhi_16 , 0xfff8, 0x52c8, { 12, 12, 6}}, + {m68k_op_shi_8_ai , 0xfff8, 0x52d0, { 12, 12, 10}}, + {m68k_op_shi_8_pi , 0xfff8, 0x52d8, { 12, 12, 10}}, + {m68k_op_shi_8_pd , 0xfff8, 0x52e0, { 14, 14, 11}}, + {m68k_op_shi_8_di , 0xfff8, 0x52e8, { 16, 16, 11}}, + {m68k_op_shi_8_ix , 0xfff8, 0x52f0, { 18, 18, 13}}, + {m68k_op_sls_8_d , 0xfff8, 0x53c0, { 4, 4, 4}}, + {m68k_op_dbls_16 , 0xfff8, 0x53c8, { 12, 12, 6}}, + {m68k_op_sls_8_ai , 0xfff8, 0x53d0, { 12, 12, 10}}, + {m68k_op_sls_8_pi , 0xfff8, 0x53d8, { 12, 12, 10}}, + {m68k_op_sls_8_pd , 0xfff8, 0x53e0, { 14, 14, 11}}, + {m68k_op_sls_8_di , 0xfff8, 0x53e8, { 16, 16, 11}}, + {m68k_op_sls_8_ix , 0xfff8, 0x53f0, { 18, 18, 13}}, + {m68k_op_scc_8_d , 0xfff8, 0x54c0, { 4, 4, 4}}, + {m68k_op_dbcc_16 , 0xfff8, 0x54c8, { 12, 12, 6}}, + {m68k_op_scc_8_ai , 0xfff8, 0x54d0, { 12, 12, 10}}, + {m68k_op_scc_8_pi , 0xfff8, 0x54d8, { 12, 12, 10}}, + {m68k_op_scc_8_pd , 0xfff8, 0x54e0, { 14, 14, 11}}, + {m68k_op_scc_8_di , 0xfff8, 0x54e8, { 16, 16, 11}}, + {m68k_op_scc_8_ix , 0xfff8, 0x54f0, { 18, 18, 13}}, + {m68k_op_scs_8_d , 0xfff8, 0x55c0, { 4, 4, 4}}, + {m68k_op_dbcs_16 , 0xfff8, 0x55c8, { 12, 12, 6}}, + {m68k_op_scs_8_ai , 0xfff8, 0x55d0, { 12, 12, 10}}, + {m68k_op_scs_8_pi , 0xfff8, 0x55d8, { 12, 12, 10}}, + {m68k_op_scs_8_pd , 0xfff8, 0x55e0, { 14, 14, 11}}, + {m68k_op_scs_8_di , 0xfff8, 0x55e8, { 16, 16, 11}}, + {m68k_op_scs_8_ix , 0xfff8, 0x55f0, { 18, 18, 13}}, + {m68k_op_sne_8_d , 0xfff8, 0x56c0, { 4, 4, 4}}, + {m68k_op_dbne_16 , 0xfff8, 0x56c8, { 12, 12, 6}}, + {m68k_op_sne_8_ai , 0xfff8, 0x56d0, { 12, 12, 10}}, + {m68k_op_sne_8_pi , 0xfff8, 0x56d8, { 12, 12, 10}}, + {m68k_op_sne_8_pd , 0xfff8, 0x56e0, { 14, 14, 11}}, + {m68k_op_sne_8_di , 0xfff8, 0x56e8, { 16, 16, 11}}, + {m68k_op_sne_8_ix , 0xfff8, 0x56f0, { 18, 18, 13}}, + {m68k_op_seq_8_d , 0xfff8, 0x57c0, { 4, 4, 4}}, + {m68k_op_dbeq_16 , 0xfff8, 0x57c8, { 12, 12, 6}}, + {m68k_op_seq_8_ai , 0xfff8, 0x57d0, { 12, 12, 10}}, + {m68k_op_seq_8_pi , 0xfff8, 0x57d8, { 12, 12, 10}}, + {m68k_op_seq_8_pd , 0xfff8, 0x57e0, { 14, 14, 11}}, + {m68k_op_seq_8_di , 0xfff8, 0x57e8, { 16, 16, 11}}, + {m68k_op_seq_8_ix , 0xfff8, 0x57f0, { 18, 18, 13}}, + {m68k_op_svc_8_d , 0xfff8, 0x58c0, { 4, 4, 4}}, + {m68k_op_dbvc_16 , 0xfff8, 0x58c8, { 12, 12, 6}}, + {m68k_op_svc_8_ai , 0xfff8, 0x58d0, { 12, 12, 10}}, + {m68k_op_svc_8_pi , 0xfff8, 0x58d8, { 12, 12, 10}}, + {m68k_op_svc_8_pd , 0xfff8, 0x58e0, { 14, 14, 11}}, + {m68k_op_svc_8_di , 0xfff8, 0x58e8, { 16, 16, 11}}, + {m68k_op_svc_8_ix , 0xfff8, 0x58f0, { 18, 18, 13}}, + {m68k_op_svs_8_d , 0xfff8, 0x59c0, { 4, 4, 4}}, + {m68k_op_dbvs_16 , 0xfff8, 0x59c8, { 12, 12, 6}}, + {m68k_op_svs_8_ai , 0xfff8, 0x59d0, { 12, 12, 10}}, + {m68k_op_svs_8_pi , 0xfff8, 0x59d8, { 12, 12, 10}}, + {m68k_op_svs_8_pd , 0xfff8, 0x59e0, { 14, 14, 11}}, + {m68k_op_svs_8_di , 0xfff8, 0x59e8, { 16, 16, 11}}, + {m68k_op_svs_8_ix , 0xfff8, 0x59f0, { 18, 18, 13}}, + {m68k_op_spl_8_d , 0xfff8, 0x5ac0, { 4, 4, 4}}, + {m68k_op_dbpl_16 , 0xfff8, 0x5ac8, { 12, 12, 6}}, + {m68k_op_spl_8_ai , 0xfff8, 0x5ad0, { 12, 12, 10}}, + {m68k_op_spl_8_pi , 0xfff8, 0x5ad8, { 12, 12, 10}}, + {m68k_op_spl_8_pd , 0xfff8, 0x5ae0, { 14, 14, 11}}, + {m68k_op_spl_8_di , 0xfff8, 0x5ae8, { 16, 16, 11}}, + {m68k_op_spl_8_ix , 0xfff8, 0x5af0, { 18, 18, 13}}, + {m68k_op_smi_8_d , 0xfff8, 0x5bc0, { 4, 4, 4}}, + {m68k_op_dbmi_16 , 0xfff8, 0x5bc8, { 12, 12, 6}}, + {m68k_op_smi_8_ai , 0xfff8, 0x5bd0, { 12, 12, 10}}, + {m68k_op_smi_8_pi , 0xfff8, 0x5bd8, { 12, 12, 10}}, + {m68k_op_smi_8_pd , 0xfff8, 0x5be0, { 14, 14, 11}}, + {m68k_op_smi_8_di , 0xfff8, 0x5be8, { 16, 16, 11}}, + {m68k_op_smi_8_ix , 0xfff8, 0x5bf0, { 18, 18, 13}}, + {m68k_op_sge_8_d , 0xfff8, 0x5cc0, { 4, 4, 4}}, + {m68k_op_dbge_16 , 0xfff8, 0x5cc8, { 12, 12, 6}}, + {m68k_op_sge_8_ai , 0xfff8, 0x5cd0, { 12, 12, 10}}, + {m68k_op_sge_8_pi , 0xfff8, 0x5cd8, { 12, 12, 10}}, + {m68k_op_sge_8_pd , 0xfff8, 0x5ce0, { 14, 14, 11}}, + {m68k_op_sge_8_di , 0xfff8, 0x5ce8, { 16, 16, 11}}, + {m68k_op_sge_8_ix , 0xfff8, 0x5cf0, { 18, 18, 13}}, + {m68k_op_slt_8_d , 0xfff8, 0x5dc0, { 4, 4, 4}}, + {m68k_op_dblt_16 , 0xfff8, 0x5dc8, { 12, 12, 6}}, + {m68k_op_slt_8_ai , 0xfff8, 0x5dd0, { 12, 12, 10}}, + {m68k_op_slt_8_pi , 0xfff8, 0x5dd8, { 12, 12, 10}}, + {m68k_op_slt_8_pd , 0xfff8, 0x5de0, { 14, 14, 11}}, + {m68k_op_slt_8_di , 0xfff8, 0x5de8, { 16, 16, 11}}, + {m68k_op_slt_8_ix , 0xfff8, 0x5df0, { 18, 18, 13}}, + {m68k_op_sgt_8_d , 0xfff8, 0x5ec0, { 4, 4, 4}}, + {m68k_op_dbgt_16 , 0xfff8, 0x5ec8, { 12, 12, 6}}, + {m68k_op_sgt_8_ai , 0xfff8, 0x5ed0, { 12, 12, 10}}, + {m68k_op_sgt_8_pi , 0xfff8, 0x5ed8, { 12, 12, 10}}, + {m68k_op_sgt_8_pd , 0xfff8, 0x5ee0, { 14, 14, 11}}, + {m68k_op_sgt_8_di , 0xfff8, 0x5ee8, { 16, 16, 11}}, + {m68k_op_sgt_8_ix , 0xfff8, 0x5ef0, { 18, 18, 13}}, + {m68k_op_sle_8_d , 0xfff8, 0x5fc0, { 4, 4, 4}}, + {m68k_op_dble_16 , 0xfff8, 0x5fc8, { 12, 12, 6}}, + {m68k_op_sle_8_ai , 0xfff8, 0x5fd0, { 12, 12, 10}}, + {m68k_op_sle_8_pi , 0xfff8, 0x5fd8, { 12, 12, 10}}, + {m68k_op_sle_8_pd , 0xfff8, 0x5fe0, { 14, 14, 11}}, + {m68k_op_sle_8_di , 0xfff8, 0x5fe8, { 16, 16, 11}}, + {m68k_op_sle_8_ix , 0xfff8, 0x5ff0, { 18, 18, 13}}, + {m68k_op_sbcd_8_mm_ax7 , 0xfff8, 0x8f08, { 18, 18, 16}}, + {m68k_op_pack_16_mm_ax7 , 0xfff8, 0x8f48, { 0, 0, 13}}, + {m68k_op_unpk_16_mm_ax7 , 0xfff8, 0x8f88, { 0, 0, 13}}, + {m68k_op_subx_8_mm_ax7 , 0xfff8, 0x9f08, { 18, 18, 12}}, + {m68k_op_cmpm_8_ax7 , 0xfff8, 0xbf08, { 12, 12, 9}}, + {m68k_op_abcd_8_mm_ax7 , 0xfff8, 0xcf08, { 18, 18, 16}}, + {m68k_op_addx_8_mm_ax7 , 0xfff8, 0xdf08, { 18, 18, 12}}, + {m68k_op_asr_16_ai , 0xfff8, 0xe0d0, { 12, 12, 9}}, + {m68k_op_asr_16_pi , 0xfff8, 0xe0d8, { 12, 12, 9}}, + {m68k_op_asr_16_pd , 0xfff8, 0xe0e0, { 14, 14, 10}}, + {m68k_op_asr_16_di , 0xfff8, 0xe0e8, { 16, 16, 10}}, + {m68k_op_asr_16_ix , 0xfff8, 0xe0f0, { 18, 18, 12}}, + {m68k_op_asl_16_ai , 0xfff8, 0xe1d0, { 12, 12, 10}}, + {m68k_op_asl_16_pi , 0xfff8, 0xe1d8, { 12, 12, 10}}, + {m68k_op_asl_16_pd , 0xfff8, 0xe1e0, { 14, 14, 11}}, + {m68k_op_asl_16_di , 0xfff8, 0xe1e8, { 16, 16, 11}}, + {m68k_op_asl_16_ix , 0xfff8, 0xe1f0, { 18, 18, 13}}, + {m68k_op_lsr_16_ai , 0xfff8, 0xe2d0, { 12, 12, 9}}, + {m68k_op_lsr_16_pi , 0xfff8, 0xe2d8, { 12, 12, 9}}, + {m68k_op_lsr_16_pd , 0xfff8, 0xe2e0, { 14, 14, 10}}, + {m68k_op_lsr_16_di , 0xfff8, 0xe2e8, { 16, 16, 10}}, + {m68k_op_lsr_16_ix , 0xfff8, 0xe2f0, { 18, 18, 12}}, + {m68k_op_lsl_16_ai , 0xfff8, 0xe3d0, { 12, 12, 9}}, + {m68k_op_lsl_16_pi , 0xfff8, 0xe3d8, { 12, 12, 9}}, + {m68k_op_lsl_16_pd , 0xfff8, 0xe3e0, { 14, 14, 10}}, + {m68k_op_lsl_16_di , 0xfff8, 0xe3e8, { 16, 16, 10}}, + {m68k_op_lsl_16_ix , 0xfff8, 0xe3f0, { 18, 18, 12}}, + {m68k_op_roxr_16_ai , 0xfff8, 0xe4d0, { 12, 12, 9}}, + {m68k_op_roxr_16_pi , 0xfff8, 0xe4d8, { 12, 12, 9}}, + {m68k_op_roxr_16_pd , 0xfff8, 0xe4e0, { 14, 14, 10}}, + {m68k_op_roxr_16_di , 0xfff8, 0xe4e8, { 16, 16, 10}}, + {m68k_op_roxr_16_ix , 0xfff8, 0xe4f0, { 18, 18, 12}}, + {m68k_op_roxl_16_ai , 0xfff8, 0xe5d0, { 12, 12, 9}}, + {m68k_op_roxl_16_pi , 0xfff8, 0xe5d8, { 12, 12, 9}}, + {m68k_op_roxl_16_pd , 0xfff8, 0xe5e0, { 14, 14, 10}}, + {m68k_op_roxl_16_di , 0xfff8, 0xe5e8, { 16, 16, 10}}, + {m68k_op_roxl_16_ix , 0xfff8, 0xe5f0, { 18, 18, 12}}, + {m68k_op_ror_16_ai , 0xfff8, 0xe6d0, { 12, 12, 11}}, + {m68k_op_ror_16_pi , 0xfff8, 0xe6d8, { 12, 12, 11}}, + {m68k_op_ror_16_pd , 0xfff8, 0xe6e0, { 14, 14, 12}}, + {m68k_op_ror_16_di , 0xfff8, 0xe6e8, { 16, 16, 12}}, + {m68k_op_ror_16_ix , 0xfff8, 0xe6f0, { 18, 18, 14}}, + {m68k_op_rol_16_ai , 0xfff8, 0xe7d0, { 12, 12, 11}}, + {m68k_op_rol_16_pi , 0xfff8, 0xe7d8, { 12, 12, 11}}, + {m68k_op_rol_16_pd , 0xfff8, 0xe7e0, { 14, 14, 12}}, + {m68k_op_rol_16_di , 0xfff8, 0xe7e8, { 16, 16, 12}}, + {m68k_op_rol_16_ix , 0xfff8, 0xe7f0, { 18, 18, 14}}, + {m68k_op_bftst_32_d , 0xfff8, 0xe8c0, { 0, 0, 6}}, + {m68k_op_bftst_32_ai , 0xfff8, 0xe8d0, { 0, 0, 17}}, + {m68k_op_bftst_32_di , 0xfff8, 0xe8e8, { 0, 0, 18}}, + {m68k_op_bftst_32_ix , 0xfff8, 0xe8f0, { 0, 0, 20}}, + {m68k_op_bfextu_32_d , 0xfff8, 0xe9c0, { 0, 0, 8}}, + {m68k_op_bfextu_32_ai , 0xfff8, 0xe9d0, { 0, 0, 19}}, + {m68k_op_bfextu_32_di , 0xfff8, 0xe9e8, { 0, 0, 20}}, + {m68k_op_bfextu_32_ix , 0xfff8, 0xe9f0, { 0, 0, 22}}, + {m68k_op_bfchg_32_d , 0xfff8, 0xeac0, { 0, 0, 12}}, + {m68k_op_bfchg_32_ai , 0xfff8, 0xead0, { 0, 0, 24}}, + {m68k_op_bfchg_32_di , 0xfff8, 0xeae8, { 0, 0, 25}}, + {m68k_op_bfchg_32_ix , 0xfff8, 0xeaf0, { 0, 0, 27}}, + {m68k_op_bfexts_32_d , 0xfff8, 0xebc0, { 0, 0, 8}}, + {m68k_op_bfexts_32_ai , 0xfff8, 0xebd0, { 0, 0, 19}}, + {m68k_op_bfexts_32_di , 0xfff8, 0xebe8, { 0, 0, 20}}, + {m68k_op_bfexts_32_ix , 0xfff8, 0xebf0, { 0, 0, 22}}, + {m68k_op_bfclr_32_d , 0xfff8, 0xecc0, { 0, 0, 12}}, + {m68k_op_bfclr_32_ai , 0xfff8, 0xecd0, { 0, 0, 24}}, + {m68k_op_bfclr_32_di , 0xfff8, 0xece8, { 0, 0, 25}}, + {m68k_op_bfclr_32_ix , 0xfff8, 0xecf0, { 0, 0, 27}}, + {m68k_op_bfffo_32_d , 0xfff8, 0xedc0, { 0, 0, 18}}, + {m68k_op_bfffo_32_ai , 0xfff8, 0xedd0, { 0, 0, 32}}, + {m68k_op_bfffo_32_di , 0xfff8, 0xede8, { 0, 0, 33}}, + {m68k_op_bfffo_32_ix , 0xfff8, 0xedf0, { 0, 0, 35}}, + {m68k_op_bfset_32_d , 0xfff8, 0xeec0, { 0, 0, 12}}, + {m68k_op_bfset_32_ai , 0xfff8, 0xeed0, { 0, 0, 24}}, + {m68k_op_bfset_32_di , 0xfff8, 0xeee8, { 0, 0, 25}}, + {m68k_op_bfset_32_ix , 0xfff8, 0xeef0, { 0, 0, 27}}, + {m68k_op_bfins_32_d , 0xfff8, 0xefc0, { 0, 0, 10}}, + {m68k_op_bfins_32_ai , 0xfff8, 0xefd0, { 0, 0, 21}}, + {m68k_op_bfins_32_di , 0xfff8, 0xefe8, { 0, 0, 22}}, + {m68k_op_bfins_32_ix , 0xfff8, 0xeff0, { 0, 0, 24}}, + {m68k_op_ori_8_pi7 , 0xffff, 0x001f, { 16, 16, 8}}, + {m68k_op_ori_8_pd7 , 0xffff, 0x0027, { 18, 18, 9}}, + {m68k_op_ori_8_aw , 0xffff, 0x0038, { 20, 20, 8}}, + {m68k_op_ori_8_al , 0xffff, 0x0039, { 24, 24, 8}}, + {m68k_op_ori_16_toc , 0xffff, 0x003c, { 20, 16, 12}}, + {m68k_op_ori_16_aw , 0xffff, 0x0078, { 20, 20, 8}}, + {m68k_op_ori_16_al , 0xffff, 0x0079, { 24, 24, 8}}, + {m68k_op_ori_16_tos , 0xffff, 0x007c, { 20, 16, 12}}, + {m68k_op_ori_32_aw , 0xffff, 0x00b8, { 32, 32, 8}}, + {m68k_op_ori_32_al , 0xffff, 0x00b9, { 36, 36, 8}}, + {m68k_op_chk2cmp2_8_aw , 0xffff, 0x00f8, { 0, 0, 22}}, + {m68k_op_chk2cmp2_8_al , 0xffff, 0x00f9, { 0, 0, 22}}, + {m68k_op_chk2cmp2_8_pcdi , 0xffff, 0x00fa, { 0, 0, 23}}, + {m68k_op_chk2cmp2_8_pcix , 0xffff, 0x00fb, { 0, 0, 25}}, + {m68k_op_andi_8_pi7 , 0xffff, 0x021f, { 16, 16, 8}}, + {m68k_op_andi_8_pd7 , 0xffff, 0x0227, { 18, 18, 9}}, + {m68k_op_andi_8_aw , 0xffff, 0x0238, { 20, 20, 8}}, + {m68k_op_andi_8_al , 0xffff, 0x0239, { 24, 24, 8}}, + {m68k_op_andi_16_toc , 0xffff, 0x023c, { 20, 16, 12}}, + {m68k_op_andi_16_aw , 0xffff, 0x0278, { 20, 20, 8}}, + {m68k_op_andi_16_al , 0xffff, 0x0279, { 24, 24, 8}}, + {m68k_op_andi_16_tos , 0xffff, 0x027c, { 20, 16, 12}}, + {m68k_op_andi_32_aw , 0xffff, 0x02b8, { 32, 32, 8}}, + {m68k_op_andi_32_al , 0xffff, 0x02b9, { 36, 36, 8}}, + {m68k_op_chk2cmp2_16_aw , 0xffff, 0x02f8, { 0, 0, 22}}, + {m68k_op_chk2cmp2_16_al , 0xffff, 0x02f9, { 0, 0, 22}}, + {m68k_op_chk2cmp2_16_pcdi , 0xffff, 0x02fa, { 0, 0, 23}}, + {m68k_op_chk2cmp2_16_pcix , 0xffff, 0x02fb, { 0, 0, 25}}, + {m68k_op_subi_8_pi7 , 0xffff, 0x041f, { 16, 16, 8}}, + {m68k_op_subi_8_pd7 , 0xffff, 0x0427, { 18, 18, 9}}, + {m68k_op_subi_8_aw , 0xffff, 0x0438, { 20, 20, 8}}, + {m68k_op_subi_8_al , 0xffff, 0x0439, { 24, 24, 8}}, + {m68k_op_subi_16_aw , 0xffff, 0x0478, { 20, 20, 8}}, + {m68k_op_subi_16_al , 0xffff, 0x0479, { 24, 24, 8}}, + {m68k_op_subi_32_aw , 0xffff, 0x04b8, { 32, 32, 8}}, + {m68k_op_subi_32_al , 0xffff, 0x04b9, { 36, 36, 8}}, + {m68k_op_chk2cmp2_32_aw , 0xffff, 0x04f8, { 0, 0, 22}}, + {m68k_op_chk2cmp2_32_al , 0xffff, 0x04f9, { 0, 0, 22}}, + {m68k_op_chk2cmp2_32_pcdi , 0xffff, 0x04fa, { 0, 0, 23}}, + {m68k_op_chk2cmp2_32_pcix , 0xffff, 0x04fb, { 0, 0, 25}}, + {m68k_op_addi_8_pi7 , 0xffff, 0x061f, { 16, 16, 8}}, + {m68k_op_addi_8_pd7 , 0xffff, 0x0627, { 18, 18, 9}}, + {m68k_op_addi_8_aw , 0xffff, 0x0638, { 20, 20, 8}}, + {m68k_op_addi_8_al , 0xffff, 0x0639, { 24, 24, 8}}, + {m68k_op_addi_16_aw , 0xffff, 0x0678, { 20, 20, 8}}, + {m68k_op_addi_16_al , 0xffff, 0x0679, { 24, 24, 8}}, + {m68k_op_addi_32_aw , 0xffff, 0x06b8, { 32, 32, 8}}, + {m68k_op_addi_32_al , 0xffff, 0x06b9, { 36, 36, 8}}, + {m68k_op_callm_32_aw , 0xffff, 0x06f8, { 0, 0, 64}}, + {m68k_op_callm_32_al , 0xffff, 0x06f9, { 0, 0, 64}}, + {m68k_op_callm_32_pcdi , 0xffff, 0x06fa, { 0, 0, 65}}, + {m68k_op_callm_32_pcix , 0xffff, 0x06fb, { 0, 0, 67}}, + {m68k_op_btst_8_s_pi7 , 0xffff, 0x081f, { 12, 12, 8}}, + {m68k_op_btst_8_s_pd7 , 0xffff, 0x0827, { 14, 14, 9}}, + {m68k_op_btst_8_s_aw , 0xffff, 0x0838, { 16, 16, 8}}, + {m68k_op_btst_8_s_al , 0xffff, 0x0839, { 20, 20, 8}}, + {m68k_op_btst_8_s_pcdi , 0xffff, 0x083a, { 16, 16, 9}}, + {m68k_op_btst_8_s_pcix , 0xffff, 0x083b, { 18, 18, 11}}, + {m68k_op_bchg_8_s_pi7 , 0xffff, 0x085f, { 16, 16, 8}}, + {m68k_op_bchg_8_s_pd7 , 0xffff, 0x0867, { 18, 18, 9}}, + {m68k_op_bchg_8_s_aw , 0xffff, 0x0878, { 20, 20, 8}}, + {m68k_op_bchg_8_s_al , 0xffff, 0x0879, { 24, 24, 8}}, + {m68k_op_bclr_8_s_pi7 , 0xffff, 0x089f, { 16, 16, 8}}, + {m68k_op_bclr_8_s_pd7 , 0xffff, 0x08a7, { 18, 18, 9}}, + {m68k_op_bclr_8_s_aw , 0xffff, 0x08b8, { 20, 20, 8}}, + {m68k_op_bclr_8_s_al , 0xffff, 0x08b9, { 24, 24, 8}}, + {m68k_op_bset_8_s_pi7 , 0xffff, 0x08df, { 16, 16, 8}}, + {m68k_op_bset_8_s_pd7 , 0xffff, 0x08e7, { 18, 18, 9}}, + {m68k_op_bset_8_s_aw , 0xffff, 0x08f8, { 20, 20, 8}}, + {m68k_op_bset_8_s_al , 0xffff, 0x08f9, { 24, 24, 8}}, + {m68k_op_eori_8_pi7 , 0xffff, 0x0a1f, { 16, 16, 8}}, + {m68k_op_eori_8_pd7 , 0xffff, 0x0a27, { 18, 18, 9}}, + {m68k_op_eori_8_aw , 0xffff, 0x0a38, { 20, 20, 8}}, + {m68k_op_eori_8_al , 0xffff, 0x0a39, { 24, 24, 8}}, + {m68k_op_eori_16_toc , 0xffff, 0x0a3c, { 20, 16, 12}}, + {m68k_op_eori_16_aw , 0xffff, 0x0a78, { 20, 20, 8}}, + {m68k_op_eori_16_al , 0xffff, 0x0a79, { 24, 24, 8}}, + {m68k_op_eori_16_tos , 0xffff, 0x0a7c, { 20, 16, 12}}, + {m68k_op_eori_32_aw , 0xffff, 0x0ab8, { 32, 32, 8}}, + {m68k_op_eori_32_al , 0xffff, 0x0ab9, { 36, 36, 8}}, + {m68k_op_cas_8_pi7 , 0xffff, 0x0adf, { 0, 0, 16}}, + {m68k_op_cas_8_pd7 , 0xffff, 0x0ae7, { 0, 0, 17}}, + {m68k_op_cas_8_aw , 0xffff, 0x0af8, { 0, 0, 16}}, + {m68k_op_cas_8_al , 0xffff, 0x0af9, { 0, 0, 16}}, + {m68k_op_cmpi_8_pi7 , 0xffff, 0x0c1f, { 12, 12, 6}}, + {m68k_op_cmpi_8_pd7 , 0xffff, 0x0c27, { 14, 14, 7}}, + {m68k_op_cmpi_8_aw , 0xffff, 0x0c38, { 16, 16, 6}}, + {m68k_op_cmpi_8_al , 0xffff, 0x0c39, { 20, 20, 6}}, + {m68k_op_cmpi_8_pcdi , 0xffff, 0x0c3a, { 0, 0, 7}}, + {m68k_op_cmpi_8_pcix , 0xffff, 0x0c3b, { 0, 0, 9}}, + {m68k_op_cmpi_16_aw , 0xffff, 0x0c78, { 16, 16, 6}}, + {m68k_op_cmpi_16_al , 0xffff, 0x0c79, { 20, 20, 6}}, + {m68k_op_cmpi_16_pcdi , 0xffff, 0x0c7a, { 0, 0, 7}}, + {m68k_op_cmpi_16_pcix , 0xffff, 0x0c7b, { 0, 0, 9}}, + {m68k_op_cmpi_32_aw , 0xffff, 0x0cb8, { 24, 24, 6}}, + {m68k_op_cmpi_32_al , 0xffff, 0x0cb9, { 28, 28, 6}}, + {m68k_op_cmpi_32_pcdi , 0xffff, 0x0cba, { 0, 0, 7}}, + {m68k_op_cmpi_32_pcix , 0xffff, 0x0cbb, { 0, 0, 9}}, + {m68k_op_cas_16_aw , 0xffff, 0x0cf8, { 0, 0, 16}}, + {m68k_op_cas_16_al , 0xffff, 0x0cf9, { 0, 0, 16}}, + {m68k_op_cas2_16 , 0xffff, 0x0cfc, { 0, 0, 12}}, + {m68k_op_moves_8_pi7 , 0xffff, 0x0e1f, { 0, 18, 9}}, + {m68k_op_moves_8_pd7 , 0xffff, 0x0e27, { 0, 20, 10}}, + {m68k_op_moves_8_aw , 0xffff, 0x0e38, { 0, 26, 9}}, + {m68k_op_moves_8_al , 0xffff, 0x0e39, { 0, 30, 9}}, + {m68k_op_moves_16_aw , 0xffff, 0x0e78, { 0, 26, 9}}, + {m68k_op_moves_16_al , 0xffff, 0x0e79, { 0, 30, 9}}, + {m68k_op_moves_32_aw , 0xffff, 0x0eb8, { 0, 32, 9}}, + {m68k_op_moves_32_al , 0xffff, 0x0eb9, { 0, 36, 9}}, + {m68k_op_cas_32_aw , 0xffff, 0x0ef8, { 0, 0, 16}}, + {m68k_op_cas_32_al , 0xffff, 0x0ef9, { 0, 0, 16}}, + {m68k_op_cas2_32 , 0xffff, 0x0efc, { 0, 0, 12}}, + {m68k_op_move_8_aw_pi7 , 0xffff, 0x11df, { 16, 16, 8}}, + {m68k_op_move_8_aw_pd7 , 0xffff, 0x11e7, { 18, 18, 9}}, + {m68k_op_move_8_aw_aw , 0xffff, 0x11f8, { 20, 20, 8}}, + {m68k_op_move_8_aw_al , 0xffff, 0x11f9, { 24, 24, 8}}, + {m68k_op_move_8_aw_pcdi , 0xffff, 0x11fa, { 20, 20, 9}}, + {m68k_op_move_8_aw_pcix , 0xffff, 0x11fb, { 22, 22, 11}}, + {m68k_op_move_8_aw_i , 0xffff, 0x11fc, { 16, 16, 6}}, + {m68k_op_move_8_al_pi7 , 0xffff, 0x13df, { 20, 20, 10}}, + {m68k_op_move_8_al_pd7 , 0xffff, 0x13e7, { 22, 22, 11}}, + {m68k_op_move_8_al_aw , 0xffff, 0x13f8, { 24, 24, 10}}, + {m68k_op_move_8_al_al , 0xffff, 0x13f9, { 28, 28, 10}}, + {m68k_op_move_8_al_pcdi , 0xffff, 0x13fa, { 24, 24, 11}}, + {m68k_op_move_8_al_pcix , 0xffff, 0x13fb, { 26, 26, 13}}, + {m68k_op_move_8_al_i , 0xffff, 0x13fc, { 20, 20, 8}}, + {m68k_op_move_8_pi7_pi7 , 0xffff, 0x1edf, { 12, 12, 8}}, + {m68k_op_move_8_pi7_pd7 , 0xffff, 0x1ee7, { 14, 14, 9}}, + {m68k_op_move_8_pi7_aw , 0xffff, 0x1ef8, { 16, 16, 8}}, + {m68k_op_move_8_pi7_al , 0xffff, 0x1ef9, { 20, 20, 8}}, + {m68k_op_move_8_pi7_pcdi , 0xffff, 0x1efa, { 16, 16, 9}}, + {m68k_op_move_8_pi7_pcix , 0xffff, 0x1efb, { 18, 18, 11}}, + {m68k_op_move_8_pi7_i , 0xffff, 0x1efc, { 12, 12, 6}}, + {m68k_op_move_8_pd7_pi7 , 0xffff, 0x1f1f, { 12, 12, 9}}, + {m68k_op_move_8_pd7_pd7 , 0xffff, 0x1f27, { 14, 14, 10}}, + {m68k_op_move_8_pd7_aw , 0xffff, 0x1f38, { 16, 16, 9}}, + {m68k_op_move_8_pd7_al , 0xffff, 0x1f39, { 20, 20, 9}}, + {m68k_op_move_8_pd7_pcdi , 0xffff, 0x1f3a, { 16, 16, 10}}, + {m68k_op_move_8_pd7_pcix , 0xffff, 0x1f3b, { 18, 18, 12}}, + {m68k_op_move_8_pd7_i , 0xffff, 0x1f3c, { 12, 12, 7}}, + {m68k_op_move_32_aw_aw , 0xffff, 0x21f8, { 28, 28, 8}}, + {m68k_op_move_32_aw_al , 0xffff, 0x21f9, { 32, 32, 8}}, + {m68k_op_move_32_aw_pcdi , 0xffff, 0x21fa, { 28, 28, 9}}, + {m68k_op_move_32_aw_pcix , 0xffff, 0x21fb, { 30, 30, 11}}, + {m68k_op_move_32_aw_i , 0xffff, 0x21fc, { 24, 24, 8}}, + {m68k_op_move_32_al_aw , 0xffff, 0x23f8, { 32, 32, 10}}, + {m68k_op_move_32_al_al , 0xffff, 0x23f9, { 36, 36, 10}}, + {m68k_op_move_32_al_pcdi , 0xffff, 0x23fa, { 32, 32, 11}}, + {m68k_op_move_32_al_pcix , 0xffff, 0x23fb, { 34, 34, 13}}, + {m68k_op_move_32_al_i , 0xffff, 0x23fc, { 28, 28, 10}}, + {m68k_op_move_16_aw_aw , 0xffff, 0x31f8, { 20, 20, 8}}, + {m68k_op_move_16_aw_al , 0xffff, 0x31f9, { 24, 24, 8}}, + {m68k_op_move_16_aw_pcdi , 0xffff, 0x31fa, { 20, 20, 9}}, + {m68k_op_move_16_aw_pcix , 0xffff, 0x31fb, { 22, 22, 11}}, + {m68k_op_move_16_aw_i , 0xffff, 0x31fc, { 16, 16, 6}}, + {m68k_op_move_16_al_aw , 0xffff, 0x33f8, { 24, 24, 10}}, + {m68k_op_move_16_al_al , 0xffff, 0x33f9, { 28, 28, 10}}, + {m68k_op_move_16_al_pcdi , 0xffff, 0x33fa, { 24, 24, 11}}, + {m68k_op_move_16_al_pcix , 0xffff, 0x33fb, { 26, 26, 13}}, + {m68k_op_move_16_al_i , 0xffff, 0x33fc, { 20, 20, 8}}, + {m68k_op_negx_8_pi7 , 0xffff, 0x401f, { 12, 12, 8}}, + {m68k_op_negx_8_pd7 , 0xffff, 0x4027, { 14, 14, 9}}, + {m68k_op_negx_8_aw , 0xffff, 0x4038, { 16, 16, 8}}, + {m68k_op_negx_8_al , 0xffff, 0x4039, { 20, 20, 8}}, + {m68k_op_negx_16_aw , 0xffff, 0x4078, { 16, 16, 8}}, + {m68k_op_negx_16_al , 0xffff, 0x4079, { 20, 20, 8}}, + {m68k_op_negx_32_aw , 0xffff, 0x40b8, { 24, 24, 8}}, + {m68k_op_negx_32_al , 0xffff, 0x40b9, { 28, 28, 8}}, + {m68k_op_move_16_frs_aw , 0xffff, 0x40f8, { 16, 16, 12}}, + {m68k_op_move_16_frs_al , 0xffff, 0x40f9, { 20, 20, 12}}, + {m68k_op_clr_8_pi7 , 0xffff, 0x421f, { 12, 8, 8}}, + {m68k_op_clr_8_pd7 , 0xffff, 0x4227, { 14, 10, 9}}, + {m68k_op_clr_8_aw , 0xffff, 0x4238, { 16, 12, 8}}, + {m68k_op_clr_8_al , 0xffff, 0x4239, { 20, 14, 8}}, + {m68k_op_clr_16_aw , 0xffff, 0x4278, { 16, 12, 8}}, + {m68k_op_clr_16_al , 0xffff, 0x4279, { 20, 14, 8}}, + {m68k_op_clr_32_aw , 0xffff, 0x42b8, { 24, 16, 8}}, + {m68k_op_clr_32_al , 0xffff, 0x42b9, { 28, 20, 8}}, + {m68k_op_move_16_frc_aw , 0xffff, 0x42f8, { 0, 16, 8}}, + {m68k_op_move_16_frc_al , 0xffff, 0x42f9, { 0, 20, 8}}, + {m68k_op_neg_8_pi7 , 0xffff, 0x441f, { 12, 12, 8}}, + {m68k_op_neg_8_pd7 , 0xffff, 0x4427, { 14, 14, 9}}, + {m68k_op_neg_8_aw , 0xffff, 0x4438, { 16, 16, 8}}, + {m68k_op_neg_8_al , 0xffff, 0x4439, { 20, 20, 8}}, + {m68k_op_neg_16_aw , 0xffff, 0x4478, { 16, 16, 8}}, + {m68k_op_neg_16_al , 0xffff, 0x4479, { 20, 20, 8}}, + {m68k_op_neg_32_aw , 0xffff, 0x44b8, { 24, 24, 8}}, + {m68k_op_neg_32_al , 0xffff, 0x44b9, { 28, 28, 8}}, + {m68k_op_move_16_toc_aw , 0xffff, 0x44f8, { 20, 20, 8}}, + {m68k_op_move_16_toc_al , 0xffff, 0x44f9, { 24, 24, 8}}, + {m68k_op_move_16_toc_pcdi , 0xffff, 0x44fa, { 20, 20, 9}}, + {m68k_op_move_16_toc_pcix , 0xffff, 0x44fb, { 22, 22, 11}}, + {m68k_op_move_16_toc_i , 0xffff, 0x44fc, { 16, 16, 6}}, + {m68k_op_not_8_pi7 , 0xffff, 0x461f, { 12, 12, 8}}, + {m68k_op_not_8_pd7 , 0xffff, 0x4627, { 14, 14, 9}}, + {m68k_op_not_8_aw , 0xffff, 0x4638, { 16, 16, 8}}, + {m68k_op_not_8_al , 0xffff, 0x4639, { 20, 20, 8}}, + {m68k_op_not_16_aw , 0xffff, 0x4678, { 16, 16, 8}}, + {m68k_op_not_16_al , 0xffff, 0x4679, { 20, 20, 8}}, + {m68k_op_not_32_aw , 0xffff, 0x46b8, { 24, 24, 8}}, + {m68k_op_not_32_al , 0xffff, 0x46b9, { 28, 28, 8}}, + {m68k_op_move_16_tos_aw , 0xffff, 0x46f8, { 20, 20, 12}}, + {m68k_op_move_16_tos_al , 0xffff, 0x46f9, { 24, 24, 12}}, + {m68k_op_move_16_tos_pcdi , 0xffff, 0x46fa, { 20, 20, 13}}, + {m68k_op_move_16_tos_pcix , 0xffff, 0x46fb, { 22, 22, 15}}, + {m68k_op_move_16_tos_i , 0xffff, 0x46fc, { 16, 16, 10}}, + {m68k_op_link_32_a7 , 0xffff, 0x480f, { 0, 0, 6}}, + {m68k_op_nbcd_8_pi7 , 0xffff, 0x481f, { 12, 12, 10}}, + {m68k_op_nbcd_8_pd7 , 0xffff, 0x4827, { 14, 14, 11}}, + {m68k_op_nbcd_8_aw , 0xffff, 0x4838, { 16, 16, 10}}, + {m68k_op_nbcd_8_al , 0xffff, 0x4839, { 20, 20, 10}}, + {m68k_op_pea_32_aw , 0xffff, 0x4878, { 16, 16, 9}}, + {m68k_op_pea_32_al , 0xffff, 0x4879, { 20, 20, 9}}, + {m68k_op_pea_32_pcdi , 0xffff, 0x487a, { 16, 16, 10}}, + {m68k_op_pea_32_pcix , 0xffff, 0x487b, { 20, 20, 12}}, + {m68k_op_movem_16_re_aw , 0xffff, 0x48b8, { 16, 16, 8}}, + {m68k_op_movem_16_re_al , 0xffff, 0x48b9, { 20, 20, 8}}, + {m68k_op_movem_32_re_aw , 0xffff, 0x48f8, { 20, 20, 8}}, + {m68k_op_movem_32_re_al , 0xffff, 0x48f9, { 24, 24, 8}}, + {m68k_op_tst_8_pi7 , 0xffff, 0x4a1f, { 8, 8, 6}}, + {m68k_op_tst_8_pd7 , 0xffff, 0x4a27, { 10, 10, 7}}, + {m68k_op_tst_8_aw , 0xffff, 0x4a38, { 12, 12, 6}}, + {m68k_op_tst_8_al , 0xffff, 0x4a39, { 16, 16, 6}}, + {m68k_op_tst_8_pcdi , 0xffff, 0x4a3a, { 0, 0, 7}}, + {m68k_op_tst_8_pcix , 0xffff, 0x4a3b, { 0, 0, 9}}, + {m68k_op_tst_8_i , 0xffff, 0x4a3c, { 0, 0, 6}}, + {m68k_op_tst_16_aw , 0xffff, 0x4a78, { 12, 12, 6}}, + {m68k_op_tst_16_al , 0xffff, 0x4a79, { 16, 16, 6}}, + {m68k_op_tst_16_pcdi , 0xffff, 0x4a7a, { 0, 0, 7}}, + {m68k_op_tst_16_pcix , 0xffff, 0x4a7b, { 0, 0, 9}}, + {m68k_op_tst_16_i , 0xffff, 0x4a7c, { 0, 0, 6}}, + {m68k_op_tst_32_aw , 0xffff, 0x4ab8, { 16, 16, 6}}, + {m68k_op_tst_32_al , 0xffff, 0x4ab9, { 20, 20, 6}}, + {m68k_op_tst_32_pcdi , 0xffff, 0x4aba, { 0, 0, 7}}, + {m68k_op_tst_32_pcix , 0xffff, 0x4abb, { 0, 0, 9}}, + {m68k_op_tst_32_i , 0xffff, 0x4abc, { 0, 0, 6}}, + {m68k_op_tas_8_pi7 , 0xffff, 0x4adf, { 18, 18, 16}}, + {m68k_op_tas_8_pd7 , 0xffff, 0x4ae7, { 20, 20, 17}}, + {m68k_op_tas_8_aw , 0xffff, 0x4af8, { 22, 22, 16}}, + {m68k_op_tas_8_al , 0xffff, 0x4af9, { 26, 26, 16}}, + {m68k_op_illegal , 0xffff, 0x4afc, { 4, 4, 4}}, + {m68k_op_mull_32_aw , 0xffff, 0x4c38, { 0, 0, 47}}, + {m68k_op_mull_32_al , 0xffff, 0x4c39, { 0, 0, 47}}, + {m68k_op_mull_32_pcdi , 0xffff, 0x4c3a, { 0, 0, 48}}, + {m68k_op_mull_32_pcix , 0xffff, 0x4c3b, { 0, 0, 50}}, + {m68k_op_mull_32_i , 0xffff, 0x4c3c, { 0, 0, 47}}, + {m68k_op_divl_32_aw , 0xffff, 0x4c78, { 0, 0, 88}}, + {m68k_op_divl_32_al , 0xffff, 0x4c79, { 0, 0, 88}}, + {m68k_op_divl_32_pcdi , 0xffff, 0x4c7a, { 0, 0, 89}}, + {m68k_op_divl_32_pcix , 0xffff, 0x4c7b, { 0, 0, 91}}, + {m68k_op_divl_32_i , 0xffff, 0x4c7c, { 0, 0, 88}}, + {m68k_op_movem_16_er_aw , 0xffff, 0x4cb8, { 20, 20, 12}}, + {m68k_op_movem_16_er_al , 0xffff, 0x4cb9, { 24, 24, 12}}, + {m68k_op_movem_16_er_pcdi , 0xffff, 0x4cba, { 20, 20, 13}}, + {m68k_op_movem_16_er_pcix , 0xffff, 0x4cbb, { 22, 22, 15}}, + {m68k_op_movem_32_er_aw , 0xffff, 0x4cf8, { 24, 24, 12}}, + {m68k_op_movem_32_er_al , 0xffff, 0x4cf9, { 28, 28, 12}}, + {m68k_op_movem_32_er_pcdi , 0xffff, 0x4cfa, { 24, 24, 13}}, + {m68k_op_movem_32_er_pcix , 0xffff, 0x4cfb, { 26, 26, 15}}, + {m68k_op_link_16_a7 , 0xffff, 0x4e57, { 16, 16, 5}}, + {m68k_op_unlk_32_a7 , 0xffff, 0x4e5f, { 12, 12, 6}}, + {m68k_op_reset , 0xffff, 0x4e70, { 0, 0, 0}}, + {m68k_op_nop , 0xffff, 0x4e71, { 4, 4, 2}}, + {m68k_op_stop , 0xffff, 0x4e72, { 4, 4, 8}}, + {m68k_op_rte_32 , 0xffff, 0x4e73, { 20, 24, 20}}, + {m68k_op_rtd_32 , 0xffff, 0x4e74, { 0, 16, 10}}, + {m68k_op_rts_32 , 0xffff, 0x4e75, { 16, 16, 10}}, + {m68k_op_trapv , 0xffff, 0x4e76, { 4, 4, 4}}, + {m68k_op_rtr_32 , 0xffff, 0x4e77, { 20, 20, 14}}, + {m68k_op_movec_32_cr , 0xffff, 0x4e7a, { 0, 12, 6}}, + {m68k_op_movec_32_rc , 0xffff, 0x4e7b, { 0, 10, 12}}, + {m68k_op_jsr_32_aw , 0xffff, 0x4eb8, { 18, 18, 4}}, + {m68k_op_jsr_32_al , 0xffff, 0x4eb9, { 20, 20, 4}}, + {m68k_op_jsr_32_pcdi , 0xffff, 0x4eba, { 18, 18, 5}}, + {m68k_op_jsr_32_pcix , 0xffff, 0x4ebb, { 22, 22, 7}}, + {m68k_op_jmp_32_aw , 0xffff, 0x4ef8, { 10, 10, 4}}, + {m68k_op_jmp_32_al , 0xffff, 0x4ef9, { 12, 12, 4}}, + {m68k_op_jmp_32_pcdi , 0xffff, 0x4efa, { 10, 10, 5}}, + {m68k_op_jmp_32_pcix , 0xffff, 0x4efb, { 14, 14, 7}}, + {m68k_op_st_8_pi7 , 0xffff, 0x50df, { 12, 12, 10}}, + {m68k_op_st_8_pd7 , 0xffff, 0x50e7, { 14, 14, 11}}, + {m68k_op_st_8_aw , 0xffff, 0x50f8, { 16, 16, 10}}, + {m68k_op_st_8_al , 0xffff, 0x50f9, { 20, 20, 10}}, + {m68k_op_trapt_16 , 0xffff, 0x50fa, { 0, 0, 6}}, + {m68k_op_trapt_32 , 0xffff, 0x50fb, { 0, 0, 8}}, + {m68k_op_trapt , 0xffff, 0x50fc, { 0, 0, 4}}, + {m68k_op_sf_8_pi7 , 0xffff, 0x51df, { 12, 12, 10}}, + {m68k_op_sf_8_pd7 , 0xffff, 0x51e7, { 14, 14, 11}}, + {m68k_op_sf_8_aw , 0xffff, 0x51f8, { 16, 16, 10}}, + {m68k_op_sf_8_al , 0xffff, 0x51f9, { 20, 20, 10}}, + {m68k_op_trapf_16 , 0xffff, 0x51fa, { 0, 0, 6}}, + {m68k_op_trapf_32 , 0xffff, 0x51fb, { 0, 0, 8}}, + {m68k_op_trapf , 0xffff, 0x51fc, { 0, 0, 4}}, + {m68k_op_shi_8_pi7 , 0xffff, 0x52df, { 12, 12, 10}}, + {m68k_op_shi_8_pd7 , 0xffff, 0x52e7, { 14, 14, 11}}, + {m68k_op_shi_8_aw , 0xffff, 0x52f8, { 16, 16, 10}}, + {m68k_op_shi_8_al , 0xffff, 0x52f9, { 20, 20, 10}}, + {m68k_op_traphi_16 , 0xffff, 0x52fa, { 0, 0, 6}}, + {m68k_op_traphi_32 , 0xffff, 0x52fb, { 0, 0, 8}}, + {m68k_op_traphi , 0xffff, 0x52fc, { 0, 0, 4}}, + {m68k_op_sls_8_pi7 , 0xffff, 0x53df, { 12, 12, 10}}, + {m68k_op_sls_8_pd7 , 0xffff, 0x53e7, { 14, 14, 11}}, + {m68k_op_sls_8_aw , 0xffff, 0x53f8, { 16, 16, 10}}, + {m68k_op_sls_8_al , 0xffff, 0x53f9, { 20, 20, 10}}, + {m68k_op_trapls_16 , 0xffff, 0x53fa, { 0, 0, 6}}, + {m68k_op_trapls_32 , 0xffff, 0x53fb, { 0, 0, 8}}, + {m68k_op_trapls , 0xffff, 0x53fc, { 0, 0, 4}}, + {m68k_op_scc_8_pi7 , 0xffff, 0x54df, { 12, 12, 10}}, + {m68k_op_scc_8_pd7 , 0xffff, 0x54e7, { 14, 14, 11}}, + {m68k_op_scc_8_aw , 0xffff, 0x54f8, { 16, 16, 10}}, + {m68k_op_scc_8_al , 0xffff, 0x54f9, { 20, 20, 10}}, + {m68k_op_trapcc_16 , 0xffff, 0x54fa, { 0, 0, 6}}, + {m68k_op_trapcc_32 , 0xffff, 0x54fb, { 0, 0, 8}}, + {m68k_op_trapcc , 0xffff, 0x54fc, { 0, 0, 4}}, + {m68k_op_scs_8_pi7 , 0xffff, 0x55df, { 12, 12, 10}}, + {m68k_op_scs_8_pd7 , 0xffff, 0x55e7, { 14, 14, 11}}, + {m68k_op_scs_8_aw , 0xffff, 0x55f8, { 16, 16, 10}}, + {m68k_op_scs_8_al , 0xffff, 0x55f9, { 20, 20, 10}}, + {m68k_op_trapcs_16 , 0xffff, 0x55fa, { 0, 0, 6}}, + {m68k_op_trapcs_32 , 0xffff, 0x55fb, { 0, 0, 8}}, + {m68k_op_trapcs , 0xffff, 0x55fc, { 0, 0, 4}}, + {m68k_op_sne_8_pi7 , 0xffff, 0x56df, { 12, 12, 10}}, + {m68k_op_sne_8_pd7 , 0xffff, 0x56e7, { 14, 14, 11}}, + {m68k_op_sne_8_aw , 0xffff, 0x56f8, { 16, 16, 10}}, + {m68k_op_sne_8_al , 0xffff, 0x56f9, { 20, 20, 10}}, + {m68k_op_trapne_16 , 0xffff, 0x56fa, { 0, 0, 6}}, + {m68k_op_trapne_32 , 0xffff, 0x56fb, { 0, 0, 8}}, + {m68k_op_trapne , 0xffff, 0x56fc, { 0, 0, 4}}, + {m68k_op_seq_8_pi7 , 0xffff, 0x57df, { 12, 12, 10}}, + {m68k_op_seq_8_pd7 , 0xffff, 0x57e7, { 14, 14, 11}}, + {m68k_op_seq_8_aw , 0xffff, 0x57f8, { 16, 16, 10}}, + {m68k_op_seq_8_al , 0xffff, 0x57f9, { 20, 20, 10}}, + {m68k_op_trapeq_16 , 0xffff, 0x57fa, { 0, 0, 6}}, + {m68k_op_trapeq_32 , 0xffff, 0x57fb, { 0, 0, 8}}, + {m68k_op_trapeq , 0xffff, 0x57fc, { 0, 0, 4}}, + {m68k_op_svc_8_pi7 , 0xffff, 0x58df, { 12, 12, 10}}, + {m68k_op_svc_8_pd7 , 0xffff, 0x58e7, { 14, 14, 11}}, + {m68k_op_svc_8_aw , 0xffff, 0x58f8, { 16, 16, 10}}, + {m68k_op_svc_8_al , 0xffff, 0x58f9, { 20, 20, 10}}, + {m68k_op_trapvc_16 , 0xffff, 0x58fa, { 0, 0, 6}}, + {m68k_op_trapvc_32 , 0xffff, 0x58fb, { 0, 0, 8}}, + {m68k_op_trapvc , 0xffff, 0x58fc, { 0, 0, 4}}, + {m68k_op_svs_8_pi7 , 0xffff, 0x59df, { 12, 12, 10}}, + {m68k_op_svs_8_pd7 , 0xffff, 0x59e7, { 14, 14, 11}}, + {m68k_op_svs_8_aw , 0xffff, 0x59f8, { 16, 16, 10}}, + {m68k_op_svs_8_al , 0xffff, 0x59f9, { 20, 20, 10}}, + {m68k_op_trapvs_16 , 0xffff, 0x59fa, { 0, 0, 6}}, + {m68k_op_trapvs_32 , 0xffff, 0x59fb, { 0, 0, 8}}, + {m68k_op_trapvs , 0xffff, 0x59fc, { 0, 0, 4}}, + {m68k_op_spl_8_pi7 , 0xffff, 0x5adf, { 12, 12, 10}}, + {m68k_op_spl_8_pd7 , 0xffff, 0x5ae7, { 14, 14, 11}}, + {m68k_op_spl_8_aw , 0xffff, 0x5af8, { 16, 16, 10}}, + {m68k_op_spl_8_al , 0xffff, 0x5af9, { 20, 20, 10}}, + {m68k_op_trappl_16 , 0xffff, 0x5afa, { 0, 0, 6}}, + {m68k_op_trappl_32 , 0xffff, 0x5afb, { 0, 0, 8}}, + {m68k_op_trappl , 0xffff, 0x5afc, { 0, 0, 4}}, + {m68k_op_smi_8_pi7 , 0xffff, 0x5bdf, { 12, 12, 10}}, + {m68k_op_smi_8_pd7 , 0xffff, 0x5be7, { 14, 14, 11}}, + {m68k_op_smi_8_aw , 0xffff, 0x5bf8, { 16, 16, 10}}, + {m68k_op_smi_8_al , 0xffff, 0x5bf9, { 20, 20, 10}}, + {m68k_op_trapmi_16 , 0xffff, 0x5bfa, { 0, 0, 6}}, + {m68k_op_trapmi_32 , 0xffff, 0x5bfb, { 0, 0, 8}}, + {m68k_op_trapmi , 0xffff, 0x5bfc, { 0, 0, 4}}, + {m68k_op_sge_8_pi7 , 0xffff, 0x5cdf, { 12, 12, 10}}, + {m68k_op_sge_8_pd7 , 0xffff, 0x5ce7, { 14, 14, 11}}, + {m68k_op_sge_8_aw , 0xffff, 0x5cf8, { 16, 16, 10}}, + {m68k_op_sge_8_al , 0xffff, 0x5cf9, { 20, 20, 10}}, + {m68k_op_trapge_16 , 0xffff, 0x5cfa, { 0, 0, 6}}, + {m68k_op_trapge_32 , 0xffff, 0x5cfb, { 0, 0, 8}}, + {m68k_op_trapge , 0xffff, 0x5cfc, { 0, 0, 4}}, + {m68k_op_slt_8_pi7 , 0xffff, 0x5ddf, { 12, 12, 10}}, + {m68k_op_slt_8_pd7 , 0xffff, 0x5de7, { 14, 14, 11}}, + {m68k_op_slt_8_aw , 0xffff, 0x5df8, { 16, 16, 10}}, + {m68k_op_slt_8_al , 0xffff, 0x5df9, { 20, 20, 10}}, + {m68k_op_traplt_16 , 0xffff, 0x5dfa, { 0, 0, 6}}, + {m68k_op_traplt_32 , 0xffff, 0x5dfb, { 0, 0, 8}}, + {m68k_op_traplt , 0xffff, 0x5dfc, { 0, 0, 4}}, + {m68k_op_sgt_8_pi7 , 0xffff, 0x5edf, { 12, 12, 10}}, + {m68k_op_sgt_8_pd7 , 0xffff, 0x5ee7, { 14, 14, 11}}, + {m68k_op_sgt_8_aw , 0xffff, 0x5ef8, { 16, 16, 10}}, + {m68k_op_sgt_8_al , 0xffff, 0x5ef9, { 20, 20, 10}}, + {m68k_op_trapgt_16 , 0xffff, 0x5efa, { 0, 0, 6}}, + {m68k_op_trapgt_32 , 0xffff, 0x5efb, { 0, 0, 8}}, + {m68k_op_trapgt , 0xffff, 0x5efc, { 0, 0, 4}}, + {m68k_op_sle_8_pi7 , 0xffff, 0x5fdf, { 12, 12, 10}}, + {m68k_op_sle_8_pd7 , 0xffff, 0x5fe7, { 14, 14, 11}}, + {m68k_op_sle_8_aw , 0xffff, 0x5ff8, { 16, 16, 10}}, + {m68k_op_sle_8_al , 0xffff, 0x5ff9, { 20, 20, 10}}, + {m68k_op_traple_16 , 0xffff, 0x5ffa, { 0, 0, 6}}, + {m68k_op_traple_32 , 0xffff, 0x5ffb, { 0, 0, 8}}, + {m68k_op_traple , 0xffff, 0x5ffc, { 0, 0, 4}}, + {m68k_op_bra_16 , 0xffff, 0x6000, { 10, 10, 10}}, + {m68k_op_bra_32 , 0xffff, 0x60ff, { 0, 0, 10}}, + {m68k_op_bsr_16 , 0xffff, 0x6100, { 18, 18, 7}}, + {m68k_op_bsr_32 , 0xffff, 0x61ff, { 0, 0, 7}}, + {m68k_op_bhi_16 , 0xffff, 0x6200, { 10, 10, 6}}, + {m68k_op_bhi_32 , 0xffff, 0x62ff, { 0, 0, 6}}, + {m68k_op_bls_16 , 0xffff, 0x6300, { 10, 10, 6}}, + {m68k_op_bls_32 , 0xffff, 0x63ff, { 0, 0, 6}}, + {m68k_op_bcc_16 , 0xffff, 0x6400, { 10, 10, 6}}, + {m68k_op_bcc_32 , 0xffff, 0x64ff, { 0, 0, 6}}, + {m68k_op_bcs_16 , 0xffff, 0x6500, { 10, 10, 6}}, + {m68k_op_bcs_32 , 0xffff, 0x65ff, { 0, 0, 6}}, + {m68k_op_bne_16 , 0xffff, 0x6600, { 10, 10, 6}}, + {m68k_op_bne_32 , 0xffff, 0x66ff, { 0, 0, 6}}, + {m68k_op_beq_16 , 0xffff, 0x6700, { 10, 10, 6}}, + {m68k_op_beq_32 , 0xffff, 0x67ff, { 0, 0, 6}}, + {m68k_op_bvc_16 , 0xffff, 0x6800, { 10, 10, 6}}, + {m68k_op_bvc_32 , 0xffff, 0x68ff, { 0, 0, 6}}, + {m68k_op_bvs_16 , 0xffff, 0x6900, { 10, 10, 6}}, + {m68k_op_bvs_32 , 0xffff, 0x69ff, { 0, 0, 6}}, + {m68k_op_bpl_16 , 0xffff, 0x6a00, { 10, 10, 6}}, + {m68k_op_bpl_32 , 0xffff, 0x6aff, { 0, 0, 6}}, + {m68k_op_bmi_16 , 0xffff, 0x6b00, { 10, 10, 6}}, + {m68k_op_bmi_32 , 0xffff, 0x6bff, { 0, 0, 6}}, + {m68k_op_bge_16 , 0xffff, 0x6c00, { 10, 10, 6}}, + {m68k_op_bge_32 , 0xffff, 0x6cff, { 0, 0, 6}}, + {m68k_op_blt_16 , 0xffff, 0x6d00, { 10, 10, 6}}, + {m68k_op_blt_32 , 0xffff, 0x6dff, { 0, 0, 6}}, + {m68k_op_bgt_16 , 0xffff, 0x6e00, { 10, 10, 6}}, + {m68k_op_bgt_32 , 0xffff, 0x6eff, { 0, 0, 6}}, + {m68k_op_ble_16 , 0xffff, 0x6f00, { 10, 10, 6}}, + {m68k_op_ble_32 , 0xffff, 0x6fff, { 0, 0, 6}}, + {m68k_op_sbcd_8_mm_axy7 , 0xffff, 0x8f0f, { 18, 18, 16}}, + {m68k_op_pack_16_mm_axy7 , 0xffff, 0x8f4f, { 0, 0, 13}}, + {m68k_op_unpk_16_mm_axy7 , 0xffff, 0x8f8f, { 0, 0, 13}}, + {m68k_op_subx_8_mm_axy7 , 0xffff, 0x9f0f, { 18, 18, 12}}, + {m68k_op_cmpm_8_axy7 , 0xffff, 0xbf0f, { 12, 12, 9}}, + {m68k_op_abcd_8_mm_axy7 , 0xffff, 0xcf0f, { 18, 18, 16}}, + {m68k_op_addx_8_mm_axy7 , 0xffff, 0xdf0f, { 18, 18, 12}}, + {m68k_op_asr_16_aw , 0xffff, 0xe0f8, { 16, 16, 9}}, + {m68k_op_asr_16_al , 0xffff, 0xe0f9, { 20, 20, 9}}, + {m68k_op_asl_16_aw , 0xffff, 0xe1f8, { 16, 16, 10}}, + {m68k_op_asl_16_al , 0xffff, 0xe1f9, { 20, 20, 10}}, + {m68k_op_lsr_16_aw , 0xffff, 0xe2f8, { 16, 16, 9}}, + {m68k_op_lsr_16_al , 0xffff, 0xe2f9, { 20, 20, 9}}, + {m68k_op_lsl_16_aw , 0xffff, 0xe3f8, { 16, 16, 9}}, + {m68k_op_lsl_16_al , 0xffff, 0xe3f9, { 20, 20, 9}}, + {m68k_op_roxr_16_aw , 0xffff, 0xe4f8, { 16, 16, 9}}, + {m68k_op_roxr_16_al , 0xffff, 0xe4f9, { 20, 20, 9}}, + {m68k_op_roxl_16_aw , 0xffff, 0xe5f8, { 16, 16, 9}}, + {m68k_op_roxl_16_al , 0xffff, 0xe5f9, { 20, 20, 9}}, + {m68k_op_ror_16_aw , 0xffff, 0xe6f8, { 16, 16, 11}}, + {m68k_op_ror_16_al , 0xffff, 0xe6f9, { 20, 20, 11}}, + {m68k_op_rol_16_aw , 0xffff, 0xe7f8, { 16, 16, 11}}, + {m68k_op_rol_16_al , 0xffff, 0xe7f9, { 20, 20, 11}}, + {m68k_op_bftst_32_aw , 0xffff, 0xe8f8, { 0, 0, 17}}, + {m68k_op_bftst_32_al , 0xffff, 0xe8f9, { 0, 0, 17}}, + {m68k_op_bftst_32_pcdi , 0xffff, 0xe8fa, { 0, 0, 18}}, + {m68k_op_bftst_32_pcix , 0xffff, 0xe8fb, { 0, 0, 20}}, + {m68k_op_bfextu_32_aw , 0xffff, 0xe9f8, { 0, 0, 19}}, + {m68k_op_bfextu_32_al , 0xffff, 0xe9f9, { 0, 0, 19}}, + {m68k_op_bfextu_32_pcdi , 0xffff, 0xe9fa, { 0, 0, 20}}, + {m68k_op_bfextu_32_pcix , 0xffff, 0xe9fb, { 0, 0, 22}}, + {m68k_op_bfchg_32_aw , 0xffff, 0xeaf8, { 0, 0, 24}}, + {m68k_op_bfchg_32_al , 0xffff, 0xeaf9, { 0, 0, 24}}, + {m68k_op_bfexts_32_aw , 0xffff, 0xebf8, { 0, 0, 19}}, + {m68k_op_bfexts_32_al , 0xffff, 0xebf9, { 0, 0, 19}}, + {m68k_op_bfexts_32_pcdi , 0xffff, 0xebfa, { 0, 0, 20}}, + {m68k_op_bfexts_32_pcix , 0xffff, 0xebfb, { 0, 0, 22}}, + {m68k_op_bfclr_32_aw , 0xffff, 0xecf8, { 0, 0, 24}}, + {m68k_op_bfclr_32_al , 0xffff, 0xecf9, { 0, 0, 24}}, + {m68k_op_bfffo_32_aw , 0xffff, 0xedf8, { 0, 0, 32}}, + {m68k_op_bfffo_32_al , 0xffff, 0xedf9, { 0, 0, 32}}, + {m68k_op_bfffo_32_pcdi , 0xffff, 0xedfa, { 0, 0, 33}}, + {m68k_op_bfffo_32_pcix , 0xffff, 0xedfb, { 0, 0, 35}}, + {m68k_op_bfset_32_aw , 0xffff, 0xeef8, { 0, 0, 24}}, + {m68k_op_bfset_32_al , 0xffff, 0xeef9, { 0, 0, 24}}, + {m68k_op_bfins_32_aw , 0xffff, 0xeff8, { 0, 0, 21}}, + {m68k_op_bfins_32_al , 0xffff, 0xeff9, { 0, 0, 21}}, + {0, 0, 0, {0, 0, 0}} +}; + + +/* Build the opcode handler jump table */ +void m68ki_build_opcode_table(void) +{ + opcode_handler_struct *ostruct; + int instr; + int i; + int j; + int k; + + for(i = 0; i < 0x10000; i++) + { + /* default to illegal */ + m68ki_instruction_jump_table[i] = m68k_op_illegal; + for(k=0;kmask != 0xff00) + { + for(i = 0;i < 0x10000;i++) + { + if((i & ostruct->mask) == ostruct->match) + { + m68ki_instruction_jump_table[i] = ostruct->opcode_handler; + for(k=0;kcycles[k]; + } + } + ostruct++; + } + while(ostruct->mask == 0xff00) + { + for(i = 0;i <= 0xff;i++) + { + m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler; + for(k=0;kmatch | i] = ostruct->cycles[k]; + } + ostruct++; + } + while(ostruct->mask == 0xf1f8) + { + for(i = 0;i < 8;i++) + { + for(j = 0;j < 8;j++) + { + instr = ostruct->match | (i << 9) | j; + m68ki_instruction_jump_table[instr] = ostruct->opcode_handler; + for(k=0;kcycles[k]; + if((instr & 0xf000) == 0xe000 && (!(instr & 0x20))) + m68ki_cycles[0][instr] = m68ki_cycles[1][instr] = ostruct->cycles[k] + ((((j-1)&7)+1)<<1); + } + } + ostruct++; + } + while(ostruct->mask == 0xfff0) + { + for(i = 0;i <= 0x0f;i++) + { + m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler; + for(k=0;kmatch | i] = ostruct->cycles[k]; + } + ostruct++; + } + while(ostruct->mask == 0xf1ff) + { + for(i = 0;i <= 0x07;i++) + { + m68ki_instruction_jump_table[ostruct->match | (i << 9)] = ostruct->opcode_handler; + for(k=0;kmatch | (i << 9)] = ostruct->cycles[k]; + } + ostruct++; + } + while(ostruct->mask == 0xfff8) + { + for(i = 0;i <= 0x07;i++) + { + m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler; + for(k=0;kmatch | i] = ostruct->cycles[k]; + } + ostruct++; + } + while(ostruct->mask == 0xffff) + { + m68ki_instruction_jump_table[ostruct->match] = ostruct->opcode_handler; + for(k=0;kmatch] = ostruct->cycles[k]; + ostruct++; + } +} + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + + diff --git a/ genplus-gx/source/m68k/m68kops.h b/ genplus-gx/source/m68k/m68kops.h new file mode 100644 index 0000000..d3c4e07 --- /dev/null +++ b/ genplus-gx/source/m68k/m68kops.h @@ -0,0 +1,1984 @@ +#ifndef M68KOPS__HEADER +#define M68KOPS__HEADER + +/* ======================================================================== */ +/* ============================ OPCODE HANDLERS =========================== */ +/* ======================================================================== */ + + +void m68k_op_1010(void); +void m68k_op_1111(void); +void m68k_op_abcd_8_rr(void); +void m68k_op_abcd_8_mm_ax7(void); +void m68k_op_abcd_8_mm_ay7(void); +void m68k_op_abcd_8_mm_axy7(void); +void m68k_op_abcd_8_mm(void); +void m68k_op_add_8_er_d(void); +void m68k_op_add_8_er_ai(void); +void m68k_op_add_8_er_pi(void); +void m68k_op_add_8_er_pi7(void); +void m68k_op_add_8_er_pd(void); +void m68k_op_add_8_er_pd7(void); +void m68k_op_add_8_er_di(void); +void m68k_op_add_8_er_ix(void); +void m68k_op_add_8_er_aw(void); +void m68k_op_add_8_er_al(void); +void m68k_op_add_8_er_pcdi(void); +void m68k_op_add_8_er_pcix(void); +void m68k_op_add_8_er_i(void); +void m68k_op_add_16_er_d(void); +void m68k_op_add_16_er_a(void); +void m68k_op_add_16_er_ai(void); +void m68k_op_add_16_er_pi(void); +void m68k_op_add_16_er_pd(void); +void m68k_op_add_16_er_di(void); +void m68k_op_add_16_er_ix(void); +void m68k_op_add_16_er_aw(void); +void m68k_op_add_16_er_al(void); +void m68k_op_add_16_er_pcdi(void); +void m68k_op_add_16_er_pcix(void); +void m68k_op_add_16_er_i(void); +void m68k_op_add_32_er_d(void); +void m68k_op_add_32_er_a(void); +void m68k_op_add_32_er_ai(void); +void m68k_op_add_32_er_pi(void); +void m68k_op_add_32_er_pd(void); +void m68k_op_add_32_er_di(void); +void m68k_op_add_32_er_ix(void); +void m68k_op_add_32_er_aw(void); +void m68k_op_add_32_er_al(void); +void m68k_op_add_32_er_pcdi(void); +void m68k_op_add_32_er_pcix(void); +void m68k_op_add_32_er_i(void); +void m68k_op_add_8_re_ai(void); +void m68k_op_add_8_re_pi(void); +void m68k_op_add_8_re_pi7(void); +void m68k_op_add_8_re_pd(void); +void m68k_op_add_8_re_pd7(void); +void m68k_op_add_8_re_di(void); +void m68k_op_add_8_re_ix(void); +void m68k_op_add_8_re_aw(void); +void m68k_op_add_8_re_al(void); +void m68k_op_add_16_re_ai(void); +void m68k_op_add_16_re_pi(void); +void m68k_op_add_16_re_pd(void); +void m68k_op_add_16_re_di(void); +void m68k_op_add_16_re_ix(void); +void m68k_op_add_16_re_aw(void); +void m68k_op_add_16_re_al(void); +void m68k_op_add_32_re_ai(void); +void m68k_op_add_32_re_pi(void); +void m68k_op_add_32_re_pd(void); +void m68k_op_add_32_re_di(void); +void m68k_op_add_32_re_ix(void); +void m68k_op_add_32_re_aw(void); +void m68k_op_add_32_re_al(void); +void m68k_op_adda_16_d(void); +void m68k_op_adda_16_a(void); +void m68k_op_adda_16_ai(void); +void m68k_op_adda_16_pi(void); +void m68k_op_adda_16_pd(void); +void m68k_op_adda_16_di(void); +void m68k_op_adda_16_ix(void); +void m68k_op_adda_16_aw(void); +void m68k_op_adda_16_al(void); +void m68k_op_adda_16_pcdi(void); +void m68k_op_adda_16_pcix(void); +void m68k_op_adda_16_i(void); +void m68k_op_adda_32_d(void); +void m68k_op_adda_32_a(void); +void m68k_op_adda_32_ai(void); +void m68k_op_adda_32_pi(void); +void m68k_op_adda_32_pd(void); +void m68k_op_adda_32_di(void); +void m68k_op_adda_32_ix(void); +void m68k_op_adda_32_aw(void); +void m68k_op_adda_32_al(void); +void m68k_op_adda_32_pcdi(void); +void m68k_op_adda_32_pcix(void); +void m68k_op_adda_32_i(void); +void m68k_op_addi_8_d(void); +void m68k_op_addi_8_ai(void); +void m68k_op_addi_8_pi(void); +void m68k_op_addi_8_pi7(void); +void m68k_op_addi_8_pd(void); +void m68k_op_addi_8_pd7(void); +void m68k_op_addi_8_di(void); +void m68k_op_addi_8_ix(void); +void m68k_op_addi_8_aw(void); +void m68k_op_addi_8_al(void); +void m68k_op_addi_16_d(void); +void m68k_op_addi_16_ai(void); +void m68k_op_addi_16_pi(void); +void m68k_op_addi_16_pd(void); +void m68k_op_addi_16_di(void); +void m68k_op_addi_16_ix(void); +void m68k_op_addi_16_aw(void); +void m68k_op_addi_16_al(void); +void m68k_op_addi_32_d(void); +void m68k_op_addi_32_ai(void); +void m68k_op_addi_32_pi(void); +void m68k_op_addi_32_pd(void); +void m68k_op_addi_32_di(void); +void m68k_op_addi_32_ix(void); +void m68k_op_addi_32_aw(void); +void m68k_op_addi_32_al(void); +void m68k_op_addq_8_d(void); +void m68k_op_addq_8_ai(void); +void m68k_op_addq_8_pi(void); +void m68k_op_addq_8_pi7(void); +void m68k_op_addq_8_pd(void); +void m68k_op_addq_8_pd7(void); +void m68k_op_addq_8_di(void); +void m68k_op_addq_8_ix(void); +void m68k_op_addq_8_aw(void); +void m68k_op_addq_8_al(void); +void m68k_op_addq_16_d(void); +void m68k_op_addq_16_a(void); +void m68k_op_addq_16_ai(void); +void m68k_op_addq_16_pi(void); +void m68k_op_addq_16_pd(void); +void m68k_op_addq_16_di(void); +void m68k_op_addq_16_ix(void); +void m68k_op_addq_16_aw(void); +void m68k_op_addq_16_al(void); +void m68k_op_addq_32_d(void); +void m68k_op_addq_32_a(void); +void m68k_op_addq_32_ai(void); +void m68k_op_addq_32_pi(void); +void m68k_op_addq_32_pd(void); +void m68k_op_addq_32_di(void); +void m68k_op_addq_32_ix(void); +void m68k_op_addq_32_aw(void); +void m68k_op_addq_32_al(void); +void m68k_op_addx_8_rr(void); +void m68k_op_addx_16_rr(void); +void m68k_op_addx_32_rr(void); +void m68k_op_addx_8_mm_ax7(void); +void m68k_op_addx_8_mm_ay7(void); +void m68k_op_addx_8_mm_axy7(void); +void m68k_op_addx_8_mm(void); +void m68k_op_addx_16_mm(void); +void m68k_op_addx_32_mm(void); +void m68k_op_and_8_er_d(void); +void m68k_op_and_8_er_ai(void); +void m68k_op_and_8_er_pi(void); +void m68k_op_and_8_er_pi7(void); +void m68k_op_and_8_er_pd(void); +void m68k_op_and_8_er_pd7(void); +void m68k_op_and_8_er_di(void); +void m68k_op_and_8_er_ix(void); +void m68k_op_and_8_er_aw(void); +void m68k_op_and_8_er_al(void); +void m68k_op_and_8_er_pcdi(void); +void m68k_op_and_8_er_pcix(void); +void m68k_op_and_8_er_i(void); +void m68k_op_and_16_er_d(void); +void m68k_op_and_16_er_ai(void); +void m68k_op_and_16_er_pi(void); +void m68k_op_and_16_er_pd(void); +void m68k_op_and_16_er_di(void); +void m68k_op_and_16_er_ix(void); +void m68k_op_and_16_er_aw(void); +void m68k_op_and_16_er_al(void); +void m68k_op_and_16_er_pcdi(void); +void m68k_op_and_16_er_pcix(void); +void m68k_op_and_16_er_i(void); +void m68k_op_and_32_er_d(void); +void m68k_op_and_32_er_ai(void); +void m68k_op_and_32_er_pi(void); +void m68k_op_and_32_er_pd(void); +void m68k_op_and_32_er_di(void); +void m68k_op_and_32_er_ix(void); +void m68k_op_and_32_er_aw(void); +void m68k_op_and_32_er_al(void); +void m68k_op_and_32_er_pcdi(void); +void m68k_op_and_32_er_pcix(void); +void m68k_op_and_32_er_i(void); +void m68k_op_and_8_re_ai(void); +void m68k_op_and_8_re_pi(void); +void m68k_op_and_8_re_pi7(void); +void m68k_op_and_8_re_pd(void); +void m68k_op_and_8_re_pd7(void); +void m68k_op_and_8_re_di(void); +void m68k_op_and_8_re_ix(void); +void m68k_op_and_8_re_aw(void); +void m68k_op_and_8_re_al(void); +void m68k_op_and_16_re_ai(void); +void m68k_op_and_16_re_pi(void); +void m68k_op_and_16_re_pd(void); +void m68k_op_and_16_re_di(void); +void m68k_op_and_16_re_ix(void); +void m68k_op_and_16_re_aw(void); +void m68k_op_and_16_re_al(void); +void m68k_op_and_32_re_ai(void); +void m68k_op_and_32_re_pi(void); +void m68k_op_and_32_re_pd(void); +void m68k_op_and_32_re_di(void); +void m68k_op_and_32_re_ix(void); +void m68k_op_and_32_re_aw(void); +void m68k_op_and_32_re_al(void); +void m68k_op_andi_8_d(void); +void m68k_op_andi_8_ai(void); +void m68k_op_andi_8_pi(void); +void m68k_op_andi_8_pi7(void); +void m68k_op_andi_8_pd(void); +void m68k_op_andi_8_pd7(void); +void m68k_op_andi_8_di(void); +void m68k_op_andi_8_ix(void); +void m68k_op_andi_8_aw(void); +void m68k_op_andi_8_al(void); +void m68k_op_andi_16_d(void); +void m68k_op_andi_16_ai(void); +void m68k_op_andi_16_pi(void); +void m68k_op_andi_16_pd(void); +void m68k_op_andi_16_di(void); +void m68k_op_andi_16_ix(void); +void m68k_op_andi_16_aw(void); +void m68k_op_andi_16_al(void); +void m68k_op_andi_32_d(void); +void m68k_op_andi_32_ai(void); +void m68k_op_andi_32_pi(void); +void m68k_op_andi_32_pd(void); +void m68k_op_andi_32_di(void); +void m68k_op_andi_32_ix(void); +void m68k_op_andi_32_aw(void); +void m68k_op_andi_32_al(void); +void m68k_op_andi_16_toc(void); +void m68k_op_andi_16_tos(void); +void m68k_op_asr_8_s(void); +void m68k_op_asr_16_s(void); +void m68k_op_asr_32_s(void); +void m68k_op_asr_8_r(void); +void m68k_op_asr_16_r(void); +void m68k_op_asr_32_r(void); +void m68k_op_asr_16_ai(void); +void m68k_op_asr_16_pi(void); +void m68k_op_asr_16_pd(void); +void m68k_op_asr_16_di(void); +void m68k_op_asr_16_ix(void); +void m68k_op_asr_16_aw(void); +void m68k_op_asr_16_al(void); +void m68k_op_asl_8_s(void); +void m68k_op_asl_16_s(void); +void m68k_op_asl_32_s(void); +void m68k_op_asl_8_r(void); +void m68k_op_asl_16_r(void); +void m68k_op_asl_32_r(void); +void m68k_op_asl_16_ai(void); +void m68k_op_asl_16_pi(void); +void m68k_op_asl_16_pd(void); +void m68k_op_asl_16_di(void); +void m68k_op_asl_16_ix(void); +void m68k_op_asl_16_aw(void); +void m68k_op_asl_16_al(void); +void m68k_op_bhi_8(void); +void m68k_op_bls_8(void); +void m68k_op_bcc_8(void); +void m68k_op_bcs_8(void); +void m68k_op_bne_8(void); +void m68k_op_beq_8(void); +void m68k_op_bvc_8(void); +void m68k_op_bvs_8(void); +void m68k_op_bpl_8(void); +void m68k_op_bmi_8(void); +void m68k_op_bge_8(void); +void m68k_op_blt_8(void); +void m68k_op_bgt_8(void); +void m68k_op_ble_8(void); +void m68k_op_bhi_16(void); +void m68k_op_bls_16(void); +void m68k_op_bcc_16(void); +void m68k_op_bcs_16(void); +void m68k_op_bne_16(void); +void m68k_op_beq_16(void); +void m68k_op_bvc_16(void); +void m68k_op_bvs_16(void); +void m68k_op_bpl_16(void); +void m68k_op_bmi_16(void); +void m68k_op_bge_16(void); +void m68k_op_blt_16(void); +void m68k_op_bgt_16(void); +void m68k_op_ble_16(void); +void m68k_op_bhi_32(void); +void m68k_op_bls_32(void); +void m68k_op_bcc_32(void); +void m68k_op_bcs_32(void); +void m68k_op_bne_32(void); +void m68k_op_beq_32(void); +void m68k_op_bvc_32(void); +void m68k_op_bvs_32(void); +void m68k_op_bpl_32(void); +void m68k_op_bmi_32(void); +void m68k_op_bge_32(void); +void m68k_op_blt_32(void); +void m68k_op_bgt_32(void); +void m68k_op_ble_32(void); +void m68k_op_bchg_32_r_d(void); +void m68k_op_bchg_8_r_ai(void); +void m68k_op_bchg_8_r_pi(void); +void m68k_op_bchg_8_r_pi7(void); +void m68k_op_bchg_8_r_pd(void); +void m68k_op_bchg_8_r_pd7(void); +void m68k_op_bchg_8_r_di(void); +void m68k_op_bchg_8_r_ix(void); +void m68k_op_bchg_8_r_aw(void); +void m68k_op_bchg_8_r_al(void); +void m68k_op_bchg_32_s_d(void); +void m68k_op_bchg_8_s_ai(void); +void m68k_op_bchg_8_s_pi(void); +void m68k_op_bchg_8_s_pi7(void); +void m68k_op_bchg_8_s_pd(void); +void m68k_op_bchg_8_s_pd7(void); +void m68k_op_bchg_8_s_di(void); +void m68k_op_bchg_8_s_ix(void); +void m68k_op_bchg_8_s_aw(void); +void m68k_op_bchg_8_s_al(void); +void m68k_op_bclr_32_r_d(void); +void m68k_op_bclr_8_r_ai(void); +void m68k_op_bclr_8_r_pi(void); +void m68k_op_bclr_8_r_pi7(void); +void m68k_op_bclr_8_r_pd(void); +void m68k_op_bclr_8_r_pd7(void); +void m68k_op_bclr_8_r_di(void); +void m68k_op_bclr_8_r_ix(void); +void m68k_op_bclr_8_r_aw(void); +void m68k_op_bclr_8_r_al(void); +void m68k_op_bclr_32_s_d(void); +void m68k_op_bclr_8_s_ai(void); +void m68k_op_bclr_8_s_pi(void); +void m68k_op_bclr_8_s_pi7(void); +void m68k_op_bclr_8_s_pd(void); +void m68k_op_bclr_8_s_pd7(void); +void m68k_op_bclr_8_s_di(void); +void m68k_op_bclr_8_s_ix(void); +void m68k_op_bclr_8_s_aw(void); +void m68k_op_bclr_8_s_al(void); +void m68k_op_bfchg_32_d(void); +void m68k_op_bfchg_32_ai(void); +void m68k_op_bfchg_32_di(void); +void m68k_op_bfchg_32_ix(void); +void m68k_op_bfchg_32_aw(void); +void m68k_op_bfchg_32_al(void); +void m68k_op_bfclr_32_d(void); +void m68k_op_bfclr_32_ai(void); +void m68k_op_bfclr_32_di(void); +void m68k_op_bfclr_32_ix(void); +void m68k_op_bfclr_32_aw(void); +void m68k_op_bfclr_32_al(void); +void m68k_op_bfexts_32_d(void); +void m68k_op_bfexts_32_ai(void); +void m68k_op_bfexts_32_di(void); +void m68k_op_bfexts_32_ix(void); +void m68k_op_bfexts_32_aw(void); +void m68k_op_bfexts_32_al(void); +void m68k_op_bfexts_32_pcdi(void); +void m68k_op_bfexts_32_pcix(void); +void m68k_op_bfextu_32_d(void); +void m68k_op_bfextu_32_ai(void); +void m68k_op_bfextu_32_di(void); +void m68k_op_bfextu_32_ix(void); +void m68k_op_bfextu_32_aw(void); +void m68k_op_bfextu_32_al(void); +void m68k_op_bfextu_32_pcdi(void); +void m68k_op_bfextu_32_pcix(void); +void m68k_op_bfffo_32_d(void); +void m68k_op_bfffo_32_ai(void); +void m68k_op_bfffo_32_di(void); +void m68k_op_bfffo_32_ix(void); +void m68k_op_bfffo_32_aw(void); +void m68k_op_bfffo_32_al(void); +void m68k_op_bfffo_32_pcdi(void); +void m68k_op_bfffo_32_pcix(void); +void m68k_op_bfins_32_d(void); +void m68k_op_bfins_32_ai(void); +void m68k_op_bfins_32_di(void); +void m68k_op_bfins_32_ix(void); +void m68k_op_bfins_32_aw(void); +void m68k_op_bfins_32_al(void); +void m68k_op_bfset_32_d(void); +void m68k_op_bfset_32_ai(void); +void m68k_op_bfset_32_di(void); +void m68k_op_bfset_32_ix(void); +void m68k_op_bfset_32_aw(void); +void m68k_op_bfset_32_al(void); +void m68k_op_bftst_32_d(void); +void m68k_op_bftst_32_ai(void); +void m68k_op_bftst_32_di(void); +void m68k_op_bftst_32_ix(void); +void m68k_op_bftst_32_aw(void); +void m68k_op_bftst_32_al(void); +void m68k_op_bftst_32_pcdi(void); +void m68k_op_bftst_32_pcix(void); +void m68k_op_bkpt(void); +void m68k_op_bra_8(void); +void m68k_op_bra_16(void); +void m68k_op_bra_32(void); +void m68k_op_bset_32_r_d(void); +void m68k_op_bset_8_r_ai(void); +void m68k_op_bset_8_r_pi(void); +void m68k_op_bset_8_r_pi7(void); +void m68k_op_bset_8_r_pd(void); +void m68k_op_bset_8_r_pd7(void); +void m68k_op_bset_8_r_di(void); +void m68k_op_bset_8_r_ix(void); +void m68k_op_bset_8_r_aw(void); +void m68k_op_bset_8_r_al(void); +void m68k_op_bset_32_s_d(void); +void m68k_op_bset_8_s_ai(void); +void m68k_op_bset_8_s_pi(void); +void m68k_op_bset_8_s_pi7(void); +void m68k_op_bset_8_s_pd(void); +void m68k_op_bset_8_s_pd7(void); +void m68k_op_bset_8_s_di(void); +void m68k_op_bset_8_s_ix(void); +void m68k_op_bset_8_s_aw(void); +void m68k_op_bset_8_s_al(void); +void m68k_op_bsr_8(void); +void m68k_op_bsr_16(void); +void m68k_op_bsr_32(void); +void m68k_op_btst_32_r_d(void); +void m68k_op_btst_8_r_ai(void); +void m68k_op_btst_8_r_pi(void); +void m68k_op_btst_8_r_pi7(void); +void m68k_op_btst_8_r_pd(void); +void m68k_op_btst_8_r_pd7(void); +void m68k_op_btst_8_r_di(void); +void m68k_op_btst_8_r_ix(void); +void m68k_op_btst_8_r_aw(void); +void m68k_op_btst_8_r_al(void); +void m68k_op_btst_8_r_pcdi(void); +void m68k_op_btst_8_r_pcix(void); +void m68k_op_btst_8_r_i(void); +void m68k_op_btst_32_s_d(void); +void m68k_op_btst_8_s_ai(void); +void m68k_op_btst_8_s_pi(void); +void m68k_op_btst_8_s_pi7(void); +void m68k_op_btst_8_s_pd(void); +void m68k_op_btst_8_s_pd7(void); +void m68k_op_btst_8_s_di(void); +void m68k_op_btst_8_s_ix(void); +void m68k_op_btst_8_s_aw(void); +void m68k_op_btst_8_s_al(void); +void m68k_op_btst_8_s_pcdi(void); +void m68k_op_btst_8_s_pcix(void); +void m68k_op_callm_32_ai(void); +void m68k_op_callm_32_di(void); +void m68k_op_callm_32_ix(void); +void m68k_op_callm_32_aw(void); +void m68k_op_callm_32_al(void); +void m68k_op_callm_32_pcdi(void); +void m68k_op_callm_32_pcix(void); +void m68k_op_cas_8_ai(void); +void m68k_op_cas_8_pi(void); +void m68k_op_cas_8_pi7(void); +void m68k_op_cas_8_pd(void); +void m68k_op_cas_8_pd7(void); +void m68k_op_cas_8_di(void); +void m68k_op_cas_8_ix(void); +void m68k_op_cas_8_aw(void); +void m68k_op_cas_8_al(void); +void m68k_op_cas_16_ai(void); +void m68k_op_cas_16_pi(void); +void m68k_op_cas_16_pd(void); +void m68k_op_cas_16_di(void); +void m68k_op_cas_16_ix(void); +void m68k_op_cas_16_aw(void); +void m68k_op_cas_16_al(void); +void m68k_op_cas_32_ai(void); +void m68k_op_cas_32_pi(void); +void m68k_op_cas_32_pd(void); +void m68k_op_cas_32_di(void); +void m68k_op_cas_32_ix(void); +void m68k_op_cas_32_aw(void); +void m68k_op_cas_32_al(void); +void m68k_op_cas2_16(void); +void m68k_op_cas2_32(void); +void m68k_op_chk_16_d(void); +void m68k_op_chk_16_ai(void); +void m68k_op_chk_16_pi(void); +void m68k_op_chk_16_pd(void); +void m68k_op_chk_16_di(void); +void m68k_op_chk_16_ix(void); +void m68k_op_chk_16_aw(void); +void m68k_op_chk_16_al(void); +void m68k_op_chk_16_pcdi(void); +void m68k_op_chk_16_pcix(void); +void m68k_op_chk_16_i(void); +void m68k_op_chk_32_d(void); +void m68k_op_chk_32_ai(void); +void m68k_op_chk_32_pi(void); +void m68k_op_chk_32_pd(void); +void m68k_op_chk_32_di(void); +void m68k_op_chk_32_ix(void); +void m68k_op_chk_32_aw(void); +void m68k_op_chk_32_al(void); +void m68k_op_chk_32_pcdi(void); +void m68k_op_chk_32_pcix(void); +void m68k_op_chk_32_i(void); +void m68k_op_chk2cmp2_8_ai(void); +void m68k_op_chk2cmp2_8_di(void); +void m68k_op_chk2cmp2_8_ix(void); +void m68k_op_chk2cmp2_8_aw(void); +void m68k_op_chk2cmp2_8_al(void); +void m68k_op_chk2cmp2_8_pcdi(void); +void m68k_op_chk2cmp2_8_pcix(void); +void m68k_op_chk2cmp2_16_ai(void); +void m68k_op_chk2cmp2_16_di(void); +void m68k_op_chk2cmp2_16_ix(void); +void m68k_op_chk2cmp2_16_aw(void); +void m68k_op_chk2cmp2_16_al(void); +void m68k_op_chk2cmp2_16_pcdi(void); +void m68k_op_chk2cmp2_16_pcix(void); +void m68k_op_chk2cmp2_32_ai(void); +void m68k_op_chk2cmp2_32_di(void); +void m68k_op_chk2cmp2_32_ix(void); +void m68k_op_chk2cmp2_32_aw(void); +void m68k_op_chk2cmp2_32_al(void); +void m68k_op_chk2cmp2_32_pcdi(void); +void m68k_op_chk2cmp2_32_pcix(void); +void m68k_op_clr_8_d(void); +void m68k_op_clr_8_ai(void); +void m68k_op_clr_8_pi(void); +void m68k_op_clr_8_pi7(void); +void m68k_op_clr_8_pd(void); +void m68k_op_clr_8_pd7(void); +void m68k_op_clr_8_di(void); +void m68k_op_clr_8_ix(void); +void m68k_op_clr_8_aw(void); +void m68k_op_clr_8_al(void); +void m68k_op_clr_16_d(void); +void m68k_op_clr_16_ai(void); +void m68k_op_clr_16_pi(void); +void m68k_op_clr_16_pd(void); +void m68k_op_clr_16_di(void); +void m68k_op_clr_16_ix(void); +void m68k_op_clr_16_aw(void); +void m68k_op_clr_16_al(void); +void m68k_op_clr_32_d(void); +void m68k_op_clr_32_ai(void); +void m68k_op_clr_32_pi(void); +void m68k_op_clr_32_pd(void); +void m68k_op_clr_32_di(void); +void m68k_op_clr_32_ix(void); +void m68k_op_clr_32_aw(void); +void m68k_op_clr_32_al(void); +void m68k_op_cmp_8_d(void); +void m68k_op_cmp_8_ai(void); +void m68k_op_cmp_8_pi(void); +void m68k_op_cmp_8_pi7(void); +void m68k_op_cmp_8_pd(void); +void m68k_op_cmp_8_pd7(void); +void m68k_op_cmp_8_di(void); +void m68k_op_cmp_8_ix(void); +void m68k_op_cmp_8_aw(void); +void m68k_op_cmp_8_al(void); +void m68k_op_cmp_8_pcdi(void); +void m68k_op_cmp_8_pcix(void); +void m68k_op_cmp_8_i(void); +void m68k_op_cmp_16_d(void); +void m68k_op_cmp_16_a(void); +void m68k_op_cmp_16_ai(void); +void m68k_op_cmp_16_pi(void); +void m68k_op_cmp_16_pd(void); +void m68k_op_cmp_16_di(void); +void m68k_op_cmp_16_ix(void); +void m68k_op_cmp_16_aw(void); +void m68k_op_cmp_16_al(void); +void m68k_op_cmp_16_pcdi(void); +void m68k_op_cmp_16_pcix(void); +void m68k_op_cmp_16_i(void); +void m68k_op_cmp_32_d(void); +void m68k_op_cmp_32_a(void); +void m68k_op_cmp_32_ai(void); +void m68k_op_cmp_32_pi(void); +void m68k_op_cmp_32_pd(void); +void m68k_op_cmp_32_di(void); +void m68k_op_cmp_32_ix(void); +void m68k_op_cmp_32_aw(void); +void m68k_op_cmp_32_al(void); +void m68k_op_cmp_32_pcdi(void); +void m68k_op_cmp_32_pcix(void); +void m68k_op_cmp_32_i(void); +void m68k_op_cmpa_16_d(void); +void m68k_op_cmpa_16_a(void); +void m68k_op_cmpa_16_ai(void); +void m68k_op_cmpa_16_pi(void); +void m68k_op_cmpa_16_pd(void); +void m68k_op_cmpa_16_di(void); +void m68k_op_cmpa_16_ix(void); +void m68k_op_cmpa_16_aw(void); +void m68k_op_cmpa_16_al(void); +void m68k_op_cmpa_16_pcdi(void); +void m68k_op_cmpa_16_pcix(void); +void m68k_op_cmpa_16_i(void); +void m68k_op_cmpa_32_d(void); +void m68k_op_cmpa_32_a(void); +void m68k_op_cmpa_32_ai(void); +void m68k_op_cmpa_32_pi(void); +void m68k_op_cmpa_32_pd(void); +void m68k_op_cmpa_32_di(void); +void m68k_op_cmpa_32_ix(void); +void m68k_op_cmpa_32_aw(void); +void m68k_op_cmpa_32_al(void); +void m68k_op_cmpa_32_pcdi(void); +void m68k_op_cmpa_32_pcix(void); +void m68k_op_cmpa_32_i(void); +void m68k_op_cmpi_8_d(void); +void m68k_op_cmpi_8_ai(void); +void m68k_op_cmpi_8_pi(void); +void m68k_op_cmpi_8_pi7(void); +void m68k_op_cmpi_8_pd(void); +void m68k_op_cmpi_8_pd7(void); +void m68k_op_cmpi_8_di(void); +void m68k_op_cmpi_8_ix(void); +void m68k_op_cmpi_8_aw(void); +void m68k_op_cmpi_8_al(void); +void m68k_op_cmpi_8_pcdi(void); +void m68k_op_cmpi_8_pcix(void); +void m68k_op_cmpi_16_d(void); +void m68k_op_cmpi_16_ai(void); +void m68k_op_cmpi_16_pi(void); +void m68k_op_cmpi_16_pd(void); +void m68k_op_cmpi_16_di(void); +void m68k_op_cmpi_16_ix(void); +void m68k_op_cmpi_16_aw(void); +void m68k_op_cmpi_16_al(void); +void m68k_op_cmpi_16_pcdi(void); +void m68k_op_cmpi_16_pcix(void); +void m68k_op_cmpi_32_d(void); +void m68k_op_cmpi_32_ai(void); +void m68k_op_cmpi_32_pi(void); +void m68k_op_cmpi_32_pd(void); +void m68k_op_cmpi_32_di(void); +void m68k_op_cmpi_32_ix(void); +void m68k_op_cmpi_32_aw(void); +void m68k_op_cmpi_32_al(void); +void m68k_op_cmpi_32_pcdi(void); +void m68k_op_cmpi_32_pcix(void); +void m68k_op_cmpm_8_ax7(void); +void m68k_op_cmpm_8_ay7(void); +void m68k_op_cmpm_8_axy7(void); +void m68k_op_cmpm_8(void); +void m68k_op_cmpm_16(void); +void m68k_op_cmpm_32(void); +void m68k_op_cpbcc_32(void); +void m68k_op_cpdbcc_32(void); +void m68k_op_cpgen_32(void); +void m68k_op_cpscc_32(void); +void m68k_op_cptrapcc_32(void); +void m68k_op_dbt_16(void); +void m68k_op_dbf_16(void); +void m68k_op_dbhi_16(void); +void m68k_op_dbls_16(void); +void m68k_op_dbcc_16(void); +void m68k_op_dbcs_16(void); +void m68k_op_dbne_16(void); +void m68k_op_dbeq_16(void); +void m68k_op_dbvc_16(void); +void m68k_op_dbvs_16(void); +void m68k_op_dbpl_16(void); +void m68k_op_dbmi_16(void); +void m68k_op_dbge_16(void); +void m68k_op_dblt_16(void); +void m68k_op_dbgt_16(void); +void m68k_op_dble_16(void); +void m68k_op_divs_16_d(void); +void m68k_op_divs_16_ai(void); +void m68k_op_divs_16_pi(void); +void m68k_op_divs_16_pd(void); +void m68k_op_divs_16_di(void); +void m68k_op_divs_16_ix(void); +void m68k_op_divs_16_aw(void); +void m68k_op_divs_16_al(void); +void m68k_op_divs_16_pcdi(void); +void m68k_op_divs_16_pcix(void); +void m68k_op_divs_16_i(void); +void m68k_op_divu_16_d(void); +void m68k_op_divu_16_ai(void); +void m68k_op_divu_16_pi(void); +void m68k_op_divu_16_pd(void); +void m68k_op_divu_16_di(void); +void m68k_op_divu_16_ix(void); +void m68k_op_divu_16_aw(void); +void m68k_op_divu_16_al(void); +void m68k_op_divu_16_pcdi(void); +void m68k_op_divu_16_pcix(void); +void m68k_op_divu_16_i(void); +void m68k_op_divl_32_d(void); +void m68k_op_divl_32_ai(void); +void m68k_op_divl_32_pi(void); +void m68k_op_divl_32_pd(void); +void m68k_op_divl_32_di(void); +void m68k_op_divl_32_ix(void); +void m68k_op_divl_32_aw(void); +void m68k_op_divl_32_al(void); +void m68k_op_divl_32_pcdi(void); +void m68k_op_divl_32_pcix(void); +void m68k_op_divl_32_i(void); +void m68k_op_eor_8_d(void); +void m68k_op_eor_8_ai(void); +void m68k_op_eor_8_pi(void); +void m68k_op_eor_8_pi7(void); +void m68k_op_eor_8_pd(void); +void m68k_op_eor_8_pd7(void); +void m68k_op_eor_8_di(void); +void m68k_op_eor_8_ix(void); +void m68k_op_eor_8_aw(void); +void m68k_op_eor_8_al(void); +void m68k_op_eor_16_d(void); +void m68k_op_eor_16_ai(void); +void m68k_op_eor_16_pi(void); +void m68k_op_eor_16_pd(void); +void m68k_op_eor_16_di(void); +void m68k_op_eor_16_ix(void); +void m68k_op_eor_16_aw(void); +void m68k_op_eor_16_al(void); +void m68k_op_eor_32_d(void); +void m68k_op_eor_32_ai(void); +void m68k_op_eor_32_pi(void); +void m68k_op_eor_32_pd(void); +void m68k_op_eor_32_di(void); +void m68k_op_eor_32_ix(void); +void m68k_op_eor_32_aw(void); +void m68k_op_eor_32_al(void); +void m68k_op_eori_8_d(void); +void m68k_op_eori_8_ai(void); +void m68k_op_eori_8_pi(void); +void m68k_op_eori_8_pi7(void); +void m68k_op_eori_8_pd(void); +void m68k_op_eori_8_pd7(void); +void m68k_op_eori_8_di(void); +void m68k_op_eori_8_ix(void); +void m68k_op_eori_8_aw(void); +void m68k_op_eori_8_al(void); +void m68k_op_eori_16_d(void); +void m68k_op_eori_16_ai(void); +void m68k_op_eori_16_pi(void); +void m68k_op_eori_16_pd(void); +void m68k_op_eori_16_di(void); +void m68k_op_eori_16_ix(void); +void m68k_op_eori_16_aw(void); +void m68k_op_eori_16_al(void); +void m68k_op_eori_32_d(void); +void m68k_op_eori_32_ai(void); +void m68k_op_eori_32_pi(void); +void m68k_op_eori_32_pd(void); +void m68k_op_eori_32_di(void); +void m68k_op_eori_32_ix(void); +void m68k_op_eori_32_aw(void); +void m68k_op_eori_32_al(void); +void m68k_op_eori_16_toc(void); +void m68k_op_eori_16_tos(void); +void m68k_op_exg_32_dd(void); +void m68k_op_exg_32_aa(void); +void m68k_op_exg_32_da(void); +void m68k_op_ext_16(void); +void m68k_op_ext_32(void); +void m68k_op_extb_32(void); +void m68k_op_illegal(void); +void m68k_op_jmp_32_ai(void); +void m68k_op_jmp_32_di(void); +void m68k_op_jmp_32_ix(void); +void m68k_op_jmp_32_aw(void); +void m68k_op_jmp_32_al(void); +void m68k_op_jmp_32_pcdi(void); +void m68k_op_jmp_32_pcix(void); +void m68k_op_jsr_32_ai(void); +void m68k_op_jsr_32_di(void); +void m68k_op_jsr_32_ix(void); +void m68k_op_jsr_32_aw(void); +void m68k_op_jsr_32_al(void); +void m68k_op_jsr_32_pcdi(void); +void m68k_op_jsr_32_pcix(void); +void m68k_op_lea_32_ai(void); +void m68k_op_lea_32_di(void); +void m68k_op_lea_32_ix(void); +void m68k_op_lea_32_aw(void); +void m68k_op_lea_32_al(void); +void m68k_op_lea_32_pcdi(void); +void m68k_op_lea_32_pcix(void); +void m68k_op_link_16_a7(void); +void m68k_op_link_16(void); +void m68k_op_link_32_a7(void); +void m68k_op_link_32(void); +void m68k_op_lsr_8_s(void); +void m68k_op_lsr_16_s(void); +void m68k_op_lsr_32_s(void); +void m68k_op_lsr_8_r(void); +void m68k_op_lsr_16_r(void); +void m68k_op_lsr_32_r(void); +void m68k_op_lsr_16_ai(void); +void m68k_op_lsr_16_pi(void); +void m68k_op_lsr_16_pd(void); +void m68k_op_lsr_16_di(void); +void m68k_op_lsr_16_ix(void); +void m68k_op_lsr_16_aw(void); +void m68k_op_lsr_16_al(void); +void m68k_op_lsl_8_s(void); +void m68k_op_lsl_16_s(void); +void m68k_op_lsl_32_s(void); +void m68k_op_lsl_8_r(void); +void m68k_op_lsl_16_r(void); +void m68k_op_lsl_32_r(void); +void m68k_op_lsl_16_ai(void); +void m68k_op_lsl_16_pi(void); +void m68k_op_lsl_16_pd(void); +void m68k_op_lsl_16_di(void); +void m68k_op_lsl_16_ix(void); +void m68k_op_lsl_16_aw(void); +void m68k_op_lsl_16_al(void); +void m68k_op_move_8_d_d(void); +void m68k_op_move_8_d_ai(void); +void m68k_op_move_8_d_pi(void); +void m68k_op_move_8_d_pi7(void); +void m68k_op_move_8_d_pd(void); +void m68k_op_move_8_d_pd7(void); +void m68k_op_move_8_d_di(void); +void m68k_op_move_8_d_ix(void); +void m68k_op_move_8_d_aw(void); +void m68k_op_move_8_d_al(void); +void m68k_op_move_8_d_pcdi(void); +void m68k_op_move_8_d_pcix(void); +void m68k_op_move_8_d_i(void); +void m68k_op_move_8_ai_d(void); +void m68k_op_move_8_ai_ai(void); +void m68k_op_move_8_ai_pi(void); +void m68k_op_move_8_ai_pi7(void); +void m68k_op_move_8_ai_pd(void); +void m68k_op_move_8_ai_pd7(void); +void m68k_op_move_8_ai_di(void); +void m68k_op_move_8_ai_ix(void); +void m68k_op_move_8_ai_aw(void); +void m68k_op_move_8_ai_al(void); +void m68k_op_move_8_ai_pcdi(void); +void m68k_op_move_8_ai_pcix(void); +void m68k_op_move_8_ai_i(void); +void m68k_op_move_8_pi7_d(void); +void m68k_op_move_8_pi_d(void); +void m68k_op_move_8_pi7_ai(void); +void m68k_op_move_8_pi7_pi(void); +void m68k_op_move_8_pi7_pi7(void); +void m68k_op_move_8_pi7_pd(void); +void m68k_op_move_8_pi7_pd7(void); +void m68k_op_move_8_pi7_di(void); +void m68k_op_move_8_pi7_ix(void); +void m68k_op_move_8_pi7_aw(void); +void m68k_op_move_8_pi7_al(void); +void m68k_op_move_8_pi7_pcdi(void); +void m68k_op_move_8_pi7_pcix(void); +void m68k_op_move_8_pi7_i(void); +void m68k_op_move_8_pi_ai(void); +void m68k_op_move_8_pi_pi(void); +void m68k_op_move_8_pi_pi7(void); +void m68k_op_move_8_pi_pd(void); +void m68k_op_move_8_pi_pd7(void); +void m68k_op_move_8_pi_di(void); +void m68k_op_move_8_pi_ix(void); +void m68k_op_move_8_pi_aw(void); +void m68k_op_move_8_pi_al(void); +void m68k_op_move_8_pi_pcdi(void); +void m68k_op_move_8_pi_pcix(void); +void m68k_op_move_8_pi_i(void); +void m68k_op_move_8_pd7_d(void); +void m68k_op_move_8_pd_d(void); +void m68k_op_move_8_pd7_ai(void); +void m68k_op_move_8_pd7_pi(void); +void m68k_op_move_8_pd7_pi7(void); +void m68k_op_move_8_pd7_pd(void); +void m68k_op_move_8_pd7_pd7(void); +void m68k_op_move_8_pd7_di(void); +void m68k_op_move_8_pd7_ix(void); +void m68k_op_move_8_pd7_aw(void); +void m68k_op_move_8_pd7_al(void); +void m68k_op_move_8_pd7_pcdi(void); +void m68k_op_move_8_pd7_pcix(void); +void m68k_op_move_8_pd7_i(void); +void m68k_op_move_8_pd_ai(void); +void m68k_op_move_8_pd_pi(void); +void m68k_op_move_8_pd_pi7(void); +void m68k_op_move_8_pd_pd(void); +void m68k_op_move_8_pd_pd7(void); +void m68k_op_move_8_pd_di(void); +void m68k_op_move_8_pd_ix(void); +void m68k_op_move_8_pd_aw(void); +void m68k_op_move_8_pd_al(void); +void m68k_op_move_8_pd_pcdi(void); +void m68k_op_move_8_pd_pcix(void); +void m68k_op_move_8_pd_i(void); +void m68k_op_move_8_di_d(void); +void m68k_op_move_8_di_ai(void); +void m68k_op_move_8_di_pi(void); +void m68k_op_move_8_di_pi7(void); +void m68k_op_move_8_di_pd(void); +void m68k_op_move_8_di_pd7(void); +void m68k_op_move_8_di_di(void); +void m68k_op_move_8_di_ix(void); +void m68k_op_move_8_di_aw(void); +void m68k_op_move_8_di_al(void); +void m68k_op_move_8_di_pcdi(void); +void m68k_op_move_8_di_pcix(void); +void m68k_op_move_8_di_i(void); +void m68k_op_move_8_ix_d(void); +void m68k_op_move_8_ix_ai(void); +void m68k_op_move_8_ix_pi(void); +void m68k_op_move_8_ix_pi7(void); +void m68k_op_move_8_ix_pd(void); +void m68k_op_move_8_ix_pd7(void); +void m68k_op_move_8_ix_di(void); +void m68k_op_move_8_ix_ix(void); +void m68k_op_move_8_ix_aw(void); +void m68k_op_move_8_ix_al(void); +void m68k_op_move_8_ix_pcdi(void); +void m68k_op_move_8_ix_pcix(void); +void m68k_op_move_8_ix_i(void); +void m68k_op_move_8_aw_d(void); +void m68k_op_move_8_aw_ai(void); +void m68k_op_move_8_aw_pi(void); +void m68k_op_move_8_aw_pi7(void); +void m68k_op_move_8_aw_pd(void); +void m68k_op_move_8_aw_pd7(void); +void m68k_op_move_8_aw_di(void); +void m68k_op_move_8_aw_ix(void); +void m68k_op_move_8_aw_aw(void); +void m68k_op_move_8_aw_al(void); +void m68k_op_move_8_aw_pcdi(void); +void m68k_op_move_8_aw_pcix(void); +void m68k_op_move_8_aw_i(void); +void m68k_op_move_8_al_d(void); +void m68k_op_move_8_al_ai(void); +void m68k_op_move_8_al_pi(void); +void m68k_op_move_8_al_pi7(void); +void m68k_op_move_8_al_pd(void); +void m68k_op_move_8_al_pd7(void); +void m68k_op_move_8_al_di(void); +void m68k_op_move_8_al_ix(void); +void m68k_op_move_8_al_aw(void); +void m68k_op_move_8_al_al(void); +void m68k_op_move_8_al_pcdi(void); +void m68k_op_move_8_al_pcix(void); +void m68k_op_move_8_al_i(void); +void m68k_op_move_16_d_d(void); +void m68k_op_move_16_d_a(void); +void m68k_op_move_16_d_ai(void); +void m68k_op_move_16_d_pi(void); +void m68k_op_move_16_d_pd(void); +void m68k_op_move_16_d_di(void); +void m68k_op_move_16_d_ix(void); +void m68k_op_move_16_d_aw(void); +void m68k_op_move_16_d_al(void); +void m68k_op_move_16_d_pcdi(void); +void m68k_op_move_16_d_pcix(void); +void m68k_op_move_16_d_i(void); +void m68k_op_move_16_ai_d(void); +void m68k_op_move_16_ai_a(void); +void m68k_op_move_16_ai_ai(void); +void m68k_op_move_16_ai_pi(void); +void m68k_op_move_16_ai_pd(void); +void m68k_op_move_16_ai_di(void); +void m68k_op_move_16_ai_ix(void); +void m68k_op_move_16_ai_aw(void); +void m68k_op_move_16_ai_al(void); +void m68k_op_move_16_ai_pcdi(void); +void m68k_op_move_16_ai_pcix(void); +void m68k_op_move_16_ai_i(void); +void m68k_op_move_16_pi_d(void); +void m68k_op_move_16_pi_a(void); +void m68k_op_move_16_pi_ai(void); +void m68k_op_move_16_pi_pi(void); +void m68k_op_move_16_pi_pd(void); +void m68k_op_move_16_pi_di(void); +void m68k_op_move_16_pi_ix(void); +void m68k_op_move_16_pi_aw(void); +void m68k_op_move_16_pi_al(void); +void m68k_op_move_16_pi_pcdi(void); +void m68k_op_move_16_pi_pcix(void); +void m68k_op_move_16_pi_i(void); +void m68k_op_move_16_pd_d(void); +void m68k_op_move_16_pd_a(void); +void m68k_op_move_16_pd_ai(void); +void m68k_op_move_16_pd_pi(void); +void m68k_op_move_16_pd_pd(void); +void m68k_op_move_16_pd_di(void); +void m68k_op_move_16_pd_ix(void); +void m68k_op_move_16_pd_aw(void); +void m68k_op_move_16_pd_al(void); +void m68k_op_move_16_pd_pcdi(void); +void m68k_op_move_16_pd_pcix(void); +void m68k_op_move_16_pd_i(void); +void m68k_op_move_16_di_d(void); +void m68k_op_move_16_di_a(void); +void m68k_op_move_16_di_ai(void); +void m68k_op_move_16_di_pi(void); +void m68k_op_move_16_di_pd(void); +void m68k_op_move_16_di_di(void); +void m68k_op_move_16_di_ix(void); +void m68k_op_move_16_di_aw(void); +void m68k_op_move_16_di_al(void); +void m68k_op_move_16_di_pcdi(void); +void m68k_op_move_16_di_pcix(void); +void m68k_op_move_16_di_i(void); +void m68k_op_move_16_ix_d(void); +void m68k_op_move_16_ix_a(void); +void m68k_op_move_16_ix_ai(void); +void m68k_op_move_16_ix_pi(void); +void m68k_op_move_16_ix_pd(void); +void m68k_op_move_16_ix_di(void); +void m68k_op_move_16_ix_ix(void); +void m68k_op_move_16_ix_aw(void); +void m68k_op_move_16_ix_al(void); +void m68k_op_move_16_ix_pcdi(void); +void m68k_op_move_16_ix_pcix(void); +void m68k_op_move_16_ix_i(void); +void m68k_op_move_16_aw_d(void); +void m68k_op_move_16_aw_a(void); +void m68k_op_move_16_aw_ai(void); +void m68k_op_move_16_aw_pi(void); +void m68k_op_move_16_aw_pd(void); +void m68k_op_move_16_aw_di(void); +void m68k_op_move_16_aw_ix(void); +void m68k_op_move_16_aw_aw(void); +void m68k_op_move_16_aw_al(void); +void m68k_op_move_16_aw_pcdi(void); +void m68k_op_move_16_aw_pcix(void); +void m68k_op_move_16_aw_i(void); +void m68k_op_move_16_al_d(void); +void m68k_op_move_16_al_a(void); +void m68k_op_move_16_al_ai(void); +void m68k_op_move_16_al_pi(void); +void m68k_op_move_16_al_pd(void); +void m68k_op_move_16_al_di(void); +void m68k_op_move_16_al_ix(void); +void m68k_op_move_16_al_aw(void); +void m68k_op_move_16_al_al(void); +void m68k_op_move_16_al_pcdi(void); +void m68k_op_move_16_al_pcix(void); +void m68k_op_move_16_al_i(void); +void m68k_op_move_32_d_d(void); +void m68k_op_move_32_d_a(void); +void m68k_op_move_32_d_ai(void); +void m68k_op_move_32_d_pi(void); +void m68k_op_move_32_d_pd(void); +void m68k_op_move_32_d_di(void); +void m68k_op_move_32_d_ix(void); +void m68k_op_move_32_d_aw(void); +void m68k_op_move_32_d_al(void); +void m68k_op_move_32_d_pcdi(void); +void m68k_op_move_32_d_pcix(void); +void m68k_op_move_32_d_i(void); +void m68k_op_move_32_ai_d(void); +void m68k_op_move_32_ai_a(void); +void m68k_op_move_32_ai_ai(void); +void m68k_op_move_32_ai_pi(void); +void m68k_op_move_32_ai_pd(void); +void m68k_op_move_32_ai_di(void); +void m68k_op_move_32_ai_ix(void); +void m68k_op_move_32_ai_aw(void); +void m68k_op_move_32_ai_al(void); +void m68k_op_move_32_ai_pcdi(void); +void m68k_op_move_32_ai_pcix(void); +void m68k_op_move_32_ai_i(void); +void m68k_op_move_32_pi_d(void); +void m68k_op_move_32_pi_a(void); +void m68k_op_move_32_pi_ai(void); +void m68k_op_move_32_pi_pi(void); +void m68k_op_move_32_pi_pd(void); +void m68k_op_move_32_pi_di(void); +void m68k_op_move_32_pi_ix(void); +void m68k_op_move_32_pi_aw(void); +void m68k_op_move_32_pi_al(void); +void m68k_op_move_32_pi_pcdi(void); +void m68k_op_move_32_pi_pcix(void); +void m68k_op_move_32_pi_i(void); +void m68k_op_move_32_pd_d(void); +void m68k_op_move_32_pd_a(void); +void m68k_op_move_32_pd_ai(void); +void m68k_op_move_32_pd_pi(void); +void m68k_op_move_32_pd_pd(void); +void m68k_op_move_32_pd_di(void); +void m68k_op_move_32_pd_ix(void); +void m68k_op_move_32_pd_aw(void); +void m68k_op_move_32_pd_al(void); +void m68k_op_move_32_pd_pcdi(void); +void m68k_op_move_32_pd_pcix(void); +void m68k_op_move_32_pd_i(void); +void m68k_op_move_32_di_d(void); +void m68k_op_move_32_di_a(void); +void m68k_op_move_32_di_ai(void); +void m68k_op_move_32_di_pi(void); +void m68k_op_move_32_di_pd(void); +void m68k_op_move_32_di_di(void); +void m68k_op_move_32_di_ix(void); +void m68k_op_move_32_di_aw(void); +void m68k_op_move_32_di_al(void); +void m68k_op_move_32_di_pcdi(void); +void m68k_op_move_32_di_pcix(void); +void m68k_op_move_32_di_i(void); +void m68k_op_move_32_ix_d(void); +void m68k_op_move_32_ix_a(void); +void m68k_op_move_32_ix_ai(void); +void m68k_op_move_32_ix_pi(void); +void m68k_op_move_32_ix_pd(void); +void m68k_op_move_32_ix_di(void); +void m68k_op_move_32_ix_ix(void); +void m68k_op_move_32_ix_aw(void); +void m68k_op_move_32_ix_al(void); +void m68k_op_move_32_ix_pcdi(void); +void m68k_op_move_32_ix_pcix(void); +void m68k_op_move_32_ix_i(void); +void m68k_op_move_32_aw_d(void); +void m68k_op_move_32_aw_a(void); +void m68k_op_move_32_aw_ai(void); +void m68k_op_move_32_aw_pi(void); +void m68k_op_move_32_aw_pd(void); +void m68k_op_move_32_aw_di(void); +void m68k_op_move_32_aw_ix(void); +void m68k_op_move_32_aw_aw(void); +void m68k_op_move_32_aw_al(void); +void m68k_op_move_32_aw_pcdi(void); +void m68k_op_move_32_aw_pcix(void); +void m68k_op_move_32_aw_i(void); +void m68k_op_move_32_al_d(void); +void m68k_op_move_32_al_a(void); +void m68k_op_move_32_al_ai(void); +void m68k_op_move_32_al_pi(void); +void m68k_op_move_32_al_pd(void); +void m68k_op_move_32_al_di(void); +void m68k_op_move_32_al_ix(void); +void m68k_op_move_32_al_aw(void); +void m68k_op_move_32_al_al(void); +void m68k_op_move_32_al_pcdi(void); +void m68k_op_move_32_al_pcix(void); +void m68k_op_move_32_al_i(void); +void m68k_op_movea_16_d(void); +void m68k_op_movea_16_a(void); +void m68k_op_movea_16_ai(void); +void m68k_op_movea_16_pi(void); +void m68k_op_movea_16_pd(void); +void m68k_op_movea_16_di(void); +void m68k_op_movea_16_ix(void); +void m68k_op_movea_16_aw(void); +void m68k_op_movea_16_al(void); +void m68k_op_movea_16_pcdi(void); +void m68k_op_movea_16_pcix(void); +void m68k_op_movea_16_i(void); +void m68k_op_movea_32_d(void); +void m68k_op_movea_32_a(void); +void m68k_op_movea_32_ai(void); +void m68k_op_movea_32_pi(void); +void m68k_op_movea_32_pd(void); +void m68k_op_movea_32_di(void); +void m68k_op_movea_32_ix(void); +void m68k_op_movea_32_aw(void); +void m68k_op_movea_32_al(void); +void m68k_op_movea_32_pcdi(void); +void m68k_op_movea_32_pcix(void); +void m68k_op_movea_32_i(void); +void m68k_op_move_16_frc_d(void); +void m68k_op_move_16_frc_ai(void); +void m68k_op_move_16_frc_pi(void); +void m68k_op_move_16_frc_pd(void); +void m68k_op_move_16_frc_di(void); +void m68k_op_move_16_frc_ix(void); +void m68k_op_move_16_frc_aw(void); +void m68k_op_move_16_frc_al(void); +void m68k_op_move_16_toc_d(void); +void m68k_op_move_16_toc_ai(void); +void m68k_op_move_16_toc_pi(void); +void m68k_op_move_16_toc_pd(void); +void m68k_op_move_16_toc_di(void); +void m68k_op_move_16_toc_ix(void); +void m68k_op_move_16_toc_aw(void); +void m68k_op_move_16_toc_al(void); +void m68k_op_move_16_toc_pcdi(void); +void m68k_op_move_16_toc_pcix(void); +void m68k_op_move_16_toc_i(void); +void m68k_op_move_16_frs_d(void); +void m68k_op_move_16_frs_ai(void); +void m68k_op_move_16_frs_pi(void); +void m68k_op_move_16_frs_pd(void); +void m68k_op_move_16_frs_di(void); +void m68k_op_move_16_frs_ix(void); +void m68k_op_move_16_frs_aw(void); +void m68k_op_move_16_frs_al(void); +void m68k_op_move_16_tos_d(void); +void m68k_op_move_16_tos_ai(void); +void m68k_op_move_16_tos_pi(void); +void m68k_op_move_16_tos_pd(void); +void m68k_op_move_16_tos_di(void); +void m68k_op_move_16_tos_ix(void); +void m68k_op_move_16_tos_aw(void); +void m68k_op_move_16_tos_al(void); +void m68k_op_move_16_tos_pcdi(void); +void m68k_op_move_16_tos_pcix(void); +void m68k_op_move_16_tos_i(void); +void m68k_op_move_32_fru(void); +void m68k_op_move_32_tou(void); +void m68k_op_movec_32_cr(void); +void m68k_op_movec_32_rc(void); +void m68k_op_movem_16_re_pd(void); +void m68k_op_movem_16_re_ai(void); +void m68k_op_movem_16_re_di(void); +void m68k_op_movem_16_re_ix(void); +void m68k_op_movem_16_re_aw(void); +void m68k_op_movem_16_re_al(void); +void m68k_op_movem_32_re_pd(void); +void m68k_op_movem_32_re_ai(void); +void m68k_op_movem_32_re_di(void); +void m68k_op_movem_32_re_ix(void); +void m68k_op_movem_32_re_aw(void); +void m68k_op_movem_32_re_al(void); +void m68k_op_movem_16_er_pi(void); +void m68k_op_movem_16_er_ai(void); +void m68k_op_movem_16_er_di(void); +void m68k_op_movem_16_er_ix(void); +void m68k_op_movem_16_er_aw(void); +void m68k_op_movem_16_er_al(void); +void m68k_op_movem_16_er_pcdi(void); +void m68k_op_movem_16_er_pcix(void); +void m68k_op_movem_32_er_pi(void); +void m68k_op_movem_32_er_ai(void); +void m68k_op_movem_32_er_di(void); +void m68k_op_movem_32_er_ix(void); +void m68k_op_movem_32_er_aw(void); +void m68k_op_movem_32_er_al(void); +void m68k_op_movem_32_er_pcdi(void); +void m68k_op_movem_32_er_pcix(void); +void m68k_op_movep_16_re(void); +void m68k_op_movep_32_re(void); +void m68k_op_movep_16_er(void); +void m68k_op_movep_32_er(void); +void m68k_op_moves_8_ai(void); +void m68k_op_moves_8_pi(void); +void m68k_op_moves_8_pi7(void); +void m68k_op_moves_8_pd(void); +void m68k_op_moves_8_pd7(void); +void m68k_op_moves_8_di(void); +void m68k_op_moves_8_ix(void); +void m68k_op_moves_8_aw(void); +void m68k_op_moves_8_al(void); +void m68k_op_moves_16_ai(void); +void m68k_op_moves_16_pi(void); +void m68k_op_moves_16_pd(void); +void m68k_op_moves_16_di(void); +void m68k_op_moves_16_ix(void); +void m68k_op_moves_16_aw(void); +void m68k_op_moves_16_al(void); +void m68k_op_moves_32_ai(void); +void m68k_op_moves_32_pi(void); +void m68k_op_moves_32_pd(void); +void m68k_op_moves_32_di(void); +void m68k_op_moves_32_ix(void); +void m68k_op_moves_32_aw(void); +void m68k_op_moves_32_al(void); +void m68k_op_moveq_32(void); +void m68k_op_muls_16_d(void); +void m68k_op_muls_16_ai(void); +void m68k_op_muls_16_pi(void); +void m68k_op_muls_16_pd(void); +void m68k_op_muls_16_di(void); +void m68k_op_muls_16_ix(void); +void m68k_op_muls_16_aw(void); +void m68k_op_muls_16_al(void); +void m68k_op_muls_16_pcdi(void); +void m68k_op_muls_16_pcix(void); +void m68k_op_muls_16_i(void); +void m68k_op_mulu_16_d(void); +void m68k_op_mulu_16_ai(void); +void m68k_op_mulu_16_pi(void); +void m68k_op_mulu_16_pd(void); +void m68k_op_mulu_16_di(void); +void m68k_op_mulu_16_ix(void); +void m68k_op_mulu_16_aw(void); +void m68k_op_mulu_16_al(void); +void m68k_op_mulu_16_pcdi(void); +void m68k_op_mulu_16_pcix(void); +void m68k_op_mulu_16_i(void); +void m68k_op_mull_32_d(void); +void m68k_op_mull_32_ai(void); +void m68k_op_mull_32_pi(void); +void m68k_op_mull_32_pd(void); +void m68k_op_mull_32_di(void); +void m68k_op_mull_32_ix(void); +void m68k_op_mull_32_aw(void); +void m68k_op_mull_32_al(void); +void m68k_op_mull_32_pcdi(void); +void m68k_op_mull_32_pcix(void); +void m68k_op_mull_32_i(void); +void m68k_op_nbcd_8_d(void); +void m68k_op_nbcd_8_ai(void); +void m68k_op_nbcd_8_pi(void); +void m68k_op_nbcd_8_pi7(void); +void m68k_op_nbcd_8_pd(void); +void m68k_op_nbcd_8_pd7(void); +void m68k_op_nbcd_8_di(void); +void m68k_op_nbcd_8_ix(void); +void m68k_op_nbcd_8_aw(void); +void m68k_op_nbcd_8_al(void); +void m68k_op_neg_8_d(void); +void m68k_op_neg_8_ai(void); +void m68k_op_neg_8_pi(void); +void m68k_op_neg_8_pi7(void); +void m68k_op_neg_8_pd(void); +void m68k_op_neg_8_pd7(void); +void m68k_op_neg_8_di(void); +void m68k_op_neg_8_ix(void); +void m68k_op_neg_8_aw(void); +void m68k_op_neg_8_al(void); +void m68k_op_neg_16_d(void); +void m68k_op_neg_16_ai(void); +void m68k_op_neg_16_pi(void); +void m68k_op_neg_16_pd(void); +void m68k_op_neg_16_di(void); +void m68k_op_neg_16_ix(void); +void m68k_op_neg_16_aw(void); +void m68k_op_neg_16_al(void); +void m68k_op_neg_32_d(void); +void m68k_op_neg_32_ai(void); +void m68k_op_neg_32_pi(void); +void m68k_op_neg_32_pd(void); +void m68k_op_neg_32_di(void); +void m68k_op_neg_32_ix(void); +void m68k_op_neg_32_aw(void); +void m68k_op_neg_32_al(void); +void m68k_op_negx_8_d(void); +void m68k_op_negx_8_ai(void); +void m68k_op_negx_8_pi(void); +void m68k_op_negx_8_pi7(void); +void m68k_op_negx_8_pd(void); +void m68k_op_negx_8_pd7(void); +void m68k_op_negx_8_di(void); +void m68k_op_negx_8_ix(void); +void m68k_op_negx_8_aw(void); +void m68k_op_negx_8_al(void); +void m68k_op_negx_16_d(void); +void m68k_op_negx_16_ai(void); +void m68k_op_negx_16_pi(void); +void m68k_op_negx_16_pd(void); +void m68k_op_negx_16_di(void); +void m68k_op_negx_16_ix(void); +void m68k_op_negx_16_aw(void); +void m68k_op_negx_16_al(void); +void m68k_op_negx_32_d(void); +void m68k_op_negx_32_ai(void); +void m68k_op_negx_32_pi(void); +void m68k_op_negx_32_pd(void); +void m68k_op_negx_32_di(void); +void m68k_op_negx_32_ix(void); +void m68k_op_negx_32_aw(void); +void m68k_op_negx_32_al(void); +void m68k_op_nop(void); +void m68k_op_not_8_d(void); +void m68k_op_not_8_ai(void); +void m68k_op_not_8_pi(void); +void m68k_op_not_8_pi7(void); +void m68k_op_not_8_pd(void); +void m68k_op_not_8_pd7(void); +void m68k_op_not_8_di(void); +void m68k_op_not_8_ix(void); +void m68k_op_not_8_aw(void); +void m68k_op_not_8_al(void); +void m68k_op_not_16_d(void); +void m68k_op_not_16_ai(void); +void m68k_op_not_16_pi(void); +void m68k_op_not_16_pd(void); +void m68k_op_not_16_di(void); +void m68k_op_not_16_ix(void); +void m68k_op_not_16_aw(void); +void m68k_op_not_16_al(void); +void m68k_op_not_32_d(void); +void m68k_op_not_32_ai(void); +void m68k_op_not_32_pi(void); +void m68k_op_not_32_pd(void); +void m68k_op_not_32_di(void); +void m68k_op_not_32_ix(void); +void m68k_op_not_32_aw(void); +void m68k_op_not_32_al(void); +void m68k_op_or_8_er_d(void); +void m68k_op_or_8_er_ai(void); +void m68k_op_or_8_er_pi(void); +void m68k_op_or_8_er_pi7(void); +void m68k_op_or_8_er_pd(void); +void m68k_op_or_8_er_pd7(void); +void m68k_op_or_8_er_di(void); +void m68k_op_or_8_er_ix(void); +void m68k_op_or_8_er_aw(void); +void m68k_op_or_8_er_al(void); +void m68k_op_or_8_er_pcdi(void); +void m68k_op_or_8_er_pcix(void); +void m68k_op_or_8_er_i(void); +void m68k_op_or_16_er_d(void); +void m68k_op_or_16_er_ai(void); +void m68k_op_or_16_er_pi(void); +void m68k_op_or_16_er_pd(void); +void m68k_op_or_16_er_di(void); +void m68k_op_or_16_er_ix(void); +void m68k_op_or_16_er_aw(void); +void m68k_op_or_16_er_al(void); +void m68k_op_or_16_er_pcdi(void); +void m68k_op_or_16_er_pcix(void); +void m68k_op_or_16_er_i(void); +void m68k_op_or_32_er_d(void); +void m68k_op_or_32_er_ai(void); +void m68k_op_or_32_er_pi(void); +void m68k_op_or_32_er_pd(void); +void m68k_op_or_32_er_di(void); +void m68k_op_or_32_er_ix(void); +void m68k_op_or_32_er_aw(void); +void m68k_op_or_32_er_al(void); +void m68k_op_or_32_er_pcdi(void); +void m68k_op_or_32_er_pcix(void); +void m68k_op_or_32_er_i(void); +void m68k_op_or_8_re_ai(void); +void m68k_op_or_8_re_pi(void); +void m68k_op_or_8_re_pi7(void); +void m68k_op_or_8_re_pd(void); +void m68k_op_or_8_re_pd7(void); +void m68k_op_or_8_re_di(void); +void m68k_op_or_8_re_ix(void); +void m68k_op_or_8_re_aw(void); +void m68k_op_or_8_re_al(void); +void m68k_op_or_16_re_ai(void); +void m68k_op_or_16_re_pi(void); +void m68k_op_or_16_re_pd(void); +void m68k_op_or_16_re_di(void); +void m68k_op_or_16_re_ix(void); +void m68k_op_or_16_re_aw(void); +void m68k_op_or_16_re_al(void); +void m68k_op_or_32_re_ai(void); +void m68k_op_or_32_re_pi(void); +void m68k_op_or_32_re_pd(void); +void m68k_op_or_32_re_di(void); +void m68k_op_or_32_re_ix(void); +void m68k_op_or_32_re_aw(void); +void m68k_op_or_32_re_al(void); +void m68k_op_ori_8_d(void); +void m68k_op_ori_8_ai(void); +void m68k_op_ori_8_pi(void); +void m68k_op_ori_8_pi7(void); +void m68k_op_ori_8_pd(void); +void m68k_op_ori_8_pd7(void); +void m68k_op_ori_8_di(void); +void m68k_op_ori_8_ix(void); +void m68k_op_ori_8_aw(void); +void m68k_op_ori_8_al(void); +void m68k_op_ori_16_d(void); +void m68k_op_ori_16_ai(void); +void m68k_op_ori_16_pi(void); +void m68k_op_ori_16_pd(void); +void m68k_op_ori_16_di(void); +void m68k_op_ori_16_ix(void); +void m68k_op_ori_16_aw(void); +void m68k_op_ori_16_al(void); +void m68k_op_ori_32_d(void); +void m68k_op_ori_32_ai(void); +void m68k_op_ori_32_pi(void); +void m68k_op_ori_32_pd(void); +void m68k_op_ori_32_di(void); +void m68k_op_ori_32_ix(void); +void m68k_op_ori_32_aw(void); +void m68k_op_ori_32_al(void); +void m68k_op_ori_16_toc(void); +void m68k_op_ori_16_tos(void); +void m68k_op_pack_16_rr(void); +void m68k_op_pack_16_mm_ax7(void); +void m68k_op_pack_16_mm_ay7(void); +void m68k_op_pack_16_mm_axy7(void); +void m68k_op_pack_16_mm(void); +void m68k_op_pea_32_ai(void); +void m68k_op_pea_32_di(void); +void m68k_op_pea_32_ix(void); +void m68k_op_pea_32_aw(void); +void m68k_op_pea_32_al(void); +void m68k_op_pea_32_pcdi(void); +void m68k_op_pea_32_pcix(void); +void m68k_op_reset(void); +void m68k_op_ror_8_s(void); +void m68k_op_ror_16_s(void); +void m68k_op_ror_32_s(void); +void m68k_op_ror_8_r(void); +void m68k_op_ror_16_r(void); +void m68k_op_ror_32_r(void); +void m68k_op_ror_16_ai(void); +void m68k_op_ror_16_pi(void); +void m68k_op_ror_16_pd(void); +void m68k_op_ror_16_di(void); +void m68k_op_ror_16_ix(void); +void m68k_op_ror_16_aw(void); +void m68k_op_ror_16_al(void); +void m68k_op_rol_8_s(void); +void m68k_op_rol_16_s(void); +void m68k_op_rol_32_s(void); +void m68k_op_rol_8_r(void); +void m68k_op_rol_16_r(void); +void m68k_op_rol_32_r(void); +void m68k_op_rol_16_ai(void); +void m68k_op_rol_16_pi(void); +void m68k_op_rol_16_pd(void); +void m68k_op_rol_16_di(void); +void m68k_op_rol_16_ix(void); +void m68k_op_rol_16_aw(void); +void m68k_op_rol_16_al(void); +void m68k_op_roxr_8_s(void); +void m68k_op_roxr_16_s(void); +void m68k_op_roxr_32_s(void); +void m68k_op_roxr_8_r(void); +void m68k_op_roxr_16_r(void); +void m68k_op_roxr_32_r(void); +void m68k_op_roxr_16_ai(void); +void m68k_op_roxr_16_pi(void); +void m68k_op_roxr_16_pd(void); +void m68k_op_roxr_16_di(void); +void m68k_op_roxr_16_ix(void); +void m68k_op_roxr_16_aw(void); +void m68k_op_roxr_16_al(void); +void m68k_op_roxl_8_s(void); +void m68k_op_roxl_16_s(void); +void m68k_op_roxl_32_s(void); +void m68k_op_roxl_8_r(void); +void m68k_op_roxl_16_r(void); +void m68k_op_roxl_32_r(void); +void m68k_op_roxl_16_ai(void); +void m68k_op_roxl_16_pi(void); +void m68k_op_roxl_16_pd(void); +void m68k_op_roxl_16_di(void); +void m68k_op_roxl_16_ix(void); +void m68k_op_roxl_16_aw(void); +void m68k_op_roxl_16_al(void); +void m68k_op_rtd_32(void); +void m68k_op_rte_32(void); +void m68k_op_rtm_32(void); +void m68k_op_rtr_32(void); +void m68k_op_rts_32(void); +void m68k_op_sbcd_8_rr(void); +void m68k_op_sbcd_8_mm_ax7(void); +void m68k_op_sbcd_8_mm_ay7(void); +void m68k_op_sbcd_8_mm_axy7(void); +void m68k_op_sbcd_8_mm(void); +void m68k_op_st_8_d(void); +void m68k_op_st_8_ai(void); +void m68k_op_st_8_pi(void); +void m68k_op_st_8_pi7(void); +void m68k_op_st_8_pd(void); +void m68k_op_st_8_pd7(void); +void m68k_op_st_8_di(void); +void m68k_op_st_8_ix(void); +void m68k_op_st_8_aw(void); +void m68k_op_st_8_al(void); +void m68k_op_sf_8_d(void); +void m68k_op_sf_8_ai(void); +void m68k_op_sf_8_pi(void); +void m68k_op_sf_8_pi7(void); +void m68k_op_sf_8_pd(void); +void m68k_op_sf_8_pd7(void); +void m68k_op_sf_8_di(void); +void m68k_op_sf_8_ix(void); +void m68k_op_sf_8_aw(void); +void m68k_op_sf_8_al(void); +void m68k_op_shi_8_d(void); +void m68k_op_sls_8_d(void); +void m68k_op_scc_8_d(void); +void m68k_op_scs_8_d(void); +void m68k_op_sne_8_d(void); +void m68k_op_seq_8_d(void); +void m68k_op_svc_8_d(void); +void m68k_op_svs_8_d(void); +void m68k_op_spl_8_d(void); +void m68k_op_smi_8_d(void); +void m68k_op_sge_8_d(void); +void m68k_op_slt_8_d(void); +void m68k_op_sgt_8_d(void); +void m68k_op_sle_8_d(void); +void m68k_op_shi_8_ai(void); +void m68k_op_shi_8_pi(void); +void m68k_op_shi_8_pi7(void); +void m68k_op_shi_8_pd(void); +void m68k_op_shi_8_pd7(void); +void m68k_op_shi_8_di(void); +void m68k_op_shi_8_ix(void); +void m68k_op_shi_8_aw(void); +void m68k_op_shi_8_al(void); +void m68k_op_sls_8_ai(void); +void m68k_op_sls_8_pi(void); +void m68k_op_sls_8_pi7(void); +void m68k_op_sls_8_pd(void); +void m68k_op_sls_8_pd7(void); +void m68k_op_sls_8_di(void); +void m68k_op_sls_8_ix(void); +void m68k_op_sls_8_aw(void); +void m68k_op_sls_8_al(void); +void m68k_op_scc_8_ai(void); +void m68k_op_scc_8_pi(void); +void m68k_op_scc_8_pi7(void); +void m68k_op_scc_8_pd(void); +void m68k_op_scc_8_pd7(void); +void m68k_op_scc_8_di(void); +void m68k_op_scc_8_ix(void); +void m68k_op_scc_8_aw(void); +void m68k_op_scc_8_al(void); +void m68k_op_scs_8_ai(void); +void m68k_op_scs_8_pi(void); +void m68k_op_scs_8_pi7(void); +void m68k_op_scs_8_pd(void); +void m68k_op_scs_8_pd7(void); +void m68k_op_scs_8_di(void); +void m68k_op_scs_8_ix(void); +void m68k_op_scs_8_aw(void); +void m68k_op_scs_8_al(void); +void m68k_op_sne_8_ai(void); +void m68k_op_sne_8_pi(void); +void m68k_op_sne_8_pi7(void); +void m68k_op_sne_8_pd(void); +void m68k_op_sne_8_pd7(void); +void m68k_op_sne_8_di(void); +void m68k_op_sne_8_ix(void); +void m68k_op_sne_8_aw(void); +void m68k_op_sne_8_al(void); +void m68k_op_seq_8_ai(void); +void m68k_op_seq_8_pi(void); +void m68k_op_seq_8_pi7(void); +void m68k_op_seq_8_pd(void); +void m68k_op_seq_8_pd7(void); +void m68k_op_seq_8_di(void); +void m68k_op_seq_8_ix(void); +void m68k_op_seq_8_aw(void); +void m68k_op_seq_8_al(void); +void m68k_op_svc_8_ai(void); +void m68k_op_svc_8_pi(void); +void m68k_op_svc_8_pi7(void); +void m68k_op_svc_8_pd(void); +void m68k_op_svc_8_pd7(void); +void m68k_op_svc_8_di(void); +void m68k_op_svc_8_ix(void); +void m68k_op_svc_8_aw(void); +void m68k_op_svc_8_al(void); +void m68k_op_svs_8_ai(void); +void m68k_op_svs_8_pi(void); +void m68k_op_svs_8_pi7(void); +void m68k_op_svs_8_pd(void); +void m68k_op_svs_8_pd7(void); +void m68k_op_svs_8_di(void); +void m68k_op_svs_8_ix(void); +void m68k_op_svs_8_aw(void); +void m68k_op_svs_8_al(void); +void m68k_op_spl_8_ai(void); +void m68k_op_spl_8_pi(void); +void m68k_op_spl_8_pi7(void); +void m68k_op_spl_8_pd(void); +void m68k_op_spl_8_pd7(void); +void m68k_op_spl_8_di(void); +void m68k_op_spl_8_ix(void); +void m68k_op_spl_8_aw(void); +void m68k_op_spl_8_al(void); +void m68k_op_smi_8_ai(void); +void m68k_op_smi_8_pi(void); +void m68k_op_smi_8_pi7(void); +void m68k_op_smi_8_pd(void); +void m68k_op_smi_8_pd7(void); +void m68k_op_smi_8_di(void); +void m68k_op_smi_8_ix(void); +void m68k_op_smi_8_aw(void); +void m68k_op_smi_8_al(void); +void m68k_op_sge_8_ai(void); +void m68k_op_sge_8_pi(void); +void m68k_op_sge_8_pi7(void); +void m68k_op_sge_8_pd(void); +void m68k_op_sge_8_pd7(void); +void m68k_op_sge_8_di(void); +void m68k_op_sge_8_ix(void); +void m68k_op_sge_8_aw(void); +void m68k_op_sge_8_al(void); +void m68k_op_slt_8_ai(void); +void m68k_op_slt_8_pi(void); +void m68k_op_slt_8_pi7(void); +void m68k_op_slt_8_pd(void); +void m68k_op_slt_8_pd7(void); +void m68k_op_slt_8_di(void); +void m68k_op_slt_8_ix(void); +void m68k_op_slt_8_aw(void); +void m68k_op_slt_8_al(void); +void m68k_op_sgt_8_ai(void); +void m68k_op_sgt_8_pi(void); +void m68k_op_sgt_8_pi7(void); +void m68k_op_sgt_8_pd(void); +void m68k_op_sgt_8_pd7(void); +void m68k_op_sgt_8_di(void); +void m68k_op_sgt_8_ix(void); +void m68k_op_sgt_8_aw(void); +void m68k_op_sgt_8_al(void); +void m68k_op_sle_8_ai(void); +void m68k_op_sle_8_pi(void); +void m68k_op_sle_8_pi7(void); +void m68k_op_sle_8_pd(void); +void m68k_op_sle_8_pd7(void); +void m68k_op_sle_8_di(void); +void m68k_op_sle_8_ix(void); +void m68k_op_sle_8_aw(void); +void m68k_op_sle_8_al(void); +void m68k_op_stop(void); +void m68k_op_sub_8_er_d(void); +void m68k_op_sub_8_er_ai(void); +void m68k_op_sub_8_er_pi(void); +void m68k_op_sub_8_er_pi7(void); +void m68k_op_sub_8_er_pd(void); +void m68k_op_sub_8_er_pd7(void); +void m68k_op_sub_8_er_di(void); +void m68k_op_sub_8_er_ix(void); +void m68k_op_sub_8_er_aw(void); +void m68k_op_sub_8_er_al(void); +void m68k_op_sub_8_er_pcdi(void); +void m68k_op_sub_8_er_pcix(void); +void m68k_op_sub_8_er_i(void); +void m68k_op_sub_16_er_d(void); +void m68k_op_sub_16_er_a(void); +void m68k_op_sub_16_er_ai(void); +void m68k_op_sub_16_er_pi(void); +void m68k_op_sub_16_er_pd(void); +void m68k_op_sub_16_er_di(void); +void m68k_op_sub_16_er_ix(void); +void m68k_op_sub_16_er_aw(void); +void m68k_op_sub_16_er_al(void); +void m68k_op_sub_16_er_pcdi(void); +void m68k_op_sub_16_er_pcix(void); +void m68k_op_sub_16_er_i(void); +void m68k_op_sub_32_er_d(void); +void m68k_op_sub_32_er_a(void); +void m68k_op_sub_32_er_ai(void); +void m68k_op_sub_32_er_pi(void); +void m68k_op_sub_32_er_pd(void); +void m68k_op_sub_32_er_di(void); +void m68k_op_sub_32_er_ix(void); +void m68k_op_sub_32_er_aw(void); +void m68k_op_sub_32_er_al(void); +void m68k_op_sub_32_er_pcdi(void); +void m68k_op_sub_32_er_pcix(void); +void m68k_op_sub_32_er_i(void); +void m68k_op_sub_8_re_ai(void); +void m68k_op_sub_8_re_pi(void); +void m68k_op_sub_8_re_pi7(void); +void m68k_op_sub_8_re_pd(void); +void m68k_op_sub_8_re_pd7(void); +void m68k_op_sub_8_re_di(void); +void m68k_op_sub_8_re_ix(void); +void m68k_op_sub_8_re_aw(void); +void m68k_op_sub_8_re_al(void); +void m68k_op_sub_16_re_ai(void); +void m68k_op_sub_16_re_pi(void); +void m68k_op_sub_16_re_pd(void); +void m68k_op_sub_16_re_di(void); +void m68k_op_sub_16_re_ix(void); +void m68k_op_sub_16_re_aw(void); +void m68k_op_sub_16_re_al(void); +void m68k_op_sub_32_re_ai(void); +void m68k_op_sub_32_re_pi(void); +void m68k_op_sub_32_re_pd(void); +void m68k_op_sub_32_re_di(void); +void m68k_op_sub_32_re_ix(void); +void m68k_op_sub_32_re_aw(void); +void m68k_op_sub_32_re_al(void); +void m68k_op_suba_16_d(void); +void m68k_op_suba_16_a(void); +void m68k_op_suba_16_ai(void); +void m68k_op_suba_16_pi(void); +void m68k_op_suba_16_pd(void); +void m68k_op_suba_16_di(void); +void m68k_op_suba_16_ix(void); +void m68k_op_suba_16_aw(void); +void m68k_op_suba_16_al(void); +void m68k_op_suba_16_pcdi(void); +void m68k_op_suba_16_pcix(void); +void m68k_op_suba_16_i(void); +void m68k_op_suba_32_d(void); +void m68k_op_suba_32_a(void); +void m68k_op_suba_32_ai(void); +void m68k_op_suba_32_pi(void); +void m68k_op_suba_32_pd(void); +void m68k_op_suba_32_di(void); +void m68k_op_suba_32_ix(void); +void m68k_op_suba_32_aw(void); +void m68k_op_suba_32_al(void); +void m68k_op_suba_32_pcdi(void); +void m68k_op_suba_32_pcix(void); +void m68k_op_suba_32_i(void); +void m68k_op_subi_8_d(void); +void m68k_op_subi_8_ai(void); +void m68k_op_subi_8_pi(void); +void m68k_op_subi_8_pi7(void); +void m68k_op_subi_8_pd(void); +void m68k_op_subi_8_pd7(void); +void m68k_op_subi_8_di(void); +void m68k_op_subi_8_ix(void); +void m68k_op_subi_8_aw(void); +void m68k_op_subi_8_al(void); +void m68k_op_subi_16_d(void); +void m68k_op_subi_16_ai(void); +void m68k_op_subi_16_pi(void); +void m68k_op_subi_16_pd(void); +void m68k_op_subi_16_di(void); +void m68k_op_subi_16_ix(void); +void m68k_op_subi_16_aw(void); +void m68k_op_subi_16_al(void); +void m68k_op_subi_32_d(void); +void m68k_op_subi_32_ai(void); +void m68k_op_subi_32_pi(void); +void m68k_op_subi_32_pd(void); +void m68k_op_subi_32_di(void); +void m68k_op_subi_32_ix(void); +void m68k_op_subi_32_aw(void); +void m68k_op_subi_32_al(void); +void m68k_op_subq_8_d(void); +void m68k_op_subq_8_ai(void); +void m68k_op_subq_8_pi(void); +void m68k_op_subq_8_pi7(void); +void m68k_op_subq_8_pd(void); +void m68k_op_subq_8_pd7(void); +void m68k_op_subq_8_di(void); +void m68k_op_subq_8_ix(void); +void m68k_op_subq_8_aw(void); +void m68k_op_subq_8_al(void); +void m68k_op_subq_16_d(void); +void m68k_op_subq_16_a(void); +void m68k_op_subq_16_ai(void); +void m68k_op_subq_16_pi(void); +void m68k_op_subq_16_pd(void); +void m68k_op_subq_16_di(void); +void m68k_op_subq_16_ix(void); +void m68k_op_subq_16_aw(void); +void m68k_op_subq_16_al(void); +void m68k_op_subq_32_d(void); +void m68k_op_subq_32_a(void); +void m68k_op_subq_32_ai(void); +void m68k_op_subq_32_pi(void); +void m68k_op_subq_32_pd(void); +void m68k_op_subq_32_di(void); +void m68k_op_subq_32_ix(void); +void m68k_op_subq_32_aw(void); +void m68k_op_subq_32_al(void); +void m68k_op_subx_8_rr(void); +void m68k_op_subx_16_rr(void); +void m68k_op_subx_32_rr(void); +void m68k_op_subx_8_mm_ax7(void); +void m68k_op_subx_8_mm_ay7(void); +void m68k_op_subx_8_mm_axy7(void); +void m68k_op_subx_8_mm(void); +void m68k_op_subx_16_mm(void); +void m68k_op_subx_32_mm(void); +void m68k_op_swap_32(void); +void m68k_op_tas_8_d(void); +void m68k_op_tas_8_ai(void); +void m68k_op_tas_8_pi(void); +void m68k_op_tas_8_pi7(void); +void m68k_op_tas_8_pd(void); +void m68k_op_tas_8_pd7(void); +void m68k_op_tas_8_di(void); +void m68k_op_tas_8_ix(void); +void m68k_op_tas_8_aw(void); +void m68k_op_tas_8_al(void); +void m68k_op_trap(void); +void m68k_op_trapt(void); +void m68k_op_trapt_16(void); +void m68k_op_trapt_32(void); +void m68k_op_trapf(void); +void m68k_op_trapf_16(void); +void m68k_op_trapf_32(void); +void m68k_op_traphi(void); +void m68k_op_trapls(void); +void m68k_op_trapcc(void); +void m68k_op_trapcs(void); +void m68k_op_trapne(void); +void m68k_op_trapeq(void); +void m68k_op_trapvc(void); +void m68k_op_trapvs(void); +void m68k_op_trappl(void); +void m68k_op_trapmi(void); +void m68k_op_trapge(void); +void m68k_op_traplt(void); +void m68k_op_trapgt(void); +void m68k_op_traple(void); +void m68k_op_traphi_16(void); +void m68k_op_trapls_16(void); +void m68k_op_trapcc_16(void); +void m68k_op_trapcs_16(void); +void m68k_op_trapne_16(void); +void m68k_op_trapeq_16(void); +void m68k_op_trapvc_16(void); +void m68k_op_trapvs_16(void); +void m68k_op_trappl_16(void); +void m68k_op_trapmi_16(void); +void m68k_op_trapge_16(void); +void m68k_op_traplt_16(void); +void m68k_op_trapgt_16(void); +void m68k_op_traple_16(void); +void m68k_op_traphi_32(void); +void m68k_op_trapls_32(void); +void m68k_op_trapcc_32(void); +void m68k_op_trapcs_32(void); +void m68k_op_trapne_32(void); +void m68k_op_trapeq_32(void); +void m68k_op_trapvc_32(void); +void m68k_op_trapvs_32(void); +void m68k_op_trappl_32(void); +void m68k_op_trapmi_32(void); +void m68k_op_trapge_32(void); +void m68k_op_traplt_32(void); +void m68k_op_trapgt_32(void); +void m68k_op_traple_32(void); +void m68k_op_trapv(void); +void m68k_op_tst_8_d(void); +void m68k_op_tst_8_ai(void); +void m68k_op_tst_8_pi(void); +void m68k_op_tst_8_pi7(void); +void m68k_op_tst_8_pd(void); +void m68k_op_tst_8_pd7(void); +void m68k_op_tst_8_di(void); +void m68k_op_tst_8_ix(void); +void m68k_op_tst_8_aw(void); +void m68k_op_tst_8_al(void); +void m68k_op_tst_8_pcdi(void); +void m68k_op_tst_8_pcix(void); +void m68k_op_tst_8_i(void); +void m68k_op_tst_16_d(void); +void m68k_op_tst_16_a(void); +void m68k_op_tst_16_ai(void); +void m68k_op_tst_16_pi(void); +void m68k_op_tst_16_pd(void); +void m68k_op_tst_16_di(void); +void m68k_op_tst_16_ix(void); +void m68k_op_tst_16_aw(void); +void m68k_op_tst_16_al(void); +void m68k_op_tst_16_pcdi(void); +void m68k_op_tst_16_pcix(void); +void m68k_op_tst_16_i(void); +void m68k_op_tst_32_d(void); +void m68k_op_tst_32_a(void); +void m68k_op_tst_32_ai(void); +void m68k_op_tst_32_pi(void); +void m68k_op_tst_32_pd(void); +void m68k_op_tst_32_di(void); +void m68k_op_tst_32_ix(void); +void m68k_op_tst_32_aw(void); +void m68k_op_tst_32_al(void); +void m68k_op_tst_32_pcdi(void); +void m68k_op_tst_32_pcix(void); +void m68k_op_tst_32_i(void); +void m68k_op_unlk_32_a7(void); +void m68k_op_unlk_32(void); +void m68k_op_unpk_16_rr(void); +void m68k_op_unpk_16_mm_ax7(void); +void m68k_op_unpk_16_mm_ay7(void); +void m68k_op_unpk_16_mm_axy7(void); +void m68k_op_unpk_16_mm(void); +/* Build the opcode handler table */ +void m68ki_build_opcode_table(void); + +extern void (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */ +extern unsigned char m68ki_cycles[][0x10000]; + + +/* ======================================================================== */ +/* ============================== END OF FILE ============================= */ +/* ======================================================================== */ + +#endif /* M68KOPS__HEADER */ + + diff --git a/ genplus-gx/source/macros.h b/ genplus-gx/source/macros.h new file mode 100644 index 0000000..9c1890d --- /dev/null +++ b/ genplus-gx/source/macros.h @@ -0,0 +1,34 @@ + +#ifndef _MACROS_H_ +#define _MACROS_H_ + +#ifdef LSB_FIRST + +#define READ_BYTE(BASE, ADDR) (BASE)[(ADDR)^1] +#define READ_WORD(BASE, ADDR) (((BASE)[ADDR]<<8) | \ + (BASE)[(ADDR)+1]) +#define READ_WORD_LONG(BASE, ADDR) (((BASE)[ADDR]<<24) | \ + ((BASE)[(ADDR)+1]<<16) | \ + ((BASE)[(ADDR)+2]<<8) | \ + (BASE)[(ADDR)+3]) + +#define WRITE_BYTE(BASE, ADDR, VAL) (BASE)[(ADDR)^1] = (VAL)&0xff +#define WRITE_WORD(BASE, ADDR, VAL) (BASE)[ADDR] = ((VAL)>>8) & 0xff; \ + (BASE)[(ADDR)+1] = (VAL)&0xff +#define WRITE_WORD_LONG(BASE, ADDR, VAL) (BASE)[(ADDR] = ((VAL)>>24) & 0xff; \ + (BASE)[(ADDR)+1] = ((VAL)>>16)&0xff; \ + (BASE)[(ADDR)+2] = ((VAL)>>8)&0xff; \ + (BASE)[(ADDR)+3] = (VAL)&0xff + +#else + +#define READ_BYTE(BASE, ADDR) (BASE)[ADDR] +#define READ_WORD(BASE, ADDR) *(uint16 *)((BASE) + (ADDR)); +#define READ_WORD_LONG(BASE, ADDR) *(uint32 *)((BASE) + (ADDR)); +#define WRITE_BYTE(BASE, ADDR, VAL) (BASE)[ADDR] = VAL & 0xff +#define WRITE_WORD(BASE, ADDR, VAL) *(uint16 *)((BASE) + (ADDR)) = VAL & 0xffff +#define WRITE_WORD_LONG(BASE, ADDR, VAL) *(uint32 *)((BASE) + (ADDR)) = VAL & 0xffffffff +#endif + + +#endif /* _MACROS_H_ */ diff --git a/ genplus-gx/source/mem68k.c b/ genplus-gx/source/mem68k.c new file mode 100644 index 0000000..089ec65 --- /dev/null +++ b/ genplus-gx/source/mem68k.c @@ -0,0 +1,776 @@ +#include "shared.h" + +static uint16 next_int = 1; +static uint8 prot_bytes[2]; /* simple protection faking (from Picodrive) */ + +unsigned int m68k_read_bus_8(unsigned int address) +{ + uint16 temp = m68k_read_bus_16(address); + return ((address & 1) ? (temp & 0xFF) : (temp >> 8)); +} + +unsigned int m68k_read_bus_16(unsigned int address) +{ + next_int ^= 0xFFFF; + return next_int; +} + + +void m68k_unused_w (unsigned int address, unsigned int value) +{ + error("Unused 3 %08X = %08X \n", address, value); +} + +void m68k_unused_8_w (unsigned int address, unsigned int value) +{ + error("Unused 2 %08X = %02X \n", address, value); +} + +void m68k_unused_16_w (unsigned int address, unsigned int value) +{ + error("Unused 1 %08X = %04X \n", address, value); +} + +/* + Functions to handle memory accesses which cause the Genesis to halt + either temporarily (press RESET button to restart) or unrecoverably + (cycle power to restart). +*/ + +void m68k_lockup_w_8 (unsigned int address, unsigned int value) +{ + error ("Lockup %08X = %02X (%08X)\n", address, value, m68k_get_reg (NULL, M68K_REG_PC)); + gen_running = 0; + m68k_end_timeslice (); +} + +void m68k_lockup_w_16 (unsigned int address, unsigned int value) +{ + error ("Lockup %08X = %04X (%08X)\n", address, value, m68k_get_reg (NULL, M68K_REG_PC)); + gen_running = 0; + m68k_end_timeslice (); +} + +unsigned int m68k_lockup_r_8 (unsigned int address) +{ + error ("Lockup %08X.b (%08X)\n", address, m68k_get_reg (NULL, M68K_REG_PC)); + gen_running = 0; + m68k_end_timeslice (); + return -1; +} + +unsigned int m68k_lockup_r_16 (unsigned int address) +{ + error ("Lockup %08X.w (%08X)\n", address, m68k_get_reg (NULL, M68K_REG_PC)); + gen_running = 0; + m68k_end_timeslice (); + return -1; +} + + +/*--------------------------------------------------------------------------*/ +/* 68000 memory handlers */ +/*--------------------------------------------------------------------------*/ + +unsigned int m68k_read_memory_8 (unsigned int address) +{ + switch ((address >> 21) & 7) + { + case 0: /* ROM Cartridge*/ + case 1: + /* SRAM */ + if (sram.on) + { + if (address >= sram.start && address <= sram.end) + { + if (sram.custom) return (EEPROM_Read(address)&0xffff); + return READ_BYTE(sram.sram, (address - sram.start) & 0xffff); + } + } + + /* ROM data */ + if (address < genromsize) return READ_BYTE(cart_rom, address); + + /* default */ + return 0x00; + + case 7: /* RAM */ + return READ_BYTE(work_ram, address & 0xFFFF); + + case 5: /* Z80 & I/O */ + if (address <= 0xA0FFFF) /* Z80 area */ + { + /* Z80 controls Z bus */ + if (zbusack == 1) return (m68k_read_bus_8 (address)); + else + { + /* Read data from Z bus */ + switch (address & 0x6000) + { + case 0x0000: /* RAM */ + case 0x2000: + return (zram[(address & 0x1FFF)]); + + case 0x4000: /* YM2612 */ + return (fm_read (address & 3)); + + case 0x6000: /* Unused */ + switch (address & 0xFF00) + { + case 0x7F00: /* VDP */ + m68k_lockup_r_8 (address); + + default: /* Unused */ + return (0xFF); + } + break; + } + } + } + else if (address <= 0xA1001F) + { + /* I/O */ + return (io_read((address >> 1) & 0x0F)); + } + else if (address <= 0xA1FFFF) /* CONTROL */ + { + switch ((address >> 8) & 0xFF) + { + case 0x11: /* BUSACK */ + if ((address & 1) == 0) return (gen_busack_r () | (m68k_read_bus_8 (address) & 0xFE)); + else return (m68k_read_bus_8 (address)); + + case 0x00: /* UNKNOWN (BallZ) */ + case 0x10: /* MEMORY MODE */ + case 0x12: /* RESET */ + case 0x20: /* MEGA-CD */ + case 0x40: /* TMSS */ + case 0x41: /* BOOTROM */ + case 0x50: /* SVP REGISTERS */ + return (m68k_read_bus_8 (address)); + + default: /* Unused */ + return (m68k_lockup_r_8 (address)); + } + } + else + { + /* Unused */ + return (m68k_lockup_r_8 (address)); + } + + break; + + case 6: /* VDP */ + if ((address & 0xE700E0) == 0xC00000) + { + switch (address & 0x1F) + { + case 0x00: /* DATA */ + case 0x02: + return (vdp_data_r () >> 8); + + case 0x01: /* DATA */ + case 0x03: + return (vdp_data_r () & 0xFF); + + case 0x04: /* CTRL */ + case 0x06: + return ((m68k_read_bus_8 (address) & 0xFC) | (vdp_ctrl_r () >> 8)); + + case 0x05: /* CTRL */ + case 0x07: + return (vdp_ctrl_r () & 0xFF); + + case 0x08: /* HVC */ + case 0x0A: + case 0x0C: + case 0x0E: + return (vdp_hvc_r () >> 8); + + case 0x09: /* HVC */ + case 0x0B: + case 0x0D: + case 0x0F: + return (vdp_hvc_r () & 0xFF); + + case 0x10: /* PSG */ + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return (m68k_lockup_r_8 (address)); + + case 0x18: /* Unused */ + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + return (m68k_read_bus_8 (address)); + } + } + else + { + /* Unused */ + return (m68k_lockup_r_8 (address)); + } + break; + + case 2: /* Unused */ + /* Some unlicensed games have a simple protection device mapped here */ + return prot_bytes[(address>>2)&1]; + + case 3: /* Unused */ + return (m68k_read_bus_8 (address)); + + case 4: /* Unused */ + return (m68k_lockup_r_8 (address)); + } + + return -1; +} + + +unsigned int m68k_read_memory_16 (unsigned int address) +{ + switch ((address >> 21) & 7) + { + case 0: /* ROM Cartridge */ + case 1: + /* SRAM */ + if (sram.on) + { + if (address >= sram.start && address <= sram.end) + { + if (sram.custom) return (EEPROM_Read(address) & 0xffff); + return *(uint16 *)(sram.sram + ((address - sram.start) & 0xffff)); + } + } + + /* ROM Data */ + if (address < genromsize) return *(uint16 *)(cart_rom + address); + + /* j-CART */ + if (j_cart && ((address == 0x3FFFFE) || (address == 0x38FFFE))) + return (gamepad_read(5) | (gamepad_read(6) << 8)); + + /* Virtua Racing SVP */ + if (address == 0x30fe02) return 0x01; + + /* default */ + return 0x00; + + case 7: /* RAM */ + return *(uint16 *)(work_ram + (address & 0xffff)); + + case 5: /* Z80 & I/O */ + if (address <= 0xA0FFFF) /* Z80 area */ + { + if (zbusack == 1) return (m68k_read_bus_16 (address)); + else + { + uint8 temp; + switch (address & 0x6000) + { + case 0x0000: /* RAM */ + case 0x2000: + temp = zram[address & 0x1FFF]; + return (temp << 8 | temp); + + case 0x4000: /* YM2612 */ + temp = fm_read (address & 3); + return (temp << 8 | temp); + + case 0x6000: + switch (address & 0xFF00) + { + case 0x7F00: /* VDP */ + m68k_lockup_r_16 (address); + + default: /* Unused */ + return (0xFFFF); + } + break; + } + } + } + else if (address <= 0xA1001F) /* I/O */ + { + uint8 temp = io_read ((address >> 1) & 0x0F); + return (temp << 8 | temp); + } + else if (address <= 0xA1FFFF) /* CONTROL */ + { + switch ((address >> 8) & 0xFF) + { + case 0x11: /* BUSACK */ + return ((m68k_read_bus_16 (address) & 0xFEFF) | (gen_busack_r () << 8)); + + case 0x00: /* UNKNOWN (BallZ) */ + case 0x10: /* MEMORY MODE */ + case 0x12: /* RESET */ + case 0x20: /* MEGA-CD */ + case 0x40: /* TMSS */ + case 0x41: /* BOOTROM */ + case 0x50: /* SVP REGISTERS */ + return (m68k_read_bus_16 (address)); + + default: /* Unused */ + return (m68k_lockup_r_16 (address)); + } + } + else + { + /* Unused */ + return (m68k_lockup_r_16 (address)); + } + + break; + + case 6: /* VDP */ + if ((address & 0xE700E0) == 0xC00000) + { + switch (address & 0x1F) + { + case 0x00: /* DATA */ + case 0x02: + return (vdp_data_r ()); + + case 0x04: /* CTRL */ + case 0x06: + return (vdp_ctrl_r () | (m68k_read_bus_16 (address) & 0xFC00)); + + case 0x08: /* HVC */ + case 0x0A: + case 0x0C: + case 0x0E: + return (vdp_hvc_r ()); + + case 0x10: /* PSG */ + case 0x12: + case 0x14: + case 0x16: + return (m68k_lockup_r_16 (address)); + + case 0x18: /* Unused */ + case 0x1A: + case 0x1C: + case 0x1E: + return (m68k_read_bus_16 (address)); + } + } + else + { + return (m68k_lockup_r_16 (address)); + } + break; + + case 2: + case 3: + return (m68k_read_bus_16 (address)); + + case 4: + return (m68k_lockup_r_16 (address)); + } + + return (0xA5A5); +} + + +unsigned int m68k_read_memory_32 (unsigned int address) +{ + /* Split into 2 reads */ + return (m68k_read_memory_16 (address + 0) << 16 | + m68k_read_memory_16 (address + 2)); +} + + +void m68k_write_memory_8 (unsigned int address, unsigned int value) +{ + switch ((address >> 21) & 7) + { + case 7: /* RAM */ + WRITE_BYTE(work_ram, address & 0xFFFF, value); + return; + + case 6: /* VDP */ + if ((address & 0xE700E0) == 0xC00000) + { + switch (address & 0x1F) + { + case 0x00: /* DATA */ + case 0x01: + case 0x02: + case 0x03: + vdp_data_w (value << 8 | value); + return; + + case 0x04: /* CTRL */ + case 0x05: + case 0x06: + case 0x07: + vdp_ctrl_w (value << 8 | value); + return; + + case 0x08: /* HVC */ + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + m68k_lockup_w_8 (address, value); + return; + + case 0x10: /* PSG */ + case 0x12: + case 0x14: + case 0x16: + m68k_unused_8_w (address, value); + return; + + case 0x11: /* PSG */ + case 0x13: + case 0x15: + case 0x17: + psg_write (value); + return; + + case 0x18: /* Unused */ + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + m68k_unused_8_w (address, value); + return; + } + } + else + { + m68k_lockup_w_8 (address, value); + return; + } + + case 5: /* Z80 & IO */ + if (address <= 0xA0FFFF) /* Z80 area */ + { + if (zbusack == 1) + { + m68k_unused_8_w (address, value); + return; + } + else + { + switch (address & 0x6000) + { + case 0x0000: + case 0x2000: + zram[(address & 0x1FFF)] = value; + return; + + case 0x4000: + fm_write (address & 3, value); + return; + + case 0x6000: + switch (address & 0xFF00) + { + case 0x6000: /* BANK */ + gen_bank_w (value & 1); + return; + + case 0x7F00: /* VDP */ + m68k_lockup_w_8 (address, value); + return; + + default: /* Unused */ + m68k_unused_8_w (address, value); + return; + } + break; + } + } + } + else if (address <= 0xA1001F) /* I/O */ + { + /* I/O chip only gets /LWR */ + if (address & 1) io_write ((address >> 1) & 0x0F, value); + return; + } + else if (address <= 0xA1FFFF) /* CONTROL */ + { + switch ((address >> 8) & 0xFF) + { + case 0x11: /* BUSREQ */ + if ((address & 1) == 0) gen_busreq_w (value & 1); + else m68k_unused_8_w (address, value); + return; + + case 0x12: /* RESET */ + gen_reset_w (value & 1); + return; + + case 0x30: /* TIME */ + if (SSF2TNC) ssf2bankrom (address, value & 0xf); /* banked ROM */ + else if (address == 0xA130F1) /* banked SRAM */ + { + sram.on = value & 1; + sram.write = (value & 2) ? 0 : 1; + } + else m68k_unused_8_w (address, value); + return; + + case 0x10: /* MEMORY MODE */ + case 0x20: /* MEGA-CD */ + case 0x40: /* TMSS */ + case 0x41: /* BOOTROM */ + case 0x50: /* SVP REGISTERS */ + m68k_unused_8_w (address, value); + return; + + default: + m68k_lockup_w_8 (address, value); + return; + } + } + else + { + /* Unused */ + m68k_lockup_w_8 (address, value); + return; + } + break; + + case 0: /* ROM Cartridge */ + case 1: + + /* external SRAM */ + if (sram.on && sram.write) + { + if (address >= sram.start && address <= sram.end) + { + /* serial EEPROM */ + if (sram.custom) + { + EEPROM_Write(address, value); + return; + } + + /* normal SRAM */ + WRITE_BYTE(sram.sram, (address - sram.start) & 0xffff, value & 0xff); + return; + } + } + m68k_unused_8_w (address, value); + return; + + case 2: /* Unused */ + /* Some unlicensed games have a simple protection device mapped here */ + prot_bytes[(address>>2)&1] = value; + return; + case 3: + m68k_unused_8_w (address, value); + return; + + case 4: /* Unused */ + m68k_lockup_w_8 (address, value); + return; + } +} + + +void m68k_write_memory_16 (unsigned int address, unsigned int value) +{ + switch ((address >> 21) & 7) + { + case 7: /* Work RAM */ + *(uint16 *)(work_ram + (address& 0xFFFF)) = value & 0xffff; + return; + + case 6: /* VDP */ + if ((address & 0xE700E0) == 0xC00000) + { + switch (address & 0x1C) + { + case 0x00: /* DATA */ + vdp_data_w (value); + return; + + case 0x04: /* CTRL */ + vdp_ctrl_w (value); + return; + + case 0x08: /* HV counter */ + case 0x0C: /* HV counter */ + m68k_lockup_w_16 (address, value); + return; + + case 0x10: /* PSG */ + case 0x14: /* PSG */ + psg_write (value & 0xFF); + return; + + case 0x18: /* Unused */ + case 0x1C: /* Unused */ + m68k_unused_8_w (address, value); + return; + } + } + else + { + /* Invalid address */ + m68k_lockup_w_16 (address, value); + } + break; + + case 5: /* Z80 area, I/O chip, miscellaneous. */ + if (address <= 0xA0FFFF) /* Z80 area */ + { + /* Writes are ignored when the Z80 hogs the Z-bus */ + if (zbusack == 1) + { + m68k_unused_8_w (address, value); + return; + } + + /* Write into Z80 address space */ + switch (address & 0x6000) + { + case 0x0000: /* Work RAM */ + case 0x2000: /* Work RAM */ + zram[(address & 0x1FFF)] = (value >> 8) & 0xFF; + return; + + case 0x4000: /* YM2612 */ + fm_write (address & 3, (value >> 8) & 0xFF); + return; + + case 0x6000: /* Bank register and VDP */ + switch (address & 0x7F00) + { + case 0x6000: /* Bank register */ + gen_bank_w ((value >> 8) & 1); + return; + + case 0x7F00: /* VDP registers */ + m68k_lockup_w_16 (address, value); + return; + + default: /* Unused */ + m68k_unused_8_w (address, value); + return; + } + break; + } + } + else if (address <= 0xA1001F) /* I/O */ + { + io_write ((address >> 1) & 0x0F, value & 0x00FF); + return; + } + else if (address <= 0xA1FFFF) /* CONTROL */ + { + switch ((address >> 8) & 0xFF) + { + case 0x11: /* BUSREQ */ + gen_busreq_w ((value >> 8) & 1); + return; + + case 0x12: /* RESET */ + gen_reset_w ((value >> 8) & 1); + return; + + case 0x30: /* TIME */ + if (SSF2TNC) ssf2bankrom (address, value & 0xf); /* banked ROM */ + else if (address == 0xA130F1) /* banked SRAM */ + { + sram.on = value & 1; + sram.write = (value & 2) ? 0 : 1; + } + else m68k_unused_16_w (address, value); + return; + + case 0x10: /* MEMORY MODE */ + case 0x20: /* MEGA-CD */ + case 0x40: /* TMSS */ + case 0x41: /* BOOTROM */ + case 0x50: /* SVP REGISTERS */ + m68k_unused_16_w (address, value); + return; + + default: /* Unused */ + m68k_lockup_w_16 (address, value); + return; + } + } + else + { + m68k_lockup_w_16 (address, value); + return; + } + + break; + + case 0: /* Cartridge ROM */ + case 1: + /* J-CART extension (TH signal) */ + if ((address == 0x3FFFFE) || (address == 0x38FFFE)) + { + if (!j_cart) + { + j_cart = 1; + input_reset(pad_type); + } + gamepad_write(5, (value&1) <<6 ); + gamepad_write(6, (value&1) <<6); + return; + } + + /* external SRAM */ + if (sram.on && sram.write) + { + if (address >= sram.start && address <= sram.end) + { + /* serial EEPROM */ + if (sram.custom) + { + EEPROM_Write(address, value); + return; + } + + /* normal SRAM */ + *(uint16 *)(sram.sram + ((address - sram.start) & 0xffff)) = value & 0xffff; + return; + } + } + m68k_unused_16_w (address, value); + return; + + case 2: /* Unused */ + case 3: + m68k_unused_16_w (address, value); + return; + + case 4: /* Unused */ + m68k_lockup_w_16 (address, value); + return; + } +} + + +void m68k_write_memory_32 (unsigned int address, unsigned int value) +{ + /* Split into 2 writes */ + m68k_write_memory_16 (address, (value >> 16) & 0xFFFF); + m68k_write_memory_16 (address + 2, value & 0xFFFF); +} diff --git a/ genplus-gx/source/mem68k.h b/ genplus-gx/source/mem68k.h new file mode 100644 index 0000000..af23e68 --- /dev/null +++ b/ genplus-gx/source/mem68k.h @@ -0,0 +1,14 @@ + +#ifndef _MEM68K_H_ +#define _MEM68K_H_ + +/* Function prototypes */ +unsigned int m68k_read_bus_8 (unsigned int address); +unsigned int m68k_read_bus_16 (unsigned int address); +void m68k_unused_w (unsigned int address, unsigned int value); +void m68k_lockup_w_8 (unsigned int address, unsigned int value); +void m68k_lockup_w_16 (unsigned int address, unsigned int value); +unsigned int m68k_lockup_r_8 (unsigned int address); +unsigned int m68k_lockup_r_16 (unsigned int address); + +#endif /* _MEM68K_H_ */ diff --git a/ genplus-gx/source/membnk.c b/ genplus-gx/source/membnk.c new file mode 100644 index 0000000..f8b2c54 --- /dev/null +++ b/ genplus-gx/source/membnk.c @@ -0,0 +1,296 @@ +/* + membnk.c -- + Memory handlers Z80 access to the banked V-bus address space. +*/ + +#include "shared.h" + + +void z80_write_banked_memory(unsigned int address, unsigned int data) +{ + switch ((address >> 21) & 7) + { + case 0: /* Cartridge ROM */ + case 1: + z80bank_unused_w (address, data); + return; + + case 2: /* Unused */ + case 3: + z80bank_unused_w (address, data); + return; + + case 4: /* Unused (lockup) */ + z80bank_lockup_w (address, data); + return; + + case 5: /* Z80, I/O chip, etc. */ + if (address <= 0xA0FFFF) + { + z80bank_lockup_w (address, data); + return; + } + else + { + switch ((address >> 8) & 0xFF) + { + case 0x00: /* I/O chip */ + if(address <= 0xA1001F) io_write((address >> 1) & 0x0F, data); + else z80bank_unused_w (address, data); + return; + + case 0x11: /* /BUSREQ */ + if (address & 1) z80bank_unused_w (address, data); + else gen_busreq_w (data & 1); + return; + + case 0x12: /* /RESET (w) */ + if (address & 1) z80bank_unused_w (address, data); + else gen_reset_w (data & 1); + return; + + case 0x10: /* MEMORY MODE */ + case 0x13: /* TIME */ + case 0x20: /* ? */ + case 0x30: /* ? */ + z80bank_unused_w (address, data); + return; + + default: /* Invalid */ + z80bank_lockup_w (address, data); + return; + } + } + return; + + case 6: /* VDP */ + z80bank_vdp_w (address, data); + return; + + case 7: /* Work RAM */ + WRITE_BYTE(work_ram, address & 0xFFFF, data); + return; + } +} + + +int z80_read_banked_memory(unsigned int address) +{ + switch ((address >> 21) & 7) + { + case 0: /* Cartridge ROM */ + case 1: + return READ_BYTE(cart_rom, address); + + case 2: /* Unused */ + case 3: + return z80bank_unused_r (address); + + case 4: /* Unused (lockup) */ + return z80bank_lockup_r (address); + + case 5: /* Z80, I/O chip, etc. */ + if (address <= 0xA0FFFF) return z80bank_lockup_r (address); + else + { + switch ((address >> 8) & 0xFF) + { + case 0x00: /* I/O chip */ + if (address <= 0xA1001F) return io_read((address >> 1) & 0x0F); + else return z80bank_unused_r (address); + break; + + case 0x11: /* /BUSACK from Z80 */ + /* The Z80 can't read this bit (it would be halted + when the bit was zero) so we always return '1'. */ + return 0xFF; + + case 0x10: /* Unused */ + case 0x12: /* Unused */ + case 0x13: /* /TIME region */ + case 0x20: /* Unused */ + case 0x30: /* Unused */ + return z80bank_unused_r (address); + + default: /* Lockup */ + return z80bank_lockup_r (address); + } + } + break; + + case 6: /* VDP */ + return z80bank_vdp_r (address); + + case 7: /* Work RAM - can't be read on some Genesis models (!) */ + return 0xFF; + } + + return (-1); +} + + +void z80bank_vdp_w(int address, int data) +{ + if ((address & 0xE700E0) == 0xC00000) + { + switch (address & 0x1F) + { + case 0x00: /* Data port */ + case 0x01: + case 0x02: + case 0x03: + vdp_data_w (data << 8 | data); + return; + + case 0x04: /* Control port */ + case 0x05: + case 0x06: + case 0x07: + vdp_ctrl_w (data << 8 | data); + return; + + case 0x08: /* Lockup (HVC) */ + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + z80bank_lockup_w (address, data); + return; + + case 0x10: /* Unused */ + case 0x12: + case 0x14: + case 0x16: + z80bank_unused_w (address, data); + return; + + case 0x11: /* PSG */ + case 0x13: + case 0x15: + case 0x17: + psg_write (data); + return; + + case 0x18: /* Unused */ + case 0x19: + case 0x1A: + case 0x1B: + z80bank_unused_w (address, data); + return; + + case 0x1C: /* Test register */ + case 0x1D: + case 0x1E: + case 0x1F: + vdp_test_w (data << 8 | data); + return; + } + } + else + { + /* Invalid VDP address */ + z80bank_lockup_w (address, data); + return; + } +} + + +int z80bank_vdp_r(int address) +{ + if ((address & 0xE700E0) == 0xC00000) + { + switch (address & 0x1F) + { + case 0x00: /* Data */ + case 0x02: + return (vdp_data_r () >> 8) & 0xFF; + + case 0x01: /* Data */ + case 0x03: + return vdp_data_r () & 0xFF; + + case 0x04: /* Control */ + case 0x06: + return (0xFC | (vdp_ctrl_r () >> 8)) & 0xFF; + + case 0x05: /* Control */ + case 0x07: + return vdp_ctrl_r () & 0xFF; + + case 0x08: /* HVC */ + case 0x0A: + case 0x0C: + case 0x0E: + return (vdp_hvc_r () >> 8) & 0xFF; + + case 0x09: /* HVC */ + case 0x0B: + case 0x0D: + case 0x0F: + return vdp_hvc_r () & 0xFF; + + case 0x10: /* Lockup */ + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return z80bank_lockup_r (address); + + case 0x18: /* Unused */ + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + return (z80bank_unused_r (address) | 0xFF); + } + } + else + { + /* Invalid VDP address */ + return z80bank_lockup_r (address); + } + + return 0xFF; +} + + + + +/* + Handlers for access to unused addresses and those which make the + machine lock up. +*/ +void z80bank_unused_w(int address, int data) +{ + error("Z80 bank unused write %06X = %02X (%04X)\n", address, data, z80_get_reg(Z80_PC)); +} + +int z80bank_unused_r(int address) +{ + error ("Z80 bank unused read %06X (%04X)\n", address, z80_get_reg (Z80_PC)); + return (address & 1) ? 0x00 : 0xFF; +} + +void z80bank_lockup_w(int address, int data) +{ + error("Z80 bank lockup write %06X = %02X (%04X)\n", address, data, z80_get_reg(Z80_PC)); + gen_running = 0; + z80_end_timeslice (); +} + +int z80bank_lockup_r(int address) +{ + error ("Z80 bank lockup read %06X (%04X)\n", address, z80_get_reg (Z80_PC)); + gen_running = 0; + z80_end_timeslice (); + return 0xFF; +} diff --git a/ genplus-gx/source/membnk.h b/ genplus-gx/source/membnk.h new file mode 100644 index 0000000..70e8e38 --- /dev/null +++ b/ genplus-gx/source/membnk.h @@ -0,0 +1,15 @@ + +#ifndef _MEMBNK_H_ +#define _MEMBNK_H_ + +/* Function prototypes */ +void z80_write_banked_memory (unsigned int address, unsigned int data); +int z80_read_banked_memory (unsigned int address); +void z80bank_vdp_w (int address, int data); +int z80bank_vdp_r (int address); +void z80bank_unused_w (int address, int data); +int z80bank_unused_r (int address); +void z80bank_lockup_w (int address, int data); +int z80bank_lockup_r (int address); + +#endif /* _MEMBNK_H_ */ diff --git a/ genplus-gx/source/memvdp.c b/ genplus-gx/source/memvdp.c new file mode 100644 index 0000000..0a71f70 --- /dev/null +++ b/ genplus-gx/source/memvdp.c @@ -0,0 +1,48 @@ +/* + memvdp.c -- + Memory handlers for when the VDP reads the V-bus during DMA. +*/ + +#include "shared.h" + +unsigned int vdp_dma_r(unsigned int address) +{ + switch ((address >> 21) & 7) + { + case 0: /* Cartridge ROM */ + case 1: + return *(uint16 *)(cart_rom + address); + + case 2: /* Unused */ + case 3: + return 0xFF00; + + case 4: /* Work RAM */ + case 6: + case 7: + return *(uint16 *)(work_ram + (address & 0xffff)); + + case 5: /* Z80 area and I/O chip */ + /* Z80 area always returns $FFFF */ + if (address <= 0xA0FFFF) + { + /* Return $FFFF only when the Z80 isn't hogging the Z-bus. + (e.g. Z80 isn't reset and 68000 has the bus) */ + return (zbusack == 0) ? 0xFFFF : *(uint16 *)(work_ram + (address & 0xffff)); + } + + /* The I/O chip and work RAM try to drive the data bus which + results in both values being combined in random ways when read. + We return the I/O chip values which seem to have precedence, */ + else if (address <= 0xA1001F) + { + uint8 temp = io_read((address >> 1) & 0x0F); + return (temp << 8 | temp); + } + /* All remaining locations access work RAM */ + else return *(uint16 *)(work_ram + (address & 0xffff)); + } + + return -1; +} + diff --git a/ genplus-gx/source/memvdp.h b/ genplus-gx/source/memvdp.h new file mode 100644 index 0000000..365301f --- /dev/null +++ b/ genplus-gx/source/memvdp.h @@ -0,0 +1,8 @@ + +#ifndef _MEMVDP_H_ +#define _MEMVDP_H_ + +/* Function prototypes */ +unsigned int vdp_dma_r (unsigned int address); + +#endif /* _MEMVDP_H_ */ diff --git a/ genplus-gx/source/memz80.c b/ genplus-gx/source/memz80.c new file mode 100644 index 0000000..de5005c --- /dev/null +++ b/ genplus-gx/source/memz80.c @@ -0,0 +1,246 @@ +/* + memz80.c -- + Memory handlers for Z80 memory and port access, and the Z80 to + VDP interface. +*/ + +#define LOG_PORT 0 /* 1= Log Z80 I/O port accesses */ + +#include "shared.h" + + +unsigned int cpu_readmem16(unsigned int address) +{ + switch ((address >> 13) & 7) + { + case 0: /* Work RAM */ + case 1: + return zram[address & 0x1FFF]; + + case 2: /* YM2612 */ + return fm_read (address & 3); + + case 3: /* VDP */ + if ((address & 0xFF00) == 0x7F00) return z80_vdp_r (address); + return 0xFF; + + default: /* V-bus bank */ + return z80_read_banked_memory (zbank | (address & 0x7FFF)); + } + + return 0xFF; +} + + +void cpu_writemem16(unsigned int address, unsigned int data) +{ + switch ((address >> 13) & 7) + { + case 0: /* Work RAM */ + case 1: + zram[address & 0x1FFF] = data; + return; + + case 2: /* YM2612 */ + fm_write (address & 3, data); + return; + + case 3: /* Bank register and VDP */ + switch (address & 0xFF00) + { + case 0x6000: + gen_bank_w (data & 1); + return; + + case 0x7F00: + z80_vdp_w (address, data); + return; + + default: + z80_unused_w (address, data); + return; + } + return; + + default: /* V-bus bank */ + z80_write_banked_memory (zbank | (address & 0x7FFF), data); + return; + } +} + + +int z80_vdp_r(int address) +{ + switch (address & 0xFF) + { + case 0x00: /* VDP data port */ + case 0x02: + return (vdp_data_r () >> 8) & 0xFF; + + case 0x01: /* VDP data port */ + case 0x03: + return (vdp_data_r () & 0xFF); + + case 0x04: /* VDP control port */ + case 0x06: + return (0xFF | ((vdp_ctrl_r () >> 8) & 3)); + + case 0x05: /* VDP control port */ + case 0x07: + return (vdp_ctrl_r () & 0xFF); + + case 0x08: /* HV counter */ + case 0x0A: + case 0x0C: + case 0x0E: + return (vdp_hvc_r () >> 8) & 0xFF; + + case 0x09: /* HV counter */ + case 0x0B: + case 0x0D: + case 0x0F: + return (vdp_hvc_r () & 0xFF); + + case 0x10: /* Unused (PSG) */ + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return z80_lockup_r (address); + + case 0x18: /* Unused */ + case 0x19: + case 0x1A: + case 0x1B: + return z80_unused_r (address); + + case 0x1C: /* Unused (test register) */ + case 0x1D: + case 0x1E: + case 0x1F: + return z80_unused_r (address); + + default: /* Invalid VDP addresses */ + return z80_lockup_r (address); + } + + return 0xFF; +} + + +void z80_vdp_w(int address, int data) +{ + switch (address & 0xFF) + { + case 0x00: /* VDP data port */ + case 0x01: + case 0x02: + case 0x03: + vdp_data_w (data << 8 | data); + return; + + case 0x04: /* VDP control port */ + case 0x05: + case 0x06: + case 0x07: + vdp_ctrl_w (data << 8 | data); + return; + + case 0x08: /* Unused (HV counter) */ + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + z80_lockup_w (address, data); + return; + + case 0x11: /* PSG */ + case 0x13: + case 0x15: + case 0x17: + psg_write (data); + return; + + case 0x10: /* Unused */ + case 0x12: + case 0x14: + case 0x16: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + z80_unused_w (address, data); + return; + + case 0x1C: /* Test register */ + case 0x1D: + case 0x1E: + case 0x1F: + vdp_test_w (data << 8 | data); + return; + + default: /* Invalid VDP addresses */ + z80_lockup_w (address, data); + return; + } +} + + +/* + Port handlers. Ports are unused when not in Mark III compatability mode. + + Games that access ports anyway: + - Thunder Force IV reads port $BF in it's interrupt handler. +*/ + +unsigned int cpu_readport16(unsigned int port) +{ +#if LOG_PORT + error ("Z80 read port %04X (%04X)\n", port, z80_get_reg (Z80_PC)); +#endif + return 0xFF; +} + +void cpu_writeport16(unsigned int port, unsigned int data) +{ +#if LOG_PORT + error("Z80 write %02X to port %04X (%04X)\n", data, port, z80_get_reg(Z80_PC)); +#endif +} + + +/* + Handlers for access to unused addresses and those which make the + machine lock up. +*/ +void z80_unused_w(int address, int data) +{ + error("Z80 unused write %04X = %02X (%04X)\n", address, data, z80_get_reg(Z80_PC)); +} + +int z80_unused_r(int address) +{ + error ("Z80 unused read %04X (%04X)\n", address, z80_get_reg (Z80_PC)); + return 0xFF; +} + +void z80_lockup_w(int address, int data) +{ + error("Z80 lockup write %04X = %02X (%04X)\n", address, data, z80_get_reg(Z80_PC)); + gen_running = 0; + z80_end_timeslice (); +} + +int z80_lockup_r(int address) +{ + error ("Z80 lockup read %04X (%04X)\n", address, z80_get_reg (Z80_PC)); + gen_running = 0; + z80_end_timeslice (); + return 0xFF; +} diff --git a/ genplus-gx/source/memz80.h b/ genplus-gx/source/memz80.h new file mode 100644 index 0000000..5c3ad0a --- /dev/null +++ b/ genplus-gx/source/memz80.h @@ -0,0 +1,17 @@ + +#ifndef _MEMZ80_H_ +#define _MEMZ80_H_ + +/* Function prototypes */ +unsigned int cpu_readmem16 (unsigned int address); +void cpu_writemem16 (unsigned int address, unsigned int data); +unsigned int cpu_readport16 (unsigned int port); +void cpu_writeport16 (unsigned int port, unsigned int data); +void z80_unused_w (int address, int data); +int z80_unused_r (int address); +void z80_lockup_w (int address, int data); +int z80_lockup_r (int address); +int z80_vdp_r (int address); +void z80_vdp_w (int address, int data); + +#endif /* _MEMZ80_H_ */ diff --git a/ genplus-gx/source/ngc/gcaram.c b/ genplus-gx/source/ngc/gcaram.c new file mode 100644 index 0000000..6304720 --- /dev/null +++ b/ genplus-gx/source/ngc/gcaram.c @@ -0,0 +1,86 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ***************************************************************************/ +#include "shared.h" +#include "gcaram.h" + +#define ARAMSTART 0x8000 + +/** + * Nintendo GameCube ARAM Wrapper for libOGC aram.c + * + * This is an often overlooked area of ~16Mb extra RAM + * It's use in Genesis Plus is to shadow the ROM. + * Actually, only SSF2TNC needs shadowing, but it's always + * Good to know :) + */ + +#define ARAM_READ 1 +#define ARAM_WRITE 0 + +/** + * StartARAM + * This simply sets up the call to internal libOGC. + * Passing NULL for array list, and 0 items to allocate. + * Required so libOGC knows to handle any interrupts etc. + */ +void +StartARAM () +{ + AR_Init (NULL, 0); +} + +/** + * ARAMPut + * + * Move data from MAIN memory to ARAM + */ +void +ARAMPut (char *src, char *dst, int len) +{ + DCFlushRange (src, len); + AR_StartDMA( ARAM_WRITE, (u32)src, (u32)dst, len); + while (AR_GetDMAStatus()); +} + +/** + * ARAMFetch + * + * This function will move data from ARAM to MAIN memory + */ +void +ARAMFetch (char *dst, char *src, int len) +{ + DCInvalidateRange(dst, len); + AR_StartDMA( ARAM_READ, (u32) dst, (u32) src, len); + while (AR_GetDMAStatus()); +} + +/** + * ShadowROM + * Copy the rom from cart_rom into ARAM + * NB: libOGC appears to use the first 0x4000 bytes. + * As there's plenty left, all ARAM addresses are 0x8000 based. + * Here, the ROM is simply copied in one swift movement :) + */ +void +ShadowROM () +{ + ARAMPut (cart_rom, (void *) ARAMSTART, genromsize); +} diff --git a/ genplus-gx/source/ngc/gcaram.h b/ genplus-gx/source/ngc/gcaram.h new file mode 100644 index 0000000..b4cd8c0 --- /dev/null +++ b/ genplus-gx/source/ngc/gcaram.h @@ -0,0 +1,25 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ***************************************************************************/ + +extern void StartARAM (); +void ShadowROM (); +void ARAMFetch (char *src, char *dst, int len); +void ARAMPut (char *src, char *dst, int len); + diff --git a/ genplus-gx/source/ngc/gui/confjoy.c b/ genplus-gx/source/ngc/gui/confjoy.c new file mode 100644 index 0000000..01fb9c3 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/confjoy.c @@ -0,0 +1,208 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * NGC - Joypad Configuration + ***************************************************************************/ +#include + +extern int domenu (char items[][20], int maxitems); +extern unsigned short gcpadmap[]; +extern int menu; +extern char menutitle[]; +extern int padcal; +extern void reloadrom(); + +int configpadcount = 11; +char padmenu[11][20] = { + {"Genesis A - B"}, + {"Genesis B - A"}, + {"Genesis C - X"}, + {"Genesis X - TL"}, + {"Genesis Y - Y"}, + {"Genesis Z - TR"}, + {"Analog - 70"}, + {"Type - 3BUTTONS"}, + {"PortA - GAMEPAD"}, + {"PortB - GAMEPAD"}, + {" Exit Config "} +}; + +uint8 mpads[6] = {0, 1, 2, 3, 4, 5 }; /*** Default Mapping ***/ +uint8 sys_type[2] = {0,0}; +uint8 old_sys_type[2] = {0,0}; + +/**************************************************************************** + * UpdatePadMaps + ****************************************************************************/ +void UpdatePadMaps (uint8 padvalue, int padnum) +{ + padmenu[padnum][15] = ' '; + padmenu[padnum][16] = ' '; + switch (padvalue) + { + case 0: + gcpadmap[padnum] = PAD_BUTTON_B; + padmenu[padnum][16] = 'B'; + break; + + case 1: + gcpadmap[padnum] = PAD_BUTTON_A; + padmenu[padnum][16] = 'A'; + break; + + case 2: + gcpadmap[padnum] = PAD_BUTTON_X; + padmenu[padnum][16] = 'X'; + break; + + case 3: + gcpadmap[padnum] = PAD_TRIGGER_R; + padmenu[padnum][15] = 'T'; + padmenu[padnum][16] = 'R'; + break; + + case 4: + gcpadmap[padnum] = PAD_BUTTON_Y; + padmenu[padnum][16] = 'Y'; + break; + + case 5: + gcpadmap[padnum] = PAD_TRIGGER_L; + padmenu[padnum][15] = 'T'; + padmenu[padnum][16] = 'L'; + break; + } +} + +/**************************************************************************** + * ConfigureJoypads + ****************************************************************************/ +void ConfigureJoypads () +{ + int ret; + int quit = 0; + int prevmenu = menu; + + strcpy (menutitle, ""); + + if (pad_type) sprintf (padmenu[7], "Type - 6BUTTONS"); + else sprintf (padmenu[7], "Type - 3BUTTONS"); + + if (input.system[1] == SYSTEM_MENACER) sprintf (padmenu[8], "PortA - NONE"); + else if (sys_type[0] == 0) sprintf (padmenu[8], "PortA - GAMEPAD"); + else if (sys_type[0] == 1) sprintf (padmenu[8], "PortA - MULTITAP"); + else if (sys_type[0] == 2) sprintf (padmenu[8], "PortA - NONE"); + + if (input.system[1] == SYSTEM_MENACER) sprintf (padmenu[9], "PortB - MENACER"); + else if (sys_type[1] == 0) sprintf (padmenu[9], "PortB - GAMEPAD"); + else if (sys_type[1] == 1) sprintf (padmenu[9], "PortB - MULTITAP"); + else if (sys_type[1] == 2) sprintf (padmenu[9], "PortB - NONE"); + + menu = 0; + while (quit == 0) + { + ret = domenu (&padmenu[0], configpadcount); + switch (ret) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + mpads[ret]++; + if (mpads[ret] > 5) mpads[ret] = 0; + UpdatePadMaps (mpads[ret], ret); + break; + + case 6: /*** Pad calibrate analog ***/ + case -8: + if (ret>0) padcal += 2; + else padcal -= 2; + if (padcal > 90) padcal = 0; + if (padcal < 0) padcal = 90; + sprintf (padmenu[6], "Analog - %02d", padcal); + break; + + case 7: + pad_type ^= 1; + if (pad_type) sprintf (padmenu[7], "Type - 6BUTTONS"); + else sprintf (padmenu[7], "Type - 3BUTTONS"); + system_reset(); + break; + + case 8: + if (input.system[1] == SYSTEM_MENACER) break; + sys_type[0] ++; + if (sys_type[0] > 2) sys_type[0] = 0; + + if (sys_type[0] == 0) + { + input.system[0] = SYSTEM_GAMEPAD; + sprintf (padmenu[8], "PortA - GAMEPAD"); + } + else if (sys_type[0] == 1) + { + input.system[0] = SYSTEM_TEAMPLAYER; + sprintf (padmenu[8], "PortA - MULTITAP"); + } + else if (sys_type[0] == 2) + { + input.system[0] = NO_SYSTEM; + sprintf (padmenu[8], "PortA - NONE"); + } + break; + + case 9: + if (input.system[1] == SYSTEM_MENACER) break; + sys_type[1] ++; + if (sys_type[1] > 2) sys_type[1] = 0; + + if (sys_type[1] == 0) + { + input.system[1] = SYSTEM_GAMEPAD; + sprintf (padmenu[9], "PortB - GAMEPAD"); + } + else if (sys_type[1] == 1) + { + input.system[1] = SYSTEM_TEAMPLAYER; + sprintf (padmenu[9], "PortB - MULTITAP"); + } + else if (sys_type[1] == 2) + { + input.system[1] = NO_SYSTEM; + sprintf (padmenu[9], "PortB - NONE"); + } + break; + + case 10: + case -1: + if ((old_sys_type[0] != sys_type[0]) || (old_sys_type[1] != sys_type[1])) + { + old_sys_type[0] = sys_type[0]; + old_sys_type[1] = sys_type[1]; + system_reset(); + } + quit = 1; + break; + } + } + + menu = prevmenu; +} diff --git a/ genplus-gx/source/ngc/gui/dkpro.h b/ genplus-gx/source/ngc/gui/dkpro.h new file mode 100644 index 0000000..fb9cf82 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/dkpro.h @@ -0,0 +1,877 @@ +/******************************************************************* + * Image File : /public/dkpro.bmp + * Width : 218 + * Height : 65 + * + * This header contains a compressed Zip image. + * Use zlib1.2.3 uncompress function to restore. + *******************************************************************/ + +#define dkpro_RAW 28340 +#define dkpro_COMPRESSED 6887 +#define dkpro_WIDTH 218 +#define dkpro_HEIGHT 65 + +unsigned char dkpro[6887] = { + 0x78, 0xda, 0xed, 0x9c, 0x67, 0x70, 0x54, 0x57, 0x96, 0xc7, 0xf9, 0xb8, + 0xb5, 0x55, 0xbb, 0x55, + 0x53, 0xb5, 0xb5, 0xb3, 0x9e, 0x31, 0xc6, 0x98, 0x20, 0x31, 0xf6, 0x38, + 0x7b, 0xc6, 0x33, 0x0e, + 0xe3, 0x34, 0x60, 0x03, 0x36, 0xc9, 0x80, 0x49, 0xb6, 0x41, 0x42, 0x59, + 0x42, 0x39, 0x20, 0x75, + 0xbf, 0xd3, 0x92, 0x90, 0x84, 0x32, 0x41, 0x02, 0x11, 0xd4, 0x48, 0xe4, + 0x60, 0x72, 0x0e, 0x22, + 0x98, 0x8c, 0x8d, 0x04, 0x26, 0x83, 0x31, 0xe0, 0xec, 0x71, 0x06, 0xe7, + 0xa0, 0xfd, 0xdd, 0xdb, + 0xdd, 0xaf, 0x5f, 0xb7, 0xba, 0x07, 0x30, 0xc6, 0xf6, 0x87, 0xd6, 0xbf, + 0x1e, 0xb4, 0x6e, 0x38, + 0xf7, 0xe4, 0x7b, 0xee, 0x7b, 0x4f, 0xdd, 0x4e, 0xda, 0x5d, 0x1d, 0xaa, + 0xc3, 0x52, 0xba, 0x38, + 0x3b, 0x46, 0x75, 0x70, 0xb6, 0x8f, 0xbd, 0xb1, 0xfe, 0xc6, 0xf8, 0x3f, + 0x3a, 0x6f, 0x8c, 0x6f, + 0xef, 0xbc, 0x29, 0xb6, 0xa3, 0xb3, 0x53, 0x74, 0x57, 0x67, 0xb7, 0x88, + 0x76, 0x12, 0xc2, 0x6f, + 0x06, 0x55, 0xe1, 0xd8, 0xea, 0xe6, 0xa8, 0x3f, 0x38, 0xc3, 0x62, 0xfa, + 0xd5, 0x94, 0xc4, 0x2f, + 0x28, 0xdd, 0x91, 0x71, 0x74, 0xdc, 0xf9, 0xdc, 0x0b, 0x85, 0xa7, 0x72, + 0x0f, 0x8c, 0x5f, 0x95, + 0x59, 0x37, 0x29, 0x32, 0xf1, 0xfe, 0xfa, 0x3f, 0xc4, 0xb4, 0x77, 0x76, + 0x8a, 0x09, 0x9b, 0x15, + 0xb2, 0xdd, 0xaf, 0x6f, 0xaf, 0xb0, 0x94, 0x9b, 0x89, 0xa3, 0xbe, 0x93, + 0x9d, 0x09, 0xef, 0x39, + 0x5a, 0xed, 0xad, 0x12, 0x0c, 0x3f, 0xca, 0x8e, 0xca, 0x84, 0x94, 0xdb, + 0x9d, 0xed, 0xa3, 0xba, + 0x84, 0xec, 0xf6, 0x6b, 0xda, 0x2b, 0xf5, 0x26, 0x67, 0x58, 0x74, 0xe5, + 0xf8, 0x7f, 0x65, 0x6a, + 0xab, 0x18, 0xdf, 0x49, 0x50, 0x18, 0x3f, 0xb8, 0x6c, 0x37, 0x6e, 0x5d, + 0xee, 0xd3, 0x33, 0x6e, + 0x88, 0xeb, 0xec, 0xec, 0x16, 0x19, 0xd2, 0xe0, 0x2f, 0x9f, 0x0f, 0x3b, + 0xd4, 0xdf, 0x1b, 0x35, + 0xaf, 0xa8, 0x75, 0x6c, 0x2b, 0xf6, 0xf8, 0xc6, 0xf8, 0x46, 0x3c, 0xf8, + 0x9e, 0x98, 0xf2, 0x46, + 0xd7, 0x0f, 0xf2, 0xad, 0x78, 0xfb, 0xbe, 0x33, 0x68, 0xcd, 0x3f, 0x69, + 0x1b, 0x36, 0xfd, 0xa6, + 0xd8, 0x2e, 0xd5, 0xed, 0x52, 0x43, 0x9a, 0xfc, 0x85, 0x50, 0xdd, 0x2d, + 0xa5, 0xb3, 0xb3, 0x43, + 0x74, 0x69, 0x49, 0x6b, 0x76, 0xab, 0xf1, 0xb5, 0x7c, 0xa5, 0xa1, 0x6c, + 0xe5, 0xb2, 0xd3, 0x27, + 0x72, 0x52, 0xf6, 0xcb, 0x36, 0x69, 0x92, 0x5d, 0x72, 0x48, 0xde, 0x96, + 0x1f, 0xdc, 0xd6, 0xfb, + 0x56, 0xdc, 0x63, 0x0d, 0x6c, 0x5a, 0xb0, 0x3b, 0xef, 0xfe, 0xfa, 0x9b, + 0xa2, 0xc3, 0xab, 0xda, + 0xa5, 0x84, 0x34, 0x7a, 0xfd, 0xd1, 0xcd, 0xd9, 0x61, 0x74, 0x8f, 0xca, + 0x8f, 0x53, 0x5b, 0x8d, + 0xaf, 0xe4, 0x4b, 0x8d, 0x6f, 0xb0, 0xc9, 0xb7, 0x72, 0x5c, 0xe6, 0x48, + 0x86, 0x3c, 0x2b, 0x4f, + 0x4b, 0x5f, 0xe9, 0x2f, 0x03, 0x40, 0x7f, 0xe9, 0x27, 0x7d, 0xf8, 0x3d, + 0x5a, 0x2a, 0x65, 0x27, + 0xb6, 0x6c, 0xc5, 0xae, 0xae, 0x19, 0x5f, 0x2a, 0xbb, 0x95, 0x8c, 0xcf, + 0xea, 0xe8, 0x0c, 0x8b, + 0x0a, 0x69, 0xf4, 0x7a, 0xc7, 0x58, 0x58, 0xca, 0x1f, 0xa7, 0x94, 0x24, + 0xfd, 0x68, 0xff, 0x46, + 0x2e, 0x6a, 0x7c, 0x85, 0x25, 0x3e, 0x90, 0x06, 0x19, 0x8d, 0xb5, 0x06, + 0xcb, 0x70, 0x79, 0x41, + 0x5e, 0x6c, 0x83, 0x11, 0x32, 0x84, 0xde, 0x61, 0x32, 0x4e, 0x5e, 0xd5, + 0xd6, 0xbd, 0xa4, 0x67, + 0x5e, 0x22, 0x4f, 0x1e, 0x9a, 0x78, 0x4b, 0xca, 0xef, 0x9d, 0x37, 0x24, + 0xdd, 0xe0, 0xbc, 0x21, + 0x31, 0x74, 0x5d, 0xdb, 0xd5, 0xa1, 0xaa, 0x5d, 0x7a, 0x20, 0x9b, 0x85, + 0xcd, 0xea, 0x34, 0x7a, + 0x4d, 0x61, 0x6b, 0xee, 0xe7, 0xc6, 0x67, 0xf2, 0x99, 0x7c, 0x4e, 0xdc, + 0x9c, 0x93, 0x72, 0xe2, + 0x69, 0x08, 0x96, 0x19, 0x75, 0x19, 0x8c, 0xc4, 0x76, 0x03, 0x24, 0x81, + 0xac, 0xf9, 0x9d, 0x7c, + 0x21, 0x9f, 0x69, 0x7c, 0x65, 0x04, 0xaf, 0x34, 0x43, 0xb8, 0x3a, 0xac, + 0x99, 0xdc, 0x21, 0xb9, + 0x6d, 0xdd, 0xd1, 0x35, 0xb5, 0xc3, 0xc4, 0xe6, 0x94, 0xef, 0xed, 0x9f, + 0x88, 0xc2, 0x25, 0x62, + 0xac, 0x51, 0x86, 0x62, 0x89, 0xc8, 0xab, 0xc0, 0x48, 0x79, 0x4e, 0xc6, + 0xca, 0x19, 0xec, 0xf6, + 0xa9, 0x7c, 0x12, 0xc2, 0xcf, 0x05, 0xea, 0x8a, 0x39, 0x35, 0x1d, 0x92, + 0xda, 0xc6, 0x58, 0x97, + 0xc8, 0x23, 0xf2, 0x95, 0xfd, 0x43, 0x51, 0xf8, 0x42, 0x8e, 0x92, 0x0f, + 0x87, 0x73, 0x45, 0x5d, + 0x35, 0x46, 0x92, 0x45, 0x17, 0x90, 0x1d, 0x3f, 0x96, 0x0f, 0x43, 0xf8, + 0x79, 0x60, 0x7c, 0x21, + 0x8d, 0x35, 0x37, 0x27, 0xf9, 0xd7, 0xf6, 0xed, 0x27, 0xee, 0x4e, 0xbd, + 0x64, 0x7f, 0x5f, 0xde, + 0x67, 0xff, 0xfa, 0x5a, 0x56, 0x90, 0x0d, 0x47, 0x4b, 0xec, 0x4f, 0x44, + 0x8c, 0x3c, 0x2f, 0x42, + 0xa4, 0xaa, 0x5a, 0x32, 0x84, 0x6b, 0xc3, 0x87, 0x58, 0xe4, 0x7d, 0xe3, + 0x73, 0x69, 0xf0, 0xb3, + 0x99, 0xaa, 0x15, 0xe7, 0x17, 0x7c, 0x99, 0xf7, 0xae, 0xbc, 0x2b, 0xef, + 0x11, 0x8b, 0x33, 0x89, + 0xb0, 0x38, 0x89, 0xbf, 0x26, 0x44, 0x63, 0x37, 0xb5, 0xcb, 0x85, 0x70, + 0x2d, 0x18, 0x28, 0x47, + 0x88, 0xa1, 0x77, 0x8d, 0x4f, 0xc5, 0xe9, 0x67, 0xb3, 0x9b, 0xa7, 0x66, + 0xc4, 0x7d, 0x61, 0x7f, + 0xdb, 0xf1, 0x16, 0xe7, 0xad, 0xcf, 0x64, 0xaa, 0x44, 0x48, 0xa2, 0x24, + 0x5d, 0x33, 0x12, 0x43, + 0xb8, 0x66, 0x8c, 0x94, 0x63, 0xc4, 0xd1, 0x5b, 0xc6, 0x47, 0x52, 0x6f, + 0xb5, 0x59, 0x75, 0x97, + 0xd4, 0xbf, 0x95, 0x5f, 0x4c, 0xbf, 0x60, 0x9c, 0x97, 0xf3, 0xd8, 0x74, + 0x16, 0x95, 0x44, 0x4a, + 0x08, 0xbf, 0x11, 0x44, 0xc9, 0x6b, 0xf2, 0x96, 0x9c, 0x37, 0x3e, 0x90, + 0xe9, 0x35, 0x1d, 0x4d, + 0x9b, 0x85, 0x3b, 0x3b, 0x8e, 0xde, 0xe6, 0x78, 0xdb, 0x7e, 0x56, 0xce, + 0x62, 0xd1, 0xd5, 0xec, + 0x46, 0x69, 0x57, 0x81, 0x74, 0x13, 0x69, 0xd7, 0x1d, 0xe9, 0x57, 0xb9, + 0x5a, 0xaa, 0xbe, 0x52, + 0xaf, 0x61, 0x95, 0xf4, 0x5f, 0x54, 0xbe, 0x40, 0x88, 0x91, 0x43, 0x44, + 0xd2, 0x59, 0xe3, 0x5d, + 0x99, 0x66, 0xb1, 0xd9, 0x2d, 0x75, 0xa9, 0x71, 0x1f, 0xd8, 0x4f, 0x3b, + 0x4e, 0xcb, 0x1b, 0xd2, + 0xcc, 0xf9, 0x2a, 0x53, 0xb2, 0xae, 0x10, 0x99, 0x3e, 0x92, 0xa4, 0x4b, + 0xc6, 0x15, 0xcf, 0xbc, + 0x7a, 0x64, 0xfa, 0x69, 0x2d, 0xfd, 0xdf, 0xf2, 0x99, 0x89, 0xa5, 0xd4, + 0x8e, 0xea, 0xaa, 0x63, + 0xa3, 0xf1, 0xc3, 0x64, 0x66, 0x5c, 0xfd, 0x2a, 0x69, 0x7e, 0xf2, 0x65, + 0x5e, 0x47, 0x09, 0x03, + 0x23, 0x41, 0x0e, 0x12, 0x4b, 0xa7, 0x8d, 0x37, 0x65, 0xaa, 0xc7, 0x66, + 0xd4, 0x8b, 0xb7, 0x54, + 0x9d, 0x4d, 0x3f, 0x65, 0x9c, 0x90, 0x93, 0xf4, 0x8d, 0x83, 0xab, 0xb1, + 0x57, 0x88, 0x2c, 0x19, + 0x23, 0x2f, 0xc8, 0x30, 0xce, 0xdb, 0x0a, 0xc3, 0xa9, 0x33, 0xd3, 0x25, + 0xfb, 0x8a, 0x67, 0x5f, + 0x1d, 0x72, 0xd0, 0x57, 0x2c, 0x27, 0xc5, 0xa1, 0xe6, 0x6a, 0xa3, 0x69, + 0xc9, 0x09, 0x3a, 0x3e, + 0x93, 0x9d, 0x40, 0x5d, 0xb1, 0x54, 0x52, 0xb1, 0x58, 0x2f, 0x8d, 0x2c, + 0x93, 0xa6, 0xc7, 0xe7, + 0xc0, 0xa3, 0xb2, 0x4d, 0x86, 0x86, 0xb2, 0x81, 0x97, 0xe7, 0x6c, 0x2c, + 0xfd, 0xa2, 0x29, 0x91, + 0x15, 0x43, 0x59, 0xf1, 0x79, 0xf6, 0x0c, 0x65, 0xfb, 0x8c, 0xeb, 0x26, + 0x65, 0x20, 0x24, 0xcb, + 0x2b, 0x72, 0x5a, 0x4e, 0xb0, 0x6f, 0xd5, 0xd6, 0xba, 0x6c, 0xd6, 0x6d, + 0x56, 0xc7, 0x48, 0x5b, + 0xd1, 0xf9, 0x9c, 0x23, 0x54, 0x27, 0xa7, 0x39, 0x53, 0x65, 0x88, 0xed, + 0x8a, 0xa1, 0xfc, 0x6e, + 0xbf, 0x6c, 0x91, 0xcd, 0x1a, 0x4d, 0xf2, 0x2a, 0x3a, 0xcd, 0x11, 0xfb, + 0x55, 0x50, 0xb8, 0x72, + 0xe4, 0xa2, 0x77, 0xa7, 0xec, 0x34, 0x57, 0xdb, 0x2e, 0x6b, 0xa9, 0x93, + 0xc6, 0x06, 0x1d, 0x9f, + 0x49, 0x74, 0xf9, 0xde, 0x45, 0xa8, 0x46, 0xe3, 0x36, 0xb8, 0xcb, 0xc1, + 0xd3, 0x46, 0x70, 0xee, + 0x1f, 0xa4, 0x31, 0x84, 0x3d, 0x3e, 0x03, 0xea, 0x36, 0xdd, 0x97, 0xc9, + 0x2a, 0x07, 0x90, 0x64, + 0x73, 0x1b, 0x34, 0xc9, 0x4a, 0x99, 0x27, 0xe5, 0xd8, 0x7d, 0x04, 0x67, + 0xcf, 0x04, 0x2c, 0x9d, + 0x7b, 0x5d, 0xe4, 0x0c, 0xa4, 0xe5, 0xfd, 0x72, 0x5c, 0x8e, 0x18, 0x67, + 0x64, 0xb2, 0x3b, 0xce, + 0xc2, 0x9d, 0x5d, 0x22, 0x0f, 0x18, 0x47, 0x8c, 0x43, 0x72, 0x98, 0xbd, + 0x6e, 0xac, 0x18, 0x72, + 0xa5, 0x3f, 0x06, 0x3e, 0x99, 0xe2, 0xa7, 0x97, 0xdb, 0xd0, 0xc8, 0xf5, + 0xf9, 0xb1, 0xa1, 0xdb, + 0x26, 0x9f, 0xb5, 0xde, 0x94, 0x87, 0xd0, 0x72, 0xb0, 0x9f, 0x4c, 0xa2, + 0xe2, 0x0b, 0xf9, 0xc1, + 0x7c, 0xbe, 0xd7, 0x0a, 0xb7, 0x23, 0x34, 0xd7, 0x69, 0x52, 0x88, 0x77, + 0x36, 0xbb, 0x71, 0x48, + 0x5a, 0x88, 0x44, 0x97, 0xdc, 0x06, 0xd6, 0x7b, 0xfe, 0xb2, 0x77, 0x90, + 0xbe, 0xc6, 0xaa, 0xd1, + 0xc4, 0x62, 0x16, 0x3c, 0xfd, 0x12, 0x3f, 0x59, 0xb2, 0x07, 0xcb, 0x1c, + 0x32, 0x4e, 0xca, 0xc4, + 0x9a, 0x8e, 0x89, 0xca, 0x66, 0x9d, 0xa7, 0x45, 0xc4, 0xbe, 0x6e, 0x6f, + 0x76, 0x34, 0x13, 0x67, + 0x0d, 0x70, 0x5d, 0x70, 0x85, 0x28, 0xe4, 0x4a, 0xc3, 0x2b, 0x5b, 0x3d, + 0xf7, 0xf1, 0x41, 0xab, + 0xfc, 0x51, 0xf2, 0xe8, 0x29, 0xbc, 0x62, 0x2a, 0x57, 0xbe, 0x9a, 0x90, + 0xb3, 0x56, 0xc9, 0x8f, + 0xe6, 0x5a, 0xdf, 0xc9, 0x51, 0xb9, 0x5b, 0xf2, 0x03, 0xae, 0xa5, 0xda, + 0x72, 0xb0, 0xd0, 0xa7, + 0xe8, 0xd7, 0xcb, 0x9b, 0xca, 0xe3, 0xaa, 0x27, 0x85, 0x59, 0xea, 0xf9, + 0x83, 0x0b, 0xad, 0x9c, + 0xfb, 0x9f, 0xc0, 0x66, 0x8a, 0xeb, 0x7c, 0xf4, 0x33, 0xd8, 0x47, 0xa2, + 0x40, 0xf8, 0x5a, 0x3f, + 0x7b, 0x9a, 0x43, 0x8c, 0x8e, 0x15, 0xc7, 0xcf, 0x2e, 0x69, 0x5b, 0xe4, + 0xc9, 0x6e, 0xfc, 0xaa, + 0xd9, 0x38, 0x26, 0xd5, 0x6e, 0x9b, 0xdd, 0x34, 0x71, 0x69, 0x6a, 0x8b, + 0x71, 0x80, 0x9c, 0xb9, + 0x5f, 0x8a, 0xd8, 0xcd, 0x8a, 0x2e, 0x8b, 0x62, 0xa0, 0xfe, 0x1d, 0xa7, + 0x33, 0x49, 0xab, 0x7c, + 0x6e, 0xa2, 0x55, 0xda, 0xe3, 0xf9, 0x81, 0x66, 0x78, 0xe7, 0xfd, 0x34, + 0x14, 0xc3, 0xfb, 0x48, + 0x59, 0x21, 0xdf, 0x9a, 0x6b, 0x7d, 0x45, 0x5e, 0xb8, 0x87, 0xd6, 0x60, + 0x34, 0xf3, 0xc8, 0x9c, + 0x1f, 0x11, 0x69, 0x17, 0xdd, 0x50, 0x36, 0x8b, 0xd0, 0x12, 0xa6, 0xd0, + 0xe7, 0xe5, 0xfa, 0x12, + 0x67, 0x9b, 0xfb, 0x89, 0x98, 0x22, 0xdd, 0x97, 0x43, 0xae, 0xb4, 0x4a, + 0x14, 0x1c, 0xad, 0x64, + 0xea, 0x61, 0x78, 0xd2, 0xb8, 0x9f, 0x20, 0x4b, 0xb1, 0x45, 0x2b, 0x97, + 0x87, 0x21, 0x3b, 0xd8, + 0x75, 0x0e, 0x18, 0x87, 0xa5, 0xb2, 0x16, 0x9b, 0x55, 0x87, 0xa5, 0xdc, + 0x56, 0x71, 0x32, 0x75, + 0xaf, 0xec, 0x25, 0xde, 0x97, 0xb2, 0x7e, 0x69, 0x50, 0x94, 0x81, 0x52, + 0x19, 0x2f, 0x25, 0x7a, + 0xad, 0x12, 0x3e, 0x95, 0x92, 0xd1, 0x93, 0xd0, 0xa2, 0xf7, 0x9e, 0x58, + 0xab, 0x74, 0x44, 0x8b, + 0xae, 0x91, 0xbe, 0x33, 0xc6, 0xb9, 0x65, 0x73, 0xcd, 0xf3, 0x8c, 0x08, + 0xbe, 0x8e, 0xff, 0x88, + 0x32, 0x68, 0x44, 0xc1, 0xe1, 0x25, 0x73, 0xad, 0xcf, 0x90, 0xe3, 0x7e, + 0xe8, 0x05, 0xa3, 0x95, + 0x0f, 0x6f, 0xff, 0x72, 0x3f, 0x13, 0x72, 0xd9, 0x4c, 0xd5, 0x91, 0x6a, + 0x6c, 0x06, 0x36, 0xfb, + 0xc6, 0xa4, 0xf3, 0x09, 0x67, 0x9f, 0x07, 0xd0, 0xbd, 0x8b, 0x8a, 0x8d, + 0x4a, 0xe3, 0xfb, 0x2b, + 0xbc, 0x03, 0xf8, 0x23, 0xd6, 0xcf, 0x80, 0x83, 0xc0, 0x72, 0x28, 0xb9, + 0x95, 0xb4, 0xe3, 0x03, + 0x68, 0xa3, 0xc8, 0xad, 0x8f, 0x62, 0xb7, 0x36, 0x4a, 0xff, 0x8d, 0x3e, + 0x4a, 0x89, 0xff, 0x6d, + 0xb2, 0x4f, 0xf6, 0x1a, 0xcd, 0x52, 0xae, 0x6a, 0x90, 0xea, 0xce, 0xa9, + 0x11, 0x25, 0xcd, 0x59, + 0x3b, 0xd9, 0xdb, 0xf7, 0x4b, 0x0d, 0x3b, 0x6c, 0x45, 0x10, 0x54, 0x72, + 0x95, 0xb3, 0x82, 0x50, + 0x31, 0x25, 0xe3, 0xb1, 0x69, 0xd8, 0xab, 0x10, 0xaf, 0x4c, 0x42, 0x2b, + 0xef, 0x9a, 0xf8, 0x5e, + 0x6e, 0x81, 0x97, 0x4a, 0x0d, 0x35, 0xab, 0x4c, 0x7b, 0x49, 0x26, 0xe3, + 0xe3, 0x75, 0xed, 0x36, + 0x86, 0xdc, 0x63, 0xc0, 0x69, 0x99, 0x9b, 0x66, 0x39, 0x1c, 0x15, 0x61, + 0xe5, 0x7c, 0x33, 0xa7, + 0x95, 0x68, 0x1e, 0x5c, 0xab, 0x95, 0x40, 0xcb, 0xd3, 0x33, 0x8e, 0xbe, + 0x18, 0x59, 0x2c, 0x1f, + 0x9b, 0x6b, 0x7d, 0x88, 0x9f, 0xfd, 0x4d, 0x53, 0x2a, 0x63, 0x64, 0xa1, + 0x39, 0x32, 0x9f, 0xb1, + 0xc5, 0x9a, 0xd7, 0x6c, 0xe9, 0x21, 0x37, 0x49, 0x07, 0x8d, 0x9b, 0xc1, + 0x7d, 0xd8, 0x4a, 0x71, + 0xa4, 0xb8, 0xb8, 0x68, 0xd2, 0x79, 0x5f, 0xce, 0xc9, 0x5f, 0x90, 0x64, + 0x9c, 0x5e, 0x5b, 0xd8, + 0xcf, 0xbe, 0xb4, 0x48, 0xa4, 0x70, 0xc9, 0x8d, 0x4f, 0xf1, 0x01, 0x6b, + 0xfb, 0x47, 0xb2, 0x4b, + 0x06, 0x6a, 0x69, 0x8a, 0xcd, 0xf5, 0x0b, 0xa1, 0x5f, 0xaa, 0xa5, 0xb2, + 0xe9, 0x3a, 0x3d, 0x9f, + 0xcf, 0x15, 0xa6, 0x36, 0x4a, 0xdc, 0xfa, 0x8b, 0xd7, 0x77, 0x64, 0x93, + 0xa8, 0x2e, 0x6c, 0x3a, + 0x4e, 0xca, 0x4d, 0x8d, 0x05, 0x42, 0x09, 0x75, 0xd7, 0x2e, 0xd9, 0x49, + 0x2e, 0x2c, 0xad, 0xb9, + 0x25, 0x91, 0x9a, 0x71, 0x74, 0x4d, 0xc1, 0xee, 0xbc, 0xed, 0x54, 0x61, + 0x5b, 0x99, 0x39, 0x31, + 0x28, 0x26, 0x40, 0x73, 0x1c, 0xd2, 0xa6, 0xf0, 0x79, 0x31, 0x15, 0x54, + 0x23, 0xdc, 0xc4, 0xea, + 0x3a, 0xfa, 0x23, 0x64, 0xf6, 0xe0, 0x92, 0x74, 0x41, 0x57, 0xae, 0xf1, + 0x55, 0x7c, 0xca, 0x65, + 0x44, 0x3a, 0xf5, 0xda, 0x22, 0xd9, 0x48, 0xfd, 0xb0, 0x89, 0x99, 0x55, + 0x50, 0x88, 0x25, 0x7f, + 0x96, 0xd2, 0xaa, 0xc6, 0x14, 0xf3, 0x39, 0x85, 0x2a, 0x4c, 0x21, 0x09, + 0xaf, 0x55, 0x3d, 0x13, + 0x98, 0x5f, 0x05, 0xa7, 0x79, 0xcc, 0x4d, 0xd4, 0x3d, 0x63, 0xb0, 0xbb, + 0xb0, 0xef, 0x2f, 0x40, + 0x53, 0x9e, 0xb5, 0xde, 0x26, 0x63, 0x3c, 0xc4, 0xb8, 0x4a, 0xf4, 0x94, + 0x61, 0xd2, 0x48, 0xe4, + 0xd3, 0x58, 0xb4, 0x53, 0xae, 0xf5, 0x1f, 0x47, 0x75, 0x38, 0x50, 0x9e, + 0x05, 0x83, 0xb0, 0x45, + 0xaa, 0xf6, 0xef, 0x5c, 0x72, 0x6c, 0x16, 0xda, 0xf7, 0xd0, 0xb9, 0xc0, + 0x09, 0xe7, 0x2f, 0xd0, + 0xce, 0x40, 0xa2, 0x32, 0x68, 0x8d, 0xc4, 0x2f, 0xce, 0x59, 0xf0, 0x31, + 0x19, 0x55, 0xdd, 0x8d, + 0x48, 0x86, 0xaf, 0x3d, 0x96, 0x79, 0x0a, 0x5f, 0xca, 0x3f, 0xb1, 0x93, + 0xb2, 0x4f, 0xaa, 0x7b, + 0xfd, 0x64, 0x5d, 0x83, 0xd9, 0xb0, 0x4a, 0xae, 0x4c, 0x41, 0xee, 0x32, + 0x56, 0x74, 0xc9, 0x53, + 0x8a, 0xb7, 0xc6, 0xe1, 0xeb, 0x65, 0x48, 0xb1, 0x01, 0x2b, 0x6c, 0x95, + 0x97, 0x64, 0x2a, 0x72, + 0xc5, 0x60, 0xc5, 0x12, 0xfa, 0x27, 0x04, 0xd5, 0x7d, 0x05, 0x9a, 0xdb, + 0x21, 0xdb, 0x8d, 0xbd, + 0x52, 0x8c, 0xcd, 0xc2, 0x67, 0x75, 0x89, 0x58, 0x23, 0x5b, 0xed, 0x8a, + 0xc2, 0x32, 0x66, 0xd5, + 0x04, 0xc5, 0x04, 0x38, 0x8b, 0xa6, 0xd6, 0x3d, 0x8f, 0xae, 0x2e, 0xf0, + 0xef, 0x9b, 0x68, 0xaf, + 0x45, 0xd7, 0xcc, 0xef, 0x51, 0x83, 0x79, 0xf0, 0xb1, 0x84, 0xa1, 0x2b, + 0xd7, 0xf8, 0xf1, 0xe8, + 0xcf, 0x4e, 0x2c, 0xbc, 0xa9, 0x67, 0x78, 0xf4, 0xa3, 0x3e, 0x6f, 0xd5, + 0xf7, 0x26, 0xca, 0xe0, + 0xa6, 0x1a, 0xc9, 0x8e, 0xa0, 0xb3, 0xe3, 0x6e, 0xbc, 0x41, 0x6b, 0x1e, + 0xed, 0x35, 0xf4, 0xe4, + 0xc9, 0x5c, 0x79, 0xdd, 0xec, 0x39, 0x2f, 0x93, 0xc8, 0x5a, 0xf3, 0x98, + 0xed, 0x59, 0xeb, 0x1c, + 0x72, 0x3f, 0xcc, 0xb8, 0x12, 0x7c, 0x60, 0xbb, 0x9c, 0x32, 0x47, 0x9e, + 0x24, 0x72, 0xd4, 0xee, + 0x57, 0x01, 0x85, 0x63, 0x8c, 0x3b, 0xe5, 0xc6, 0x05, 0xc6, 0xaa, 0x13, + 0x65, 0x33, 0x23, 0x4e, + 0xca, 0x19, 0x0b, 0xd7, 0x67, 0x98, 0x75, 0x02, 0x7a, 0x55, 0x68, 0xb5, + 0x08, 0x0b, 0x59, 0x25, + 0x3a, 0xcd, 0xce, 0xd5, 0x0e, 0xdf, 0x78, 0x4c, 0x1e, 0x91, 0xbb, 0xe4, + 0x77, 0xe8, 0xf9, 0xbc, + 0xa5, 0xef, 0x7d, 0xe4, 0xcf, 0x46, 0xef, 0xfb, 0x2d, 0xeb, 0xbf, 0x23, + 0x3d, 0xb1, 0xcd, 0x7e, + 0xfe, 0x7f, 0x0b, 0x7f, 0xce, 0xa3, 0x77, 0x32, 0x12, 0x95, 0xe9, 0xfb, + 0x28, 0x4d, 0x70, 0xf1, + 0x8e, 0xa9, 0x8d, 0xf3, 0xa2, 0xee, 0xed, 0x1e, 0x84, 0xdb, 0x18, 0xae, + 0x6a, 0xc6, 0x05, 0xd3, + 0xfd, 0x7a, 0x66, 0x6e, 0x31, 0x76, 0xca, 0x38, 0x6c, 0x16, 0xe6, 0xbc, + 0x3b, 0x62, 0x9b, 0x7d, + 0x23, 0x51, 0xb0, 0x59, 0x66, 0xe3, 0x17, 0x53, 0x03, 0xa0, 0x8e, 0xab, + 0x16, 0x2f, 0x89, 0x23, + 0x7f, 0xbe, 0x4e, 0xad, 0x76, 0xc4, 0xc4, 0x71, 0xd6, 0x2c, 0x83, 0x73, + 0x6f, 0xcb, 0x3b, 0xf2, + 0x27, 0x24, 0xaf, 0x63, 0x1d, 0x65, 0xb1, 0x25, 0x70, 0x75, 0xdc, 0xd2, + 0xeb, 0xc1, 0x09, 0xe6, + 0x4d, 0xc2, 0x27, 0x2b, 0x91, 0x25, 0x4b, 0x66, 0xa0, 0xb3, 0xa3, 0x6e, + 0xa8, 0xf3, 0xe1, 0x08, + 0x78, 0x9f, 0x8a, 0x04, 0xf1, 0xd8, 0xfb, 0x84, 0xbb, 0xfd, 0x18, 0x2b, + 0xdf, 0x43, 0x04, 0xcc, + 0x46, 0x37, 0x5e, 0x2a, 0xeb, 0xd0, 0x63, 0x29, 0xe3, 0x96, 0x6b, 0xbe, + 0x5c, 0x38, 0x8e, 0x1e, + 0x9f, 0x64, 0x9f, 0xab, 0x86, 0x7a, 0x32, 0xf6, 0x39, 0x6e, 0xf6, 0x9c, + 0x47, 0x02, 0x75, 0xd7, + 0x7b, 0xbf, 0xa6, 0xea, 0xcb, 0xd1, 0x31, 0xdd, 0x1f, 0x8f, 0x56, 0xcb, + 0xd8, 0x35, 0xcf, 0xf9, + 0xf4, 0x29, 0x99, 0xaa, 0x65, 0x1a, 0x98, 0x04, 0xb7, 0xd1, 0xf8, 0x95, + 0xb7, 0xef, 0x0d, 0xe8, + 0x25, 0x43, 0x75, 0xa7, 0xc9, 0xe9, 0x51, 0xc6, 0x77, 0x14, 0x75, 0x77, + 0x42, 0xf5, 0x9f, 0xe3, + 0xdc, 0x9f, 0x8a, 0xf6, 0x14, 0x2f, 0x53, 0x91, 0xfa, 0x44, 0x00, 0x6d, + 0x28, 0x7f, 0x5c, 0xcf, + 0xb8, 0x12, 0xb4, 0xe6, 0xd2, 0xb6, 0x3f, 0x6a, 0x64, 0x0d, 0x16, 0xda, + 0x68, 0x6c, 0x93, 0x82, + 0xda, 0x5b, 0x92, 0xba, 0xce, 0x78, 0x2a, 0xea, 0x65, 0xfb, 0x5a, 0xc7, + 0x5a, 0x66, 0xcd, 0x42, + 0x7b, 0x33, 0x03, 0x62, 0x06, 0x5a, 0xcc, 0x90, 0x85, 0xf0, 0xf3, 0x6a, + 0x1b, 0xbc, 0xe6, 0xf3, + 0xdb, 0x59, 0xf9, 0x33, 0x63, 0xa7, 0x63, 0x8b, 0x64, 0xe2, 0xf6, 0xb8, + 0xd9, 0x7e, 0x90, 0x1a, + 0xef, 0x08, 0xd7, 0x41, 0xb3, 0xe5, 0x04, 0xde, 0x93, 0x8e, 0x16, 0x4a, + 0xd0, 0xd1, 0x29, 0xb3, + 0xb5, 0x19, 0xe9, 0xfb, 0x41, 0x61, 0x06, 0x51, 0x92, 0x80, 0xdc, 0x9e, + 0xf6, 0xc3, 0x64, 0xd5, + 0x3f, 0x21, 0xbd, 0xd3, 0xb2, 0xde, 0x21, 0x32, 0xf4, 0xc3, 0x5a, 0x23, + 0x27, 0x2c, 0xf3, 0xcf, + 0xb1, 0x87, 0x75, 0x25, 0x5a, 0x66, 0x42, 0x7f, 0x0c, 0xb9, 0xac, 0xd9, + 0xec, 0x3b, 0xc9, 0x89, + 0x5a, 0x69, 0x78, 0xbb, 0xa5, 0xcd, 0x8a, 0x13, 0xf4, 0x67, 0xe1, 0x71, + 0xb1, 0x16, 0x7a, 0x2e, + 0x99, 0x6e, 0x83, 0x4f, 0xa5, 0x85, 0x5a, 0xb2, 0x5e, 0x86, 0x45, 0x2a, + 0x45, 0x33, 0x8a, 0xac, + 0x99, 0x44, 0xc4, 0xb7, 0x98, 0x6d, 0xc7, 0x90, 0xeb, 0x84, 0x65, 0xcd, + 0x74, 0xe4, 0xc9, 0xc1, + 0xe2, 0xc7, 0x03, 0xae, 0xea, 0xc2, 0x51, 0x59, 0x8b, 0x37, 0x4c, 0x64, + 0x54, 0x20, 0xfd, 0x4f, + 0xe3, 0x8c, 0xb3, 0x4e, 0xd6, 0x1a, 0x9b, 0xc5, 0x51, 0xd3, 0x29, 0xb1, + 0xcb, 0xb4, 0x11, 0xb1, + 0x9b, 0xed, 0x2b, 0x45, 0x61, 0x56, 0x10, 0x34, 0x60, 0x03, 0x55, 0x85, + 0x1d, 0x64, 0x1f, 0xbc, + 0x1c, 0x8e, 0xca, 0xed, 0x44, 0xeb, 0x34, 0x4e, 0x2d, 0xb5, 0x68, 0xc6, + 0xd3, 0xba, 0x1b, 0xfd, + 0x2e, 0x20, 0x67, 0xce, 0x87, 0xc6, 0x6e, 0xcb, 0xd8, 0x24, 0x72, 0xfd, + 0x64, 0x4e, 0x5d, 0x9b, + 0xd0, 0xad, 0xa7, 0xf5, 0x90, 0x0c, 0x65, 0xb5, 0xe9, 0x7a, 0x27, 0x7f, + 0xc5, 0x6c, 0x6d, 0x61, + 0x37, 0x7a, 0x8e, 0x5d, 0x62, 0x1a, 0x51, 0xe2, 0x69, 0xdb, 0x47, 0x1c, + 0xdf, 0x81, 0xcd, 0x5b, + 0x2c, 0xeb, 0x9c, 0x90, 0x07, 0xa5, 0x1b, 0x51, 0xd1, 0x08, 0xdf, 0x93, + 0xb1, 0xcf, 0x56, 0xcb, + 0x7a, 0x2d, 0xc4, 0x69, 0x2a, 0xb9, 0x78, 0x17, 0xda, 0x3b, 0xe4, 0xc3, + 0xf5, 0x1e, 0x1d, 0x1f, + 0xe7, 0xf4, 0x3e, 0x3b, 0x91, 0x68, 0x6b, 0xf6, 0xe9, 0x3d, 0x46, 0x5d, + 0x95, 0xaf, 0x2b, 0x3e, + 0x21, 0x6f, 0xd6, 0x5b, 0x38, 0x50, 0xdc, 0x0e, 0xc0, 0xce, 0xa9, 0xc4, + 0xc1, 0x1e, 0x0b, 0x17, + 0xbb, 0xcc, 0x55, 0x5b, 0x64, 0x14, 0x56, 0x2e, 0x46, 0x1f, 0x87, 0x2d, + 0xb3, 0x76, 0x6b, 0x1f, + 0x6e, 0xb1, 0xcc, 0xd9, 0x45, 0x4b, 0x0d, 0x23, 0xeb, 0xf0, 0xca, 0xb6, + 0x16, 0xa8, 0x27, 0x93, + 0x60, 0x21, 0x63, 0xbd, 0xd8, 0xb1, 0x59, 0xe7, 0xa9, 0x71, 0x71, 0xeb, + 0xec, 0xcb, 0x88, 0x89, + 0xa5, 0xe4, 0x9d, 0x40, 0x98, 0xc3, 0x35, 0x03, 0x49, 0x5f, 0x62, 0x17, + 0xdc, 0x6a, 0x62, 0x3b, + 0xfa, 0x6c, 0x61, 0x9d, 0x3d, 0x96, 0x36, 0x85, 0x83, 0x9c, 0x72, 0xeb, + 0xf4, 0xea, 0xbb, 0xcc, + 0xb6, 0x6d, 0x9c, 0x22, 0xba, 0xcb, 0x7f, 0xa2, 0xcb, 0x8e, 0x68, 0xf4, + 0x80, 0xd9, 0xbe, 0x03, + 0x4e, 0xa2, 0xb4, 0xef, 0x16, 0x22, 0x85, 0xa7, 0x75, 0x37, 0x96, 0xc9, + 0x81, 0x46, 0x1e, 0xeb, + 0x7a, 0x57, 0x3c, 0x2c, 0xe1, 0xec, 0x35, 0x0e, 0xfc, 0x61, 0xa7, 0xd9, + 0xf6, 0x32, 0x96, 0x79, + 0x1c, 0x7a, 0xdb, 0xcc, 0x75, 0x0e, 0xb1, 0xeb, 0xdc, 0x4a, 0x84, 0xce, + 0x85, 0xeb, 0x39, 0xe4, + 0x94, 0x34, 0xf6, 0xfa, 0x6d, 0xe6, 0xf8, 0x7d, 0x78, 0x47, 0x0e, 0x36, + 0x19, 0x2a, 0x37, 0xca, + 0x53, 0x16, 0x3e, 0xb6, 0xe3, 0x33, 0x37, 0x63, 0x97, 0x4e, 0xf2, 0x77, + 0xbd, 0xa3, 0x27, 0x92, + 0x93, 0xad, 0x32, 0xed, 0x97, 0xde, 0xfa, 0xe4, 0x9c, 0x8f, 0xd7, 0xcd, + 0xb1, 0xc8, 0xa5, 0xd0, + 0x42, 0x16, 0x2e, 0x64, 0xc7, 0x5a, 0xae, 0x6b, 0x38, 0xaf, 0xc4, 0xd6, + 0x35, 0xd5, 0x3d, 0xce, + 0x55, 0x96, 0xfe, 0x6d, 0x50, 0x4c, 0x93, 0x47, 0x39, 0x07, 0x6e, 0x41, + 0x06, 0xeb, 0x3a, 0xc3, + 0x89, 0xe7, 0x46, 0xad, 0x71, 0x5f, 0x34, 0x62, 0x1d, 0x6c, 0x64, 0xac, + 0x91, 0xbc, 0xda, 0x4e, + 0x89, 0x9d, 0x6a, 0xd3, 0x12, 0x56, 0xda, 0x17, 0x8b, 0xc2, 0x82, 0x20, + 0x98, 0x8f, 0x06, 0x33, + 0x58, 0x73, 0x9d, 0x89, 0x0d, 0xec, 0x7e, 0x0f, 0xc8, 0x7f, 0x53, 0x41, + 0xa7, 0xa2, 0xd7, 0x75, + 0x16, 0xec, 0x92, 0x7b, 0x89, 0x11, 0x55, 0x5d, 0x6c, 0x36, 0xdb, 0xb6, + 0x22, 0x53, 0x7b, 0x64, + 0x9e, 0x82, 0xff, 0x0f, 0x67, 0xc7, 0x6e, 0x32, 0x7b, 0xb6, 0x93, 0xc5, + 0xab, 0xd0, 0x52, 0x2c, + 0xa3, 0xd7, 0xbb, 0xdb, 0x36, 0x52, 0x67, 0x0c, 0xa3, 0x2d, 0x07, 0xcf, + 0xf2, 0xb4, 0x6d, 0xc2, + 0xfb, 0xee, 0x84, 0x8b, 0x22, 0x64, 0xda, 0x64, 0xe1, 0x62, 0x01, 0xb2, + 0x6c, 0x74, 0xff, 0xb6, + 0x1e, 0x4d, 0xdf, 0x4f, 0x66, 0x9e, 0x4a, 0x0e, 0x77, 0xf1, 0x3d, 0x83, + 0x75, 0xbd, 0x34, 0xd4, + 0x6a, 0x23, 0xb0, 0xfb, 0x1c, 0xec, 0x92, 0xc8, 0xce, 0xb6, 0xcd, 0x42, + 0x67, 0x39, 0x5c, 0x67, + 0x62, 0x97, 0x6a, 0xac, 0x3d, 0x4d, 0x47, 0xe7, 0x3a, 0x1f, 0xbc, 0x0c, + 0xcf, 0x0a, 0x5b, 0x2c, + 0xab, 0xbb, 0x78, 0x5d, 0x8a, 0x8f, 0xd4, 0x52, 0xd9, 0x2c, 0x82, 0xca, + 0x3a, 0x3f, 0xac, 0x67, + 0xf4, 0x2e, 0x6c, 0x96, 0x82, 0x57, 0x36, 0x59, 0xda, 0xf7, 0xb0, 0x5a, + 0x07, 0x2c, 0xd6, 0x97, + 0x9c, 0xbb, 0xce, 0x32, 0xaf, 0x09, 0x0e, 0x6c, 0x70, 0xb0, 0x30, 0x80, + 0x0d, 0xb4, 0x85, 0x8c, + 0x15, 0x32, 0x56, 0xd9, 0xac, 0x26, 0x2b, 0x71, 0xa9, 0xa1, 0x5a, 0x17, + 0x92, 0x69, 0x16, 0x07, + 0xc0, 0x12, 0x7a, 0x6a, 0xc8, 0x61, 0x6b, 0x90, 0xcc, 0x83, 0x2d, 0x9c, + 0x8b, 0xee, 0x85, 0xd3, + 0x5c, 0xf9, 0x07, 0xbe, 0xb7, 0xda, 0xd2, 0xb3, 0x59, 0xfe, 0x8a, 0xcd, + 0x0a, 0xf0, 0x8c, 0x95, + 0x66, 0xdb, 0x26, 0xec, 0xdb, 0x47, 0xdf, 0xcd, 0x53, 0x77, 0x79, 0x5f, + 0x44, 0x16, 0x4f, 0xcf, + 0x5a, 0x5a, 0x6d, 0xd8, 0x23, 0x85, 0x6b, 0xa5, 0x85, 0x46, 0x1f, 0x5d, + 0xe7, 0x7b, 0x57, 0xdc, + 0x28, 0x83, 0xd9, 0x17, 0xe6, 0x90, 0x9d, 0xaa, 0x7c, 0x56, 0x5b, 0x69, + 0x99, 0xb5, 0x16, 0x9e, + 0xd4, 0xbe, 0xf3, 0x12, 0x1c, 0xbb, 0xe0, 0xc4, 0xee, 0x8b, 0x64, 0x85, + 0x39, 0x62, 0x03, 0xbe, + 0x50, 0xa0, 0xa5, 0x9c, 0x42, 0x0e, 0x5c, 0x6b, 0xa1, 0xb2, 0x80, 0xaa, + 0x65, 0xb6, 0xce, 0x35, + 0x4b, 0xd8, 0x3d, 0x52, 0x2d, 0x7d, 0xff, 0x1e, 0x4d, 0x9c, 0x20, 0x5e, + 0x60, 0xef, 0xb0, 0xc3, + 0xdb, 0x4a, 0x9f, 0x9e, 0x55, 0xd8, 0x7d, 0x0d, 0x3e, 0x30, 0x15, 0x3f, + 0x49, 0xc1, 0x4b, 0x56, + 0x5b, 0x56, 0x5b, 0x2c, 0xff, 0xa7, 0x4f, 0x3f, 0x73, 0xe8, 0xb1, 0xea, + 0x75, 0x15, 0x5e, 0x16, + 0x41, 0x84, 0x2c, 0x69, 0x63, 0x89, 0x25, 0x2e, 0x3b, 0x1a, 0x4b, 0x25, + 0x5b, 0xc7, 0x59, 0x46, + 0xe2, 0x22, 0x43, 0x65, 0x92, 0xb9, 0x48, 0xb7, 0x2c, 0x00, 0x96, 0x33, + 0x63, 0x22, 0xd9, 0xdc, + 0x1b, 0x87, 0x8b, 0xe0, 0x32, 0x1c, 0xaf, 0x5f, 0x89, 0x7e, 0x6a, 0xd9, + 0x39, 0x97, 0x5a, 0xfc, + 0x61, 0x15, 0xf9, 0x45, 0xed, 0x66, 0x8d, 0x16, 0x6f, 0x59, 0x08, 0x1f, + 0x0b, 0x88, 0x9e, 0xb9, + 0x5c, 0xf3, 0xc1, 0x42, 0x0b, 0xa5, 0xa9, 0xd8, 0x70, 0x2e, 0x12, 0x64, + 0x41, 0xcb, 0xd3, 0xba, + 0x8c, 0x8c, 0x99, 0x48, 0xac, 0x2e, 0x31, 0x5b, 0x56, 0x10, 0x3f, 0xd5, + 0x70, 0x50, 0xee, 0xc3, + 0x87, 0x2f, 0x96, 0xe3, 0xb9, 0x39, 0x7a, 0xf6, 0x72, 0xf7, 0x35, 0x07, + 0xaf, 0xb2, 0xf2, 0xb1, + 0x9c, 0x1d, 0xb1, 0x98, 0x7f, 0x97, 0xc2, 0xa1, 0xcd, 0x42, 0x7d, 0x11, + 0x3b, 0xc6, 0x93, 0x8c, + 0x5e, 0xae, 0x67, 0x39, 0xa9, 0x19, 0x5e, 0x0a, 0x9a, 0x73, 0xac, 0x50, + 0x67, 0xa3, 0x1b, 0x91, + 0x60, 0x01, 0x59, 0x73, 0xa6, 0x4f, 0x74, 0x2c, 0xc1, 0x6f, 0x6f, 0x92, + 0xff, 0xa0, 0x16, 0xba, + 0x15, 0xff, 0x13, 0x7c, 0x7e, 0x91, 0xd9, 0xf7, 0x12, 0x5c, 0x0e, 0x40, + 0x8a, 0x15, 0x7c, 0x9a, + 0xc4, 0xe7, 0x97, 0x2c, 0x7c, 0x38, 0xf1, 0x81, 0xf9, 0x6e, 0x3e, 0xac, + 0x58, 0xe1, 0xca, 0xf6, + 0xc6, 0x42, 0xc9, 0xc0, 0x66, 0x9d, 0x6b, 0x13, 0xe3, 0xe7, 0x19, 0x6a, + 0x9f, 0x6b, 0xc4, 0x17, + 0x56, 0x06, 0xc0, 0x2a, 0x64, 0x9c, 0x80, 0xae, 0xe6, 0x30, 0xc2, 0x85, + 0xb9, 0xe8, 0xee, 0x51, + 0xf8, 0x5a, 0x0d, 0xad, 0x06, 0x32, 0xf3, 0x3c, 0xb3, 0xa7, 0x91, 0xd6, + 0x07, 0xe0, 0xd7, 0xa1, + 0xe9, 0x79, 0xe1, 0x9f, 0x9d, 0xbd, 0x58, 0x84, 0xb6, 0x16, 0xf0, 0x7f, + 0x14, 0x9f, 0x3c, 0x6d, + 0xf3, 0xd8, 0x21, 0xfa, 0xa1, 0xd7, 0xd9, 0xe6, 0x7a, 0x95, 0x44, 0xf5, + 0x42, 0xf8, 0xa8, 0x44, + 0xe7, 0x73, 0x7d, 0xe6, 0x5b, 0xb1, 0x10, 0x2a, 0xf5, 0x48, 0xe8, 0xe2, + 0x5a, 0x3d, 0x37, 0xb1, + 0xe1, 0xb9, 0xb3, 0x2d, 0x6b, 0x0d, 0x46, 0x8e, 0x55, 0x70, 0x3d, 0x83, + 0x28, 0xf6, 0x72, 0x3d, + 0x07, 0xff, 0x7b, 0x0a, 0x5d, 0xb9, 0x66, 0xcd, 0xc6, 0x7f, 0xe6, 0x05, + 0x5d, 0xc3, 0x3b, 0x47, + 0x9d, 0x87, 0xff, 0x8b, 0x3c, 0xba, 0x02, 0x99, 0x0b, 0xf9, 0x3c, 0xdb, + 0x22, 0xed, 0x3c, 0xf9, + 0x3d, 0xa7, 0xf8, 0x49, 0x7c, 0x9a, 0xcf, 0x55, 0xc2, 0x27, 0xaf, 0xf6, + 0x16, 0xe0, 0xe5, 0xf1, + 0x70, 0xa9, 0x22, 0x6f, 0x3a, 0x3b, 0xc5, 0x3c, 0xcb, 0xbc, 0x06, 0x2c, + 0x3c, 0xd7, 0xcd, 0x87, + 0x15, 0xab, 0xe9, 0xc3, 0x46, 0xc6, 0x3c, 0x49, 0xc3, 0x66, 0x5d, 0xa6, + 0x8e, 0x8c, 0x9b, 0x6d, + 0x9f, 0x81, 0x14, 0xf5, 0x96, 0xcc, 0xef, 0x9b, 0x95, 0x57, 0xe2, 0x27, + 0x85, 0x8c, 0x98, 0xe6, + 0xc6, 0x4c, 0x7e, 0x1b, 0x08, 0xdd, 0xf5, 0xe4, 0x90, 0xf9, 0xf8, 0xf2, + 0x54, 0xd6, 0xf6, 0xf4, + 0xcd, 0x26, 0x5b, 0x3a, 0xb1, 0x59, 0x9d, 0xd9, 0xe2, 0x9a, 0x51, 0x1f, + 0x10, 0x33, 0xe1, 0xf0, + 0x19, 0x7c, 0x6e, 0x99, 0xbe, 0xa7, 0xee, 0x59, 0x61, 0x3a, 0xd1, 0xfb, + 0x0c, 0x94, 0x3c, 0xb3, + 0x1b, 0x91, 0x3f, 0x12, 0x4e, 0x56, 0x52, 0x09, 0x5a, 0xf9, 0xf0, 0xc7, + 0x4c, 0x2c, 0x92, 0x0d, + 0xb5, 0x35, 0x5a, 0x92, 0xb5, 0x7c, 0x52, 0x1e, 0xee, 0xe5, 0xad, 0x01, + 0x3a, 0x15, 0xf4, 0xad, + 0xe1, 0x93, 0x4d, 0x57, 0xd0, 0x2e, 0xcc, 0x20, 0x8f, 0xf4, 0xc2, 0x06, + 0xeb, 0xf4, 0x3c, 0x25, + 0xd1, 0x4c, 0x3f, 0xca, 0x56, 0x9e, 0x9d, 0xcc, 0x9e, 0x47, 0x5b, 0x7f, + 0x2c, 0x96, 0x86, 0xc5, + 0xd6, 0xc3, 0xfd, 0x78, 0xbc, 0x7a, 0xba, 0x65, 0xf4, 0x58, 0xf2, 0xb4, + 0xca, 0xe8, 0x1b, 0xb8, + 0x96, 0xeb, 0xbb, 0x70, 0x5e, 0xae, 0xd5, 0x9b, 0x36, 0x39, 0x58, 0x61, + 0x03, 0x7c, 0xcc, 0x62, + 0xb7, 0xf0, 0xae, 0xa5, 0x28, 0x28, 0x0f, 0x6e, 0x6b, 0x83, 0x8d, 0xfa, + 0x1c, 0x36, 0xc3, 0x68, + 0x94, 0x94, 0xda, 0xce, 0xd4, 0xfa, 0x03, 0x62, 0x1a, 0xec, 0x75, 0x8e, + 0x3a, 0xb4, 0xbc, 0x81, + 0x9d, 0x67, 0x63, 0x1b, 0xa8, 0x5d, 0xb7, 0x8e, 0x8c, 0x5d, 0x83, 0xb7, + 0xb8, 0x50, 0x83, 0x4d, + 0x86, 0xb2, 0xea, 0x66, 0x66, 0xcc, 0xc7, 0x63, 0xbd, 0x3d, 0x93, 0x58, + 0xf7, 0x31, 0x74, 0x5c, + 0xc0, 0xbe, 0x33, 0xc9, 0x32, 0x3e, 0x5f, 0x3f, 0x1b, 0xf6, 0xc0, 0xfa, + 0x04, 0xd6, 0x86, 0xb6, + 0x96, 0xb1, 0x82, 0x93, 0xba, 0x7f, 0x8a, 0x39, 0x63, 0x0a, 0x55, 0x89, + 0xf7, 0x37, 0x27, 0x27, + 0xb3, 0x09, 0xec, 0xa1, 0x6b, 0x68, 0x33, 0x7c, 0x56, 0xf3, 0xc7, 0x14, + 0x72, 0xea, 0x14, 0xbc, + 0x69, 0xa3, 0x96, 0x64, 0xa9, 0xbe, 0x17, 0x32, 0xd9, 0xec, 0xad, 0x23, + 0x27, 0x4d, 0xa0, 0x67, + 0x03, 0x5e, 0x6f, 0xe5, 0x7a, 0x32, 0x79, 0xb8, 0x37, 0x5c, 0x6c, 0x42, + 0x22, 0x75, 0x77, 0x2d, + 0xcf, 0x6f, 0x8d, 0x5a, 0xf7, 0xb3, 0x6d, 0x17, 0xef, 0x31, 0x50, 0xf9, + 0xb3, 0xfc, 0x0f, 0x7b, + 0x40, 0xb1, 0xae, 0x8e, 0x36, 0xe1, 0x4b, 0xe5, 0x50, 0xf0, 0xae, 0xa3, + 0xf2, 0x7d, 0x8c, 0xae, + 0xd3, 0x14, 0xc5, 0x55, 0xb4, 0xe4, 0xfb, 0xf4, 0x46, 0x41, 0x65, 0xad, + 0xae, 0xba, 0x94, 0xef, + 0x58, 0xf9, 0xa8, 0xa4, 0xbe, 0x5e, 0xaa, 0x69, 0xfa, 0xda, 0xa0, 0x09, + 0x3f, 0xc0, 0x42, 0x46, + 0xbd, 0x8c, 0xc1, 0x66, 0x61, 0x33, 0x1e, 0x8d, 0x72, 0xda, 0x6b, 0x1c, + 0x6a, 0xe6, 0x06, 0xf6, + 0xcd, 0xa6, 0x36, 0xd8, 0x0a, 0x85, 0xd9, 0xac, 0x52, 0xa1, 0xef, 0xe0, + 0x95, 0xeb, 0x3b, 0xb8, + 0x25, 0xc4, 0xd9, 0x62, 0xc6, 0xaf, 0xc5, 0x4b, 0xf2, 0x2c, 0x3d, 0xe5, + 0x50, 0x79, 0x82, 0x1c, + 0xa4, 0xee, 0xe2, 0x7b, 0x5b, 0x6b, 0x38, 0x45, 0xdd, 0xc2, 0x19, 0xe0, + 0x5e, 0xae, 0xbb, 0xf9, + 0x7c, 0x3b, 0xf8, 0xb3, 0xc6, 0x9d, 0x72, 0x0f, 0x5c, 0x2b, 0x9e, 0x56, + 0xe0, 0xb3, 0x25, 0x96, + 0x39, 0x95, 0x96, 0x4f, 0xf9, 0xd4, 0x35, 0x2b, 0xa8, 0xf3, 0x36, 0xe0, + 0x11, 0xbe, 0xab, 0x95, + 0x63, 0x03, 0xdf, 0xdf, 0xab, 0xa8, 0x08, 0x17, 0xc0, 0xf1, 0x56, 0x4d, + 0x53, 0xdd, 0x39, 0xf7, + 0xf6, 0x4f, 0xa4, 0x52, 0x9b, 0x4c, 0xcf, 0x16, 0x46, 0xd8, 0x7c, 0xe4, + 0x29, 0xe4, 0x1c, 0xbe, + 0x50, 0xfb, 0xf3, 0x16, 0x74, 0x66, 0xf8, 0xd1, 0xac, 0x93, 0x76, 0x70, + 0x7d, 0x0f, 0xb8, 0x9b, + 0xeb, 0x21, 0xa8, 0x24, 0x63, 0xc7, 0x75, 0xee, 0x8a, 0xbe, 0x09, 0x2d, + 0x4c, 0xf0, 0x91, 0x77, + 0x02, 0x36, 0xcb, 0xd6, 0xf7, 0x13, 0x95, 0xf6, 0xd6, 0xeb, 0xb8, 0xab, + 0xb4, 0x70, 0x98, 0x06, + 0x8f, 0xab, 0xe9, 0x5b, 0x8f, 0x3c, 0x36, 0x1f, 0x99, 0x0d, 0x72, 0xf4, + 0xba, 0x00, 0x56, 0xd8, + 0xc1, 0xc8, 0xc9, 0x52, 0x63, 0x4c, 0x93, 0xc4, 0x9a, 0xce, 0x89, 0xe1, + 0xce, 0x3b, 0x22, 0x6a, + 0xed, 0xea, 0x3e, 0x64, 0x25, 0xfe, 0xb2, 0x93, 0xde, 0xb6, 0xd8, 0x86, + 0x1c, 0xd9, 0x3e, 0xcf, + 0x7a, 0xca, 0x38, 0x29, 0x96, 0x22, 0x79, 0x83, 0xbe, 0xef, 0x6e, 0xed, + 0x29, 0x47, 0xfa, 0xe5, + 0xda, 0x33, 0xbd, 0xad, 0xa5, 0x8c, 0xce, 0x42, 0x27, 0xcb, 0xb0, 0xf3, + 0x6c, 0xd6, 0x2e, 0xd5, + 0x99, 0xb0, 0x50, 0xdf, 0xab, 0x99, 0xaf, 0x6b, 0xf0, 0x1d, 0x68, 0xab, + 0x82, 0x6a, 0xbb, 0x24, + 0xc0, 0xb3, 0xa3, 0x72, 0x62, 0x20, 0x1e, 0xbe, 0x5f, 0x46, 0x0b, 0x33, + 0x7d, 0xe8, 0x16, 0xc1, + 0xf3, 0x5f, 0xc9, 0xa2, 0x15, 0x96, 0x96, 0x12, 0x38, 0x2d, 0xd0, 0xfa, + 0xdc, 0x41, 0x5c, 0xaa, + 0xb3, 0x6c, 0xb1, 0x85, 0xd2, 0x33, 0x78, 0xf9, 0xcb, 0xf4, 0x2d, 0xc1, + 0xf6, 0xc5, 0x96, 0xa7, + 0x59, 0x25, 0xf4, 0x94, 0x93, 0xa7, 0x57, 0x61, 0xed, 0x15, 0xcc, 0xf1, + 0xe5, 0xa0, 0x42, 0x1e, + 0x81, 0xfb, 0xd5, 0xf4, 0xae, 0x06, 0xeb, 0xe1, 0x63, 0x07, 0x54, 0x5e, + 0x36, 0xf5, 0xb3, 0x11, + 0x99, 0xc4, 0x47, 0xde, 0xe1, 0xd0, 0xdf, 0xa6, 0x47, 0xa8, 0x53, 0xc2, + 0x62, 0x2a, 0x51, 0xab, + 0x64, 0xa5, 0xe4, 0x55, 0xb5, 0x6b, 0x2d, 0xa2, 0xd5, 0xe1, 0x33, 0x2f, + 0x92, 0xca, 0x76, 0xab, + 0x85, 0xb2, 0x07, 0x7b, 0xe0, 0x7b, 0x82, 0x4c, 0x34, 0xa6, 0x48, 0x5c, + 0x4d, 0xe7, 0x84, 0x6e, + 0xb3, 0xc2, 0x22, 0xc6, 0x4b, 0xb5, 0xbd, 0x0a, 0x9e, 0x1b, 0x39, 0xd5, + 0xed, 0x0e, 0x88, 0x8d, + 0x58, 0x26, 0xcf, 0xe7, 0x69, 0x77, 0x01, 0xb9, 0xcc, 0x0e, 0xf2, 0xfc, + 0x9e, 0x82, 0x8f, 0xc3, + 0x53, 0xd6, 0x63, 0xe3, 0x31, 0x70, 0x63, 0xfd, 0x89, 0xc6, 0x53, 0x54, + 0xad, 0x51, 0xa5, 0xdf, + 0x05, 0x70, 0x68, 0xb8, 0x7e, 0xd6, 0x41, 0x7f, 0x0f, 0x7c, 0x2e, 0xc1, + 0x32, 0x8e, 0x00, 0xcf, + 0xd5, 0xc7, 0x51, 0x7b, 0xcd, 0x64, 0xcc, 0x5e, 0x6c, 0xdb, 0xa8, 0xef, + 0xee, 0x7b, 0x7e, 0xf2, + 0x99, 0xd1, 0x81, 0x88, 0x1f, 0xeb, 0x33, 0xaf, 0x80, 0xb5, 0x1a, 0xf4, + 0xdf, 0x32, 0x6e, 0x44, + 0x0b, 0x63, 0x2d, 0x3d, 0x85, 0xf2, 0x34, 0x5c, 0xa8, 0x3b, 0x14, 0x2b, + 0xe0, 0xc2, 0xf7, 0x0d, + 0x0a, 0xf5, 0x54, 0xc9, 0x86, 0x2f, 0x2a, 0xbb, 0x14, 0xfa, 0xf5, 0x8d, + 0x93, 0x9e, 0xd8, 0x69, + 0x9f, 0xec, 0x35, 0xb1, 0xc7, 0x47, 0x3b, 0x4d, 0xe4, 0xe3, 0x5c, 0x1f, + 0x0e, 0x9e, 0x83, 0xfe, + 0x2e, 0xf7, 0xa8, 0x9d, 0xf0, 0x91, 0xeb, 0xd3, 0xef, 0x20, 0xd2, 0x32, + 0xf5, 0x53, 0x92, 0x5c, + 0x9f, 0x75, 0xc6, 0xcb, 0x7d, 0x5c, 0x7b, 0xfc, 0xa8, 0x2b, 0xbc, 0x42, + 0x14, 0x54, 0x48, 0x95, + 0x31, 0x49, 0x62, 0x6a, 0xbb, 0x24, 0x76, 0x9b, 0xd5, 0x39, 0x22, 0xa9, + 0xa0, 0x2a, 0xaf, 0x4c, + 0x3f, 0xe5, 0x69, 0x81, 0xb3, 0xb6, 0xd8, 0x8f, 0xb6, 0x1a, 0xd0, 0x44, + 0x9e, 0xcf, 0x4e, 0x94, + 0x1b, 0xf0, 0x0d, 0x21, 0x3b, 0xfb, 0xd3, 0x16, 0x7d, 0x3a, 0x1c, 0x63, + 0x19, 0x91, 0xab, 0xdf, + 0x99, 0xb2, 0x41, 0xc1, 0xfa, 0xb6, 0x52, 0x1e, 0xbc, 0x3f, 0x48, 0xc6, + 0x53, 0x2b, 0xec, 0xd5, + 0x92, 0xb5, 0x7d, 0xdf, 0x2b, 0x0f, 0xdf, 0xf8, 0x3b, 0xde, 0xbf, 0x1f, + 0xec, 0xc4, 0x3b, 0xd3, + 0x7c, 0xfa, 0x62, 0xe5, 0x79, 0xfd, 0xac, 0xd8, 0xee, 0xf7, 0x7e, 0x56, + 0x0a, 0x9a, 0xdf, 0xc5, + 0x8e, 0x51, 0x4e, 0xdd, 0xee, 0xcb, 0x5b, 0xbd, 0x96, 0x68, 0x9d, 0x7e, + 0x8f, 0x67, 0xac, 0x9f, + 0x3c, 0x79, 0xc4, 0xc7, 0x34, 0x3c, 0xae, 0xc8, 0xef, 0x9d, 0x2a, 0x97, + 0x4c, 0x07, 0x02, 0xea, + 0x46, 0x61, 0x3b, 0x9e, 0x90, 0xe9, 0x33, 0x7e, 0x20, 0xf2, 0xef, 0x85, + 0x63, 0x57, 0xff, 0xcb, + 0xd4, 0x0f, 0xa3, 0x7d, 0xb4, 0x97, 0xa7, 0xdf, 0xfc, 0xf2, 0xdf, 0xd9, + 0x53, 0x38, 0x5f, 0xae, + 0x34, 0x67, 0x59, 0xd1, 0xcc, 0x9e, 0x33, 0x5e, 0xca, 0x8c, 0x2a, 0x89, + 0xc2, 0x66, 0xed, 0xaa, + 0xbb, 0xa6, 0xf6, 0x2e, 0xa9, 0xcc, 0x2a, 0xd1, 0x4f, 0xe3, 0x76, 0x06, + 0xbc, 0x7b, 0x7a, 0x10, + 0x3a, 0x4d, 0xfa, 0xee, 0x6a, 0x46, 0x80, 0xb7, 0x34, 0xd5, 0xfb, 0x8c, + 0xde, 0xdf, 0xb2, 0xf0, + 0xe5, 0xed, 0xac, 0xb2, 0x06, 0x4d, 0xa6, 0x59, 0xc6, 0x67, 0x04, 0x98, + 0x6b, 0xc0, 0x63, 0x12, + 0xba, 0x70, 0xad, 0xb2, 0x8b, 0xbc, 0x19, 0xd9, 0x66, 0x54, 0x0e, 0xb9, + 0x36, 0x01, 0x3f, 0x3b, + 0x08, 0xf6, 0x92, 0xa1, 0x92, 0x2d, 0x7d, 0x99, 0x9c, 0x40, 0x63, 0xc9, + 0x41, 0xe3, 0x65, 0xa4, + 0x7e, 0x27, 0xd1, 0xbb, 0x56, 0x2c, 0x1e, 0xb8, 0x0d, 0x3d, 0x57, 0xe1, + 0x39, 0x5e, 0x8a, 0xd9, + 0xe4, 0x80, 0x06, 0xbd, 0x56, 0x13, 0x76, 0x49, 0x69, 0xc3, 0x4f, 0x36, + 0xb6, 0x99, 0x88, 0x7f, + 0x8c, 0x27, 0x97, 0xa5, 0xb7, 0x91, 0xe9, 0x60, 0xd0, 0xfb, 0xbb, 0x3b, + 0xf5, 0x5d, 0x01, 0x2b, + 0x9d, 0x7e, 0xc4, 0xea, 0x2b, 0xee, 0x19, 0x07, 0xf5, 0x5b, 0x5c, 0xe9, + 0x54, 0x25, 0x99, 0x41, + 0xdf, 0x74, 0x4d, 0xd7, 0xef, 0x7d, 0xa9, 0x7b, 0x45, 0x07, 0x02, 0xae, + 0x73, 0x84, 0xd3, 0x29, + 0x79, 0xdf, 0x28, 0x97, 0xc8, 0xda, 0x2e, 0x09, 0xed, 0xaa, 0xc3, 0x53, + 0xfe, 0x54, 0x51, 0x99, + 0x5a, 0xa8, 0xdf, 0x91, 0x99, 0xab, 0xef, 0x9e, 0xb6, 0x45, 0x0b, 0x56, + 0x9b, 0x43, 0xa5, 0x9c, + 0xae, 0x9f, 0xfc, 0x59, 0x91, 0xca, 0x6a, 0x03, 0xb0, 0x8e, 0xf7, 0xf7, + 0x7e, 0xfa, 0xce, 0xe8, + 0x7e, 0x3c, 0xb6, 0xa7, 0x7e, 0x4a, 0x96, 0x1c, 0x10, 0xea, 0x5e, 0xed, + 0xdf, 0xe5, 0x7e, 0xf6, + 0xef, 0xc3, 0xee, 0x35, 0x5e, 0x25, 0xd2, 0xd4, 0x73, 0x6c, 0xdf, 0x71, + 0x59, 0xd4, 0x2b, 0x33, + 0xf4, 0x98, 0xc3, 0xfa, 0xdd, 0x87, 0x31, 0x96, 0x11, 0xea, 0x3d, 0xc4, + 0x44, 0xfc, 0x63, 0x33, + 0x36, 0x4b, 0xf4, 0xe3, 0x6c, 0x34, 0xf9, 0x6f, 0x33, 0xde, 0x19, 0x6f, + 0x69, 0x4b, 0xc3, 0x66, + 0xf3, 0xe0, 0xed, 0x10, 0xd9, 0xa7, 0x11, 0x7b, 0xfb, 0xf3, 0x96, 0x06, + 0xc7, 0xb5, 0xe8, 0xb7, + 0x42, 0x3f, 0xb9, 0x4c, 0xf6, 0x93, 0xe9, 0x70, 0x40, 0xcd, 0x28, 0xec, + 0x45, 0x37, 0x49, 0x3e, + 0x74, 0xfa, 0x60, 0xf7, 0x66, 0xcb, 0x8c, 0x03, 0x44, 0xf6, 0x20, 0xea, + 0xc5, 0xb6, 0xfa, 0xf3, + 0xcc, 0xc8, 0xa5, 0x4a, 0x7b, 0x9a, 0x88, 0x0c, 0xbc, 0xc2, 0x09, 0x5d, + 0x89, 0x15, 0x1a, 0x25, + 0x32, 0x4a, 0xc5, 0x99, 0x7a, 0xef, 0x6a, 0x52, 0x4a, 0x72, 0x81, 0xe1, + 0xd0, 0xf7, 0x60, 0x8f, + 0xb6, 0x79, 0xb2, 0xe4, 0xc2, 0x6b, 0xac, 0x5b, 0x23, 0xff, 0xa4, 0xe2, + 0x49, 0x32, 0xff, 0xe6, + 0x25, 0x41, 0x3f, 0x85, 0xf8, 0x03, 0x3b, 0x74, 0x9a, 0x65, 0xfd, 0xe7, + 0x18, 0x79, 0x54, 0x8f, + 0x9f, 0xce, 0x59, 0x6d, 0x28, 0x2d, 0x49, 0x8c, 0x8c, 0xb7, 0xcc, 0x4a, + 0x42, 0x0b, 0x51, 0xd2, + 0x89, 0x2a, 0x6c, 0x05, 0x94, 0x8f, 0x9a, 0x2b, 0xec, 0x23, 0x2e, 0x22, + 0x7d, 0x64, 0x51, 0x6f, + 0xaa, 0x3f, 0x84, 0x24, 0x47, 0xf5, 0xb8, 0x16, 0xf2, 0xa8, 0x7a, 0x56, + 0xe5, 0xed, 0x7d, 0x1e, + 0x8f, 0x79, 0x0d, 0xcf, 0x9c, 0x23, 0x43, 0x7c, 0xb4, 0x96, 0x0c, 0x9f, + 0x45, 0x44, 0x5a, 0x3d, + 0x19, 0xdd, 0xaa, 0xfb, 0xde, 0x9c, 0xc2, 0x8e, 0x6a, 0x4a, 0x3b, 0xe1, + 0x64, 0x84, 0x7e, 0x47, + 0xc2, 0xf3, 0x57, 0x20, 0x49, 0xd0, 0xeb, 0xcd, 0xce, 0xa9, 0xf6, 0xfb, + 0x68, 0x3f, 0x9d, 0xba, + 0x64, 0x3a, 0x12, 0x10, 0xea, 0xf9, 0xd4, 0x0a, 0x1f, 0x6f, 0x4b, 0xa5, + 0xb2, 0xac, 0xb6, 0x48, + 0xa6, 0x64, 0x6b, 0xa1, 0x32, 0x53, 0x7f, 0x77, 0x9e, 0xc8, 0xb8, 0x44, + 0x1f, 0x6d, 0xa8, 0xb7, + 0x34, 0x86, 0x72, 0x76, 0x18, 0x80, 0x8f, 0x05, 0x5b, 0xe3, 0x0c, 0x3b, + 0xad, 0x5d, 0x1c, 0x46, + 0xa1, 0xbc, 0xa8, 0xe2, 0x4c, 0xfd, 0x9d, 0xe0, 0xb4, 0xee, 0x31, 0x85, + 0x76, 0x9b, 0x43, 0xbd, + 0xc5, 0xb9, 0x5a, 0xce, 0x62, 0xd5, 0x40, 0x50, 0xbc, 0x55, 0xa3, 0xc1, + 0x1e, 0x44, 0xb9, 0x4b, + 0xc6, 0x68, 0xe2, 0xe4, 0x77, 0xc8, 0x93, 0xcd, 0x09, 0xf2, 0x2e, 0x5d, + 0xc7, 0xdf, 0xcd, 0xff, + 0xf1, 0x70, 0x78, 0x52, 0x8f, 0x57, 0xcf, 0x5f, 0x9e, 0xa5, 0x9e, 0xef, + 0x81, 0xd7, 0x7b, 0xfe, + 0xc2, 0x63, 0x0c, 0x9f, 0x9f, 0x92, 0xce, 0xf2, 0xbf, 0xe8, 0x7b, 0x8d, + 0x0f, 0xfd, 0xe3, 0xf8, + 0xe5, 0x26, 0x22, 0xe7, 0x2e, 0x93, 0x96, 0xaa, 0xac, 0xbb, 0xe0, 0x47, + 0x47, 0x4c, 0x0e, 0xf6, + 0xe1, 0x8f, 0xf7, 0x59, 0xfa, 0xef, 0xc2, 0x32, 0xa7, 0xe4, 0x18, 0x51, + 0x5d, 0x8a, 0x7f, 0x78, + 0xdb, 0x55, 0xcf, 0x20, 0xe2, 0x76, 0x35, 0xff, 0xde, 0x69, 0xb6, 0xdd, + 0x29, 0x8f, 0xd2, 0xa6, + 0x78, 0x3b, 0xc6, 0x5a, 0x6b, 0xb1, 0xf3, 0xed, 0xcc, 0xea, 0xa5, 0xff, + 0x8e, 0x7f, 0x00, 0xa7, + 0xd9, 0xee, 0xf2, 0x00, 0xb5, 0xdc, 0x21, 0xb4, 0xdb, 0xd3, 0x32, 0xcb, + 0x2a, 0x53, 0x60, 0xbc, + 0x86, 0x57, 0x45, 0x5b, 0xf8, 0xbe, 0x4b, 0xfe, 0xc2, 0x19, 0xd8, 0x77, + 0xfc, 0x31, 0x46, 0x6d, + 0xc1, 0x93, 0xd4, 0x59, 0x61, 0xa8, 0xe9, 0x27, 0x63, 0xf0, 0xc9, 0x27, + 0xf4, 0x1b, 0x2b, 0xc9, + 0xfa, 0x39, 0x52, 0x30, 0x9c, 0xd7, 0x6f, 0x69, 0xd8, 0x88, 0xab, 0x11, + 0xb5, 0x5d, 0x13, 0x5c, + 0xef, 0x11, 0x87, 0x8d, 0xca, 0x34, 0x72, 0x0d, 0xf5, 0xde, 0x73, 0x36, + 0xfd, 0x67, 0x7c, 0x9e, + 0xac, 0x7b, 0x71, 0x12, 0xad, 0x6d, 0x60, 0xbd, 0x7b, 0x24, 0x0c, 0xad, + 0xb7, 0x97, 0x9b, 0xf1, + 0x9c, 0x3a, 0x72, 0x80, 0xaa, 0x38, 0x5c, 0x3b, 0x96, 0x7a, 0xb3, 0x76, + 0xb5, 0xf9, 0xdc, 0xfe, + 0x14, 0x9f, 0x0e, 0xea, 0xea, 0xe5, 0x3e, 0xc6, 0x87, 0x11, 0x59, 0x1d, + 0xe5, 0x46, 0xfe, 0x7d, + 0x8c, 0x91, 0x4b, 0xb1, 0xd1, 0xeb, 0x7e, 0x2b, 0x9d, 0x82, 0xfe, 0x72, + 0x76, 0xb0, 0x74, 0xf7, + 0x3b, 0xd9, 0x8a, 0x5e, 0x11, 0x7e, 0xef, 0xed, 0x3f, 0x46, 0x85, 0x60, + 0x33, 0xfb, 0xb3, 0xc8, + 0xff, 0x4d, 0x50, 0x39, 0x0d, 0xad, 0x83, 0xec, 0x44, 0x19, 0x26, 0x32, + 0xf5, 0xb3, 0x4b, 0xf5, + 0xd4, 0xae, 0xde, 0xa7, 0x6d, 0x2a, 0xb6, 0xf2, 0xd0, 0x3a, 0xce, 0x8e, + 0x53, 0x8f, 0xae, 0xfa, + 0xcb, 0xe3, 0xd8, 0xf2, 0x51, 0xec, 0x34, 0x80, 0xda, 0x60, 0x1f, 0x3d, + 0x2d, 0xfa, 0x59, 0x92, + 0x97, 0x07, 0xab, 0x4c, 0x81, 0xa0, 0x9e, 0x9c, 0x2f, 0xd6, 0xbb, 0xba, + 0x67, 0x46, 0x25, 0xf9, + 0xf2, 0x4c, 0xc0, 0x71, 0x6b, 0xd0, 0xf0, 0x13, 0xd2, 0x15, 0x74, 0x46, + 0x13, 0x37, 0x92, 0x11, + 0x7b, 0xb0, 0xea, 0x26, 0xe8, 0xbf, 0x1e, 0x94, 0xfe, 0x69, 0x79, 0x1b, + 0x3d, 0x64, 0xc9, 0x58, + 0xc3, 0x26, 0xc3, 0xdc, 0x36, 0x53, 0x75, 0x48, 0x9f, 0xa2, 0xbc, 0x9c, + 0x2c, 0xfd, 0xf6, 0xfd, + 0x62, 0x79, 0x57, 0xce, 0x06, 0xc1, 0xeb, 0xfa, 0xfd, 0x8c, 0xdd, 0x68, + 0x76, 0x0e, 0x1e, 0xd9, + 0x84, 0xef, 0xb8, 0x5a, 0xcf, 0xb8, 0x39, 0x54, 0xfd, 0x67, 0xf5, 0xe5, + 0x9d, 0x71, 0x06, 0x4d, + 0xef, 0x45, 0xd7, 0xf3, 0xf5, 0x9d, 0xc3, 0xe5, 0xfa, 0x29, 0xb1, 0x7a, + 0x97, 0xe3, 0x8d, 0x00, + 0xf4, 0xcf, 0x58, 0x68, 0x9d, 0xd6, 0xbf, 0x9d, 0xf5, 0xa1, 0x77, 0xc6, + 0x0d, 0x57, 0xef, 0x19, + 0x68, 0x78, 0x56, 0xb4, 0xce, 0x73, 0xf5, 0xf9, 0x8e, 0xf6, 0x50, 0x7b, + 0xdd, 0x4f, 0x1a, 0xa5, + 0xc7, 0x66, 0xbd, 0xef, 0x1f, 0xc2, 0x63, 0x4e, 0xb9, 0xe9, 0x58, 0x69, + 0xb5, 0x95, 0xa9, 0xad, + 0x56, 0xac, 0x7c, 0xab, 0xcf, 0x6f, 0x04, 0x19, 0xaf, 0x68, 0x29, 0x3f, + 0xde, 0xe2, 0x7e, 0x5a, + 0xb9, 0x4c, 0x3f, 0xf3, 0x3b, 0x13, 0x50, 0x17, 0x56, 0xbc, 0x47, 0xb5, + 0x41, 0x2d, 0x44, 0x54, + 0x0d, 0x31, 0x6d, 0xd6, 0x2d, 0xa5, 0x6b, 0x55, 0x46, 0x6a, 0xba, 0x91, + 0xa6, 0xdf, 0x1e, 0x3a, + 0x8a, 0x5d, 0xcf, 0x07, 0xc4, 0x05, 0x0d, 0xf5, 0xde, 0xc9, 0x3b, 0xfa, + 0x0d, 0x95, 0xb7, 0xdc, + 0x2d, 0x6f, 0x5a, 0x70, 0x41, 0xbf, 0xe1, 0x63, 0x1d, 0xff, 0xa6, 0x7e, + 0x8b, 0xc7, 0x35, 0x47, + 0xfd, 0xff, 0x96, 0xdf, 0x28, 0x5f, 0xfa, 0x6f, 0x06, 0xa5, 0x76, 0x3e, + 0xe0, 0x5a, 0x17, 0x7c, + 0xd6, 0xf1, 0xef, 0xbb, 0x12, 0xde, 0xde, 0x72, 0x23, 0xd8, 0xac, 0x60, + 0xdc, 0xb6, 0xa5, 0x74, + 0xb9, 0xf1, 0xde, 0x15, 0x5d, 0xda, 0x78, 0x47, 0x6b, 0xe3, 0xc2, 0x65, + 0xe8, 0x9f, 0x97, 0x0f, + 0xc9, 0x64, 0x54, 0x2a, 0x46, 0xa6, 0x0c, 0xf6, 0xd8, 0xcc, 0xbd, 0xa7, + 0x65, 0xda, 0x93, 0x1d, + 0xc9, 0xd8, 0xcc, 0x2e, 0x9f, 0x6a, 0x5a, 0x21, 0xfc, 0x56, 0xf0, 0x29, + 0xf5, 0x21, 0xb5, 0x17, + 0x31, 0x35, 0xb0, 0xc6, 0x6b, 0xb3, 0x6e, 0xb3, 0xba, 0x46, 0x8c, 0x74, + 0x8c, 0xb1, 0xab, 0x9d, + 0x31, 0x82, 0xea, 0xe9, 0x22, 0xf1, 0xf8, 0xf3, 0xe1, 0x03, 0xf9, 0x38, + 0xf4, 0x4d, 0x11, 0xd7, + 0x80, 0xef, 0xd8, 0xc5, 0xe3, 0x24, 0xd1, 0x18, 0x23, 0x03, 0x2c, 0x71, + 0xa6, 0xce, 0x69, 0xb7, + 0x97, 0x8f, 0x49, 0x8b, 0x33, 0xe2, 0xe8, 0x7d, 0x41, 0x56, 0xc9, 0xd7, + 0xf2, 0x2f, 0x74, 0xfd, + 0x73, 0xe0, 0x13, 0x72, 0xc0, 0x0a, 0x7d, 0xaf, 0x2e, 0x84, 0x9f, 0x86, + 0x4d, 0xfa, 0x6f, 0x3d, + 0xe3, 0x8c, 0x44, 0xe9, 0x67, 0xb5, 0x19, 0xe8, 0x3a, 0xed, 0xb1, 0x98, + 0x04, 0x7b, 0xb4, 0x43, + 0xfd, 0x65, 0xe4, 0x10, 0x2a, 0x8c, 0x6f, 0x88, 0x8e, 0x8f, 0xae, 0x19, + 0x17, 0xc9, 0xc6, 0x71, + 0x32, 0x8c, 0xda, 0x3e, 0x84, 0x9f, 0x8e, 0xd1, 0x54, 0xdf, 0xd1, 0xc4, + 0x53, 0x9f, 0xda, 0xb0, + 0x78, 0x9f, 0xef, 0x9a, 0x20, 0x3f, 0xf6, 0x2d, 0x88, 0xc9, 0x55, 0xdf, + 0xa4, 0x13, 0x81, 0x96, + 0xd7, 0x49, 0xab, 0x7c, 0x46, 0x2e, 0xbd, 0x16, 0xa8, 0x68, 0x4d, 0x22, + 0x6e, 0x23, 0x43, 0xb8, + 0x76, 0x18, 0xd1, 0xf2, 0x4c, 0x6d, 0x58, 0x82, 0xff, 0xf7, 0xff, 0x75, + 0x9d, 0x34, 0x78, 0x4c, + 0xa4, 0xe1, 0xfa, 0xe6, 0xaa, 0x7e, 0x9c, 0xad, 0xd4, 0x77, 0xc4, 0x7d, + 0xfe, 0x13, 0x71, 0x51, + 0x7e, 0xe4, 0x3c, 0x38, 0x44, 0x46, 0xb8, 0xbf, 0x0b, 0x2b, 0xd2, 0x1e, + 0xe9, 0x08, 0x5d, 0xd7, + 0x70, 0xd9, 0xa2, 0x1c, 0x6d, 0x6c, 0xa6, 0x63, 0x2d, 0x7c, 0xd4, 0x73, + 0x32, 0xca, 0xfe, 0x82, + 0x28, 0x0c, 0xe4, 0x04, 0xf8, 0xa5, 0xfe, 0x0b, 0xba, 0x2f, 0xae, 0x1a, + 0xdf, 0x32, 0x6f, 0x89, + 0x0c, 0xc6, 0x62, 0x8a, 0xd2, 0x8b, 0xf6, 0x91, 0xd2, 0xab, 0xac, 0x57, + 0x7a, 0xaf, 0xf2, 0x5f, + 0xfb, 0x7a, 0x2a, 0xbd, 0x7b, 0x45, 0xf7, 0xb4, 0xee, 0xe5, 0xbd, 0xd2, + 0x2e, 0x37, 0xb6, 0x67, + 0x39, 0xe3, 0x18, 0xdb, 0xd3, 0x6c, 0x7b, 0x32, 0xfd, 0x91, 0xca, 0x47, + 0x52, 0x1f, 0xa9, 0xe8, + 0xc1, 0xdc, 0x9e, 0xf4, 0xf7, 0xcc, 0xe8, 0xf9, 0x4b, 0xca, 0x54, 0xd6, + 0x3b, 0xfd, 0xe1, 0xba, + 0xf0, 0x98, 0x40, 0xdf, 0xb5, 0x19, 0x36, 0xe9, 0xd9, 0xa4, 0x17, 0xec, + 0xc3, 0x1d, 0xc3, 0x65, + 0xb8, 0x0c, 0x92, 0x01, 0xd4, 0x23, 0xea, 0xef, 0x51, 0xbf, 0xba, 0x0a, + 0xa8, 0xbf, 0x83, 0x3d, + 0x2b, 0x29, 0xd2, 0x87, 0x0c, 0x0b, 0x15, 0x03, 0xbb, 0x95, 0xdd, 0x93, + 0xde, 0xb5, 0x21, 0x2c, + 0x22, 0x2c, 0x74, 0x5d, 0xf3, 0x15, 0xf0, 0xfb, 0x36, 0x89, 0xb5, 0x5e, + 0x05, 0x2f, 0xd8, 0x86, + 0x1a, 0x43, 0xf5, 0x77, 0x04, 0x3c, 0xad, 0x9f, 0x98, 0xb4, 0xea, 0xbf, + 0x66, 0xfd, 0xe6, 0x32, + 0xf8, 0xd6, 0xfd, 0x2d, 0xaa, 0xd5, 0xd8, 0x6b, 0xa0, 0x0c, 0xd5, 0x18, + 0x0e, 0x9d, 0xbb, 0x66, + 0x86, 0x8f, 0x0e, 0x7d, 0x33, 0xe6, 0xf5, 0xfd, 0x5e, 0xdb, 0xae, 0x75, + 0xff, 0x88, 0x1b, 0x6a, + 0x1b, 0x22, 0xcf, 0x81, 0xc1, 0xc4, 0x5a, 0x0f, 0xf6, 0xb7, 0x55, 0x3a, + 0x4f, 0xba, 0x6c, 0xd7, + 0xf6, 0x1b, 0xa4, 0x3d, 0xdf, 0x4f, 0x7c, 0x58, 0xf2, 0x19, 0xdd, 0x97, + 0x59, 0x6a, 0xee, 0x73, + 0xf6, 0x61, 0x8e, 0xbe, 0x13, 0xc3, 0x93, 0xc2, 0xab, 0x43, 0xdf, 0x6f, + 0x7b, 0xdd, 0xbf, 0xdb, + 0x96, 0x58, 0xbb, 0xb3, 0xe2, 0xd9, 0xd4, 0x21, 0xf6, 0x41, 0x0e, 0xd7, + 0x37, 0x32, 0xf4, 0x97, + 0xa7, 0xa8, 0x4a, 0xb2, 0x65, 0x99, 0xbc, 0x1d, 0xf0, 0x6f, 0xf9, 0x2f, + 0xca, 0x3e, 0xa9, 0x60, + 0xf7, 0x7a, 0x52, 0x47, 0x98, 0x9e, 0x63, 0x0c, 0x96, 0xa1, 0xc5, 0x0f, + 0x67, 0x87, 0xcf, 0xea, + 0x36, 0x2a, 0xa4, 0xd1, 0x5f, 0x26, 0xd6, 0xc2, 0x67, 0x85, 0x47, 0x3c, + 0x58, 0x3c, 0x30, 0x7b, + 0xa0, 0x7d, 0x80, 0x0c, 0x70, 0x7f, 0xf7, 0xf0, 0x33, 0xd8, 0xe4, 0x31, + 0x79, 0x1c, 0xdb, 0x64, + 0x4a, 0x91, 0x4c, 0x90, 0x49, 0x52, 0xc6, 0x19, 0x3d, 0x9a, 0xfc, 0xf9, + 0x88, 0x74, 0x97, 0xde, + 0xc4, 0x97, 0x7b, 0xac, 0xf1, 0xac, 0x0c, 0xca, 0x7f, 0xca, 0x76, 0x9b, + 0x33, 0x3c, 0xa2, 0x5b, + 0x28, 0xc6, 0x7e, 0x59, 0xbb, 0x39, 0x6f, 0x8d, 0x78, 0xb4, 0x70, 0x60, + 0xee, 0xb3, 0xf6, 0xfe, + 0xe2, 0x85, 0x7a, 0x7a, 0xd7, 0x5b, 0x7a, 0x49, 0x4f, 0x62, 0xaf, 0x27, + 0x9f, 0x9e, 0xd1, 0xdf, + 0x28, 0x6d, 0x02, 0x1b, 0x0f, 0x32, 0x7a, 0x19, 0xf7, 0xcc, 0x08, 0x8f, + 0x0a, 0xd9, 0xeb, 0xd7, + 0x8a, 0xb7, 0x6e, 0xa3, 0x1e, 0x1c, 0xff, 0x74, 0x66, 0x7f, 0x5b, 0xbf, + 0xfc, 0xbe, 0x46, 0x5f, + 0x09, 0x0a, 0xfa, 0xfa, 0xd9, 0xfa, 0x3b, 0xfa, 0x16, 0x3e, 0x9e, 0x7b, + 0x47, 0x7d, 0xd8, 0xe8, + 0x50, 0x4e, 0xfc, 0xd5, 0xf3, 0xe4, 0xa8, 0x3b, 0x26, 0x3f, 0x9c, 0xd0, + 0xd3, 0x20, 0xca, 0xf2, + 0xfa, 0xe6, 0xf7, 0xb5, 0xf7, 0x71, 0xf4, 0x31, 0xfa, 0x88, 0xbe, 0xec, + 0x7d, 0x1d, 0x7d, 0x6d, + 0xfd, 0x1c, 0xfd, 0xed, 0xcf, 0x38, 0x9e, 0xa8, 0xbc, 0x2f, 0x45, 0xed, + 0x85, 0xa1, 0xf8, 0xfa, + 0x6d, 0xd8, 0x4d, 0xd9, 0x22, 0xac, 0xa1, 0xdb, 0xa8, 0x3b, 0x6a, 0xef, + 0x8f, 0x7f, 0xa8, 0xf4, + 0xb1, 0x8c, 0x7f, 0x16, 0xf6, 0x18, 0xdb, 0xa3, 0xb0, 0x7b, 0xee, 0xe3, + 0xe3, 0xff, 0x91, 0xf5, + 0xc0, 0xa4, 0xbb, 0x93, 0x6e, 0x65, 0xff, 0x53, 0x7b, 0x60, 0xb7, 0x50, + 0x7c, 0xfd, 0x26, 0x6d, + 0x17, 0xde, 0xc0, 0xd5, 0x88, 0x8d, 0xd4, 0xa5, 0x3e, 0x63, 0xa7, 0x90, + 0xad, 0x42, 0x08, 0x21, + 0x30, 0xfe, 0x1f, 0x7e, 0x26, 0xe7, 0x5b +}; diff --git a/ genplus-gx/source/ngc/gui/dvd.c b/ genplus-gx/source/ngc/gui/dvd.c new file mode 100644 index 0000000..d6c9145 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/dvd.c @@ -0,0 +1,148 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Nintendo Gamecube DVD Reading Library + * + * This is NOT a complete DVD library, in that it works for reading + * ISO9660 discs only. + * + * If you need softmod drivecodes etc, look elsewhere. + * There are known issues with libogc dvd handling, so these work + * outside of it ,if you will. + * + * This is ideal for using with a gc-linux self booting DVD only. + * Go http://www.gc-linux.org for further information and the tools + * for your platform. + * + * To keep libOGC stable, make sure you call DVD_Init before using + * these functions. + ***************************************************************************/ +#include "shared.h" + +/** DVD I/O Address base **/ +volatile unsigned long *dvd = (volatile unsigned long *) 0xCC006000; +static unsigned char *inquiry=(unsigned char *)0x80000004; + +/** Due to lack of memory, we'll use this little 2k keyhole for all DVD operations **/ +unsigned char DVDreadbuffer[2048] ATTRIBUTE_ALIGN (32); + +/*************************************************************************** + * dvd_read + * + * Read DVD disc sectors + ***************************************************************************/ +extern u8 isWII; + +int dvd_read (void *dst, unsigned int len, u64 offset) +{ + unsigned char *buffer = (unsigned char *) (unsigned int) DVDreadbuffer; + + if (len > 2048) return 1; /*** We only allow 2k reads **/ + DCInvalidateRange((void *)buffer, len); + + if(offset < 0x57057C00 || (isWII == 1 && offset < 0x118244F00LL)) // don't read past the end of the DVD + { + offset >>= 2; + dvd[0] = 0x2E; + dvd[1] = 0; + dvd[2] = 0xA8000000; + dvd[3] = (u32)offset; + dvd[4] = len; + dvd[5] = (unsigned long) buffer; + dvd[6] = len; + dvd[7] = 3; /*** Enable reading with DMA ***/ + while (dvd[7] & 1); + memcpy (dst, buffer, len); + } + else return 0; // Let's not read past end of DVD + + if (dvd[0] & 0x4) return 0; /* Ensure it has completed */ + + return 1; +} + +/**************************************************************************** + * uselessinquiry + * + * As the name suggests, this function is quite useless. + * It's only purpose is to stop any pending DVD interrupts while we use the + * memcard interface. + * + * libOGC tends to foul up if you don't, and sometimes does if you do! + ****************************************************************************/ +void uselessinquiry () +{ + + dvd[0] = 0; + dvd[1] = 0; + dvd[2] = 0x12000000; + dvd[3] = 0; + dvd[4] = 0x20; + dvd[5] = 0x80000000; + dvd[6] = 0x20; + dvd[7] = 1; + + while (dvd[7] & 1); +} + +/**************************************************************************** + * dvd_motor_off + * + * Stop the DVD Motor + * + * This can be used to prevent the Disc from spinning during playtime + ****************************************************************************/ +void dvd_motor_off( ) +{ + dvd[0] = 0x2e; + dvd[1] = 0; + dvd[2] = 0xe3000000; + dvd[3] = 0; + dvd[4] = 0; + dvd[5] = 0; + dvd[6] = 0; + dvd[7] = 1; // Do immediate + while (dvd[7] & 1); + + /*** PSO Stops blackscreen at reload ***/ + dvd[0] = 0x14; + dvd[1] = 0; +} + +/**************************************************************************** + * dvd_inquiry + * + * Return the Current DVD Drive ID + * + * This can be used to determine whereas the console is a Gamecube or a Wii + ****************************************************************************/ +int dvd_inquiry() +{ + dvd[0] = 0x2e; + dvd[1] = 0; + dvd[2] = 0x12000000; + dvd[3] = 0; + dvd[4] = 0x20; + dvd[5] = 0x80000000; + dvd[6] = 0x20; + dvd[7] = 3; + while( dvd[7] & 1 ); + DCFlushRange((void *)0x80000000, 32); + return (int)inquiry[2]; +} diff --git a/ genplus-gx/source/ngc/gui/dvd.h b/ genplus-gx/source/ngc/gui/dvd.h new file mode 100644 index 0000000..3394211 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/dvd.h @@ -0,0 +1,24 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ***************************************************************************/ + +extern int dvd_read (void *dst, unsigned int len, u64 offset); +extern void uselessinquiry (); +extern void dvd_motor_off (); +extern int dvd_inquiry(); diff --git a/ genplus-gx/source/ngc/gui/filesel.c b/ genplus-gx/source/ngc/gui/filesel.c new file mode 100644 index 0000000..653029b --- /dev/null +++ b/ genplus-gx/source/ngc/gui/filesel.c @@ -0,0 +1,526 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * File Selection + ***************************************************************************/ +#include "shared.h" +#include "dvd.h" +#include "iso9660.h" +#include "font.h" +#include "unzip.h" +#include "diskio.h" +#include "vfat.h" + + +#define PAGESIZE 12 +#define PADCAL 70 + +static int maxfiles; +u8 havedir = 0; +u8 haveSDdir = 0; +u8 UseSDCARD = 0; +char rootSDdir[SDCARD_MAX_PATH_LEN]; +int LoadFile (unsigned char *buffer); +int offset = 0; +int selection = 0; +int old_selection = 0; +int old_offset = 0; +VFATFS fs; +FSDIRENTRY f; + + +extern void reloadrom (); + +/*************************************************************************** + * Showfile screen + ***************************************************************************/ +static void ShowFiles (int offset, int selection) +{ + int i, j; + char text[MAX_LONG_NAME+2]; + + ClearScreen (); + j = 0; + + for (i = offset; i < (offset + PAGESIZE) && (i < maxfiles); i++) + { + memset(text,0,MAX_LONG_NAME+2); + if (filelist[i].flags) sprintf(text, "[%s]", filelist[i].displayname + filelist[i].filename_offset); + else sprintf (text, "%s", filelist[i].displayname + filelist[i].filename_offset); + + if (j == (selection - offset)) WriteCentre_HL ((j * fheight) + 120, text); + else WriteCentre ((j * fheight) + 120, text); + j++; + } + SetScreen (); +} + +/*************************************************************************** + * Update SDCARD curent directory name + ***************************************************************************/ +int updateSDdirname() +{ + int size=0; + char *test; + char temp[1024]; + + + /* go up to parent directory */ + if (strcmp(filelist[selection].filename,"..") == 0) + { + /* determine last subdirectory namelength */ + sprintf(temp,"%s",rootSDdir); + test= strtok(temp,"/"); + while (test != NULL) + { + size = strlen(test); + test = strtok(NULL,"/"); + } + + /* remove last subdirectory name */ + size = strlen(rootSDdir) - size - 1; + rootSDdir[size] = 0; + + return 1; + } + else + { + /* update current directory name */ + sprintf(rootSDdir, "%s/%s",rootSDdir, filelist[selection].filename); + return 1; + } +} + +/*************************************************************************** + * Browse SDCARD subdirectories + ***************************************************************************/ +int parseSDdirectory() +{ + int nbfiles = 0; + FSDIRENTRY fsdir; + + /* Get a list of files from the actual root directory */ + int res = VFAT_opendir(0, &fsdir, rootSDdir); + + if (res == FS_SUCCESS) + { + while ( VFAT_readdir(&fsdir) == FS_SUCCESS ) + { + memset (&filelist[nbfiles], 0, sizeof (FILEENTRIES)); + strcpy(filelist[nbfiles].displayname, fsdir.longname); + strcpy(filelist[nbfiles].filename, fsdir.shortname); + filelist[nbfiles].length = fsdir.fsize; + filelist[nbfiles].flags = fsdir.dirent.attribute & ATTR_DIRECTORY; + nbfiles++; + } + + VFAT_closedir(&fsdir); + } + + return nbfiles; +} + +/**************************************************************************** + * FileSelector + * + * Let user select a file from the File listing + ****************************************************************************/ +void FileSelector () +{ + short p; + signed char a,b; + int haverom = 0; + int redraw = 1; + int go_up = 0; + int i,size; + + while (haverom == 0) + { + if (redraw) ShowFiles (offset, selection); + redraw = 0; + p = PAD_ButtonsDown (0); + a = PAD_StickY (0); + b = PAD_StickX (0); + + /* + * check selection screen changes + */ + + /* scroll displayed filename */ + if ((p & PAD_BUTTON_LEFT) || (b < -PADCAL)) + { + if (filelist[selection].filename_offset > 0) + { + filelist[selection].filename_offset --; + redraw = 1; + } + } + else if ((p & PAD_BUTTON_RIGHT) || (b > PADCAL)) + { + size = 0; + for (i=filelist[selection].filename_offset; i back_framewidth) + { + filelist[selection].filename_offset ++; + redraw = 1; + } + } + + /* highlight next item */ + else if ((p & PAD_BUTTON_DOWN) || (a < -PADCAL)) + { + filelist[selection].filename_offset = 0; + selection++; + if (selection == maxfiles) selection = offset = 0; + if ((selection - offset) >= PAGESIZE) offset += PAGESIZE; + redraw = 1; + } + + /* highlight previous item */ + else if ((p & PAD_BUTTON_UP) || (a > PADCAL)) + { + filelist[selection].filename_offset = 0; + selection--; + if (selection < 0) + { + selection = maxfiles - 1; + offset = selection - PAGESIZE + 1; + } + if (selection < offset) offset -= PAGESIZE; + if (offset < 0) offset = 0; + redraw = 1; + } + + /* go back one page */ + else if (p & PAD_TRIGGER_L) + { + filelist[selection].filename_offset = 0; + selection -= PAGESIZE; + if (selection < 0) + { + selection = maxfiles - 1; + offset = selection - PAGESIZE + 1; + } + if (selection < offset) offset -= PAGESIZE; + if (offset < 0) offset = 0; + redraw = 1; + } + + /* go forward one page */ + else if (p & PAD_TRIGGER_R) + { + filelist[selection].filename_offset = 0; + selection += PAGESIZE; + if (selection > maxfiles - 1) selection = offset = 0; + if ((selection - offset) >= PAGESIZE) offset += PAGESIZE; + redraw = 1; + } + + /* + * Check pressed key + */ + + /* go up one directory or quit */ + if (p & PAD_BUTTON_B) + { + filelist[selection].filename_offset = 0; + if (((!UseSDCARD) && (basedir == rootdir)) || + (UseSDCARD && strcmp(rootSDdir,"/") == 0)) return; + go_up = 1; + } + + /* quit */ + if (p & PAD_TRIGGER_Z) + { + filelist[selection].filename_offset = 0; + return; + } + + /* open selected file or directory */ + if ((p & PAD_BUTTON_A) || go_up) + { + filelist[selection].filename_offset = 0; + if (go_up) + { + go_up = 0; + selection = UseSDCARD ? 0 : 1; + } + + /*** This is directory ***/ + if (filelist[selection].flags) + { + /* SDCARD directory handler */ + if (UseSDCARD) + { + /* update current directory */ + int status = updateSDdirname(); + + /* move to new directory */ + if (status == 1) + { + /* reinit selector (previous value is saved for one level) */ + if (selection == 1) + { + selection = old_selection; + offset = old_offset; + old_selection = 0; + old_offset = 0; + } + else + { + /* save current selector value */ + old_selection = selection; + old_offset = offset; + selection = 0; + offset = 0; + } + + /* set new entry list */ + maxfiles = parseSDdirectory(); + if (!maxfiles) + { + /* quit */ + WaitPrompt ("Error reading directory !"); + haverom = 1; + haveSDdir = 0; + } + } + else if (status == -1) + { + /* quit */ + haverom = 1; + haveSDdir = 0; + } + } + /* DVD directory handler */ + else + { + /* move to a new directory */ + if (selection != 0) + { + /* update current directory */ + rootdir = filelist[selection].offset; + rootdirlength = filelist[selection].length; + + /* reinit selector (previous value is saved for one level) */ + if (selection == 1) + { + selection = old_selection; + offset = old_offset; + old_selection = 0; + old_offset = 0; + } + else + { + /* save current selector value */ + old_selection = selection; + old_offset = offset; + selection = 0; + offset = 0; + } + + /* get new entry list */ + maxfiles = parsedirectory (); + } + } + } + else /*** This is a file ***/ + { + rootdir = filelist[selection].offset; + rootdirlength = filelist[selection].length; + genromsize = LoadFile (cart_rom); + reloadrom (); + haverom = 1; + } + redraw = 1; + } + } +} + +/**************************************************************************** + * OpenDVD + * + * Function to load a DVD directory and display to user. + ****************************************************************************/ +void OpenDVD () +{ + UseSDCARD = 0; + if (!getpvd()) + { + ShowAction("Mounting DVD ... Wait"); + DVD_Mount(); + havedir = 0; + if (!getpvd()) + { + WaitPrompt ("Failed to mount DVD"); + return; + } + } + + if (havedir == 0) + { + /* don't mess with SD entries */ + haveSDdir = 0; + + /* reinit selector */ + rootdir = basedir; + old_selection = selection = offset = old_offset = 0; + + if ((maxfiles = parsedirectory ())) + { + FileSelector (); + havedir = 1; + } + } + else FileSelector (); +} + +/**************************************************************************** + * OpenSD updated to use the new libogc. Written by softdev and pasted + * into this code by Drack. + * Modified for subdirectory browing & quick filelist recovery + * Enjoy! +*****************************************************************************/ +int OpenSD () +{ + UseSDCARD = 1; + char msg[20]; + + if (haveSDdir == 0) + { + /* don't mess with DVD entries */ + havedir = 0; + + /* reinit selector */ + old_selection = selection = offset = old_offset = 0; + + /* Reset SDCARD root directory */ + sprintf(rootSDdir,"/genplus/roms"); + + /* Parse initial root directory and get entries list */ + ShowAction("Reading Directory ..."); + int res = VFAT_mount(FS_SLOTA, &fs); + if ( res != FS_TYPE_FAT16 ) + { + sprintf(msg,"Error mounting SDCARD: %d", res); + WaitPrompt (msg); + return 0; + } + + if ((maxfiles = parseSDdirectory ())) + { + /* Select an entry */ + FileSelector (); + + /* memorize last entries list, actual root directory and selection for next access */ + haveSDdir = 1; + } + else + { + /* no entries found */ + WaitPrompt ("Error reading /genplus/roms"); + return 0; + } + } + /* Retrieve previous entries list and made a new selection */ + else FileSelector (); + + return 1; +} + +/**************************************************************************** + * SDCard Get Info + ****************************************************************************/ +void GetSDInfo () +{ + char fname[SDCARD_MAX_PATH_LEN]; + rootdirlength = 0; + + /* Check filename length */ + sprintf(fname, "%s/%s",rootSDdir,filelist[selection].filename); + + int res = VFAT_fopen(0, &f, fname, FS_READ); + if (res != FS_SUCCESS ) + { + WaitPrompt ("Unable to open file!"); + return; + } +} + +/**************************************************************************** + * LoadFile + * + * This function will load a file from DVD or SDCARD, in BIN, SMD or ZIP format. + * The values for offset and length are inherited from rootdir and + * rootdirlength. + * + * The buffer parameter should re-use the initial ROM buffer. + ****************************************************************************/ +int LoadFile (unsigned char *buffer) +{ + int offset; + int blocks; + int i; + u64 discoffset; + char readbuffer[2048]; + + /* SDCard Addition */ + if (UseSDCARD) GetSDInfo (); + + /* How many 2k blocks to read */ + if (rootdirlength == 0) return 0; + blocks = rootdirlength / 2048; + + offset = 0; + discoffset = rootdir; + ShowAction ("Loading ... Wait"); + + if (UseSDCARD) VFAT_fread(&f, readbuffer, 2048); + else dvd_read (&readbuffer, 2048, discoffset); + + if (!IsZipFile ((char *) readbuffer)) + { + if (UseSDCARD) VFAT_fseek(&f, 0, SEEK_SET); + + for (i = 0; i < blocks; i++) + { + if (UseSDCARD) VFAT_fread (&f, readbuffer, 2048); + else dvd_read(readbuffer, 2048, discoffset); + memcpy (buffer + offset, readbuffer, 2048); + offset += 2048; + discoffset += 2048; + } + + /* And final cleanup */ + if (rootdirlength % 2048) + { + i = rootdirlength % 2048; + if (UseSDCARD) VFAT_fread (&f, readbuffer, i); + else dvd_read (readbuffer, 2048, discoffset); + memcpy (buffer + offset, readbuffer, i); + } + } + else return UnZipBuffer (buffer, discoffset, rootdirlength); + + if (UseSDCARD) VFAT_fclose(&f); + + return rootdirlength; +} diff --git a/ genplus-gx/source/ngc/gui/filesel.c.old b/ genplus-gx/source/ngc/gui/filesel.c.old new file mode 100644 index 0000000..3d5549d --- /dev/null +++ b/ genplus-gx/source/ngc/gui/filesel.c.old @@ -0,0 +1,540 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * File Selection + ***************************************************************************/ +#include "shared.h" +#include "dvd.h" +#include "iso9660.h" +#include "font.h" +#include "unzip.h" + +#define PAGESIZE 12 +#define PADCAL 70 + +static int maxfiles; +u8 havedir = 0; +u8 haveSDdir = 0; +u8 UseSDCARD = 0; +sd_file *filehandle; +char rootSDdir[SDCARD_MAX_PATH_LEN]; +int LoadFile (unsigned char *buffer); +int offset = 0; +int selection = 0; +int old_selection = 0; +int old_offset = 0; + +extern void reloadrom (); + +/*************************************************************************** + * Showfile screen + ***************************************************************************/ +static void ShowFiles (int offset, int selection) +{ + int i, j; + char text[MAXJOLIET+2]; + + ClearScreen (); + j = 0; + + for (i = offset; i < (offset + PAGESIZE) && (i < maxfiles); i++) + { + memset(text,0,MAXJOLIET+2); + if (filelist[i].flags) sprintf(text, "[%s]", filelist[i].filename + filelist[i].filename_offset); + else sprintf (text, "%s", filelist[i].filename + filelist[i].filename_offset); + + if (j == (selection - offset)) WriteCentre_HL ((j * fheight) + 120, text); + else WriteCentre ((j * fheight) + 120, text); + j++; + } + SetScreen (); +} + +/*************************************************************************** + * Update SDCARD curent directory name + ***************************************************************************/ +int updateSDdirname() +{ + int size=0; + char *test; + char temp[1024]; + + /* current directory doesn't change */ + if (strcmp(filelist[selection].filename,".") == 0) return 0; + + /* go up to parent directory */ + else if (strcmp(filelist[selection].filename,"..") == 0) + { + /* determine last subdirectory namelength */ + sprintf(temp,"%s",rootSDdir); + test= strtok(temp,"\\"); + while (test != NULL) + { + size = strlen(test); + test = strtok(NULL,"\\"); + } + + /* remove last subdirectory name */ + size = strlen(rootSDdir) - size - 1; + rootSDdir[size] = 0; + + /* handles root name */ + if (strcmp(rootSDdir,"dev0:") == 0) sprintf(rootSDdir,"dev0:\\genplus\\.."); + + return 1; + } + else + { + /* test new directory namelength */ + if ((strlen(rootSDdir)+1+strlen(filelist[selection].filename)) < SDCARD_MAX_PATH_LEN) + { + /* handles root name */ + if (strcmp(rootSDdir,"dev0:\\genplus\\..") == 0) sprintf(rootSDdir,"dev0:"); + + /* update current directory name */ + sprintf(rootSDdir, "%s\\%s",rootSDdir, filelist[selection].filename); + return 1; + } + else + { + WaitPrompt ("Dirname is too long !"); + return -1; + } + } +} + +/*************************************************************************** + * Browse SDCARD subdirectories + ***************************************************************************/ +int parseSDdirectory() +{ + int entries = 0; + int nbfiles = 0; + DIR *sddir = NULL; + + /* Get a list of files from the actual root directory */ + entries = SDCARD_ReadDir (rootSDdir, &sddir); + + if (entries < 0) entries = 0; + if (entries > MAXFILES) entries = MAXFILES; + + /* Move to DVD structure - this is required for the file selector */ + while (entries) + { + memset (&filelist[nbfiles], 0, sizeof (FILEENTRIES)); + strncpy(filelist[nbfiles].filename,sddir[nbfiles].fname,MAXJOLIET); + filelist[nbfiles].filename[MAXJOLIET-1] = 0; + filelist[nbfiles].length = sddir[nbfiles].fsize; + filelist[nbfiles].flags = (char)(sddir[nbfiles].fattr & SDCARD_ATTR_DIR); + nbfiles++; + entries--; + } + + /*** Release memory ***/ + free(sddir); + + return nbfiles; +} + +/**************************************************************************** + * FileSelector + * + * Let user select a file from the File listing + ****************************************************************************/ +void FileSelector () +{ + short p; + signed char a,b; + int haverom = 0; + int redraw = 1; + int go_up = 0; + int i,size; + + while (haverom == 0) + { + if (redraw) ShowFiles (offset, selection); + redraw = 0; + p = PAD_ButtonsDown (0); + a = PAD_StickY (0); + b = PAD_StickX (0); + + /* + * check selection screen changes + */ + + /* scroll displayed filename */ + if ((p & PAD_BUTTON_LEFT) || (b < -PADCAL)) + { + if (filelist[selection].filename_offset > 0) + { + filelist[selection].filename_offset --; + redraw = 1; + } + } + else if ((p & PAD_BUTTON_RIGHT) || (b > PADCAL)) + { + size = 0; + for (i=filelist[selection].filename_offset; i back_framewidth) + { + filelist[selection].filename_offset ++; + redraw = 1; + } + } + + /* highlight next item */ + else if ((p & PAD_BUTTON_DOWN) || (a < -PADCAL)) + { + filelist[selection].filename_offset = 0; + selection++; + if (selection == maxfiles) selection = offset = 0; + if ((selection - offset) >= PAGESIZE) offset += PAGESIZE; + redraw = 1; + } + + /* highlight previous item */ + else if ((p & PAD_BUTTON_UP) || (a > PADCAL)) + { + filelist[selection].filename_offset = 0; + selection--; + if (selection < 0) + { + selection = maxfiles - 1; + offset = selection - PAGESIZE + 1; + } + if (selection < offset) offset -= PAGESIZE; + if (offset < 0) offset = 0; + redraw = 1; + } + + /* go back one page */ + else if (p & PAD_TRIGGER_L) + { + filelist[selection].filename_offset = 0; + selection -= PAGESIZE; + if (selection < 0) + { + selection = maxfiles - 1; + offset = selection - PAGESIZE + 1; + } + if (selection < offset) offset -= PAGESIZE; + if (offset < 0) offset = 0; + redraw = 1; + } + + /* go forward one page */ + else if (p & PAD_TRIGGER_R) + { + filelist[selection].filename_offset = 0; + selection += PAGESIZE; + if (selection > maxfiles - 1) selection = offset = 0; + if ((selection - offset) >= PAGESIZE) offset += PAGESIZE; + redraw = 1; + } + + /* + * Check pressed key + */ + + /* go up one directory or quit */ + if (p & PAD_BUTTON_B) + { + filelist[selection].filename_offset = 0; + if (((!UseSDCARD) && (basedir == rootdir)) || + (UseSDCARD && strcmp(rootSDdir,"dev0:\\genplus\\..") == 0)) return; + go_up = 1; + } + + /* quit */ + if (p & PAD_TRIGGER_Z) + { + filelist[selection].filename_offset = 0; + return; + } + + /* open selected file or directory */ + if ((p & PAD_BUTTON_A) || go_up) + { + filelist[selection].filename_offset = 0; + if (go_up) + { + go_up = 0; + selection = 1; + } + + /*** This is directory ***/ + if (filelist[selection].flags) + { + if (UseSDCARD) /* SDCARD directory handler */ + { + /* update current directory */ + int status = updateSDdirname(); + + /* move to new directory */ + if (status == 1) + { + /* reinit selector (previous value is saved for one level) */ + if (selection == 1) + { + selection = old_selection; + offset = old_offset; + old_selection = 0; + old_offset = 0; + } + else + { + /* save current selector value */ + old_selection = selection; + old_offset = offset; + selection = 0; + offset = 0; + } + + + /* set new entry list */ + maxfiles = parseSDdirectory(); + if (!maxfiles) + { + /* quit */ + WaitPrompt ("Error reading directory !"); + haverom = 1; + haveSDdir = 0; + } + } + else if (status == -1) + { + /* quit */ + haverom = 1; + haveSDdir = 0; + } + } + else /* DVD directory handler */ + { + /* move to a new directory */ + if (selection != 0) + { + /* update current directory */ + rootdir = filelist[selection].offset; + rootdirlength = filelist[selection].length; + + /* reinit selector (previous value is saved for one level) */ + if (selection == 1) + { + selection = old_selection; + offset = old_offset; + old_selection = 0; + old_offset = 0; + } + else + { + /* save current selector value */ + old_selection = selection; + old_offset = offset; + selection = 0; + offset = 0; + } + + /* get new entry list */ + maxfiles = parsedirectory (); + } + } + } + else /*** This is a file ***/ + { + rootdir = filelist[selection].offset; + rootdirlength = filelist[selection].length; + genromsize = LoadFile (cart_rom); + reloadrom (); + haverom = 1; + } + redraw = 1; + } + } +} + +/**************************************************************************** + * OpenDVD + * + * Function to load a DVD directory and display to user. + ****************************************************************************/ +void OpenDVD () +{ + UseSDCARD = 0; + if (!getpvd()) + { + ShowAction("Mounting DVD ... Wait"); + DVD_Mount(); + havedir = 0; + if (!getpvd()) + { + WaitPrompt ("Failed to mount DVD"); + return; + } + } + + if (havedir == 0) + { + /* don't mess with SD entries */ + haveSDdir = 0; + + /* reinit selector */ + rootdir = basedir; + old_selection = selection = offset = old_offset = 0; + + if ((maxfiles = parsedirectory ())) + { + FileSelector (); + havedir = 1; + } + } + else FileSelector (); +} + +/**************************************************************************** + * OpenSD updated to use the new libogc. Written by softdev and pasted + * into this code by Drack. + * Modified for subdirectory browing & quick filelist recovery + * Enjoy! +*****************************************************************************/ +int OpenSD () +{ + UseSDCARD = 1; + + if (haveSDdir == 0) + { + /* don't mess with DVD entries */ + havedir = 0; + + /* reinit selector */ + old_selection = selection = offset = old_offset = 0; + + /* Reset SDCARD root directory */ + sprintf(rootSDdir,"dev0:\\genplus\\roms"); + + /* Parse initial root directory and get entries list */ + ShowAction("Reading Directory ..."); + if ((maxfiles = parseSDdirectory ())) + { + /* Select an entry */ + FileSelector (); + + /* memorize last entries list, actual root directory and selection for next access */ + haveSDdir = 1; + } + else + { + /* no entries found */ + WaitPrompt ("Error reading dev0:\\genplus\\roms"); + return 0; + } + } + /* Retrieve previous entries list and made a new selection */ + else FileSelector (); + + return 1; +} + +/**************************************************************************** + * SDCard Get Info + ****************************************************************************/ +void GetSDInfo () +{ + char fname[SDCARD_MAX_PATH_LEN]; + rootdirlength = 0; + + /* Check filename length */ + if ((strlen(rootSDdir)+1+strlen(filelist[selection].filename)) < SDCARD_MAX_PATH_LEN) + sprintf(fname, "%s\\%s",rootSDdir,filelist[selection].filename); + + else + { + WaitPrompt ("Maximum Filename Length reached !"); + haveSDdir = 0; // reset everything before next access + } + + filehandle = SDCARD_OpenFile (fname, "rb"); + if (filehandle == NULL) + { + WaitPrompt ("Unable to open file!"); + return; + } + rootdirlength = SDCARD_GetFileSize (filehandle); +} + +/**************************************************************************** + * LoadFile + * + * This function will load a file from DVD or SDCARD, in BIN, SMD or ZIP format. + * The values for offset and length are inherited from rootdir and + * rootdirlength. + * + * The buffer parameter should re-use the initial ROM buffer. + ****************************************************************************/ +int LoadFile (unsigned char *buffer) +{ + int offset; + int blocks; + int i; + u64 discoffset; + char readbuffer[2048]; + + /* SDCard Addition */ + if (UseSDCARD) GetSDInfo (); + + /* How many 2k blocks to read */ + if (rootdirlength == 0) return 0; + blocks = rootdirlength / 2048; + + offset = 0; + discoffset = rootdir; + ShowAction ("Loading ... Wait"); + + if (UseSDCARD) SDCARD_ReadFile (filehandle, &readbuffer, 2048); + else dvd_read (&readbuffer, 2048, discoffset); + + if (!IsZipFile ((char *) readbuffer)) + { + if (UseSDCARD) SDCARD_SeekFile (filehandle, 0, SDCARD_SEEK_SET); + + for (i = 0; i < blocks; i++) + { + if (UseSDCARD) SDCARD_ReadFile (filehandle, &readbuffer, 2048); + else dvd_read(readbuffer, 2048, discoffset); + memcpy (buffer + offset, readbuffer, 2048); + offset += 2048; + discoffset += 2048; + } + + /* And final cleanup */ + if (rootdirlength % 2048) + { + i = rootdirlength % 2048; + if (UseSDCARD) SDCARD_ReadFile (filehandle, &readbuffer, i); + else dvd_read (readbuffer, 2048, discoffset); + memcpy (buffer + offset, readbuffer, i); + } + } + else return UnZipBuffer (buffer, discoffset, rootdirlength); + + if (UseSDCARD) SDCARD_CloseFile (filehandle); + + return rootdirlength; +} diff --git a/ genplus-gx/source/ngc/gui/font.c b/ genplus-gx/source/ngc/gui/font.c new file mode 100644 index 0000000..34a9b95 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/font.c @@ -0,0 +1,388 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ***************************************************************************/ + +/***************************************************************************** + * IPL FONT Engine + * + * Based on Qoob MP3 Player Font + * Added IPL font extraction + *****************************************************************************/ +#include "shared.h" +#include "font.h" +#include "gpback.h" + +/*** Backdrop ***/ +char backdrop[(640 * 480 * 2) + 32]; + +/* Backdrop Frame Width (to avoid writing outside of the background frame) */ +u16 back_framewidth = 640; + +typedef struct +{ + unsigned short font_type, first_char, last_char, subst_char, ascent_units, descent_units, widest_char_width, + leading_space, cell_width, cell_height; + unsigned long texture_size; + unsigned short texture_format, texture_columns, texture_rows, texture_width, texture_height, offset_charwidth; + unsigned long offset_tile, size_tile; +} FONT_HEADER; + +static unsigned char fontWork[ 0x20000 ] __attribute__((aligned(32))); +static unsigned char fontFont[ 0x40000 ] __attribute__((aligned(32))); +extern unsigned int *xfb[2]; +extern int whichfb; + +/**************************************************************************** + * YAY0 Decoding + ****************************************************************************/ +/* Yay0 decompression */ +void yay0_decode(unsigned char *s, unsigned char *d) +{ + int i, j, k, p, q, cnt; + + i = *(unsigned long *)(s + 4); // size of decoded data + j = *(unsigned long *)(s + 8); // link table + k = *(unsigned long *)(s + 12); // byte chunks and count modifiers + + q = 0; // current offset in dest buffer + cnt = 0; // mask bit counter + p = 16; // current offset in mask table + + unsigned long r22 = 0, r5; + + do + { + // if all bits are done, get next mask + if(cnt == 0) + { + // read word from mask data block + r22 = *(unsigned long *)(s + p); + p += 4; + cnt = 32; // bit counter + } + // if next bit is set, chunk is non-linked + if(r22 & 0x80000000) + { + // get next byte + *(unsigned char *)(d + q) = *(unsigned char *)(s + k); + k++, q++; + } + // do copy, otherwise + else + { + // read 16-bit from link table + int r26 = *(unsigned short *)(s + j); + j += 2; + // 'offset' + int r25 = q - (r26 & 0xfff); + // 'count' + int r30 = r26 >> 12; + if(r30 == 0) + { + // get 'count' modifier + r5 = *(unsigned char *)(s + k); + k++; + r30 = r5 + 18; + } + else r30 += 2; + // do block copy + unsigned char *pt = ((unsigned char*)d) + r25; + int i; + for(i=0; i>6)&3); + *d++ = ((v>>4)&3); + *d++ = ((v>>2)&3); + *d++ = ((v)&3); + } + } + } +} + +int font_offset[256], font_size[256], fheight; +extern void __SYS_ReadROM(void *buf,u32 len,u32 offset); + +void init_font(void) +{ + int i; + + __SYS_ReadROM((unsigned char *)&fontFont,0x3000,0x1FCF00); + yay0_decode((unsigned char *)&fontFont, (unsigned char *)&fontWork); + FONT_HEADER *fnt; + + fnt = ( FONT_HEADER * )&fontWork; + + untile((unsigned char*)&fontFont, (unsigned char*)&fontWork[fnt->offset_tile], fnt->texture_width, fnt->texture_height); + + for (i=0; i<256; ++i) + { + int c = i; + + if ((c < fnt->first_char) || (c > fnt->last_char)) c = fnt->subst_char; + else c -= fnt->first_char; + + font_size[i] = ((unsigned char*)fnt)[fnt->offset_charwidth + c]; + + int r = c / fnt->texture_columns; + c %= fnt->texture_columns; + font_offset[i] = (r * fnt->cell_height) * fnt->texture_width + (c * fnt->cell_width); + } + + fheight = fnt->cell_height; +} + +#define TRANSPARENCY (COLOR_BLACK) + +unsigned int blit_lookup[4] = {COLOR_BLACK, 0x6d896d77, 0xb584b57b, 0xff80ff80}; +unsigned int blit_lookup_inv[4] = {COLOR_WHITE, 0xb584b57b, 0x6d896d77, 0x258e2573}; + +void setfontcolour (int fcolour) +{ + if (fcolour == COLOR_WHITE) + { + blit_lookup[1] = 0x6d896d77; + blit_lookup[2] = 0xb584b57b; + blit_lookup[3] = 0xff80ff80; + } + else + { + blit_lookup[1] = fcolour; + blit_lookup[2] = fcolour; + blit_lookup[3] = fcolour; + } +} + +void blit_char(int x, int y, unsigned char c, unsigned int *lookup) +{ + unsigned char *fnt = ((unsigned char*)fontFont) + font_offset[c]; + int ay, ax; + unsigned int llookup; + + for (ay=0; ay> 1); + unsigned long o = xfb[whichfb][p]; + + llookup = lookup[v0]; + + if ((o != TRANSPARENCY) && (v0 == 0) && (lookup[0] == TRANSPARENCY)) + llookup = o; + + if ((ax+x) & 1) + { + o &= ~0x00FFFFFF; + o |= llookup & 0x00FFFFFF; + } + else + { + o &= ~0xFF000000; + o |= llookup & 0xFF000000; + } + + xfb[whichfb][p] = o; + } + + fnt += 512; + } +} + +void write_font(int x, int y, const unsigned char *string) +{ + int ox = x; + while (*string && (x < (ox + back_framewidth))) + { + blit_char(x, y, *string, blit_lookup); + x += font_size[*string]; + string++; + } +} + +void writex(int x, int y, int sx, int sy, const unsigned char *string, unsigned int *lookup) +{ + int ox = x; + while ((*string) && ((x) < (ox + sx))) + { + blit_char(x, y, *string, lookup); + x += font_size[*string]; + string++; + } + + int ay; + for (ay=0; ayback_framewidth) x=back_framewidth; + x = (640 - x) >> 1; + write_font(x, y, string); +} + +void WriteCentre_HL( int y, const unsigned char *string) +{ + int x,t,h; + for (x=t=0; tback_framewidth) x = back_framewidth; + h = x; + x = (640 - x) >> 1; + writex(x, y, h, fheight, string, blit_lookup_inv); +} + + +/**************************************************************************** + * Draw functions + * + ****************************************************************************/ +void fntDrawHLine (int x1, int x2, int y, int color) +{ + int i; + y = 320 * y; + x1 >>= 1; + x2 >>= 1; + for (i = x1; i <= x2; i++) xfb[whichfb][y + i] = color; +} + +void fntDrawVLine (int x, int y1, int y2, int color) +{ + int i; + x >>= 1; + for (i = y1; i <= y2; i++) xfb[whichfb][x + (640 * i) / 2] = color; +} + +void fntDrawBox (int x1, int y1, int x2, int y2, int color) +{ + fntDrawHLine (x1, x2, y1, color); + fntDrawHLine (x1, x2, y2, color); + fntDrawVLine (x1, y1, y2, color); + fntDrawVLine (x2, y1, y2, color); +} + +void fntDrawBoxFilled (int x1, int y1, int x2, int y2, int color) +{ + int h; + for (h = y1; h <= y2; h++) fntDrawHLine (x1, x2, h, color); +} + +/**************************************************************************** + * Display functions + * + ****************************************************************************/ +u8 SILENT = 0; + +void SetScreen () +{ + VIDEO_SetNextFramebuffer (xfb[whichfb]); + VIDEO_Flush (); + VIDEO_WaitVSync (); +} + +void ClearScreen () +{ + whichfb ^= 1; + memcpy (xfb[whichfb], &backdrop, 1280 * 480); + back_framewidth = 440; +} + +void WaitPrompt (char *msg) +{ + int quit = 0; + + if (SILENT) return; + + while (PAD_ButtonsDown(0) & PAD_BUTTON_A) {}; + while (!(PAD_ButtonsDown(0) & PAD_BUTTON_A) && (quit == 0)) + { + ClearScreen(); + WriteCentre(254, msg); + WriteCentre(254 + fheight, "Press A to Continue"); + SetScreen(); + while (!(PAD_ButtonsDown(0) & PAD_BUTTON_A)); + } +} + +void ShowAction (char *msg) +{ + if (SILENT) return; + + ClearScreen(); + WriteCentre(254, msg); + SetScreen(); +} + +void WaitButtonA () +{ + while (PAD_ButtonsDown(0) & PAD_BUTTON_A) {}; + while (!(PAD_ButtonsDown(0) & PAD_BUTTON_A)); +} + +/**************************************************************************** + * Unpack Backdrop + * + * Called at startup to unpack our backdrop to a temporary + * framebuffer. + ****************************************************************************/ +void unpackBackdrop () +{ + unsigned long res, inbytes, outbytes; + + inbytes = gpback_COMPRESSED; + outbytes = gpback_RAW; + res = uncompress ((char *) &backdrop[0], &outbytes, (char *) &gpback[0], inbytes); + if (res != Z_OK) while (1); +} + diff --git a/ genplus-gx/source/ngc/gui/font.h b/ genplus-gx/source/ngc/gui/font.h new file mode 100644 index 0000000..a452a68 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/font.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ***************************************************************************/ +/***************************************************************************** + * IPL FONT Engine + * + * Based on Qoob MP3 Player Font + * Added IPL font extraction + *****************************************************************************/ + +extern void init_font(void); +extern void WriteCentre_HL( int y, const unsigned char *string); +extern void WriteCentre (int y, const unsigned char *text); +extern void write_font (int x, int y, const unsigned char *text); +extern void WaitPrompt (char *msg); +extern void ShowAction (char *msg); +extern void WaitButtonA (); +extern void unpackBackdrop (); +extern void ClearScreen (); +extern void SetScreen (); +extern void fntDrawBoxFilled (int x1, int y1, int x2, int y2, int color); +extern void setfontcolour (int fcolour); +extern int fheight; +extern int font_size[256]; +extern u16 back_framewidth; diff --git a/ genplus-gx/source/ngc/gui/ggentry.c b/ genplus-gx/source/ngc/gui/ggentry.c new file mode 100644 index 0000000..2b372d9 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/ggentry.c @@ -0,0 +1,351 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Nintendo Gamecube Game Genie Entry + ***************************************************************************/ + +#include "shared.h" +#include "font.h" +#include "rominfo.h" + +#define MAXCODES 8 + +typedef struct +{ + int address; + unsigned short data; +} GGPATCH; + +/*** Game Genie Codes Array ***/ +unsigned char ggcodes[MAXCODES][10]; /*** Codes are entered as XXXX-XXXX ***/ +int gghpos[MAXCODES]; /*** Edit positions ***/ +int ggrow = 0; +int editing = 0; +char ggvalidchars[] = "ABCDEFGHJKLMNPRSTVWXYZ0123456789*"; +GGPATCH ggpatch[8]; +extern char menutitle[]; + +/**************************************************************************** + * Decode Game Genie entries to memory patches + ****************************************************************************/ +void decode_genie (char *code, int which) +{ + char *p; + int n, i; + for (i = 0; i < 8; i++) + { + /*** This should only happen if memory is corrupt! ***/ + p = strchr (ggvalidchars, code[i]); + if (p == NULL) + { + ggpatch[which].address = ggpatch[which].data = 0; + return; + } + + n = p - ggvalidchars; + + switch (i) + { + case 0: + ggpatch[which].data |= n << 3; + break; + + case 1: + ggpatch[which].data |= n >> 2; + ggpatch[which].address |= (n & 3) << 14; + break; + + case 2: + ggpatch[which].address |= n << 9; + break; + + case 3: + ggpatch[which].address |= (n & 0xF) << 20 | (n >> 4) << 8; + break; + + case 4: + ggpatch[which].data |= (n & 1) << 12; + ggpatch[which].address |= (n >> 1) << 16; + break; + + case 5: + ggpatch[which].data |= (n & 1) << 15 | (n >> 1) << 8; + break; + + case 6: + ggpatch[which].data |= (n >> 3) << 13; + ggpatch[which].address |= (n & 7) << 5; + break; + + case 7: + ggpatch[which].address |= n; + break; + } + } +} + +void decode_ggcodes () +{ + int i, j; + char thiscode[10]; + + /*** Clear out any old patches ***/ + memset (&ggpatch[0], 0, 8 * sizeof (GGPATCH)); + memset (&thiscode, 0, 10); + + j = 0; + for (i = 0; i < 8; i++) + { + if (strcmp (ggcodes[i], "AAAA-AAAA")) + { + /*** Move the code into thiscode ***/ + memcpy (&thiscode, &ggcodes[i], 4); + memcpy (&thiscode[4], &ggcodes[i][5], 4); + + decode_genie (thiscode, j); + j++; + } + } + + /*** And now apply the patches ***/ + if (j) + { + for (i = 0; i < j; i++) + { + if (ggpatch[i].address < rominfo.romend) + { + /*** Patching ROM space ***/ + cart_rom[ggpatch[i].address] = ggpatch[i].data & 0x0ff; + cart_rom[ggpatch[i].address + 1] = (ggpatch[i].data & 0xff00) >> 8; + } + else + { + /*** Patching 68K memory ***/ + m68k_write_memory_16 (ggpatch[i].address, ggpatch[i].data); + } + } + /* TODO : Fix Checksum */ + } +} + +/**************************************************************************** + * ClearGGCodes + * + * Should be called whenever a new rom is loaded + ****************************************************************************/ +void ClearGGCodes () +{ + int i; + + for (i = 0; i < MAXCODES; i++) + { + strcpy (ggcodes[i], "AAAA-AAAA"); + gghpos[i] = 0; + } + ggrow = 0; +} + +/**************************************************************************** + * DrawGGCodes + * + * Just draw the codes, with the current one highlighted. + ****************************************************************************/ +void DrawGGCodes () +{ + int i,j; + unsigned char c[2] = { 0, 0 }; + + ClearScreen (); + WriteCentre (134, menutitle); + + for (i = 0; i < MAXCODES; i++) + { + if (i == ggrow) + { + /*** Highlight selected ***/ + WriteCentre_HL (i * fheight + 224, ggcodes[i]); + + /*** If editing, highlight the current character ***/ + if (editing) + { + int hpos = 0; + + for (j=0; j> 1); + for (j=0; j 70)) + { + /*** Increment the entry ***/ + redraw = 1; + c[0] = ggcodes[ggrow][gghpos[ggrow]]; + v = strstr (ggvalidchars, c); + v++; + if (*v == '*') ggcodes[ggrow][gghpos[ggrow]] = 'A'; + else ggcodes[ggrow][gghpos[ggrow]] = *v; + } + + if ((p & PAD_BUTTON_DOWN) || (y < -70)) + { + /*** Decrement entry ***/ + redraw = 1; + c[0] = ggcodes[ggrow][gghpos[ggrow]]; + v = strstr (ggvalidchars, c); + if (*v == 'A') ggcodes[ggrow][gghpos[ggrow]] = '9'; + else + { + v--; + ggcodes[ggrow][gghpos[ggrow]] = *v; + } + } + + if ((p & PAD_BUTTON_LEFT) || (x < -70)) + { + redraw = 1; + gghpos[ggrow]--; + if (gghpos[ggrow] == 4) gghpos[ggrow]--; + } + + if ((p & PAD_BUTTON_RIGHT) || (x > 70)) + { + redraw = 1; + gghpos[ggrow]++; + if (gghpos[ggrow] == 4) gghpos[ggrow]++; + } + + if (gghpos[ggrow] < 0) gghpos[ggrow] = 8; + if (gghpos[ggrow] > 8) gghpos[ggrow] = 0; + } + + /** Lose any previous A press **/ + while (PAD_ButtonsDown (0) & PAD_BUTTON_A); + + editing = 0; +} + +/**************************************************************************** + * GGSelectLine + * + * Select which line to edit + ****************************************************************************/ +void GGSelectLine () +{ + int redraw = 1; + int quit = 0; + short j; + signed char y; + + /*** To select a line, just move up or down. + Pressing A will enter edit mode. + Pressing B will exit to caller. ***/ + + while (!(PAD_ButtonsDown (0) & PAD_BUTTON_B) && (quit == 0)) + { + if (redraw) + { + DrawGGCodes (); + redraw = 0; + } + + j = PAD_ButtonsDown (0); + y = PAD_StickY (0); + + if ((j & PAD_BUTTON_UP) || (y > 70)) + { + ggrow--; + redraw = 1; + } + + if ((j & PAD_BUTTON_DOWN) || (y < -70)) + { + ggrow++; + redraw = 1; + } + + if (ggrow < 0) ggrow = MAXCODES - 1; + if (ggrow == MAXCODES) ggrow = 0; + + if (j & PAD_BUTTON_B) quit = 1; + + if (j & PAD_BUTTON_A) + { + GGEditLine (); + redraw = 1; + } + } +} + +/**************************************************************************** + * GetGGEntries + * + * Screen to return encoded Game Genie codes. + * No keyboard is available, so it's just a simple wrap round each line kind + * of thing. + ****************************************************************************/ +void GetGGEntries () +{ + editing = 0; + strcpy (menutitle, "Game Genie Entry"); + GGSelectLine (); +} diff --git a/ genplus-gx/source/ngc/gui/gpback.h b/ genplus-gx/source/ngc/gui/gpback.h new file mode 100644 index 0000000..ff42e31 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/gpback.h @@ -0,0 +1,8991 @@ +/******************************************************************* + * Image File : genplus.bmp + * Width : 640 + * Height : 480 + * + * This header contains a compressed Zip image. + * Use zlib1.2.3 uncompress function to restore. + * + * Backdrop design by brakken[at]tehskeen.com + *******************************************************************/ + +#define gpback_RAW 614400 +#define gpback_COMPRESSED 71779 +#define gpback_WIDTH 640 +#define gpback_HEIGHT 480 + +unsigned char gpback[71779] = { + 0x78, 0xda, 0xe4, 0xbd, 0x07, 0x98, 0x1b, 0xd5, 0xbd, 0x3e, 0xec, 0x6d, + 0xd2, 0x6a, 0xab, 0xa4, + 0x5d, 0x77, 0x1b, 0xdb, 0xb8, 0x62, 0x3a, 0x06, 0x4c, 0xef, 0x10, 0x20, + 0xa1, 0x04, 0x48, 0x4c, + 0x35, 0x60, 0x8c, 0x6d, 0xc0, 0x75, 0x8b, 0xa4, 0xd1, 0xcc, 0x29, 0x53, + 0x34, 0x55, 0x7d, 0x7b, + 0x5f, 0xdb, 0x60, 0x1b, 0x30, 0xcd, 0x74, 0x02, 0x09, 0x1d, 0x17, 0x6c, + 0x53, 0x43, 0x0d, 0x10, + 0x48, 0x21, 0xe5, 0xa6, 0x53, 0x6e, 0x72, 0xef, 0xe5, 0x3b, 0x67, 0xb4, + 0x45, 0xbb, 0xab, 0x32, + 0xbb, 0x96, 0xcd, 0xff, 0x79, 0x3e, 0xf6, 0x39, 0x8c, 0x56, 0xd6, 0x6a, + 0xe6, 0x9c, 0x99, 0xf3, + 0x9e, 0xf7, 0xf7, 0xfe, 0xca, 0x19, 0x87, 0xc7, 0xa5, 0xfd, 0xc9, 0x53, + 0x6c, 0xc0, 0x6e, 0x14, + 0xb0, 0x49, 0xef, 0xa1, 0x3c, 0x31, 0x1f, 0xe6, 0x2b, 0x05, 0xa0, 0xc8, + 0xb0, 0xb1, 0xf6, 0x88, + 0xdd, 0x6f, 0x8f, 0x92, 0x46, 0x8f, 0x61, 0x9b, 0xdf, 0xa6, 0x17, 0xb2, + 0x05, 0x72, 0x3e, 0xc8, + 0x13, 0xf3, 0x60, 0x1e, 0x3f, 0x0e, 0x0d, 0xf9, 0x36, 0x21, 0x1f, 0xd9, + 0xc3, 0x76, 0xff, 0x88, + 0xf7, 0x87, 0x9f, 0x53, 0x25, 0xe7, 0xd4, 0xf3, 0xb9, 0x4c, 0x9f, 0xa1, + 0xd7, 0x51, 0x18, 0xb2, + 0xb3, 0x85, 0xd2, 0x38, 0x98, 0xf1, 0x53, 0x62, 0x01, 0xa4, 0xd7, 0x95, + 0x87, 0x53, 0x9f, 0x33, + 0x4f, 0xc8, 0x83, 0xf9, 0x72, 0x01, 0x28, 0x34, 0xec, 0x23, 0xfb, 0x62, + 0x14, 0xb1, 0x05, 0x4a, + 0x3e, 0xc8, 0x1f, 0xec, 0x0b, 0x2a, 0x0a, 0xd9, 0xfd, 0x05, 0xd9, 0xce, + 0x29, 0x91, 0x73, 0x86, + 0x6c, 0xfe, 0x71, 0x38, 0x73, 0x3f, 0xf3, 0x35, 0x3b, 0x67, 0xd7, 0xf2, + 0x32, 0xf7, 0x93, 0xcf, + 0x43, 0x36, 0x32, 0x66, 0x05, 0x62, 0xb6, 0x73, 0x16, 0x92, 0x73, 0x16, + 0xb1, 0xf9, 0x01, 0xd2, + 0x17, 0xbd, 0x88, 0xa3, 0x7f, 0x33, 0xd8, 0x17, 0xbb, 0xdf, 0x16, 0x2c, + 0x62, 0x0b, 0xd5, 0x02, + 0xce, 0x3c, 0xa7, 0x6a, 0x9e, 0x13, 0x65, 0x3b, 0x67, 0xbe, 0x98, 0xf9, + 0xfa, 0xc7, 0x05, 0x0a, + 0x81, 0x3d, 0x58, 0xc8, 0x66, 0xb9, 0x4f, 0x38, 0x5f, 0xb7, 0x73, 0x36, + 0x25, 0x0f, 0x64, 0xed, + 0x27, 0xb9, 0xd6, 0x7c, 0xa1, 0xef, 0x9c, 0xe4, 0xf7, 0x7c, 0x29, 0x1f, + 0x16, 0x68, 0x85, 0x9c, + 0x2d, 0xd4, 0xd7, 0x97, 0x68, 0xa2, 0x2f, 0xf4, 0xde, 0x98, 0x7d, 0x91, + 0xe8, 0x7d, 0xc9, 0x43, + 0xa9, 0xfa, 0x52, 0x40, 0xee, 0xa7, 0x4d, 0x1e, 0x97, 0xf9, 0x9c, 0xf4, + 0x79, 0x24, 0xe7, 0xcc, + 0x13, 0xb2, 0x3c, 0x8f, 0x23, 0xe7, 0x40, 0xea, 0xe7, 0x31, 0x68, 0x67, + 0x8b, 0x02, 0xa9, 0xee, + 0x53, 0x1e, 0xca, 0xa3, 0x7d, 0x51, 0x49, 0x5f, 0x82, 0x43, 0xe7, 0x8c, + 0x2d, 0x64, 0x63, 0x8b, + 0xf4, 0x42, 0x2e, 0x3f, 0x90, 0x0f, 0xc9, 0xb3, 0x38, 0xd0, 0x97, 0xc4, + 0x39, 0x73, 0x35, 0x07, + 0xe8, 0xbc, 0x4b, 0x3f, 0x07, 0x92, 0xe6, 0x1d, 0x97, 0x75, 0xde, 0x91, + 0xf1, 0xa6, 0x73, 0xa0, + 0x88, 0xdc, 0x97, 0xa2, 0x61, 0x7d, 0xa1, 0xcf, 0x7c, 0x11, 0x9d, 0xff, + 0x01, 0x32, 0xff, 0xc9, + 0x73, 0x68, 0x7d, 0x0e, 0xe4, 0xe7, 0x74, 0x0e, 0x64, 0x7d, 0x1e, 0x93, + 0xe6, 0x40, 0x9e, 0x90, + 0x0f, 0x0f, 0x60, 0x4c, 0x4c, 0x2c, 0x34, 0xef, 0x6b, 0xb8, 0x6f, 0x0c, + 0x92, 0xc7, 0x82, 0x8c, + 0x91, 0x39, 0x16, 0xfd, 0xf7, 0x55, 0x1c, 0x0d, 0x2e, 0x7c, 0x0f, 0x63, + 0x42, 0xfa, 0x99, 0x12, + 0xd7, 0x43, 0x7d, 0xb8, 0x4e, 0xfa, 0x42, 0xe7, 0x62, 0xd6, 0x73, 0x52, + 0x5c, 0x08, 0x59, 0xc4, + 0x05, 0x75, 0x94, 0xb8, 0x90, 0xee, 0x3e, 0xc9, 0x45, 0xc9, 0x58, 0x84, + 0x06, 0x70, 0x5d, 0x1f, + 0xbe, 0x46, 0x25, 0xb0, 0x70, 0x18, 0xae, 0xa7, 0xc4, 0x85, 0xfc, 0xdc, + 0xe2, 0x82, 0x35, 0x2c, + 0x4a, 0x79, 0x3d, 0x04, 0x0b, 0xfb, 0x71, 0x3d, 0x94, 0x02, 0xd7, 0x15, + 0x82, 0x85, 0x49, 0x6b, + 0xd4, 0x00, 0x2e, 0x04, 0xac, 0xe0, 0x42, 0xae, 0xd6, 0x63, 0x13, 0x17, + 0xb2, 0x63, 0x91, 0x94, + 0x58, 0x8f, 0x87, 0xe0, 0xfa, 0x40, 0x5f, 0x6c, 0x6c, 0x3f, 0xae, 0xe7, + 0xab, 0x07, 0x65, 0x0e, + 0xa0, 0x6c, 0xcf, 0xa3, 0xd5, 0xf5, 0x38, 0xf1, 0x6c, 0x24, 0xe3, 0xfa, + 0xd0, 0x35, 0xca, 0xc4, + 0xf9, 0x50, 0x91, 0x9f, 0xae, 0x61, 0xc9, 0xb8, 0x9e, 0xf2, 0x9c, 0xea, + 0x68, 0xce, 0x99, 0xe1, + 0x67, 0xe8, 0x1c, 0x48, 0xfb, 0x63, 0x69, 0x6d, 0x1c, 0x0d, 0x47, 0xc1, + 0x7d, 0xf7, 0x81, 0xf0, + 0xbe, 0x54, 0xeb, 0x35, 0x1d, 0x8b, 0x22, 0x8d, 0xdc, 0x57, 0x65, 0x80, + 0x2f, 0xa0, 0x9c, 0xe0, + 0xc2, 0xc1, 0x1b, 0x93, 0x01, 0x5c, 0x37, 0xd7, 0xb8, 0x21, 0xdc, 0x83, + 0xae, 0x7d, 0x05, 0x43, + 0x71, 0x7d, 0x8c, 0xb8, 0x50, 0x70, 0xa0, 0xb8, 0x60, 0xed, 0x9c, 0xe9, + 0xf9, 0x7a, 0x28, 0x89, + 0xaf, 0x13, 0xbc, 0x1c, 0xe8, 0x4b, 0x3f, 0x5f, 0xc8, 0x11, 0x4f, 0x2f, + 0x1a, 0x05, 0x4f, 0xcf, + 0xf2, 0x6c, 0x20, 0xf3, 0x79, 0x24, 0xf7, 0x73, 0x04, 0xae, 0x87, 0xfa, + 0xf8, 0xba, 0x9c, 0xc0, + 0x75, 0xeb, 0x3c, 0xbd, 0xe8, 0xd0, 0xf2, 0xf4, 0xe4, 0xb5, 0xb1, 0x1f, + 0xd7, 0xb5, 0x91, 0x7c, + 0x9d, 0x5e, 0xbf, 0x4d, 0x1f, 0x81, 0xeb, 0xdf, 0x3f, 0x2e, 0x90, 0x6b, + 0x4e, 0xb9, 0x36, 0x52, + 0xbe, 0x1e, 0xa0, 0x7c, 0xbd, 0x68, 0x90, 0x0b, 0xa5, 0xc0, 0xf5, 0xe1, + 0x7d, 0xa1, 0xe7, 0xb4, + 0x34, 0x07, 0xc2, 0x07, 0x34, 0x07, 0x46, 0xac, 0xc7, 0x59, 0xd7, 0xc6, + 0xd1, 0x8c, 0x09, 0x3f, + 0xcc, 0x8e, 0xe0, 0x93, 0xd6, 0xeb, 0xf0, 0x50, 0x9b, 0xd2, 0xb4, 0x5d, + 0x94, 0x8c, 0xf7, 0x15, + 0x7d, 0x5f, 0x63, 0x92, 0xd2, 0x76, 0x49, 0xb6, 0xc3, 0x86, 0x61, 0xa1, + 0x79, 0x5f, 0x29, 0xae, + 0xd3, 0x35, 0x2e, 0xc9, 0x0e, 0xcb, 0x39, 0x2e, 0x58, 0xe1, 0xcc, 0xaa, + 0xdd, 0x92, 0xed, 0x62, + 0x0b, 0xf7, 0xdb, 0x2e, 0x49, 0x6b, 0x54, 0x92, 0x1d, 0xd6, 0x67, 0xbb, + 0xf4, 0x9f, 0x13, 0x1f, + 0x5a, 0x5c, 0x28, 0xb2, 0xc4, 0x99, 0xed, 0xca, 0x38, 0x6e, 0x08, 0xae, + 0xa7, 0xb0, 0xc3, 0xe8, + 0x39, 0x0b, 0x87, 0xe3, 0xfa, 0x88, 0x73, 0x5a, 0xc4, 0x05, 0x9d, 0xcc, + 0x01, 0x65, 0x8c, 0xb8, + 0x30, 0x82, 0xa7, 0x93, 0x67, 0x23, 0x38, 0xe2, 0x79, 0x44, 0x54, 0x2f, + 0x4a, 0xe8, 0x30, 0x19, + 0x70, 0x5d, 0x18, 0xc6, 0xd7, 0x0f, 0xd5, 0x1c, 0x18, 0xed, 0xbc, 0x23, + 0x63, 0x51, 0xa0, 0x11, + 0xbb, 0x31, 0x9c, 0xb8, 0x0f, 0x43, 0x38, 0xae, 0x61, 0xf2, 0xf5, 0x84, + 0xed, 0x21, 0xe4, 0xe5, + 0x72, 0x6d, 0x24, 0xf3, 0xce, 0xc2, 0x1c, 0x48, 0xf0, 0xf4, 0xec, 0x6b, + 0x63, 0x8e, 0xc6, 0x24, + 0xd9, 0x0e, 0x1b, 0x8e, 0x85, 0x89, 0xb1, 0x18, 0x61, 0x87, 0x7d, 0x2f, + 0x63, 0x62, 0xb3, 0x32, + 0x26, 0x81, 0x42, 0x13, 0x17, 0x32, 0xea, 0x6b, 0xf4, 0x39, 0xfe, 0xbe, + 0x70, 0x61, 0x34, 0x76, + 0x44, 0x06, 0x7d, 0xad, 0xcf, 0x76, 0x61, 0x87, 0xe3, 0x7a, 0x6a, 0x5c, + 0xc8, 0xce, 0xd3, 0x0f, + 0x00, 0x17, 0x70, 0xaa, 0xb5, 0x71, 0xe4, 0x7a, 0x3c, 0xcc, 0x0e, 0x8b, + 0x24, 0xf5, 0x25, 0x8d, + 0xbe, 0xf6, 0xbd, 0xe0, 0x82, 0xb5, 0xb5, 0xd1, 0xc4, 0x75, 0x93, 0xff, + 0x65, 0xd2, 0xd7, 0x28, + 0xae, 0x7f, 0x1f, 0x73, 0xc0, 0xa2, 0xb6, 0x9d, 0xd7, 0x67, 0xbf, 0x53, + 0x7d, 0x2d, 0x2d, 0xae, + 0x93, 0xbe, 0x98, 0x58, 0x14, 0x48, 0xa3, 0xc3, 0x0c, 0xda, 0xef, 0x07, + 0x67, 0x0e, 0x64, 0xc5, + 0xbf, 0xbc, 0x5c, 0xea, 0xfd, 0x83, 0xb6, 0x4b, 0x26, 0x3b, 0x8c, 0xe0, + 0x87, 0x45, 0x4d, 0x23, + 0xf7, 0x63, 0x32, 0x0a, 0xbd, 0x3f, 0xbd, 0xbe, 0x66, 0xa3, 0xb6, 0x0b, + 0x3b, 0xcc, 0x76, 0x39, + 0x40, 0x5d, 0xaf, 0x20, 0x47, 0xb6, 0x4b, 0x9a, 0x39, 0x2a, 0x0c, 0xe3, + 0xeb, 0x91, 0xd4, 0xb8, + 0x3e, 0x8c, 0xaf, 0x5b, 0xc7, 0x85, 0x88, 0x45, 0x5c, 0xc8, 0x85, 0xde, + 0x4f, 0x71, 0x5d, 0x26, + 0xf7, 0x89, 0x5e, 0x7b, 0x78, 0x24, 0xae, 0x27, 0xf8, 0x7a, 0xc2, 0x6f, + 0x62, 0x49, 0xef, 0xef, + 0xd3, 0xf5, 0x0a, 0x72, 0xc5, 0xd3, 0xad, 0x68, 0xdb, 0xe4, 0x3b, 0x12, + 0x58, 0x44, 0xae, 0x33, + 0x95, 0xbe, 0xd6, 0xcf, 0xd7, 0xc9, 0xda, 0x45, 0xe7, 0x40, 0x26, 0x7d, + 0x6d, 0xb4, 0x3c, 0xfd, + 0x20, 0xfa, 0xbc, 0x12, 0x9a, 0x92, 0x52, 0x08, 0x8a, 0xb2, 0xe1, 0xfa, + 0xb0, 0xbe, 0xe4, 0x74, + 0x0e, 0xf4, 0xd9, 0xaa, 0xf9, 0xbc, 0x05, 0xfc, 0x1b, 0xcd, 0x98, 0x58, + 0xd5, 0xfb, 0x13, 0x76, + 0xc4, 0x50, 0x7d, 0x2d, 0x79, 0x2c, 0x82, 0x43, 0x6c, 0x97, 0xb4, 0xf7, + 0x35, 0x2f, 0xa7, 0x9a, + 0x86, 0xb5, 0x31, 0x49, 0xc3, 0x17, 0xac, 0xeb, 0x6b, 0x63, 0xb6, 0x5d, + 0x2c, 0xe2, 0x82, 0x25, + 0x8e, 0x92, 0xd1, 0x0f, 0x68, 0xfa, 0x4d, 0x0a, 0x74, 0x82, 0x0b, 0xe4, + 0xda, 0x53, 0xda, 0x61, + 0x03, 0x7c, 0x3d, 0xc7, 0xb8, 0x30, 0x0a, 0xfb, 0x3d, 0xfb, 0xda, 0x58, + 0x90, 0xd0, 0xfb, 0x85, + 0x74, 0x3a, 0x4c, 0xc2, 0x0e, 0x33, 0x9f, 0x0d, 0xca, 0x51, 0xd2, 0xe9, + 0x6b, 0x07, 0x69, 0x0e, + 0x8c, 0x89, 0xa3, 0x24, 0xeb, 0x6b, 0xc9, 0x7e, 0x93, 0xc8, 0x70, 0x7d, + 0x6d, 0xe4, 0x9c, 0x19, + 0x15, 0x2e, 0x58, 0xe1, 0xe9, 0x07, 0xec, 0xf3, 0x1a, 0xe4, 0xeb, 0x03, + 0xcf, 0x58, 0x32, 0x5f, + 0xa7, 0x6b, 0x54, 0x12, 0x5f, 0x37, 0xe7, 0x80, 0x9e, 0xcb, 0x39, 0x90, + 0x7d, 0xde, 0x8d, 0x06, + 0x2b, 0x2d, 0xeb, 0xfd, 0xa9, 0x74, 0x3d, 0xbe, 0x6f, 0x2c, 0x32, 0xf9, + 0x4d, 0x52, 0xd8, 0x61, + 0x96, 0x6d, 0x97, 0x43, 0xeb, 0x07, 0x34, 0xfb, 0x42, 0xfb, 0x41, 0xef, + 0x63, 0xf2, 0x7a, 0xdd, + 0xb7, 0xc6, 0x0d, 0xfa, 0x4d, 0x24, 0x6b, 0x1a, 0x5b, 0x9e, 0x36, 0x0a, + 0x5c, 0xc8, 0x91, 0xde, + 0x3f, 0x60, 0xbb, 0x64, 0xc6, 0x75, 0xae, 0x9f, 0xa3, 0x64, 0xfc, 0xbe, + 0x83, 0x8d, 0x0b, 0xd6, + 0xf4, 0xfe, 0x41, 0x7f, 0x78, 0xaa, 0x98, 0xad, 0x74, 0xfa, 0xda, 0x68, + 0xec, 0x77, 0xc5, 0xa2, + 0xfd, 0x1e, 0xcc, 0x81, 0xb6, 0xdd, 0x8f, 0xeb, 0x46, 0x0a, 0xdf, 0xbe, + 0x31, 0xd2, 0x1f, 0x6e, + 0x49, 0xef, 0xcf, 0x71, 0x6c, 0xda, 0x68, 0x34, 0xac, 0x21, 0x7e, 0x93, + 0x54, 0xfe, 0xf0, 0x41, + 0x9e, 0x8e, 0xb2, 0xfa, 0x60, 0x73, 0x64, 0xbf, 0x27, 0x3e, 0x6b, 0x07, + 0xee, 0x26, 0x57, 0x4d, + 0x36, 0xfc, 0x2b, 0x08, 0x3a, 0x7d, 0x55, 0x51, 0x9b, 0x27, 0x9b, 0x1d, + 0x51, 0xde, 0x58, 0x55, + 0x57, 0x2a, 0x8f, 0x4b, 0x3b, 0x76, 0x79, 0x42, 0x01, 0x2c, 0xd2, 0x4b, + 0x99, 0xaa, 0x66, 0x57, + 0x8d, 0xb3, 0xa9, 0xaa, 0xb6, 0xaa, 0xb5, 0xaa, 0xa6, 0xaa, 0xa5, 0xaa, + 0x86, 0x5e, 0x83, 0x33, + 0x5e, 0x5e, 0x5f, 0x1a, 0x2c, 0xf6, 0xd9, 0xe4, 0x42, 0x96, 0x3e, 0xa7, + 0x85, 0x21, 0x97, 0xb7, + 0x2a, 0x5c, 0xe8, 0xcd, 0x86, 0xdf, 0x15, 0xe4, 0x7b, 0x1c, 0x81, 0x71, + 0x99, 0xef, 0x97, 0x5c, + 0xc2, 0x56, 0x35, 0x56, 0xd4, 0x66, 0x1b, 0x93, 0xa2, 0x30, 0x39, 0x67, + 0x28, 0xcb, 0x39, 0x49, + 0x3f, 0x2b, 0xc9, 0x39, 0x8b, 0xe5, 0x7c, 0xae, 0x50, 0xb6, 0xb3, 0x8e, + 0x50, 0x99, 0xb7, 0xb2, + 0xd1, 0x9d, 0xe8, 0x0b, 0x69, 0x6e, 0xda, 0xb7, 0x86, 0x8a, 0xba, 0xb2, + 0x70, 0xa9, 0xb7, 0xaa, + 0xa1, 0xac, 0x8e, 0x3c, 0xa7, 0x20, 0xd3, 0x79, 0x6d, 0x11, 0xb7, 0xc7, + 0x15, 0xcc, 0xf7, 0x65, + 0x7e, 0x76, 0x0b, 0xa0, 0xb3, 0xb9, 0xaa, 0xd6, 0x2e, 0x65, 0x9e, 0x57, + 0x79, 0x6a, 0xb9, 0xbf, + 0xaa, 0xa1, 0xb4, 0x3e, 0xdb, 0x7d, 0x2f, 0x8e, 0xba, 0x3d, 0x95, 0x7a, + 0x1e, 0x93, 0x8c, 0x01, + 0x05, 0xb2, 0x8d, 0x73, 0x04, 0x4b, 0x7d, 0xe5, 0x0d, 0xae, 0xba, 0xfe, + 0xbe, 0xd0, 0x7b, 0xe3, + 0x6a, 0xa8, 0xac, 0x2d, 0x0f, 0x97, 0x78, 0x8b, 0x55, 0x82, 0x21, 0x22, + 0xc1, 0xf6, 0xe1, 0xb6, + 0x8b, 0x56, 0xc1, 0x54, 0xc5, 0x1d, 0xd9, 0xce, 0x89, 0x4a, 0x62, 0x55, + 0xf5, 0x15, 0xda, 0xb8, + 0xcc, 0xeb, 0x81, 0x58, 0x04, 0x5d, 0xcd, 0x55, 0x35, 0x85, 0x42, 0xe6, + 0x67, 0x3c, 0xdf, 0xa8, + 0x64, 0xaa, 0x62, 0xc5, 0x9e, 0x74, 0xf7, 0xa7, 0x20, 0x50, 0xc4, 0x15, + 0x1b, 0x25, 0x0c, 0x7d, + 0x36, 0xdc, 0x2d, 0x7d, 0x7d, 0x69, 0x76, 0xd7, 0xb8, 0x1a, 0x9d, 0xb5, + 0xe5, 0x91, 0x52, 0x8f, + 0x43, 0xb5, 0xf9, 0x0b, 0x25, 0xb3, 0x2f, 0x70, 0x9c, 0x64, 0x1b, 0xc5, + 0x1c, 0xb0, 0x5b, 0x9b, + 0x03, 0x4a, 0x96, 0xe7, 0x31, 0x50, 0x4c, 0xce, 0xe9, 0xac, 0xcd, 0xcb, + 0x7a, 0x4e, 0x97, 0x8f, + 0xf6, 0xd3, 0xa6, 0x3b, 0xfc, 0x65, 0xd1, 0xca, 0xfa, 0x81, 0xbe, 0xb4, + 0x90, 0xbe, 0x90, 0xbf, + 0xaf, 0x88, 0x96, 0xd5, 0x3b, 0x34, 0x1b, 0x53, 0xd6, 0x50, 0x55, 0x57, + 0x22, 0x8f, 0x63, 0x73, + 0x36, 0x07, 0x2c, 0xcc, 0x3b, 0x73, 0x0e, 0x64, 0xc1, 0xf9, 0x3c, 0xa5, + 0x94, 0x9c, 0xb3, 0xbc, + 0x6e, 0xe0, 0x77, 0xb1, 0x00, 0xd8, 0xb4, 0x62, 0x7f, 0x69, 0xa4, 0xdc, + 0x4b, 0xef, 0xf3, 0x60, + 0x5f, 0xdc, 0x35, 0xee, 0x86, 0xf2, 0xba, 0x12, 0xa3, 0x98, 0x29, 0x0a, + 0x10, 0x3c, 0x4c, 0xe5, + 0xd3, 0xb2, 0x3c, 0x07, 0xca, 0xfc, 0x65, 0xe1, 0x42, 0xc6, 0x8a, 0xef, + 0x77, 0x5c, 0xc0, 0x71, + 0xc8, 0xc7, 0x84, 0xdc, 0x07, 0x8e, 0xe2, 0x42, 0x9e, 0x58, 0x48, 0xc6, + 0xc2, 0xe1, 0x2f, 0x8d, + 0x56, 0x78, 0x92, 0xc7, 0x82, 0x3e, 0x8b, 0x95, 0xb1, 0xf2, 0x7a, 0x47, + 0xd4, 0x55, 0xef, 0x0c, + 0x15, 0xf9, 0xf2, 0xf9, 0x0c, 0xfc, 0xa3, 0x6f, 0x4c, 0x6c, 0xd6, 0x70, + 0xa1, 0x2e, 0x2b, 0x2e, + 0x10, 0x2c, 0x72, 0x1a, 0x79, 0x99, 0xc7, 0x4e, 0x28, 0x34, 0xe7, 0x68, + 0x51, 0x92, 0x8d, 0x66, + 0xe2, 0xba, 0x5a, 0xcc, 0x96, 0x84, 0xcb, 0xbd, 0xc9, 0xb8, 0x4e, 0x71, + 0xbe, 0x32, 0x81, 0xeb, + 0x8c, 0x2d, 0x90, 0xc0, 0xf5, 0x61, 0x7d, 0x41, 0x8e, 0x5c, 0xe2, 0x82, + 0x9e, 0x09, 0x17, 0x06, + 0xcf, 0x59, 0xda, 0x50, 0x55, 0x5f, 0xae, 0xa6, 0x99, 0x2f, 0x7c, 0x3e, + 0x2c, 0x54, 0x28, 0xae, + 0x97, 0x7b, 0xdd, 0xe4, 0x7e, 0x8c, 0xc0, 0xf5, 0x90, 0x23, 0xb1, 0x46, + 0xf5, 0xe1, 0x7a, 0xfe, + 0x68, 0xd6, 0x46, 0x25, 0xcb, 0x1c, 0x95, 0xac, 0xe1, 0x82, 0xb9, 0x36, + 0x46, 0x8a, 0xb2, 0xf6, + 0xd3, 0x3c, 0xa7, 0x6e, 0x63, 0x28, 0xae, 0x57, 0x24, 0xe1, 0xba, 0xdb, + 0xc4, 0xc2, 0x04, 0xae, + 0xdb, 0xc9, 0x7c, 0xa4, 0x73, 0x80, 0xe0, 0x1f, 0xcc, 0xe1, 0x1c, 0xc8, + 0x8c, 0x7f, 0xc3, 0x70, + 0x21, 0xd3, 0xda, 0xe8, 0x1e, 0x58, 0x1b, 0x07, 0x71, 0xbd, 0x3c, 0xee, + 0xac, 0xaf, 0x4a, 0xc6, + 0x75, 0xf2, 0x6c, 0x54, 0x10, 0x5c, 0x2f, 0xd6, 0x92, 0x70, 0x3d, 0x05, + 0x2e, 0x58, 0x99, 0x03, + 0xf6, 0xd1, 0xcd, 0x81, 0xcc, 0xf3, 0x4e, 0x23, 0xf3, 0x2e, 0x5e, 0x52, + 0x9f, 0xd2, 0x57, 0x40, + 0xf5, 0x7d, 0xcd, 0xc1, 0x50, 0x5c, 0xa7, 0x73, 0x38, 0x15, 0xae, 0x17, + 0x12, 0x2c, 0xcc, 0xeb, + 0xbf, 0x2f, 0xa3, 0x98, 0x03, 0x65, 0xa1, 0x02, 0x4b, 0xf8, 0x67, 0x75, + 0x4c, 0x28, 0x5f, 0x70, + 0x06, 0xf3, 0x0f, 0xd6, 0x98, 0x10, 0xae, 0x5f, 0x44, 0xf8, 0x6f, 0x09, + 0x53, 0x16, 0x4b, 0x5e, + 0xe3, 0x28, 0x2f, 0x34, 0xc7, 0xc2, 0xe3, 0x48, 0xdc, 0xd7, 0xc1, 0xb1, + 0x18, 0x13, 0x2e, 0x64, + 0xe7, 0x28, 0xa5, 0x71, 0x13, 0x17, 0xb2, 0x60, 0x11, 0xe1, 0x0b, 0xe4, + 0x99, 0x2b, 0x48, 0x7d, + 0x4e, 0x94, 0xdf, 0x8f, 0xeb, 0x31, 0xd7, 0xe0, 0x33, 0x9a, 0x84, 0xeb, + 0x25, 0xba, 0x3d, 0xb1, + 0xc6, 0xf5, 0xe1, 0x3a, 0x5d, 0xbb, 0xb3, 0xf2, 0x05, 0x8a, 0x0b, 0xcd, + 0xce, 0xda, 0x6c, 0x1c, + 0xa5, 0x90, 0x62, 0x51, 0x24, 0x0b, 0x16, 0xf1, 0x09, 0x2c, 0x2a, 0x91, + 0xb3, 0x71, 0x14, 0x07, + 0x57, 0xd5, 0x54, 0x59, 0x6b, 0x53, 0x13, 0xeb, 0xf5, 0xe0, 0x33, 0x9a, + 0xe0, 0xeb, 0x03, 0xb8, + 0x4e, 0x70, 0xc1, 0x1d, 0x2e, 0xf2, 0x66, 0xce, 0x37, 0x49, 0xe0, 0x82, + 0xc3, 0x3a, 0x2e, 0x64, + 0xec, 0xa7, 0x2d, 0x4c, 0x70, 0x21, 0x54, 0xe0, 0xcd, 0xc6, 0x99, 0xe9, + 0x39, 0x07, 0xf8, 0x82, + 0x90, 0x0f, 0x8b, 0x08, 0xae, 0x97, 0x24, 0xf3, 0xf5, 0xbe, 0xbe, 0xd0, + 0x7e, 0x96, 0x06, 0x87, + 0xe2, 0x7a, 0x2a, 0x5c, 0xb0, 0xca, 0xd3, 0x6d, 0x63, 0xc7, 0x05, 0x3c, + 0x7c, 0x6d, 0x1c, 0xc2, + 0xd3, 0x93, 0xee, 0x61, 0xa1, 0x6c, 0x63, 0x13, 0xb8, 0xee, 0x1c, 0x8a, + 0xeb, 0x7d, 0x7c, 0xdd, + 0xae, 0x0c, 0xe5, 0xeb, 0x79, 0x16, 0xe7, 0x40, 0xc9, 0x81, 0xcf, 0x81, + 0x24, 0x5d, 0xb2, 0x92, + 0xac, 0x8d, 0x59, 0xd6, 0x63, 0xf2, 0x6c, 0xd0, 0x39, 0x50, 0x1e, 0x29, + 0xf1, 0x8e, 0xc0, 0x75, + 0xba, 0x46, 0x45, 0x4a, 0x89, 0xed, 0x41, 0xe6, 0x3f, 0xb1, 0xb5, 0x2c, + 0x71, 0xe6, 0x90, 0xd3, + 0x57, 0x16, 0xcc, 0x1f, 0x72, 0xfd, 0xe9, 0xe2, 0x1c, 0xf2, 0xf5, 0x8a, + 0x43, 0x85, 0x0b, 0x83, + 0xe7, 0xcc, 0x68, 0x47, 0xd0, 0x35, 0xce, 0xc6, 0x15, 0x07, 0x4b, 0x99, + 0xca, 0x11, 0xb6, 0x4b, + 0xff, 0x58, 0x90, 0xfb, 0x3a, 0x60, 0xbb, 0xd8, 0xad, 0xd9, 0x11, 0x21, + 0x57, 0x76, 0x8e, 0x32, + 0x1a, 0x5c, 0x20, 0xd7, 0x92, 0x2d, 0xd7, 0xc8, 0xe4, 0x28, 0x84, 0x8b, + 0x51, 0x5c, 0x2f, 0x4f, + 0xc6, 0xf5, 0x3e, 0x3b, 0x8c, 0xae, 0xd7, 0x0e, 0xad, 0xc8, 0x4f, 0xcf, + 0x99, 0xdd, 0x7e, 0xcf, + 0x25, 0x2e, 0xe4, 0x0f, 0xc5, 0x85, 0xf4, 0x6b, 0x23, 0x4b, 0x79, 0xfa, + 0x08, 0x5c, 0xa7, 0x7c, + 0xbd, 0x65, 0xa8, 0xed, 0xe2, 0x22, 0xb6, 0x8b, 0x43, 0x4b, 0xe0, 0x7a, + 0x5e, 0x02, 0xd7, 0x47, + 0xe0, 0x02, 0x5d, 0xa7, 0xb2, 0xf2, 0x74, 0x6b, 0xb8, 0x80, 0x1d, 0x51, + 0x82, 0x0b, 0x5a, 0x16, + 0x8e, 0xd2, 0xb7, 0x36, 0x16, 0xa5, 0xf0, 0xa5, 0x10, 0xbe, 0x0e, 0xfa, + 0x71, 0x7d, 0x38, 0x16, + 0x9a, 0xb8, 0x4e, 0xed, 0x30, 0x79, 0xa8, 0x1d, 0x96, 0x4b, 0x5c, 0xc8, + 0xb7, 0x82, 0x0b, 0x64, + 0x2e, 0x50, 0x5c, 0x28, 0xcb, 0xc6, 0x99, 0x03, 0xc5, 0x1c, 0xbd, 0xee, + 0xd2, 0xf0, 0x48, 0x5c, + 0x4f, 0xe6, 0xeb, 0xa3, 0x59, 0x1b, 0x4b, 0xb3, 0xce, 0x81, 0x62, 0x73, + 0x6d, 0xb4, 0x34, 0x07, + 0x22, 0x45, 0xde, 0x6c, 0xe7, 0xac, 0x68, 0xec, 0xe3, 0xcc, 0xd4, 0xf6, + 0x18, 0xc0, 0xf5, 0x61, + 0x7c, 0x9d, 0x3c, 0x63, 0x94, 0xa7, 0x17, 0x2b, 0xa9, 0x75, 0x98, 0x41, + 0x9e, 0xee, 0xf6, 0x94, + 0x19, 0x79, 0x43, 0xee, 0xd3, 0x90, 0x38, 0x07, 0x9a, 0x7b, 0xd3, 0x77, + 0x5f, 0x0b, 0x72, 0x3c, + 0x26, 0xee, 0x5c, 0x8d, 0x09, 0xb9, 0xf7, 0x54, 0xbb, 0x29, 0x35, 0x88, + 0xed, 0x12, 0x2a, 0xf3, + 0xa5, 0xd4, 0xd7, 0x42, 0x0e, 0x2f, 0x9d, 0x8f, 0x14, 0x17, 0xf2, 0xb2, + 0xda, 0xef, 0x14, 0x17, + 0x0a, 0x2d, 0xe1, 0x42, 0xb1, 0x64, 0x41, 0xd3, 0x18, 0xc4, 0x85, 0x8c, + 0x76, 0x84, 0xcb, 0xc8, + 0xf3, 0x25, 0xeb, 0x6b, 0xc5, 0xc3, 0xf4, 0x35, 0xda, 0x17, 0x3a, 0x47, + 0x87, 0xe9, 0x6b, 0x30, + 0x35, 0x2e, 0x8c, 0x41, 0xd7, 0xb3, 0x68, 0xbf, 0xa7, 0xe6, 0xcc, 0xe9, + 0x74, 0xbd, 0xbc, 0x01, + 0xbe, 0x4e, 0x71, 0x7d, 0x40, 0xbb, 0x48, 0xc6, 0xf5, 0x7e, 0x7d, 0x2d, + 0xc9, 0x76, 0xa1, 0xcf, + 0x70, 0xa1, 0x15, 0x5c, 0xb0, 0x66, 0xbf, 0x67, 0xc7, 0x85, 0x7e, 0x6d, + 0x3b, 0xf3, 0x39, 0x51, + 0x11, 0xe1, 0x0b, 0xd4, 0x06, 0x1a, 0x8e, 0xeb, 0x7d, 0xb6, 0x87, 0xc9, + 0xd7, 0xa9, 0x1d, 0x66, + 0x89, 0xa7, 0xf7, 0xeb, 0x7a, 0x39, 0xc1, 0x05, 0x8b, 0xda, 0xb6, 0xb9, + 0x1e, 0x9b, 0x1a, 0xd6, + 0x10, 0x5c, 0x1f, 0xd4, 0x94, 0x12, 0x58, 0x48, 0xf1, 0xc4, 0x15, 0x75, + 0xd4, 0xa7, 0xd5, 0xd7, + 0x92, 0xe7, 0x40, 0x36, 0x0d, 0x6b, 0x34, 0x73, 0x20, 0x54, 0x60, 0x8d, + 0x33, 0x0f, 0x9b, 0x77, + 0x79, 0xfd, 0x7c, 0x3d, 0x3c, 0x72, 0x8d, 0x72, 0xc6, 0x2b, 0xea, 0xd2, + 0xf1, 0x75, 0x3a, 0x07, + 0x4a, 0xb5, 0xa1, 0xcf, 0xc6, 0x70, 0x7f, 0x98, 0x69, 0x87, 0x19, 0xf6, + 0x51, 0xd9, 0x2e, 0x96, + 0xb4, 0x4e, 0x0b, 0x63, 0x62, 0x1b, 0x83, 0x1d, 0x91, 0x4e, 0x5f, 0xa3, + 0xcf, 0x5a, 0xc2, 0x76, + 0x19, 0xf4, 0x9b, 0xa4, 0xea, 0x8b, 0x69, 0xbf, 0x1b, 0xb9, 0xc1, 0x05, + 0x53, 0xef, 0x8f, 0x1d, + 0x80, 0xde, 0x3f, 0xa0, 0xaf, 0x91, 0xf5, 0x7a, 0x88, 0xed, 0x92, 0x84, + 0xeb, 0x4a, 0x21, 0xc1, + 0xc2, 0xc1, 0xfb, 0x9a, 0x59, 0xef, 0x1f, 0xc4, 0x25, 0xaa, 0xeb, 0x65, + 0xc7, 0x05, 0xca, 0x51, + 0xb2, 0xe2, 0x82, 0x35, 0xbd, 0x9f, 0xdc, 0x17, 0xba, 0x36, 0x52, 0x5e, + 0x9e, 0x4e, 0x5f, 0x33, + 0x71, 0xbd, 0xdf, 0x76, 0xc9, 0x21, 0x5f, 0xc8, 0x95, 0xcf, 0xcb, 0x3c, + 0xa7, 0xc9, 0x99, 0xfb, + 0xf4, 0x35, 0x3d, 0xa1, 0xaf, 0x0d, 0xb7, 0x3d, 0xe8, 0x1c, 0x28, 0xd5, + 0x8b, 0x98, 0x74, 0xfa, + 0x5a, 0x2a, 0xbd, 0x3f, 0xe3, 0x1c, 0x08, 0xe5, 0xca, 0xe7, 0x55, 0x96, + 0xca, 0xe7, 0x95, 0xd0, + 0xd7, 0xf4, 0x84, 0xbe, 0x96, 0xda, 0x6f, 0x62, 0xef, 0xd3, 0xd7, 0x92, + 0xf8, 0xfa, 0x68, 0x34, + 0x2c, 0x0b, 0x73, 0x20, 0x57, 0xda, 0x36, 0xf5, 0x9b, 0xd8, 0xc3, 0x95, + 0x5e, 0x3a, 0xd7, 0x93, + 0xb5, 0xc2, 0x01, 0x4d, 0x29, 0xc9, 0x6f, 0x42, 0xe7, 0x40, 0xf1, 0x30, + 0xae, 0x36, 0x3c, 0xce, + 0xa1, 0xff, 0xef, 0x9d, 0xcd, 0xee, 0x5a, 0x57, 0xbc, 0xac, 0x2e, 0xad, + 0xbe, 0x96, 0x1b, 0xad, + 0x33, 0xc5, 0x98, 0xe4, 0x8d, 0x79, 0x4c, 0x92, 0xfd, 0x26, 0xce, 0x26, + 0x77, 0x6d, 0x36, 0x7d, + 0xad, 0x9f, 0x2f, 0x64, 0xb5, 0x5d, 0x24, 0x8b, 0x9a, 0x86, 0x45, 0x3f, + 0x60, 0x1f, 0x5f, 0x60, + 0x33, 0xc7, 0x5a, 0x39, 0x4c, 0x5c, 0x30, 0xf5, 0xb5, 0xa6, 0x34, 0xfa, + 0x1a, 0xb1, 0xc3, 0x0a, + 0x29, 0x47, 0xb1, 0x80, 0x0b, 0xd6, 0xed, 0xf7, 0x8a, 0xac, 0x58, 0x54, + 0x64, 0xc9, 0xff, 0x9e, + 0xe0, 0xe9, 0x26, 0x67, 0x4e, 0xc6, 0xf5, 0xe1, 0x7c, 0x9d, 0xf4, 0x85, + 0x9e, 0xd3, 0x9e, 0x41, + 0x5f, 0x1b, 0xd0, 0xfb, 0x2d, 0xe8, 0x7a, 0xa3, 0xc0, 0x85, 0xb1, 0xe9, + 0xfd, 0x43, 0xf4, 0x35, + 0x82, 0xeb, 0x2d, 0x49, 0x7c, 0x3d, 0x8d, 0xbe, 0x76, 0xd0, 0xe6, 0x80, + 0x15, 0x9e, 0x1e, 0x2b, + 0xae, 0xcf, 0xf4, 0x2c, 0x52, 0x4d, 0xa9, 0x9c, 0x3c, 0x8f, 0xce, 0x46, + 0x67, 0x5d, 0x0a, 0x7d, + 0x2d, 0xe1, 0x37, 0xa1, 0x7d, 0x91, 0x6c, 0x1c, 0x9d, 0x03, 0xb9, 0xf2, + 0x85, 0x5b, 0x99, 0x03, + 0x56, 0x35, 0xac, 0xfc, 0xa0, 0x93, 0xa1, 0x1a, 0x56, 0xb2, 0xdf, 0x64, + 0x24, 0xae, 0x97, 0x7a, + 0xe8, 0x1c, 0xb0, 0xcb, 0x79, 0x5c, 0x9a, 0xef, 0x33, 0x63, 0x79, 0x8b, + 0x8d, 0x52, 0x73, 0x8d, + 0x73, 0x65, 0xd3, 0xd7, 0xbe, 0x27, 0x5c, 0x48, 0xf8, 0x01, 0xb3, 0xc6, + 0x24, 0x20, 0xca, 0x5f, + 0x29, 0xe7, 0x2c, 0x4b, 0xa5, 0xaf, 0x0d, 0xf8, 0x4d, 0x0a, 0xb8, 0xd1, + 0xe8, 0x7a, 0xb9, 0xf2, + 0x85, 0x5b, 0x8e, 0xcb, 0x69, 0x48, 0xe8, 0x7a, 0xf9, 0x69, 0xfd, 0xe1, + 0xce, 0xda, 0xf2, 0x84, + 0xed, 0xe2, 0x29, 0x1c, 0xc4, 0xf5, 0xec, 0x7a, 0x7f, 0x0e, 0x70, 0x61, + 0xac, 0x7a, 0x3f, 0xb5, + 0xc3, 0x8a, 0xb2, 0xf8, 0x4d, 0x86, 0xeb, 0x6b, 0xa6, 0xae, 0x17, 0xb3, + 0xa2, 0xeb, 0x91, 0xf5, + 0xb8, 0xc5, 0x2a, 0x2e, 0xe4, 0x40, 0xef, 0x27, 0x76, 0x58, 0xa1, 0x56, + 0xe2, 0xa7, 0x73, 0x60, + 0x88, 0x1d, 0x96, 0xc2, 0x1f, 0x9e, 0xd0, 0xfb, 0x6d, 0x39, 0xc4, 0x05, + 0x0b, 0x71, 0x39, 0x21, + 0x0b, 0x1a, 0x16, 0xf9, 0x31, 0xe7, 0x80, 0x92, 0xc7, 0xa6, 0xd7, 0xd7, + 0x12, 0xb8, 0xee, 0x26, + 0xeb, 0x54, 0x61, 0x06, 0x7d, 0x6d, 0x90, 0xa7, 0xe7, 0x32, 0x36, 0x6d, + 0x2c, 0xda, 0x76, 0xbf, + 0x3f, 0xbc, 0x74, 0xa8, 0x3f, 0x9c, 0x1c, 0x4b, 0x23, 0x36, 0x26, 0x29, + 0x16, 0x17, 0x66, 0xb1, + 0x5d, 0x3c, 0x95, 0x8d, 0xae, 0xda, 0xe4, 0xb1, 0x48, 0xdc, 0x57, 0xba, + 0xc6, 0x11, 0x3b, 0x4c, + 0x29, 0x66, 0xad, 0xe0, 0xc2, 0xf7, 0x31, 0x26, 0x45, 0x61, 0xb7, 0xd7, + 0x6d, 0xda, 0x11, 0x03, + 0xfa, 0x1a, 0x33, 0x24, 0x7e, 0xcd, 0xbc, 0xaf, 0x15, 0x75, 0xa6, 0xed, + 0xa2, 0x15, 0xf9, 0x0b, + 0xb2, 0xd9, 0x2e, 0x56, 0x35, 0x0d, 0xab, 0xb8, 0x30, 0x26, 0xbd, 0x7f, + 0xa8, 0xbe, 0x36, 0x64, + 0x8d, 0x1b, 0xf0, 0x9b, 0x0c, 0xd3, 0xd7, 0xfa, 0x71, 0xc1, 0xaa, 0xae, + 0x97, 0x33, 0x3f, 0x60, + 0x51, 0xb6, 0xb5, 0xd1, 0xc4, 0xf5, 0xe2, 0x88, 0xd3, 0xb4, 0x5d, 0x86, + 0xe3, 0x7a, 0x65, 0x9f, + 0xbe, 0x66, 0xfa, 0x4d, 0x12, 0xb6, 0x4b, 0x6e, 0x71, 0x21, 0x57, 0x3e, + 0x2f, 0x72, 0x4e, 0x7a, + 0xfd, 0xf9, 0xd2, 0xa0, 0xbe, 0x96, 0x0a, 0xd7, 0x1d, 0x11, 0xa7, 0xc7, + 0x1d, 0xb1, 0x7b, 0xf2, + 0x33, 0xd5, 0x64, 0xc8, 0x79, 0xcc, 0xaa, 0x9b, 0xac, 0xc7, 0x05, 0xa3, + 0x8f, 0x4d, 0x4b, 0xe3, + 0x0f, 0x37, 0xed, 0xc2, 0x14, 0x71, 0x4e, 0x63, 0xd6, 0xb0, 0xac, 0xc4, + 0xa6, 0x59, 0xd2, 0xb6, + 0xab, 0xd2, 0x6b, 0xdb, 0xfd, 0x7e, 0x93, 0x50, 0x99, 0xcf, 0x4d, 0x9e, + 0xb1, 0xb2, 0xb8, 0xdd, + 0x97, 0x9c, 0x63, 0x91, 0x69, 0x4c, 0x28, 0x5f, 0x18, 0xaa, 0xaf, 0xb9, + 0x47, 0xc4, 0x25, 0x53, + 0x2c, 0xca, 0xa4, 0xaf, 0xe5, 0x1c, 0x17, 0xc6, 0x1a, 0xc7, 0x3b, 0x30, + 0x16, 0xa6, 0x1d, 0x96, + 0xd6, 0x6f, 0x62, 0xef, 0xd3, 0xd7, 0x92, 0xd7, 0x38, 0xcb, 0xb8, 0x10, + 0xb3, 0x86, 0x0b, 0x2e, + 0x6b, 0x7a, 0x3f, 0x93, 0xd1, 0x0f, 0xd8, 0xe7, 0x37, 0xa1, 0x73, 0xd4, + 0x39, 0x6c, 0x8d, 0x1a, + 0xa2, 0xaf, 0x99, 0xb6, 0x8b, 0x9d, 0xa3, 0x7d, 0xcc, 0x66, 0xd7, 0x16, + 0x8c, 0x2e, 0x5e, 0xcf, + 0x82, 0xde, 0x9f, 0xdd, 0xe7, 0x95, 0x4f, 0xe3, 0x78, 0x09, 0x47, 0x19, + 0xc0, 0xf5, 0x11, 0xfa, + 0x5a, 0x02, 0xd7, 0x13, 0x1c, 0x25, 0x9f, 0xcd, 0xcb, 0x14, 0x8b, 0x37, + 0x9a, 0xb5, 0x31, 0x97, + 0x71, 0xbc, 0x43, 0xd7, 0x46, 0x53, 0x5f, 0xa3, 0x7c, 0x7d, 0xa8, 0x1d, + 0x46, 0xda, 0x30, 0xbf, + 0xc9, 0x08, 0x7f, 0x78, 0xae, 0x63, 0x56, 0x73, 0xa0, 0x6d, 0x9b, 0x71, + 0xc9, 0x14, 0xd7, 0x63, + 0x4e, 0x4f, 0x55, 0xcb, 0x50, 0xbf, 0x49, 0x2a, 0x7f, 0xb8, 0xc5, 0x39, + 0x90, 0xeb, 0x98, 0xd5, + 0xec, 0x3e, 0x2f, 0x31, 0xa1, 0x6d, 0x17, 0x99, 0x75, 0xfa, 0x06, 0xf3, + 0x4d, 0x46, 0x33, 0x26, + 0x03, 0xfa, 0x5a, 0x24, 0xd9, 0x0e, 0xab, 0x4a, 0xd2, 0x1a, 0x47, 0xe8, + 0x6b, 0xa3, 0x8a, 0xef, + 0x77, 0x1f, 0x70, 0x7c, 0xff, 0xd0, 0x38, 0xde, 0x4c, 0x63, 0x92, 0xc8, + 0x37, 0xa1, 0xb6, 0x0b, + 0xcd, 0x37, 0x71, 0xa7, 0xb2, 0xc3, 0x7c, 0xfd, 0x71, 0xc9, 0x96, 0x7c, + 0xe1, 0x39, 0x8e, 0xef, + 0xb7, 0xe6, 0x0b, 0x4f, 0xc4, 0xf1, 0x52, 0x5c, 0x48, 0xab, 0xaf, 0xf5, + 0xf1, 0x75, 0x8a, 0x0b, + 0x05, 0x59, 0xf2, 0x4d, 0x72, 0x1a, 0xcb, 0x3e, 0x56, 0xbd, 0x3f, 0x29, + 0xdf, 0xa4, 0x62, 0x44, + 0xbe, 0x49, 0x45, 0x5d, 0xc6, 0x7c, 0x93, 0xd4, 0x7a, 0xff, 0x41, 0xc1, + 0x85, 0xa1, 0x39, 0x2e, + 0xe9, 0x74, 0xbd, 0x41, 0x3b, 0x8c, 0xfa, 0x65, 0xb2, 0xe6, 0x9b, 0xf4, + 0xe1, 0x42, 0x81, 0x35, + 0x5c, 0xb0, 0x1a, 0x9b, 0x66, 0xc1, 0xe7, 0x65, 0x25, 0x2e, 0xc7, 0x69, + 0x72, 0x80, 0x6c, 0xf9, + 0x26, 0x74, 0xde, 0x95, 0x66, 0x8f, 0xcb, 0x31, 0xe7, 0x40, 0x7e, 0x2e, + 0x62, 0xd9, 0xad, 0x6b, + 0xdb, 0xfd, 0xb6, 0xea, 0x60, 0x1e, 0xa1, 0x5c, 0x00, 0xc6, 0x38, 0x26, + 0x64, 0x8d, 0x2b, 0xa2, + 0xb6, 0x8b, 0xa7, 0xaa, 0xd9, 0x39, 0xf4, 0xbe, 0x0e, 0x8f, 0x4b, 0x26, + 0xf8, 0x61, 0x6a, 0x1a, + 0xb2, 0x85, 0x38, 0x5e, 0xcb, 0xb8, 0x90, 0xab, 0x78, 0xbd, 0x62, 0x60, + 0xc6, 0xf7, 0x4b, 0x85, + 0x5c, 0xe6, 0x7c, 0x13, 0xa7, 0xc7, 0x15, 0xb6, 0x79, 0xf3, 0xf8, 0xcc, + 0xb6, 0xcb, 0x28, 0x71, + 0x21, 0x27, 0x71, 0xbc, 0xc3, 0xf5, 0xfe, 0x3e, 0x7d, 0x8d, 0x1d, 0xee, + 0x37, 0x19, 0x92, 0x6f, + 0x22, 0xa7, 0x8e, 0x73, 0xb0, 0x8f, 0x02, 0x17, 0x6c, 0x87, 0xc2, 0xe7, + 0x95, 0xe4, 0x37, 0x71, + 0xf7, 0xdf, 0x97, 0x0c, 0xf9, 0x26, 0x79, 0x56, 0xf9, 0x42, 0x2e, 0xe3, + 0x78, 0x2d, 0x69, 0xdb, + 0xe3, 0xb0, 0x19, 0xaf, 0x67, 0xd8, 0x7c, 0x99, 0xf4, 0x35, 0xbb, 0x6a, + 0xf7, 0xbb, 0xc9, 0x1c, + 0xcd, 0x76, 0xce, 0xc2, 0x60, 0x2e, 0xe7, 0x80, 0xb5, 0x98, 0xd5, 0xa1, + 0x3e, 0x2f, 0x0b, 0xf9, + 0x26, 0x6a, 0x9f, 0xdf, 0x24, 0x95, 0xa6, 0x94, 0xe3, 0x98, 0x55, 0xeb, + 0x3e, 0xaf, 0xec, 0x1a, + 0xd6, 0x68, 0xc6, 0xc4, 0xcc, 0x41, 0x24, 0xf8, 0x6c, 0xc6, 0x25, 0x1b, + 0x7d, 0xfa, 0xda, 0x70, + 0xbf, 0x09, 0xb9, 0xaf, 0x66, 0x1c, 0xaf, 0x4c, 0x6c, 0x17, 0x9c, 0xc9, + 0x76, 0x29, 0x1d, 0xd0, + 0xfb, 0x73, 0x1e, 0xdf, 0x6f, 0x5d, 0xef, 0x4f, 0x9b, 0x6f, 0x42, 0x6d, + 0x97, 0xf2, 0x41, 0x7d, + 0x6d, 0xa4, 0x3f, 0xbc, 0x3f, 0x8e, 0x57, 0x3c, 0x94, 0x71, 0xbc, 0x19, + 0x39, 0x4a, 0x52, 0xbe, + 0x89, 0x73, 0x58, 0xbe, 0x89, 0xb3, 0x36, 0xd9, 0x1f, 0xde, 0x6f, 0x87, + 0xe5, 0x3e, 0x8e, 0xd7, + 0x9e, 0x9b, 0x38, 0xde, 0x3e, 0x5d, 0xcf, 0xae, 0x65, 0xf0, 0x9b, 0x50, + 0x3b, 0x2c, 0x54, 0xe9, + 0xa3, 0x1a, 0xdb, 0xb8, 0x2c, 0xfb, 0x9b, 0x58, 0x8b, 0x59, 0x75, 0xe4, + 0x30, 0x8e, 0x77, 0x98, + 0xae, 0x97, 0x36, 0xdf, 0x84, 0xc6, 0x6c, 0x39, 0x6b, 0x33, 0xe9, 0x6b, + 0x07, 0x39, 0x96, 0x7d, + 0xf4, 0xda, 0x36, 0x79, 0x76, 0x86, 0xe4, 0x9b, 0xb4, 0x58, 0xc8, 0x37, + 0xb1, 0x18, 0xb3, 0xea, + 0x88, 0xba, 0xeb, 0x73, 0x1a, 0xb3, 0x9a, 0x5d, 0xc3, 0x3a, 0x30, 0xbd, + 0x3f, 0x49, 0x6b, 0x1c, + 0xf0, 0x9b, 0xd0, 0xfb, 0x4a, 0x1a, 0x8d, 0x4b, 0x1c, 0xf0, 0x9b, 0x0c, + 0xd3, 0xd7, 0x46, 0x85, + 0x0b, 0xb1, 0x43, 0x34, 0x26, 0x49, 0x71, 0xc9, 0x15, 0x56, 0xf2, 0x4d, + 0xb2, 0xeb, 0xfd, 0xa3, + 0x8a, 0xef, 0x1f, 0x55, 0x1c, 0xaf, 0x95, 0x98, 0x84, 0xb8, 0xa3, 0x3e, + 0x5b, 0xbe, 0x49, 0x69, + 0x82, 0xa7, 0xb3, 0xd9, 0x70, 0xc1, 0xd4, 0xf5, 0xc6, 0x60, 0xbf, 0x9f, + 0x28, 0x9c, 0x86, 0x8e, + 0x17, 0x8e, 0x83, 0xc7, 0xf1, 0xb4, 0x1d, 0x0f, 0x4f, 0x10, 0x16, 0xc1, + 0x93, 0x8d, 0xd3, 0x99, + 0x33, 0x84, 0x13, 0xc1, 0xf1, 0xfc, 0x09, 0x60, 0x11, 0x7f, 0x02, 0x3c, + 0x0e, 0x2f, 0x82, 0x0b, + 0xf8, 0xc3, 0xe1, 0x31, 0xc2, 0x04, 0x34, 0x5e, 0xa8, 0x42, 0xd5, 0xfc, + 0x78, 0x34, 0x5e, 0x9a, + 0x02, 0x66, 0x86, 0xa7, 0x7b, 0xab, 0xf8, 0x89, 0x68, 0x12, 0xef, 0x42, + 0xd5, 0xd2, 0x78, 0x30, + 0x41, 0x9d, 0xc8, 0x4e, 0x36, 0xa6, 0x32, 0xd3, 0xc8, 0xfb, 0xd3, 0x23, + 0x73, 0xbc, 0xc9, 0xb9, + 0xf2, 0x29, 0xe3, 0xd7, 0x46, 0x19, 0xc7, 0x7b, 0xa8, 0x7c, 0x5e, 0xc9, + 0x71, 0xc9, 0x29, 0x75, + 0x98, 0x14, 0xf9, 0x26, 0xdf, 0x03, 0x2e, 0x24, 0x34, 0xac, 0x6c, 0x6b, + 0x63, 0xc0, 0xce, 0x51, + 0x6d, 0xbb, 0x34, 0x5c, 0xe6, 0x49, 0x95, 0x6f, 0xd2, 0x1f, 0x97, 0x5c, + 0x60, 0x29, 0x96, 0xfd, + 0x20, 0xcc, 0x81, 0x68, 0x76, 0x5f, 0x78, 0xae, 0xf4, 0xfe, 0x64, 0xbf, + 0x89, 0x7b, 0x98, 0x6e, + 0x3a, 0xbc, 0x9e, 0x8b, 0xc9, 0x55, 0x4c, 0xbd, 0xdf, 0x9e, 0xa3, 0x31, + 0xb1, 0xe5, 0x72, 0x4c, + 0x4c, 0xbe, 0x50, 0x66, 0xd8, 0x7d, 0x19, 0xfd, 0x26, 0x7d, 0xb6, 0x4b, + 0x3e, 0x9f, 0x23, 0xbe, + 0xd0, 0x98, 0xeb, 0xda, 0x35, 0x7d, 0x7c, 0x21, 0x4b, 0xbe, 0x49, 0x45, + 0xb8, 0xc4, 0x93, 0x29, + 0xdf, 0x64, 0xdc, 0x98, 0x63, 0xd9, 0x8f, 0x40, 0xff, 0x0d, 0x3f, 0x43, + 0x7f, 0x81, 0xdf, 0xa0, + 0x6f, 0xd9, 0x7f, 0x81, 0xff, 0x62, 0xff, 0x0e, 0xfe, 0xc1, 0x7e, 0x0d, + 0x3e, 0x41, 0x1f, 0xc3, + 0x4f, 0xe0, 0xef, 0xd1, 0xdf, 0xb8, 0xbf, 0x83, 0x7f, 0xb1, 0xdf, 0xc2, + 0x7f, 0x72, 0xff, 0x02, + 0x5f, 0xa0, 0xfd, 0xe8, 0x97, 0xe0, 0x03, 0xfc, 0x09, 0xf9, 0xf9, 0x18, + 0x7d, 0x8c, 0xdf, 0xe7, + 0x3e, 0x40, 0x1f, 0xc1, 0xfd, 0x68, 0x3f, 0x69, 0x7b, 0x85, 0x7d, 0xe8, + 0x03, 0xfc, 0x5b, 0xf8, + 0x1b, 0xfe, 0x4d, 0xb8, 0x57, 0x7c, 0x1d, 0xef, 0x11, 0xf6, 0xe1, 0xd7, + 0x85, 0x4f, 0xf0, 0x8f, + 0xc3, 0x4e, 0xef, 0xf0, 0x7c, 0x93, 0xf2, 0x54, 0xf9, 0x26, 0x56, 0x71, + 0xe1, 0x40, 0x63, 0xd9, + 0x47, 0xaf, 0xf7, 0xa3, 0xc2, 0x20, 0xc1, 0x05, 0x32, 0xb6, 0xa5, 0x69, + 0xf4, 0xb5, 0x7e, 0xbf, + 0x09, 0xb5, 0xdf, 0xad, 0xc5, 0xb2, 0xbb, 0x2d, 0xc6, 0xb2, 0xe7, 0xaa, + 0x46, 0x45, 0x22, 0x5e, + 0x2f, 0x11, 0x4b, 0x97, 0x29, 0xdf, 0xc4, 0x59, 0xe7, 0x8e, 0x95, 0x64, + 0xce, 0x37, 0x19, 0x95, + 0xae, 0x97, 0xa3, 0x3a, 0x2d, 0x07, 0xcd, 0x0f, 0xe8, 0xac, 0xa5, 0x71, + 0x89, 0x43, 0xfd, 0x26, + 0xee, 0xa1, 0x7e, 0x93, 0x90, 0xd3, 0xe7, 0x0e, 0xdb, 0xb2, 0xda, 0x2e, + 0x14, 0x17, 0xb2, 0x8e, + 0x89, 0x3c, 0x90, 0xf7, 0x93, 0xf3, 0xda, 0x35, 0x16, 0xf2, 0x4d, 0xd2, + 0xd5, 0x73, 0x49, 0xd2, + 0xfb, 0x0b, 0x72, 0x59, 0xd3, 0x6a, 0xec, 0x7e, 0x40, 0x2b, 0xf9, 0x26, + 0xf2, 0xd0, 0x7c, 0x93, + 0xcc, 0x7a, 0x7f, 0xfa, 0xf8, 0xfe, 0x3c, 0xfe, 0x51, 0xf4, 0x21, 0xfc, + 0x1c, 0x3e, 0x1b, 0x68, + 0x03, 0xed, 0x72, 0x37, 0x68, 0x95, 0x5b, 0x61, 0xab, 0xd2, 0x0d, 0x5e, + 0x00, 0x3b, 0xd1, 0x27, + 0x70, 0x3f, 0xbf, 0x59, 0xeb, 0x82, 0x1b, 0xd5, 0x6d, 0x70, 0xab, 0xda, + 0x03, 0x9e, 0x40, 0xef, + 0x08, 0x7f, 0x06, 0x9f, 0xe0, 0x57, 0xc4, 0x17, 0xf1, 0xcb, 0xc2, 0x0b, + 0xf8, 0x17, 0xfc, 0x0b, + 0xf8, 0x79, 0x61, 0x27, 0xbf, 0x1f, 0xee, 0xe1, 0x5f, 0xc5, 0x9f, 0x08, + 0xbf, 0x44, 0x5b, 0xe0, + 0x13, 0xf0, 0x73, 0xf4, 0x1e, 0xff, 0x12, 0x7e, 0x87, 0x7f, 0x13, 0xef, + 0xe2, 0xdf, 0xc5, 0x1f, + 0x0b, 0x25, 0xa6, 0x2d, 0x4d, 0xe3, 0x5c, 0xd3, 0xd6, 0x73, 0xa1, 0xb8, + 0x1e, 0xb0, 0x99, 0xbe, + 0xf0, 0x43, 0x1a, 0xc7, 0x1b, 0xb0, 0x56, 0xa3, 0x22, 0xe1, 0x67, 0x2b, + 0xf4, 0x66, 0xd4, 0xd7, + 0x48, 0x5f, 0xa8, 0x3d, 0x52, 0x66, 0x64, 0xce, 0x37, 0xc9, 0x75, 0xcc, + 0xea, 0x01, 0xd4, 0xa8, + 0x48, 0x9f, 0x6f, 0xd2, 0x98, 0xa6, 0x9e, 0xcb, 0x41, 0x88, 0x65, 0x37, + 0xeb, 0x37, 0x65, 0xab, + 0xd3, 0x32, 0xaa, 0xf8, 0xfe, 0x51, 0x8f, 0xc9, 0x80, 0xdf, 0x64, 0x84, + 0xbe, 0x46, 0xe3, 0x0a, + 0x09, 0xf7, 0x77, 0x67, 0xcd, 0x37, 0xc9, 0x71, 0x7c, 0xbf, 0x89, 0x0b, + 0xf9, 0x63, 0xd5, 0xfb, + 0xd1, 0x18, 0xf2, 0x4d, 0x2c, 0xc6, 0xf1, 0x1e, 0xfa, 0xda, 0x35, 0x79, + 0x34, 0x47, 0x9b, 0xda, + 0x2e, 0x91, 0x72, 0x4f, 0xa6, 0x7c, 0x93, 0x82, 0x60, 0xe5, 0x98, 0x70, + 0xe1, 0x3c, 0xf8, 0x2f, + 0xf8, 0x8e, 0xb6, 0x9e, 0x9b, 0xde, 0x69, 0x63, 0x1d, 0x3d, 0xa5, 0x4c, + 0x79, 0x4f, 0x39, 0x63, + 0xeb, 0x72, 0x32, 0x4f, 0x82, 0xaf, 0xb8, 0xfb, 0x23, 0x27, 0x82, 0xca, + 0x2e, 0x97, 0xdf, 0xdd, + 0xe9, 0x64, 0xaa, 0xda, 0x8a, 0xfc, 0x40, 0xf8, 0x6f, 0xdc, 0x1c, 0x3f, + 0x87, 0x9d, 0xdf, 0x31, + 0x97, 0x9d, 0xd7, 0xb1, 0x80, 0x5d, 0xd0, 0x3e, 0xcb, 0x3f, 0x2d, 0x7a, + 0x37, 0xf8, 0x10, 0xbd, + 0xca, 0x7f, 0x2c, 0x3e, 0x87, 0x16, 0xb7, 0xd9, 0xd8, 0xb2, 0x96, 0x9b, + 0xfd, 0xfb, 0xf0, 0xe7, + 0xf8, 0x7e, 0xcc, 0x60, 0x05, 0x3f, 0x48, 0x5e, 0xf9, 0xd0, 0x40, 0xbd, + 0x08, 0x3e, 0x85, 0xbe, + 0x96, 0x94, 0x6f, 0x42, 0x79, 0x3a, 0xd5, 0x61, 0x32, 0xe5, 0x9b, 0x14, + 0x59, 0x8c, 0x59, 0x3d, + 0xe8, 0xb5, 0x6b, 0x86, 0xe7, 0x9b, 0xb4, 0x5a, 0xcc, 0x37, 0x19, 0x85, + 0xae, 0x67, 0xa5, 0x7e, + 0xd3, 0xd8, 0x63, 0x56, 0x47, 0xfa, 0xc3, 0xc9, 0xf3, 0x58, 0x47, 0xb1, + 0x2f, 0x6d, 0x3d, 0x17, + 0xda, 0x17, 0x33, 0x4e, 0xcc, 0x8a, 0x2f, 0x3c, 0x87, 0x75, 0x5a, 0x46, + 0xa9, 0x69, 0x1c, 0x98, + 0xde, 0x3f, 0x58, 0xcf, 0xa5, 0xbc, 0xc1, 0x39, 0x90, 0x2b, 0xef, 0xce, + 0x94, 0x6f, 0xf2, 0xbd, + 0xc4, 0xf1, 0x5a, 0xd1, 0xfb, 0x69, 0x3d, 0xf8, 0x84, 0xed, 0x52, 0x96, + 0x56, 0x5f, 0x4b, 0xe4, + 0x9b, 0xe4, 0x54, 0xd3, 0x08, 0xb9, 0x7c, 0xb9, 0xf5, 0x85, 0x27, 0xf8, + 0x42, 0xba, 0x7a, 0x2e, + 0xfd, 0xf9, 0x26, 0x6e, 0x32, 0xb6, 0xb4, 0x2f, 0x79, 0xe9, 0xf2, 0x4d, + 0x46, 0xc4, 0xf1, 0xe6, + 0xa3, 0x3d, 0xdc, 0xe7, 0xe8, 0x86, 0x58, 0x21, 0x3b, 0x6d, 0xd3, 0x45, + 0xbe, 0x33, 0x7b, 0xce, + 0xf2, 0x9c, 0xd5, 0x79, 0x8e, 0xf7, 0xd4, 0xae, 0x0b, 0xeb, 0xf7, 0x80, + 0xbd, 0xcc, 0xf4, 0x2e, + 0x3b, 0x7b, 0x46, 0xd7, 0xb9, 0x9e, 0xd3, 0x3a, 0x4f, 0xf7, 0x9c, 0xde, + 0x33, 0xb3, 0x7e, 0x8b, + 0xf6, 0x38, 0x57, 0xd4, 0x5e, 0xc6, 0x9c, 0xd1, 0x7b, 0xb2, 0x77, 0x71, + 0xf7, 0x62, 0xdf, 0xe2, + 0x9e, 0xe3, 0xeb, 0x8f, 0x6b, 0xd8, 0xce, 0x7c, 0xc4, 0xbd, 0x81, 0x3e, + 0x0a, 0x9d, 0xed, 0xb7, + 0x77, 0x5f, 0xed, 0x3d, 0xa3, 0xb3, 0xc8, 0x57, 0x2f, 0x7d, 0x08, 0x19, + 0x7c, 0x23, 0x5e, 0x81, + 0x21, 0x7e, 0x86, 0xff, 0x2f, 0x3c, 0x87, 0xe6, 0x37, 0x49, 0x23, 0xf3, + 0x4d, 0x32, 0xd6, 0xe9, + 0x32, 0x52, 0xe7, 0x9b, 0xe4, 0xbe, 0xa6, 0xd5, 0x01, 0xc6, 0xf1, 0xf6, + 0xfb, 0x4d, 0x54, 0x87, + 0xdf, 0xd5, 0xc7, 0x17, 0x32, 0xe5, 0x9b, 0x64, 0xcf, 0x7d, 0x1b, 0x4d, + 0xcc, 0x6a, 0x62, 0x0e, + 0x14, 0xe6, 0x44, 0xdb, 0x1e, 0x87, 0xcd, 0xd8, 0x34, 0x35, 0xcf, 0x9f, + 0x39, 0xdf, 0xc4, 0xe1, + 0xa5, 0xcf, 0x5b, 0x91, 0x94, 0x97, 0x31, 0xdf, 0xc4, 0x92, 0xad, 0x6a, + 0xd5, 0xe7, 0x95, 0xdb, + 0xf8, 0x7e, 0xeb, 0x63, 0x42, 0x9e, 0xa3, 0x84, 0xed, 0x92, 0xa4, 0x9b, + 0xa6, 0x8a, 0x4b, 0x96, + 0x6d, 0x66, 0x3d, 0x9f, 0xbc, 0x43, 0x54, 0x93, 0x7a, 0x88, 0xde, 0x8f, + 0x2d, 0x60, 0x11, 0xe5, + 0xcc, 0x7c, 0xe6, 0x7c, 0x13, 0xb3, 0x76, 0x8d, 0x5e, 0xc8, 0x64, 0xca, + 0x37, 0x19, 0x5d, 0x1c, + 0xaf, 0x35, 0x3f, 0xe0, 0xd8, 0xf4, 0x7e, 0x0b, 0xf9, 0x26, 0x6a, 0x8a, + 0x7c, 0x93, 0xe1, 0x7a, + 0xbf, 0x70, 0x23, 0xfa, 0x3f, 0x51, 0x45, 0xb6, 0xce, 0xe3, 0x98, 0xdb, + 0x9a, 0x4f, 0x67, 0x16, + 0x77, 0x9e, 0xee, 0x3b, 0xa5, 0xed, 0x54, 0xe6, 0xc4, 0xee, 0x33, 0xfd, + 0x6f, 0xcb, 0x6b, 0x38, + 0x5b, 0xdb, 0xb5, 0xcc, 0x92, 0xd6, 0x93, 0x7d, 0xa7, 0x75, 0x90, 0xf7, + 0x3b, 0x17, 0x32, 0x5a, + 0xe3, 0x25, 0xfe, 0x79, 0x2d, 0xab, 0x99, 0x9f, 0x36, 0x5d, 0xc1, 0x5c, + 0xdd, 0xf8, 0x63, 0xdf, + 0x95, 0x2d, 0x57, 0xf8, 0x7f, 0x1c, 0x7b, 0x12, 0xbe, 0xcb, 0xfd, 0x16, + 0x75, 0x35, 0xda, 0xfc, + 0x17, 0xb6, 0xad, 0xf0, 0x5d, 0xdb, 0x3e, 0xc9, 0x7b, 0x4e, 0x70, 0x23, + 0x8b, 0xc9, 0x7f, 0x90, + 0x67, 0xd1, 0x66, 0xe1, 0x23, 0xfc, 0x70, 0xa4, 0xca, 0x9b, 0x61, 0x6d, + 0x34, 0xed, 0xb0, 0xe2, + 0x50, 0xa5, 0x97, 0xc6, 0x6c, 0x0d, 0xcf, 0x37, 0x19, 0x1e, 0x97, 0xdc, + 0x87, 0x0b, 0xac, 0x95, + 0x98, 0xd5, 0x82, 0x9c, 0xd4, 0xae, 0xb1, 0xa8, 0x6d, 0xd3, 0x73, 0x92, + 0x39, 0x40, 0xd7, 0x9f, + 0x74, 0xfa, 0x9a, 0x99, 0x6f, 0x12, 0xae, 0xf4, 0xb8, 0xc9, 0xbc, 0xcb, + 0x58, 0x23, 0xd8, 0xf2, + 0x1c, 0xc8, 0x61, 0xcc, 0x6a, 0x8a, 0x1c, 0x97, 0x74, 0xf5, 0x5c, 0xcc, + 0x7c, 0x93, 0x0c, 0xf5, + 0x5c, 0x06, 0x72, 0x5c, 0x42, 0x39, 0x8a, 0x59, 0x1d, 0xe5, 0x98, 0x54, + 0x8d, 0xd1, 0x0f, 0x98, + 0xee, 0x9c, 0x74, 0x4c, 0xd2, 0xeb, 0x6b, 0x83, 0xb9, 0xf2, 0xd9, 0xf2, + 0x4d, 0x2c, 0xd5, 0xaa, + 0x1f, 0x63, 0x9d, 0x6e, 0xeb, 0x7a, 0xff, 0x90, 0x7c, 0x13, 0x6f, 0xda, + 0x3a, 0x5d, 0xc3, 0xea, + 0xb9, 0x1c, 0x70, 0x8e, 0xcb, 0x98, 0xe3, 0x78, 0xb3, 0xd4, 0xed, 0xe8, + 0xc3, 0x75, 0xba, 0x4e, + 0xb9, 0x9a, 0xb2, 0xe5, 0x9b, 0x0c, 0xb5, 0x5d, 0x4a, 0xf8, 0x3f, 0xa3, + 0xcf, 0xd4, 0xab, 0x90, + 0xad, 0xfd, 0x5a, 0xe6, 0xcc, 0x36, 0xa7, 0x77, 0x61, 0xe7, 0x82, 0xba, + 0x23, 0x7b, 0xa7, 0x79, + 0x1c, 0x1b, 0x27, 0xf9, 0x9f, 0xd7, 0xaf, 0x04, 0x53, 0x3a, 0x6f, 0xf1, + 0x4e, 0xe9, 0x9d, 0xca, + 0xcc, 0xe9, 0x9e, 0xe7, 0x9d, 0xb7, 0x71, 0xb6, 0xf7, 0x27, 0xed, 0x73, + 0x7d, 0xeb, 0x5a, 0xae, + 0x63, 0x1c, 0xbd, 0x95, 0x3e, 0x57, 0x4f, 0x95, 0xd7, 0xdd, 0x5b, 0xee, + 0x2f, 0x6b, 0xdc, 0x0a, + 0x3f, 0xe4, 0xbe, 0x44, 0x2b, 0x5a, 0x6d, 0xfe, 0xdb, 0x5b, 0x0f, 0x67, + 0xce, 0x6f, 0xfe, 0x81, + 0xaf, 0x2a, 0xfe, 0x30, 0xdb, 0x02, 0x43, 0x38, 0x2a, 0x60, 0xb4, 0x5f, + 0xd8, 0x85, 0x7f, 0xa3, + 0x5e, 0xc2, 0x65, 0xd3, 0xfb, 0xf3, 0x68, 0x1c, 0x2f, 0xb1, 0xdf, 0xf3, + 0xd3, 0xd6, 0x73, 0x31, + 0xfd, 0x26, 0x5e, 0xd3, 0x17, 0xae, 0xe6, 0xfb, 0x33, 0xc6, 0x6c, 0xe5, + 0xb2, 0x26, 0x35, 0x3f, + 0x38, 0x07, 0x46, 0xa9, 0xf7, 0xa3, 0xd4, 0x79, 0xff, 0xb4, 0x3f, 0x19, + 0xea, 0xb9, 0x1c, 0x8c, + 0x98, 0x55, 0xb3, 0x46, 0x45, 0xfe, 0x01, 0xd5, 0xa8, 0x18, 0xf0, 0x9b, + 0x90, 0xbe, 0x54, 0xf5, + 0xd7, 0x18, 0x1f, 0xce, 0xd7, 0x93, 0xfc, 0x26, 0xa6, 0xb6, 0xad, 0xe7, + 0xa6, 0x26, 0xf5, 0xa8, + 0xc7, 0xc4, 0xa2, 0x1f, 0xd0, 0x6a, 0x1c, 0xef, 0x88, 0x3a, 0x5f, 0x29, + 0xf3, 0xfe, 0xb3, 0xe6, + 0x9b, 0xe4, 0x38, 0xbe, 0x7f, 0x34, 0x71, 0xbc, 0xe9, 0x39, 0xb3, 0x89, + 0xeb, 0x5a, 0x49, 0xc2, + 0x76, 0x69, 0x76, 0xa7, 0xd6, 0xd7, 0xfa, 0xfc, 0x26, 0xd6, 0x62, 0xe7, + 0xb2, 0xd4, 0xaa, 0x1f, + 0x65, 0x7c, 0xff, 0x68, 0xe2, 0x78, 0x29, 0x2e, 0x64, 0xce, 0x37, 0x71, + 0xf8, 0xa8, 0xc6, 0x56, + 0x28, 0x25, 0x70, 0x3d, 0x80, 0x3e, 0x47, 0xef, 0x18, 0x17, 0xe1, 0x92, + 0xae, 0xeb, 0x99, 0xb9, + 0x84, 0xdf, 0x2d, 0x6f, 0x5c, 0xee, 0xaf, 0x0d, 0x3f, 0xc4, 0xbd, 0x28, + 0x3f, 0xc4, 0xed, 0xd5, + 0xcf, 0x07, 0xb3, 0xda, 0xaf, 0xf7, 0x4e, 0xe8, 0x3d, 0x8e, 0x59, 0x1b, + 0x5f, 0xc7, 0xdc, 0xd9, + 0xe4, 0xf7, 0xf3, 0xcd, 0x87, 0xb1, 0x77, 0xb4, 0x9f, 0xeb, 0x75, 0x77, + 0x2c, 0x61, 0xd6, 0xc5, + 0x56, 0xb2, 0x2b, 0x1b, 0x57, 0xf8, 0x57, 0x18, 0x4f, 0x73, 0x1f, 0xf1, + 0xaf, 0xc2, 0xa3, 0xbb, + 0xe7, 0xfb, 0xae, 0x6b, 0x1f, 0xef, 0x3b, 0xbf, 0xed, 0x16, 0x6f, 0x51, + 0x23, 0xe6, 0xfe, 0x00, + 0xef, 0x41, 0x5d, 0xd2, 0xcf, 0xd1, 0x1b, 0xc2, 0x6e, 0xb4, 0x4b, 0x7c, + 0x1b, 0x15, 0x8e, 0x56, + 0xef, 0xa7, 0xfa, 0x5a, 0x20, 0x85, 0x1d, 0x96, 0xb4, 0xbf, 0x89, 0x3d, + 0x4d, 0xbe, 0x49, 0x52, + 0x1c, 0x6f, 0xce, 0xe6, 0xc0, 0x81, 0x69, 0xdb, 0x49, 0x7e, 0x13, 0x82, + 0xa5, 0xa9, 0xf2, 0x4d, + 0x86, 0xd4, 0xc1, 0xef, 0xd3, 0xb0, 0x0e, 0xd5, 0x1c, 0x18, 0xa2, 0x6d, + 0x67, 0x3d, 0x67, 0x25, + 0x43, 0x35, 0x03, 0x9b, 0x96, 0xa9, 0x4e, 0x97, 0x8d, 0x71, 0x98, 0x3c, + 0x3d, 0x6f, 0xcc, 0x1a, + 0xd6, 0x88, 0x3d, 0x37, 0x0f, 0x42, 0x7c, 0xbf, 0xd5, 0x38, 0xde, 0xc2, + 0x6c, 0xf9, 0x26, 0xe1, + 0x84, 0xed, 0x92, 0x31, 0xdf, 0x84, 0x60, 0xa1, 0xa5, 0xbc, 0x1f, 0xf1, + 0xfb, 0xa8, 0x5d, 0x63, + 0x33, 0xfd, 0x80, 0x85, 0x81, 0x2c, 0xf9, 0x26, 0x91, 0x4a, 0x33, 0x57, + 0x3e, 0xad, 0xbe, 0x76, + 0x10, 0xe2, 0xfb, 0x0b, 0xc7, 0xe8, 0xf3, 0x4a, 0x5d, 0xcf, 0xc5, 0x6d, + 0xde, 0x9b, 0xc4, 0x7a, + 0x3d, 0x87, 0xf9, 0x07, 0x7e, 0x19, 0xfd, 0x5a, 0xbe, 0x11, 0xdb, 0xda, + 0x97, 0x32, 0x37, 0xb7, + 0xb9, 0x7d, 0x93, 0x7b, 0x26, 0xfb, 0x2a, 0x5a, 0x4f, 0x67, 0x9e, 0xc5, + 0xff, 0xc3, 0xbe, 0x17, + 0x3a, 0x17, 0xcc, 0xee, 0xbe, 0xda, 0xeb, 0xee, 0x9a, 0xec, 0x9b, 0xda, + 0x3e, 0xd9, 0x3b, 0xa1, + 0x7b, 0xbe, 0x97, 0x6b, 0x99, 0xe3, 0x5b, 0xd2, 0x76, 0x8e, 0x77, 0x4e, + 0xdb, 0x2a, 0xcf, 0xc2, + 0xf6, 0x85, 0x75, 0xc7, 0xf5, 0x2c, 0x66, 0x4e, 0x8d, 0x6d, 0x67, 0xff, + 0x21, 0xb6, 0x41, 0x47, + 0xf7, 0x62, 0xdf, 0x19, 0x5d, 0x53, 0x7c, 0xf3, 0x3a, 0x6e, 0xf0, 0x4d, + 0xee, 0x38, 0x93, 0x79, + 0x0f, 0x7f, 0x0c, 0x3f, 0x92, 0xf6, 0xa1, 0x97, 0xf8, 0x3d, 0xf0, 0x35, + 0xfe, 0x4b, 0x7c, 0x45, + 0x96, 0x7e, 0xda, 0x33, 0xed, 0xd7, 0x90, 0x14, 0x97, 0xec, 0x4e, 0x5e, + 0x6f, 0xd3, 0xe5, 0x9b, + 0x1c, 0x68, 0xad, 0xfa, 0x54, 0x73, 0x40, 0xcc, 0x89, 0xcf, 0x0b, 0xd3, + 0x39, 0x50, 0x11, 0xcc, + 0x96, 0x6f, 0x62, 0xf3, 0x53, 0x2e, 0x4f, 0xe6, 0x1d, 0xc8, 0x45, 0x2c, + 0x7b, 0x6e, 0xb5, 0x6d, + 0xb3, 0xae, 0x9b, 0x27, 0x5b, 0xbe, 0x09, 0x7d, 0xe6, 0x2a, 0xb3, 0xe5, + 0x9b, 0x64, 0x88, 0x65, + 0x1f, 0xbe, 0xcf, 0x64, 0x5e, 0x7f, 0xdc, 0x50, 0xb6, 0x9a, 0x5b, 0x07, + 0x21, 0xbe, 0x3f, 0xfb, + 0x39, 0x13, 0xb6, 0xcb, 0xa0, 0xdf, 0x24, 0x75, 0xbe, 0x49, 0x02, 0x8b, + 0xf2, 0x32, 0xe7, 0x9b, + 0x8c, 0x06, 0x17, 0x72, 0x55, 0x8f, 0x77, 0x50, 0xd7, 0xcb, 0xa2, 0xaf, + 0x59, 0xc9, 0x37, 0x39, + 0x44, 0xf1, 0xfd, 0xd6, 0xf3, 0xf3, 0x07, 0xfc, 0x26, 0x65, 0xc9, 0xf9, + 0x26, 0x91, 0x07, 0xbc, + 0xef, 0xe1, 0xd7, 0xd0, 0xc7, 0x68, 0x3b, 0x72, 0x76, 0x8e, 0x67, 0x6e, + 0x6d, 0xb9, 0xc2, 0x77, + 0x7e, 0xe7, 0xf9, 0x9e, 0x25, 0xdd, 0x93, 0xbc, 0xf6, 0xf8, 0xbd, 0xfe, + 0x3f, 0x69, 0x17, 0x80, + 0x69, 0x9d, 0x75, 0xbe, 0xab, 0x5a, 0xaf, 0x62, 0x2e, 0x6f, 0xbf, 0xdc, + 0x77, 0x59, 0xe7, 0x52, + 0x46, 0x6c, 0x9b, 0xee, 0xbf, 0xbe, 0xe5, 0x1c, 0xdf, 0x61, 0x8d, 0xeb, + 0x99, 0xab, 0xdb, 0xaf, + 0xf2, 0x5f, 0xd8, 0x33, 0x91, 0xa9, 0x6e, 0xda, 0xc2, 0x7e, 0xa5, 0x2d, + 0x87, 0xb6, 0x8e, 0xab, + 0xfc, 0xe7, 0xf7, 0x4c, 0xf6, 0x56, 0x77, 0x5c, 0xee, 0x3d, 0xaf, 0xbb, + 0x82, 0xb9, 0x5f, 0xfa, + 0x08, 0xec, 0x16, 0x76, 0xe3, 0xdd, 0xc2, 0x5e, 0xb8, 0x87, 0x7f, 0x0b, + 0x7d, 0x8a, 0x4b, 0x51, + 0x0e, 0xb4, 0x6d, 0xb3, 0x26, 0x75, 0xb1, 0x9e, 0xc5, 0x6f, 0x12, 0xac, + 0xe8, 0xd7, 0xb6, 0xd1, + 0xa1, 0x9a, 0x03, 0x63, 0xd2, 0xfb, 0x33, 0xe4, 0x9b, 0x50, 0x6c, 0xcf, + 0x96, 0x6f, 0x72, 0x90, + 0xe6, 0xc0, 0xd8, 0xe2, 0x72, 0x86, 0xd4, 0xc1, 0xb7, 0x96, 0x6f, 0x32, + 0x4e, 0x49, 0x3f, 0x07, + 0x86, 0xee, 0xb9, 0x59, 0xc4, 0x52, 0xad, 0xd1, 0xac, 0xf3, 0x25, 0x64, + 0xce, 0x95, 0xff, 0x7e, + 0xc6, 0x84, 0xd8, 0x11, 0xc9, 0x7a, 0x7f, 0xaa, 0x7a, 0x2e, 0xfd, 0xf9, + 0x26, 0x19, 0xea, 0xb9, + 0x8c, 0xc6, 0x7e, 0xb7, 0x1f, 0xaa, 0x7a, 0x3e, 0xc9, 0xf9, 0x26, 0x8d, + 0x55, 0xb5, 0x43, 0xee, + 0xab, 0x89, 0xeb, 0xa5, 0x43, 0xeb, 0xe0, 0x0b, 0x85, 0xa3, 0xa8, 0x81, + 0x99, 0xb3, 0xda, 0x35, + 0x56, 0x6b, 0xd5, 0x9b, 0x31, 0x82, 0x14, 0xd7, 0x2f, 0x56, 0xfe, 0xc8, + 0xbd, 0x86, 0xf6, 0xa0, + 0xdd, 0xe0, 0xf7, 0xa8, 0xbd, 0xa1, 0x98, 0xb1, 0x77, 0x1f, 0xc5, 0x2c, + 0x6c, 0x9d, 0xcf, 0x5c, + 0xd5, 0xb4, 0x92, 0x2d, 0xeb, 0x3c, 0x92, 0x7b, 0x2b, 0x78, 0x29, 0x98, + 0xd6, 0xba, 0xc6, 0xfb, + 0x83, 0x8e, 0x0b, 0x99, 0x73, 0xda, 0xce, 0x25, 0xed, 0x72, 0x06, 0x36, + 0xcc, 0x60, 0xaf, 0x6f, + 0x39, 0xdb, 0x3f, 0xad, 0x79, 0x8d, 0xff, 0xc6, 0xc6, 0x2b, 0xb9, 0xda, + 0x96, 0x53, 0x18, 0x67, + 0xe3, 0xa3, 0xfe, 0x77, 0x42, 0xf3, 0xe1, 0xb4, 0xae, 0xe5, 0xbe, 0xe3, + 0x36, 0x56, 0xd7, 0x57, + 0x77, 0x9f, 0xee, 0xb9, 0xad, 0xc3, 0xe6, 0xdf, 0xa0, 0x7e, 0xc1, 0xed, + 0xe4, 0x77, 0xf1, 0xaf, + 0x89, 0xbb, 0xe1, 0xeb, 0x78, 0x27, 0xfe, 0x02, 0x6b, 0x39, 0xd1, 0xb6, + 0xfb, 0xe3, 0x78, 0xc7, + 0x0d, 0xa9, 0xe7, 0x32, 0x7c, 0x7f, 0x13, 0x57, 0x6d, 0x55, 0xb6, 0x7c, + 0x93, 0x83, 0x52, 0xd3, + 0xaa, 0x70, 0xcc, 0x3e, 0xaf, 0x11, 0xf9, 0x26, 0x2d, 0x09, 0xee, 0xe0, + 0x6e, 0x4c, 0xd8, 0x1e, + 0xa9, 0xfc, 0xe1, 0xb6, 0x03, 0xa8, 0x55, 0x9f, 0x26, 0x66, 0x35, 0x27, + 0x35, 0x2a, 0x28, 0x57, + 0xa3, 0x73, 0xa0, 0x2c, 0x92, 0x22, 0xdf, 0x24, 0xc9, 0x6f, 0x52, 0xa0, + 0x97, 0xa7, 0x9d, 0x03, + 0xe6, 0xbe, 0xd0, 0xfa, 0xe0, 0x5e, 0xca, 0x09, 0xdb, 0x25, 0xb3, 0xbe, + 0x96, 0x56, 0xef, 0x3f, + 0x30, 0x4d, 0xe3, 0x80, 0xc6, 0x64, 0x48, 0xbe, 0x49, 0x0a, 0x7f, 0xd8, + 0xf0, 0x7c, 0x93, 0xbc, + 0x43, 0x1f, 0xdf, 0x6f, 0xb5, 0x76, 0x0d, 0x36, 0x6b, 0x52, 0x07, 0xcd, + 0x7c, 0x93, 0xf4, 0x7e, + 0x13, 0xd5, 0xc6, 0xd2, 0xbe, 0xe5, 0xd8, 0x7e, 0xcf, 0xa1, 0x1f, 0x90, + 0xce, 0xd1, 0x02, 0xf4, + 0x4b, 0x44, 0xd0, 0x8f, 0x7f, 0x1d, 0xbd, 0x82, 0x3e, 0x82, 0xff, 0x27, + 0xed, 0xe2, 0x6e, 0xef, + 0x3c, 0xdb, 0x77, 0x7e, 0xcf, 0x49, 0x5e, 0x5b, 0xcb, 0x35, 0xcc, 0xc5, + 0x5d, 0x76, 0x66, 0x53, + 0xfc, 0x7a, 0x76, 0x66, 0xe7, 0x15, 0x1e, 0x77, 0xef, 0x34, 0xcf, 0xec, + 0xae, 0x59, 0x9e, 0x69, + 0x5d, 0xc7, 0x31, 0xb0, 0xe9, 0x70, 0xdf, 0x0d, 0x6d, 0x67, 0x33, 0x0b, + 0xda, 0x96, 0x32, 0x95, + 0xdd, 0x76, 0xdf, 0x0f, 0xda, 0xce, 0x62, 0x2a, 0x1a, 0x5e, 0xf2, 0x6f, + 0x8b, 0xd9, 0xc0, 0xc5, + 0x6d, 0xb7, 0xf8, 0x4a, 0xba, 0x7f, 0xec, 0x3b, 0xab, 0x73, 0xa2, 0xef, + 0xfa, 0xce, 0x99, 0xde, + 0xd3, 0xf5, 0x37, 0xd9, 0x7d, 0x68, 0x17, 0xbf, 0x4b, 0x20, 0x18, 0x8b, + 0x77, 0xa1, 0xd7, 0xf0, + 0x9f, 0xd1, 0xf4, 0x5c, 0x68, 0xdb, 0x29, 0xd7, 0xe3, 0xa1, 0x75, 0xf0, + 0x33, 0xe6, 0x9b, 0xf4, + 0xdb, 0x1e, 0x87, 0x70, 0x0e, 0x8c, 0x52, 0xef, 0x47, 0x85, 0x06, 0xe1, + 0xaf, 0x04, 0xbf, 0xcd, + 0x7c, 0x93, 0xe6, 0x7e, 0x9f, 0x49, 0x72, 0x5c, 0x32, 0xc5, 0xf5, 0x7c, + 0x8e, 0xe6, 0xa2, 0x57, + 0xa8, 0xdf, 0xcb, 0x3e, 0xac, 0x96, 0xd6, 0x63, 0xca, 0x99, 0xd3, 0xed, + 0x1f, 0x6c, 0xe6, 0x9b, + 0xc4, 0x2b, 0xeb, 0x28, 0xef, 0x48, 0x8a, 0xb1, 0x46, 0x23, 0x63, 0x79, + 0x13, 0x75, 0xf0, 0xcb, + 0xa8, 0x7d, 0xdd, 0x3a, 0x42, 0x6b, 0x1c, 0x61, 0x87, 0x7d, 0x8f, 0x7b, + 0xd3, 0x5a, 0xaa, 0x55, + 0x5f, 0xac, 0x3b, 0x98, 0x74, 0xfa, 0x9a, 0x19, 0x97, 0x3c, 0xc6, 0x38, + 0xde, 0x03, 0xf7, 0x03, + 0x8e, 0x2e, 0x5e, 0x6f, 0xa0, 0x9e, 0x4b, 0xca, 0x7c, 0x13, 0x67, 0xdf, + 0xfe, 0x26, 0xe9, 0xf3, + 0x88, 0x72, 0xbb, 0x3f, 0xf3, 0x68, 0xf5, 0xfe, 0x6b, 0xd0, 0x97, 0xf0, + 0x65, 0xbc, 0x13, 0xee, + 0xe7, 0xdf, 0x57, 0x43, 0xf8, 0xe6, 0xa0, 0x08, 0x60, 0x74, 0x29, 0xb8, + 0xbd, 0xf9, 0x52, 0xce, + 0xd6, 0xfe, 0x23, 0xff, 0x8f, 0x3b, 0x6c, 0x4c, 0x73, 0x6c, 0x89, 0x7f, + 0x6e, 0xd7, 0x75, 0x9e, + 0xaa, 0xce, 0x63, 0xeb, 0x56, 0xc6, 0x57, 0xb3, 0xcb, 0x63, 0xb5, 0x10, + 0x37, 0x4d, 0x63, 0x97, + 0xb4, 0x9c, 0xe3, 0x9d, 0xd0, 0xb6, 0xd6, 0xff, 0xe3, 0xee, 0x4a, 0xcf, + 0x8f, 0xdb, 0xce, 0x20, + 0xf3, 0xf4, 0x25, 0xff, 0x9a, 0x16, 0x1b, 0xb7, 0xb4, 0xed, 0x87, 0xbe, + 0xe2, 0x4e, 0x85, 0xb9, + 0xb9, 0xbd, 0xd8, 0x7f, 0x76, 0xf7, 0x49, 0x3e, 0x77, 0xc3, 0x56, 0xff, + 0xa7, 0x78, 0x97, 0xb0, + 0x97, 0xdf, 0x8b, 0x76, 0xe1, 0x3d, 0x04, 0x6b, 0x3f, 0x40, 0x5b, 0x70, + 0xde, 0x41, 0x8a, 0x59, + 0x1d, 0x3a, 0x66, 0xd4, 0x96, 0xae, 0x8c, 0x96, 0xd6, 0xa7, 0xd5, 0xd7, + 0xa8, 0x1d, 0x46, 0xf0, + 0xd2, 0xda, 0x1c, 0xc8, 0x61, 0x1c, 0xaf, 0xe5, 0x9a, 0x56, 0x64, 0xde, + 0x99, 0xcf, 0xe3, 0xb0, + 0xfd, 0x4d, 0x28, 0x1f, 0xec, 0xd3, 0x70, 0x4d, 0xdb, 0x83, 0xd6, 0x42, + 0xa6, 0xf9, 0x26, 0x62, + 0x86, 0x98, 0xad, 0xef, 0x25, 0x66, 0x35, 0xa5, 0x86, 0x85, 0xd2, 0xd6, + 0xc1, 0x27, 0xb8, 0xee, + 0x08, 0x16, 0xfa, 0x0b, 0xe4, 0x7c, 0x40, 0xe7, 0x4b, 0xaa, 0xf9, 0x6a, + 0xee, 0x41, 0x49, 0xee, + 0x7d, 0xa2, 0x9e, 0x4b, 0xba, 0x3d, 0x37, 0x89, 0x9d, 0x6c, 0xa5, 0xce, + 0x97, 0xb5, 0x5a, 0xf5, + 0x07, 0x65, 0x4c, 0xb2, 0xe7, 0x9b, 0xb8, 0x6a, 0xdd, 0xc4, 0xfe, 0x2d, + 0xce, 0x94, 0x6f, 0x62, + 0x39, 0xbe, 0xbf, 0xe4, 0xe0, 0xed, 0x4d, 0x9b, 0x42, 0x5f, 0x33, 0x71, + 0xbd, 0xc9, 0x9d, 0xb6, + 0x9e, 0x4b, 0x72, 0x1d, 0xfc, 0xe2, 0x43, 0xbf, 0x37, 0xed, 0x40, 0x8d, + 0x8a, 0x12, 0xfe, 0x33, + 0xb4, 0x0f, 0xee, 0xc2, 0x7b, 0xb9, 0xb7, 0xe1, 0x1f, 0x8c, 0xcb, 0xb8, + 0xc2, 0x76, 0x3b, 0x5b, + 0xdc, 0x55, 0xc1, 0x94, 0x74, 0x3b, 0x7d, 0xf3, 0xba, 0x6e, 0xf4, 0x1e, + 0xb9, 0xb1, 0xdc, 0xfb, + 0x78, 0xe4, 0x6a, 0x6e, 0x52, 0x47, 0x8d, 0x6f, 0x76, 0x8f, 0xdb, 0x33, + 0xb9, 0x6b, 0x0a, 0x33, + 0x7e, 0xa3, 0x93, 0xb9, 0xac, 0x7d, 0x8e, 0xf7, 0xd6, 0xd6, 0x1f, 0xfa, + 0x6c, 0xdd, 0x2e, 0xff, + 0xd4, 0x1e, 0x1b, 0x73, 0x69, 0xeb, 0x39, 0xbe, 0x69, 0x8d, 0x9b, 0x98, + 0x53, 0xba, 0xa6, 0xf9, + 0x57, 0x74, 0xcd, 0xf3, 0x55, 0x77, 0x39, 0x3d, 0xae, 0x2e, 0x07, 0x73, + 0x42, 0xc7, 0xa5, 0x3e, + 0x5b, 0x13, 0xc7, 0xfe, 0x81, 0x7f, 0x15, 0xef, 0xc5, 0x7b, 0xd1, 0x5e, + 0x7e, 0x17, 0xda, 0xcd, + 0xbf, 0x8c, 0xfe, 0x84, 0x2f, 0x40, 0x07, 0xe4, 0xf3, 0xb2, 0x16, 0xc7, + 0x8b, 0x06, 0xe6, 0x40, + 0x3a, 0x7d, 0xad, 0x3f, 0xdf, 0x84, 0xdc, 0x9f, 0xe2, 0x2c, 0xf9, 0x26, + 0x96, 0x6a, 0xd5, 0x8f, + 0x62, 0x0e, 0x58, 0xdb, 0x6f, 0x91, 0xe6, 0x9c, 0x16, 0x8e, 0xcc, 0x37, + 0xe9, 0xf3, 0x87, 0xd3, + 0xf9, 0x4f, 0x71, 0xd0, 0x9c, 0x37, 0x4d, 0x89, 0x7c, 0x93, 0x44, 0x0d, + 0x93, 0x14, 0xfe, 0xf0, + 0xd1, 0x68, 0x58, 0x16, 0xe7, 0xc0, 0x81, 0xef, 0xb7, 0xd8, 0x97, 0x6f, + 0x42, 0x9e, 0x47, 0xca, + 0xe3, 0xe8, 0x3d, 0x31, 0xeb, 0x3f, 0x53, 0x5b, 0x37, 0x64, 0xf3, 0x17, + 0xe9, 0x85, 0x6c, 0x46, + 0x3f, 0x60, 0xaa, 0x7a, 0x2e, 0xfd, 0x76, 0x18, 0x99, 0x2f, 0x34, 0x46, + 0x3b, 0xad, 0xbe, 0x96, + 0xf3, 0x31, 0x49, 0xd4, 0xf9, 0x2a, 0x1e, 0xb3, 0xde, 0x9f, 0x1c, 0x97, + 0x6c, 0x31, 0xdf, 0xe4, + 0x80, 0x6a, 0xd5, 0xa7, 0xc0, 0x85, 0x03, 0xaf, 0x69, 0x35, 0xd0, 0x97, + 0x42, 0xaa, 0xbd, 0x93, + 0xb1, 0xcd, 0x9c, 0x6f, 0x92, 0x0f, 0x2c, 0xc6, 0xf1, 0x1e, 0x94, 0xda, + 0x35, 0x1e, 0xfe, 0x77, + 0x68, 0x17, 0x7a, 0x1d, 0xef, 0x87, 0x6f, 0xa3, 0x4f, 0x05, 0x1e, 0x5c, + 0xd8, 0xba, 0x84, 0xbd, + 0xb2, 0xf5, 0xc7, 0xec, 0x35, 0x6d, 0x97, 0xb3, 0x57, 0x77, 0x9c, 0xe5, + 0x2b, 0x6a, 0xfb, 0xa9, + 0xff, 0x1b, 0xcd, 0x0b, 0x6c, 0x6d, 0x97, 0xfa, 0x57, 0x36, 0x2e, 0xf5, + 0xde, 0x40, 0x6c, 0xe1, + 0x9b, 0x5a, 0xaf, 0xf5, 0x37, 0x34, 0x9e, 0xc6, 0x1c, 0xdd, 0xbc, 0xdc, + 0x77, 0x53, 0xd3, 0x35, + 0xde, 0x6b, 0x5b, 0x7e, 0xea, 0x61, 0x5a, 0x17, 0xf9, 0x8e, 0x6e, 0x5d, + 0xc9, 0x94, 0x75, 0x5f, + 0xcc, 0xdc, 0xd8, 0x6e, 0x63, 0x2e, 0x6b, 0x5c, 0xe5, 0xbd, 0xba, 0xed, + 0x3a, 0xef, 0x9a, 0x46, + 0xaf, 0xaf, 0xac, 0xed, 0x3c, 0xdf, 0x3b, 0xfc, 0x3e, 0xf4, 0x06, 0x7e, + 0x0b, 0xed, 0x27, 0x1c, + 0x70, 0x27, 0xbf, 0x13, 0xbd, 0x83, 0xdf, 0x47, 0xb6, 0x54, 0xcf, 0x5c, + 0x2e, 0x63, 0x56, 0xd3, + 0xe8, 0x7a, 0x63, 0xcd, 0x37, 0x49, 0xf0, 0x74, 0x8b, 0xb5, 0xea, 0x73, + 0xb4, 0x0f, 0x2b, 0xdd, + 0x23, 0x27, 0x63, 0xfe, 0xa7, 0x89, 0xeb, 0x0e, 0x7f, 0x65, 0x93, 0xbb, + 0xd6, 0xd9, 0xd8, 0xa7, + 0x15, 0xa6, 0xd8, 0x3f, 0x98, 0xe2, 0xba, 0xd5, 0x39, 0x90, 0xd3, 0x7d, + 0x58, 0xad, 0x69, 0x58, + 0x09, 0x5b, 0x55, 0xcf, 0x67, 0x28, 0x96, 0xd9, 0xb4, 0x42, 0xd6, 0x16, + 0xec, 0xdb, 0xf3, 0x32, + 0x45, 0xfd, 0xe7, 0x74, 0x7a, 0xff, 0x90, 0xb8, 0xe4, 0xe4, 0xda, 0x56, + 0x03, 0xf5, 0x5c, 0x1c, + 0x23, 0xf6, 0x99, 0xfc, 0x3e, 0xe2, 0x78, 0xcd, 0x31, 0x89, 0x67, 0x19, + 0x13, 0x72, 0x5f, 0xa9, + 0x1d, 0x51, 0x19, 0x2b, 0xab, 0xcf, 0x98, 0x6f, 0x62, 0xda, 0x2e, 0x16, + 0xed, 0x88, 0x5c, 0xee, + 0x4d, 0x6b, 0x61, 0x0f, 0x4a, 0xd3, 0x17, 0x4e, 0xf9, 0x42, 0xda, 0x7a, + 0x2e, 0x7d, 0x76, 0x18, + 0xad, 0x5d, 0x43, 0xf3, 0x4d, 0x32, 0xd9, 0x2e, 0xb9, 0xde, 0x9b, 0xd6, + 0xac, 0x5d, 0x33, 0x89, + 0xfd, 0x1b, 0xde, 0x8d, 0xf6, 0xa3, 0x3d, 0x68, 0x1f, 0x78, 0x07, 0xfd, + 0x5e, 0xbe, 0x1d, 0x54, + 0x75, 0x2f, 0xf4, 0x2f, 0xe8, 0x38, 0x82, 0x99, 0xdf, 0xb5, 0x80, 0xa9, + 0xea, 0x28, 0x62, 0xcf, + 0x8a, 0xbf, 0xee, 0xff, 0x5c, 0xd8, 0x8f, 0x16, 0xb7, 0x14, 0xb2, 0x73, + 0xda, 0x4f, 0x67, 0x16, + 0x77, 0x9f, 0xc4, 0x9c, 0xda, 0x3e, 0x87, 0xd9, 0x1a, 0xea, 0x26, 0x5c, + 0x71, 0x8a, 0xff, 0xf2, + 0xf6, 0x1f, 0x79, 0x7e, 0xd8, 0x75, 0x85, 0xe7, 0xdc, 0x9e, 0x29, 0xbe, + 0x23, 0x7b, 0x8e, 0xf7, + 0xd9, 0x7b, 0x96, 0x32, 0x67, 0x76, 0x55, 0xf8, 0x9a, 0x1b, 0xd7, 0xfb, + 0x7e, 0xd0, 0x75, 0x8d, + 0x77, 0x49, 0xfb, 0x39, 0xbe, 0x19, 0x1b, 0x5d, 0x9e, 0x8d, 0x81, 0x5f, + 0x83, 0x9d, 0x98, 0x20, + 0x20, 0xff, 0x06, 0xe1, 0x80, 0xaf, 0x13, 0x0e, 0xf8, 0x17, 0xc4, 0xa4, + 0xea, 0xcb, 0x28, 0x7c, + 0x5e, 0x56, 0xe3, 0x78, 0x33, 0xac, 0x8d, 0x09, 0x3b, 0x2c, 0x54, 0x61, + 0x29, 0xdf, 0x24, 0x11, + 0xc7, 0x3b, 0xee, 0x50, 0xe2, 0x02, 0xa2, 0x75, 0xb4, 0xca, 0xb3, 0x69, + 0x58, 0xb4, 0x9f, 0xc4, + 0xd6, 0xa0, 0x76, 0xc5, 0x40, 0xbe, 0x49, 0x53, 0x7f, 0x7e, 0x46, 0x72, + 0xbe, 0x49, 0xb9, 0x97, + 0x9e, 0x33, 0x63, 0x8d, 0x60, 0x0b, 0x75, 0xd9, 0x47, 0x1f, 0xb3, 0x3a, + 0x86, 0xda, 0x35, 0x3c, + 0x8d, 0xbb, 0xc8, 0x87, 0xb4, 0x0e, 0xfe, 0x58, 0xf4, 0x7e, 0x9a, 0x2b, + 0x4f, 0x71, 0xa1, 0x2c, + 0x5a, 0x9e, 0xbe, 0x9e, 0x0b, 0x19, 0xaf, 0x02, 0xeb, 0x7b, 0x56, 0x5b, + 0x8c, 0xe3, 0xcd, 0x95, + 0xde, 0x3f, 0x0e, 0xf5, 0xd7, 0xa4, 0xce, 0x98, 0x6f, 0x42, 0xf0, 0xd1, + 0xcc, 0x95, 0x97, 0x0b, + 0x32, 0xe6, 0x9b, 0x8c, 0x66, 0x6f, 0xda, 0x83, 0x5a, 0xcf, 0x27, 0xd3, + 0x3e, 0x93, 0x69, 0xea, + 0xb9, 0x8c, 0x1b, 0x59, 0xa3, 0x22, 0x73, 0x8e, 0x8b, 0xd5, 0xda, 0x35, + 0x81, 0x7b, 0xc1, 0x5b, + 0x70, 0x0f, 0x7a, 0x0b, 0xbd, 0x8e, 0xf6, 0xf8, 0xdf, 0x06, 0xbf, 0x55, + 0x57, 0x31, 0xb3, 0xba, + 0x4f, 0xf2, 0x9d, 0xd8, 0x79, 0x42, 0xed, 0x09, 0x5d, 0xc7, 0xd6, 0x2e, + 0x6e, 0xde, 0xe0, 0x7b, + 0x17, 0x7d, 0xc0, 0xbd, 0x0a, 0x3f, 0xc5, 0x2f, 0x85, 0xaf, 0xf3, 0x2f, + 0xec, 0x38, 0x9c, 0x99, + 0xbd, 0x71, 0x4e, 0xdd, 0xbc, 0xae, 0x62, 0x6f, 0x40, 0xfc, 0x2b, 0xf4, + 0xb4, 0xce, 0xf2, 0x3b, + 0x7a, 0xcb, 0x7c, 0x65, 0xbd, 0x65, 0x9e, 0xd2, 0xde, 0x49, 0xde, 0x49, + 0xdd, 0xe5, 0xde, 0x05, + 0xed, 0x37, 0xd6, 0x97, 0xf4, 0x1c, 0xe7, 0x79, 0xb8, 0x69, 0x3a, 0xb1, + 0x8d, 0xc9, 0xfa, 0xdd, + 0xe3, 0x60, 0x26, 0x77, 0x15, 0xf9, 0x6e, 0x56, 0x7e, 0x03, 0x76, 0xf2, + 0x84, 0x67, 0xf2, 0xfb, + 0xd1, 0x3e, 0xbc, 0x0f, 0xed, 0xc7, 0xfb, 0xd1, 0x17, 0x7c, 0x25, 0x3c, + 0x24, 0x71, 0xbc, 0x59, + 0x9e, 0xc7, 0x71, 0x5a, 0x85, 0x99, 0x57, 0x93, 0x1c, 0xbf, 0x96, 0x2a, + 0x2e, 0xd9, 0xac, 0x69, + 0xa5, 0x65, 0xcb, 0x37, 0x19, 0x05, 0x2e, 0x44, 0x2c, 0xc4, 0xeb, 0xc5, + 0xdd, 0x16, 0xf6, 0x77, + 0x2a, 0x06, 0xd4, 0x3e, 0x4a, 0xe2, 0xcc, 0x69, 0xeb, 0xb9, 0x64, 0xcf, + 0x37, 0xb1, 0x68, 0xbf, + 0xcb, 0x63, 0xa9, 0x49, 0x6d, 0x3d, 0x66, 0x35, 0x2b, 0x2e, 0x58, 0xaa, + 0xaf, 0x67, 0xea, 0xfd, + 0x30, 0x9d, 0xbe, 0x46, 0xed, 0x6d, 0xf3, 0x5e, 0x47, 0x69, 0xae, 0x7c, + 0x1a, 0x7d, 0x6d, 0xd4, + 0xba, 0x5e, 0x45, 0x4e, 0xc7, 0xa4, 0x78, 0xb8, 0xed, 0x92, 0x36, 0xdf, + 0x24, 0xa5, 0xbe, 0x86, + 0x46, 0xab, 0xeb, 0x59, 0xf6, 0x03, 0xc6, 0x5c, 0xf5, 0x56, 0x38, 0x4a, + 0x26, 0x3f, 0xa0, 0xe9, + 0x37, 0xd1, 0x68, 0xae, 0x7c, 0x55, 0xfa, 0x7c, 0x93, 0x3e, 0x3b, 0x2c, + 0x7f, 0x54, 0x7b, 0x56, + 0x5b, 0xdb, 0x9b, 0xf6, 0x78, 0xf1, 0xaf, 0xe8, 0x55, 0x4c, 0x31, 0x69, + 0x2f, 0xde, 0xc7, 0xed, + 0xc6, 0xaf, 0xa3, 0xbd, 0x70, 0x8f, 0xf8, 0x0a, 0x78, 0x59, 0x7c, 0x95, + 0x7b, 0x35, 0xf0, 0x12, + 0xfb, 0x96, 0xf8, 0x19, 0xd8, 0xcf, 0xed, 0x81, 0xaf, 0xa3, 0x57, 0xd1, + 0x87, 0xfc, 0xe7, 0xe0, + 0x85, 0xc0, 0x53, 0xdc, 0x53, 0xe2, 0x33, 0xec, 0xcf, 0x02, 0x4f, 0x70, + 0xbf, 0x20, 0x4c, 0xee, + 0xd7, 0xfc, 0xcf, 0xc1, 0xdd, 0x5a, 0xaf, 0x7f, 0xb3, 0x72, 0x37, 0xbb, + 0x31, 0xd4, 0xc3, 0x6d, + 0x0a, 0x76, 0xb3, 0x0f, 0x68, 0x0f, 0xfb, 0x9b, 0x8c, 0x07, 0xd9, 0x3d, + 0xf2, 0x46, 0xae, 0x23, + 0xd4, 0xc9, 0x76, 0x12, 0x9e, 0xd8, 0x19, 0x6c, 0xf6, 0x6f, 0x15, 0xf7, + 0xc1, 0xdd, 0x04, 0xff, + 0x5e, 0xe7, 0xf7, 0x60, 0x7a, 0xdc, 0xc5, 0xef, 0x41, 0x5f, 0x0a, 0x22, + 0x3a, 0x10, 0x5f, 0x78, + 0x99, 0xc5, 0x5a, 0x77, 0xa3, 0xd6, 0xb6, 0xd3, 0xd5, 0x73, 0x49, 0xda, + 0xdf, 0x24, 0xa5, 0xbe, + 0x36, 0xaa, 0x39, 0x90, 0x42, 0xd7, 0x4b, 0x31, 0x07, 0xa8, 0xbd, 0x90, + 0xcd, 0x96, 0xa6, 0x1a, + 0x16, 0xad, 0xcb, 0x94, 0x7a, 0x3d, 0x1e, 0x9a, 0x6f, 0x92, 0x72, 0xff, + 0xe0, 0xe4, 0xb8, 0x64, + 0x72, 0xce, 0x5c, 0xd6, 0xaa, 0xcf, 0x65, 0x9d, 0x96, 0x01, 0x8e, 0x32, + 0xca, 0xbd, 0x69, 0x87, + 0x8e, 0x45, 0x8a, 0x3a, 0xf8, 0x2d, 0x19, 0xf4, 0xb5, 0xcc, 0x7a, 0x7f, + 0x0a, 0x5d, 0xef, 0xe0, + 0xee, 0x4d, 0x3b, 0xc4, 0x76, 0xa1, 0xf7, 0x35, 0x5c, 0x31, 0x32, 0xdf, + 0xa4, 0x31, 0xb1, 0x97, + 0x72, 0xb2, 0x3f, 0x3c, 0x91, 0xe3, 0x92, 0x8d, 0x2f, 0x58, 0x8c, 0xd7, + 0xd3, 0xca, 0xd9, 0xab, + 0xc5, 0x2f, 0xe0, 0xb7, 0xf0, 0x4f, 0xe8, 0x2f, 0xe8, 0x4b, 0xf4, 0x1b, + 0xf4, 0x05, 0xfa, 0x0c, + 0x7d, 0x8a, 0xbe, 0x80, 0x9f, 0xa2, 0x8f, 0xc9, 0xab, 0x0f, 0x79, 0xfa, + 0xdb, 0xaf, 0xf0, 0x67, + 0xe8, 0x13, 0xfc, 0x21, 0xfa, 0x88, 0xff, 0x90, 0x1c, 0x3f, 0x45, 0x1f, + 0xa1, 0xf7, 0xf1, 0xfb, + 0xf8, 0x57, 0xe4, 0xf8, 0x2b, 0xf4, 0x39, 0xfc, 0x0d, 0xfa, 0x03, 0xfc, + 0x0b, 0xfa, 0x33, 0xfc, + 0x3d, 0xfa, 0x35, 0x24, 0xff, 0x02, 0xdf, 0x45, 0xef, 0xc2, 0x37, 0xf8, + 0xd7, 0xe1, 0x7e, 0xfe, + 0x5d, 0xf8, 0x26, 0xff, 0x16, 0xdc, 0x47, 0x5e, 0xef, 0x21, 0x6d, 0x1f, + 0x4f, 0x63, 0x86, 0xf7, + 0x91, 0xf7, 0x5f, 0x27, 0xf8, 0xb1, 0x8b, 0xbe, 0x47, 0xec, 0xc7, 0x3d, + 0xe8, 0x15, 0xfe, 0x65, + 0xf4, 0x2a, 0xbf, 0x13, 0xed, 0x24, 0xc7, 0x97, 0xf8, 0x97, 0xd0, 0xcb, + 0xfc, 0x2b, 0xe4, 0xf8, + 0x3c, 0x7a, 0x81, 0xbc, 0x7e, 0x01, 0xbf, 0x40, 0x8e, 0x3f, 0x87, 0x2f, + 0xf2, 0x2f, 0xc2, 0x9f, + 0xd3, 0xa3, 0xf0, 0x22, 0x7a, 0x41, 0x78, 0x1e, 0x3f, 0x2f, 0x3c, 0x8b, + 0xc8, 0xff, 0xd1, 0x73, + 0xf8, 0x67, 0xe4, 0xfd, 0x57, 0xd0, 0xc7, 0xf0, 0x1d, 0xfc, 0x26, 0x7c, + 0x17, 0x7f, 0x00, 0x3f, + 0xc4, 0xf4, 0xea, 0xde, 0x06, 0x1f, 0xf3, 0x9f, 0x70, 0x1f, 0xf2, 0xbf, + 0x02, 0x9f, 0xf2, 0x1f, + 0x72, 0x1f, 0xe1, 0x0f, 0xb9, 0x37, 0xf1, 0x5b, 0xe8, 0x6d, 0x4c, 0xfe, + 0x8f, 0xdf, 0x26, 0x9f, + 0xfd, 0x10, 0x92, 0xf7, 0xc0, 0x07, 0xf8, 0x03, 0xf0, 0x39, 0x7e, 0x87, + 0xd8, 0xcc, 0xfb, 0xe1, + 0x7b, 0xf8, 0xd7, 0xdc, 0x27, 0xf8, 0x63, 0x40, 0xfa, 0xc7, 0x7d, 0x8c, + 0x3f, 0xe2, 0x3e, 0xc7, + 0x9f, 0x80, 0xf7, 0xc9, 0x7b, 0x1f, 0xe1, 0x37, 0xe0, 0xc7, 0xf8, 0x73, + 0xee, 0xd7, 0xf8, 0x57, + 0xdc, 0x67, 0xf8, 0x77, 0xe4, 0xf3, 0xef, 0xc1, 0xd7, 0xd0, 0x2e, 0xd3, + 0xff, 0xb1, 0x9b, 0xe2, + 0x1f, 0x7a, 0x5d, 0xd8, 0x87, 0x76, 0x0b, 0xef, 0xe0, 0xe5, 0xfc, 0x65, + 0xe8, 0x0a, 0xfe, 0x52, + 0x74, 0x09, 0x7f, 0x09, 0xfa, 0x11, 0xff, 0x23, 0xf4, 0x43, 0xf9, 0x4a, + 0xee, 0xc7, 0xca, 0x25, + 0xec, 0x0f, 0xf8, 0x4b, 0xe1, 0x85, 0xfc, 0x45, 0xf0, 0x07, 0xfc, 0x85, + 0xf0, 0x42, 0xe1, 0x42, + 0x78, 0xbe, 0x70, 0x01, 0xba, 0x80, 0x3f, 0x0f, 0x5e, 0xc0, 0x5f, 0x80, + 0xce, 0xe1, 0xcf, 0x85, + 0x17, 0x69, 0x97, 0xf8, 0x2f, 0x12, 0xcf, 0x06, 0x67, 0xf3, 0x67, 0xc3, + 0xb3, 0xf8, 0xd3, 0xe0, + 0x59, 0xc2, 0x39, 0xe8, 0x4c, 0xf3, 0xf5, 0x59, 0xe8, 0x0c, 0xf3, 0x78, + 0x06, 0x3c, 0x83, 0xfc, + 0xfb, 0xc5, 0xda, 0xf9, 0xfe, 0x33, 0xc8, 0xeb, 0xd3, 0x30, 0x69, 0xfc, + 0x29, 0xe8, 0x64, 0x7e, + 0x31, 0x3a, 0x55, 0x38, 0x05, 0x9d, 0x2e, 0x2c, 0x46, 0x8b, 0xf9, 0x93, + 0xe1, 0x49, 0xc2, 0x49, + 0xe8, 0x24, 0xe5, 0x74, 0xf6, 0x4c, 0xe5, 0x44, 0xf6, 0x04, 0xfe, 0x44, + 0x74, 0x0a, 0x7f, 0x1c, + 0x3c, 0x9e, 0x3f, 0x0e, 0x1d, 0xcf, 0x2f, 0x42, 0x8b, 0x68, 0x13, 0x8e, + 0x87, 0xc7, 0x4b, 0x27, + 0x81, 0x53, 0x94, 0xc5, 0xec, 0xa9, 0xfa, 0xe9, 0xcc, 0xa9, 0xfa, 0xa9, + 0xcc, 0x29, 0xfa, 0xc9, + 0xcc, 0x62, 0xfd, 0x14, 0xff, 0x62, 0xf5, 0x6c, 0x76, 0x96, 0x56, 0xec, + 0x1f, 0x12, 0x97, 0x4c, + 0xe3, 0x78, 0xe3, 0x56, 0xe6, 0x80, 0xcb, 0x42, 0x4d, 0xab, 0x02, 0x48, + 0xf1, 0x37, 0x6b, 0xee, + 0x1b, 0xc1, 0x22, 0x5a, 0xab, 0x34, 0xbb, 0xb6, 0xed, 0xae, 0xaf, 0x0c, + 0xd9, 0xbd, 0x99, 0xf3, + 0x4d, 0x8a, 0x58, 0x1a, 0x73, 0x98, 0x2d, 0x0f, 0xf7, 0x10, 0xef, 0xc3, + 0x3a, 0x04, 0xff, 0xac, + 0xc7, 0xf1, 0x66, 0x18, 0x93, 0xbe, 0xb8, 0xe4, 0x54, 0xb9, 0xf2, 0x43, + 0xf6, 0x0f, 0xa6, 0xba, + 0x29, 0xe1, 0x5c, 0xb9, 0x8c, 0x0f, 0xb0, 0x1e, 0xdf, 0x9f, 0xbd, 0x6e, + 0x47, 0x5e, 0x5f, 0xae, + 0xd1, 0x90, 0x7c, 0x93, 0xd6, 0xe1, 0x6b, 0x5c, 0x89, 0xd7, 0xb4, 0x5d, + 0xd4, 0xbc, 0x2c, 0xb6, + 0x8b, 0x95, 0xf8, 0x80, 0x3c, 0xf4, 0x23, 0x61, 0x37, 0xfa, 0x0e, 0x7f, + 0x87, 0xff, 0x0c, 0xbe, + 0xe2, 0xff, 0x49, 0x7e, 0xbe, 0xc2, 0x7f, 0xe7, 0xff, 0xc1, 0x7f, 0xc5, + 0x7f, 0x0d, 0xbf, 0xc2, + 0x5f, 0xa1, 0x7f, 0xe1, 0x7f, 0xe2, 0xaf, 0xf1, 0x57, 0xf8, 0x1b, 0xfc, + 0xdf, 0xe8, 0x1b, 0xfc, + 0x35, 0x69, 0xdf, 0xe0, 0x6f, 0xc9, 0xef, 0x5f, 0xe3, 0x7f, 0xe0, 0x7f, + 0xe1, 0x6f, 0xd0, 0xb7, + 0x7d, 0xed, 0xdf, 0xf8, 0x3f, 0xf8, 0xdf, 0xe4, 0x33, 0xdf, 0x26, 0x3e, + 0x83, 0xbe, 0x26, 0xed, + 0x1b, 0x81, 0xfc, 0xce, 0x93, 0xdf, 0x85, 0x7f, 0x23, 0xf2, 0x17, 0xe4, + 0x33, 0xff, 0x36, 0xdb, + 0x7f, 0xf8, 0xff, 0xa0, 0x7f, 0xf3, 0xdf, 0x92, 0x7f, 0xfb, 0x0f, 0xfa, + 0x0f, 0xfe, 0x0f, 0x39, + 0xfb, 0xff, 0xa0, 0xff, 0xc5, 0xf4, 0x1a, 0xfe, 0xb7, 0xef, 0xf8, 0x5d, + 0xff, 0x71, 0x14, 0x3f, + 0xff, 0x0d, 0xc9, 0x15, 0x99, 0xe7, 0xfd, 0x96, 0x5c, 0x09, 0xb9, 0x0e, + 0xfe, 0x6b, 0xf2, 0xff, + 0xc4, 0xb5, 0x7c, 0x05, 0xe9, 0xf9, 0xbf, 0x35, 0xfb, 0xf0, 0x2d, 0xfa, + 0x6f, 0xb3, 0xfd, 0x9b, + 0x1e, 0xc9, 0x2b, 0xda, 0xab, 0xef, 0xf0, 0xff, 0x5f, 0x7e, 0xfe, 0x6f, + 0xd8, 0xcf, 0xff, 0x0e, + 0xf9, 0x79, 0x1b, 0x63, 0x34, 0x35, 0xea, 0xaa, 0x4f, 0x68, 0x4a, 0xc5, + 0x4c, 0x91, 0x5e, 0xd6, + 0x3f, 0x07, 0x50, 0x66, 0x9e, 0xee, 0xb6, 0x30, 0x07, 0x0a, 0x21, 0xad, + 0x79, 0x6b, 0xa5, 0xbe, + 0x9e, 0x2b, 0x32, 0xca, 0xdc, 0xb7, 0x6c, 0xf9, 0x26, 0xc1, 0x84, 0x0e, + 0x93, 0xce, 0x1f, 0x6e, + 0x95, 0xa7, 0x5b, 0xad, 0xbf, 0x6c, 0xc5, 0xe7, 0xd5, 0x77, 0xdd, 0x28, + 0xa7, 0x71, 0xbc, 0x14, + 0x8b, 0xf4, 0x02, 0x26, 0xd3, 0xfe, 0xc1, 0x34, 0x7e, 0xcd, 0xac, 0xf3, + 0x95, 0x65, 0x6f, 0xc6, + 0xef, 0x63, 0x6f, 0xda, 0x11, 0xba, 0xde, 0x81, 0xe4, 0x9b, 0x58, 0xf0, + 0x85, 0xcf, 0x43, 0xbf, + 0x30, 0xe7, 0xfe, 0xbf, 0x84, 0x8d, 0x7c, 0xbd, 0x26, 0x4a, 0x92, 0x1a, + 0x90, 0x64, 0x55, 0x25, + 0x47, 0x51, 0x0a, 0x28, 0xa2, 0xc0, 0x2b, 0x12, 0x2f, 0x68, 0xb2, 0xa0, + 0x69, 0xaa, 0x20, 0x69, + 0x01, 0x21, 0xa0, 0x06, 0x04, 0x51, 0x85, 0x58, 0xd0, 0x30, 0xe6, 0x34, + 0x0e, 0x23, 0x0d, 0xf3, + 0xbc, 0x8a, 0x04, 0xa8, 0x41, 0xd2, 0x78, 0x01, 0xab, 0x9c, 0x00, 0x54, + 0x5e, 0x60, 0x55, 0x46, + 0x80, 0x0a, 0x12, 0x59, 0x85, 0x13, 0x39, 0x85, 0xbc, 0x27, 0x43, 0x01, + 0xcb, 0xd8, 0x3c, 0xf2, + 0xe4, 0xc8, 0xcb, 0x40, 0x84, 0x32, 0x14, 0x05, 0x19, 0x61, 0x10, 0x20, + 0x7f, 0x26, 0x93, 0x37, + 0x65, 0x01, 0x63, 0x99, 0xc7, 0xf4, 0x3d, 0xd8, 0xf7, 0x1a, 0xcb, 0x1c, + 0xe6, 0xc8, 0x6b, 0xf2, + 0x1e, 0xc2, 0xb2, 0x88, 0x44, 0x99, 0x47, 0x01, 0x25, 0x80, 0x45, 0x45, + 0xc2, 0xb2, 0x22, 0x63, + 0x55, 0x93, 0xb1, 0xac, 0x89, 0x98, 0x5c, 0x1b, 0xd6, 0x14, 0x15, 0x6b, + 0xaa, 0x8a, 0x15, 0x55, + 0xc1, 0x92, 0x2a, 0xe3, 0x00, 0x69, 0xba, 0xaa, 0x91, 0xdf, 0x03, 0x58, + 0x26, 0x47, 0x43, 0x51, + 0xc8, 0xdf, 0xa8, 0x58, 0x25, 0x47, 0x85, 0xfc, 0x1e, 0x54, 0x62, 0x38, + 0x2a, 0xc7, 0x51, 0x54, + 0x36, 0x50, 0x47, 0xe0, 0x1e, 0xbc, 0x45, 0xba, 0x1b, 0x6f, 0x0b, 0x6c, + 0xc6, 0x1b, 0xa5, 0x5e, + 0xbc, 0x59, 0xba, 0x1b, 0xdd, 0x4d, 0x5e, 0xdf, 0x2d, 0x6d, 0xc2, 0xf7, + 0x04, 0xb6, 0xa0, 0x2d, + 0xd2, 0x56, 0xbc, 0x4d, 0x7a, 0x10, 0x3f, 0x10, 0xd8, 0x86, 0xef, 0x93, + 0xee, 0xc7, 0xf7, 0x91, + 0xe3, 0x36, 0x89, 0xb6, 0xfb, 0xf0, 0xbd, 0xd2, 0xbd, 0x78, 0xbb, 0xb4, + 0x1d, 0xdf, 0x2b, 0xde, + 0x8f, 0xef, 0x17, 0xc9, 0xe7, 0xc8, 0xf1, 0x01, 0xf1, 0x21, 0xf4, 0x80, + 0xb8, 0x03, 0x3d, 0x22, + 0x3e, 0x8c, 0x1e, 0x16, 0x77, 0x08, 0x8f, 0x8a, 0x8f, 0x90, 0xf6, 0xa8, + 0xf0, 0xa0, 0xf8, 0xa0, + 0xf9, 0xfa, 0x31, 0xf2, 0xde, 0x13, 0xe2, 0x13, 0xc2, 0xe3, 0xa4, 0x3d, + 0x21, 0x3e, 0x2d, 0x3c, + 0x23, 0x3e, 0x29, 0x3e, 0x2d, 0x3d, 0x43, 0x7e, 0x9e, 0x93, 0x9e, 0x11, + 0x9f, 0x93, 0x9e, 0x95, + 0x7e, 0x26, 0x3c, 0x27, 0xbd, 0x20, 0xbc, 0x20, 0xbd, 0x28, 0xbc, 0x20, + 0x3e, 0x2f, 0xbc, 0x44, + 0x8f, 0xa4, 0xfd, 0x82, 0xbc, 0x7e, 0x9e, 0x1c, 0x5f, 0x11, 0x5f, 0x15, + 0x76, 0x0a, 0xaf, 0x92, + 0xff, 0xbf, 0x22, 0xbd, 0x4c, 0x8e, 0xbb, 0x84, 0x5d, 0xe2, 0x6b, 0xc2, + 0x6e, 0xf1, 0x75, 0x61, + 0xb7, 0xb4, 0x47, 0xd8, 0x27, 0xee, 0x15, 0xf6, 0x0a, 0x6f, 0x9a, 0xed, + 0x0d, 0x61, 0xbf, 0xf0, + 0x16, 0xff, 0xb6, 0xf0, 0x96, 0xf0, 0x8e, 0x40, 0xff, 0xff, 0x9e, 0xf0, + 0x3e, 0xf9, 0xf9, 0x80, + 0x1c, 0xdf, 0xe3, 0xdf, 0x43, 0xbf, 0x14, 0xde, 0x47, 0x1f, 0xf0, 0x1f, + 0x20, 0xf2, 0x1b, 0x7e, + 0x97, 0xff, 0x98, 0xac, 0x61, 0xff, 0xc1, 0x6f, 0x0b, 0x57, 0x40, 0x27, + 0xcd, 0x07, 0x32, 0xd7, + 0x5b, 0x0b, 0xf9, 0x26, 0xd4, 0x7e, 0xb7, 0xa2, 0xeb, 0x89, 0x76, 0x40, + 0x75, 0x90, 0xac, 0x75, + 0xdd, 0x8c, 0x4a, 0x9f, 0x2b, 0x6b, 0x2d, 0xa5, 0xf4, 0x1a, 0x56, 0x72, + 0x1d, 0x7c, 0x67, 0x3f, + 0x17, 0xea, 0xf7, 0x15, 0xa4, 0xf1, 0x87, 0x7f, 0x1f, 0xfb, 0xb0, 0x26, + 0xc6, 0xa4, 0x00, 0xe6, + 0xae, 0xce, 0xd7, 0x48, 0xbd, 0x3f, 0xf5, 0xfe, 0xc1, 0xd6, 0xf2, 0x4d, + 0x72, 0x3e, 0x26, 0x56, + 0xf7, 0xb0, 0x48, 0xa3, 0xf7, 0x27, 0xfb, 0x4d, 0x5c, 0x2d, 0x69, 0xf2, + 0x4d, 0x92, 0xeb, 0xe0, + 0x67, 0xf1, 0x85, 0x97, 0x0b, 0x1c, 0xfe, 0x86, 0x27, 0x8c, 0x80, 0x7f, + 0x11, 0xf3, 0xda, 0x7a, + 0x11, 0x85, 0x81, 0xc4, 0xa9, 0x04, 0xa1, 0x48, 0xe3, 0x54, 0xbf, 0xec, + 0x55, 0xbd, 0x22, 0xd0, + 0x81, 0xc8, 0x18, 0xac, 0xe8, 0x37, 0x18, 0xa1, 0x3e, 0xc8, 0x8a, 0xc0, + 0xa8, 0x17, 0x7c, 0x46, + 0x3d, 0xbf, 0xc1, 0xa8, 0xe5, 0xeb, 0x8c, 0x1a, 0x7e, 0xad, 0xb1, 0x96, + 0xb4, 0xf5, 0xe2, 0xda, + 0xe0, 0x6a, 0xb1, 0xc6, 0x58, 0x27, 0xae, 0x09, 0xae, 0x15, 0x37, 0x18, + 0x35, 0xe2, 0x1a, 0xe3, + 0x2e, 0x71, 0xb5, 0x7e, 0x17, 0x7f, 0xa7, 0xb1, 0x8a, 0xbf, 0x43, 0x5f, + 0x89, 0xef, 0x50, 0xd7, + 0x88, 0xeb, 0xd4, 0x3b, 0xc5, 0xbb, 0xd4, 0x55, 0xc2, 0x2a, 0xf5, 0x4e, + 0xbc, 0x52, 0x5d, 0x81, + 0xef, 0x52, 0xef, 0xe4, 0xd7, 0xa8, 0x2b, 0xf1, 0x32, 0x75, 0x25, 0xbf, + 0x5c, 0x5d, 0xc5, 0xaf, + 0x52, 0x57, 0xf0, 0xcb, 0xd4, 0xdb, 0xf9, 0x95, 0xea, 0xad, 0xf4, 0x88, + 0x6f, 0x57, 0x97, 0xf1, + 0xb7, 0xa9, 0x37, 0xf1, 0xb7, 0xa8, 0x37, 0xe1, 0xa5, 0xea, 0x32, 0x74, + 0xb3, 0xba, 0x14, 0xdf, + 0xaa, 0x2e, 0x47, 0x2b, 0xb4, 0xdb, 0xd0, 0xcd, 0xda, 0x2d, 0xe8, 0x36, + 0x72, 0x5c, 0x66, 0x2c, + 0xc3, 0xb7, 0x19, 0x2b, 0xf0, 0x72, 0x63, 0x15, 0x5e, 0x69, 0xdc, 0x46, + 0xda, 0x2a, 0xf2, 0xfb, + 0xcd, 0xf8, 0x26, 0x6d, 0x29, 0x26, 0x9f, 0xc1, 0xb7, 0x6a, 0xb7, 0xe2, + 0x65, 0xe4, 0xb8, 0x54, + 0xbf, 0x85, 0x5f, 0x6a, 0xdc, 0xc4, 0x2f, 0xd5, 0x6f, 0xc5, 0x37, 0xea, + 0xd7, 0xe3, 0x5b, 0xf4, + 0x9b, 0xd1, 0x52, 0xfd, 0x36, 0x74, 0x3b, 0x69, 0xb7, 0xe9, 0xcb, 0xc9, + 0x7b, 0x4b, 0xf1, 0x6d, + 0xea, 0x75, 0xe8, 0x26, 0x6d, 0x09, 0xfa, 0x89, 0xfa, 0x13, 0xf4, 0x53, + 0xfd, 0x5a, 0x74, 0x83, + 0xbe, 0x04, 0x5d, 0xab, 0x5f, 0x87, 0xae, 0xd3, 0xaf, 0x27, 0xaf, 0x6f, + 0x24, 0x7f, 0x73, 0x3b, + 0x5a, 0x6a, 0x5c, 0x8b, 0xaf, 0x27, 0x7f, 0x7f, 0xa3, 0x7e, 0x13, 0xba, + 0x49, 0xbf, 0x89, 0x1c, + 0x6f, 0xe4, 0x6f, 0xd0, 0xaf, 0x25, 0xed, 0x3a, 0xfe, 0x06, 0xed, 0x5a, + 0x7e, 0x89, 0x76, 0x15, + 0x69, 0xd7, 0xf1, 0x3f, 0xd5, 0xae, 0xc6, 0xd7, 0x69, 0x37, 0xe2, 0x1b, + 0x48, 0x5b, 0xa2, 0xfd, + 0x54, 0x5c, 0xa2, 0x2f, 0x11, 0x6f, 0xd0, 0x6f, 0x10, 0xaf, 0x53, 0xaf, + 0x15, 0xae, 0x57, 0xaf, + 0x27, 0xc7, 0x25, 0xc2, 0x8d, 0xea, 0x12, 0x71, 0x89, 0x46, 0x5e, 0x6b, + 0xd7, 0x8a, 0x37, 0x68, + 0x37, 0x8b, 0xb7, 0xe9, 0x4b, 0xc9, 0xf1, 0x06, 0xd2, 0x6e, 0x15, 0x6f, + 0x25, 0xaf, 0x6f, 0xd1, + 0x97, 0x89, 0xcb, 0xf5, 0xdb, 0xc5, 0xdb, 0xb5, 0xdb, 0xc5, 0x95, 0xda, + 0x32, 0x91, 0xf4, 0x45, + 0x24, 0x7d, 0x11, 0x97, 0x92, 0x23, 0x7d, 0xef, 0x36, 0xe5, 0x56, 0x61, + 0xa9, 0x72, 0x9d, 0x70, + 0x33, 0x39, 0x2e, 0x53, 0x96, 0x91, 0xe3, 0xcd, 0xe2, 0x2a, 0x85, 0xbe, + 0x7f, 0x87, 0xb8, 0x52, + 0x59, 0x29, 0xac, 0x51, 0x56, 0x89, 0xcb, 0x95, 0xdb, 0x85, 0xe5, 0xca, + 0x0a, 0xf2, 0xfb, 0x6a, + 0x61, 0xb5, 0xb2, 0x5a, 0xbc, 0x43, 0x59, 0x2b, 0xd6, 0x28, 0xf5, 0x62, + 0x9d, 0xb2, 0x41, 0x58, + 0x2d, 0xd7, 0xa2, 0x1a, 0x79, 0x1d, 0xae, 0x91, 0xd7, 0xe0, 0x3b, 0x8c, + 0x35, 0xf8, 0x4e, 0x65, + 0x25, 0xee, 0xe5, 0x7f, 0x8b, 0x29, 0x2b, 0xbe, 0x57, 0x3c, 0x12, 0x50, + 0x5f, 0x83, 0x59, 0x23, + 0x9d, 0x62, 0x07, 0xf5, 0x67, 0x35, 0x56, 0xd6, 0x25, 0x72, 0x22, 0x87, + 0xe5, 0xfd, 0x53, 0xff, + 0x3b, 0xd5, 0xf5, 0xb2, 0xc6, 0xb2, 0x3b, 0xb8, 0xca, 0x68, 0xa9, 0x27, + 0xab, 0x9f, 0x8d, 0xf0, + 0x0e, 0xa7, 0x91, 0x93, 0xfd, 0x1a, 0x90, 0x99, 0x87, 0xd6, 0x58, 0x51, + 0x9b, 0xa9, 0x9e, 0x0b, + 0xc5, 0xf5, 0x6c, 0xda, 0x76, 0xbf, 0x2f, 0x3c, 0x97, 0x31, 0xab, 0x09, + 0x5e, 0x54, 0x08, 0x0e, + 0xe6, 0xde, 0xb4, 0xc3, 0xeb, 0xb9, 0x24, 0xfc, 0x26, 0xc3, 0x62, 0xac, + 0xd3, 0xe4, 0x9b, 0x1c, + 0x60, 0xad, 0xfa, 0x83, 0x58, 0xbb, 0x26, 0xa1, 0xf7, 0x3b, 0xb2, 0xe4, + 0x9b, 0x14, 0x1a, 0xe9, + 0x73, 0x10, 0xf3, 0xf0, 0x4f, 0xf0, 0xaf, 0xf8, 0xef, 0xf8, 0xef, 0x84, + 0x0f, 0x70, 0x83, 0xb6, + 0x46, 0xf4, 0xeb, 0x86, 0x20, 0xeb, 0x92, 0xa0, 0xc8, 0x62, 0x20, 0xa0, + 0xe0, 0x00, 0x50, 0xc4, + 0x80, 0x28, 0x83, 0x80, 0x48, 0x5e, 0x43, 0x55, 0x0c, 0x20, 0x1d, 0x89, + 0xbc, 0x2e, 0x90, 0x86, + 0x44, 0x48, 0x30, 0xd1, 0xa7, 0xb3, 0x22, 0xab, 0x73, 0xa2, 0x4f, 0xf3, + 0x88, 0x5e, 0xad, 0x5e, + 0xf0, 0x68, 0x5e, 0x72, 0xf4, 0x8a, 0x8c, 0xe6, 0x13, 0x58, 0x0d, 0x09, + 0x9c, 0xe6, 0x17, 0x3c, + 0xba, 0x8f, 0x70, 0xc4, 0x3a, 0x5c, 0xab, 0x7b, 0xb0, 0x5f, 0xf1, 0x0b, + 0x3e, 0x85, 0x60, 0xa7, + 0xea, 0x11, 0x3c, 0x8a, 0x97, 0xf7, 0x29, 0x75, 0xbc, 0x47, 0xad, 0xc7, + 0x35, 0x6a, 0x9d, 0xb0, + 0x56, 0x59, 0x27, 0xac, 0x57, 0xea, 0x84, 0x3a, 0xf2, 0x6f, 0x1b, 0xd4, + 0x1a, 0xa1, 0x86, 0xfc, + 0xbe, 0x4e, 0x59, 0x23, 0x6c, 0x20, 0x9f, 0xdf, 0xa0, 0xac, 0x35, 0xdb, + 0x7a, 0xa5, 0x16, 0xaf, + 0x51, 0xd6, 0xe1, 0x3a, 0xf2, 0x37, 0xb5, 0xda, 0x06, 0x54, 0xa7, 0xd5, + 0xa1, 0x3a, 0xb5, 0x06, + 0xaf, 0x51, 0xd7, 0xa2, 0x75, 0x6a, 0x0d, 0xaa, 0x57, 0xeb, 0x91, 0x47, + 0xdd, 0x80, 0x37, 0x90, + 0xf3, 0x6d, 0x50, 0xd7, 0xd1, 0x7f, 0x43, 0xab, 0x95, 0x35, 0x78, 0x9d, + 0xb2, 0x16, 0xd7, 0x2a, + 0x6b, 0xf9, 0x35, 0xda, 0x06, 0x91, 0xbc, 0x2f, 0xac, 0x55, 0xd7, 0x08, + 0xeb, 0xc9, 0x9c, 0x5f, + 0xad, 0xd4, 0x90, 0xf7, 0x37, 0xa0, 0x5a, 0xad, 0x06, 0xad, 0xd7, 0x6a, + 0xd1, 0x06, 0xbd, 0x1e, + 0xb3, 0xe4, 0xf5, 0x06, 0x6d, 0x35, 0x5a, 0x47, 0xbe, 0x7b, 0xbd, 0xbe, + 0x0e, 0x6f, 0xd0, 0x37, + 0x90, 0xf7, 0x6b, 0x50, 0x9d, 0x5e, 0x87, 0xea, 0x35, 0x2f, 0xf9, 0x77, + 0x7a, 0x24, 0xfd, 0x21, + 0x9f, 0xab, 0xd1, 0xc9, 0xf9, 0x34, 0x1f, 0xb9, 0xfe, 0x5a, 0x61, 0x83, + 0x46, 0xae, 0x59, 0x5b, + 0x23, 0xd4, 0x91, 0xe3, 0x6a, 0x7d, 0xb5, 0xb0, 0x41, 0x27, 0x7d, 0xd2, + 0xd7, 0x93, 0x7e, 0xaf, + 0xc7, 0x35, 0x7a, 0x1d, 0xae, 0xd3, 0x6b, 0xf8, 0x0d, 0xfa, 0x5a, 0xa1, + 0x56, 0xaf, 0x15, 0xd6, + 0x90, 0xfe, 0x91, 0x3e, 0xf2, 0xeb, 0x49, 0xab, 0xd1, 0xe8, 0xfb, 0xf5, + 0x42, 0xbd, 0x5e, 0x43, + 0x9a, 0x97, 0xf7, 0x92, 0xf1, 0xf2, 0x93, 0xef, 0xf5, 0x92, 0xef, 0xf5, + 0xe9, 0x5e, 0x32, 0x7e, + 0x5e, 0x9e, 0xd5, 0x11, 0x8f, 0x74, 0x20, 0x30, 0xba, 0x4f, 0xa8, 0xd3, + 0x3d, 0x3c, 0xa7, 0x93, + 0x71, 0x24, 0x8d, 0xd3, 0x59, 0xc1, 0xab, 0x33, 0xb0, 0x56, 0xaf, 0x81, + 0x3e, 0x72, 0xe4, 0x74, + 0x0e, 0x01, 0xd2, 0x07, 0x4e, 0x63, 0x11, 0xa3, 0xf9, 0x79, 0xa4, 0x41, + 0x9e, 0xd7, 0x39, 0x9e, + 0x21, 0x47, 0xfa, 0x1a, 0xeb, 0x80, 0x7c, 0x0f, 0xe4, 0xa1, 0x2e, 0x0a, + 0xa2, 0x2e, 0x0b, 0xaa, + 0xae, 0x10, 0x5e, 0xcf, 0x13, 0x9e, 0x2c, 0x10, 0x2e, 0xcc, 0xf3, 0x01, + 0x4d, 0xe0, 0x91, 0x8a, + 0xd0, 0x1d, 0xaa, 0x97, 0x7f, 0x9a, 0xff, 0x1a, 0x7f, 0x8d, 0x7f, 0x87, + 0x03, 0x7c, 0x39, 0x72, + 0x44, 0x5d, 0x1e, 0x67, 0xac, 0xb4, 0x7e, 0x20, 0x47, 0xa3, 0x8f, 0x13, + 0x26, 0xf6, 0x56, 0x74, + 0xf8, 0x6c, 0xd4, 0x6f, 0x22, 0x15, 0x72, 0x15, 0x8d, 0xae, 0xba, 0xac, + 0xf5, 0xa5, 0x08, 0x07, + 0xa8, 0x0c, 0x17, 0x67, 0xdb, 0x0f, 0x08, 0x15, 0x87, 0x9d, 0xde, 0xec, + 0xf5, 0xa5, 0x8a, 0xac, + 0xef, 0x15, 0x6f, 0xda, 0x8d, 0x99, 0xf7, 0x37, 0x29, 0xa7, 0xb5, 0x90, + 0x83, 0x36, 0x5f, 0xc6, + 0x7c, 0x93, 0x9c, 0xee, 0xc3, 0xda, 0x77, 0x7d, 0x72, 0x11, 0x38, 0xb4, + 0x71, 0xbc, 0x7d, 0xba, + 0x5e, 0x43, 0x69, 0x5d, 0xda, 0x7a, 0x2e, 0x7d, 0x7e, 0x13, 0xb3, 0xce, + 0x97, 0xf6, 0xff, 0xee, + 0xde, 0xb4, 0x09, 0x3b, 0x22, 0x2f, 0xf5, 0xfe, 0xc1, 0xcd, 0x7d, 0xb9, + 0xf2, 0x64, 0x6d, 0x19, + 0x9e, 0x6f, 0x92, 0xcf, 0x9f, 0x8c, 0x5f, 0xa0, 0xd8, 0x87, 0xff, 0x81, + 0x77, 0x10, 0x2e, 0x00, + 0x74, 0x4d, 0x32, 0x34, 0x45, 0x90, 0x35, 0x4d, 0x50, 0x74, 0x62, 0x03, + 0x6b, 0x5c, 0x00, 0x2a, + 0xaa, 0x18, 0x0c, 0x20, 0x09, 0x04, 0x38, 0x09, 0x2a, 0x50, 0x22, 0x36, + 0xad, 0x28, 0x11, 0x70, + 0x94, 0x14, 0x41, 0xc0, 0x64, 0xae, 0x88, 0xc4, 0xe6, 0x84, 0x1a, 0xcb, + 0xfb, 0x35, 0x1f, 0xf2, + 0xe9, 0x3e, 0x48, 0xb0, 0x0e, 0x91, 0x39, 0x89, 0xbc, 0x3a, 0x0b, 0x15, + 0xad, 0x09, 0x85, 0xc9, + 0xdc, 0xf2, 0x93, 0x79, 0xea, 0x31, 0x7c, 0x04, 0x0b, 0x39, 0x62, 0x1b, + 0xfb, 0x08, 0x76, 0x31, + 0x7c, 0xbd, 0xea, 0x41, 0x35, 0x04, 0x6f, 0xea, 0x09, 0xbe, 0xd4, 0x6a, + 0xb5, 0x78, 0xad, 0xb6, + 0x1a, 0xaf, 0xd6, 0x09, 0x4e, 0xe9, 0xab, 0xf9, 0x55, 0xda, 0x4a, 0x7e, + 0xb5, 0xb6, 0x5a, 0xb8, + 0x4b, 0xbf, 0x93, 0xbf, 0x83, 0xbc, 0x5e, 0xa3, 0xad, 0xc5, 0x77, 0x69, + 0xeb, 0x79, 0x1f, 0xb1, + 0xbd, 0xa1, 0xb6, 0x81, 0x7c, 0xfe, 0x2e, 0xbc, 0x46, 0xbb, 0x13, 0xdf, + 0xa1, 0xdd, 0x81, 0xc8, + 0xdf, 0xa0, 0x3b, 0x8d, 0xd5, 0x70, 0xa5, 0xb6, 0x0a, 0x12, 0x4c, 0x44, + 0x04, 0x87, 0x21, 0xc1, + 0x56, 0x5c, 0xaf, 0xfa, 0xe9, 0xf7, 0x12, 0x5b, 0xbe, 0x86, 0x5f, 0xa7, + 0xad, 0x27, 0x18, 0x56, + 0xc3, 0xdf, 0xa9, 0xdf, 0x4e, 0x78, 0xe0, 0x6d, 0x84, 0x4f, 0xae, 0x10, + 0x48, 0xe3, 0x57, 0xca, + 0xcb, 0xd0, 0x3a, 0x59, 0x40, 0x7e, 0xc5, 0x87, 0xea, 0x15, 0x0f, 0x26, + 0xb8, 0x89, 0x6a, 0x55, + 0x3f, 0xe2, 0x55, 0x86, 0x7c, 0xcf, 0x3a, 0xca, 0x3b, 0xd1, 0x2d, 0xea, + 0xad, 0x26, 0xdf, 0x5c, + 0xaa, 0xde, 0x82, 0x6e, 0x55, 0x97, 0xe1, 0xdb, 0xb5, 0x95, 0x68, 0x05, + 0xe5, 0x8a, 0xda, 0x0a, + 0x7c, 0x3b, 0xf9, 0xbe, 0xdb, 0x75, 0xc2, 0x59, 0x75, 0xc2, 0x57, 0xb5, + 0xa5, 0x84, 0x83, 0xdd, + 0x22, 0xdc, 0xa2, 0xac, 0x12, 0x28, 0x96, 0x13, 0x3c, 0xe4, 0xeb, 0x09, + 0xbe, 0xd7, 0x29, 0x3e, + 0xec, 0x25, 0xfd, 0x5b, 0xad, 0x2c, 0x17, 0x56, 0x28, 0x2b, 0x08, 0xb7, + 0x5c, 0xca, 0x93, 0xef, + 0xe1, 0x6f, 0x22, 0x9f, 0x5d, 0xa6, 0xdc, 0x46, 0x1b, 0xe1, 0xb8, 0x2b, + 0x84, 0x55, 0xca, 0x1d, + 0xfc, 0x1d, 0xea, 0x6a, 0xbc, 0x82, 0x70, 0xe1, 0x3b, 0x49, 0x9f, 0xef, + 0x20, 0xd8, 0x7f, 0x17, + 0xc5, 0x68, 0xd2, 0xd7, 0x1a, 0x0d, 0x11, 0x5e, 0x0e, 0xb1, 0x4f, 0x5d, + 0xcf, 0xaf, 0x53, 0xd7, + 0x92, 0xcf, 0xad, 0xe2, 0xd7, 0x12, 0x3c, 0x5f, 0x43, 0x70, 0x7d, 0x95, + 0x5a, 0x8b, 0x81, 0x06, + 0x08, 0xde, 0x31, 0x98, 0xd1, 0x59, 0x82, 0xcd, 0x1c, 0xc1, 0x33, 0x84, + 0xfd, 0xe4, 0x88, 0x55, + 0x91, 0xbc, 0xae, 0x21, 0x63, 0xb9, 0x8e, 0x60, 0x68, 0x1d, 0x5f, 0x43, + 0xf0, 0xb5, 0xd6, 0xa0, + 0x63, 0xe2, 0xe1, 0xc9, 0x3a, 0x85, 0x13, 0x58, 0x0e, 0x31, 0x50, 0x39, + 0x1e, 0x6a, 0x7e, 0xfa, + 0x1d, 0xc8, 0x27, 0xfb, 0x31, 0x08, 0x10, 0xac, 0x35, 0x6a, 0xd1, 0xed, + 0x81, 0x46, 0xfc, 0x36, + 0xfe, 0x27, 0x79, 0x3a, 0xde, 0x40, 0x97, 0x6a, 0x2e, 0x7f, 0x59, 0x7f, + 0xbe, 0x49, 0x52, 0x0d, + 0x14, 0x57, 0xb3, 0xab, 0x96, 0x3e, 0x5f, 0xce, 0x86, 0x4a, 0x73, 0xff, + 0xa7, 0xca, 0x78, 0x65, + 0x5d, 0xb6, 0x98, 0xad, 0x7c, 0xad, 0xcc, 0x4f, 0x31, 0x26, 0xab, 0x9e, + 0x1e, 0x75, 0x7a, 0xb2, + 0xc7, 0xc8, 0x1c, 0x40, 0xed, 0x9a, 0x21, 0xfb, 0x07, 0x0f, 0xaf, 0x97, + 0x9e, 0x7e, 0x7f, 0x93, + 0x31, 0x6b, 0x58, 0x19, 0xd7, 0x04, 0x1b, 0xf8, 0x5e, 0xf6, 0xe5, 0xec, + 0xaf, 0xf3, 0x95, 0x4a, + 0x5f, 0x4b, 0xca, 0x37, 0xa9, 0xc8, 0x96, 0x6f, 0x42, 0xf7, 0xf0, 0xc9, + 0xf5, 0x9e, 0xd5, 0xf2, + 0x18, 0xeb, 0x76, 0x0c, 0xab, 0x83, 0x9f, 0x32, 0xdf, 0x44, 0x3e, 0x92, + 0xdb, 0x86, 0xa9, 0x6f, + 0xe1, 0x1f, 0xf8, 0x71, 0xc5, 0x10, 0x58, 0xdd, 0x10, 0x23, 0x7a, 0x48, + 0x0a, 0x6b, 0x86, 0x14, + 0xd4, 0x34, 0x31, 0x14, 0xe4, 0x02, 0xf5, 0xea, 0xc6, 0xc0, 0x9f, 0x84, + 0x3e, 0x9f, 0x02, 0x3f, + 0xa0, 0x99, 0xa3, 0xff, 0xe1, 0xff, 0xcd, 0xfd, 0x47, 0xf8, 0xd6, 0xff, + 0x8d, 0xf8, 0x1f, 0xf6, + 0x7f, 0xf8, 0xff, 0x66, 0xbf, 0x91, 0xbe, 0x66, 0xbf, 0x96, 0xbe, 0xf2, + 0xff, 0x4b, 0xfe, 0x87, + 0xff, 0x6f, 0xca, 0x3f, 0xd9, 0xbf, 0x6a, 0x5f, 0x70, 0x9f, 0x69, 0x7f, + 0xf4, 0x3f, 0xa7, 0x8b, + 0x40, 0x32, 0x02, 0x18, 0xab, 0x98, 0xa7, 0xba, 0x20, 0xe5, 0x1f, 0xeb, + 0x09, 0x6f, 0x6b, 0xd3, + 0xde, 0xe1, 0xff, 0x2e, 0xff, 0x93, 0xfd, 0xa7, 0xfc, 0x2f, 0xff, 0x3f, + 0x03, 0xdf, 0xb0, 0xdf, + 0x4a, 0x5f, 0x73, 0x5f, 0x49, 0xff, 0xe4, 0xfe, 0x29, 0xff, 0x93, 0xfb, + 0x87, 0xf2, 0x77, 0xee, + 0xaf, 0xf2, 0x5f, 0xd0, 0xdf, 0xa4, 0xbf, 0xf3, 0x7f, 0x0f, 0xfc, 0x0d, + 0xfd, 0x97, 0xfc, 0x27, + 0xf8, 0x5b, 0xed, 0x7d, 0xff, 0x27, 0xea, 0xc7, 0xf0, 0x7e, 0x55, 0xe6, + 0xfd, 0x04, 0xa3, 0x42, + 0xfa, 0xf3, 0xe8, 0x73, 0xe5, 0xaf, 0xf8, 0x5f, 0xc2, 0x57, 0xf8, 0x1f, + 0xd2, 0xdf, 0xc0, 0x5f, + 0xe4, 0x3f, 0xf8, 0x7f, 0xa3, 0x7f, 0xca, 0x35, 0x05, 0xeb, 0x04, 0x3a, + 0xb7, 0x19, 0x85, 0x11, + 0xfd, 0x2a, 0x8b, 0x19, 0xcd, 0x4b, 0xb8, 0x66, 0x9d, 0x54, 0xa7, 0x78, + 0x08, 0x27, 0x63, 0x84, + 0xa7, 0xd4, 0x3f, 0xc0, 0x3f, 0x06, 0xfe, 0x8b, 0xfb, 0xb3, 0xf4, 0x7b, + 0xf8, 0x47, 0xe9, 0x8f, + 0xe8, 0x53, 0xed, 0x57, 0x60, 0xbf, 0x16, 0x85, 0x1e, 0x8d, 0x23, 0x5c, + 0xa9, 0x1e, 0xd7, 0x69, + 0x1e, 0xc4, 0xe8, 0x7e, 0x24, 0xab, 0x00, 0xaf, 0xd6, 0xbc, 0xfc, 0x83, + 0xf2, 0x8b, 0xe8, 0x55, + 0x61, 0x0f, 0x7c, 0x4d, 0x7c, 0x0d, 0xee, 0x11, 0x5e, 0x87, 0x3b, 0x85, + 0x5d, 0x70, 0x97, 0xfc, + 0x1a, 0x7c, 0x55, 0x7d, 0x05, 0xbe, 0x18, 0x78, 0x0d, 0xec, 0x96, 0x76, + 0xe3, 0xd7, 0xc5, 0x5d, + 0xe2, 0x4e, 0xf1, 0x25, 0xfc, 0x82, 0xf8, 0x0b, 0xfc, 0xb4, 0xf4, 0x2c, + 0xff, 0x73, 0xed, 0x6e, + 0x81, 0x55, 0x37, 0x08, 0x75, 0x01, 0xc2, 0xe3, 0x14, 0x80, 0xa1, 0xc2, + 0xa0, 0x0d, 0xc6, 0x1a, + 0x21, 0xa2, 0x3e, 0x2e, 0xec, 0xd0, 0x1e, 0x86, 0x8f, 0x28, 0x3b, 0xd0, + 0xc3, 0x81, 0x27, 0xf0, + 0xd3, 0x81, 0xc7, 0xf9, 0xa7, 0x02, 0x4f, 0xf0, 0x4f, 0x06, 0x9e, 0xe4, + 0x9f, 0x94, 0x9e, 0x14, + 0x1f, 0x97, 0x1e, 0xc1, 0x3b, 0x02, 0x8f, 0xc0, 0x87, 0xa4, 0xc7, 0xd1, + 0xe3, 0xe2, 0x23, 0xe8, + 0x61, 0xfe, 0x31, 0xfc, 0x90, 0xf2, 0x20, 0xfe, 0xb9, 0xf6, 0x18, 0xd6, + 0xf4, 0x84, 0xce, 0xda, + 0x13, 0xb8, 0x97, 0xdf, 0x2e, 0x3c, 0x22, 0x3c, 0x26, 0xed, 0x90, 0x1e, + 0x0a, 0xec, 0x40, 0x3b, + 0xa4, 0x87, 0xf9, 0x07, 0x95, 0x46, 0xe4, 0x53, 0x21, 0x46, 0x9a, 0x84, + 0x79, 0xd2, 0x67, 0xa0, + 0x02, 0x81, 0x55, 0x44, 0xc8, 0x1b, 0x08, 0x0a, 0x84, 0x6b, 0xb3, 0x5a, + 0x07, 0x4f, 0xfe, 0x0a, + 0x3f, 0x24, 0x6d, 0xe7, 0xef, 0x0f, 0xdc, 0x8f, 0xef, 0x97, 0xef, 0xe7, + 0x1f, 0x90, 0xb7, 0xe3, + 0x2d, 0x81, 0x2d, 0xe8, 0x6e, 0x79, 0x2b, 0xda, 0x26, 0xdf, 0x87, 0xb6, + 0x2a, 0xf7, 0x08, 0x5b, + 0x95, 0xfb, 0xf0, 0xdd, 0xca, 0x3d, 0x60, 0xb3, 0xda, 0x0d, 0x5b, 0xe5, + 0x16, 0xb4, 0x51, 0xdd, + 0x0e, 0x7a, 0x94, 0xf5, 0xd8, 0xa3, 0xb4, 0xe2, 0xfd, 0xfc, 0x5f, 0xf0, + 0x5f, 0xd0, 0xa3, 0xe8, + 0x0c, 0x62, 0x57, 0x8d, 0x88, 0x73, 0x52, 0xfb, 0x7c, 0x0d, 0x04, 0x0b, + 0x9d, 0x4d, 0xa4, 0x35, + 0x3a, 0xeb, 0x2a, 0x09, 0x27, 0x2c, 0x4f, 0xda, 0x77, 0x66, 0x78, 0x5c, + 0x72, 0x81, 0x56, 0xc6, + 0x54, 0x18, 0x05, 0x4c, 0x36, 0x0d, 0x8b, 0xae, 0xe3, 0xf6, 0x40, 0xf6, + 0x18, 0x19, 0xeb, 0xfb, + 0xb0, 0xa6, 0xd7, 0xb0, 0xcc, 0x3a, 0xf8, 0x6a, 0x31, 0x4b, 0xe7, 0xfa, + 0x48, 0x5f, 0xc1, 0xd0, + 0x3a, 0xf8, 0x84, 0xbf, 0xfa, 0xad, 0x6b, 0x58, 0xf9, 0x3e, 0x4b, 0xf8, + 0xa7, 0xd9, 0x39, 0xab, + 0xba, 0xde, 0x98, 0x71, 0xc1, 0x62, 0x7e, 0x7e, 0xf6, 0x7c, 0x93, 0xe2, + 0x11, 0xf9, 0x26, 0x87, + 0xb2, 0x4e, 0xf7, 0xb0, 0x7a, 0x3e, 0x75, 0x59, 0xb0, 0x14, 0x96, 0xc4, + 0xdc, 0xf5, 0xce, 0x78, + 0x52, 0xbe, 0x49, 0xe3, 0x8c, 0xba, 0x38, 0xff, 0x8d, 0x89, 0x6b, 0xaf, + 0xa8, 0x41, 0xc1, 0x1b, + 0xd2, 0x85, 0x78, 0x30, 0x26, 0x34, 0x68, 0x0d, 0x62, 0x5c, 0x8b, 0x48, + 0x71, 0x82, 0x7f, 0x75, + 0x81, 0x88, 0xf8, 0x3b, 0x82, 0x79, 0x0f, 0x47, 0x04, 0xbf, 0xa2, 0x21, + 0x0e, 0x68, 0x08, 0x60, + 0x05, 0x02, 0x7f, 0x00, 0x40, 0x21, 0xa4, 0x03, 0x23, 0x24, 0xb3, 0x7e, + 0xb5, 0x86, 0x23, 0x98, + 0x01, 0x7c, 0x5a, 0x3d, 0xa8, 0xd7, 0xea, 0xb9, 0x1a, 0x63, 0x3d, 0xb7, + 0x56, 0x5f, 0xc3, 0xdd, + 0xa2, 0xaf, 0xe6, 0x90, 0xf6, 0x53, 0xee, 0x54, 0xed, 0x7a, 0xc2, 0x05, + 0x65, 0x41, 0x33, 0x64, + 0xac, 0x68, 0x04, 0xbb, 0x8c, 0x3b, 0x89, 0xbd, 0xb5, 0x1f, 0xbd, 0xdb, + 0xd0, 0xc3, 0xb5, 0xc7, + 0xbb, 0x7c, 0xcd, 0xa1, 0x06, 0x36, 0x2a, 0x47, 0xb8, 0xb0, 0x16, 0x25, + 0x2d, 0x06, 0x1a, 0xd5, + 0x38, 0x8c, 0x2a, 0x31, 0x10, 0x57, 0xa3, 0x30, 0x22, 0x87, 0x51, 0x58, + 0x09, 0xe3, 0x68, 0x30, + 0x04, 0xa5, 0x68, 0x33, 0x1b, 0xd7, 0x2e, 0x87, 0x67, 0x2b, 0x37, 0x62, + 0x8a, 0x55, 0xd1, 0x60, + 0x1b, 0x6c, 0x52, 0xba, 0x71, 0x87, 0xdc, 0x8e, 0x3b, 0x94, 0x36, 0xd8, + 0xa6, 0x34, 0x82, 0x06, + 0xa3, 0xc1, 0x1f, 0x8c, 0xf5, 0x10, 0xbc, 0x5d, 0xc7, 0x7b, 0x14, 0x96, + 0x87, 0x06, 0x2b, 0x00, + 0x95, 0xe5, 0x19, 0x99, 0x60, 0x00, 0xc1, 0x81, 0x1a, 0x72, 0xfe, 0x9f, + 0xa9, 0xdb, 0x50, 0xaf, + 0xd4, 0x05, 0x3a, 0x02, 0x3d, 0xdc, 0x66, 0xbd, 0x07, 0xc4, 0x8c, 0x10, + 0xb8, 0x33, 0xb8, 0x04, + 0x1a, 0x41, 0x3f, 0xf2, 0x18, 0x5e, 0xd2, 0xea, 0x08, 0x87, 0xc2, 0xbc, + 0x3f, 0xb8, 0x16, 0xdf, + 0xa3, 0xfc, 0x8d, 0xfb, 0x34, 0xb4, 0xdb, 0xff, 0xae, 0xfc, 0x36, 0xfb, + 0x96, 0xfc, 0x36, 0xb7, + 0x3f, 0xf0, 0x3a, 0xb7, 0x57, 0xda, 0xc7, 0xee, 0x0b, 0xbc, 0xc1, 0xee, + 0x0f, 0xec, 0xe5, 0x76, + 0xca, 0x7b, 0xfc, 0xbb, 0x03, 0xbb, 0xb8, 0xdd, 0xf2, 0x2e, 0x82, 0xa1, + 0xef, 0xb2, 0x6f, 0x05, + 0x77, 0x71, 0x1f, 0x69, 0x3f, 0x83, 0xeb, 0x84, 0xab, 0xf0, 0x6d, 0xb2, + 0x87, 0xf7, 0xca, 0x0c, + 0xb1, 0x39, 0x89, 0xbd, 0xaa, 0xad, 0xe6, 0x39, 0x65, 0x87, 0xf0, 0x72, + 0xe4, 0x45, 0xf6, 0xf9, + 0xc8, 0x4b, 0xcc, 0xce, 0xd0, 0x7e, 0xff, 0x9b, 0xfa, 0x5b, 0xdc, 0x3b, + 0xca, 0x9b, 0xec, 0x5b, + 0xca, 0xdb, 0xdc, 0xdb, 0xca, 0xbb, 0xec, 0x2f, 0xa5, 0x77, 0xe1, 0x9b, + 0x81, 0xfd, 0x70, 0x9f, + 0xb2, 0x87, 0x7d, 0x53, 0x7e, 0xdf, 0xff, 0xa1, 0xf6, 0x11, 0xfb, 0x9e, + 0xf6, 0x82, 0xff, 0xd5, + 0xf0, 0xeb, 0x6c, 0x50, 0x59, 0x86, 0xd7, 0x99, 0xfc, 0x8f, 0x45, 0xbf, + 0xd0, 0xbe, 0x04, 0xbf, + 0xd7, 0xfe, 0x00, 0xff, 0x1c, 0xf8, 0x23, 0xfa, 0xb5, 0xfa, 0x29, 0xfa, + 0x52, 0xfa, 0x12, 0xbd, + 0x2d, 0x2f, 0x05, 0x35, 0xaa, 0x8a, 0x25, 0xc2, 0xc3, 0x55, 0x55, 0xc4, + 0xa2, 0x86, 0x78, 0x41, + 0x0f, 0xf0, 0xaa, 0xce, 0xe1, 0x5a, 0x32, 0x4e, 0xcf, 0x45, 0xde, 0x64, + 0x7e, 0xaf, 0xfc, 0xc9, + 0xf7, 0xb1, 0xfa, 0x11, 0xf7, 0x2b, 0xe5, 0x33, 0xee, 0x0b, 0xf1, 0x37, + 0xe0, 0x0b, 0xfe, 0xb7, + 0xe0, 0x37, 0xc2, 0x6f, 0xd1, 0xef, 0x84, 0xdf, 0xa1, 0xdf, 0x08, 0x5f, + 0xa0, 0x5f, 0x8b, 0x9f, + 0xa0, 0x4f, 0x84, 0x5f, 0xa1, 0x8f, 0xf8, 0xf7, 0xf9, 0xb7, 0xf4, 0x5f, + 0x90, 0xeb, 0xfc, 0x80, + 0x79, 0x48, 0xf4, 0x80, 0x3b, 0x03, 0x00, 0xb3, 0x0a, 0x83, 0xfd, 0xd2, + 0x46, 0xfc, 0x5b, 0xfc, + 0x07, 0xfc, 0x39, 0xbe, 0x07, 0xcd, 0x4a, 0xfd, 0x7c, 0xa3, 0x7c, 0xea, + 0x6b, 0x30, 0x4a, 0x19, + 0x3a, 0x3f, 0x68, 0xcd, 0x93, 0x4a, 0xc2, 0x07, 0x4d, 0x1c, 0x8c, 0x96, + 0x7b, 0x4a, 0x93, 0xf3, + 0x76, 0x09, 0x27, 0x29, 0xd4, 0xcb, 0x99, 0xb2, 0x6c, 0x76, 0x2d, 0x8d, + 0x11, 0x24, 0xf8, 0x97, + 0x55, 0x4f, 0x1a, 0xd5, 0x7e, 0x8b, 0x59, 0xec, 0x46, 0x3e, 0xe1, 0x83, + 0xa5, 0xfc, 0x35, 0xd3, + 0xfe, 0x26, 0x14, 0xef, 0xa9, 0xad, 0x9a, 0x2d, 0xdf, 0x24, 0x5b, 0xcc, + 0x6a, 0xb2, 0xaf, 0x23, + 0x5f, 0xb7, 0x73, 0x87, 0xa6, 0x4e, 0x77, 0x52, 0xee, 0x9b, 0x05, 0xad, + 0x33, 0xcf, 0xdc, 0x57, + 0xbe, 0xaa, 0xa6, 0x3c, 0x5a, 0x51, 0x9f, 0x29, 0xdf, 0x24, 0x3f, 0x43, + 0x9d, 0xaf, 0x83, 0x15, + 0xdf, 0xdf, 0x57, 0xbb, 0x26, 0xab, 0x66, 0xd0, 0x17, 0x97, 0xc3, 0x9a, + 0xb8, 0xae, 0xd8, 0xd8, + 0xcb, 0x85, 0x8f, 0x4c, 0x5f, 0xef, 0x97, 0xf2, 0x66, 0xc1, 0x1f, 0x0e, + 0x09, 0xb1, 0x48, 0x54, + 0x68, 0x09, 0xc6, 0x85, 0x88, 0x1e, 0x91, 0x5a, 0xb4, 0x98, 0x84, 0x54, + 0x41, 0x7a, 0x19, 0x7d, + 0xc7, 0xef, 0x0f, 0x5e, 0xc6, 0x96, 0x87, 0xf2, 0xc1, 0xb8, 0x64, 0x1e, + 0x2d, 0x15, 0xe3, 0x89, + 0xd1, 0x69, 0x7c, 0x95, 0x91, 0xdf, 0xf7, 0x7b, 0x1e, 0xca, 0x0b, 0xe4, + 0xa1, 0x21, 0x9f, 0x91, + 0x8b, 0x60, 0xa5, 0x7e, 0x32, 0x62, 0xb5, 0x56, 0x5e, 0xd3, 0x14, 0x51, + 0x0b, 0x86, 0x04, 0x81, + 0xd8, 0xb9, 0x48, 0x7b, 0x15, 0x7e, 0x15, 0x7a, 0xc2, 0xbf, 0xa4, 0x6b, + 0x46, 0x7d, 0x45, 0x9b, + 0x8d, 0xc9, 0x57, 0xfa, 0xfa, 0x27, 0xe7, 0xc3, 0x7c, 0x95, 0x3c, 0x4b, + 0xc3, 0xf9, 0x3a, 0xad, + 0x2d, 0xa4, 0x15, 0xc0, 0x69, 0xd1, 0x0a, 0xae, 0x40, 0x3f, 0x09, 0xfa, + 0x65, 0xdd, 0xb4, 0xf1, + 0xee, 0x8d, 0xfc, 0xb8, 0xdf, 0x5f, 0x9f, 0x68, 0xf4, 0xef, 0x02, 0x79, + 0x70, 0x7e, 0xc3, 0x2a, + 0x66, 0x6b, 0xc3, 0x83, 0x7e, 0xa8, 0xad, 0x87, 0xac, 0x06, 0x44, 0xce, + 0x20, 0x76, 0xa0, 0xea, + 0x27, 0x76, 0xb3, 0x4f, 0x58, 0xa3, 0x37, 0xe0, 0xad, 0x4a, 0xe2, 0x3a, + 0xf3, 0xf4, 0x62, 0x60, + 0x0f, 0x15, 0x70, 0xf4, 0xb5, 0x4d, 0xbd, 0x1a, 0x35, 0x10, 0x9b, 0xd7, + 0x6f, 0x70, 0xc8, 0xaf, + 0xfb, 0xb0, 0x4f, 0x5b, 0x23, 0xb4, 0x12, 0x7c, 0xf9, 0x5f, 0x6d, 0x2b, + 0x73, 0x7a, 0xeb, 0x64, + 0x9f, 0x53, 0xb7, 0x71, 0x05, 0x6a, 0x3e, 0xc8, 0xd7, 0x0a, 0x41, 0x81, + 0x92, 0x0f, 0x68, 0xfd, + 0x8e, 0x3c, 0x29, 0x0f, 0x9a, 0x7d, 0x16, 0xc9, 0xbc, 0x0f, 0x39, 0xb8, + 0x29, 0xed, 0xd3, 0x7d, + 0x93, 0x3a, 0x4e, 0xf0, 0x1d, 0x1b, 0xca, 0x03, 0xd3, 0xc4, 0x9b, 0x31, + 0x24, 0xdf, 0x53, 0x43, + 0xf8, 0x26, 0x36, 0x36, 0x88, 0xb5, 0xea, 0x43, 0xfc, 0x6f, 0x23, 0x4f, + 0x70, 0x3f, 0x6d, 0x9d, + 0xc3, 0x4c, 0xd1, 0x4b, 0x40, 0x89, 0x6a, 0x47, 0x0e, 0xa5, 0x14, 0x17, + 0x29, 0x85, 0xb8, 0x50, + 0xb5, 0xa1, 0x42, 0xc5, 0x86, 0x6d, 0x72, 0x11, 0x2a, 0x10, 0x0a, 0x78, + 0x9b, 0x36, 0x1e, 0x1d, + 0xd5, 0x72, 0x9c, 0xef, 0xf8, 0xd6, 0xb9, 0x5e, 0x5b, 0x74, 0x82, 0xff, + 0x94, 0xd0, 0x34, 0xb6, + 0x5a, 0xb9, 0x02, 0x8b, 0x8a, 0x42, 0xb8, 0x9d, 0x81, 0x3a, 0x5b, 0xae, + 0xf1, 0x9e, 0xd9, 0x71, + 0x36, 0x73, 0x72, 0xfc, 0x68, 0xff, 0x82, 0xe0, 0x5c, 0xee, 0x08, 0xe3, + 0x08, 0xf6, 0x38, 0x63, + 0x16, 0x1b, 0x50, 0x63, 0x26, 0xfe, 0x05, 0x34, 0x05, 0x1b, 0x8a, 0x88, + 0x24, 0x32, 0xdc, 0x75, + 0x7a, 0x00, 0xed, 0xd7, 0x7f, 0xef, 0xef, 0xe8, 0xba, 0x6c, 0xc3, 0x05, + 0x1d, 0x17, 0xd7, 0x1e, + 0xdb, 0x30, 0x17, 0x1c, 0xae, 0x4d, 0x47, 0x87, 0x29, 0xf3, 0xd0, 0xc2, + 0xc0, 0x02, 0x3c, 0x4f, + 0x9a, 0x8b, 0xe6, 0x48, 0x33, 0xd1, 0xe1, 0xd2, 0x6c, 0x34, 0x43, 0x9c, + 0x07, 0xe7, 0xe2, 0x59, + 0x68, 0xb6, 0x3c, 0x0f, 0x4d, 0x8e, 0x9c, 0xe4, 0xb9, 0x33, 0xb2, 0x98, + 0xad, 0x92, 0xce, 0x02, + 0x77, 0x49, 0xab, 0xd0, 0xad, 0x81, 0x95, 0x18, 0x10, 0x0c, 0x94, 0xc5, + 0xe7, 0xf0, 0x6f, 0xc8, + 0xcf, 0x4b, 0x70, 0x09, 0x2e, 0x4c, 0x5f, 0xa3, 0x87, 0xab, 0x0c, 0x3b, + 0x3c, 0x66, 0xcd, 0x42, + 0x82, 0x1f, 0x14, 0x27, 0x2a, 0x62, 0x15, 0xf5, 0xb4, 0x51, 0x1c, 0x2c, + 0x0b, 0x97, 0x7a, 0x68, + 0x2c, 0x8d, 0xcd, 0x28, 0xf3, 0x39, 0x94, 0x7c, 0x36, 0x23, 0x57, 0x20, + 0xcf, 0x2a, 0xc5, 0xbf, + 0x82, 0x1c, 0xed, 0xc3, 0x3a, 0xc6, 0xfd, 0x16, 0xd3, 0xd6, 0x73, 0x19, + 0xcc, 0x37, 0x49, 0xb1, + 0x7f, 0xb0, 0xc5, 0xfa, 0x4d, 0x45, 0x5a, 0x21, 0x57, 0x10, 0x20, 0xcf, + 0x13, 0xe1, 0x51, 0x05, + 0x86, 0x9d, 0xad, 0xcc, 0x29, 0x2e, 0xe4, 0xa8, 0x9e, 0x4f, 0x7f, 0x9d, + 0x2f, 0x21, 0x4b, 0xbe, + 0x09, 0x79, 0xaf, 0x2a, 0x56, 0x52, 0x5f, 0x30, 0x7c, 0x3f, 0xb2, 0x31, + 0xd5, 0xb4, 0xb2, 0x5b, + 0xda, 0xb3, 0xba, 0x30, 0x38, 0xfa, 0x9a, 0x56, 0xf3, 0xf9, 0x27, 0x4c, + 0xec, 0xfb, 0xbb, 0xf4, + 0x33, 0xde, 0x08, 0xa9, 0x42, 0x5b, 0xb8, 0x51, 0x68, 0x26, 0x2d, 0x66, + 0x34, 0x08, 0x84, 0x8f, + 0x09, 0xb2, 0x16, 0x10, 0x9e, 0x13, 0xbe, 0xe3, 0xbf, 0x0d, 0x70, 0xc8, + 0x1e, 0xcc, 0x07, 0x13, + 0xa4, 0x89, 0xd2, 0x14, 0xde, 0xc5, 0x3b, 0xf9, 0x0a, 0x5c, 0x26, 0x4e, + 0xc3, 0xc7, 0x45, 0x4e, + 0x81, 0xa7, 0x84, 0x8e, 0x85, 0x53, 0x95, 0x4a, 0x58, 0x29, 0x4f, 0xe0, + 0xa7, 0x2b, 0x53, 0x84, + 0x2a, 0xd5, 0x29, 0x54, 0x92, 0x4f, 0x38, 0x50, 0x01, 0x2e, 0x97, 0x4f, + 0x80, 0x67, 0x2a, 0x17, + 0x41, 0x45, 0xbb, 0x87, 0x6f, 0xd6, 0x0c, 0x3e, 0xa4, 0x47, 0x05, 0x2d, + 0xc4, 0x89, 0x7c, 0xe0, + 0x25, 0xf0, 0xbf, 0xf2, 0xef, 0xfc, 0xfe, 0xee, 0xc3, 0x6b, 0x27, 0x74, + 0xcd, 0xad, 0x3b, 0x2c, + 0x3a, 0x01, 0xb8, 0xc4, 0x4a, 0xde, 0xad, 0x4e, 0xc0, 0x53, 0xd5, 0x49, + 0x60, 0xbc, 0xe4, 0x44, + 0xe5, 0x42, 0x19, 0x2e, 0x17, 0xca, 0x71, 0x09, 0x5f, 0x22, 0x94, 0x93, + 0x6f, 0x2c, 0xd1, 0x5d, + 0xec, 0xd1, 0xd1, 0x4b, 0xfc, 0x27, 0x68, 0xa7, 0x22, 0xaf, 0xd6, 0x80, + 0x02, 0x1a, 0x24, 0x7c, + 0x92, 0xe1, 0x7f, 0x11, 0x5b, 0xc9, 0x8d, 0x13, 0x2b, 0x91, 0x4b, 0x22, + 0x2d, 0xe0, 0x42, 0x2e, + 0x79, 0x22, 0x9e, 0xa9, 0x2d, 0x40, 0x33, 0xe3, 0x15, 0xcc, 0xa2, 0xa8, + 0xec, 0xff, 0x45, 0xf4, + 0x6e, 0x8e, 0x6a, 0x5a, 0x84, 0x7f, 0x21, 0x9e, 0xd8, 0xb3, 0x3e, 0xc2, + 0x89, 0xea, 0xf4, 0x16, + 0xf4, 0xbc, 0x32, 0x15, 0x95, 0xe8, 0x33, 0xe1, 0x51, 0xd1, 0xf9, 0xdc, + 0x64, 0xcd, 0xc9, 0x96, + 0xa8, 0x55, 0x60, 0xba, 0xfa, 0x43, 0x14, 0x53, 0x05, 0x84, 0x54, 0x09, + 0x49, 0x6a, 0x3d, 0xaa, + 0x97, 0x77, 0xa3, 0xef, 0x08, 0xaf, 0xbb, 0xb2, 0xdd, 0x55, 0x3b, 0x3e, + 0x36, 0x9e, 0x2b, 0x11, + 0x8b, 0xb1, 0x4d, 0x70, 0xf0, 0xa5, 0xe4, 0xda, 0x1c, 0x42, 0x21, 0x2e, + 0xe2, 0x69, 0x23, 0x98, + 0xc5, 0x17, 0x0a, 0xc5, 0x52, 0x05, 0xc1, 0xe6, 0x39, 0xde, 0x79, 0x1d, + 0xc7, 0xd4, 0x5f, 0xdf, + 0x70, 0xb5, 0xef, 0x34, 0x79, 0x25, 0x88, 0x12, 0x0e, 0xe6, 0xd7, 0x05, + 0x8c, 0x94, 0x0d, 0x78, + 0xbd, 0x42, 0x78, 0x53, 0xf8, 0x0d, 0xae, 0xae, 0x73, 0x9e, 0x67, 0x7c, + 0xb4, 0x1a, 0x38, 0xa4, + 0x42, 0xde, 0x2e, 0x94, 0x08, 0xc5, 0x7c, 0xb1, 0x58, 0x20, 0x10, 0xeb, + 0x41, 0x28, 0xe4, 0x8b, + 0x44, 0xbb, 0x60, 0x17, 0x08, 0x96, 0x0a, 0xa5, 0x78, 0x46, 0xe4, 0x78, + 0x78, 0x52, 0xc7, 0x02, + 0xaf, 0xa3, 0xc1, 0xe6, 0xbf, 0x50, 0xdb, 0x00, 0x6e, 0x92, 0x6e, 0xe7, + 0xe3, 0x5a, 0x9c, 0x60, + 0x9f, 0x84, 0xfd, 0x5a, 0x33, 0xba, 0xaf, 0xe9, 0x58, 0xef, 0x8c, 0x96, + 0x99, 0xbe, 0xea, 0x50, + 0x39, 0x53, 0xa1, 0x55, 0x10, 0xbe, 0x30, 0x91, 0x39, 0x26, 0x7c, 0x22, + 0xab, 0x69, 0x61, 0x1c, + 0xd2, 0x0d, 0xac, 0xea, 0x0a, 0xd6, 0x55, 0x05, 0x78, 0x74, 0x80, 0x7e, + 0x21, 0xfd, 0x83, 0x7b, + 0xa9, 0xfd, 0xfa, 0xfa, 0x05, 0xbd, 0xc7, 0xd4, 0xcc, 0x6f, 0x98, 0xe4, + 0x73, 0xcb, 0x0e, 0xa1, + 0x48, 0x2e, 0x12, 0x4a, 0x95, 0x4a, 0xa1, 0x52, 0x29, 0xe5, 0x89, 0x1d, + 0x47, 0x30, 0x86, 0x3c, + 0x5f, 0xb4, 0x21, 0x3b, 0xb6, 0x0b, 0x85, 0x30, 0xdf, 0x98, 0xc0, 0x9d, + 0x11, 0xba, 0xd1, 0x7f, + 0x8c, 0x74, 0x14, 0x64, 0xf4, 0x2e, 0xe4, 0x0f, 0x5c, 0x83, 0x7e, 0x28, + 0x5f, 0x8b, 0xee, 0x52, + 0x75, 0x08, 0xb4, 0x0d, 0x28, 0x22, 0xbe, 0x8c, 0x3f, 0xc1, 0xbf, 0xc2, + 0x0f, 0xa2, 0x93, 0x70, + 0x2a, 0xec, 0xa2, 0xba, 0x5e, 0x65, 0xd0, 0x36, 0x64, 0x7f, 0x13, 0xea, + 0x13, 0xa1, 0xb5, 0xf1, + 0x28, 0x16, 0x9a, 0x18, 0x18, 0x29, 0xf3, 0x94, 0x86, 0x49, 0x23, 0xf6, + 0x64, 0x71, 0x9f, 0x7d, + 0x9c, 0x52, 0x2b, 0x24, 0xf3, 0x8e, 0x7e, 0x3e, 0x2f, 0x87, 0x35, 0xa9, + 0x2d, 0xe5, 0x79, 0xa5, + 0xd5, 0xb0, 0x92, 0xfc, 0x26, 0x0d, 0xee, 0xba, 0x8c, 0xfb, 0x07, 0x9b, + 0xf9, 0x26, 0xd9, 0xf3, + 0x39, 0xcc, 0x3a, 0x08, 0x66, 0xed, 0x67, 0x1b, 0x5b, 0x14, 0xb2, 0xb3, + 0xe5, 0x66, 0xae, 0x7c, + 0x86, 0x3d, 0x37, 0x47, 0x53, 0xe7, 0x2b, 0x57, 0xfb, 0x72, 0x06, 0x8a, + 0x53, 0xe4, 0x03, 0x26, + 0xef, 0x1f, 0x3c, 0x34, 0xdf, 0xc4, 0x8c, 0x0d, 0x48, 0x97, 0x6f, 0x92, + 0xe3, 0x9a, 0xd4, 0xb6, + 0xe1, 0x35, 0xa9, 0xd3, 0xd4, 0x5b, 0x48, 0xce, 0x71, 0x69, 0x20, 0xd8, + 0xf7, 0xad, 0xf0, 0x1a, + 0xdf, 0x18, 0x54, 0x84, 0xc6, 0x70, 0xbb, 0xd8, 0x16, 0x6e, 0x15, 0xda, + 0x22, 0x6d, 0x42, 0x93, + 0xd1, 0x24, 0x84, 0x42, 0x06, 0x7a, 0x34, 0xf0, 0x57, 0xfc, 0xa5, 0xd4, + 0x84, 0x8e, 0xd2, 0xf3, + 0xa0, 0x4b, 0x9c, 0x28, 0x54, 0xf0, 0x15, 0x92, 0x9b, 0xe0, 0x91, 0x43, + 0x76, 0x0b, 0xb3, 0x8d, + 0x45, 0xc2, 0x49, 0xe1, 0x85, 0x68, 0x7a, 0x60, 0x02, 0xae, 0x14, 0x5c, + 0x42, 0xb5, 0x34, 0x1e, + 0xbb, 0xc5, 0x72, 0x54, 0x2a, 0x11, 0xcc, 0x12, 0x0b, 0xe0, 0x78, 0x6d, + 0x06, 0xfc, 0x51, 0x78, + 0x03, 0xac, 0x37, 0x36, 0xc2, 0x4d, 0x46, 0x0c, 0x37, 0x18, 0x71, 0xdc, + 0x18, 0x14, 0xb1, 0x10, + 0x7a, 0x04, 0x7d, 0x13, 0xf8, 0x0d, 0xdb, 0xd0, 0x7e, 0x52, 0x9d, 0xbb, + 0x67, 0x41, 0xed, 0x9c, + 0x86, 0x09, 0x8c, 0x53, 0x2e, 0x41, 0xe5, 0xa2, 0x0b, 0x8e, 0xd7, 0xa7, + 0xc0, 0x6a, 0xd9, 0x09, + 0x4b, 0xf9, 0x52, 0x58, 0x2c, 0x94, 0xa0, 0x12, 0xd2, 0x8a, 0xa5, 0x12, + 0x5c, 0x66, 0x54, 0xa0, + 0xf9, 0xb1, 0xc5, 0x2c, 0x17, 0xae, 0xe3, 0xee, 0x50, 0x5a, 0x70, 0xa3, + 0x86, 0x91, 0x68, 0xc8, + 0x04, 0xa3, 0x04, 0xe1, 0x8d, 0xd8, 0x5a, 0xc2, 0xdd, 0x08, 0xee, 0x89, + 0x4e, 0xe4, 0x56, 0xaa, + 0xe1, 0x34, 0x7d, 0x1e, 0x58, 0x18, 0x5b, 0xe8, 0x3b, 0x3c, 0x78, 0x18, + 0xb1, 0xb1, 0xc6, 0xa1, + 0x0b, 0x23, 0x06, 0xdc, 0x1e, 0xee, 0x05, 0x3c, 0xb1, 0xcd, 0x03, 0x9a, + 0x86, 0x05, 0x1d, 0x61, + 0xc6, 0xe8, 0x42, 0x2f, 0xeb, 0x33, 0xe0, 0x74, 0xe3, 0x28, 0x30, 0xd7, + 0x98, 0x08, 0xca, 0x94, + 0x52, 0x50, 0x15, 0x9c, 0x05, 0xa6, 0x19, 0xe7, 0xa1, 0x26, 0x43, 0x42, + 0xb2, 0x2c, 0xa2, 0x3a, + 0xa3, 0x8e, 0xfb, 0x58, 0xf9, 0xd2, 0xbf, 0xb6, 0x69, 0xbc, 0xaf, 0xb2, + 0x71, 0x06, 0x53, 0x15, + 0x28, 0x83, 0x0e, 0xa1, 0x94, 0x2f, 0x17, 0x2b, 0xf8, 0x4a, 0x91, 0x8e, + 0x44, 0x19, 0xef, 0x10, + 0xed, 0x7c, 0x59, 0xa0, 0x98, 0x77, 0xa8, 0x55, 0xe8, 0xb0, 0xf0, 0x6c, + 0x66, 0x6e, 0xd3, 0x29, + 0xf5, 0xa7, 0xb6, 0x7a, 0xbd, 0x2d, 0x0d, 0xab, 0x38, 0x5e, 0x09, 0x21, + 0x60, 0x40, 0x1e, 0x29, + 0x5e, 0xe4, 0x95, 0xbb, 0xc1, 0xbb, 0xca, 0xfb, 0xac, 0xda, 0x72, 0x94, + 0xcf, 0xd9, 0x32, 0xcd, + 0x37, 0x81, 0x8c, 0x53, 0x05, 0xc1, 0x6b, 0xa7, 0xe4, 0xc4, 0xe5, 0xa2, + 0x83, 0x27, 0x3f, 0xc8, + 0x2e, 0x38, 0x50, 0x05, 0x69, 0x65, 0xbc, 0x13, 0xcc, 0x08, 0x1d, 0xe3, + 0x3f, 0xad, 0xf9, 0x78, + 0xef, 0xc4, 0xa6, 0x99, 0xbe, 0x73, 0x43, 0x06, 0x78, 0xce, 0x68, 0xc0, + 0x21, 0x2d, 0x26, 0xc8, + 0xba, 0x86, 0x69, 0xe3, 0x09, 0x1e, 0xdd, 0x17, 0x39, 0xda, 0x3f, 0x3d, + 0x34, 0x85, 0x73, 0xcb, + 0x6e, 0xe0, 0x52, 0x26, 0xc0, 0x99, 0xa1, 0xd9, 0xcc, 0x09, 0xc1, 0x45, + 0x9c, 0xa1, 0xb7, 0xf2, + 0x0d, 0x7a, 0x23, 0x8e, 0x6a, 0x51, 0x1e, 0x07, 0x65, 0xee, 0x59, 0xe9, + 0xf7, 0xe0, 0xcd, 0x08, + 0xf2, 0xce, 0xbb, 0x7b, 0x5e, 0xdd, 0xa2, 0xe6, 0x23, 0xbc, 0x93, 0xd5, + 0x0a, 0x58, 0x89, 0x5d, + 0x7c, 0x95, 0x34, 0x19, 0x4d, 0x0a, 0xb8, 0xc9, 0x35, 0x54, 0x22, 0xd2, + 0x1b, 0xb2, 0xd6, 0x94, + 0x62, 0x32, 0xee, 0x7c, 0x39, 0x3f, 0x0d, 0x57, 0x6a, 0x93, 0xc0, 0x59, + 0xc1, 0x45, 0xec, 0xf5, + 0x2a, 0x83, 0xef, 0x50, 0x5a, 0x41, 0x34, 0x28, 0xf2, 0xeb, 0xd4, 0xeb, + 0xd1, 0x65, 0xf2, 0x6d, + 0xf0, 0x0e, 0x0d, 0x41, 0x49, 0xe3, 0x91, 0x47, 0xf7, 0xe2, 0x4d, 0xd2, + 0x4e, 0xfc, 0x1e, 0xfe, + 0x25, 0x79, 0x8e, 0xaa, 0x47, 0xce, 0x3b, 0x62, 0x03, 0x55, 0x18, 0x85, + 0xbe, 0x34, 0xf3, 0x0d, + 0x9a, 0x58, 0x68, 0xf2, 0xc2, 0x52, 0x6f, 0x69, 0x98, 0x34, 0x7a, 0x0c, + 0x95, 0xf8, 0x4a, 0x0c, + 0x87, 0xcf, 0xde, 0x3f, 0x5f, 0xfa, 0x6d, 0x4a, 0x32, 0xd7, 0xa9, 0xff, + 0xc1, 0x5a, 0xfd, 0xa6, + 0xc2, 0x43, 0x5a, 0xbb, 0xc6, 0xcc, 0xf3, 0x8a, 0x14, 0x7b, 0x32, 0xe6, + 0x9b, 0x10, 0x7b, 0x3f, + 0x5b, 0x6e, 0x19, 0xad, 0x81, 0x60, 0x0b, 0x0f, 0xd6, 0x83, 0xc9, 0x54, + 0xcf, 0x65, 0x94, 0x35, + 0xad, 0xbc, 0x59, 0xc7, 0xe4, 0x80, 0xf6, 0xa6, 0x1d, 0x9e, 0x6f, 0x62, + 0x63, 0x69, 0x3e, 0x37, + 0xed, 0x7f, 0xda, 0x7a, 0x2e, 0x14, 0xd7, 0xfb, 0xec, 0xf7, 0xec, 0x79, + 0x3f, 0x56, 0xf7, 0xac, + 0x1e, 0xfd, 0x5e, 0x73, 0x11, 0x82, 0x7f, 0x4f, 0x6a, 0x2c, 0xdf, 0x1c, + 0xe9, 0x14, 0x5b, 0x83, + 0x1d, 0x62, 0x47, 0xa4, 0x5d, 0xe8, 0x8a, 0xf6, 0x10, 0x1e, 0xd8, 0xc0, + 0xdf, 0x1f, 0xf8, 0x3b, + 0xf8, 0x4e, 0x6a, 0x45, 0x53, 0xb5, 0x3c, 0x50, 0x1a, 0x98, 0x24, 0xb8, + 0xc9, 0xac, 0x9f, 0x22, + 0xcc, 0x84, 0xf3, 0xf8, 0xd9, 0xe0, 0x78, 0xf5, 0x5c, 0x78, 0x59, 0xec, + 0x02, 0xb8, 0x28, 0x34, + 0x17, 0x54, 0xd3, 0xb9, 0xa7, 0x4e, 0xc6, 0xd5, 0x5a, 0x25, 0xac, 0x56, + 0x26, 0x73, 0x93, 0xe4, + 0xc9, 0x60, 0xaa, 0x36, 0x95, 0x5b, 0x10, 0xbf, 0x85, 0x8b, 0xc5, 0xda, + 0xe0, 0x46, 0xbd, 0x03, + 0x37, 0x86, 0xda, 0x70, 0x5b, 0xa8, 0x01, 0x35, 0x84, 0xb6, 0xc0, 0x3f, + 0xcb, 0xff, 0x61, 0x22, + 0x9d, 0x47, 0x78, 0x9d, 0xbd, 0x87, 0xd5, 0xcd, 0x6f, 0x9c, 0xe1, 0x9b, + 0xa8, 0x8d, 0x87, 0x53, + 0x02, 0xd3, 0xe1, 0x2c, 0xed, 0x30, 0x6e, 0x9a, 0x36, 0x01, 0x54, 0x2a, + 0x15, 0xb0, 0x2c, 0x50, + 0x8a, 0xca, 0x03, 0x15, 0xb0, 0x44, 0xb1, 0x41, 0x97, 0x36, 0x85, 0x9b, + 0x1d, 0x3b, 0x93, 0x5d, + 0x11, 0xf9, 0x09, 0xd0, 0xd4, 0x56, 0xd4, 0x4c, 0xe6, 0xbf, 0x66, 0x04, + 0x91, 0x18, 0x52, 0x60, + 0x40, 0x91, 0x85, 0x5f, 0xc6, 0xd6, 0x13, 0xfe, 0x3c, 0x01, 0x8f, 0x97, + 0x26, 0xe1, 0xc3, 0x28, + 0xf6, 0x45, 0x17, 0xfa, 0x0f, 0x8f, 0x4e, 0x63, 0xc6, 0xcb, 0x04, 0x8b, + 0xc5, 0x62, 0xf3, 0xd9, + 0x38, 0xa9, 0x41, 0x64, 0x9f, 0x88, 0xf7, 0x70, 0x5e, 0x62, 0x13, 0x6a, + 0xba, 0x88, 0xa1, 0xd1, + 0x09, 0x7f, 0x1e, 0x39, 0x06, 0xcc, 0x31, 0x66, 0x71, 0x6e, 0xb1, 0x04, + 0x56, 0x2a, 0x13, 0xe1, + 0x44, 0x6d, 0x32, 0x98, 0xa0, 0x9d, 0x0b, 0x5b, 0x08, 0xf7, 0x43, 0x1a, + 0x87, 0x36, 0xc9, 0xff, + 0x07, 0x1e, 0x6f, 0x70, 0xd7, 0xbb, 0x1a, 0xa6, 0x72, 0xd3, 0x54, 0x27, + 0x2c, 0x0a, 0x38, 0xa0, + 0x43, 0x2a, 0x85, 0x25, 0x92, 0x1d, 0xda, 0xa5, 0x42, 0x98, 0x47, 0xb0, + 0x75, 0x9c, 0x98, 0x67, + 0xda, 0xda, 0xae, 0xd0, 0x1c, 0x76, 0x76, 0xd3, 0x51, 0xbe, 0x33, 0x1a, + 0x4e, 0x62, 0x7f, 0x64, + 0xe8, 0xd8, 0xd0, 0x54, 0xaa, 0xbd, 0x11, 0x9b, 0x97, 0xd8, 0x9e, 0x5a, + 0x04, 0xbd, 0x13, 0xfc, + 0x3d, 0xdb, 0xde, 0x7c, 0x9c, 0xc7, 0xd1, 0x38, 0x9e, 0x99, 0x18, 0xa8, + 0x44, 0x04, 0x47, 0x39, + 0x82, 0x9f, 0xd0, 0x46, 0xb8, 0x5e, 0x3e, 0x4f, 0x56, 0x70, 0xba, 0x86, + 0x93, 0xd7, 0x05, 0xa4, + 0x15, 0xab, 0x33, 0xd0, 0xc2, 0xc6, 0x23, 0xfd, 0x87, 0x35, 0x1d, 0xe6, + 0x3d, 0x23, 0x72, 0x3b, + 0x68, 0x52, 0x1f, 0xe7, 0xe3, 0x04, 0xeb, 0x75, 0x5d, 0x45, 0x7a, 0x50, + 0xc6, 0x5a, 0x30, 0x84, + 0xa5, 0xe0, 0x26, 0xfc, 0x10, 0xc1, 0x6f, 0x47, 0x80, 0xf0, 0x70, 0xb2, + 0x2a, 0xb9, 0x88, 0x2d, + 0x3b, 0x3b, 0x34, 0xc9, 0x3f, 0x5b, 0x39, 0x16, 0x86, 0xf4, 0x16, 0x1c, + 0x35, 0x9a, 0x71, 0xdc, + 0x08, 0xe0, 0x6d, 0xd2, 0x37, 0xe8, 0xcb, 0x30, 0xf6, 0x1d, 0x75, 0xcf, + 0x61, 0xeb, 0x8f, 0x6b, + 0x3f, 0xaa, 0x7e, 0x82, 0x5a, 0x04, 0x8a, 0x02, 0x36, 0x5c, 0x12, 0x28, + 0x07, 0x25, 0x22, 0xc1, + 0x5c, 0xb2, 0x76, 0xf7, 0x6b, 0x0b, 0x94, 0x03, 0x14, 0xf1, 0xc5, 0xb8, + 0x5c, 0x99, 0x06, 0x4e, + 0x8b, 0x5c, 0x0d, 0x2e, 0xd1, 0x4f, 0x04, 0x77, 0x6a, 0x51, 0x14, 0x26, + 0xe7, 0x16, 0x83, 0x06, + 0xc1, 0xbb, 0xeb, 0x50, 0x8d, 0x72, 0x15, 0xba, 0x53, 0x0d, 0x20, 0x44, + 0xec, 0x69, 0x41, 0xe3, + 0x61, 0x9d, 0xce, 0xc0, 0x1e, 0x69, 0x37, 0xda, 0x87, 0x2f, 0x1b, 0x69, + 0x8f, 0x18, 0xe5, 0x0c, + 0xad, 0xa3, 0x90, 0x8d, 0x77, 0x50, 0xdc, 0x28, 0x22, 0xf3, 0xdb, 0xa6, + 0xda, 0xfd, 0xf4, 0x35, + 0xc1, 0x41, 0xb3, 0x95, 0x04, 0x4b, 0x7c, 0x0e, 0x62, 0x1f, 0x9b, 0x5a, + 0xa1, 0x52, 0xcc, 0x96, + 0x87, 0x8a, 0x7d, 0xd9, 0xe6, 0x7a, 0x6e, 0xf7, 0x5b, 0xac, 0x18, 0xb5, + 0x86, 0x95, 0x6e, 0xff, + 0x60, 0x1a, 0xcb, 0x6c, 0xd6, 0x69, 0xe9, 0xf7, 0x15, 0xa4, 0xc9, 0xb1, + 0xa0, 0xb6, 0x2f, 0xad, + 0x83, 0x4f, 0x71, 0x30, 0xa3, 0xbe, 0x46, 0xd6, 0x85, 0xac, 0xb9, 0x6f, + 0xdf, 0xdf, 0x98, 0x24, + 0xea, 0x7c, 0x19, 0xc9, 0xf9, 0x26, 0x29, 0xeb, 0xaf, 0xf9, 0x68, 0xac, + 0x80, 0x4d, 0xca, 0xe3, + 0x32, 0xdd, 0x57, 0x6b, 0x39, 0x2e, 0x79, 0xa3, 0xaa, 0x49, 0xdd, 0x5f, + 0xd3, 0x2a, 0x88, 0xbf, + 0x43, 0x8f, 0x85, 0xc2, 0xa8, 0x37, 0xda, 0x85, 0x5b, 0x43, 0x9d, 0xb8, + 0x3b, 0xdc, 0x2b, 0xf4, + 0x84, 0x3b, 0xc5, 0x86, 0xf0, 0x76, 0xfc, 0x77, 0xfd, 0x65, 0x70, 0x51, + 0x28, 0x1f, 0x96, 0xcb, + 0x87, 0xe1, 0x2a, 0xd1, 0x2d, 0xba, 0xf8, 0x4a, 0xfc, 0x03, 0xf9, 0x68, + 0x38, 0x53, 0x9c, 0x85, + 0xe6, 0xca, 0x47, 0xa1, 0x13, 0xf5, 0xc5, 0x84, 0x5b, 0x5d, 0x0e, 0x2f, + 0x8f, 0x2e, 0x82, 0x67, + 0xc7, 0x3d, 0x10, 0x34, 0xae, 0xe6, 0xae, 0x8a, 0x1c, 0x07, 0x0e, 0xd3, + 0x89, 0x1d, 0x19, 0xba, + 0x90, 0x5b, 0x17, 0xed, 0x85, 0x3d, 0x04, 0xf3, 0xda, 0xb5, 0x66, 0x21, + 0x6e, 0xb4, 0xf1, 0x8d, + 0xe1, 0x20, 0x7e, 0x34, 0xf4, 0x7b, 0xee, 0xe1, 0x96, 0xf3, 0x3c, 0xae, + 0x8d, 0x73, 0xea, 0x16, + 0x34, 0xcf, 0xf2, 0x4d, 0x33, 0xca, 0xc1, 0x74, 0xfd, 0x7c, 0x6e, 0xba, + 0x4a, 0xb0, 0x2b, 0x38, + 0x87, 0x9b, 0x66, 0x54, 0x71, 0xb3, 0x8c, 0x79, 0xdc, 0x11, 0xc6, 0xd1, + 0xf0, 0x48, 0x6d, 0x11, + 0xbc, 0x48, 0xf9, 0x31, 0x3a, 0x47, 0x1f, 0x0f, 0x16, 0x87, 0x56, 0x71, + 0x72, 0x30, 0x86, 0x1a, + 0xb4, 0x28, 0x8e, 0xe8, 0x11, 0x62, 0xdf, 0x85, 0xb1, 0xae, 0x87, 0xa0, + 0xac, 0x04, 0xf0, 0xa7, + 0x21, 0x0f, 0xc1, 0xbf, 0x49, 0xc4, 0xe6, 0x9d, 0x8f, 0x8f, 0x0c, 0x1f, + 0xe5, 0x5f, 0x10, 0x9b, + 0xcd, 0x4c, 0xd4, 0xcb, 0x40, 0x99, 0x58, 0x46, 0x38, 0x65, 0x29, 0x2a, + 0x41, 0x76, 0x7e, 0x5c, + 0xa0, 0x00, 0xfe, 0xa4, 0xf1, 0x15, 0xe6, 0xdd, 0x48, 0x10, 0x00, 0x4d, + 0xe3, 0x15, 0xa3, 0x87, + 0x7f, 0xda, 0x38, 0x96, 0x60, 0x9e, 0x1b, 0x94, 0xc9, 0xd5, 0x60, 0x8a, + 0x3c, 0x11, 0x96, 0x4b, + 0x55, 0x60, 0xbc, 0x7c, 0x1e, 0x68, 0x57, 0x64, 0x14, 0x08, 0xee, 0x83, + 0xdf, 0x28, 0x5b, 0xd8, + 0x19, 0xb1, 0x32, 0xe6, 0x68, 0x75, 0x3a, 0x74, 0x0a, 0x65, 0xf0, 0x70, + 0xb5, 0xda, 0x5f, 0xa6, + 0xb8, 0x09, 0xdf, 0x1a, 0x0f, 0x26, 0xcb, 0x87, 0x73, 0x0b, 0xb5, 0x23, + 0xd8, 0x79, 0xca, 0x5c, + 0xff, 0xb1, 0xea, 0x62, 0xf6, 0xe8, 0xd0, 0x61, 0xec, 0xbc, 0xc8, 0x51, + 0xec, 0xfc, 0xd0, 0x12, + 0x14, 0xd6, 0xc2, 0xbc, 0xa2, 0x05, 0x71, 0x40, 0x97, 0x79, 0xa4, 0xf1, + 0xfc, 0x53, 0xe1, 0x8f, + 0xc1, 0xb6, 0xb6, 0x73, 0x3d, 0x25, 0xad, 0xd5, 0xbe, 0x69, 0x7a, 0x35, + 0x28, 0x97, 0x8a, 0xf1, + 0x0c, 0x6d, 0x3e, 0x74, 0xc9, 0x4e, 0x50, 0x1d, 0x98, 0x0c, 0xab, 0x03, + 0x13, 0xc1, 0x34, 0x79, + 0x16, 0x9c, 0xaf, 0xcc, 0x06, 0xd3, 0xe5, 0xb3, 0xc0, 0x55, 0x91, 0x8b, + 0xc0, 0x39, 0xf1, 0xa3, + 0xb8, 0x63, 0x42, 0x27, 0xb2, 0x67, 0xe8, 0x5e, 0x28, 0x19, 0x06, 0x96, + 0x43, 0x3a, 0x0a, 0xe8, + 0x41, 0x14, 0x09, 0xe9, 0x38, 0x66, 0x44, 0xb0, 0xac, 0x6d, 0xc3, 0x8f, + 0x6b, 0x6e, 0x98, 0x47, + 0x18, 0x9b, 0x43, 0x2c, 0xc7, 0x93, 0xb5, 0x19, 0x68, 0x8a, 0x52, 0x02, + 0x66, 0xca, 0x27, 0x00, + 0x43, 0x6f, 0x83, 0xb1, 0xb0, 0xce, 0xb7, 0x6b, 0x6f, 0x83, 0x6f, 0x95, + 0x2e, 0xee, 0xc4, 0x4d, + 0x87, 0x6d, 0x38, 0xb1, 0xf7, 0x84, 0xda, 0x59, 0x46, 0x25, 0x3b, 0x35, + 0x70, 0x04, 0x9c, 0xa2, + 0x4c, 0xe3, 0x66, 0xc8, 0xd3, 0xb8, 0xc3, 0x03, 0xb3, 0xd1, 0x2c, 0xe9, + 0x30, 0x74, 0xb8, 0x78, + 0x14, 0x9a, 0x47, 0x38, 0xdf, 0x4c, 0x7e, 0x06, 0x9a, 0x27, 0xcd, 0x47, + 0x47, 0x04, 0xcf, 0x82, + 0xe7, 0x06, 0x2f, 0x86, 0xcb, 0x94, 0x30, 0x6c, 0x30, 0x44, 0x72, 0x7e, + 0x11, 0x0a, 0xba, 0x0c, + 0x05, 0x63, 0x3d, 0xbc, 0x5d, 0x5b, 0x03, 0x79, 0x1d, 0x42, 0xa8, 0x63, + 0xc8, 0x6b, 0x08, 0x08, + 0x1a, 0x0b, 0x56, 0xea, 0xad, 0x60, 0x27, 0xbe, 0x60, 0x04, 0x2e, 0xd8, + 0x83, 0xe5, 0x3e, 0x62, + 0x63, 0xb2, 0xd9, 0xb8, 0x98, 0xc3, 0x28, 0xf1, 0xf5, 0xd9, 0xb5, 0x88, + 0xe2, 0x47, 0x41, 0xa0, + 0xcf, 0x46, 0xee, 0xc3, 0xc2, 0x69, 0x8d, 0xa5, 0x1b, 0xe8, 0x91, 0xd6, + 0xf8, 0xb4, 0x0d, 0xfa, + 0x4d, 0xe0, 0x98, 0x35, 0x2c, 0xe9, 0xd0, 0xec, 0xb7, 0x38, 0xa4, 0x0e, + 0xfe, 0xf0, 0x7c, 0x13, + 0x82, 0x65, 0x76, 0xb5, 0x80, 0xe2, 0x60, 0x7f, 0xed, 0x67, 0x94, 0xbc, + 0x26, 0x98, 0x76, 0x30, + 0xe1, 0x49, 0x23, 0xf4, 0xb5, 0xa4, 0x3a, 0xf8, 0xc5, 0xa1, 0x72, 0x5f, + 0xa2, 0xce, 0x57, 0xc6, + 0x7e, 0x7c, 0x0f, 0x7b, 0xd3, 0x8e, 0x1c, 0x93, 0xd4, 0xf5, 0x5c, 0xfa, + 0xf6, 0x66, 0xec, 0xab, + 0xbf, 0x96, 0x2e, 0xdf, 0x24, 0xf7, 0x35, 0xa9, 0x07, 0xeb, 0x76, 0x84, + 0x09, 0xfe, 0x3d, 0x17, + 0x8a, 0xa3, 0x9e, 0x68, 0x2f, 0xda, 0x18, 0xee, 0x26, 0x6d, 0x93, 0x40, + 0x8e, 0x62, 0x6f, 0xf4, + 0x19, 0x84, 0x1b, 0x09, 0xff, 0xd2, 0xa7, 0x08, 0x13, 0x84, 0x2a, 0x81, + 0xd8, 0x48, 0x42, 0x05, + 0x76, 0xa3, 0x33, 0xb5, 0xeb, 0xb1, 0x57, 0x59, 0x2d, 0xdc, 0xa9, 0xac, + 0x10, 0xee, 0xd0, 0x6a, + 0x05, 0x56, 0x97, 0x84, 0xa6, 0x60, 0x80, 0xf7, 0x85, 0x3a, 0xf0, 0xd6, + 0x70, 0x37, 0xd0, 0x0d, + 0x0f, 0xbe, 0xd3, 0x58, 0x29, 0x2c, 0x8b, 0x84, 0xe1, 0x7d, 0x91, 0x36, + 0xd0, 0x14, 0x69, 0x84, + 0xed, 0xe1, 0x36, 0xbe, 0x9d, 0xf0, 0x91, 0x86, 0x50, 0x13, 0x86, 0xd1, + 0x35, 0x6c, 0x55, 0xcf, + 0xb4, 0xba, 0x85, 0xad, 0xb3, 0x3c, 0x53, 0x43, 0x13, 0xb9, 0x6a, 0xa9, + 0x14, 0xcd, 0xd2, 0x16, + 0xb3, 0xe7, 0xa9, 0x77, 0x08, 0xcb, 0x82, 0xcb, 0xe1, 0x6d, 0xc1, 0x65, + 0x70, 0x6d, 0xd0, 0x0b, + 0x40, 0x10, 0xc0, 0x5a, 0xdd, 0x8f, 0x1a, 0xd5, 0x6e, 0xa4, 0x69, 0xcb, + 0xd1, 0x5d, 0x7a, 0x03, + 0xea, 0x36, 0xda, 0x70, 0x93, 0xd1, 0x80, 0x1a, 0xb5, 0x06, 0x82, 0x31, + 0x0d, 0x28, 0xae, 0x19, + 0x48, 0x57, 0x55, 0xf4, 0x47, 0x9d, 0x65, 0x6d, 0xf2, 0x1c, 0x7c, 0x64, + 0xe8, 0x58, 0x70, 0x6c, + 0xc3, 0x42, 0x66, 0x76, 0xc8, 0xed, 0x9f, 0xa2, 0x1e, 0x0d, 0x5c, 0x52, + 0x09, 0x34, 0x75, 0x3a, + 0xb1, 0x84, 0x27, 0xf6, 0x38, 0xe1, 0x69, 0x93, 0x61, 0x34, 0xf2, 0x06, + 0xf7, 0xbc, 0xa6, 0xf2, + 0xac, 0x72, 0xb7, 0xf0, 0xa0, 0x3e, 0x13, 0x95, 0x2a, 0x2e, 0x30, 0x41, + 0x99, 0x04, 0xaa, 0x64, + 0xd2, 0x57, 0xc9, 0x05, 0x27, 0xca, 0x17, 0x73, 0x1d, 0xaa, 0x81, 0xe2, + 0xe1, 0x2d, 0xf0, 0x46, + 0x62, 0x83, 0x54, 0x07, 0x67, 0xb3, 0x47, 0x4a, 0x93, 0x61, 0xb9, 0x50, + 0x05, 0x8f, 0xd7, 0xe6, + 0xfb, 0x8f, 0x57, 0x4f, 0x86, 0xa7, 0xa9, 0x67, 0xc2, 0x2b, 0x95, 0x9b, + 0xe1, 0x0a, 0xfd, 0x56, + 0x78, 0x8d, 0x7a, 0x25, 0xdc, 0x20, 0x03, 0xfc, 0x53, 0xe5, 0x04, 0x74, + 0x86, 0x7a, 0x31, 0xf4, + 0x04, 0x37, 0xc1, 0x58, 0xc8, 0x40, 0x41, 0xcd, 0xc0, 0x61, 0x5d, 0x26, + 0xb6, 0xaa, 0x8a, 0x37, + 0xc6, 0x97, 0xf9, 0x4b, 0x5a, 0xcb, 0xbc, 0x33, 0x23, 0x13, 0xd9, 0x0a, + 0xc5, 0x85, 0x9c, 0x4a, + 0x19, 0x9c, 0xad, 0x1e, 0x81, 0x8e, 0x10, 0x8f, 0x03, 0x27, 0x48, 0xc7, + 0x83, 0x53, 0xc4, 0x1f, + 0x82, 0xcb, 0x94, 0x25, 0xf8, 0x5a, 0xf5, 0x0c, 0x7c, 0x8d, 0xda, 0xcb, + 0x3f, 0x26, 0x89, 0xe8, + 0x27, 0xe2, 0xe9, 0x78, 0x91, 0x72, 0x0e, 0x5e, 0xae, 0xf5, 0xa0, 0x66, + 0x23, 0x8a, 0xe2, 0x04, + 0xfb, 0x43, 0x14, 0xf7, 0x83, 0x71, 0x3e, 0xae, 0xc7, 0xb0, 0xae, 0x3e, + 0x80, 0x9f, 0xd0, 0x2a, + 0x01, 0xdd, 0xd1, 0xbd, 0x42, 0x9a, 0x80, 0x26, 0xca, 0xd5, 0xa8, 0x5c, + 0x2a, 0x44, 0x73, 0x03, + 0x8b, 0x89, 0xfd, 0xdb, 0xc2, 0xc5, 0xc9, 0x5a, 0xb3, 0x35, 0xf8, 0x3c, + 0xbb, 0xb4, 0x63, 0x6a, + 0xed, 0x31, 0xbd, 0x8b, 0x6b, 0x8e, 0x6a, 0x9c, 0xc6, 0xb8, 0xa4, 0x02, + 0x74, 0xa2, 0x7c, 0x3e, + 0x98, 0x28, 0x4f, 0x27, 0xf8, 0x37, 0x93, 0x9b, 0xab, 0x1c, 0x83, 0x4e, + 0x53, 0xae, 0x41, 0xcb, + 0x94, 0x1b, 0xe1, 0x15, 0xe2, 0x65, 0xf0, 0x72, 0xfe, 0x42, 0x78, 0x7a, + 0xe0, 0x48, 0x74, 0x44, + 0x60, 0x11, 0x3a, 0x57, 0x46, 0xa8, 0x45, 0xd5, 0x91, 0xac, 0x12, 0xee, + 0xa7, 0xf2, 0x08, 0xa9, + 0x18, 0x61, 0x5d, 0x02, 0xaa, 0x21, 0x00, 0x9f, 0xe1, 0x03, 0x40, 0x47, + 0xa4, 0x31, 0x80, 0xd5, + 0x01, 0xd8, 0xa0, 0x45, 0xe1, 0x0b, 0xe8, 0xa2, 0x91, 0xf1, 0xca, 0xa1, + 0x72, 0x6f, 0xd6, 0x9a, + 0x2e, 0xc4, 0x06, 0x72, 0xe8, 0xc5, 0xcc, 0xc8, 0x1c, 0xcd, 0x4a, 0xff, + 0x82, 0x7b, 0x4f, 0xbf, + 0xf1, 0xca, 0x3d, 0x2b, 0xcf, 0x5a, 0xf9, 0xf6, 0xb2, 0xc5, 0x47, 0x75, + 0x94, 0xdd, 0x55, 0x16, + 0x29, 0xf7, 0x50, 0x0d, 0xb0, 0x3c, 0x92, 0xd0, 0x0b, 0x93, 0x62, 0xf1, + 0x60, 0x72, 0xce, 0x69, + 0x4e, 0xf7, 0x61, 0x8d, 0x14, 0xe6, 0x62, 0x5f, 0x35, 0x54, 0xa0, 0x95, + 0xfa, 0xe9, 0x39, 0x93, + 0xfd, 0x26, 0x65, 0x31, 0xbb, 0x8f, 0xd6, 0x7e, 0xb6, 0x19, 0xc4, 0x1e, + 0x94, 0xf3, 0x07, 0xc7, + 0x49, 0xcc, 0x27, 0xf8, 0x67, 0xf3, 0x0f, 0x6a, 0x9d, 0xc9, 0xf5, 0x5c, + 0x06, 0x63, 0xb4, 0x4d, + 0xfb, 0xb2, 0x29, 0x69, 0x3f, 0x32, 0x29, 0x45, 0x8c, 0x76, 0xce, 0xeb, + 0x74, 0x1f, 0x70, 0x9d, + 0xaf, 0x81, 0x7c, 0x13, 0xd3, 0x47, 0x32, 0xa2, 0x9e, 0xcb, 0xc8, 0x7c, + 0x13, 0x5b, 0x2e, 0xeb, + 0x74, 0x0f, 0xab, 0x5d, 0x43, 0xf1, 0xef, 0xe7, 0xa1, 0x46, 0xb4, 0x39, + 0xba, 0x19, 0xdd, 0x1d, + 0xee, 0x41, 0x1b, 0x23, 0x77, 0xf3, 0x9b, 0xc2, 0x3d, 0xc2, 0x3d, 0xd1, + 0x17, 0xe0, 0xd2, 0x48, + 0x31, 0x3f, 0x55, 0x1c, 0x2f, 0x56, 0x09, 0x2e, 0xa9, 0x5a, 0x70, 0x09, + 0x15, 0xe2, 0xe1, 0xe8, + 0x58, 0x75, 0x03, 0xda, 0x19, 0x7c, 0x4c, 0x78, 0x24, 0xf8, 0xa0, 0xb0, + 0x3d, 0xf4, 0x30, 0x7f, + 0xbf, 0x7e, 0xaf, 0xb8, 0x45, 0xdb, 0x26, 0x6c, 0x37, 0x7a, 0x70, 0x9b, + 0xde, 0x89, 0xef, 0xd6, + 0xef, 0x15, 0xb6, 0x07, 0x1f, 0x12, 0xb7, 0x87, 0x7b, 0x70, 0x53, 0xb8, + 0x15, 0xb6, 0x46, 0x3a, + 0x50, 0x57, 0xa4, 0x07, 0x77, 0x86, 0x5b, 0x41, 0x5b, 0xa8, 0x0b, 0xdf, + 0x15, 0x39, 0x1f, 0xce, + 0xee, 0x38, 0xb2, 0x6e, 0x56, 0x64, 0x92, 0xcf, 0xad, 0xb9, 0x60, 0x95, + 0xec, 0x42, 0x33, 0xf5, + 0xd3, 0x59, 0xa0, 0x3f, 0xc6, 0xdf, 0x1b, 0xbe, 0x17, 0x6d, 0x09, 0x6d, + 0x45, 0x9b, 0xc2, 0x9d, + 0xa8, 0xc3, 0xe8, 0xc2, 0x1b, 0xf5, 0x6e, 0xdc, 0xa2, 0xb7, 0xe2, 0x5e, + 0x6d, 0x0b, 0xbf, 0x45, + 0x6b, 0xc5, 0x71, 0xbd, 0x19, 0xb5, 0x93, 0xd6, 0x48, 0xb0, 0xb0, 0x51, + 0x6f, 0x21, 0x2d, 0x4e, + 0x30, 0x30, 0x06, 0xbf, 0x52, 0x0d, 0xae, 0x3a, 0x7c, 0x32, 0x38, 0x21, + 0x7e, 0x8c, 0x6f, 0x7e, + 0xd3, 0x4c, 0x66, 0x92, 0x56, 0x4a, 0xf8, 0xe4, 0x39, 0xa0, 0x44, 0xb6, + 0x41, 0xa7, 0x54, 0x84, + 0xec, 0x81, 0x12, 0x54, 0x2c, 0x94, 0x62, 0x07, 0x7d, 0x9e, 0xe4, 0x53, + 0xe1, 0x5e, 0xed, 0x5f, + 0xf0, 0x11, 0x75, 0x23, 0xda, 0x1a, 0x9c, 0x04, 0x2b, 0x08, 0xef, 0x9b, + 0x24, 0x57, 0xc2, 0x92, + 0x40, 0x09, 0xc1, 0xbf, 0x0a, 0x38, 0x4d, 0xb9, 0x9c, 0xeb, 0xd5, 0xc2, + 0xa8, 0x39, 0x2a, 0xc3, + 0x19, 0xe1, 0xa9, 0xec, 0x0c, 0x6d, 0x12, 0x37, 0x27, 0x50, 0x0d, 0x2b, + 0xc5, 0x4a, 0x78, 0x2c, + 0xe1, 0x3a, 0x77, 0x87, 0xda, 0xb9, 0xb6, 0x50, 0x2b, 0xd7, 0x1a, 0xea, + 0x20, 0xc7, 0x28, 0xe1, + 0x47, 0x6d, 0xe4, 0x1a, 0xe3, 0x7c, 0xab, 0xd6, 0xc6, 0x37, 0xab, 0x9d, + 0xb8, 0x87, 0x5c, 0x53, + 0xcc, 0x08, 0xa1, 0x08, 0xe1, 0xa7, 0x31, 0xdd, 0x20, 0x78, 0x15, 0x45, + 0xb5, 0xcd, 0xb3, 0x98, + 0xea, 0xf8, 0x54, 0xc6, 0x2d, 0x57, 0x22, 0x77, 0xc0, 0x89, 0x2a, 0xa5, + 0x62, 0x72, 0x3c, 0x83, + 0x5c, 0x7f, 0x07, 0x8a, 0x1b, 0x71, 0xd4, 0x62, 0x34, 0x22, 0x8a, 0x69, + 0x21, 0x3d, 0x84, 0x9b, + 0xf4, 0x46, 0xdc, 0xa2, 0x35, 0xe1, 0xa0, 0x16, 0x44, 0x1a, 0x59, 0x2f, + 0xee, 0x09, 0x36, 0xa1, + 0x06, 0xd2, 0xe7, 0x98, 0x4e, 0xb8, 0x2f, 0xf9, 0xee, 0xc6, 0x60, 0x1c, + 0x37, 0xe8, 0x4d, 0x38, + 0xa4, 0x3d, 0x88, 0x9f, 0xd2, 0x2a, 0xe0, 0x38, 0xbe, 0x0c, 0xbb, 0xc4, + 0xf1, 0xd8, 0x29, 0x95, + 0xe0, 0x12, 0xa1, 0x10, 0xcd, 0x17, 0x4f, 0x87, 0x11, 0xbd, 0x95, 0x8b, + 0x1a, 0x2d, 0xf0, 0x9e, + 0x86, 0xcb, 0x99, 0x49, 0xdd, 0x8b, 0x6b, 0x4e, 0x6c, 0x5d, 0xe0, 0x9d, + 0xa2, 0xbb, 0x09, 0xcf, + 0x74, 0xc0, 0x23, 0xf4, 0x0b, 0xc0, 0xba, 0x20, 0xe2, 0x18, 0xdd, 0xc3, + 0xd5, 0x1b, 0x5e, 0x08, + 0x0d, 0x15, 0x2a, 0x86, 0x07, 0xf8, 0x82, 0x18, 0x40, 0x8d, 0x33, 0x63, + 0x97, 0x6a, 0x55, 0x1f, + 0x6c, 0xd6, 0xc2, 0x30, 0x60, 0xa8, 0x28, 0xa0, 0xc9, 0x50, 0xd2, 0x24, + 0x18, 0xd0, 0x30, 0xc4, + 0x3a, 0x06, 0x80, 0x60, 0x9f, 0xcf, 0x60, 0x80, 0x9f, 0xe0, 0x9e, 0x5f, + 0xf7, 0x13, 0xfc, 0xf3, + 0x82, 0x35, 0x5a, 0x08, 0x3e, 0x8d, 0xce, 0x1b, 0xc1, 0x01, 0x68, 0xed, + 0xc7, 0x6c, 0xf5, 0x55, + 0x88, 0xdd, 0x05, 0xe8, 0x3e, 0x4d, 0xfd, 0x6b, 0xbe, 0x2d, 0x34, 0xb5, + 0x76, 0xd1, 0xa3, 0x17, + 0x5f, 0x7d, 0xcb, 0x5b, 0x2b, 0x4f, 0x59, 0xf9, 0xee, 0xca, 0x93, 0xfb, + 0xdb, 0xb2, 0x87, 0x4a, + 0xae, 0xa5, 0x71, 0x66, 0xf4, 0x3b, 0xcb, 0xa9, 0x0f, 0x39, 0x5e, 0x59, + 0x67, 0xb6, 0x58, 0x9f, + 0x3e, 0x66, 0xe6, 0x9b, 0x14, 0x00, 0x1a, 0x0f, 0x67, 0xcf, 0xa5, 0xae, + 0x97, 0xa3, 0xfd, 0x16, + 0xc7, 0xd1, 0x18, 0x14, 0xd3, 0x56, 0xed, 0xf7, 0x9b, 0x94, 0x32, 0x0e, + 0x82, 0x7d, 0xfd, 0x7b, + 0xbd, 0xd1, 0xe3, 0x20, 0x17, 0x2b, 0x84, 0xf6, 0x50, 0x91, 0x3f, 0xa5, + 0x4d, 0x98, 0x54, 0x07, + 0x7f, 0xf8, 0xde, 0x8c, 0x23, 0xea, 0xb9, 0x98, 0xb1, 0x10, 0x09, 0x2c, + 0xfa, 0x7f, 0x68, 0x6f, + 0xda, 0xa1, 0xb9, 0x6f, 0x74, 0xdf, 0x8f, 0xb4, 0xf5, 0x5c, 0x12, 0xb8, + 0x5e, 0x1c, 0xad, 0xf2, + 0x58, 0xdd, 0xb3, 0xba, 0x68, 0x94, 0x7b, 0x50, 0x06, 0x69, 0xcc, 0x5f, + 0xa8, 0x1d, 0x6d, 0x8d, + 0x6e, 0xc5, 0x5b, 0xc2, 0xf7, 0xa0, 0x6d, 0x11, 0x72, 0x8c, 0x6c, 0xe6, + 0xb7, 0xc6, 0xdf, 0x80, + 0x2b, 0x8d, 0x42, 0x61, 0x02, 0x1e, 0x2f, 0x54, 0x0b, 0x55, 0x92, 0x53, + 0x98, 0xc0, 0xcf, 0x0c, + 0x9d, 0x02, 0x4f, 0x94, 0x6f, 0x80, 0x4f, 0x05, 0x7b, 0x85, 0xce, 0x60, + 0x8f, 0xb0, 0xd1, 0xe8, + 0xe5, 0x37, 0x07, 0x37, 0x8a, 0xdd, 0xa1, 0x1e, 0xa1, 0x37, 0xb2, 0x91, + 0xef, 0x0a, 0x77, 0x09, + 0xdd, 0xe1, 0x76, 0xdc, 0x11, 0xe9, 0x02, 0x5d, 0xd1, 0x76, 0xae, 0x3d, + 0x4a, 0x30, 0x2f, 0xdc, + 0x0d, 0x37, 0x87, 0x3b, 0xe0, 0x3d, 0x91, 0x2d, 0x5c, 0x57, 0xb8, 0x17, + 0xa1, 0xc8, 0x95, 0x78, + 0x7a, 0xe3, 0x74, 0x66, 0xbc, 0x5a, 0xc5, 0xba, 0xb4, 0xf1, 0x60, 0xbc, + 0xe6, 0xc4, 0x93, 0x43, + 0xc7, 0x72, 0x6b, 0x8c, 0xcd, 0x28, 0x16, 0x6e, 0x47, 0x2d, 0xe1, 0x66, + 0x82, 0x9b, 0xcd, 0xa8, + 0x25, 0xd8, 0x82, 0x1b, 0x0c, 0xf2, 0x5d, 0xc1, 0x56, 0xdc, 0xaa, 0x37, + 0xf3, 0x04, 0x07, 0xf9, + 0x56, 0xa3, 0x19, 0xb5, 0xe9, 0xed, 0xb0, 0xc3, 0x68, 0x45, 0xad, 0x06, + 0xf9, 0x6c, 0xb0, 0x0d, + 0x35, 0x18, 0x4d, 0xf0, 0xdf, 0x6a, 0x0f, 0x9c, 0xd9, 0x78, 0x3c, 0x7b, + 0x54, 0xfc, 0x70, 0xcf, + 0xa4, 0xa0, 0x9b, 0x75, 0x05, 0x4a, 0xe1, 0x54, 0xf5, 0x70, 0x70, 0xb1, + 0xfa, 0x43, 0x58, 0x42, + 0xf0, 0xb5, 0x4c, 0xca, 0x47, 0xc5, 0x7c, 0x09, 0xb6, 0x13, 0x2e, 0x38, + 0x49, 0x71, 0x71, 0xc7, + 0xc4, 0x3d, 0xdc, 0xe3, 0xe1, 0x5f, 0xc1, 0xad, 0x11, 0x27, 0x70, 0x4a, + 0x6e, 0x54, 0x41, 0x38, + 0xa8, 0x43, 0x2c, 0x46, 0x0e, 0xf2, 0x77, 0x73, 0xd5, 0x1b, 0xb8, 0x8d, + 0x46, 0x04, 0x75, 0x47, + 0x1f, 0x04, 0x27, 0x04, 0xab, 0xb8, 0xf1, 0xb2, 0x13, 0xce, 0x90, 0xc6, + 0x43, 0x97, 0x58, 0x04, + 0x2f, 0x20, 0xf8, 0xd3, 0x13, 0x69, 0xe6, 0x9a, 0x23, 0x4d, 0x5c, 0x2c, + 0xd2, 0xc0, 0xb5, 0xc4, + 0x5a, 0x40, 0x6b, 0xa4, 0x05, 0xc6, 0xc3, 0x0d, 0xa8, 0x21, 0xd2, 0xc2, + 0xb7, 0x85, 0x9a, 0xf9, + 0x26, 0xa3, 0x8d, 0x5c, 0x5b, 0x0b, 0x6c, 0xd6, 0x09, 0xdf, 0x25, 0x98, + 0x15, 0x0e, 0x6e, 0x83, + 0x9b, 0x1b, 0xe6, 0x33, 0x15, 0xc1, 0xf1, 0x5c, 0x95, 0xe8, 0x26, 0x58, + 0x55, 0x81, 0x4a, 0xf8, + 0x7c, 0x3c, 0x45, 0xba, 0x16, 0xd3, 0x3e, 0xb6, 0x06, 0xbb, 0x70, 0x6f, + 0xb0, 0x1d, 0xb7, 0x19, + 0xcd, 0xa0, 0xd3, 0xe8, 0x84, 0x2d, 0xa4, 0x3f, 0xf1, 0x60, 0x9c, 0xf4, + 0xb1, 0x93, 0xf0, 0xdd, + 0x4e, 0xc2, 0xfd, 0xda, 0x50, 0x7b, 0xb0, 0x15, 0xb6, 0x84, 0x9a, 0x61, + 0x53, 0xb0, 0x99, 0x7c, + 0x77, 0x33, 0x59, 0x67, 0xda, 0x71, 0xc4, 0x78, 0x0c, 0xfd, 0x5c, 0x75, + 0xc2, 0x42, 0xd1, 0xc9, + 0x57, 0x8a, 0x65, 0xd4, 0x47, 0x4e, 0xf0, 0x3d, 0x1f, 0x1d, 0x23, 0x5e, + 0x88, 0x82, 0x46, 0x1b, + 0x17, 0xd1, 0x5a, 0xb9, 0x57, 0x5b, 0x6e, 0x64, 0x66, 0xb6, 0x2d, 0xf4, + 0xcc, 0x08, 0x4f, 0xe0, + 0x5c, 0xa4, 0x9f, 0x55, 0x92, 0x1d, 0x2e, 0x54, 0xce, 0x27, 0xb6, 0x6b, + 0x2f, 0x68, 0x32, 0x62, + 0x20, 0x1e, 0x6a, 0x00, 0x8d, 0xa1, 0x08, 0x88, 0x84, 0xa2, 0x20, 0x1a, + 0x0c, 0x12, 0xdc, 0x24, + 0xf6, 0xae, 0xda, 0x40, 0x30, 0xbd, 0x01, 0xa8, 0xba, 0x0a, 0x02, 0xba, + 0x08, 0x14, 0x43, 0x06, + 0x42, 0x50, 0x04, 0xbc, 0x81, 0x00, 0x36, 0x08, 0xe6, 0x19, 0x0c, 0xc7, + 0x19, 0x7e, 0xce, 0x4f, + 0xb8, 0x1f, 0xa3, 0x13, 0x2c, 0x24, 0xf8, 0x77, 0xa7, 0x66, 0xc0, 0x47, + 0xd0, 0x05, 0x23, 0xec, + 0x11, 0xea, 0xd7, 0xc8, 0x5a, 0xeb, 0x49, 0x2c, 0x02, 0x74, 0x3f, 0x92, + 0xaa, 0xd6, 0x05, 0x77, + 0x9e, 0xf3, 0xf3, 0x9f, 0x5c, 0x9a, 0x8c, 0x79, 0xfd, 0x4d, 0xdc, 0xbb, + 0xf2, 0xcc, 0x95, 0x4f, + 0x4d, 0xbf, 0xd2, 0x8c, 0xf3, 0xa5, 0x7e, 0x93, 0xfe, 0xbc, 0x26, 0x9a, + 0x87, 0xdc, 0xe8, 0x34, + 0xeb, 0x3a, 0x99, 0x71, 0xd6, 0x7d, 0x35, 0xd4, 0x1d, 0x09, 0xbb, 0x12, + 0xa4, 0xcf, 0x37, 0xb1, + 0x50, 0x97, 0xbd, 0x7f, 0x1f, 0xd6, 0xec, 0x31, 0x28, 0x60, 0xec, 0x75, + 0x5a, 0xe8, 0x1e, 0xe7, + 0xc4, 0xde, 0x57, 0x89, 0xbd, 0x1f, 0x4c, 0xc2, 0x3f, 0x99, 0xf0, 0xa3, + 0x60, 0x21, 0x9b, 0x5d, + 0x63, 0x73, 0xd7, 0x3b, 0x23, 0xc5, 0xde, 0xf4, 0xf5, 0x5c, 0x12, 0x7e, + 0x13, 0x5a, 0x73, 0x33, + 0x67, 0x75, 0xbe, 0x62, 0xd6, 0xf6, 0xdf, 0xb3, 0xb4, 0x37, 0x2d, 0x8d, + 0xcb, 0xe9, 0xb7, 0xa5, + 0xd3, 0xe6, 0x9b, 0x10, 0xfb, 0xb8, 0xc9, 0xcc, 0x37, 0xf1, 0x64, 0xcc, + 0x37, 0xb1, 0x58, 0xab, + 0x7e, 0x78, 0x7c, 0x00, 0xd5, 0xff, 0x76, 0x86, 0x36, 0xa1, 0x6d, 0xd1, + 0x6d, 0xe8, 0xbe, 0xf0, + 0x56, 0x78, 0x1f, 0xc1, 0xc1, 0x7b, 0xa2, 0xf7, 0xf2, 0xf7, 0x47, 0x3f, + 0x83, 0x6b, 0x94, 0x71, + 0x68, 0x22, 0xef, 0xc6, 0x95, 0xa2, 0x5b, 0x9c, 0xac, 0xcc, 0xc3, 0xc7, + 0x36, 0x9c, 0x0c, 0x8e, + 0x53, 0x6e, 0x82, 0x8f, 0x06, 0x3b, 0x84, 0x5e, 0x63, 0x23, 0xe1, 0x64, + 0x77, 0xf3, 0xf7, 0xe9, + 0xdb, 0x84, 0xad, 0xc6, 0xdd, 0xfc, 0xd6, 0x50, 0x1b, 0xbe, 0x3b, 0xfc, + 0x33, 0xfc, 0x7a, 0x74, + 0x2f, 0xb7, 0x2f, 0xfe, 0xb6, 0x7f, 0x5f, 0xe3, 0x6b, 0xcc, 0xfe, 0xd8, + 0x87, 0xcc, 0xaf, 0x83, + 0x9f, 0xb0, 0x9f, 0x69, 0xbf, 0xe3, 0x7a, 0xc2, 0x22, 0xd8, 0x16, 0xbe, + 0x07, 0x34, 0x47, 0xaf, + 0xc0, 0xe5, 0xc6, 0x64, 0x6e, 0xbc, 0x52, 0x05, 0xc7, 0x6b, 0x74, 0x5e, + 0xda, 0xf9, 0xc3, 0x55, + 0x3b, 0x77, 0x89, 0xf6, 0x14, 0xec, 0x0d, 0xf6, 0xc0, 0x8d, 0xc6, 0x46, + 0xb8, 0xd9, 0xa0, 0xba, + 0x61, 0x2f, 0xec, 0x25, 0xd8, 0xd9, 0x11, 0xea, 0x80, 0xed, 0x46, 0x37, + 0xea, 0x0c, 0x77, 0xc2, + 0xee, 0x50, 0x2f, 0x78, 0x44, 0x7b, 0x0c, 0xf6, 0x18, 0x1d, 0xa8, 0x87, + 0xbe, 0x47, 0xf0, 0xaf, + 0xd3, 0xe8, 0x02, 0x6f, 0x87, 0x20, 0x9c, 0xd9, 0x70, 0x84, 0xef, 0xb0, + 0xd0, 0x04, 0x9f, 0x8b, + 0xd8, 0xb0, 0x4e, 0xb1, 0x04, 0x4d, 0x57, 0x5d, 0xa0, 0x56, 0x7f, 0x09, + 0xae, 0x50, 0x67, 0x22, + 0xc2, 0x5e, 0x09, 0xb7, 0x2b, 0x86, 0xd5, 0xea, 0x3c, 0x74, 0x4a, 0xf0, + 0x2c, 0x6e, 0x5e, 0x30, + 0x1f, 0x14, 0x87, 0x57, 0xc2, 0x58, 0x64, 0x32, 0xb0, 0x8b, 0x65, 0xa8, + 0x54, 0xa0, 0xbe, 0xd7, + 0x62, 0xc2, 0x13, 0x1d, 0xf0, 0x18, 0x6d, 0x39, 0xb7, 0x39, 0x14, 0x47, + 0x9b, 0x23, 0x3b, 0xc0, + 0xb1, 0x7a, 0x19, 0xe7, 0x0e, 0x54, 0xe3, 0x69, 0x82, 0x13, 0x55, 0x88, + 0xe5, 0xf0, 0xdc, 0x20, + 0xe0, 0x7a, 0x43, 0x31, 0x62, 0xc7, 0x47, 0x51, 0x28, 0x14, 0xc2, 0x91, + 0x48, 0x0c, 0x46, 0x43, + 0x06, 0x0c, 0x87, 0xc2, 0x84, 0xe7, 0x05, 0xc9, 0x7b, 0x51, 0x1c, 0x09, + 0x6b, 0xb0, 0x21, 0xbc, + 0x19, 0x6e, 0xd5, 0x08, 0x3e, 0x53, 0x8e, 0x6a, 0xec, 0x00, 0xdb, 0xc3, + 0x53, 0xfc, 0x0e, 0xc5, + 0x0d, 0xdd, 0x92, 0x93, 0x2f, 0x25, 0x58, 0x55, 0xce, 0x3b, 0xb0, 0x53, + 0xbc, 0x84, 0xe0, 0x18, + 0xe5, 0x7d, 0x84, 0xc3, 0xea, 0xc4, 0xbe, 0x25, 0x36, 0x6e, 0xd0, 0x30, + 0x50, 0x84, 0x70, 0x47, + 0x72, 0xc4, 0x21, 0x23, 0x8e, 0xe3, 0x41, 0xf2, 0x7d, 0xa1, 0x08, 0x8a, + 0x05, 0x09, 0x56, 0x19, + 0x4d, 0xa0, 0x21, 0x18, 0x07, 0x71, 0xad, 0x8b, 0xe0, 0x62, 0x17, 0xf9, + 0xdc, 0xe3, 0xf0, 0x25, + 0xd2, 0x47, 0xbb, 0x58, 0x49, 0xbe, 0xb3, 0x98, 0xe0, 0x5f, 0x31, 0xf9, + 0xd6, 0x71, 0xf8, 0x38, + 0xe9, 0x12, 0x64, 0x04, 0xbb, 0x60, 0x93, 0xd1, 0xc2, 0xbd, 0xd0, 0x74, + 0xad, 0xdf, 0x15, 0x99, + 0xc2, 0x4d, 0x50, 0xaa, 0x71, 0xb5, 0xe4, 0x42, 0xe5, 0x62, 0x01, 0x58, + 0x28, 0x9f, 0x85, 0xd6, + 0x69, 0x51, 0x20, 0x1b, 0x0a, 0x90, 0x83, 0x12, 0x10, 0x83, 0x02, 0xc1, + 0x36, 0x72, 0x34, 0x24, + 0x4e, 0x30, 0x78, 0x4e, 0xd2, 0x34, 0x20, 0xab, 0x3c, 0xf9, 0x3d, 0x40, + 0x70, 0x8f, 0x70, 0xc2, + 0x20, 0x07, 0x90, 0xc1, 0x12, 0xdc, 0x13, 0xc8, 0xd1, 0xcf, 0xb1, 0x06, + 0xc7, 0x31, 0x86, 0x97, + 0xb4, 0x3a, 0xe0, 0xd1, 0xeb, 0x41, 0x8d, 0x5e, 0x0b, 0xee, 0x20, 0x1c, + 0x71, 0x1b, 0xba, 0x70, + 0x04, 0x07, 0xa0, 0xfa, 0x5d, 0xc6, 0xd8, 0x0c, 0xb1, 0x18, 0xcc, 0xbc, + 0x67, 0xf1, 0x2d, 0x57, + 0xbe, 0x4e, 0x6c, 0xdc, 0xe1, 0xb8, 0xf7, 0x06, 0x73, 0x5a, 0xef, 0x03, + 0xcf, 0x5e, 0xfb, 0x81, + 0xfe, 0x9d, 0xe7, 0xde, 0x17, 0x57, 0x5e, 0xb4, 0xf2, 0x85, 0x45, 0x17, + 0x0f, 0xe7, 0x30, 0x66, + 0xbe, 0x49, 0x52, 0x6d, 0xab, 0xfe, 0xbd, 0xe2, 0xcc, 0xfd, 0x83, 0x33, + 0xec, 0x6f, 0x92, 0xeb, + 0x9a, 0x56, 0x39, 0xa9, 0xd3, 0xc2, 0xe7, 0xa1, 0xe4, 0xdc, 0x37, 0xbb, + 0x51, 0xc0, 0x66, 0xaf, + 0x99, 0x3d, 0xa8, 0xeb, 0x99, 0xfa, 0x9a, 0x3a, 0xb2, 0x9e, 0x0b, 0xad, + 0x19, 0x4f, 0xf1, 0xb0, + 0x34, 0x43, 0x3d, 0x97, 0x31, 0xe8, 0x7a, 0x07, 0x75, 0x4c, 0x86, 0xd6, + 0xc1, 0x77, 0xd5, 0x0e, + 0xdf, 0xdf, 0x20, 0x65, 0xbe, 0x49, 0x9f, 0xae, 0x37, 0xda, 0x1c, 0x97, + 0x7e, 0xfc, 0x7b, 0x28, + 0x7a, 0x1f, 0xda, 0x4a, 0xec, 0xcf, 0xed, 0xb1, 0xed, 0x78, 0x7b, 0xec, + 0x3e, 0xfc, 0x60, 0xf4, + 0x53, 0x6e, 0x43, 0x60, 0x1c, 0xac, 0x92, 0xaa, 0x88, 0xdd, 0x34, 0x5b, + 0x38, 0x26, 0x7a, 0x0c, + 0x3e, 0xba, 0x61, 0x21, 0x37, 0x57, 0xbb, 0x05, 0x3c, 0x11, 0xdd, 0x22, + 0x6c, 0x0d, 0x91, 0xa6, + 0xdf, 0x23, 0xdc, 0xab, 0xdf, 0xcf, 0x3f, 0x68, 0x6c, 0xc2, 0xdd, 0xfa, + 0x5b, 0xe8, 0x6b, 0x7d, + 0x07, 0xb8, 0xa1, 0xe1, 0x62, 0xe6, 0xe2, 0xe8, 0x0f, 0xd9, 0x8b, 0xf5, + 0xf3, 0xd1, 0x05, 0xea, + 0x25, 0xf0, 0x32, 0xe5, 0x12, 0x7c, 0xa6, 0x52, 0x83, 0xcf, 0x08, 0x2d, + 0x87, 0x4f, 0x45, 0xb6, + 0xb1, 0xdb, 0xe2, 0xd7, 0x40, 0x9b, 0x5e, 0xcd, 0x56, 0x6b, 0xd5, 0xb8, + 0x4a, 0xae, 0xc4, 0xa5, + 0xb0, 0x80, 0x9f, 0xaa, 0x5f, 0xcd, 0x86, 0xe3, 0x4f, 0x82, 0x17, 0xe2, + 0x7b, 0xb9, 0x37, 0x62, + 0xef, 0x82, 0x0f, 0xe3, 0xef, 0x83, 0x77, 0xe3, 0xef, 0xb1, 0x1f, 0x46, + 0x3f, 0xe3, 0xbe, 0x30, + 0x7e, 0xcb, 0x7d, 0x1e, 0xfe, 0x88, 0xfd, 0x65, 0xc3, 0x5e, 0xf6, 0xfd, + 0xf0, 0x1b, 0x5c, 0xa3, + 0xc2, 0xc3, 0xae, 0xe0, 0x66, 0xd4, 0x1d, 0xec, 0xc5, 0x9b, 0x82, 0x1d, + 0xb8, 0x57, 0xdf, 0x04, + 0x5e, 0x23, 0x58, 0x56, 0x15, 0x99, 0xe5, 0x99, 0x4c, 0x39, 0xa5, 0x4c, + 0xf0, 0x9a, 0xd8, 0xbc, + 0x93, 0xd5, 0xf1, 0x60, 0xb9, 0xf1, 0x08, 0x7c, 0x58, 0x8f, 0xe2, 0xab, + 0xd4, 0xf9, 0xd0, 0xa9, + 0x2d, 0x00, 0xc7, 0x46, 0x4e, 0x03, 0xa7, 0x47, 0x8f, 0x64, 0x27, 0xa9, + 0x13, 0x89, 0xbd, 0x9b, + 0x87, 0xa6, 0x2b, 0x13, 0xa1, 0x43, 0x28, 0x41, 0x0e, 0xa1, 0x18, 0xdb, + 0x79, 0x3b, 0x76, 0x04, + 0x4a, 0xc0, 0x62, 0x6d, 0x35, 0xd8, 0x4a, 0xb8, 0xd6, 0xf6, 0xe0, 0xe3, + 0x60, 0xbe, 0x5e, 0x06, + 0x5c, 0x01, 0x27, 0x9e, 0xc2, 0xbb, 0x61, 0xb1, 0x58, 0x01, 0xae, 0x0c, + 0x75, 0x30, 0xaf, 0xc6, + 0x5f, 0xf0, 0xbf, 0x1c, 0xdb, 0xe3, 0x7f, 0x33, 0xfe, 0x8e, 0xff, 0xcd, + 0x86, 0xd7, 0x99, 0xdd, + 0x91, 0x37, 0x99, 0x77, 0x23, 0xbf, 0x64, 0xdf, 0x8a, 0xee, 0x65, 0xdf, + 0x08, 0xbd, 0x01, 0xf6, + 0x6b, 0x1f, 0xc3, 0xdd, 0x4a, 0x0c, 0xf9, 0xf4, 0x38, 0x6c, 0xd3, 0xa9, + 0x1d, 0xff, 0x14, 0x7c, + 0x3a, 0x38, 0x09, 0x14, 0x8b, 0x95, 0xb8, 0x4c, 0x28, 0xe1, 0xcb, 0xc4, + 0x72, 0x5c, 0x4e, 0xce, + 0xe7, 0x12, 0x6f, 0xc7, 0x2f, 0x1b, 0x4f, 0x83, 0x67, 0x8c, 0xe7, 0xc0, + 0x8b, 0xc1, 0xd7, 0xc0, + 0xab, 0x06, 0xfd, 0xdb, 0x3d, 0x60, 0xb7, 0xf6, 0x2a, 0xd8, 0xa5, 0xef, + 0x01, 0xaf, 0xe9, 0x2f, + 0xc3, 0x9d, 0xda, 0x4e, 0xb8, 0x4b, 0x7b, 0x05, 0xbc, 0xa8, 0xbc, 0x0c, + 0x5e, 0x95, 0x5f, 0x01, + 0xcf, 0xe9, 0xcf, 0x80, 0x67, 0xb5, 0x5e, 0xd4, 0xaa, 0x77, 0xa1, 0x78, + 0xf0, 0x71, 0xb8, 0x4b, + 0x9d, 0x00, 0x0b, 0x08, 0x9e, 0x96, 0x09, 0x0e, 0x72, 0xfd, 0x25, 0xc4, + 0xc2, 0x1f, 0x87, 0x4f, + 0x08, 0x9c, 0x8f, 0x83, 0xa1, 0x1e, 0xbe, 0x25, 0xd4, 0x02, 0x1e, 0x8d, + 0x5d, 0xed, 0xb7, 0x6b, + 0xd5, 0x68, 0x82, 0x5c, 0x8d, 0x5d, 0x52, 0x19, 0x2a, 0x13, 0x0a, 0xd0, + 0x7c, 0xf9, 0x54, 0xe4, + 0xd5, 0xdb, 0x60, 0x8b, 0xde, 0x0d, 0xba, 0xb4, 0x0e, 0xd0, 0xae, 0x12, + 0x3b, 0x5e, 0xed, 0x20, + 0xaf, 0xbb, 0x40, 0x1b, 0xe5, 0x99, 0x7a, 0x0b, 0x68, 0x51, 0x5b, 0x40, + 0x8f, 0xda, 0x05, 0x5a, + 0xd5, 0x26, 0x10, 0x53, 0x09, 0x37, 0x54, 0x82, 0xa0, 0x45, 0x09, 0x00, + 0x0f, 0xe1, 0x7e, 0xac, + 0xe1, 0xe3, 0x6a, 0xf5, 0x7a, 0xae, 0x4e, 0xf7, 0x80, 0x3a, 0x7d, 0x3d, + 0xd8, 0xa0, 0xaf, 0x83, + 0x2b, 0x89, 0x6d, 0xdc, 0x83, 0xce, 0x1e, 0xe1, 0x4f, 0xa4, 0x71, 0x2c, + 0xa9, 0xd6, 0xea, 0x3c, + 0x63, 0x4a, 0xfd, 0xd1, 0x0f, 0x9c, 0xb7, 0xe4, 0xba, 0x37, 0x56, 0x9e, + 0x36, 0x1c, 0xf7, 0xd6, + 0xef, 0x0c, 0x9e, 0xb7, 0x63, 0xd3, 0xfe, 0x5b, 0xbf, 0x12, 0xbe, 0x03, + 0x66, 0xa6, 0xa5, 0xfa, + 0x39, 0x63, 0xfe, 0xdb, 0x53, 0xd3, 0xae, 0xcc, 0x60, 0xdb, 0x24, 0xf6, + 0x23, 0x24, 0x36, 0x65, + 0xc2, 0xcf, 0x9a, 0xaa, 0x9e, 0xcb, 0x60, 0x9d, 0xae, 0x44, 0x5d, 0xf6, + 0x82, 0x31, 0xd5, 0x65, + 0xcf, 0x50, 0xd3, 0xea, 0xc0, 0xeb, 0xb4, 0x0c, 0xd8, 0xa2, 0x36, 0xc2, + 0x6f, 0xf3, 0xb9, 0x31, + 0xea, 0xfd, 0x43, 0xf7, 0x99, 0xec, 0x8f, 0x41, 0xc9, 0x50, 0xcf, 0x65, + 0x00, 0x17, 0x22, 0x85, + 0x87, 0x76, 0x4c, 0x22, 0xd9, 0xc7, 0x24, 0x4f, 0xb2, 0x71, 0xe6, 0xfe, + 0x76, 0xb1, 0xf2, 0xf4, + 0xfb, 0x07, 0x53, 0x5c, 0xd7, 0x2c, 0xe6, 0xfd, 0x44, 0x86, 0xd6, 0xae, + 0xa1, 0xf6, 0xef, 0xae, + 0xd0, 0x46, 0xf4, 0x50, 0xe4, 0x01, 0x74, 0x5f, 0xe4, 0x61, 0xf4, 0x60, + 0x6c, 0x3b, 0x7c, 0x28, + 0xba, 0x1d, 0x3d, 0x14, 0x7f, 0x87, 0x5b, 0x29, 0x8f, 0x83, 0x13, 0x02, + 0x33, 0xf9, 0x23, 0x42, + 0x8b, 0xd0, 0x09, 0x0d, 0x0b, 0xc1, 0x4c, 0x63, 0x12, 0x5c, 0x64, 0xd4, + 0xe3, 0x67, 0xe2, 0xdb, + 0xf9, 0x7b, 0x23, 0xf7, 0xf3, 0xf7, 0x1a, 0x0f, 0xf0, 0x8f, 0x84, 0xef, + 0x15, 0x7a, 0x8c, 0x67, + 0xd1, 0x37, 0xca, 0xaf, 0xa1, 0xa7, 0x75, 0x36, 0x63, 0x8f, 0x14, 0xb0, + 0x79, 0xf2, 0xb0, 0xe7, + 0x34, 0x30, 0x87, 0xfc, 0x6d, 0x1d, 0xfb, 0x5c, 0xf4, 0x7e, 0xee, 0xde, + 0xf8, 0x55, 0x5c, 0xa1, + 0x56, 0x05, 0x5c, 0x4a, 0x25, 0x5f, 0x21, 0x94, 0x09, 0xc5, 0x82, 0x8d, + 0x2f, 0x0b, 0x9c, 0x0f, + 0x2f, 0x0a, 0x9e, 0x8c, 0x7e, 0x10, 0xff, 0x09, 0x77, 0x6d, 0xe3, 0xd5, + 0xdc, 0x0f, 0x63, 0x97, + 0x82, 0x4b, 0x42, 0x17, 0xc3, 0x4b, 0x8d, 0xcb, 0xc1, 0x55, 0xf2, 0xe5, + 0xf0, 0x32, 0xed, 0x02, + 0x70, 0x61, 0xe4, 0x16, 0xee, 0x4a, 0xf5, 0x58, 0x70, 0x89, 0x16, 0x84, + 0xf7, 0x05, 0xef, 0x81, + 0x9b, 0x83, 0x5b, 0x09, 0x4f, 0xdc, 0x44, 0x38, 0x61, 0x27, 0xf8, 0x5b, + 0x10, 0xc0, 0x42, 0x63, + 0x12, 0x3b, 0x49, 0xae, 0x86, 0x2e, 0xa5, 0x02, 0x97, 0x4b, 0xc5, 0x04, + 0xff, 0x26, 0x72, 0x2b, + 0x83, 0x0f, 0x81, 0xa6, 0xd0, 0x3d, 0xe8, 0x61, 0xc3, 0x80, 0x3f, 0x32, + 0xa6, 0xc2, 0x73, 0x43, + 0xa7, 0x83, 0xe9, 0xc6, 0x74, 0x38, 0x49, 0x99, 0x40, 0xf0, 0x80, 0xa0, + 0x05, 0xc1, 0xa1, 0x12, + 0x91, 0xf0, 0x26, 0xbe, 0x18, 0x97, 0xf2, 0x25, 0xc8, 0x46, 0x70, 0xe4, + 0x27, 0x11, 0xc8, 0x6e, + 0x0e, 0xb5, 0xa1, 0x47, 0x42, 0x4f, 0x82, 0x59, 0x5a, 0x19, 0x8d, 0xc3, + 0xe1, 0x0f, 0x13, 0xdc, + 0xc8, 0x81, 0x6d, 0x78, 0x89, 0x2c, 0xb1, 0x5c, 0x54, 0xf3, 0x86, 0x5b, + 0xe2, 0xde, 0x48, 0xa3, + 0xee, 0x95, 0xa2, 0x12, 0x1b, 0x88, 0xc5, 0x7d, 0xf1, 0x78, 0xd4, 0x17, + 0x8d, 0x12, 0x92, 0x64, + 0xd4, 0x82, 0x06, 0x85, 0x83, 0x67, 0x4b, 0xd7, 0x21, 0xcd, 0xd8, 0x44, + 0xb8, 0xe9, 0x46, 0xd4, + 0x15, 0xdc, 0x0e, 0x1f, 0x31, 0xa6, 0xc1, 0x42, 0xaa, 0x3f, 0x0a, 0x76, + 0x5c, 0x2a, 0x97, 0x9b, + 0x38, 0x34, 0x3b, 0x00, 0x71, 0x50, 0x6f, 0x63, 0x7b, 0xe2, 0xdd, 0x5c, + 0x4f, 0x88, 0xf4, 0x43, + 0xdd, 0xc4, 0x3d, 0x14, 0x7e, 0x98, 0x79, 0x3c, 0xfa, 0x38, 0xb3, 0x23, + 0xf2, 0x28, 0xfb, 0x60, + 0x70, 0x3b, 0xd8, 0xa1, 0xed, 0x00, 0x8f, 0x92, 0xb6, 0x43, 0x79, 0x12, + 0x3d, 0x29, 0x3f, 0x82, + 0xb6, 0xa8, 0x0f, 0xa3, 0x5a, 0x75, 0x15, 0x7c, 0x30, 0xb8, 0x11, 0xb5, + 0x05, 0x7f, 0x06, 0x5f, + 0x50, 0xa8, 0xfd, 0x5b, 0x8a, 0x4b, 0xcc, 0xef, 0x76, 0x90, 0x3e, 0x8c, + 0xc3, 0x67, 0xca, 0xd7, + 0xf1, 0x6a, 0xb8, 0x07, 0x35, 0x12, 0xfc, 0x7b, 0x2e, 0x7c, 0x19, 0x28, + 0x94, 0xaa, 0x91, 0x4b, + 0xac, 0x24, 0x1c, 0xb7, 0x14, 0x95, 0x91, 0x7b, 0x31, 0x3b, 0x50, 0x8b, + 0x9a, 0xb5, 0x1d, 0xf0, + 0xf9, 0xc0, 0x4b, 0xf0, 0x05, 0xf9, 0x25, 0x6e, 0xa7, 0xf4, 0x12, 0x78, + 0x56, 0x7d, 0x86, 0x7b, + 0x46, 0x7d, 0x96, 0x7d, 0x3c, 0xf8, 0xa0, 0xff, 0x11, 0xfd, 0x31, 0xee, + 0x19, 0xf9, 0x67, 0xec, + 0xb3, 0xe2, 0x73, 0xec, 0x73, 0xc2, 0xd3, 0xec, 0x63, 0xf2, 0x0e, 0x70, + 0x7f, 0x60, 0x07, 0xf0, + 0x04, 0xae, 0x87, 0x98, 0xd8, 0xba, 0x5e, 0x82, 0x7b, 0xb5, 0xfa, 0x06, + 0x6e, 0xbd, 0xbe, 0x01, + 0xac, 0xd3, 0xd6, 0x82, 0xd5, 0xda, 0x5d, 0xe0, 0x36, 0x95, 0x81, 0xcd, + 0xe8, 0xdc, 0x11, 0x76, + 0xa1, 0x43, 0xb7, 0x8d, 0xb4, 0x93, 0xe2, 0x47, 0xae, 0x4f, 0x69, 0xe3, + 0x3e, 0xd7, 0x7b, 0xe9, + 0x2b, 0xad, 0x9f, 0xdf, 0x35, 0xa2, 0x2e, 0xeb, 0x26, 0x71, 0x19, 0xfd, + 0xf7, 0x73, 0x37, 0x95, + 0x2c, 0xcf, 0x6a, 0x4b, 0x2b, 0xa5, 0x1c, 0xdd, 0x47, 0x36, 0x63, 0x3d, + 0x17, 0x5a, 0x07, 0x9f, + 0xee, 0x71, 0x16, 0x2c, 0xf4, 0x65, 0xac, 0x11, 0x9c, 0xcb, 0xfd, 0x99, + 0xad, 0xd6, 0x69, 0x19, + 0xb0, 0xcf, 0xed, 0x9c, 0x5d, 0xcb, 0xe3, 0xac, 0xe8, 0xfd, 0x99, 0x75, + 0xbd, 0x3c, 0x33, 0xb7, + 0xb0, 0xaa, 0xa9, 0xa2, 0x36, 0xd3, 0xfe, 0xc1, 0xd4, 0x6f, 0x62, 0xea, + 0x7a, 0x59, 0x63, 0x64, + 0x72, 0xbd, 0x37, 0x6d, 0x55, 0x7d, 0xf6, 0xbd, 0xe6, 0x0a, 0xfa, 0x6b, + 0xd5, 0x83, 0xb4, 0xf5, + 0x5c, 0xe8, 0xbe, 0x35, 0xb1, 0x8a, 0x7a, 0x1a, 0x23, 0x98, 0x39, 0xdf, + 0xa4, 0x4f, 0xd3, 0x48, + 0xb2, 0xdf, 0x29, 0xff, 0xdb, 0x43, 0x30, 0x62, 0x47, 0xe4, 0x09, 0xf8, + 0x58, 0xf4, 0x31, 0xf4, + 0x48, 0xec, 0x21, 0xb8, 0x23, 0xb2, 0x03, 0x3d, 0x12, 0x7f, 0x07, 0x2e, + 0x0b, 0x15, 0xc1, 0x23, + 0x8c, 0x13, 0x84, 0x45, 0x0d, 0x47, 0x83, 0xf9, 0xd1, 0x99, 0xdc, 0x54, + 0xb9, 0x0a, 0x9d, 0x68, + 0x20, 0xf1, 0xc5, 0xf0, 0x43, 0xf8, 0xde, 0xd0, 0xfd, 0x78, 0x7b, 0xf0, + 0x21, 0x74, 0x5f, 0xf0, + 0x17, 0xf8, 0x77, 0xf2, 0x9f, 0x40, 0x47, 0xd3, 0x02, 0xa6, 0xb8, 0x6d, + 0xa2, 0x7f, 0x62, 0x80, + 0xe6, 0x6d, 0x10, 0x8e, 0x23, 0x56, 0xa0, 0x4a, 0x89, 0xf0, 0x3b, 0xb9, + 0x12, 0x4d, 0x0a, 0x5d, + 0xc6, 0x2c, 0xd2, 0x3c, 0xcc, 0xf3, 0xb1, 0xfb, 0xc0, 0xc3, 0xb1, 0xab, + 0xd8, 0x42, 0xa5, 0x8a, + 0x77, 0x4a, 0x15, 0x64, 0xbe, 0x96, 0xe1, 0x52, 0xa9, 0x04, 0x3b, 0x4c, + 0xfb, 0xbd, 0x0c, 0x55, + 0x07, 0x5d, 0x5c, 0x69, 0xb0, 0x08, 0xe4, 0x49, 0xe3, 0x60, 0x52, 0x3e, + 0x9b, 0xe9, 0x0f, 0x9b, + 0xaa, 0x1f, 0x81, 0x8e, 0x94, 0x6b, 0xd0, 0x53, 0xc6, 0x13, 0x14, 0xf7, + 0xc0, 0x66, 0x63, 0x0b, + 0xd8, 0x6a, 0x6c, 0x03, 0xbd, 0xe1, 0x36, 0xf0, 0x27, 0xa3, 0x06, 0xe4, + 0x11, 0x2e, 0x57, 0x6d, + 0x6a, 0x7d, 0xa5, 0xe4, 0xfc, 0xc5, 0x68, 0x92, 0x3a, 0x89, 0xbb, 0x23, + 0xb8, 0x83, 0xeb, 0x26, + 0x36, 0x74, 0xa7, 0xf1, 0x30, 0x7a, 0x52, 0xbf, 0x01, 0x9d, 0xa8, 0x5f, + 0x81, 0xe6, 0x12, 0xce, + 0x59, 0x16, 0xa0, 0x91, 0x8c, 0x04, 0x33, 0xa4, 0x62, 0xc2, 0x9a, 0x4a, + 0x88, 0xdd, 0xe8, 0x20, + 0x18, 0x52, 0x8c, 0x1d, 0xa2, 0x13, 0x5f, 0xd7, 0x80, 0xfd, 0xbd, 0xa1, + 0x4e, 0xf4, 0x44, 0xe8, + 0x51, 0x30, 0x43, 0x75, 0x20, 0x07, 0xb1, 0xa5, 0x27, 0x09, 0x25, 0xb8, + 0x94, 0xb0, 0x2c, 0xc2, + 0x1d, 0x50, 0xa5, 0x3e, 0x85, 0x9b, 0x12, 0xae, 0x04, 0xf9, 0x14, 0xe3, + 0xe5, 0x7c, 0x68, 0x8b, + 0xd9, 0xd9, 0x42, 0x3d, 0x2f, 0x91, 0x13, 0x18, 0xc8, 0x47, 0x79, 0x6a, + 0x29, 0x5c, 0x61, 0x3c, + 0x00, 0x1f, 0x09, 0x6e, 0x84, 0xbd, 0x46, 0x2f, 0xda, 0x18, 0x7c, 0x00, + 0x6e, 0x53, 0xc7, 0xc3, + 0x7c, 0xde, 0xce, 0x17, 0xe1, 0xe2, 0x84, 0x4e, 0x07, 0x6d, 0xb8, 0x42, + 0x76, 0xf3, 0x93, 0x42, + 0x73, 0xb8, 0xc3, 0x22, 0x2e, 0x98, 0x27, 0x24, 0xe2, 0x08, 0xed, 0xd1, + 0x2a, 0xb6, 0x3a, 0x56, + 0xc1, 0x94, 0x04, 0x09, 0x4f, 0x09, 0x10, 0x6e, 0x2f, 0x8e, 0x43, 0x79, + 0x34, 0x9f, 0x50, 0x4a, + 0xe4, 0xd6, 0x8d, 0x23, 0xb8, 0x9e, 0xaf, 0x2e, 0x87, 0x8f, 0x13, 0xfc, + 0xeb, 0x08, 0x3e, 0x07, + 0x1f, 0x57, 0x4b, 0x60, 0x81, 0x40, 0x75, 0x3f, 0x7a, 0xfd, 0x25, 0xb8, + 0x84, 0x8c, 0xd7, 0x79, + 0xca, 0x06, 0xac, 0x45, 0x3a, 0x41, 0xa3, 0xd1, 0xcc, 0x3e, 0x13, 0x3a, + 0x17, 0xe5, 0x13, 0xdb, + 0xbd, 0x8c, 0x27, 0xfd, 0x30, 0xf5, 0x4f, 0x3b, 0xae, 0x14, 0x8f, 0xc5, + 0x0b, 0xa5, 0x05, 0xe8, + 0xa8, 0xc0, 0x22, 0x78, 0x66, 0xe8, 0x12, 0x70, 0x71, 0xf8, 0x34, 0xf6, + 0x38, 0x79, 0x3e, 0x9c, + 0xad, 0xcc, 0x41, 0x73, 0xd5, 0xf9, 0xe0, 0x08, 0x69, 0x01, 0x3e, 0x42, + 0x3c, 0x12, 0x2e, 0x90, + 0xe6, 0xc1, 0xf9, 0xe2, 0x42, 0xb8, 0x30, 0xb0, 0x10, 0xce, 0x0c, 0x9c, + 0x0a, 0xc7, 0x4b, 0x17, + 0x60, 0x95, 0xd8, 0xbb, 0x04, 0xfb, 0x08, 0xe7, 0x5b, 0x03, 0xd7, 0x6a, + 0xab, 0xe1, 0x6a, 0x6d, + 0x15, 0x58, 0xa9, 0xdd, 0x01, 0x6f, 0x54, 0x6b, 0x61, 0x08, 0x9d, 0x35, + 0x22, 0x9e, 0xc2, 0xa1, + 0x16, 0xfa, 0xc7, 0x09, 0x36, 0x50, 0xa5, 0x0e, 0xee, 0x25, 0x77, 0x0a, + 0xb5, 0x65, 0xfb, 0x71, + 0xef, 0xad, 0xf5, 0xa7, 0x34, 0x3f, 0xba, 0xe3, 0x1a, 0x6a, 0xe3, 0xa6, + 0xab, 0x4a, 0xfd, 0xec, + 0x73, 0x2b, 0x2f, 0x5d, 0xf9, 0xce, 0xed, 0x27, 0x4f, 0x8c, 0x39, 0xea, + 0xb2, 0xe5, 0x39, 0xd0, + 0xbd, 0x63, 0xe8, 0x1e, 0x3f, 0xd9, 0xea, 0xb9, 0xd0, 0x7a, 0xeb, 0xe6, + 0xfc, 0xcf, 0xb4, 0xbf, + 0x49, 0x9f, 0x86, 0x65, 0xa9, 0x7e, 0x53, 0xae, 0xea, 0xb4, 0x0c, 0xd4, + 0x79, 0xb5, 0xb3, 0x36, + 0x39, 0x8b, 0x3f, 0x45, 0xb4, 0x1a, 0xaf, 0xd7, 0xb7, 0x9f, 0x4e, 0xda, + 0xfd, 0x83, 0xfb, 0xfc, + 0x26, 0x0d, 0x89, 0x7d, 0xe5, 0x33, 0xe6, 0x9b, 0x58, 0xac, 0x55, 0x3f, + 0xda, 0xbd, 0x69, 0x47, + 0x5f, 0xbb, 0x66, 0x68, 0x3d, 0x97, 0x01, 0xbf, 0x49, 0xb6, 0x7c, 0x13, + 0x3c, 0x32, 0xc7, 0xc5, + 0x20, 0xcf, 0xd8, 0xde, 0xf0, 0xfd, 0xe8, 0xe9, 0xe8, 0x33, 0xe0, 0x99, + 0xe8, 0x53, 0xe8, 0xc9, + 0xd8, 0x93, 0xf0, 0x31, 0x82, 0x85, 0xcf, 0x44, 0x3e, 0x87, 0xfe, 0x86, + 0x29, 0xe0, 0x94, 0xa6, + 0x93, 0xc0, 0xc2, 0xd8, 0x0c, 0x34, 0x4d, 0x9b, 0x84, 0xaa, 0x03, 0x13, + 0xf1, 0x82, 0x10, 0xc0, + 0x2f, 0x07, 0x1f, 0x45, 0x8f, 0x87, 0x1f, 0x45, 0x0f, 0x46, 0x9f, 0x44, + 0x9f, 0xea, 0xbf, 0x64, + 0xb5, 0x8e, 0x33, 0x7d, 0x8e, 0xae, 0x32, 0x5f, 0xb5, 0x51, 0x86, 0x4a, + 0x78, 0x1b, 0xe1, 0x74, + 0x65, 0xa8, 0x54, 0x2c, 0x83, 0xa5, 0x92, 0x13, 0x4d, 0xd0, 0xe6, 0x72, + 0x73, 0x63, 0xa7, 0x72, + 0x97, 0x18, 0x22, 0xfb, 0xb3, 0xd8, 0xbd, 0xdc, 0xce, 0xd8, 0x0d, 0x4c, + 0x9e, 0xe8, 0x22, 0x36, + 0x20, 0xc1, 0x21, 0x8a, 0x2a, 0x7c, 0x19, 0x74, 0x69, 0xd3, 0xe1, 0xec, + 0xd0, 0x5c, 0x70, 0x58, + 0x70, 0x12, 0xb1, 0xb7, 0xcb, 0x91, 0x13, 0x11, 0x6c, 0xa4, 0xff, 0x26, + 0x96, 0x60, 0x9b, 0x3a, + 0x05, 0xcf, 0xd4, 0x8f, 0x45, 0x30, 0xd8, 0x8a, 0x9e, 0xd0, 0x9f, 0x47, + 0xdb, 0x09, 0x9f, 0xba, + 0x3f, 0x78, 0x1f, 0xdc, 0x4a, 0x38, 0xe0, 0x36, 0x82, 0x7f, 0x9b, 0x09, + 0x77, 0xda, 0x19, 0xba, + 0x05, 0xe4, 0x2b, 0xe3, 0xa1, 0x9b, 0x70, 0x3a, 0x87, 0xe8, 0x40, 0x25, + 0x82, 0x0d, 0x4f, 0xd4, + 0x4e, 0xe5, 0x58, 0xc2, 0xff, 0x7a, 0x08, 0xb7, 0xdd, 0xa2, 0x6f, 0x84, + 0x5b, 0xf5, 0x27, 0x51, + 0xb3, 0xae, 0xa2, 0xf5, 0xca, 0x99, 0x68, 0x92, 0xe4, 0xc0, 0x94, 0x37, + 0x15, 0x0b, 0x14, 0x17, + 0x1c, 0x26, 0x7e, 0x38, 0x08, 0x56, 0x4f, 0x35, 0x66, 0x82, 0x1f, 0xc4, + 0x18, 0xdf, 0x96, 0x60, + 0x17, 0x7c, 0xda, 0xf8, 0xff, 0xd8, 0xbb, 0xee, 0xf8, 0x28, 0xaa, 0xb5, + 0x9d, 0xde, 0x7b, 0xe8, + 0xbd, 0x49, 0xb5, 0x21, 0x22, 0x08, 0x16, 0x04, 0x45, 0xe5, 0xaa, 0xd8, + 0xaf, 0xf5, 0xb3, 0x8b, + 0x15, 0x90, 0x12, 0xb2, 0x3b, 0x73, 0xca, 0xec, 0xce, 0x4e, 0xd9, 0x96, + 0x46, 0x00, 0x11, 0x15, + 0x0b, 0x0a, 0xa8, 0x28, 0x48, 0x11, 0x08, 0xbd, 0x4b, 0xef, 0x24, 0x24, + 0x01, 0x42, 0x6f, 0xd2, + 0x44, 0xc5, 0x7b, 0x95, 0xef, 0x3d, 0xb3, 0xbb, 0x61, 0x93, 0x6c, 0x99, + 0x85, 0xd5, 0xeb, 0x1f, + 0xfc, 0xce, 0xef, 0xb0, 0x61, 0xb3, 0x75, 0x32, 0xef, 0x33, 0x6f, 0x7b, + 0x9e, 0x77, 0x3a, 0xaa, + 0x6f, 0x89, 0x23, 0xf1, 0xa6, 0x74, 0xd2, 0x04, 0x1e, 0x17, 0x67, 0x4a, + 0x11, 0x1a, 0x4b, 0x1d, + 0xd1, 0x8d, 0x05, 0xd7, 0xe1, 0xe6, 0xe0, 0x77, 0x25, 0xcb, 0x59, 0xa4, + 0x45, 0x7e, 0x3b, 0x63, + 0x73, 0x7b, 0x7d, 0xbe, 0xbe, 0x99, 0x69, 0x40, 0x75, 0xc3, 0x39, 0xf6, + 0xe1, 0x78, 0x28, 0x7c, + 0xbe, 0xa5, 0xf6, 0x29, 0x78, 0x92, 0x6d, 0x32, 0xf9, 0x1c, 0xfc, 0xbf, + 0x89, 0xf6, 0xc5, 0xb8, + 0x44, 0x4d, 0xc2, 0x11, 0x80, 0x7e, 0xf1, 0xe0, 0xa3, 0x25, 0x08, 0xb1, + 0xa6, 0x18, 0x31, 0x9b, + 0x76, 0xc9, 0xeb, 0x81, 0x6f, 0x2c, 0x6c, 0x43, 0x1a, 0x58, 0x12, 0x49, + 0xac, 0x29, 0x03, 0x35, + 0x72, 0xb4, 0xe4, 0x9a, 0xe7, 0xb7, 0xe0, 0x1a, 0xaa, 0x69, 0x7c, 0x82, + 0x39, 0x86, 0x44, 0x9b, + 0x62, 0x68, 0x0c, 0x7c, 0x8f, 0x18, 0x01, 0x6e, 0x49, 0x2c, 0x89, 0x01, + 0xff, 0x33, 0x5e, 0x48, + 0x26, 0x3d, 0x55, 0x91, 0x7c, 0xe3, 0x98, 0x88, 0x3f, 0xb2, 0x7f, 0x0b, + 0xf8, 0x9a, 0x42, 0x22, + 0x01, 0xd3, 0xe2, 0x01, 0x57, 0x21, 0x7a, 0x07, 0x2f, 0x36, 0x9a, 0x3c, + 0x68, 0x35, 0x20, 0x5b, + 0xde, 0x47, 0x68, 0xac, 0x6d, 0x34, 0x3f, 0xc9, 0x71, 0x2b, 0x89, 0x10, + 0x58, 0xed, 0x3b, 0x01, + 0x8e, 0x49, 0x3c, 0x89, 0x37, 0x27, 0x9b, 0xe2, 0x85, 0x08, 0x13, 0xd8, + 0x0e, 0xa9, 0x6f, 0x6f, + 0x81, 0xda, 0x16, 0x34, 0xe1, 0x52, 0xed, 0xb1, 0x3c, 0xe3, 0xbc, 0x45, + 0x9a, 0xa2, 0x68, 0x14, + 0x5c, 0x67, 0x5c, 0x57, 0xc9, 0x1a, 0x99, 0x1b, 0xf8, 0xa9, 0x09, 0x69, + 0x6a, 0xba, 0x97, 0x0a, + 0x0c, 0xfb, 0xc0, 0xe7, 0x1b, 0xac, 0xbe, 0x0b, 0xd8, 0xf7, 0x0e, 0x7e, + 0x5b, 0x79, 0x0d, 0xbf, + 0xaa, 0xbc, 0x82, 0x9f, 0x95, 0x87, 0x62, 0x33, 0xe9, 0x25, 0xd4, 0x38, + 0xbb, 0xed, 0x8d, 0x72, + 0xae, 0x9d, 0x76, 0xd7, 0x53, 0x4f, 0x6c, 0x18, 0x74, 0x1b, 0xeb, 0x5f, + 0x69, 0x97, 0x17, 0x31, + 0x2c, 0x42, 0x6d, 0x38, 0x4a, 0xc3, 0xbd, 0x1f, 0xed, 0x77, 0x4e, 0xf9, + 0x72, 0xc5, 0xf3, 0x27, + 0x2c, 0x17, 0xb9, 0x80, 0x9a, 0xfc, 0x96, 0x13, 0xdc, 0x50, 0x56, 0x07, + 0x9e, 0xdf, 0xfe, 0xc1, + 0x04, 0x6b, 0x82, 0x51, 0x8f, 0x3e, 0x74, 0x96, 0x3f, 0x7d, 0x7c, 0x2f, + 0x1d, 0xfc, 0xda, 0xb3, + 0x90, 0x99, 0xfd, 0x7b, 0xeb, 0xb9, 0x68, 0xdf, 0xd9, 0xa3, 0x69, 0x15, + 0x26, 0xfd, 0x65, 0x66, + 0x77, 0x41, 0x75, 0x5a, 0xdc, 0xc7, 0x3b, 0xc6, 0x1e, 0xcf, 0xc5, 0x5a, + 0x82, 0xf8, 0xba, 0x5a, + 0xbe, 0x3f, 0x2b, 0xe4, 0x7c, 0x7f, 0xdd, 0xfc, 0x5a, 0x2d, 0x6d, 0x2b, + 0x7f, 0xf9, 0x35, 0xef, + 0xbc, 0x5e, 0x18, 0x67, 0xd3, 0x5e, 0xf1, 0x0c, 0x4a, 0x77, 0xdd, 0x84, + 0xcd, 0x95, 0x0f, 0xce, + 0x37, 0x89, 0xaa, 0xe3, 0x33, 0xab, 0x70, 0x9e, 0x6d, 0x75, 0xce, 0xc0, + 0x73, 0xf3, 0xe7, 0xf3, + 0x8b, 0x0b, 0xe6, 0xe3, 0xf9, 0x05, 0x0b, 0xd0, 0xfc, 0xfc, 0x1f, 0xd0, + 0x0f, 0xb6, 0xd3, 0xfc, + 0xc7, 0xc5, 0x37, 0x70, 0x37, 0x17, 0xb7, 0x37, 0xb6, 0xb0, 0x35, 0xa6, + 0x59, 0x62, 0x7d, 0x53, + 0x96, 0x29, 0x96, 0x3e, 0xe2, 0xf8, 0x1a, 0x2f, 0xc8, 0x9b, 0x89, 0x17, + 0xe6, 0xad, 0xc0, 0xab, + 0x9c, 0x5b, 0xc8, 0xb4, 0xa2, 0x07, 0x8d, 0x2d, 0x3e, 0xed, 0x30, 0xea, + 0x86, 0xe2, 0x8e, 0xc6, + 0xb6, 0x96, 0xe6, 0xb4, 0xa9, 0xa5, 0xb9, 0x39, 0xc3, 0x9c, 0x22, 0x24, + 0x01, 0xbe, 0x64, 0xab, + 0x2d, 0x50, 0x67, 0x47, 0x07, 0xae, 0xbe, 0xa3, 0x35, 0x79, 0xc1, 0x39, + 0x1a, 0xcd, 0xc9, 0xff, + 0x86, 0x5f, 0x5f, 0xf0, 0x74, 0x6e, 0x84, 0x90, 0x46, 0x21, 0xf6, 0x05, + 0x9f, 0x05, 0x6e, 0x2d, + 0x4d, 0xf8, 0x36, 0x79, 0xed, 0xb8, 0xe6, 0x8e, 0x86, 0x7c, 0xa6, 0x9a, + 0xcc, 0xf0, 0x93, 0xd9, + 0xb3, 0x90, 0x60, 0x4e, 0xa0, 0x91, 0x96, 0x86, 0xa4, 0x1d, 0x60, 0x5f, + 0x1f, 0x5b, 0x2e, 0x59, + 0x64, 0x5f, 0x0a, 0x3e, 0xd5, 0x57, 0xb0, 0xbf, 0xc5, 0xdf, 0xda, 0xa7, + 0x41, 0x0c, 0xf8, 0x15, + 0xfe, 0xda, 0xf6, 0x15, 0xfe, 0xd2, 0xf1, 0x25, 0x5e, 0x64, 0x7b, 0x1e, + 0x7c, 0xa4, 0x2c, 0x92, + 0xce, 0xf0, 0x8c, 0xf9, 0x71, 0x80, 0x1d, 0x0d, 0xd4, 0xa7, 0xf8, 0x02, + 0xc0, 0xbf, 0xcf, 0xed, + 0x93, 0x09, 0xe0, 0x24, 0xfe, 0xc6, 0xfa, 0x25, 0xf9, 0x1e, 0x30, 0xf0, + 0x6b, 0xd9, 0x41, 0xee, + 0xb2, 0x34, 0x21, 0x0d, 0x44, 0x40, 0x14, 0xc0, 0x69, 0xc6, 0x3b, 0x4b, + 0x30, 0x27, 0xd2, 0xc6, + 0x72, 0x7b, 0xdc, 0x39, 0xbf, 0xad, 0xb1, 0x77, 0xfe, 0xb0, 0xdc, 0x19, + 0xf6, 0x89, 0xf0, 0xfd, + 0xbf, 0x44, 0x59, 0x70, 0x8d, 0x4d, 0x12, 0x32, 0x49, 0x23, 0xc0, 0x9d, + 0xfa, 0x52, 0x5b, 0x7c, + 0xa3, 0xe3, 0x26, 0xd4, 0x21, 0xaf, 0x31, 0x4a, 0x55, 0xe2, 0x51, 0x03, + 0x5b, 0x1b, 0xd4, 0xd6, + 0xd1, 0xd2, 0x98, 0x6d, 0x4a, 0xc4, 0x09, 0x4a, 0x63, 0xf4, 0x54, 0xbe, + 0x91, 0xff, 0xcc, 0x31, + 0x9f, 0x2c, 0x74, 0x4c, 0x23, 0x5f, 0xc1, 0x31, 0x9a, 0x6a, 0x63, 0x9f, + 0xef, 0x0b, 0xf2, 0x99, + 0x7d, 0x05, 0x9e, 0x21, 0xc7, 0xa1, 0x28, 0xca, 0xfc, 0xb4, 0x78, 0x12, + 0x6b, 0x49, 0xa1, 0x6d, + 0xf2, 0x6f, 0x47, 0x7d, 0x0a, 0x6f, 0x34, 0x34, 0xb6, 0x65, 0xa0, 0x14, + 0x4b, 0x1a, 0xdf, 0x50, + 0x6d, 0x65, 0x6c, 0xe3, 0x68, 0x65, 0x6c, 0x60, 0xcb, 0xe2, 0xd3, 0x45, + 0xe6, 0x1d, 0xc6, 0x01, + 0xa2, 0xb9, 0x6a, 0x1a, 0xf1, 0x0c, 0xb7, 0x04, 0x38, 0x22, 0x70, 0x3c, + 0xd3, 0xc5, 0x16, 0x64, + 0x80, 0x55, 0x25, 0x33, 0xe0, 0x3b, 0x7f, 0x64, 0x9f, 0x8c, 0x0b, 0x1c, + 0xc9, 0x24, 0x0a, 0xfc, + 0x3a, 0xf6, 0xe8, 0x78, 0x53, 0x9c, 0xa9, 0x81, 0xd8, 0x08, 0xdf, 0x9f, + 0x6f, 0xe6, 0x0b, 0x1c, + 0x13, 0xd0, 0xfb, 0xb6, 0x02, 0xfe, 0x7d, 0xdb, 0x2d, 0x70, 0xce, 0x24, + 0xb3, 0xda, 0x8e, 0xe6, + 0xfb, 0xb1, 0x08, 0x39, 0x49, 0x48, 0x16, 0x1a, 0xa9, 0x9d, 0x51, 0xd7, + 0xfc, 0xeb, 0xb9, 0x76, + 0x8e, 0x06, 0x7c, 0x9a, 0x98, 0x8a, 0x53, 0xcd, 0x59, 0x34, 0xcb, 0x0c, + 0xbe, 0xba, 0x99, 0xf9, + 0x91, 0x8c, 0x8b, 0x97, 0x41, 0xe1, 0xea, 0x44, 0x92, 0x05, 0x88, 0xd5, + 0x49, 0x9a, 0x39, 0xdd, + 0xd4, 0x9d, 0xb6, 0x36, 0xdd, 0x41, 0x91, 0x3a, 0x14, 0x0d, 0x76, 0xbe, + 0x6d, 0x78, 0x4b, 0x79, + 0x0b, 0x0f, 0x82, 0x38, 0xfc, 0x75, 0xe5, 0x25, 0xfc, 0x82, 0xf2, 0x7f, + 0xf8, 0x29, 0xe9, 0x0d, + 0x6c, 0x24, 0xbd, 0xa9, 0xc6, 0x55, 0x63, 0x78, 0x91, 0xd7, 0x6e, 0xd8, + 0xcb, 0x5b, 0x07, 0xf5, + 0xa8, 0x11, 0xe3, 0xce, 0x6c, 0xf8, 0x68, 0xc4, 0x07, 0x7d, 0xdf, 0x60, + 0x3f, 0x4f, 0x1c, 0x7f, + 0xf1, 0x8d, 0xa0, 0xf3, 0x48, 0x94, 0x2a, 0xc3, 0x8a, 0xef, 0xec, 0x4f, + 0xb2, 0xc7, 0x3f, 0x31, + 0x29, 0xfa, 0x45, 0xc6, 0x0d, 0x8e, 0xd0, 0x33, 0x6b, 0x4e, 0x27, 0xf7, + 0x8d, 0xcd, 0x1c, 0xf4, + 0xa7, 0xe7, 0xa2, 0xd5, 0x4d, 0xd4, 0x24, 0x63, 0xb8, 0x72, 0x58, 0x7a, + 0x75, 0x5a, 0x3c, 0x3e, + 0x4a, 0x9c, 0x23, 0xde, 0x18, 0x2d, 0x06, 0xc1, 0xbf, 0x2b, 0x99, 0x4d, + 0x5b, 0xa3, 0x47, 0x5b, + 0xeb, 0x4b, 0x36, 0xb0, 0xcf, 0x17, 0x94, 0x6f, 0x12, 0x06, 0xad, 0xfa, + 0xbf, 0x4a, 0xbb, 0x46, + 0xcb, 0xeb, 0x39, 0x62, 0x73, 0x03, 0xf3, 0x4d, 0xe2, 0xb5, 0xda, 0x72, + 0xbc, 0x17, 0xdf, 0x84, + 0xc5, 0xbf, 0xa5, 0x79, 0xb3, 0xf0, 0xa2, 0x82, 0xc5, 0xdc, 0xe2, 0x82, + 0x45, 0x68, 0x59, 0xc1, + 0x42, 0xb4, 0x34, 0x7f, 0x19, 0x3f, 0xcf, 0xf6, 0x33, 0x37, 0xa5, 0xb8, + 0x03, 0xd7, 0xd9, 0xde, + 0x8c, 0x6f, 0x22, 0xb1, 0x0e, 0xe8, 0x6c, 0x88, 0x58, 0x23, 0xe8, 0x60, + 0xe7, 0x4a, 0xb2, 0xc8, + 0x31, 0x8f, 0x7c, 0x68, 0x1d, 0x8e, 0x1f, 0x91, 0x3a, 0x91, 0x4c, 0xb9, + 0x3d, 0x7f, 0x8f, 0xfa, + 0x10, 0xd7, 0x5f, 0xea, 0x4d, 0x3a, 0x4a, 0xcd, 0x71, 0x43, 0xe9, 0x66, + 0xda, 0x8a, 0xc6, 0x99, + 0x53, 0xc5, 0x7a, 0x42, 0x07, 0x67, 0x67, 0xbe, 0x9d, 0xa3, 0x09, 0x4a, + 0x94, 0x5b, 0x90, 0x81, + 0x05, 0x4e, 0x7e, 0x61, 0xde, 0xd7, 0xfc, 0x92, 0x82, 0x27, 0x21, 0x16, + 0x02, 0xff, 0x0e, 0x7c, + 0xbb, 0x14, 0xb1, 0x01, 0x6d, 0x6e, 0xbb, 0x86, 0x6b, 0x5f, 0xd0, 0x81, + 0x6b, 0x65, 0x6b, 0xca, + 0x35, 0x95, 0x1b, 0xa1, 0x7a, 0x62, 0x03, 0x92, 0x2d, 0x67, 0xd1, 0xfa, + 0x6a, 0x3d, 0xd2, 0x46, + 0x69, 0x00, 0x31, 0xd9, 0x08, 0x32, 0xd3, 0xba, 0x1c, 0x36, 0xc4, 0xb0, + 0xf6, 0x39, 0x64, 0x96, + 0xed, 0x7b, 0xc0, 0x40, 0x86, 0x7f, 0xb0, 0x6d, 0xd3, 0xd0, 0x34, 0xc7, + 0x54, 0xb2, 0x5a, 0x7d, + 0x09, 0xfc, 0x9c, 0x2c, 0x92, 0x66, 0x62, 0xb9, 0xb0, 0x14, 0xad, 0x97, + 0xa5, 0x8d, 0xed, 0x31, + 0x7e, 0xb4, 0x7d, 0x0e, 0xff, 0x35, 0xf8, 0x61, 0x53, 0xad, 0xd3, 0xc9, + 0x37, 0xd6, 0x6f, 0xc8, + 0x34, 0xeb, 0x57, 0x64, 0xb6, 0xb2, 0x08, 0x17, 0xcb, 0xf7, 0x93, 0xa6, + 0x52, 0x1b, 0x92, 0x6d, + 0x8e, 0x25, 0x29, 0x8c, 0x6f, 0x2b, 0x35, 0x26, 0x1d, 0xed, 0x5d, 0xf8, + 0x0e, 0x05, 0x2d, 0x0d, + 0xdd, 0xf3, 0xde, 0x30, 0xcc, 0xb3, 0x4d, 0x41, 0xb3, 0xed, 0xe3, 0x50, + 0x36, 0xe0, 0x5f, 0xb2, + 0x29, 0x15, 0xfc, 0xbf, 0x26, 0xa4, 0xb3, 0xb5, 0x2b, 0x7f, 0x5d, 0x41, + 0x7b, 0xd4, 0x44, 0xae, + 0x6f, 0x6c, 0x64, 0x6d, 0x63, 0xec, 0xec, 0x68, 0x68, 0x4c, 0x55, 0xea, + 0xf1, 0x59, 0x62, 0x63, + 0xd2, 0x3c, 0xef, 0x79, 0xee, 0xa3, 0xc2, 0x19, 0xdc, 0x34, 0xc7, 0xb7, + 0x64, 0xba, 0xf3, 0x1b, + 0x3c, 0xd5, 0xfe, 0x2d, 0x99, 0x06, 0x31, 0xf0, 0x34, 0xdb, 0x54, 0x32, + 0xd5, 0xbe, 0x0c, 0x7f, + 0x61, 0xcd, 0xe0, 0x13, 0x2c, 0x99, 0x24, 0x43, 0x6a, 0x80, 0xbb, 0xaa, + 0xf7, 0xa2, 0x87, 0x8a, + 0xfb, 0x1a, 0x3b, 0x3b, 0xeb, 0xe7, 0x66, 0x2a, 0x59, 0xc6, 0xc6, 0xd6, + 0x16, 0xc6, 0x46, 0xf6, + 0x4c, 0x43, 0xaa, 0x25, 0x89, 0x4f, 0x10, 0xe3, 0x70, 0xac, 0x09, 0x7c, + 0x4e, 0x0a, 0x91, 0x32, + 0x60, 0x5e, 0x14, 0xbb, 0x16, 0x80, 0x57, 0x17, 0xcb, 0xf2, 0x86, 0xe6, + 0x4c, 0xd2, 0x58, 0x6a, + 0x49, 0x9e, 0x04, 0xdf, 0x74, 0x86, 0x63, 0x12, 0xf9, 0xd8, 0xfe, 0x19, + 0x36, 0x02, 0xfe, 0x45, + 0x0b, 0x2c, 0xf7, 0x17, 0x47, 0x93, 0xe5, 0x66, 0xa4, 0x3d, 0xf8, 0xc0, + 0x5d, 0xf3, 0xdf, 0xe3, + 0xc7, 0xda, 0xdf, 0x07, 0xff, 0xaf, 0x90, 0x2f, 0xb6, 0x76, 0x83, 0xbf, + 0x71, 0x1c, 0x8d, 0x06, + 0x1f, 0x32, 0x1a, 0xae, 0x5d, 0xcc, 0x4f, 0xcc, 0xb2, 0xb4, 0xc5, 0x5d, + 0x6c, 0x9d, 0xb8, 0x66, + 0x6a, 0x7d, 0x63, 0x92, 0x9c, 0x80, 0xe2, 0x01, 0xf3, 0x92, 0xe1, 0x77, + 0x80, 0x5b, 0x34, 0x8a, + 0xc4, 0xc2, 0xbb, 0x46, 0x03, 0x8e, 0x01, 0x16, 0x12, 0xf0, 0xa3, 0x85, + 0x14, 0x92, 0x4e, 0x1b, + 0x0a, 0xcd, 0xe4, 0x5e, 0xe4, 0x46, 0x71, 0x00, 0xcd, 0x99, 0xfe, 0xc6, + 0xbf, 0x35, 0x2c, 0x9b, + 0xfb, 0xfa, 0xc3, 0xaf, 0x3a, 0x5e, 0x36, 0xbc, 0x22, 0xbf, 0x08, 0xbe, + 0xdf, 0xd3, 0xf8, 0x51, + 0xe9, 0x15, 0x3c, 0x94, 0xf6, 0xa4, 0xf1, 0x4a, 0x9c, 0x31, 0x56, 0x8a, + 0xe1, 0xef, 0x59, 0x3d, + 0xa8, 0xaf, 0x77, 0x8c, 0xab, 0xf5, 0xaf, 0xac, 0xe8, 0xdb, 0x2f, 0x69, + 0xda, 0x20, 0xed, 0xf9, + 0x81, 0xfc, 0xbe, 0xf3, 0x8e, 0xd2, 0x11, 0x33, 0x66, 0xd9, 0x1f, 0x1d, + 0xea, 0xd5, 0xff, 0xd7, + 0xc8, 0x11, 0x33, 0x92, 0xc5, 0x33, 0xc1, 0xed, 0x2e, 0x73, 0x54, 0xba, + 0x0e, 0x5d, 0x76, 0x2f, + 0xce, 0xa9, 0xdf, 0xf9, 0xc1, 0xac, 0x56, 0xc0, 0xf0, 0x25, 0xf0, 0x7c, + 0x93, 0xd0, 0x74, 0xd9, + 0x63, 0x74, 0xce, 0x7d, 0x63, 0xdc, 0xb7, 0x28, 0x73, 0x60, 0x5c, 0x0b, + 0x4d, 0xe7, 0x2b, 0x2a, + 0xa8, 0xce, 0x17, 0x3b, 0x26, 0x09, 0xbe, 0xf8, 0x26, 0x5e, 0x75, 0x93, + 0x04, 0x7b, 0x4a, 0xae, + 0x4b, 0xe7, 0x2b, 0x30, 0xdf, 0x24, 0x94, 0xd9, 0xb4, 0x31, 0xba, 0xfa, + 0xf5, 0x12, 0xf4, 0x6a, + 0xd7, 0x04, 0xe5, 0x9b, 0xb0, 0xef, 0xe5, 0xcd, 0x37, 0xb1, 0x0b, 0x80, + 0x7f, 0xf9, 0xf3, 0xd1, + 0xca, 0x82, 0x65, 0xdc, 0x8a, 0xc2, 0x65, 0xe0, 0x03, 0x2e, 0xe3, 0x97, + 0xe7, 0xad, 0xe4, 0x17, + 0x5a, 0xcf, 0x73, 0xce, 0xa2, 0x14, 0xae, 0x85, 0xa5, 0xb1, 0x50, 0x4f, + 0xcc, 0x34, 0xd5, 0x03, + 0xaf, 0x2e, 0x5d, 0x88, 0x14, 0x06, 0x39, 0x97, 0xd1, 0xa5, 0xb6, 0xa5, + 0xf4, 0x13, 0xa6, 0xe3, + 0x2c, 0x8b, 0xb4, 0x40, 0xfd, 0x10, 0x7f, 0xa1, 0x4c, 0xe1, 0x27, 0x38, + 0x8a, 0xc9, 0xe8, 0xbc, + 0x71, 0xc8, 0xaa, 0x74, 0xc3, 0x59, 0xe0, 0x65, 0x34, 0x77, 0x74, 0xc1, + 0x5d, 0xec, 0xad, 0x50, + 0x7d, 0x29, 0x83, 0x26, 0x29, 0xad, 0xd0, 0x13, 0x45, 0x85, 0xc6, 0x65, + 0x79, 0xd3, 0xd0, 0xcc, + 0x82, 0x87, 0xe0, 0x33, 0xa6, 0xd0, 0x54, 0x88, 0x01, 0x5b, 0xc8, 0x1d, + 0x68, 0x27, 0x67, 0x33, + 0xf0, 0xff, 0x06, 0xf0, 0x8d, 0xd5, 0x86, 0x7c, 0x0b, 0xf9, 0x1a, 0xd4, + 0x49, 0x69, 0x83, 0x3b, + 0x82, 0xbd, 0x75, 0x56, 0x52, 0x48, 0x47, 0xeb, 0x13, 0xe4, 0x73, 0x75, + 0x03, 0x99, 0x0f, 0x7e, + 0xdb, 0x0f, 0xca, 0x6c, 0x32, 0xdf, 0x36, 0x8f, 0xcc, 0xb2, 0xce, 0x86, + 0xd8, 0x74, 0x26, 0xfa, + 0x0e, 0x70, 0xf0, 0x3b, 0xdb, 0x74, 0x3c, 0xc3, 0xfe, 0x35, 0xdd, 0xad, + 0xbc, 0x0a, 0xe7, 0x4a, + 0x26, 0xe0, 0x5f, 0x1a, 0x49, 0x12, 0x53, 0x48, 0x86, 0xa5, 0x11, 0xed, + 0x69, 0xbb, 0x16, 0xe2, + 0xdf, 0xa5, 0xe8, 0x1b, 0xeb, 0x54, 0xf0, 0xfd, 0x66, 0x91, 0xe9, 0x56, + 0x88, 0xd9, 0xad, 0x33, + 0xc8, 0x0c, 0xeb, 0xb7, 0x64, 0x89, 0xfa, 0x03, 0xce, 0x51, 0xba, 0xe2, + 0x5b, 0x2c, 0x8d, 0x69, + 0xbc, 0x39, 0x53, 0x68, 0x65, 0xbd, 0x8e, 0xbf, 0xae, 0xf0, 0x1a, 0x43, + 0x0b, 0x67, 0x9a, 0xa1, + 0x5f, 0x9e, 0xc0, 0x7f, 0x6f, 0xfb, 0x0e, 0xcf, 0x76, 0x3a, 0x00, 0xff, + 0xe2, 0x48, 0x82, 0x98, + 0x4d, 0xba, 0xaa, 0x37, 0xd3, 0x6e, 0x79, 0x5d, 0xb8, 0xae, 0x8e, 0x74, + 0x14, 0x2d, 0xa5, 0xf0, + 0x0d, 0x6d, 0x6d, 0xb8, 0x4e, 0x8e, 0xbb, 0xb8, 0xbb, 0xa5, 0x7a, 0x28, + 0x59, 0x69, 0xc8, 0xf5, + 0x71, 0x7c, 0xce, 0x2d, 0x74, 0xce, 0x42, 0xd3, 0xed, 0xdf, 0xe3, 0xd9, + 0x76, 0x78, 0x2f, 0xfb, + 0x74, 0x32, 0x1d, 0x3e, 0xdb, 0x34, 0xdb, 0x77, 0x64, 0x9a, 0x7d, 0x19, + 0x1a, 0x6c, 0x8b, 0xe4, + 0x93, 0xe4, 0x0c, 0x92, 0x69, 0x6d, 0x8d, 0x6e, 0xb6, 0xf6, 0x46, 0x77, + 0xe4, 0x77, 0x43, 0x1d, + 0xf2, 0xdb, 0xf1, 0xd7, 0x38, 0xda, 0xc2, 0x77, 0xbf, 0x09, 0xdd, 0xee, + 0xbc, 0x15, 0xdf, 0x28, + 0x5d, 0x4b, 0xaf, 0xb1, 0x34, 0x05, 0x3f, 0x3b, 0x0d, 0xde, 0x33, 0x1e, + 0x47, 0x4a, 0xf5, 0x70, + 0x17, 0xc6, 0x33, 0xa6, 0x09, 0x24, 0x81, 0xa6, 0x92, 0xfa, 0x96, 0x66, + 0xa4, 0xa9, 0x9a, 0x41, + 0x06, 0x3a, 0xc1, 0x07, 0x76, 0x7c, 0x41, 0x26, 0xd9, 0x26, 0x61, 0x83, + 0x3d, 0x05, 0x47, 0x01, + 0xb6, 0x25, 0x82, 0xef, 0xdb, 0x5c, 0x6d, 0x83, 0x9a, 0x4a, 0xc9, 0xa8, + 0x95, 0xda, 0x17, 0x15, + 0x59, 0x3f, 0xc0, 0xa3, 0x6d, 0x45, 0x3c, 0xa7, 0x36, 0xd7, 0xfc, 0xbf, + 0x34, 0xe6, 0xcb, 0x81, + 0x47, 0x97, 0x69, 0x6e, 0x48, 0x3a, 0xc8, 0x37, 0xe1, 0xeb, 0xad, 0x1d, + 0xf8, 0xf6, 0xd6, 0x96, + 0x7c, 0x13, 0xb1, 0x39, 0x69, 0x65, 0x6a, 0x4e, 0x9b, 0x9b, 0x5b, 0xe3, + 0x66, 0x26, 0xb8, 0xee, + 0x90, 0x4c, 0xf0, 0x51, 0x1b, 0xe0, 0x66, 0x2c, 0x9f, 0x88, 0x13, 0x85, + 0x54, 0x5a, 0x5f, 0x68, + 0x2a, 0xb6, 0x26, 0xcd, 0x95, 0x6b, 0x70, 0x5f, 0xf1, 0x59, 0xfa, 0x26, + 0x8b, 0x65, 0x3d, 0xb8, + 0xb6, 0xf9, 0xb5, 0x5e, 0xaf, 0x4c, 0xfa, 0xbf, 0x97, 0xfe, 0x2d, 0x3d, + 0x89, 0x07, 0x5a, 0x9e, + 0xc3, 0x6f, 0xd0, 0x1e, 0x80, 0x7f, 0xf1, 0xc6, 0xf8, 0xc2, 0x56, 0xef, + 0x69, 0xbf, 0x5f, 0x6f, + 0xbe, 0x7d, 0xe2, 0xd4, 0x15, 0xcf, 0x54, 0x29, 0x17, 0x0d, 0x27, 0xbe, + 0x1d, 0xf4, 0xe4, 0xa0, + 0x4d, 0x4f, 0xf7, 0xea, 0xbe, 0x78, 0xd0, 0x7d, 0x2c, 0xf6, 0xf5, 0x85, + 0x7b, 0x55, 0xe3, 0x4b, + 0xde, 0x98, 0xb8, 0xd8, 0x70, 0x9f, 0xaf, 0xda, 0xc8, 0xa0, 0x92, 0x8e, + 0x0f, 0xc4, 0xcb, 0xc1, + 0xfa, 0x41, 0xc0, 0xee, 0xf2, 0xb3, 0x2e, 0x47, 0xd3, 0xaa, 0xae, 0x9e, + 0x4b, 0x61, 0xc6, 0x25, + 0x6d, 0x3b, 0x7f, 0xf3, 0x83, 0xdd, 0xef, 0x99, 0x12, 0x46, 0xfd, 0x65, + 0x0f, 0x16, 0xb1, 0x5e, + 0xe8, 0x28, 0x53, 0x90, 0x5c, 0x67, 0x08, 0xfd, 0x7a, 0xa1, 0x1f, 0x13, + 0xdf, 0x7a, 0x2e, 0xba, + 0xf8, 0x26, 0x21, 0x6a, 0xd5, 0x07, 0xd7, 0xae, 0xc9, 0xd0, 0xcd, 0x7d, + 0xf3, 0xad, 0x5d, 0x73, + 0x49, 0x07, 0xdf, 0x17, 0xdf, 0xa4, 0xc8, 0x7c, 0x11, 0xef, 0xce, 0x5b, + 0x88, 0x56, 0x15, 0xae, + 0xe6, 0x56, 0x15, 0xae, 0xe2, 0x97, 0x03, 0xfe, 0xfd, 0x98, 0xbf, 0x86, + 0x5f, 0x96, 0x5f, 0xc1, + 0x0d, 0xce, 0x8f, 0x43, 0x8d, 0x4d, 0x0d, 0xcc, 0x8c, 0xfb, 0x96, 0x61, + 0xc9, 0x34, 0x65, 0x98, + 0xa2, 0x4c, 0xaf, 0xe4, 0x2d, 0xa5, 0x4b, 0x9c, 0x0b, 0xe9, 0x9a, 0xbc, + 0xed, 0x74, 0x47, 0xde, + 0x16, 0xba, 0x21, 0x6f, 0x23, 0xd9, 0xec, 0xdc, 0xc8, 0x6f, 0xcc, 0xdf, + 0x84, 0x36, 0x15, 0x96, + 0xf2, 0xab, 0x9d, 0xcf, 0xa0, 0x56, 0xb6, 0x26, 0xe4, 0xc6, 0xa2, 0xce, + 0x80, 0x69, 0xf5, 0x51, + 0xa6, 0x39, 0x4b, 0x48, 0xb3, 0xb5, 0xe2, 0x5f, 0x2d, 0x9a, 0x6c, 0x58, + 0xe5, 0x98, 0x8d, 0x66, + 0x14, 0x0c, 0xe0, 0xc1, 0x57, 0xa3, 0x8d, 0xa4, 0xb6, 0xe4, 0x5a, 0x7b, + 0x47, 0xd2, 0xd2, 0x9a, + 0x81, 0x1a, 0xda, 0x6f, 0x46, 0x6f, 0x3a, 0xec, 0x48, 0x56, 0x6d, 0xdc, + 0x18, 0x9b, 0xca, 0x17, + 0xc8, 0x13, 0xd1, 0x18, 0x19, 0x21, 0x9b, 0xba, 0x05, 0xaf, 0xb5, 0xcd, + 0xc5, 0xf3, 0xac, 0x0b, + 0xf0, 0x42, 0x65, 0x11, 0x59, 0x00, 0xb7, 0x73, 0xd5, 0x79, 0x68, 0xae, + 0x7d, 0x0e, 0x9a, 0xe5, + 0x80, 0x18, 0xdd, 0x3a, 0x0b, 0xfc, 0xb4, 0x6f, 0xc9, 0x21, 0xe9, 0x75, + 0x38, 0x86, 0x4c, 0x47, + 0x25, 0x8d, 0xa6, 0x43, 0xcc, 0xdc, 0x52, 0x6d, 0x8b, 0x7b, 0x38, 0xbb, + 0xa2, 0x1c, 0xc7, 0x8f, + 0x68, 0xba, 0x6d, 0x16, 0x9e, 0x65, 0x9d, 0x83, 0xe7, 0x5a, 0xd9, 0xed, + 0x4c, 0x3c, 0xdb, 0x36, + 0x9d, 0x7c, 0x0f, 0xaf, 0xb9, 0xcd, 0xfa, 0x05, 0x19, 0xa2, 0xb4, 0x17, + 0xea, 0xcb, 0xd7, 0x0a, + 0x37, 0xe7, 0xdd, 0xc0, 0x75, 0x2c, 0x6c, 0x69, 0x68, 0xa4, 0xc6, 0xf2, + 0xf7, 0xe5, 0x7d, 0xc4, + 0xcf, 0x04, 0xbc, 0x9c, 0x95, 0xaf, 0xa2, 0x2c, 0x31, 0x1a, 0x7c, 0xd1, + 0x1b, 0x68, 0xbf, 0xbc, + 0xee, 0xb8, 0xa3, 0xa3, 0x39, 0x77, 0x9d, 0xed, 0x66, 0xee, 0x5e, 0xf9, + 0x4e, 0xbe, 0xaf, 0xf4, + 0x00, 0x1a, 0x20, 0x8d, 0x42, 0xe3, 0xd4, 0xd7, 0xf8, 0x7e, 0xea, 0x3b, + 0xc6, 0x85, 0xb6, 0x95, + 0x68, 0xb6, 0xe3, 0x07, 0xfa, 0x83, 0x6d, 0x0e, 0x99, 0x6d, 0x9b, 0x4f, + 0x7e, 0x00, 0xdc, 0x9b, + 0x0d, 0x3f, 0x7f, 0x6b, 0x9b, 0x45, 0x4a, 0x6c, 0x53, 0xf1, 0x9d, 0x96, + 0x1b, 0x51, 0x4f, 0xf1, + 0x16, 0xdc, 0x43, 0xba, 0x0d, 0xf5, 0x51, 0x06, 0x90, 0x47, 0xa5, 0xa7, + 0xe8, 0x13, 0x8e, 0x47, + 0xe8, 0xfd, 0xd6, 0xfe, 0xe4, 0x09, 0x15, 0x51, 0xd9, 0x96, 0x23, 0x3c, + 0x27, 0x0f, 0x14, 0xee, + 0xb3, 0xdc, 0x41, 0x6f, 0xb5, 0x74, 0xc7, 0x37, 0xc2, 0xe3, 0xbb, 0x48, + 0x5d, 0x48, 0x6f, 0xcd, + 0x17, 0x4c, 0x20, 0x19, 0xe0, 0xdb, 0xb5, 0x92, 0x9b, 0xd2, 0x06, 0x4a, + 0x1a, 0xe9, 0x66, 0xcf, + 0x07, 0x8c, 0x9d, 0x4c, 0x3e, 0x85, 0xef, 0x55, 0x60, 0x8d, 0x26, 0xd1, + 0x34, 0x45, 0x68, 0x28, + 0xb7, 0x26, 0xad, 0x94, 0xfa, 0x28, 0xdd, 0x1c, 0x8d, 0xaf, 0xb5, 0xdc, + 0x4f, 0x14, 0x65, 0x3c, + 0x2a, 0xb4, 0x16, 0xf3, 0x03, 0x94, 0x26, 0xf8, 0x1a, 0x73, 0x07, 0xd2, + 0x45, 0xec, 0x48, 0x3a, + 0x98, 0x3b, 0xe1, 0x0e, 0xe2, 0x75, 0xb8, 0x9b, 0xd8, 0x15, 0xdf, 0xa4, + 0xdc, 0x8b, 0xff, 0x6d, + 0x7b, 0x10, 0xdf, 0x23, 0xdd, 0x86, 0x6f, 0x35, 0xdf, 0x4d, 0x1e, 0x91, + 0x07, 0xa2, 0x7e, 0xe6, + 0x1e, 0xe4, 0x7a, 0x53, 0x47, 0xda, 0xca, 0x7c, 0x3d, 0xed, 0x6a, 0x8e, + 0xa3, 0x69, 0x10, 0x03, + 0x37, 0x86, 0x78, 0xbb, 0x85, 0xa5, 0x29, 0xca, 0xb4, 0x34, 0x40, 0xf7, + 0x48, 0xcf, 0x62, 0xad, + 0x3f, 0x65, 0xd3, 0xd0, 0xde, 0xde, 0xd8, 0xf4, 0xea, 0xac, 0xa7, 0x1f, + 0x7b, 0x50, 0x7c, 0x1c, + 0xbf, 0x40, 0xba, 0x69, 0xdc, 0xff, 0xe8, 0x71, 0xdd, 0xdf, 0x66, 0xf7, + 0xcf, 0x28, 0xbe, 0xf8, + 0x6e, 0x35, 0xba, 0x4d, 0x1e, 0xfa, 0x3c, 0xbb, 0xef, 0x59, 0xd6, 0xef, + 0x32, 0xab, 0xf4, 0x11, + 0xef, 0xfc, 0xde, 0xc6, 0xcf, 0xa7, 0xbc, 0x60, 0xff, 0x71, 0xd0, 0x9d, + 0x3e, 0x71, 0x0f, 0x30, + 0xd4, 0xe3, 0x07, 0x76, 0x2e, 0x8a, 0x1a, 0x12, 0xb4, 0x37, 0x4d, 0xcf, + 0xac, 0x39, 0x3d, 0x5a, + 0xf5, 0xe0, 0xeb, 0xc5, 0x3b, 0x33, 0x73, 0xd8, 0x7c, 0xbb, 0x40, 0x7a, + 0x2e, 0xcc, 0xfe, 0x35, + 0xfd, 0xe5, 0x30, 0xe9, 0x37, 0xb9, 0xf3, 0x94, 0x1a, 0xf7, 0x37, 0x2c, + 0x3a, 0x5f, 0x54, 0xbf, + 0xa6, 0x95, 0xdf, 0x5c, 0xa7, 0x57, 0x5f, 0x72, 0x1a, 0xeb, 0x4b, 0x1e, + 0x1b, 0x20, 0xbf, 0xe6, + 0x9e, 0xbb, 0xa1, 0x5f, 0xd3, 0x4a, 0x4f, 0xfc, 0x9e, 0x15, 0xbc, 0x57, + 0x49, 0xaf, 0x76, 0x0d, + 0xe3, 0xb8, 0xb0, 0xb9, 0x1f, 0x5e, 0x75, 0x93, 0x7c, 0xcb, 0x45, 0xb4, + 0xd7, 0xb9, 0x1c, 0xaf, + 0x1d, 0xbd, 0x81, 0x5b, 0x5f, 0xb0, 0x09, 0x6d, 0x2c, 0x5a, 0x83, 0x7e, + 0x2c, 0x58, 0x87, 0xd6, + 0x8f, 0xfe, 0x96, 0x7f, 0xd0, 0x9e, 0x6c, 0xaa, 0x6f, 0xca, 0xa6, 0x19, + 0xa6, 0x0c, 0x21, 0xcb, + 0x9c, 0x4d, 0xd3, 0x4d, 0x71, 0xe6, 0x01, 0x85, 0x53, 0xc8, 0xc6, 0xbc, + 0x25, 0x64, 0x29, 0xc4, + 0xc1, 0xcb, 0xed, 0xcb, 0xc8, 0x72, 0xdb, 0x72, 0xb2, 0xd4, 0xbe, 0x08, + 0xaf, 0x70, 0xae, 0xc4, + 0x4b, 0xf3, 0x56, 0x01, 0x6e, 0x5a, 0xf9, 0xde, 0xf9, 0xed, 0x50, 0x5b, + 0x6b, 0x63, 0x9c, 0x61, + 0xc9, 0x82, 0x78, 0xb8, 0x01, 0x49, 0x51, 0xdb, 0xa2, 0x7b, 0x8a, 0x3e, + 0x32, 0xec, 0xb2, 0x2d, + 0x46, 0xab, 0x0a, 0x1e, 0xe6, 0x63, 0xa5, 0x6b, 0xc8, 0x75, 0x8e, 0xeb, + 0xb9, 0x76, 0x79, 0x4d, + 0xf8, 0x7a, 0x62, 0x3a, 0x49, 0x56, 0xee, 0xc6, 0xb3, 0x9c, 0x7b, 0xf9, + 0x0d, 0xf6, 0x4d, 0xdc, + 0x16, 0xc7, 0x3a, 0xee, 0x47, 0xe7, 0x1a, 0xb4, 0xd1, 0xbe, 0x93, 0xdb, + 0x64, 0x2f, 0xe1, 0xe6, + 0xda, 0xe7, 0xf3, 0x4b, 0xed, 0x0b, 0xd1, 0x7c, 0xfb, 0x22, 0xb4, 0xc8, + 0x5e, 0x82, 0x4b, 0x6c, + 0x4b, 0x50, 0x89, 0xbd, 0x84, 0x5f, 0x6c, 0x5f, 0x80, 0x16, 0xaa, 0xf3, + 0xf9, 0x79, 0x8e, 0x99, + 0xe8, 0xb0, 0xfc, 0x32, 0xf3, 0xff, 0x68, 0xa6, 0xa9, 0x31, 0x69, 0xa3, + 0xb6, 0x47, 0xd7, 0x38, + 0x5b, 0x1a, 0x9b, 0xe4, 0x8f, 0x40, 0x5f, 0xd8, 0x17, 0x03, 0x2e, 0xcd, + 0x46, 0xf3, 0xac, 0x73, + 0x00, 0x2b, 0xe7, 0xa0, 0xef, 0xd5, 0xd9, 0x70, 0xfb, 0x03, 0x5a, 0x00, + 0xf8, 0x37, 0xd3, 0xba, + 0x92, 0x4c, 0xcc, 0xbb, 0x49, 0xe8, 0x96, 0x7f, 0x2b, 0xea, 0x5a, 0xd8, + 0xc1, 0xd0, 0xdc, 0x56, + 0x1f, 0x67, 0x5a, 0xe2, 0xc8, 0x2d, 0xf9, 0x4e, 0xc3, 0x52, 0xeb, 0x4c, + 0xc0, 0x3f, 0x27, 0xca, + 0xb6, 0x24, 0x93, 0x2e, 0x8e, 0x3b, 0x49, 0x4f, 0x5b, 0x5b, 0xae, 0x81, + 0x5c, 0x9f, 0xef, 0xe6, + 0x98, 0x60, 0xdc, 0x65, 0x5f, 0xce, 0xaf, 0x06, 0xbc, 0x5b, 0x61, 0x5b, + 0xc0, 0x2f, 0x70, 0xae, + 0xc6, 0x6b, 0x1c, 0xdb, 0xc8, 0x0a, 0xfb, 0x4c, 0x32, 0xd7, 0xb6, 0x88, + 0x2c, 0xb2, 0x2d, 0x20, + 0x0b, 0x61, 0x97, 0x00, 0x06, 0x96, 0xd8, 0xe6, 0x02, 0x06, 0xce, 0x26, + 0x25, 0x80, 0xb9, 0x25, + 0xd6, 0x1f, 0xd1, 0x0a, 0xf0, 0x45, 0x17, 0x39, 0x96, 0xa3, 0x65, 0xe0, + 0x0f, 0x2e, 0x54, 0x17, + 0xe0, 0x1f, 0x1c, 0x33, 0xf1, 0x1c, 0xeb, 0x0f, 0x64, 0xa9, 0x75, 0x09, + 0x99, 0x0d, 0x78, 0xfb, + 0xbd, 0xfd, 0x5b, 0x34, 0xc3, 0xe1, 0xc2, 0x75, 0xf0, 0x21, 0xd1, 0x2a, + 0xd5, 0x40, 0x6f, 0x12, + 0x63, 0x85, 0x54, 0x73, 0x03, 0xd2, 0xda, 0xd1, 0x86, 0x34, 0x81, 0xf8, + 0x39, 0x55, 0x4c, 0x26, + 0xb7, 0xaa, 0x0a, 0x99, 0x03, 0x31, 0xfd, 0x47, 0xd6, 0x79, 0xf8, 0x53, + 0x39, 0x9e, 0xa6, 0x98, + 0x9b, 0xd3, 0xd6, 0x6a, 0x53, 0x92, 0x6d, 0x81, 0xb8, 0x1f, 0xce, 0xa5, + 0x3b, 0xa4, 0x62, 0x62, + 0xb3, 0x16, 0xa3, 0x7c, 0xab, 0x03, 0x9b, 0xad, 0x36, 0xa4, 0xaa, 0x56, + 0x6c, 0xb5, 0x4a, 0x98, + 0x5a, 0x39, 0x9e, 0x57, 0x46, 0xa1, 0x51, 0x4a, 0x2e, 0xec, 0x11, 0x6c, + 0x36, 0x0a, 0x1a, 0xa9, + 0x0c, 0x45, 0x43, 0xd4, 0x1c, 0x34, 0x52, 0x1d, 0x8c, 0xde, 0xb6, 0x0e, + 0x36, 0x0e, 0x91, 0x87, + 0xf1, 0x23, 0xa5, 0x81, 0x80, 0x95, 0x89, 0x70, 0xd5, 0x6b, 0x42, 0x9b, + 0xc9, 0x4d, 0x71, 0x3d, + 0x4b, 0x06, 0x4a, 0x12, 0xeb, 0xe3, 0x5e, 0xce, 0x27, 0xb4, 0xda, 0x85, + 0xf9, 0xd3, 0x8b, 0x2f, + 0x6f, 0xfc, 0x72, 0xe2, 0x73, 0x06, 0x4f, 0xef, 0xde, 0xb6, 0xd7, 0x6f, + 0x79, 0xd8, 0xfa, 0xb0, + 0xe1, 0xdf, 0xe4, 0x7a, 0xd7, 0x59, 0x66, 0x6b, 0x9a, 0xc3, 0xee, 0xb7, + 0x4f, 0xbc, 0xf8, 0x6a, + 0x35, 0xce, 0x4d, 0xb4, 0xbf, 0xea, 0xc1, 0x34, 0xc3, 0xa4, 0x8b, 0x2f, + 0xd4, 0xee, 0x6d, 0xa9, + 0xbd, 0x0d, 0xcb, 0xc6, 0xf4, 0x9f, 0x31, 0xb1, 0x54, 0x7b, 0xfe, 0x89, + 0x2f, 0xcd, 0x1a, 0x76, + 0x0e, 0x5a, 0x70, 0xed, 0x80, 0xa0, 0xf9, 0xf4, 0xa2, 0x2c, 0x7d, 0xfa, + 0x4d, 0x3a, 0x66, 0x50, + 0x32, 0xbb, 0xd3, 0x78, 0x5e, 0x7e, 0xe7, 0x07, 0xbb, 0x6a, 0x05, 0xcc, + 0xee, 0x92, 0x94, 0x68, + 0x63, 0x20, 0xbe, 0x89, 0x3b, 0x56, 0xd5, 0x37, 0xf7, 0x4d, 0x8c, 0xf6, + 0xcf, 0x7d, 0xfb, 0x1f, + 0xcf, 0xa0, 0xd4, 0x7a, 0x64, 0xf2, 0x13, 0x73, 0x7c, 0xe5, 0xd7, 0xbc, + 0xeb, 0x26, 0xfa, 0xf8, + 0x76, 0xa9, 0xfa, 0x34, 0xa9, 0xc3, 0xaa, 0x5d, 0xe3, 0xae, 0x85, 0x7b, + 0xe1, 0xba, 0xdd, 0x74, + 0x11, 0x1f, 0x70, 0xae, 0x47, 0x5b, 0x8b, 0x36, 0x73, 0x9b, 0x0a, 0x36, + 0xa0, 0xf5, 0x85, 0x5b, + 0xf1, 0x86, 0xfc, 0x8d, 0x68, 0x43, 0xd1, 0x2c, 0xfe, 0x61, 0x35, 0x06, + 0x3c, 0xb5, 0x6c, 0x9a, + 0x2d, 0x64, 0x0a, 0x99, 0x34, 0x8b, 0x64, 0x00, 0x12, 0xf6, 0x77, 0xbe, + 0x4f, 0x77, 0xd9, 0x57, + 0x93, 0xe5, 0xd6, 0x35, 0x74, 0xad, 0xba, 0x9a, 0xac, 0xb4, 0xad, 0xc6, + 0xab, 0x60, 0xaf, 0xb5, + 0xad, 0x25, 0x3f, 0x3a, 0xd6, 0xa3, 0xd5, 0x05, 0x32, 0x7f, 0x8b, 0xa3, + 0x39, 0x6e, 0x28, 0x66, + 0x92, 0x2c, 0x4b, 0x3d, 0xd2, 0x50, 0xca, 0x22, 0x49, 0x96, 0xd6, 0xf8, + 0xba, 0x82, 0xf1, 0xdc, + 0x1e, 0xfb, 0x32, 0xbe, 0xb4, 0xe8, 0x15, 0x63, 0x13, 0x7b, 0x4f, 0x74, + 0x7d, 0x7e, 0x6b, 0xae, + 0x89, 0x9c, 0x8d, 0x99, 0x8e, 0x5e, 0x86, 0x74, 0x3b, 0x2d, 0x56, 0xd7, + 0x93, 0x05, 0xf6, 0xa5, + 0xc6, 0x25, 0x8e, 0xc5, 0x5c, 0x89, 0xa3, 0x04, 0x30, 0x6e, 0x05, 0xbf, + 0xcc, 0xbe, 0x18, 0xb0, + 0x6f, 0x09, 0x5a, 0x02, 0xd8, 0xb7, 0xc4, 0xbe, 0x04, 0xaf, 0x80, 0xbd, + 0xd8, 0xb1, 0x02, 0x2d, + 0x03, 0x1c, 0x5d, 0xa6, 0x2c, 0x41, 0x4b, 0x6d, 0x8b, 0xf9, 0x45, 0xd6, + 0xb9, 0xe8, 0x90, 0xf5, + 0x25, 0x12, 0x61, 0x06, 0xec, 0x53, 0xae, 0xe3, 0x3a, 0xe5, 0xb7, 0xe3, + 0x9a, 0x5b, 0xb3, 0xf8, + 0x64, 0xbb, 0x09, 0x2d, 0xb2, 0x96, 0xa0, 0xb9, 0x0e, 0xd6, 0x33, 0x3c, + 0x1f, 0x2d, 0x80, 0xcd, + 0x7c, 0x47, 0xf0, 0x25, 0xf9, 0xb9, 0xb6, 0x79, 0x78, 0xbe, 0x75, 0x01, + 0xf9, 0xae, 0xe0, 0x5e, + 0xd2, 0xad, 0xe8, 0x06, 0xe3, 0x35, 0x79, 0x4d, 0x8c, 0xd9, 0x12, 0xe0, + 0xb0, 0x18, 0x49, 0xef, + 0x2d, 0x1a, 0x6f, 0x58, 0xa0, 0x42, 0x8c, 0x9d, 0x3f, 0x9a, 0xeb, 0x60, + 0x6b, 0x87, 0x7a, 0x42, + 0x7c, 0xda, 0x51, 0x6a, 0x88, 0xea, 0x59, 0x5b, 0x1b, 0xff, 0x65, 0x9b, + 0xc0, 0xaf, 0x65, 0x18, + 0x67, 0x5f, 0x40, 0x16, 0x3b, 0x18, 0xce, 0x95, 0x90, 0x85, 0xf0, 0x3a, + 0x0b, 0xd5, 0x25, 0xb0, + 0xe1, 0x3e, 0xdb, 0x72, 0xbc, 0xc2, 0xb6, 0x04, 0x70, 0x70, 0x31, 0xe0, + 0xf4, 0x7c, 0x5c, 0x62, + 0x87, 0x6d, 0x5b, 0x84, 0x97, 0xd8, 0x16, 0xa1, 0x12, 0xc7, 0x02, 0xb4, + 0xc0, 0xb9, 0x10, 0xcd, + 0xb5, 0xcd, 0x47, 0xf3, 0xd8, 0x67, 0xb1, 0xcd, 0x42, 0x0b, 0xe1, 0x73, + 0xfc, 0x60, 0xff, 0x01, + 0x33, 0xec, 0x2c, 0xb1, 0xcf, 0x85, 0xc7, 0x2c, 0x44, 0x0b, 0x1c, 0xf0, + 0x59, 0xe1, 0xb1, 0x8b, + 0x94, 0xaf, 0xe9, 0x5b, 0x96, 0x68, 0xda, 0x5a, 0xee, 0x80, 0x5a, 0xb3, + 0x6b, 0x89, 0x29, 0x05, + 0xb0, 0x2e, 0x91, 0xde, 0xa4, 0xe4, 0xe1, 0xf9, 0xea, 0xd7, 0xf8, 0x33, + 0x88, 0xe1, 0xbf, 0x53, + 0x5b, 0xa1, 0x26, 0xd6, 0xd6, 0xa4, 0xa1, 0x25, 0x1d, 0x33, 0x2d, 0x2b, + 0xd6, 0xff, 0xdc, 0x43, + 0xfe, 0x0a, 0x8e, 0xa5, 0x13, 0xd9, 0x55, 0x2b, 0xf8, 0xcf, 0x4e, 0xe4, + 0x04, 0xfc, 0x53, 0xac, + 0x2a, 0xc2, 0x2a, 0xc7, 0x73, 0x8a, 0x01, 0xe5, 0x2a, 0xb9, 0x10, 0xfb, + 0x8f, 0x64, 0x73, 0xf1, + 0xf0, 0x48, 0x65, 0x38, 0x7a, 0x4f, 0x79, 0x0f, 0x0d, 0x29, 0x78, 0x67, + 0x24, 0x8b, 0x6d, 0xdf, + 0x98, 0x3e, 0xf8, 0xdf, 0xc3, 0xa4, 0x57, 0x48, 0x0f, 0x4b, 0x06, 0x6d, + 0x26, 0x36, 0xa2, 0xf5, + 0xd9, 0xb5, 0xc9, 0xcc, 0xf2, 0xa9, 0x69, 0xa4, 0xaf, 0xf2, 0x2c, 0x19, + 0xc4, 0x6a, 0x1a, 0xdf, + 0x9c, 0x7f, 0xca, 0x53, 0x9f, 0x98, 0xb2, 0xc0, 0xa0, 0xf1, 0xd5, 0x9e, + 0x1e, 0xff, 0xc0, 0x5b, + 0x03, 0x3d, 0xf8, 0x07, 0xd7, 0x7f, 0x0d, 0xaf, 0xa6, 0x5e, 0x7c, 0xb6, + 0x1a, 0xe7, 0x8a, 0x67, + 0xbc, 0xeb, 0xc1, 0xb6, 0x15, 0xf9, 0x17, 0x87, 0x79, 0xee, 0x5f, 0x31, + 0x6f, 0xd0, 0x83, 0xde, + 0xb8, 0x67, 0x9f, 0x33, 0x65, 0xe0, 0xc6, 0xc2, 0x13, 0x43, 0x6a, 0x44, + 0xc6, 0xa6, 0xf3, 0x48, + 0xcb, 0x1f, 0xc2, 0xef, 0x7b, 0x8e, 0x8d, 0x78, 0x3b, 0x60, 0x3f, 0xdc, + 0xe8, 0xac, 0xe1, 0xba, + 0x6c, 0x40, 0xe7, 0xbc, 0xc5, 0xda, 0x39, 0x2c, 0xef, 0xf9, 0xc1, 0xd5, + 0xf1, 0xf1, 0x38, 0x97, + 0xb6, 0x55, 0x20, 0xbe, 0x89, 0x5b, 0x97, 0x3d, 0xd8, 0xdc, 0x37, 0xa2, + 0x69, 0x89, 0x4b, 0x31, + 0xba, 0xb8, 0x6f, 0x61, 0xc7, 0x05, 0xdd, 0xc7, 0xc4, 0xad, 0xf3, 0xe5, + 0x2f, 0xbf, 0x36, 0x3a, + 0x7d, 0x78, 0x66, 0x71, 0x16, 0xe3, 0x9b, 0xe4, 0x06, 0xe2, 0x9b, 0xe8, + 0xd4, 0xaa, 0xaf, 0x93, + 0xd7, 0x0b, 0xb7, 0x76, 0x8d, 0x0c, 0xe7, 0xd8, 0x41, 0xe7, 0x3a, 0x7e, + 0x5b, 0xe1, 0x66, 0x6e, + 0x73, 0xc1, 0x46, 0xb4, 0xb5, 0x60, 0x1b, 0xda, 0x9c, 0xbf, 0x1d, 0x6d, + 0xcc, 0xaf, 0xe4, 0x5f, + 0x93, 0x22, 0x48, 0x7d, 0x92, 0x29, 0xd4, 0x13, 0xb2, 0x4d, 0xd9, 0x66, + 0xc0, 0x40, 0xb1, 0x1d, + 0xed, 0x07, 0x7e, 0xc5, 0x5e, 0xfb, 0x3a, 0xb2, 0xc6, 0xb6, 0x16, 0xf0, + 0xef, 0x47, 0xba, 0xc2, + 0xba, 0x1c, 0xaf, 0xb2, 0xae, 0x84, 0xbd, 0x96, 0xac, 0x72, 0x6e, 0xc5, + 0xab, 0x8b, 0x5e, 0x43, + 0xed, 0x1c, 0xa9, 0xa4, 0xbe, 0x54, 0x9f, 0xd6, 0xb3, 0x64, 0x0b, 0x69, + 0x42, 0x16, 0x89, 0x16, + 0xaf, 0xc1, 0xed, 0xf2, 0x1c, 0xfc, 0x11, 0xfb, 0x4a, 0x7e, 0xe7, 0x18, + 0xab, 0xa1, 0x5b, 0x61, + 0x37, 0xd4, 0xd2, 0xde, 0x00, 0x65, 0x9b, 0xb4, 0x5e, 0x41, 0xa1, 0x89, + 0x94, 0x49, 0xde, 0xb3, + 0x6f, 0x23, 0x73, 0x9d, 0xb3, 0x0d, 0xf3, 0x9d, 0x4b, 0xb9, 0x05, 0x80, + 0x09, 0xf3, 0xac, 0x0b, + 0xf9, 0x12, 0x75, 0x09, 0xbf, 0x48, 0x5d, 0x08, 0x7e, 0x52, 0x09, 0x5e, + 0x6a, 0x5b, 0x82, 0x17, + 0xda, 0x96, 0xe1, 0x25, 0xf6, 0xe5, 0x68, 0xb1, 0x63, 0x11, 0x5a, 0x68, + 0x5d, 0xc6, 0x6f, 0xb6, + 0x6d, 0xe0, 0x19, 0xb6, 0xed, 0x72, 0x3c, 0x87, 0x52, 0x6c, 0x5d, 0x51, + 0xb7, 0xbc, 0x2e, 0xb9, + 0x6d, 0xf2, 0x9a, 0x70, 0xd9, 0x52, 0x2a, 0x4a, 0x54, 0x8d, 0x68, 0xb1, + 0xc2, 0xb0, 0xb3, 0x04, + 0x2d, 0x52, 0x17, 0xc3, 0xe3, 0x17, 0xa2, 0xc5, 0x80, 0x87, 0xf3, 0xe1, + 0x76, 0x81, 0x75, 0x3e, + 0xf8, 0x60, 0xcb, 0xc8, 0xc2, 0xa2, 0xbb, 0x51, 0xe7, 0xa2, 0xf6, 0x86, + 0xa6, 0xd6, 0x06, 0x46, + 0x56, 0x8f, 0x66, 0xfd, 0xc3, 0x8f, 0x8e, 0xfd, 0xde, 0xb0, 0x40, 0x59, + 0x80, 0xe7, 0x15, 0x7e, + 0xc4, 0xdd, 0x91, 0x7f, 0x0b, 0x77, 0x83, 0xa3, 0xb9, 0xb1, 0x95, 0xd2, + 0x98, 0x6f, 0x3f, 0xba, + 0x5b, 0xce, 0x00, 0xc7, 0x38, 0x7e, 0x0b, 0xc4, 0xe1, 0x25, 0xd6, 0x12, + 0x32, 0xcf, 0x3a, 0x17, + 0xe2, 0xf1, 0xc5, 0x64, 0xbe, 0x75, 0x36, 0xf9, 0x41, 0x29, 0xc1, 0xf0, + 0x39, 0xc9, 0x02, 0xc0, + 0xc3, 0x45, 0xb0, 0xe7, 0xc2, 0x9e, 0x63, 0x9f, 0x8b, 0x7f, 0x00, 0x7c, + 0x5b, 0xc6, 0xae, 0x0d, + 0xd6, 0x95, 0x68, 0xb1, 0x7d, 0x3e, 0x5a, 0x02, 0x9f, 0x7b, 0xbe, 0xca, + 0xfc, 0xd6, 0x25, 0x68, + 0xae, 0x95, 0xd5, 0xd8, 0x01, 0xff, 0x34, 0x5f, 0x71, 0x21, 0x5e, 0x00, + 0x78, 0xb9, 0xc0, 0xbe, + 0x10, 0xcf, 0x83, 0xdb, 0x85, 0xb6, 0x25, 0x74, 0x9d, 0x3c, 0x9c, 0xf6, + 0x56, 0xda, 0xe0, 0x2e, + 0xb6, 0x56, 0x7c, 0x43, 0x29, 0x13, 0xa7, 0x10, 0xf8, 0x7c, 0xcc, 0x0f, + 0x97, 0x72, 0xd1, 0x12, + 0xf5, 0x1b, 0xfc, 0x85, 0x32, 0x15, 0xcd, 0xb1, 0xdd, 0x6c, 0x6c, 0x60, + 0x6b, 0x88, 0xd3, 0x19, + 0x87, 0x45, 0x60, 0x3d, 0x8a, 0x11, 0xe4, 0x26, 0x69, 0x2c, 0xc9, 0x57, + 0x1c, 0xc8, 0xaa, 0x58, + 0x90, 0x24, 0x2b, 0x48, 0x96, 0x4d, 0x88, 0x00, 0xfc, 0xe5, 0x82, 0xbf, + 0x37, 0x44, 0x1e, 0x8e, + 0x86, 0xc9, 0x43, 0xf0, 0x50, 0xf9, 0x3d, 0xfc, 0x0e, 0xdc, 0x0e, 0x51, + 0xdf, 0xc6, 0x6f, 0x2b, + 0x6f, 0xa2, 0x37, 0x96, 0xb9, 0x7b, 0xf2, 0x36, 0xbc, 0x71, 0xdb, 0xcb, + 0xf2, 0xdd, 0xb4, 0xa7, + 0x54, 0x1f, 0x37, 0xb4, 0x64, 0xe2, 0x54, 0x78, 0xcd, 0x04, 0x0a, 0x1b, + 0x8e, 0x4d, 0x17, 0xf9, + 0x11, 0xf2, 0xfa, 0x5a, 0x88, 0x53, 0xbd, 0xe3, 0x57, 0x37, 0x37, 0xe3, + 0xc5, 0xcf, 0xef, 0x7e, + 0xe9, 0x3e, 0xd2, 0xb9, 0xfa, 0x9c, 0x7a, 0x8c, 0xe1, 0xd5, 0x8c, 0xaa, + 0xc7, 0xab, 0x1f, 0x67, + 0x2d, 0xcd, 0xf1, 0xd4, 0x42, 0x6a, 0x60, 0xdb, 0xd8, 0x29, 0x6f, 0x7b, + 0x78, 0x6e, 0x2c, 0x4f, + 0xe8, 0xb7, 0x26, 0xf2, 0xa9, 0xdd, 0xe5, 0x27, 0x2e, 0xed, 0xd9, 0x3f, + 0x50, 0x3e, 0x9d, 0xcd, + 0xe6, 0x09, 0x6a, 0x03, 0x21, 0xcc, 0x5b, 0x0c, 0xa0, 0xcb, 0xee, 0xaa, + 0x9b, 0xd8, 0x92, 0x73, + 0x5d, 0x9c, 0x3b, 0xff, 0xf3, 0x83, 0x59, 0xad, 0xc0, 0x95, 0xc3, 0x0a, + 0x3a, 0xf7, 0x4d, 0xcb, + 0xfb, 0xc5, 0x39, 0xe2, 0x38, 0xf0, 0xff, 0xb8, 0x28, 0x4b, 0x14, 0xf6, + 0x9d, 0x5f, 0x0b, 0x45, + 0xab, 0x3e, 0xfc, 0x9a, 0x56, 0x3e, 0xf2, 0x7a, 0x97, 0xc5, 0x37, 0x09, + 0x25, 0xaf, 0x17, 0x2e, + 0x3d, 0x9f, 0x58, 0x1f, 0x7a, 0x3e, 0x56, 0x7a, 0x91, 0x1c, 0x76, 0xac, + 0xe7, 0xb7, 0x16, 0x6c, + 0x37, 0xec, 0xc8, 0xdf, 0xc1, 0xef, 0xce, 0xaf, 0x44, 0xa5, 0x79, 0x3b, + 0xd0, 0x16, 0xfb, 0x09, + 0xf4, 0x2a, 0xe0, 0x5f, 0x43, 0xf0, 0xff, 0xb2, 0x4c, 0xd9, 0x42, 0x96, + 0xa5, 0xa1, 0xd8, 0xd2, + 0x7e, 0x23, 0x7a, 0x3e, 0x6f, 0xb9, 0xf1, 0xa2, 0xe9, 0x67, 0xe1, 0x98, + 0xf5, 0xb8, 0x70, 0x5a, + 0xfc, 0x5d, 0x70, 0x5d, 0xa3, 0x7f, 0x25, 0xc7, 0xec, 0x95, 0xb8, 0xac, + 0xa0, 0x02, 0x95, 0x16, + 0xbd, 0x8f, 0xdb, 0xdb, 0x13, 0x18, 0xe7, 0x0a, 0x50, 0x33, 0x1d, 0x6c, + 0x27, 0x1a, 0x37, 0x70, + 0xb6, 0xe1, 0x5b, 0x3b, 0xa6, 0xf0, 0xc7, 0xec, 0x5b, 0xf8, 0xd5, 0xef, + 0x4b, 0xb9, 0x9d, 0x0b, + 0xda, 0xa2, 0x86, 0xac, 0x5f, 0x45, 0x00, 0x8f, 0x52, 0x48, 0xc0, 0x19, + 0xea, 0xc3, 0xfc, 0xf2, + 0xbc, 0x43, 0xfc, 0x5e, 0xc7, 0x31, 0xee, 0xa4, 0x7a, 0x8a, 0x3f, 0xad, + 0x9c, 0xc2, 0x27, 0x94, + 0xb3, 0xe8, 0x94, 0xf5, 0x38, 0xfa, 0x49, 0x39, 0x43, 0xce, 0x89, 0xbf, + 0xd1, 0x3f, 0xe1, 0x7d, + 0xfe, 0x80, 0x75, 0x56, 0x39, 0x46, 0x0e, 0xe7, 0x95, 0xa3, 0x03, 0x79, + 0xeb, 0x78, 0x87, 0x55, + 0x46, 0xd3, 0xd5, 0xa5, 0x68, 0x69, 0xfe, 0xab, 0x7c, 0x87, 0xfc, 0x5e, + 0xfc, 0xf5, 0x85, 0x2d, + 0x73, 0x1b, 0x49, 0xd9, 0x28, 0x03, 0xe2, 0xd6, 0x64, 0xf5, 0x39, 0x34, + 0x5d, 0x5e, 0x8f, 0x96, + 0xdb, 0x56, 0xa0, 0x95, 0xd6, 0x65, 0x68, 0x39, 0x60, 0xd0, 0x0a, 0xed, + 0x76, 0x39, 0x5a, 0x0e, + 0xf8, 0xb3, 0x5c, 0xde, 0x40, 0xbe, 0x2d, 0xba, 0x85, 0x6f, 0x5b, 0xd0, + 0xc2, 0xd0, 0x58, 0xca, + 0x40, 0x8c, 0x95, 0x9b, 0x62, 0x8a, 0x24, 0xf7, 0x8e, 0x9b, 0x6d, 0x58, + 0xab, 0x2c, 0xc2, 0x8b, + 0x47, 0x4f, 0xe5, 0xfa, 0x17, 0xdc, 0xc8, 0x41, 0x5c, 0x6c, 0xe8, 0x94, + 0x7f, 0x7d, 0x6e, 0xd7, + 0x0f, 0x6e, 0x1c, 0xde, 0x3f, 0xff, 0x03, 0x63, 0x85, 0x63, 0x0b, 0x5f, + 0xe1, 0xa8, 0x84, 0xcf, + 0x5a, 0xc1, 0xef, 0xb5, 0x1f, 0xc3, 0x07, 0x6d, 0x07, 0xc8, 0x41, 0xf5, + 0x24, 0x39, 0xa5, 0x9c, + 0x24, 0x87, 0x94, 0x23, 0x70, 0x7b, 0x8c, 0x1c, 0x55, 0x4e, 0xe0, 0xe3, + 0xea, 0x71, 0xb2, 0xd7, + 0xba, 0x1b, 0x57, 0x58, 0xe7, 0xe2, 0xf7, 0xc1, 0x47, 0xfd, 0xd1, 0xbe, + 0x0a, 0xad, 0x70, 0xae, + 0x80, 0xcf, 0x00, 0x9f, 0xd7, 0x56, 0x82, 0xb6, 0x58, 0x2b, 0xd1, 0x5e, + 0xeb, 0x5e, 0x7c, 0xc0, + 0x7a, 0x00, 0xef, 0x53, 0x0f, 0xe0, 0x2a, 0xb5, 0x82, 0x94, 0xab, 0xe5, + 0x64, 0x8b, 0x75, 0x2b, + 0xd9, 0xac, 0xac, 0x27, 0x47, 0x94, 0xa7, 0x48, 0x3d, 0xdb, 0x4d, 0x7c, + 0x73, 0x7b, 0x43, 0x54, + 0xdf, 0x94, 0x4a, 0x92, 0x59, 0x77, 0x9f, 0xd8, 0x90, 0xa6, 0xc8, 0xaf, + 0xf3, 0xab, 0x95, 0xef, + 0xd0, 0x14, 0x75, 0x0a, 0xff, 0x81, 0xa3, 0x2d, 0x97, 0x2e, 0x65, 0x60, + 0x56, 0xef, 0xd6, 0xfa, + 0x65, 0xe0, 0xef, 0x7f, 0xad, 0x85, 0xa3, 0x36, 0xd9, 0x8a, 0x14, 0x59, + 0xc1, 0x80, 0x7d, 0x98, + 0xca, 0x3c, 0x32, 0xc8, 0x23, 0x01, 0xf7, 0x06, 0xe3, 0x21, 0x16, 0x88, + 0x73, 0x2d, 0xef, 0xa2, + 0xc1, 0x96, 0x21, 0x68, 0x08, 0xec, 0xc1, 0x96, 0x77, 0xf0, 0xe0, 0xf1, + 0x6f, 0xbe, 0xe5, 0xc1, + 0x26, 0x76, 0xfb, 0x46, 0x41, 0xdb, 0x11, 0x6d, 0x2c, 0xf5, 0x70, 0x9a, + 0x98, 0x8c, 0x13, 0x59, + 0xcf, 0x0e, 0x53, 0x48, 0x15, 0xe0, 0x2c, 0x10, 0xbb, 0x93, 0xd7, 0x59, + 0xfd, 0x62, 0xf1, 0x8c, + 0xfb, 0xbc, 0xb1, 0x49, 0x7b, 0xee, 0x57, 0x77, 0x3c, 0x73, 0x17, 0xe9, + 0x58, 0x7d, 0x4e, 0xf5, + 0x59, 0x31, 0xa8, 0xdf, 0xa0, 0x79, 0x2b, 0x1e, 0xf4, 0xf6, 0xe1, 0x3c, + 0x9c, 0xde, 0x6a, 0x5e, + 0x5b, 0x88, 0x6b, 0x22, 0x7b, 0x4d, 0x78, 0x8d, 0x86, 0x6a, 0xc4, 0x28, + 0x7f, 0xf9, 0xf4, 0xcc, + 0xa2, 0xb4, 0x11, 0x61, 0x9d, 0xb7, 0x68, 0xd1, 0x63, 0x77, 0xa9, 0xc1, + 0xf8, 0x26, 0xa3, 0x12, + 0xf2, 0x32, 0x73, 0x32, 0x9d, 0xb1, 0xa3, 0x02, 0xf2, 0x4d, 0x04, 0x57, + 0xdf, 0x4b, 0xb5, 0x1e, + 0x8c, 0x33, 0xde, 0xe8, 0x53, 0xcf, 0x25, 0xc4, 0xbc, 0x5e, 0x76, 0xb8, + 0x67, 0x50, 0x06, 0x3c, + 0x26, 0x8c, 0x6f, 0x92, 0x62, 0xd0, 0x6a, 0x24, 0x01, 0xe6, 0x07, 0x33, + 0x5c, 0x77, 0xe9, 0x74, + 0x07, 0xd3, 0x91, 0x89, 0x0a, 0x41, 0xd3, 0xea, 0xf2, 0xb4, 0x6b, 0x58, + 0xff, 0xcb, 0x21, 0xc7, + 0x66, 0xae, 0xb4, 0xa0, 0xd4, 0x50, 0x99, 0x57, 0xce, 0xef, 0xca, 0xaf, + 0xc0, 0x95, 0x79, 0xa5, + 0x68, 0x7b, 0x7e, 0x05, 0xff, 0xac, 0x14, 0x41, 0x1b, 0x98, 0xea, 0xd1, + 0x2c, 0x31, 0xdb, 0xd4, + 0x58, 0x6e, 0x6f, 0xba, 0xae, 0xa8, 0x23, 0xff, 0x54, 0xc1, 0x48, 0xfe, + 0x25, 0xe5, 0x59, 0xe1, + 0x19, 0xe5, 0x49, 0xe1, 0x19, 0xe9, 0x39, 0xd3, 0x6b, 0xa6, 0x37, 0x4d, + 0x6f, 0xb2, 0xb9, 0x88, + 0x05, 0x23, 0xf8, 0x77, 0x47, 0x3f, 0xc7, 0x3f, 0xea, 0x7c, 0x81, 0xb4, + 0x57, 0x32, 0x48, 0xb6, + 0x25, 0x93, 0x26, 0x9a, 0x63, 0x49, 0x4b, 0x47, 0x6b, 0xfe, 0xde, 0xe2, + 0x77, 0x8d, 0x9f, 0xda, + 0xcb, 0xb8, 0x6d, 0x8e, 0x32, 0x7e, 0xc5, 0xd8, 0xa7, 0x8d, 0xf5, 0xd4, + 0xc6, 0x04, 0x10, 0x55, + 0x48, 0x17, 0xd3, 0x71, 0x96, 0x98, 0x82, 0x93, 0x95, 0x67, 0x91, 0x90, + 0x3f, 0x98, 0x1b, 0xc6, + 0xe6, 0x05, 0xdb, 0x72, 0x78, 0x9c, 0x67, 0x32, 0x5a, 0x9c, 0x16, 0x1e, + 0xd9, 0x72, 0xd0, 0x08, + 0x25, 0x87, 0x70, 0x16, 0x23, 0x19, 0x25, 0x8e, 0xa2, 0x9c, 0xd9, 0x40, + 0x47, 0xc8, 0x2f, 0x92, + 0x57, 0x9d, 0x32, 0xff, 0xb4, 0xb3, 0x07, 0x7a, 0x43, 0xfd, 0x1c, 0x6d, + 0x66, 0xb9, 0xb5, 0xc2, + 0x77, 0xf8, 0xce, 0x85, 0x5d, 0x8c, 0xe0, 0x53, 0x72, 0x99, 0xa6, 0x0c, + 0x16, 0x2b, 0x0a, 0xe9, + 0xb6, 0xfb, 0xd1, 0x24, 0x65, 0x3b, 0x5a, 0x63, 0x5d, 0x83, 0x7e, 0x54, + 0xd7, 0xa2, 0x75, 0xd6, + 0x75, 0xb0, 0xd7, 0xa2, 0xb5, 0xf0, 0x33, 0xdc, 0x87, 0xd7, 0xc9, 0x9b, + 0xc8, 0x94, 0xfc, 0x4e, + 0xa8, 0xa1, 0xb5, 0x21, 0x9f, 0x2d, 0xa4, 0x93, 0x54, 0x21, 0x95, 0xa6, + 0x5a, 0x62, 0xc8, 0xad, + 0x63, 0x26, 0x19, 0xb6, 0xcb, 0xab, 0xc8, 0xa6, 0x82, 0xaf, 0xf8, 0xeb, + 0xf2, 0x9a, 0xf1, 0x0d, + 0x9d, 0xad, 0x73, 0x7b, 0x17, 0x77, 0x1f, 0xd5, 0xa9, 0xa8, 0x49, 0xee, + 0xbf, 0x6c, 0x23, 0xf8, + 0xa1, 0xce, 0x51, 0xbc, 0xc9, 0x69, 0xe1, 0x24, 0x87, 0x8d, 0xcb, 0xb3, + 0x15, 0xe3, 0x31, 0x2a, + 0x6c, 0xf9, 0x7d, 0xf2, 0xbe, 0xe5, 0x63, 0x32, 0xce, 0x32, 0x86, 0x4c, + 0x10, 0x3f, 0x24, 0x1f, + 0x8b, 0x1f, 0x91, 0x8f, 0x2c, 0x85, 0xe4, 0x13, 0xd9, 0x44, 0xee, 0x56, + 0x5e, 0xc4, 0x05, 0xb6, + 0x95, 0x68, 0x8d, 0x63, 0x35, 0x5a, 0xe9, 0x60, 0x7e, 0xe0, 0x32, 0x34, + 0xdf, 0xf9, 0x3e, 0x1a, + 0xef, 0x18, 0x8b, 0x3e, 0x93, 0xbf, 0x24, 0x5f, 0xc8, 0x9f, 0xe2, 0x4f, + 0xa5, 0x8f, 0xf1, 0x44, + 0xe9, 0x23, 0x32, 0x41, 0x1e, 0x4f, 0x8a, 0x2d, 0x05, 0xb4, 0x40, 0xc9, + 0x27, 0xef, 0x3b, 0x30, + 0xdf, 0xdd, 0xd1, 0x94, 0xcf, 0xb6, 0xa4, 0x31, 0xcf, 0x8f, 0x46, 0x4a, + 0x89, 0xa4, 0xbe, 0x18, + 0x89, 0x9b, 0x28, 0x63, 0xd0, 0x52, 0x75, 0x06, 0x9a, 0xac, 0xce, 0xe1, + 0x8b, 0xd4, 0x34, 0x9c, + 0x6c, 0x4e, 0x22, 0x09, 0x4c, 0xbb, 0x86, 0x26, 0xd2, 0x14, 0x21, 0x9a, + 0xb4, 0x11, 0x9f, 0x21, + 0x92, 0x64, 0xc5, 0xa2, 0x24, 0x22, 0x41, 0x46, 0xd8, 0x20, 0x8d, 0x40, + 0x43, 0xe5, 0xc1, 0xfc, + 0x3b, 0xd2, 0x20, 0xfc, 0xaa, 0xf4, 0x6f, 0xf2, 0x88, 0xf4, 0x28, 0x7e, + 0x44, 0x7e, 0x0c, 0x3f, + 0x69, 0x79, 0x98, 0x3c, 0x6c, 0x7e, 0x8c, 0xbe, 0xf4, 0xe3, 0xa0, 0x3e, + 0x5a, 0x4f, 0x1e, 0xf8, + 0x60, 0xec, 0xf6, 0x85, 0x0f, 0x6e, 0x7d, 0xab, 0xa9, 0x39, 0x95, 0x24, + 0xb1, 0x9e, 0x69, 0x78, + 0xcd, 0x18, 0x21, 0x81, 0x64, 0x6a, 0xba, 0xfc, 0xf7, 0x90, 0x17, 0x67, + 0x0f, 0x7a, 0xa4, 0x76, + 0xfd, 0x56, 0xab, 0x5d, 0xcc, 0xee, 0xff, 0x48, 0x2f, 0x72, 0x4d, 0xf5, + 0x39, 0xd5, 0x71, 0xfe, + 0xa0, 0x07, 0x06, 0xad, 0x98, 0xd8, 0xcf, 0xfb, 0x71, 0x9e, 0x18, 0xd6, + 0x3c, 0xe9, 0xfc, 0x0b, + 0x97, 0x83, 0x7f, 0x17, 0xc7, 0x4f, 0xd4, 0x7a, 0x07, 0xfb, 0x7e, 0x10, + 0xf1, 0x86, 0xef, 0x1c, + 0x56, 0x12, 0x97, 0xa9, 0x43, 0x23, 0x3d, 0x5e, 0xcf, 0x0c, 0x4a, 0xbd, + 0xfa, 0x4d, 0xae, 0x1c, + 0xd6, 0xc8, 0x3a, 0xda, 0x54, 0x3e, 0xf8, 0x26, 0x2c, 0x2e, 0x4c, 0x71, + 0x04, 0xe0, 0x9b, 0x30, + 0xfd, 0x03, 0x36, 0x1f, 0xc5, 0x1a, 0xcf, 0xfc, 0x3f, 0x23, 0xeb, 0x81, + 0xf1, 0xa7, 0xe7, 0xc2, + 0x66, 0xeb, 0xe9, 0xca, 0xb1, 0xfd, 0x2f, 0x74, 0xbe, 0xe4, 0x14, 0x97, + 0x56, 0x7d, 0xa0, 0xf9, + 0xc1, 0xac, 0xdf, 0xbc, 0x30, 0x6b, 0x04, 0x9b, 0x0d, 0x13, 0x90, 0x6f, + 0x62, 0xba, 0x3c, 0x4d, + 0xab, 0x80, 0xda, 0x35, 0xb5, 0xf4, 0x7c, 0xf2, 0x01, 0xff, 0xce, 0xdb, + 0x76, 0x1a, 0x77, 0x14, + 0x54, 0x1a, 0xf6, 0xe4, 0xed, 0xe1, 0xf6, 0xe4, 0x95, 0xa1, 0x3d, 0x79, + 0x95, 0xa8, 0x22, 0x7f, + 0x17, 0xff, 0x6f, 0x39, 0x82, 0x64, 0x01, 0xfe, 0x35, 0x90, 0xdb, 0x0a, + 0x5d, 0xf2, 0x6f, 0xe4, + 0xbb, 0x8c, 0x6e, 0xcb, 0x65, 0x29, 0xf1, 0x34, 0xc6, 0x5c, 0x7b, 0xce, + 0x43, 0x03, 0xda, 0xb2, + 0xb8, 0xb1, 0x31, 0xa5, 0x10, 0xfc, 0x7d, 0x39, 0x0a, 0xd7, 0x33, 0x37, + 0xa0, 0xe9, 0x62, 0x3c, + 0x6d, 0x62, 0x6b, 0x89, 0x6e, 0x2a, 0x7a, 0xcf, 0x30, 0x33, 0xef, 0x68, + 0xee, 0x81, 0xbc, 0x8d, + 0x86, 0x4d, 0x8e, 0x6d, 0x68, 0xcd, 0xe8, 0xfe, 0x7c, 0x8c, 0x89, 0x69, + 0xca, 0xa4, 0x9b, 0xd2, + 0xcd, 0x19, 0x38, 0xd9, 0x92, 0x26, 0x34, 0x94, 0xb3, 0x48, 0xbc, 0x1a, + 0x89, 0x35, 0x1e, 0x82, + 0x2d, 0x16, 0x25, 0x16, 0x26, 0x18, 0x62, 0x94, 0x08, 0x14, 0xe1, 0xab, + 0x1e, 0x65, 0x89, 0xc1, + 0xe0, 0x93, 0xf1, 0x9d, 0xa5, 0x89, 0xe0, 0x1f, 0xee, 0x43, 0x9b, 0x6c, + 0x9b, 0xf0, 0xaa, 0xa2, + 0x17, 0xb9, 0xa6, 0xf9, 0x2d, 0x8c, 0x0d, 0xd9, 0xec, 0x23, 0x73, 0x1a, + 0xcd, 0x84, 0x48, 0x31, + 0xd5, 0xf1, 0x30, 0xfa, 0xca, 0x5a, 0x06, 0x98, 0xb7, 0x01, 0x30, 0x6f, + 0x23, 0xda, 0x64, 0xdd, + 0x0c, 0x58, 0xb9, 0x01, 0xad, 0x57, 0xd7, 0xc1, 0xde, 0x80, 0xd7, 0xca, + 0xdb, 0xc8, 0x62, 0x47, + 0x7b, 0x9c, 0x0e, 0xcf, 0x49, 0x27, 0x19, 0x42, 0xb2, 0x98, 0x24, 0x24, + 0x4b, 0x71, 0xa4, 0x53, + 0xd1, 0x68, 0x43, 0xb9, 0xb4, 0x8e, 0x6c, 0xb2, 0x7d, 0x44, 0x9a, 0xd8, + 0xea, 0x73, 0xed, 0x47, + 0x77, 0xcd, 0xed, 0x56, 0xd4, 0xc6, 0xd8, 0x58, 0xae, 0x8f, 0x13, 0x4d, + 0x11, 0xd5, 0x73, 0xed, + 0x18, 0x3f, 0x2d, 0x92, 0xf5, 0xe8, 0x0b, 0x7e, 0xb9, 0x42, 0x04, 0xfe, + 0x7e, 0xe4, 0x75, 0x69, + 0x15, 0xde, 0x6b, 0xdb, 0x8c, 0x36, 0xd8, 0x37, 0xa0, 0xd5, 0xf6, 0x15, + 0x68, 0x8f, 0x73, 0x03, + 0x92, 0xf3, 0x7b, 0xa3, 0x14, 0x36, 0x47, 0xcf, 0xe4, 0x35, 0xb3, 0xce, + 0xab, 0xfe, 0x57, 0xcf, + 0xd6, 0x1a, 0x37, 0x29, 0x6a, 0xc3, 0xb5, 0xb0, 0x66, 0xf0, 0xa9, 0x24, + 0x4d, 0x60, 0xdd, 0x79, + 0xcd, 0xac, 0x9d, 0x51, 0x13, 0xcb, 0x63, 0xfc, 0xb7, 0xea, 0x2a, 0x7e, + 0xa6, 0x75, 0x3a, 0xff, + 0x95, 0x3a, 0x9d, 0x97, 0xe4, 0x04, 0x8d, 0x53, 0xc2, 0x7a, 0xa4, 0x19, + 0x87, 0x25, 0x45, 0x88, + 0x25, 0x2d, 0x4c, 0x77, 0x10, 0x62, 0xb1, 0x62, 0x62, 0x41, 0xd8, 0x68, + 0xc9, 0xc1, 0x23, 0xc1, + 0xdf, 0x7b, 0x5b, 0x7a, 0x03, 0xbd, 0x24, 0xbd, 0x8c, 0x9f, 0x30, 0x5f, + 0x47, 0x52, 0xe0, 0x33, + 0xb1, 0x7e, 0xc2, 0x58, 0x73, 0x0c, 0x8d, 0xf9, 0xfc, 0x31, 0x57, 0x5c, + 0xc9, 0xb0, 0xca, 0x1d, + 0xa3, 0x3e, 0xfc, 0x79, 0xc6, 0x2b, 0x29, 0xa6, 0x24, 0x1a, 0x0f, 0x1e, + 0x65, 0xb4, 0x10, 0x49, + 0x33, 0xc5, 0xc6, 0xb8, 0x81, 0xb9, 0x2d, 0x79, 0x50, 0x78, 0x96, 0x3c, + 0x3e, 0x6d, 0xd0, 0x53, + 0xb5, 0x63, 0xd8, 0x19, 0x9a, 0x4f, 0xf8, 0xe0, 0x7d, 0xdd, 0xd9, 0x24, + 0x4c, 0xf7, 0xca, 0x9e, + 0x31, 0xe8, 0x31, 0x56, 0xbb, 0xf5, 0xe5, 0xbf, 0xb1, 0xe7, 0x07, 0x8a, + 0x75, 0xb5, 0xbe, 0xe7, + 0xa9, 0x13, 0x9f, 0x31, 0x2f, 0xb5, 0xf7, 0xaf, 0xe1, 0x2b, 0x5a, 0x4e, + 0x70, 0xec, 0xf9, 0xcf, + 0x7c, 0x11, 0xf9, 0x7f, 0xee, 0x38, 0x8a, 0xd4, 0xae, 0x31, 0xb0, 0xdc, + 0xfc, 0xdf, 0x3a, 0x6f, + 0x31, 0x80, 0x2e, 0x7b, 0x0d, 0x1d, 0xfc, 0xe2, 0xec, 0x1a, 0x1a, 0x26, + 0x9e, 0xf9, 0xc1, 0x31, + 0x62, 0x24, 0xaa, 0xd6, 0x7e, 0x36, 0xb9, 0xb8, 0x37, 0x6c, 0xee, 0x65, + 0x9c, 0x1c, 0xa9, 0xcd, + 0x80, 0xf3, 0xa9, 0xe7, 0xc2, 0x7a, 0x79, 0xf3, 0x93, 0x47, 0x32, 0xde, + 0x46, 0x82, 0x1c, 0x78, + 0xae, 0x7c, 0x8d, 0x7c, 0x7f, 0x88, 0xb8, 0x70, 0x85, 0x33, 0x28, 0x03, + 0xf0, 0x4d, 0xb2, 0x6b, + 0x60, 0x61, 0x7a, 0x20, 0xbe, 0x49, 0x2d, 0xad, 0xfa, 0xbf, 0x42, 0xa7, + 0x9b, 0x07, 0xfc, 0xbb, + 0x28, 0x5c, 0x20, 0xfb, 0xed, 0x3b, 0x8d, 0x65, 0x85, 0x7b, 0x73, 0xf7, + 0xe5, 0x97, 0x73, 0x55, + 0x8e, 0x4a, 0x54, 0xe6, 0xd8, 0x8b, 0x9e, 0x51, 0x98, 0xfe, 0x41, 0x5b, + 0x73, 0xa7, 0xbc, 0xae, + 0xb8, 0x6b, 0x51, 0x27, 0xbe, 0x99, 0xdc, 0x80, 0xd4, 0x17, 0x1a, 0x8b, + 0xcd, 0xcc, 0xf5, 0x4c, + 0x19, 0x34, 0xcb, 0x9c, 0x42, 0xd3, 0xcc, 0xf5, 0xe5, 0x2e, 0xa4, 0x77, + 0x51, 0x6f, 0xee, 0xfa, + 0x31, 0x6d, 0x0c, 0x8d, 0x20, 0x56, 0x6b, 0x64, 0xae, 0x47, 0x32, 0x4c, + 0x71, 0x34, 0x5b, 0xea, + 0x80, 0x5b, 0xdb, 0x7a, 0x71, 0x79, 0xce, 0xfd, 0xc6, 0x43, 0xce, 0x2d, + 0x86, 0x6d, 0xce, 0x5d, + 0xdc, 0xae, 0xbc, 0x9d, 0xdc, 0xaa, 0xc2, 0xde, 0x5c, 0xa4, 0x90, 0x29, + 0xa4, 0x99, 0xd2, 0x85, + 0x4c, 0xc6, 0x71, 0x93, 0x5b, 0xd0, 0xeb, 0x6c, 0x1d, 0x68, 0x33, 0xb9, + 0xa1, 0xd0, 0xd8, 0xda, + 0x92, 0xef, 0x94, 0xd7, 0x81, 0x6b, 0xee, 0xa8, 0xcf, 0x67, 0x89, 0x9a, + 0x4f, 0x26, 0xa4, 0xd3, + 0x74, 0x9a, 0x46, 0x53, 0x29, 0xa0, 0x25, 0x89, 0x92, 0x53, 0xf0, 0xb5, + 0xd6, 0x01, 0xe8, 0x45, + 0x75, 0x02, 0x3a, 0xa9, 0x1c, 0xc1, 0xeb, 0xad, 0xdb, 0xd0, 0x36, 0x75, + 0x17, 0xbf, 0xb2, 0xf8, + 0x61, 0x63, 0x9a, 0xd2, 0x08, 0xd5, 0x83, 0x57, 0x4c, 0x37, 0xa7, 0xd2, + 0x34, 0x53, 0x92, 0x90, + 0x6a, 0xbb, 0x0b, 0x4f, 0x82, 0xf8, 0x72, 0x93, 0xb2, 0x15, 0x6f, 0x55, + 0xb7, 0xe2, 0xed, 0x6a, + 0x29, 0xde, 0xa9, 0x6c, 0xc3, 0xdb, 0xa4, 0xed, 0xdc, 0x16, 0x79, 0x33, + 0xb7, 0xc1, 0xba, 0x03, + 0xfd, 0xa0, 0x36, 0x05, 0xff, 0x29, 0x4d, 0x48, 0x33, 0xa7, 0x99, 0x52, + 0xc5, 0x54, 0x13, 0xdc, + 0x92, 0xa6, 0x79, 0x94, 0xdb, 0xa7, 0x6e, 0x16, 0xb6, 0xaa, 0x45, 0xa4, + 0x51, 0x5e, 0xdb, 0x51, + 0x3d, 0x8a, 0xaf, 0x31, 0x36, 0xb2, 0x36, 0xc6, 0x99, 0x96, 0x0c, 0xc0, + 0x8e, 0x24, 0x4d, 0x47, + 0x20, 0xd5, 0x9c, 0x4d, 0x1a, 0x5a, 0xe0, 0x58, 0x98, 0x33, 0xe1, 0xbb, + 0xa6, 0x10, 0xc6, 0xf7, + 0x4b, 0x01, 0x7f, 0x89, 0xf1, 0x99, 0x53, 0x01, 0x39, 0xa2, 0x94, 0xe6, + 0xf8, 0x2e, 0x67, 0x4f, + 0xee, 0x79, 0x79, 0x0d, 0x7f, 0x4e, 0xde, 0x89, 0xd7, 0x28, 0x9b, 0xc8, + 0x0e, 0x75, 0x15, 0x5e, + 0x6d, 0x3d, 0x85, 0xe7, 0x14, 0x0d, 0xe4, 0xeb, 0x39, 0x12, 0x50, 0x9a, + 0x94, 0x88, 0x13, 0xcc, + 0x71, 0xac, 0xb7, 0x59, 0x88, 0x37, 0xc7, 0x0a, 0x09, 0x80, 0x63, 0xb1, + 0x42, 0xa2, 0xa9, 0x31, + 0xe0, 0xdc, 0xb5, 0x45, 0xd7, 0x18, 0x9a, 0xdb, 0xeb, 0x71, 0x19, 0xf0, + 0x5d, 0x12, 0x4d, 0x91, + 0x34, 0x43, 0x6a, 0x4f, 0xee, 0xb3, 0x8e, 0x44, 0x1f, 0x2b, 0xbb, 0xf8, + 0xf5, 0xea, 0x1c, 0xee, + 0x7b, 0x65, 0x26, 0x3f, 0x5d, 0x9e, 0x8a, 0x72, 0xe4, 0x68, 0x12, 0x47, + 0x99, 0x32, 0x03, 0xc3, + 0x3e, 0x4d, 0xff, 0x94, 0x36, 0x36, 0x75, 0xa2, 0x39, 0x16, 0x0b, 0x60, + 0xdf, 0x30, 0xfc, 0x1e, + 0xc4, 0xbb, 0xef, 0x5a, 0xde, 0x41, 0x2f, 0xca, 0x2f, 0xa2, 0x97, 0xe4, + 0x3e, 0xb8, 0x1e, 0xe0, + 0x6d, 0x34, 0x8d, 0xa5, 0xd1, 0x34, 0x9a, 0x44, 0xc1, 0x7e, 0x74, 0x9d, + 0xcb, 0x27, 0x2b, 0x29, + 0xbc, 0x38, 0xa4, 0x3a, 0x96, 0xfd, 0x3a, 0xee, 0x99, 0x18, 0xf6, 0x9a, + 0x70, 0x16, 0x26, 0x99, + 0x9b, 0x91, 0x7a, 0xe6, 0xf6, 0xf8, 0x1e, 0xe1, 0x39, 0xf2, 0x94, 0xf0, + 0x30, 0x19, 0xf8, 0xc5, + 0x2b, 0x2f, 0xd4, 0xee, 0x5f, 0xde, 0x38, 0x67, 0xd0, 0xc0, 0x41, 0xab, + 0xff, 0x7d, 0xd7, 0x0d, + 0x5e, 0xf8, 0x17, 0x31, 0xf9, 0xe5, 0xe7, 0xd8, 0xe3, 0xbc, 0xf1, 0x4b, + 0xe3, 0xf1, 0x7a, 0x34, + 0x5e, 0x66, 0x94, 0x3e, 0x5e, 0x27, 0xc7, 0x97, 0xb7, 0xf1, 0xbd, 0xda, + 0x7d, 0xcf, 0xac, 0xd6, + 0x5c, 0x23, 0x57, 0x08, 0xf7, 0xdd, 0xf3, 0x59, 0xe2, 0x2b, 0x4c, 0x2f, + 0x3a, 0x4e, 0xaa, 0xa9, + 0x83, 0xcf, 0x7c, 0x80, 0xcc, 0xbc, 0xb8, 0x51, 0x57, 0x98, 0xd7, 0xf3, + 0xea, 0x4d, 0xd3, 0xab, + 0xdf, 0xa4, 0x2f, 0x87, 0xc5, 0xe6, 0x7e, 0xd4, 0xe4, 0x9b, 0x64, 0x0d, + 0x4b, 0xc9, 0x8f, 0xcf, + 0x8d, 0xb3, 0xc5, 0x72, 0x31, 0x72, 0x34, 0x8a, 0xb2, 0x44, 0x23, 0x3f, + 0xdc, 0x37, 0xe2, 0x73, + 0xce, 0xe4, 0xb8, 0x6c, 0xbf, 0x7a, 0xc9, 0xe1, 0xd2, 0xef, 0xaf, 0x79, + 0x4c, 0x5c, 0xdc, 0x37, + 0x7d, 0x33, 0x28, 0x63, 0x73, 0x02, 0xf2, 0x4d, 0xac, 0x89, 0x46, 0x76, + 0x4d, 0xc8, 0x1c, 0x1b, + 0x98, 0x6f, 0x72, 0xb9, 0x9a, 0x56, 0xa1, 0x68, 0x52, 0x27, 0x50, 0x8e, + 0x1e, 0xa7, 0x17, 0x85, + 0x8b, 0xa6, 0x33, 0x78, 0xaf, 0xa3, 0xd2, 0x50, 0x99, 0xbf, 0xcf, 0xb8, + 0xd7, 0x51, 0xc5, 0xed, + 0xb6, 0x1f, 0x40, 0xcf, 0xd8, 0x22, 0x50, 0x3b, 0x5b, 0x37, 0xd3, 0x8d, + 0x05, 0x1d, 0xf8, 0x16, + 0xb6, 0x7a, 0x44, 0x53, 0x09, 0xc5, 0x71, 0x52, 0x9a, 0x90, 0x2e, 0x24, + 0x0b, 0xf1, 0x42, 0xa2, + 0xd4, 0x5c, 0xe8, 0x59, 0xdc, 0x87, 0xeb, 0x36, 0xa1, 0xa3, 0xa1, 0x65, + 0x41, 0x03, 0x2e, 0xdb, + 0x52, 0x8f, 0xa4, 0x03, 0xf6, 0xa5, 0x5a, 0xba, 0x90, 0x66, 0xd6, 0x46, + 0x78, 0xb8, 0xba, 0x9d, + 0x3b, 0x6b, 0x2b, 0xe3, 0xb6, 0xe4, 0xef, 0x30, 0x6e, 0xcf, 0xdb, 0x6e, + 0x2c, 0x77, 0x96, 0x73, + 0x6b, 0x9d, 0x5d, 0x79, 0xd6, 0xff, 0x9c, 0x62, 0x4a, 0xa1, 0x09, 0x62, + 0x06, 0xed, 0x6c, 0xeb, + 0x86, 0x3a, 0xda, 0x9b, 0xe0, 0x86, 0xb6, 0x96, 0xb8, 0x93, 0xb3, 0x8b, + 0xa6, 0x31, 0x93, 0x65, + 0x49, 0x63, 0xd9, 0x38, 0x9a, 0x24, 0xb0, 0xc7, 0x25, 0xc1, 0xce, 0xa0, + 0xb1, 0x62, 0x2a, 0xe9, + 0xac, 0x74, 0x46, 0x9d, 0xad, 0x79, 0xe8, 0x88, 0xe5, 0x3c, 0xae, 0x04, + 0xdf, 0x6e, 0x97, 0x75, + 0x37, 0xda, 0xad, 0xee, 0xe6, 0xd7, 0x17, 0x0d, 0x30, 0xc6, 0x4b, 0xd9, + 0x28, 0x93, 0xcd, 0xe4, + 0x14, 0x34, 0x7d, 0x3d, 0x52, 0xdf, 0xda, 0x86, 0x14, 0xa9, 0x3f, 0x91, + 0x9d, 0xca, 0x4e, 0x52, + 0xae, 0x56, 0x90, 0xdd, 0xca, 0x5e, 0xb2, 0x4f, 0x2a, 0x27, 0x65, 0x96, + 0x4a, 0xbe, 0x4c, 0xda, + 0xc5, 0x97, 0x59, 0xf7, 0xa2, 0x4f, 0xa5, 0x0c, 0x88, 0xf1, 0x32, 0xa8, + 0x67, 0xf6, 0x59, 0xaa, + 0xb9, 0x1e, 0xce, 0x76, 0xbe, 0xc5, 0x1d, 0x51, 0x76, 0x09, 0x3b, 0x6c, + 0x05, 0xb8, 0xdd, 0x98, + 0x9b, 0x46, 0x75, 0xca, 0x6f, 0x67, 0x7c, 0xc0, 0xd4, 0x82, 0x26, 0x43, + 0x7c, 0x9c, 0x4c, 0x92, + 0x69, 0x92, 0x98, 0x49, 0x1a, 0x58, 0xea, 0x93, 0x2c, 0x29, 0x1d, 0xa7, + 0x9a, 0x52, 0xb0, 0x16, + 0x27, 0x32, 0xbe, 0x33, 0x4d, 0xa2, 0xa9, 0x28, 0x19, 0xce, 0x93, 0x0c, + 0xd2, 0xa5, 0xf0, 0x61, + 0x54, 0x54, 0xf0, 0x3d, 0x77, 0x46, 0xae, 0x42, 0x9b, 0xd5, 0xed, 0xb8, + 0xcc, 0xb6, 0x99, 0x2c, + 0xc8, 0x5b, 0x8a, 0x97, 0x17, 0x71, 0x28, 0xdd, 0x19, 0x85, 0xd2, 0xe4, + 0x0c, 0x78, 0x5e, 0x22, + 0x61, 0x1c, 0x8f, 0x24, 0xad, 0xc6, 0x10, 0xcf, 0xf4, 0xb7, 0x48, 0x23, + 0x7b, 0x27, 0x7c, 0x43, + 0xf1, 0xf5, 0x86, 0xf6, 0x85, 0x4d, 0x0d, 0xf5, 0xb4, 0xc7, 0x44, 0xd1, + 0x74, 0xcb, 0x75, 0xe4, + 0x0e, 0xa5, 0x2f, 0x7e, 0x5f, 0xae, 0x40, 0x65, 0xca, 0x72, 0x56, 0x0f, + 0xe2, 0xe6, 0xc9, 0xb3, + 0xd1, 0xb7, 0xd2, 0x77, 0x10, 0xdb, 0x32, 0x34, 0x4b, 0xa0, 0x89, 0xf0, + 0x9d, 0x5d, 0xdc, 0x97, + 0x18, 0x5a, 0xdf, 0xdc, 0x86, 0x0e, 0x16, 0x39, 0x7e, 0x30, 0xe0, 0xde, + 0x9b, 0x96, 0x37, 0xf1, + 0x2b, 0x96, 0x27, 0xf0, 0x23, 0xca, 0xbd, 0xf8, 0x1a, 0x11, 0xec, 0xb0, + 0xe8, 0x9a, 0x21, 0xed, + 0x0a, 0xd2, 0xde, 0x03, 0xd4, 0x25, 0xb1, 0x05, 0x9d, 0x5d, 0x7d, 0xca, + 0x5e, 0x79, 0x3a, 0x2d, + 0x96, 0x9d, 0xd5, 0xe2, 0x91, 0x58, 0x1a, 0x03, 0xfe, 0x61, 0x43, 0xd2, + 0xd6, 0x74, 0x1d, 0xb9, + 0x49, 0x78, 0x1c, 0xb0, 0x6f, 0x20, 0x79, 0xc0, 0x3c, 0x80, 0xdc, 0x3f, + 0xe1, 0xd9, 0x41, 0xb5, + 0x6b, 0xb8, 0xe7, 0xbf, 0x61, 0x3e, 0xe1, 0x2b, 0x3d, 0x3b, 0xd3, 0xf4, + 0x4b, 0xe7, 0xe8, 0xc4, + 0x07, 0x5f, 0x61, 0x8f, 0xf3, 0xd6, 0x35, 0xa8, 0x9a, 0x31, 0xe8, 0xf1, + 0x41, 0xeb, 0x1f, 0xbb, + 0xfd, 0xb5, 0x6d, 0x35, 0xeb, 0xc0, 0xa5, 0x1f, 0x96, 0xbc, 0xee, 0xaf, + 0xef, 0xd9, 0x9b, 0x27, + 0x77, 0x7e, 0xea, 0xd0, 0x67, 0xd9, 0x7d, 0x2d, 0x8b, 0x93, 0x87, 0x26, + 0x3b, 0x53, 0x46, 0x31, + 0x2d, 0xfc, 0x14, 0x2f, 0x1d, 0xfc, 0x18, 0x7b, 0x7a, 0x2e, 0xe3, 0x3f, + 0x85, 0x25, 0xaf, 0x17, + 0xca, 0xbc, 0x45, 0x47, 0x48, 0xf3, 0x16, 0x6b, 0xcc, 0x0f, 0xd6, 0xf4, + 0xef, 0xdd, 0xda, 0xcf, + 0x4c, 0x07, 0x9f, 0xfd, 0x9e, 0xcd, 0xbd, 0xf4, 0xcf, 0x7d, 0x73, 0xf7, + 0x25, 0x3b, 0x52, 0x47, + 0xb1, 0x9c, 0x5a, 0xa0, 0xfc, 0x1a, 0xcb, 0x35, 0xc6, 0x84, 0xa0, 0xf3, + 0xf5, 0xb7, 0x1e, 0x13, + 0xf8, 0x1e, 0xda, 0x7b, 0x2a, 0x31, 0x46, 0x7f, 0x7a, 0x2e, 0x1a, 0xae, + 0xdb, 0x92, 0x73, 0x59, + 0x8f, 0x4c, 0x10, 0xbe, 0x89, 0x8b, 0xfb, 0x66, 0x8f, 0xba, 0x6c, 0xed, + 0x9a, 0x96, 0xa6, 0xef, + 0x5d, 0x67, 0x99, 0xf9, 0x0c, 0xae, 0xb2, 0x57, 0x1a, 0x2a, 0x1c, 0xfb, + 0xb9, 0x72, 0xc7, 0x21, + 0xee, 0xf5, 0xa2, 0x96, 0x86, 0x3e, 0xa3, 0x7b, 0xf1, 0xd7, 0x17, 0x75, + 0x36, 0xb4, 0x52, 0x5a, + 0xf0, 0x4d, 0xcd, 0x10, 0x0b, 0x89, 0x0d, 0x68, 0x33, 0x73, 0x13, 0xd2, + 0xd4, 0xd2, 0x9e, 0xdc, + 0xee, 0xb8, 0x8f, 0xdc, 0x33, 0xb6, 0x37, 0xd7, 0x61, 0x7c, 0x0b, 0x43, + 0xd3, 0xbc, 0x46, 0xa8, + 0xa1, 0x92, 0x45, 0xd2, 0xd4, 0x46, 0xa4, 0x89, 0x92, 0x4e, 0xee, 0x94, + 0xa6, 0xe1, 0x3f, 0xc5, + 0x93, 0x68, 0x37, 0x60, 0xde, 0xee, 0xfc, 0x32, 0x88, 0xad, 0x77, 0x19, + 0x2a, 0xe1, 0x75, 0xb7, + 0xd9, 0x7a, 0xe0, 0x18, 0x9a, 0x05, 0x18, 0xd2, 0x88, 0x74, 0x51, 0x6f, + 0x27, 0xbd, 0x0b, 0xae, + 0xe3, 0x5b, 0x39, 0xda, 0xf0, 0x9d, 0xf2, 0x6f, 0xe0, 0x3b, 0x17, 0x34, + 0x27, 0x59, 0x32, 0xa0, + 0x91, 0x29, 0x59, 0x88, 0x13, 0xc1, 0xb2, 0x45, 0xa6, 0xa3, 0x90, 0x46, + 0xd2, 0x2d, 0xe9, 0xa4, + 0x99, 0xdc, 0x08, 0x77, 0x90, 0x86, 0xa1, 0x25, 0x96, 0x5f, 0xd0, 0x7e, + 0xc0, 0xbc, 0x3d, 0xea, + 0x3e, 0xb4, 0x4f, 0xad, 0x40, 0xe5, 0xf0, 0xf3, 0xbe, 0x82, 0x47, 0x8c, + 0x71, 0x0a, 0x9b, 0xe1, + 0x91, 0x84, 0xe3, 0xa5, 0x78, 0xd8, 0xb1, 0xb8, 0x99, 0xb5, 0x01, 0x16, + 0xa4, 0x0b, 0xb8, 0x4c, + 0x29, 0xc7, 0x65, 0x52, 0x25, 0xde, 0x2d, 0x95, 0xe1, 0xdd, 0xe2, 0x5e, + 0xbc, 0xd7, 0x52, 0x89, + 0xf7, 0x4a, 0xe5, 0xf0, 0xdc, 0x3d, 0xc4, 0xac, 0x64, 0x92, 0x2c, 0xb1, + 0x3e, 0x49, 0x17, 0x01, + 0xd9, 0xc4, 0x24, 0x78, 0x9f, 0x06, 0x28, 0xdd, 0xfe, 0x0a, 0x77, 0x42, + 0x2e, 0xa3, 0xbb, 0xec, + 0x1f, 0xa1, 0x9e, 0xe3, 0x6e, 0x34, 0x34, 0xb5, 0x36, 0xe3, 0x06, 0x9a, + 0x5a, 0x81, 0xff, 0x99, + 0x4a, 0x33, 0xcc, 0x59, 0x02, 0xd3, 0x12, 0x4d, 0x93, 0xe2, 0x69, 0x8c, + 0xc8, 0xbc, 0xdf, 0x28, + 0xb7, 0x46, 0x59, 0x0a, 0x4d, 0x24, 0x69, 0x34, 0x03, 0x30, 0xba, 0xa9, + 0xed, 0x46, 0xfc, 0xa8, + 0x6d, 0x12, 0x3a, 0x28, 0x1d, 0x45, 0x5b, 0x2d, 0xdb, 0xc9, 0x5e, 0xf5, + 0x08, 0x3d, 0xec, 0x5c, + 0x43, 0xbe, 0x2f, 0x90, 0x51, 0xb7, 0xa2, 0x68, 0x3e, 0x5d, 0x6a, 0x88, + 0x33, 0xcc, 0x29, 0x1a, + 0xf6, 0xc5, 0x09, 0xd1, 0xe0, 0x3b, 0xb2, 0xd8, 0x35, 0x1d, 0x3e, 0x47, + 0x2b, 0x72, 0x5d, 0xf1, + 0xcd, 0xc6, 0xeb, 0xc6, 0x35, 0x33, 0x34, 0xb0, 0x03, 0xb6, 0x5a, 0x92, + 0x49, 0x9a, 0xd8, 0x9c, + 0x34, 0x95, 0x9f, 0xc0, 0xc5, 0xf2, 0x62, 0x5c, 0xa1, 0xac, 0xe3, 0x57, + 0xaa, 0xab, 0xb8, 0x25, + 0xea, 0x22, 0x6e, 0x81, 0x3c, 0x13, 0x4d, 0x97, 0xbe, 0x27, 0x9c, 0x18, + 0x2d, 0xc4, 0x09, 0xc9, + 0xf0, 0x39, 0x92, 0xe1, 0xf5, 0x98, 0x56, 0x02, 0xcb, 0xd7, 0xb6, 0xa4, + 0xaf, 0x88, 0x43, 0xf9, + 0x37, 0xc4, 0x37, 0xd1, 0x1b, 0xe2, 0x6b, 0xe4, 0x71, 0xe5, 0x0e, 0xdc, + 0x63, 0x52, 0xcf, 0x57, + 0xee, 0x5b, 0xf9, 0x62, 0x3f, 0x0f, 0xae, 0xdc, 0x5c, 0x1c, 0xfd, 0x6e, + 0xf4, 0x47, 0xf7, 0xbf, + 0x5e, 0x1b, 0xcb, 0x34, 0x9d, 0xd1, 0x05, 0x37, 0xfc, 0x2b, 0x46, 0x48, + 0x01, 0xbf, 0xaf, 0x33, + 0xb9, 0x45, 0xf8, 0x17, 0x79, 0x82, 0x3e, 0x42, 0xfe, 0x65, 0x02, 0xec, + 0x13, 0xee, 0xc5, 0x77, + 0x17, 0x3d, 0x3a, 0x98, 0x3d, 0x67, 0xca, 0xd8, 0x8b, 0x97, 0x74, 0xaa, + 0x26, 0x19, 0x34, 0x9f, + 0x30, 0xc3, 0xe2, 0xe5, 0x3f, 0x8c, 0xb9, 0xe5, 0x9d, 0x3a, 0x3d, 0xd0, + 0x53, 0x07, 0x69, 0xf8, + 0xd5, 0x68, 0xfa, 0xff, 0x3d, 0xe1, 0x89, 0xb9, 0xfd, 0xf6, 0x3d, 0xbb, + 0xf5, 0xb0, 0xea, 0xf8, + 0x8f, 0x1b, 0x9e, 0xb8, 0x8d, 0xe5, 0xbe, 0x62, 0x15, 0x57, 0x3f, 0x1e, + 0x9b, 0xa3, 0x9e, 0x5e, + 0x98, 0x3e, 0x22, 0xbd, 0x28, 0x7d, 0x04, 0xab, 0x3d, 0x64, 0xe4, 0x25, + 0xe5, 0xf8, 0xcd, 0xaf, + 0x85, 0x9a, 0xd7, 0xd3, 0x33, 0x6f, 0x51, 0x97, 0x7e, 0x93, 0xbf, 0x1c, + 0x56, 0x24, 0x89, 0x32, + 0x47, 0xe1, 0x68, 0x39, 0x06, 0xc5, 0xda, 0xe3, 0x38, 0x56, 0xef, 0xf0, + 0x70, 0xdf, 0xa2, 0xcd, + 0x41, 0x75, 0xbe, 0x34, 0x2c, 0xba, 0xa4, 0x83, 0x5f, 0xb3, 0x47, 0xbb, + 0xba, 0x6e, 0xa2, 0xe1, + 0x42, 0x4c, 0x6e, 0x64, 0x90, 0xb9, 0xf2, 0xba, 0xb5, 0xea, 0x75, 0xcd, + 0xa0, 0xd4, 0xa1, 0x55, + 0x5f, 0xe7, 0x98, 0xf8, 0xd6, 0x73, 0xd1, 0xc7, 0x37, 0xd1, 0xcb, 0x71, + 0x89, 0x45, 0x01, 0xb4, + 0x6b, 0x48, 0x1f, 0xe1, 0x3b, 0xad, 0x96, 0xfb, 0xa7, 0xe9, 0x0c, 0x3a, + 0x60, 0xab, 0xe2, 0x8f, + 0xda, 0xc7, 0xf3, 0xb7, 0x03, 0x3e, 0xdd, 0xee, 0xe8, 0x45, 0x6e, 0x55, + 0x7a, 0xe3, 0x3b, 0xa4, + 0xdb, 0xc9, 0x1d, 0x62, 0x5f, 0x7a, 0xbb, 0x34, 0x40, 0xf8, 0xb7, 0xfc, + 0x30, 0x7a, 0x54, 0x19, + 0x80, 0xee, 0x73, 0xbc, 0x88, 0x5e, 0xb5, 0xdf, 0x8e, 0x1f, 0x28, 0xb8, + 0x8f, 0xbb, 0xa3, 0xf0, + 0x4e, 0xee, 0xb6, 0xbc, 0x1e, 0xb8, 0x8b, 0xb5, 0x2b, 0x7e, 0xca, 0x32, + 0x9a, 0x9c, 0x12, 0x2f, + 0x92, 0xfd, 0x8e, 0x03, 0xdc, 0x7e, 0x47, 0x95, 0xf1, 0x80, 0xe3, 0x80, + 0xe1, 0x80, 0x73, 0x9f, + 0xe1, 0x80, 0x7d, 0x2f, 0x47, 0x94, 0x96, 0xb8, 0xa9, 0xd8, 0x06, 0xb5, + 0x95, 0x3b, 0xe1, 0xee, + 0x6a, 0x77, 0x7c, 0x9d, 0xbd, 0x2b, 0xbe, 0x55, 0xee, 0x81, 0x7b, 0x58, + 0x6f, 0xc5, 0xb7, 0xe6, + 0xdf, 0xcc, 0xdf, 0xa4, 0x5c, 0x8f, 0xda, 0xc8, 0x6d, 0xc9, 0x9d, 0xf6, + 0x87, 0xf1, 0xbd, 0xb6, + 0xde, 0xa8, 0xab, 0xd4, 0x0e, 0x37, 0x92, 0x52, 0xf0, 0x0d, 0xca, 0x50, + 0xf4, 0x95, 0x74, 0x0e, + 0x9d, 0x92, 0x77, 0x70, 0xe5, 0x4a, 0x39, 0x5f, 0xae, 0xec, 0xe1, 0x2b, + 0x95, 0x32, 0x6e, 0x87, + 0x7c, 0x8c, 0x1f, 0x6d, 0x6d, 0x84, 0x18, 0x17, 0xb7, 0x91, 0xb5, 0x09, + 0xdf, 0xd9, 0x7a, 0x3b, + 0xba, 0xd9, 0xd6, 0x91, 0x6f, 0xa6, 0x44, 0x22, 0xc0, 0x3f, 0xb4, 0x4b, + 0xde, 0xc5, 0xef, 0x00, + 0xbc, 0x2b, 0xb7, 0xec, 0x44, 0x3b, 0xcc, 0xa5, 0x7c, 0xa5, 0xa5, 0x02, + 0x55, 0x48, 0xbb, 0xf0, + 0x3e, 0x79, 0x1b, 0xfd, 0x97, 0x1c, 0x45, 0x12, 0xe5, 0x34, 0x94, 0x29, + 0x37, 0xc6, 0xad, 0xe4, + 0x86, 0x28, 0xde, 0x12, 0x05, 0x3e, 0xf7, 0x8b, 0xe8, 0x84, 0x54, 0x85, + 0x37, 0xaa, 0xfd, 0x70, + 0x8c, 0x3d, 0x99, 0x8f, 0x82, 0x6b, 0x71, 0xa2, 0x25, 0x0e, 0x45, 0xca, + 0x91, 0x38, 0xde, 0x9a, + 0x81, 0x32, 0xd5, 0x06, 0xa4, 0x99, 0xd4, 0x81, 0x76, 0x14, 0xd3, 0x00, + 0x9f, 0x3b, 0xd1, 0x01, + 0x96, 0x01, 0xf4, 0x7a, 0x4b, 0x03, 0x9a, 0x62, 0x8e, 0xa1, 0x11, 0x4a, + 0x5b, 0xf2, 0xbc, 0x7d, + 0x1c, 0xda, 0x2c, 0x9e, 0x46, 0xdb, 0xa4, 0x2d, 0x68, 0xbb, 0xb2, 0x8d, + 0x2e, 0xb7, 0x8f, 0x26, + 0x0f, 0xa9, 0x37, 0xe0, 0xf6, 0xf0, 0xfc, 0x08, 0xc0, 0x65, 0xb8, 0x7e, + 0xe3, 0x24, 0xc0, 0xb6, + 0x0c, 0x31, 0x9b, 0x36, 0x92, 0x5a, 0xa2, 0xe6, 0x72, 0x2b, 0xd4, 0x42, + 0x6a, 0x80, 0x9a, 0xa9, + 0xdd, 0x85, 0x07, 0xf2, 0xba, 0xf3, 0x1d, 0x1d, 0x37, 0xa3, 0xeb, 0xa5, + 0x06, 0x42, 0xa2, 0x18, + 0x0b, 0x78, 0xdc, 0x09, 0x19, 0xe5, 0x39, 0x7c, 0x95, 0xb2, 0x13, 0xad, + 0x52, 0x57, 0xf3, 0xcb, + 0xd4, 0xa5, 0xdc, 0x22, 0x65, 0x3e, 0x37, 0x47, 0xfa, 0x0e, 0x4d, 0x13, + 0x27, 0xe1, 0x07, 0x4d, + 0x91, 0x42, 0x2c, 0x8b, 0xbb, 0xc5, 0x14, 0xcc, 0xf4, 0x0d, 0x32, 0xcc, + 0x31, 0x24, 0xdd, 0xdc, + 0x98, 0x3e, 0x6b, 0x7e, 0x07, 0xbf, 0x6c, 0x7b, 0x6a, 0xd4, 0x83, 0x5f, + 0x3f, 0xfc, 0xcc, 0xd3, + 0xee, 0xba, 0x43, 0x8d, 0xbd, 0xea, 0xbe, 0xbe, 0xe9, 0x53, 0x5e, 0x7a, + 0xbe, 0x76, 0x8c, 0xaa, + 0xf5, 0xe3, 0xad, 0xbc, 0xbb, 0x5f, 0x22, 0xc4, 0xf8, 0xd7, 0x0a, 0xfd, + 0xc8, 0x23, 0xf4, 0x41, + 0x72, 0xbf, 0xe9, 0x3e, 0x7c, 0x1f, 0x60, 0xdf, 0x3d, 0x42, 0x5f, 0xdc, + 0x47, 0xbd, 0x77, 0x54, + 0x9d, 0xb8, 0xf4, 0xc3, 0x31, 0x1a, 0x8e, 0xb6, 0x76, 0x44, 0x5c, 0xca, + 0xb3, 0x3b, 0x5b, 0x0f, + 0x67, 0xf7, 0x8d, 0xf9, 0xf0, 0xe2, 0xeb, 0xb5, 0x7b, 0xa0, 0x9b, 0xe6, + 0x25, 0x0d, 0x7b, 0x64, + 0x9d, 0x8f, 0xcf, 0xe4, 0xce, 0x0d, 0xda, 0x67, 0xcd, 0x78, 0xb4, 0xd4, + 0x71, 0x7e, 0x44, 0xed, + 0xf8, 0x58, 0xeb, 0xb7, 0xfe, 0xa1, 0xf5, 0x40, 0x6f, 0x8e, 0x46, 0x75, + 0xdd, 0xb5, 0x80, 0xe9, + 0xe0, 0x67, 0x6a, 0x7d, 0x67, 0xac, 0xe7, 0xc2, 0x93, 0x5f, 0xab, 0x33, + 0x67, 0xf2, 0x0a, 0x72, + 0x58, 0x7e, 0xe6, 0xaa, 0xe9, 0xe0, 0x79, 0xe9, 0xc9, 0x61, 0x01, 0x16, + 0xaa, 0x71, 0xbc, 0x36, + 0xf7, 0xed, 0x32, 0xb8, 0x6f, 0x3e, 0xf5, 0x5c, 0xc0, 0x9f, 0x62, 0xdf, + 0x35, 0xb3, 0x28, 0x75, + 0x84, 0xdf, 0xf9, 0xc1, 0x5e, 0x9a, 0x56, 0x57, 0x92, 0xeb, 0xbc, 0xbc, + 0x63, 0x92, 0xe9, 0x1b, + 0x8b, 0x6a, 0xf3, 0x4d, 0xc6, 0x05, 0xe3, 0x9b, 0x44, 0x84, 0x4d, 0xa7, + 0xfb, 0x49, 0x61, 0xa7, + 0x76, 0xae, 0xfd, 0x69, 0x3e, 0x8d, 0x8f, 0x2a, 0x2b, 0xf0, 0x6a, 0x79, + 0x0b, 0xde, 0x28, 0x6f, + 0x21, 0x9b, 0xa4, 0xad, 0x78, 0x8b, 0xba, 0x89, 0x6c, 0x54, 0x37, 0x93, + 0x2d, 0xd6, 0x5d, 0xa4, + 0x52, 0xd9, 0x8b, 0xf7, 0x48, 0xdb, 0xf1, 0x6a, 0x75, 0x2b, 0xf8, 0x55, + 0x5b, 0xe8, 0x2e, 0xeb, + 0x36, 0x7e, 0x93, 0x63, 0xbd, 0x71, 0xb5, 0x6d, 0x1d, 0x5a, 0xa7, 0xae, + 0x44, 0xa7, 0x01, 0xfb, + 0x8e, 0xdb, 0xf7, 0x03, 0x8e, 0x1e, 0xe6, 0x8e, 0xda, 0x8e, 0x73, 0x87, + 0xad, 0x87, 0x0c, 0xc7, + 0x6c, 0x47, 0x0c, 0x07, 0x01, 0xff, 0x66, 0xab, 0x73, 0xd0, 0x62, 0xb5, + 0x04, 0x2d, 0x84, 0x3d, + 0x47, 0x9d, 0x0d, 0x7b, 0x1e, 0x5e, 0x28, 0x2f, 0x21, 0x4b, 0xd4, 0x05, + 0x64, 0x81, 0x6d, 0xa9, + 0x71, 0xb1, 0xb5, 0xc4, 0xf8, 0x83, 0x75, 0x0e, 0xb7, 0x26, 0x6f, 0x1d, + 0x5a, 0xe9, 0x58, 0xc2, + 0x97, 0x28, 0x73, 0xd1, 0x6c, 0x79, 0x2a, 0xfa, 0x41, 0xfa, 0x0d, 0xff, + 0xc7, 0xb2, 0x87, 0xdf, + 0xa5, 0x94, 0x73, 0x95, 0xf2, 0x1e, 0xd8, 0x95, 0x5c, 0x19, 0xe0, 0xdf, + 0x2e, 0x79, 0x3f, 0x3f, + 0x55, 0x9e, 0x80, 0xbf, 0x96, 0x3f, 0x33, 0x7e, 0x29, 0x7f, 0xcf, 0x95, + 0xc8, 0xcb, 0xb8, 0xc5, + 0xf2, 0x2c, 0x6e, 0xaa, 0x32, 0x89, 0xff, 0x51, 0x39, 0x80, 0xca, 0xa4, + 0x9d, 0x7c, 0xa9, 0xb4, + 0x0b, 0xed, 0x06, 0xdc, 0x2b, 0x17, 0xcb, 0x50, 0xa9, 0xa5, 0x8c, 0xdf, + 0x25, 0xed, 0x40, 0xe5, + 0xd2, 0x36, 0xfc, 0x99, 0xe5, 0x63, 0xfc, 0x89, 0xe5, 0x73, 0xf4, 0x95, + 0xe5, 0x1b, 0x34, 0xcd, + 0xf2, 0x35, 0xfa, 0x44, 0x9a, 0xc0, 0x7f, 0x20, 0xcd, 0xe3, 0x77, 0x4b, + 0x7b, 0xf8, 0x1f, 0x25, + 0x01, 0x99, 0xc5, 0x02, 0x24, 0x58, 0x46, 0x20, 0xbb, 0x68, 0xe2, 0x78, + 0x89, 0xe3, 0x78, 0x85, + 0x70, 0x66, 0xd9, 0x86, 0x8b, 0xe4, 0x2f, 0xf0, 0x38, 0x79, 0x24, 0x1e, + 0x26, 0x7f, 0x82, 0x57, + 0xc9, 0x8b, 0xc9, 0x44, 0xd9, 0x8c, 0x47, 0xc9, 0xef, 0xe1, 0x41, 0x92, + 0x8c, 0x37, 0xcb, 0x67, + 0x50, 0x95, 0x6d, 0x3b, 0xbf, 0x59, 0xdd, 0xc4, 0xef, 0x92, 0xd7, 0xe0, + 0x31, 0xf2, 0x9b, 0xe4, + 0x11, 0x79, 0x00, 0x7a, 0xd2, 0xf2, 0x3a, 0xff, 0xaa, 0xf9, 0x35, 0x7e, + 0x90, 0xf4, 0x1a, 0xff, + 0xba, 0xfc, 0x26, 0x3f, 0x54, 0xe1, 0xb1, 0x6c, 0x95, 0x79, 0x62, 0xe5, + 0xf8, 0x37, 0xac, 0xcf, + 0xf0, 0x2f, 0xa9, 0x26, 0x22, 0xc9, 0x6f, 0xe2, 0x51, 0x16, 0x07, 0x21, + 0x96, 0x17, 0xc9, 0xd3, + 0x96, 0x27, 0xf1, 0x0b, 0xf2, 0xb7, 0xdc, 0x69, 0x4b, 0x39, 0x7c, 0x8f, + 0x35, 0xfc, 0x3a, 0x75, + 0x39, 0xb7, 0x58, 0x59, 0x68, 0x9c, 0x07, 0xdf, 0x6d, 0x06, 0x7c, 0xde, + 0xef, 0xc4, 0x7c, 0x7c, + 0x93, 0xb9, 0x0b, 0xbe, 0x51, 0xbc, 0x11, 0x75, 0x13, 0x7b, 0xe2, 0x1b, + 0x4c, 0xdd, 0x70, 0x1f, + 0x53, 0x57, 0xd2, 0x2a, 0xef, 0xb6, 0x61, 0xaf, 0xce, 0x7e, 0xfd, 0x91, + 0xd7, 0x6a, 0xeb, 0xaf, + 0xb8, 0x79, 0x15, 0x63, 0x56, 0x0f, 0xba, 0x8b, 0xfd, 0xfc, 0xd4, 0xe2, + 0xc7, 0xb5, 0x98, 0x73, + 0xa3, 0xe3, 0x62, 0x35, 0xd6, 0xb8, 0x78, 0xba, 0xcf, 0xf5, 0x6a, 0x2c, + 0xdc, 0x4c, 0x06, 0xd0, + 0x01, 0xa4, 0xbf, 0xa9, 0x3f, 0xee, 0x2f, 0xdc, 0x8d, 0xfb, 0x31, 0xec, + 0xa3, 0x77, 0xe0, 0xdb, + 0x69, 0x6f, 0x5c, 0xa7, 0xb7, 0xb9, 0xb0, 0x64, 0x08, 0xbb, 0xef, 0x56, + 0xaf, 0xde, 0xe4, 0x48, + 0x4b, 0x92, 0x56, 0xab, 0x18, 0x3a, 0xf9, 0xe2, 0xf3, 0xb5, 0x7b, 0xa0, + 0xbb, 0x15, 0x47, 0xbc, + 0x1b, 0x31, 0xb6, 0xe7, 0xdb, 0xb5, 0x79, 0x6e, 0x01, 0xf5, 0xb0, 0xf2, + 0x57, 0x0c, 0xd3, 0xf8, + 0x73, 0x5f, 0x44, 0xbc, 0xe0, 0x3b, 0xa7, 0x14, 0x8d, 0x52, 0x0a, 0x33, + 0x47, 0xb2, 0xb9, 0x70, + 0xcc, 0xfe, 0xb3, 0xc6, 0xfa, 0xd0, 0x73, 0x61, 0x7d, 0xc9, 0x12, 0xe3, + 0x79, 0x65, 0x04, 0xcd, + 0x27, 0x85, 0xa2, 0x69, 0x15, 0xb4, 0x37, 0x4d, 0xd2, 0x97, 0xc3, 0x8a, + 0x54, 0xe2, 0xf9, 0xd0, + 0xb8, 0x6f, 0xbe, 0xf3, 0x7a, 0x97, 0x74, 0xf0, 0xfd, 0xe8, 0x25, 0xd7, + 0xd6, 0xc1, 0xb7, 0xe8, + 0xcc, 0xeb, 0x39, 0x02, 0xe7, 0xf5, 0x42, 0xec, 0xd7, 0xe3, 0xbc, 0x67, + 0x50, 0xfa, 0x8f, 0xa5, + 0xe1, 0x3d, 0x0b, 0x92, 0x46, 0xfa, 0xd5, 0x73, 0x71, 0xd7, 0x4d, 0x74, + 0xe5, 0x34, 0x74, 0x69, + 0x52, 0xb7, 0xa0, 0xf9, 0xc2, 0x39, 0x13, 0x3b, 0xe7, 0x2e, 0x98, 0x7e, + 0xc6, 0x3f, 0x5b, 0xce, + 0x71, 0xbf, 0x9a, 0x7f, 0xe3, 0x7e, 0x16, 0x2f, 0x70, 0xbf, 0x99, 0x7f, + 0x25, 0xbf, 0x9b, 0x7e, + 0xc3, 0x17, 0xc4, 0x73, 0xe8, 0x67, 0xf3, 0x1f, 0xf8, 0x82, 0xf9, 0x02, + 0x81, 0x9f, 0xc9, 0x69, + 0xcb, 0x6f, 0xf8, 0xac, 0x74, 0x8e, 0xff, 0x59, 0x3a, 0x43, 0x4e, 0x49, + 0xe7, 0xe1, 0x31, 0xbf, + 0x93, 0xa3, 0xd6, 0xc3, 0xe8, 0xb8, 0x7a, 0x18, 0x1d, 0xb6, 0x1e, 0xe3, + 0x4f, 0x2a, 0x27, 0x8d, + 0x47, 0x95, 0x23, 0xc6, 0xe3, 0xea, 0x21, 0xee, 0xa0, 0xfd, 0x08, 0x77, + 0xd6, 0xf2, 0x2b, 0x7f, + 0xc1, 0xfc, 0x0b, 0xfa, 0xd9, 0xf2, 0x33, 0x3a, 0x6f, 0x39, 0x87, 0x4e, + 0xcb, 0xda, 0x73, 0xf9, + 0xb3, 0xf2, 0x19, 0xee, 0x94, 0x74, 0xda, 0x70, 0x52, 0x3d, 0xce, 0x9d, + 0x93, 0x4e, 0xa2, 0x83, + 0x72, 0x15, 0x7f, 0x58, 0x39, 0xc9, 0x9f, 0x96, 0x7e, 0xe6, 0xcf, 0x41, + 0xcc, 0x7b, 0x4e, 0xae, + 0x44, 0x65, 0x6a, 0x25, 0xb7, 0x47, 0xa9, 0x34, 0xee, 0x95, 0xf7, 0xc0, + 0xde, 0x6b, 0xdc, 0x03, + 0xb7, 0xe0, 0x03, 0xc2, 0x63, 0xce, 0xe1, 0xb3, 0xca, 0x09, 0xee, 0xa8, + 0x7c, 0xd8, 0x78, 0x18, + 0xde, 0xeb, 0xb0, 0x72, 0xc0, 0x78, 0x48, 0xfe, 0x99, 0x3f, 0xa2, 0xec, + 0xe0, 0x2b, 0x00, 0x33, + 0xcb, 0xc1, 0x07, 0xdc, 0x25, 0xed, 0xe6, 0x77, 0x03, 0xf6, 0x95, 0x4a, + 0xa5, 0x80, 0x99, 0xbb, + 0xb9, 0x52, 0xcb, 0x2e, 0x74, 0x12, 0x3e, 0xc3, 0x19, 0xf9, 0x0c, 0x7f, + 0x52, 0x3e, 0xc1, 0x1f, + 0x93, 0x4f, 0x72, 0x67, 0xa4, 0xb3, 0xdc, 0x2f, 0xe2, 0x61, 0x7e, 0xab, + 0x65, 0x27, 0xb7, 0xd7, + 0x72, 0x96, 0x3f, 0x6f, 0x39, 0x8b, 0xcf, 0x8b, 0xbf, 0xe0, 0x73, 0xe6, + 0xdf, 0xd1, 0x05, 0xf3, + 0xaf, 0xf8, 0x9c, 0x74, 0x0a, 0xfd, 0x24, 0x1d, 0x87, 0xc7, 0x1e, 0x86, + 0xd7, 0x3e, 0xcd, 0x9f, + 0x91, 0x0f, 0xf1, 0xbb, 0xe1, 0xb5, 0xf7, 0xc9, 0x47, 0xf9, 0x9f, 0x94, + 0x93, 0xf0, 0xbb, 0x9f, + 0x20, 0xb6, 0xde, 0x84, 0xb6, 0x5a, 0xb7, 0x73, 0xdb, 0xd5, 0x2d, 0x46, + 0xf0, 0xff, 0x50, 0x99, + 0x7c, 0x0c, 0x9d, 0x81, 0xcf, 0x77, 0xde, 0x72, 0x9e, 0x87, 0xef, 0x6c, + 0x84, 0xef, 0x6a, 0x80, + 0xef, 0x6a, 0x3c, 0xae, 0xb0, 0x3e, 0xc7, 0x63, 0xfc, 0x51, 0xf5, 0x08, + 0x7f, 0x40, 0x3d, 0xc1, + 0x9f, 0x82, 0xcf, 0xbe, 0x57, 0x39, 0x44, 0x8e, 0x5b, 0xf7, 0xe0, 0xfd, + 0xf2, 0x51, 0xee, 0xa8, + 0x72, 0x94, 0x3b, 0xa6, 0xec, 0x37, 0xae, 0x53, 0xd7, 0x03, 0xf6, 0xad, + 0xe3, 0xd7, 0x2a, 0xab, + 0x8c, 0xcb, 0xe4, 0x25, 0xc6, 0xf9, 0xf2, 0x6c, 0x7e, 0xba, 0x65, 0x1a, + 0xfa, 0x52, 0x1c, 0x8f, + 0x3f, 0x10, 0xdf, 0xe7, 0x0a, 0x44, 0x07, 0xaf, 0x98, 0x45, 0x34, 0xea, + 0xc3, 0x21, 0xaf, 0xbf, + 0xbd, 0x64, 0xd0, 0xbd, 0xbe, 0xfc, 0x2a, 0xe6, 0x53, 0x6d, 0xcc, 0x3b, + 0xff, 0x5e, 0x0d, 0x2e, + 0xc6, 0x96, 0x97, 0x6f, 0xf5, 0xc7, 0xd3, 0xed, 0x2b, 0xf6, 0xe3, 0xfb, + 0x08, 0x77, 0x01, 0xee, + 0xf5, 0xc3, 0x7d, 0xe9, 0x5d, 0x80, 0x7d, 0x77, 0xe2, 0xdb, 0x85, 0xde, + 0xf8, 0x56, 0xda, 0x13, + 0x3f, 0xcb, 0xe6, 0x51, 0x7a, 0xf7, 0x40, 0xbb, 0xeb, 0xc6, 0x0f, 0x4d, + 0x8c, 0x78, 0xc5, 0xe3, + 0x03, 0x30, 0xad, 0x94, 0x67, 0x98, 0xbf, 0xf6, 0xed, 0x89, 0x27, 0xab, + 0x1f, 0xe7, 0xd8, 0x38, + 0x82, 0x3d, 0xae, 0xff, 0x87, 0x11, 0xaf, 0x27, 0x7d, 0xf5, 0x7f, 0xcf, + 0x78, 0xf0, 0xb8, 0xe4, + 0xc3, 0xd2, 0xd7, 0x83, 0xf6, 0xbe, 0xb8, 0x79, 0x72, 0x1d, 0xf3, 0x23, + 0xde, 0xf3, 0xcb, 0x73, + 0x85, 0xb8, 0x29, 0x5e, 0x8c, 0xe0, 0xbd, 0xf3, 0x6b, 0xbe, 0xfa, 0x92, + 0x99, 0x0d, 0xc4, 0xfa, + 0xd7, 0x73, 0x09, 0x21, 0xaf, 0x17, 0x8a, 0x7e, 0x53, 0xf0, 0x1e, 0x14, + 0x56, 0xf7, 0x8d, 0x30, + 0x33, 0xee, 0x5b, 0x9c, 0x3e, 0xee, 0x5b, 0x30, 0xad, 0x7a, 0xb7, 0x3e, + 0x34, 0xf3, 0x97, 0xfc, + 0xe9, 0xb9, 0x68, 0x75, 0x13, 0xa5, 0x5a, 0xe7, 0x8b, 0x5e, 0x79, 0xae, + 0x33, 0xfc, 0x9a, 0x56, + 0x99, 0x36, 0x97, 0x76, 0xae, 0x5f, 0xbe, 0x09, 0xf3, 0xf7, 0xe1, 0x3d, + 0x93, 0x6d, 0x71, 0x01, + 0xe7, 0x9b, 0xe8, 0xe5, 0xb8, 0xc4, 0x49, 0x3d, 0x90, 0x2b, 0x12, 0xbe, + 0x48, 0xcf, 0x4b, 0x27, + 0xd0, 0x31, 0x15, 0xec, 0x5d, 0x3d, 0x85, 0xce, 0x4a, 0xa7, 0xe9, 0x59, + 0xe9, 0x0c, 0x05, 0x8c, + 0x22, 0xe7, 0xcc, 0xc7, 0x69, 0x95, 0x58, 0x45, 0x0f, 0x4a, 0x27, 0xe8, + 0x31, 0xf9, 0x38, 0x3e, + 0x21, 0x1f, 0x47, 0x80, 0x1f, 0xe4, 0x84, 0xf5, 0x38, 0xc3, 0x3d, 0xfe, + 0x28, 0xd8, 0xf5, 0x4f, + 0xea, 0x49, 0xfe, 0xa4, 0x7a, 0x92, 0x3b, 0x0e, 0x78, 0x06, 0x36, 0xce, + 0xc1, 0xeb, 0x70, 0x27, + 0xac, 0x87, 0x8c, 0x47, 0xad, 0x47, 0x8c, 0x47, 0xd4, 0x63, 0xdc, 0x21, + 0x2b, 0xe0, 0xa1, 0xf5, + 0x00, 0x77, 0x50, 0x3e, 0x68, 0x3c, 0xac, 0xee, 0xe7, 0x0e, 0x28, 0x87, + 0x8c, 0x07, 0xa5, 0x2a, + 0x6e, 0xaf, 0x02, 0xbe, 0x1d, 0xf8, 0x5f, 0xe0, 0xaf, 0x71, 0x7b, 0xa5, + 0x0a, 0x63, 0x85, 0x5c, + 0x65, 0xac, 0x92, 0xcb, 0xb9, 0x0a, 0xf0, 0xf9, 0xf6, 0x2a, 0x7b, 0xb9, + 0xbd, 0x72, 0x25, 0xfc, + 0x7f, 0x2f, 0xf8, 0x7f, 0x15, 0xc6, 0xfd, 0xf0, 0xf3, 0x6e, 0xc0, 0xb2, + 0x4a, 0x09, 0x7c, 0x3a, + 0xb9, 0x8c, 0x2b, 0x55, 0xb6, 0x72, 0x3b, 0xc1, 0x3f, 0x2c, 0x53, 0xb6, + 0x73, 0x5b, 0xe1, 0xff, + 0x15, 0xf2, 0x2e, 0xae, 0x5c, 0xda, 0xcb, 0x95, 0x49, 0x7b, 0xb8, 0x7d, + 0xb0, 0x2b, 0xe0, 0x35, + 0x2b, 0x2c, 0x80, 0x7d, 0x52, 0x05, 0xb7, 0x1b, 0x9e, 0x53, 0x06, 0xb7, + 0x15, 0xe0, 0x43, 0xee, + 0x84, 0x5d, 0x0a, 0x8f, 0xdd, 0xa1, 0xec, 0x42, 0xa5, 0xf2, 0x6e, 0xb4, + 0x5b, 0x2e, 0x85, 0xdf, + 0x55, 0xf2, 0x65, 0x32, 0xc4, 0xd8, 0xf0, 0xff, 0x32, 0xa9, 0x94, 0x94, + 0x4b, 0xe5, 0x78, 0x97, + 0xbc, 0x9d, 0x94, 0x4a, 0x65, 0x68, 0xa7, 0xb4, 0x83, 0xdf, 0x29, 0x6f, + 0xe7, 0x77, 0x00, 0xbe, + 0x6e, 0x85, 0xbd, 0x5d, 0xd9, 0xca, 0x6f, 0x55, 0xb7, 0xa2, 0xcd, 0xf2, + 0x36, 0x7e, 0x8b, 0xb4, + 0x8d, 0xdf, 0x26, 0x03, 0xfe, 0x59, 0x77, 0xf0, 0xbb, 0x6c, 0xbb, 0x50, + 0x99, 0xad, 0x14, 0xed, + 0x50, 0xcb, 0xb8, 0x72, 0x2b, 0xbc, 0x87, 0x6d, 0x3b, 0xb7, 0x4b, 0xd9, + 0x6d, 0x2c, 0x55, 0x4a, + 0x8d, 0x3b, 0x95, 0x1d, 0xf0, 0x19, 0x2a, 0xb8, 0x5d, 0x12, 0xfb, 0x8c, + 0xbb, 0xb8, 0x0a, 0xa9, + 0xcc, 0xb8, 0x4b, 0xa9, 0xe0, 0xcb, 0xd4, 0x5d, 0xec, 0xbb, 0x18, 0x77, + 0x40, 0x9c, 0xbf, 0x45, + 0xd9, 0xc6, 0x6d, 0x53, 0xd6, 0x71, 0x6b, 0xd4, 0x75, 0xdc, 0x6a, 0x75, + 0x25, 0xb7, 0x54, 0x9e, + 0xcf, 0xcd, 0xb7, 0xcc, 0xe4, 0xbf, 0xb3, 0x4c, 0xe5, 0x3f, 0x13, 0xc7, + 0xa3, 0x31, 0x62, 0x3e, + 0xaf, 0x16, 0x1a, 0x87, 0xbe, 0xb3, 0xd6, 0xc7, 0xfc, 0x20, 0x2f, 0xfd, + 0x95, 0xda, 0x78, 0xe2, + 0xcd, 0x3b, 0xab, 0xc1, 0xd3, 0x75, 0xc7, 0xb2, 0xf7, 0x3b, 0x7a, 0x0d, + 0xbf, 0x1d, 0xfc, 0xbd, + 0x3b, 0x01, 0xf7, 0xee, 0xa4, 0xb7, 0x83, 0xdf, 0x77, 0x1b, 0xee, 0x25, + 0xf4, 0xc4, 0xdd, 0x69, + 0x77, 0xf2, 0xb0, 0x96, 0x23, 0x2c, 0x19, 0x50, 0xb7, 0x07, 0x3a, 0xf2, + 0x99, 0x6a, 0xfc, 0x83, + 0x38, 0xab, 0xef, 0xca, 0x5a, 0x3d, 0xd0, 0xee, 0xfe, 0x95, 0xa7, 0x27, + 0x45, 0xbc, 0xa0, 0xe9, + 0xc0, 0xe8, 0xec, 0x85, 0x66, 0x7a, 0x58, 0x5a, 0x5e, 0x72, 0xeb, 0xcb, + 0x3d, 0x02, 0xd9, 0x1d, + 0xcb, 0x81, 0xd5, 0xcc, 0x6d, 0xd7, 0xd4, 0x73, 0xc9, 0xf6, 0xc6, 0x42, + 0xff, 0x7a, 0x2e, 0xfa, + 0xf3, 0x7a, 0xe6, 0xf0, 0xf6, 0xa6, 0x31, 0xcd, 0xe7, 0x08, 0x8b, 0x3e, + 0xee, 0x5b, 0x28, 0xfd, + 0x7a, 0xae, 0xcf, 0xe7, 0x7b, 0x7e, 0xb0, 0xa7, 0x6e, 0xc2, 0xf0, 0x2f, + 0xde, 0x7f, 0x7e, 0xad, + 0x7a, 0xd6, 0x9c, 0xde, 0x63, 0x12, 0x13, 0xae, 0x7e, 0x3d, 0xdf, 0x1c, + 0x17, 0x52, 0x43, 0x07, + 0xdf, 0x9b, 0x6f, 0xa2, 0xd5, 0x4d, 0x92, 0x7d, 0xd6, 0xc3, 0x75, 0x6b, + 0x52, 0x17, 0x66, 0x8f, + 0x88, 0xb3, 0x3c, 0x83, 0xb6, 0x68, 0x18, 0xf8, 0x07, 0x39, 0x6f, 0x39, + 0x43, 0xce, 0x8b, 0x67, + 0xc9, 0x59, 0xcb, 0x69, 0x72, 0x56, 0xfc, 0x85, 0x82, 0x2f, 0x46, 0x7e, + 0x65, 0x3f, 0x4b, 0xa7, + 0xc8, 0x11, 0xe9, 0x27, 0x72, 0x46, 0xfa, 0x09, 0x9d, 0x90, 0x4f, 0xa2, + 0xe3, 0xd2, 0x71, 0x7c, + 0x9c, 0xf9, 0x51, 0xca, 0x21, 0xf0, 0xdb, 0x4e, 0x68, 0x3e, 0xd5, 0x4f, + 0xd2, 0x49, 0x1e, 0xb0, + 0x91, 0xfd, 0xcc, 0x81, 0x1f, 0x08, 0xfe, 0x19, 0xe0, 0xa1, 0x72, 0x04, + 0xf0, 0xf0, 0x28, 0xc7, + 0xfc, 0xbc, 0x23, 0x2a, 0xe0, 0x1f, 0xf8, 0x85, 0xfb, 0xd5, 0xc3, 0xdc, + 0x01, 0xf8, 0xf9, 0x08, + 0xe0, 0xdb, 0x3e, 0x0d, 0xdb, 0x00, 0xab, 0x18, 0xae, 0xc9, 0x55, 0xf0, + 0x7f, 0x16, 0xeb, 0x56, + 0x70, 0x55, 0xe0, 0x73, 0x1d, 0x90, 0xf7, 0xc1, 0xde, 0xc3, 0xef, 0x91, + 0xf7, 0xc1, 0xef, 0xc1, + 0x17, 0x84, 0xc7, 0x32, 0xac, 0x02, 0x7f, 0x0e, 0xfc, 0x30, 0xd8, 0x10, + 0xeb, 0x96, 0x59, 0x2a, + 0xe0, 0x76, 0x37, 0x8b, 0x79, 0x01, 0xa3, 0xd8, 0x2e, 0xd7, 0xfc, 0xbe, + 0x3d, 0x10, 0x47, 0x96, + 0x8b, 0xe5, 0xe0, 0x0f, 0xc2, 0xe3, 0xa5, 0x4a, 0xb4, 0x5b, 0x2a, 0xe5, + 0x2b, 0xa4, 0x72, 0x88, + 0x8b, 0x77, 0xf3, 0x80, 0x6d, 0x3c, 0xbb, 0xdd, 0x2d, 0xef, 0x40, 0xbb, + 0xe4, 0x72, 0x54, 0x21, + 0x97, 0x82, 0xdf, 0x56, 0x01, 0x58, 0xb8, 0x0b, 0xb0, 0x6e, 0x27, 0xaa, + 0xb4, 0x1c, 0x20, 0x07, + 0xa5, 0xdd, 0x78, 0xb7, 0x5c, 0x4e, 0x76, 0x83, 0x1f, 0x5a, 0x01, 0xf7, + 0x31, 0xff, 0x71, 0xa7, + 0xb2, 0x13, 0xed, 0x54, 0x77, 0xa0, 0x6d, 0xea, 0x16, 0xb4, 0x4d, 0x01, + 0x3c, 0x94, 0x01, 0xf3, + 0xe0, 0x3d, 0x01, 0xdf, 0xf8, 0x52, 0xeb, 0x6e, 0x54, 0x61, 0xad, 0x44, + 0xe5, 0x70, 0xbb, 0xcb, + 0x5a, 0xca, 0xed, 0xb1, 0x56, 0xf1, 0x95, 0xd6, 0x4a, 0xbe, 0x5c, 0x85, + 0xcf, 0xa2, 0xc2, 0xfb, + 0xc1, 0x66, 0x38, 0x5f, 0x09, 0x9f, 0xb5, 0xc2, 0x52, 0xc9, 0x57, 0xc9, + 0x15, 0x7c, 0x85, 0xbc, + 0x17, 0x7c, 0x49, 0x86, 0xb9, 0x65, 0xf0, 0x59, 0x00, 0x37, 0xe5, 0x9d, + 0x80, 0xb1, 0xdb, 0xd1, + 0x56, 0x75, 0x23, 0xf8, 0x80, 0x3f, 0xf2, 0x2b, 0xe4, 0x05, 0x68, 0x8e, + 0x38, 0x13, 0x7d, 0x6b, + 0x99, 0x84, 0x3e, 0x16, 0xdf, 0x47, 0x05, 0xa2, 0x0d, 0x19, 0xe7, 0xd7, + 0xe4, 0xd0, 0x6a, 0xf3, + 0x83, 0x26, 0x96, 0xbe, 0x1a, 0x10, 0x5b, 0xc0, 0x67, 0xab, 0xee, 0x33, + 0xf1, 0xc1, 0xd3, 0x7d, + 0x78, 0x4c, 0x8f, 0x77, 0x7a, 0xd2, 0x5e, 0xb8, 0xb7, 0xb6, 0x7b, 0xe3, + 0x5e, 0xe0, 0xf7, 0xdd, + 0x42, 0x7b, 0xc0, 0xbe, 0x99, 0xf6, 0xfb, 0x81, 0xf5, 0xbb, 0x8c, 0xb9, + 0xab, 0x4e, 0x0f, 0xf4, + 0xac, 0x26, 0x8f, 0x44, 0x58, 0x52, 0xb9, 0xd6, 0x93, 0x7a, 0xbd, 0x30, + 0xd0, 0x83, 0xc7, 0x4b, + 0xa7, 0xf4, 0xf7, 0x7e, 0x9c, 0xf6, 0x9e, 0x33, 0x1b, 0x3d, 0xaa, 0xfd, + 0xce, 0xdb, 0x87, 0xf4, + 0xa5, 0x87, 0x35, 0x6e, 0xc5, 0xdb, 0x13, 0x17, 0x98, 0x2f, 0xcd, 0xc3, + 0x9c, 0xd7, 0xee, 0xc1, + 0x40, 0x76, 0x17, 0x90, 0xfb, 0xe6, 0xd6, 0xc1, 0x4f, 0xca, 0xcf, 0xc8, + 0xc9, 0x1e, 0x9b, 0x39, + 0xcc, 0xaf, 0x9e, 0x8b, 0xd6, 0x4f, 0x73, 0x25, 0xba, 0xec, 0x97, 0xab, + 0xd3, 0xe2, 0xaa, 0xfb, + 0x46, 0x4a, 0x7a, 0xe6, 0xbe, 0xe9, 0xcf, 0xf7, 0x67, 0xfa, 0xca, 0xf7, + 0xd7, 0xd2, 0xc1, 0xcf, + 0x0a, 0x36, 0x3f, 0x38, 0xa4, 0xbc, 0x5e, 0x08, 0x9a, 0x56, 0x61, 0xd1, + 0xae, 0x89, 0xd4, 0xe6, + 0xca, 0x67, 0x8d, 0xc9, 0x18, 0x1e, 0x68, 0x7e, 0x30, 0xc3, 0x75, 0xbd, + 0x73, 0xdb, 0x3d, 0xb1, + 0x74, 0x9a, 0xf0, 0x1e, 0xd9, 0xe7, 0xf6, 0x03, 0xff, 0xa4, 0xbf, 0xd3, + 0xff, 0xd2, 0x3f, 0xe8, + 0xef, 0xc2, 0x9f, 0xee, 0xff, 0xff, 0x81, 0xff, 0xa0, 0xff, 0xc5, 0x10, + 0xeb, 0xe2, 0x3f, 0x84, + 0xdf, 0xf1, 0x6f, 0xe6, 0x0b, 0xf8, 0x82, 0xe9, 0x02, 0xfe, 0x5d, 0xf8, + 0x0f, 0xf9, 0xcd, 0xfc, + 0x1b, 0x81, 0x98, 0x19, 0xff, 0x06, 0x71, 0x30, 0x8b, 0x85, 0x2f, 0x98, + 0x58, 0xdc, 0x7c, 0x81, + 0xdd, 0x8f, 0x7f, 0x11, 0xfe, 0x80, 0xe7, 0x9c, 0xc7, 0x3f, 0x8b, 0xe7, + 0xf9, 0x5f, 0xcd, 0x17, + 0xf8, 0x5f, 0xc4, 0x73, 0xfc, 0x39, 0xf1, 0x0c, 0xff, 0x33, 0xdc, 0x9e, + 0x12, 0x4f, 0xf1, 0x67, + 0xe1, 0xe7, 0xd3, 0xe2, 0x69, 0xf7, 0xcf, 0x27, 0xd1, 0x09, 0xf1, 0x34, + 0x3e, 0x2d, 0x9e, 0xc2, + 0x3f, 0x89, 0x67, 0xf1, 0x59, 0xf1, 0x34, 0x39, 0x05, 0xfb, 0x27, 0xf1, + 0x27, 0xed, 0xbe, 0x13, + 0xe2, 0x49, 0xd8, 0xa7, 0xf0, 0x49, 0xf1, 0x04, 0x61, 0xfb, 0x27, 0xf1, + 0x14, 0x39, 0x6a, 0x3e, + 0x4a, 0x8e, 0xc3, 0x3e, 0x62, 0x3e, 0x46, 0xe0, 0xf7, 0xe4, 0xb8, 0x78, + 0x94, 0x1c, 0xb5, 0xb0, + 0xfb, 0x8e, 0x91, 0xe3, 0xa6, 0xe3, 0xe4, 0xa4, 0x09, 0x1e, 0x6b, 0x3e, + 0x4e, 0x0e, 0xc3, 0x63, + 0x8e, 0x69, 0xfb, 0x04, 0x39, 0x2c, 0x1e, 0x26, 0xc7, 0x44, 0xf6, 0xf3, + 0x31, 0x7c, 0xdc, 0x74, + 0x04, 0x1f, 0x86, 0x5b, 0xf8, 0x1d, 0x3e, 0x2a, 0x1e, 0xa5, 0xc7, 0xc5, + 0xc3, 0x74, 0x8f, 0x58, + 0x4e, 0x0f, 0xc0, 0xeb, 0x1f, 0x03, 0x0c, 0xdc, 0x2f, 0x1d, 0x22, 0xfb, + 0x2d, 0xfb, 0xf0, 0x5e, + 0x4b, 0x05, 0xec, 0xfd, 0xb8, 0x12, 0x7c, 0xc2, 0x3d, 0x72, 0x19, 0x02, + 0xbc, 0xc2, 0xe0, 0x4b, + 0xa2, 0x4a, 0xa9, 0x14, 0xed, 0x03, 0x6c, 0xdd, 0x05, 0xb7, 0x95, 0x52, + 0x25, 0x2e, 0x97, 0x4a, + 0x31, 0xc4, 0xdb, 0xa8, 0x1c, 0x7c, 0xc6, 0x72, 0x69, 0x3f, 0xda, 0x2b, + 0xef, 0x03, 0x6c, 0xad, + 0xe4, 0xc1, 0x6f, 0x45, 0xfb, 0xe4, 0x03, 0x7c, 0x95, 0xa5, 0x02, 0xed, + 0x95, 0xf6, 0x20, 0x78, + 0x2d, 0x78, 0x7c, 0x39, 0x6c, 0xf6, 0xff, 0x4a, 0xb4, 0x07, 0x6e, 0xab, + 0x60, 0xef, 0x96, 0xc0, + 0x1f, 0x95, 0xb6, 0xa3, 0x6d, 0xd2, 0x06, 0xb4, 0x56, 0x5a, 0x83, 0x96, + 0x59, 0x16, 0xa2, 0x1f, + 0xc4, 0x59, 0xe8, 0x2b, 0x11, 0xf0, 0xcf, 0x3c, 0x1a, 0x17, 0x98, 0x6d, + 0xfc, 0x1b, 0xee, 0x3c, + 0x9f, 0x79, 0xde, 0x94, 0x07, 0x57, 0x14, 0x9f, 0x78, 0x57, 0x2f, 0x9f, + 0xa2, 0xea, 0xbb, 0xa1, + 0x9a, 0xb6, 0xb2, 0x2f, 0x9e, 0xee, 0x33, 0x13, 0xbb, 0xbf, 0x02, 0x78, + 0x47, 0x7a, 0x02, 0xee, + 0x01, 0x0e, 0xc2, 0xed, 0x2d, 0xa4, 0x07, 0xbd, 0x85, 0x76, 0x23, 0x37, + 0xd1, 0x1b, 0xb4, 0x1c, + 0xa1, 0xa1, 0x97, 0xf7, 0x6b, 0x69, 0xfe, 0xd9, 0xea, 0x7b, 0xef, 0x7a, + 0xb6, 0xf6, 0x3c, 0x37, + 0x6f, 0xae, 0x88, 0x3b, 0xfe, 0x7d, 0x62, 0xd5, 0x13, 0xfd, 0xea, 0xd4, + 0x46, 0xbc, 0x78, 0x72, + 0x1b, 0x3f, 0x9d, 0xf1, 0x92, 0xaf, 0xba, 0xf0, 0x1d, 0xe3, 0x23, 0xde, + 0x0c, 0x64, 0x77, 0xcc, + 0x76, 0x83, 0xe5, 0xcd, 0xa2, 0xec, 0x99, 0x5a, 0xde, 0xcc, 0xaf, 0x9e, + 0x8b, 0xa6, 0x83, 0x9f, + 0x90, 0xcb, 0xfa, 0xe1, 0x92, 0xa4, 0x48, 0x2e, 0x60, 0x1c, 0x1a, 0x26, + 0xfd, 0x65, 0x6f, 0xcd, + 0xd3, 0x48, 0x05, 0xf0, 0x2f, 0xd8, 0xdc, 0xb7, 0x50, 0xe7, 0x72, 0x06, + 0xf8, 0x7c, 0xac, 0x6e, + 0xc2, 0xb8, 0x79, 0xcc, 0xff, 0x4b, 0xf7, 0x39, 0x3f, 0xd8, 0xdd, 0x97, + 0x6c, 0x8e, 0xc2, 0x9a, + 0x7e, 0xbf, 0xe5, 0x0a, 0xb5, 0xea, 0x6b, 0x68, 0x5a, 0x85, 0x49, 0xbb, + 0x46, 0x4a, 0xe2, 0xb5, + 0xfc, 0x42, 0x50, 0xbe, 0x49, 0xe6, 0xc8, 0x0c, 0x67, 0xdc, 0xa8, 0xa8, + 0x80, 0x7c, 0x93, 0x9a, + 0xb5, 0xf0, 0x86, 0x66, 0x9b, 0x70, 0x92, 0x5c, 0x14, 0xfe, 0xe3, 0x39, + 0x3f, 0xc9, 0x9f, 0xf4, + 0x4f, 0xfc, 0x5f, 0xfa, 0x27, 0x01, 0x0c, 0x64, 0x3f, 0x93, 0x3f, 0xab, + 0xcf, 0x5d, 0xef, 0x9f, + 0x5d, 0x18, 0x19, 0x1a, 0xbf, 0x89, 0xbd, 0xa6, 0xde, 0xfb, 0xb5, 0xf7, + 0xaa, 0xf5, 0x7e, 0x75, + 0xfe, 0xef, 0xe7, 0xb5, 0x3c, 0xcf, 0xfd, 0x2f, 0xfe, 0xb3, 0xc6, 0xff, + 0xff, 0x24, 0x7f, 0xc0, + 0xba, 0x48, 0x2e, 0x8b, 0x9b, 0x55, 0xe3, 0x93, 0x69, 0x1b, 0xbb, 0xaf, + 0x13, 0x9e, 0xff, 0x57, + 0xdf, 0x7f, 0xe9, 0xf7, 0x35, 0xdf, 0xfd, 0xbf, 0xd5, 0xbf, 0xfb, 0x03, + 0x8e, 0xf0, 0x7f, 0xc8, + 0xef, 0xf4, 0x37, 0xfa, 0x0b, 0x3d, 0x4b, 0x4e, 0xd1, 0xe3, 0xe4, 0x08, + 0xdd, 0x4f, 0xf6, 0xd0, + 0xdd, 0x64, 0x1b, 0xdd, 0x48, 0xd6, 0xd0, 0x65, 0x74, 0x3e, 0xfd, 0x9e, + 0x7c, 0x4d, 0x3f, 0x27, + 0x13, 0x14, 0x9b, 0xa1, 0x4e, 0x3d, 0x56, 0xef, 0x82, 0x78, 0x54, 0xe3, + 0xa4, 0x79, 0xc7, 0xb2, + 0x6e, 0x9e, 0xee, 0xab, 0x93, 0x6f, 0x7e, 0xae, 0x3b, 0xe0, 0x5d, 0x0f, + 0xda, 0x53, 0x5b, 0x3d, + 0x60, 0x75, 0x27, 0xdd, 0xe8, 0xb5, 0xa4, 0x3e, 0x8d, 0xfe, 0xe2, 0xd9, + 0xff, 0xab, 0xdd, 0x03, + 0x5d, 0x5b, 0xc7, 0xc5, 0x17, 0x1e, 0x7b, 0xfa, 0xf7, 0xae, 0x67, 0x7d, + 0x2c, 0x5b, 0x86, 0xf6, + 0xac, 0x51, 0xeb, 0x00, 0xdc, 0x2d, 0xf9, 0x6e, 0xcc, 0x93, 0x06, 0x1f, + 0xf3, 0x30, 0x5f, 0xfe, + 0x71, 0x60, 0x9f, 0x1e, 0x1f, 0xd7, 0x7f, 0x35, 0x58, 0x6f, 0x5a, 0x66, + 0x61, 0x4a, 0xd0, 0xde, + 0x0c, 0x97, 0x56, 0x7d, 0xd4, 0xa8, 0x80, 0x7a, 0x2e, 0x1e, 0x8d, 0xe0, + 0x02, 0xff, 0x7a, 0x2e, + 0xa1, 0xe4, 0xb0, 0x12, 0xf2, 0xf4, 0xe8, 0x2f, 0x03, 0xfe, 0xb1, 0xba, + 0xaf, 0x9e, 0xb9, 0x6f, + 0xa1, 0xcf, 0xa0, 0x0c, 0xaa, 0xf3, 0xc5, 0xf2, 0x7a, 0xd5, 0xf9, 0x35, + 0x3f, 0x7c, 0x93, 0x74, + 0xa6, 0x73, 0xc8, 0xf8, 0x26, 0x42, 0x00, 0xbe, 0x89, 0xde, 0x63, 0xa2, + 0x47, 0x93, 0xfa, 0x52, + 0x8f, 0x4c, 0xc8, 0xb3, 0xe6, 0xfc, 0xf1, 0x4d, 0xb2, 0x83, 0xf1, 0x4d, + 0xea, 0xf4, 0x07, 0x44, + 0xd3, 0x7f, 0xf1, 0x3f, 0x9a, 0x8f, 0xa0, 0x7d, 0xe6, 0x03, 0xf8, 0xb0, + 0x00, 0x9e, 0x91, 0x50, + 0x81, 0xb7, 0x0b, 0xfb, 0xd1, 0x7e, 0xd3, 0x3e, 0x7e, 0x9f, 0xb9, 0x02, + 0x55, 0x98, 0xc1, 0x5b, + 0x31, 0x57, 0xe2, 0x4a, 0xf3, 0x3e, 0xbc, 0xc7, 0xbc, 0x07, 0xef, 0x33, + 0xed, 0x23, 0x15, 0xa6, + 0x72, 0x52, 0x09, 0xb7, 0x55, 0xa6, 0x2a, 0xba, 0xd7, 0xb4, 0x8f, 0xee, + 0x15, 0xf6, 0x91, 0x43, + 0xc2, 0x7e, 0x52, 0x25, 0x54, 0x91, 0x43, 0xb4, 0x0a, 0x2c, 0xb9, 0x0a, + 0x1d, 0x30, 0x1f, 0x40, + 0x87, 0x4c, 0x47, 0xd0, 0x21, 0xf3, 0x7e, 0x78, 0xed, 0xbd, 0xf0, 0xff, + 0xfd, 0xe8, 0x80, 0xa9, + 0x0a, 0x5e, 0x63, 0x9f, 0xb6, 0xd9, 0xfb, 0xed, 0x17, 0x2a, 0xf1, 0x7e, + 0xba, 0x1f, 0x1f, 0x10, + 0xf6, 0xb9, 0x6e, 0x29, 0xbb, 0xad, 0xc2, 0x7b, 0xe9, 0x01, 0x7c, 0x50, + 0x38, 0x88, 0x8f, 0xd0, + 0x43, 0x70, 0xdf, 0x01, 0x6d, 0x1f, 0x84, 0xdf, 0xef, 0xa7, 0x87, 0xf1, + 0x21, 0x7a, 0x10, 0x6e, + 0x0f, 0xb8, 0xef, 0xaf, 0x82, 0xff, 0x57, 0xe1, 0x7d, 0xf4, 0x20, 0xda, + 0x4f, 0xe0, 0x33, 0x53, + 0x78, 0x1f, 0x7a, 0x08, 0x1d, 0x64, 0xff, 0xa7, 0xe0, 0x8d, 0x91, 0x83, + 0x08, 0x3e, 0x1d, 0x3a, + 0x08, 0xbf, 0x73, 0xbd, 0xf6, 0x21, 0x7a, 0x80, 0x1c, 0xa0, 0x87, 0xc9, + 0x01, 0x72, 0x98, 0x1c, + 0xd1, 0xbe, 0xef, 0x21, 0xe1, 0x1c, 0xfe, 0x8d, 0x9e, 0x47, 0xff, 0x61, + 0xf8, 0x08, 0xfb, 0x77, + 0x7a, 0x01, 0xff, 0x4a, 0x7e, 0xc1, 0xbf, 0x91, 0x0b, 0xda, 0xfe, 0x9d, + 0xfc, 0x06, 0xeb, 0x02, + 0x5b, 0x70, 0xff, 0xaf, 0xf0, 0xd8, 0xdf, 0xf1, 0x79, 0xf8, 0xfd, 0x05, + 0x02, 0xde, 0x31, 0xdc, + 0xf7, 0x1f, 0xf2, 0x1f, 0xf8, 0xf9, 0x37, 0x76, 0x3f, 0xf9, 0x15, 0x6e, + 0xd9, 0x6b, 0xb0, 0x75, + 0x09, 0x2d, 0x01, 0xed, 0x88, 0x0b, 0x1d, 0x2f, 0xb2, 0x6b, 0x0b, 0xf9, + 0x13, 0xff, 0x01, 0xcf, + 0xbd, 0x40, 0xce, 0xe1, 0xb3, 0xf4, 0x2c, 0x3e, 0x43, 0x7e, 0xc2, 0xe0, + 0xaf, 0xe2, 0x2a, 0x5a, + 0x89, 0x77, 0xd1, 0xad, 0x64, 0x3d, 0x5d, 0x4e, 0x16, 0xd1, 0x79, 0x64, + 0x3a, 0x9d, 0x42, 0x3e, + 0xa1, 0xe3, 0x88, 0x93, 0xd6, 0x89, 0x61, 0x7d, 0xf8, 0x54, 0xa5, 0x13, + 0x67, 0xbc, 0x6a, 0x5f, + 0x3d, 0xb4, 0x6f, 0xed, 0xb9, 0x1b, 0x2e, 0x5d, 0x7a, 0x1f, 0x3c, 0xdd, + 0x19, 0xbd, 0x1f, 0xef, + 0x06, 0xb1, 0x2e, 0xc3, 0x40, 0xcf, 0xea, 0x4a, 0xda, 0x32, 0x2d, 0x0b, + 0x14, 0xf9, 0x51, 0xff, + 0xd7, 0x7c, 0xd6, 0x8d, 0xdd, 0xfa, 0x06, 0x63, 0xbe, 0x2b, 0x79, 0xd2, + 0xd7, 0x3c, 0x37, 0x8d, + 0xff, 0xb6, 0xf1, 0xa9, 0xde, 0xda, 0x3c, 0x24, 0x37, 0xe6, 0x9e, 0x28, + 0x5e, 0xf1, 0xee, 0x94, + 0x39, 0xf6, 0x81, 0xbe, 0x6a, 0x36, 0x8f, 0x2d, 0xe8, 0x33, 0xa0, 0xe3, + 0xfb, 0xf5, 0xde, 0x62, + 0xf9, 0xbb, 0x60, 0xfa, 0x25, 0x1a, 0xf7, 0xad, 0x40, 0x0f, 0xf7, 0x2d, + 0xcb, 0x9f, 0x56, 0xbd, + 0x97, 0x0e, 0x7e, 0x5a, 0x8e, 0x6f, 0x3d, 0x97, 0x9a, 0x3a, 0xf8, 0x91, + 0x5a, 0x8f, 0x4c, 0xa2, + 0x5e, 0xfd, 0x26, 0x63, 0x50, 0xcd, 0x53, 0x86, 0x7f, 0x6e, 0xee, 0x9b, + 0x1e, 0x5c, 0x08, 0xd3, + 0x0c, 0x4a, 0x5f, 0xfa, 0xfd, 0x01, 0xf8, 0x26, 0xe9, 0x01, 0xf9, 0x26, + 0x7a, 0xf3, 0x7a, 0xe1, + 0xd4, 0xae, 0x89, 0x0a, 0xc2, 0x71, 0xf1, 0xf0, 0x4d, 0xd2, 0xfc, 0xf1, + 0x4d, 0xac, 0x5e, 0xf5, + 0x70, 0x31, 0x9e, 0xaf, 0xed, 0x33, 0x47, 0xd2, 0xfa, 0xf4, 0x51, 0x7c, + 0xaf, 0xa9, 0x27, 0xb9, + 0xcd, 0xd4, 0x8b, 0xf6, 0x36, 0xf5, 0x22, 0x3d, 0x4c, 0x7d, 0x68, 0x7f, + 0xd3, 0x5d, 0xb4, 0xa7, + 0xf9, 0x51, 0xda, 0xcf, 0x7c, 0x8b, 0xd0, 0x1b, 0x56, 0x4f, 0x7a, 0xbb, + 0x70, 0x1b, 0xed, 0x45, + 0x6f, 0x13, 0x7a, 0xd1, 0x3b, 0x84, 0x87, 0xd8, 0xe3, 0x84, 0xdb, 0x4d, + 0xb7, 0x9b, 0x6e, 0x33, + 0xdd, 0xc1, 0xb6, 0xd0, 0x17, 0x1e, 0xd1, 0x9f, 0x3e, 0x2e, 0xdc, 0x4e, + 0x6f, 0xa3, 0x6c, 0xdf, + 0x49, 0xfb, 0xd0, 0xbe, 0xb0, 0xfb, 0xd0, 0xde, 0x74, 0x20, 0x7b, 0x3c, + 0xbd, 0x8b, 0xde, 0x25, + 0xdc, 0x25, 0xf4, 0x71, 0x2f, 0xf6, 0xd3, 0xc3, 0xf4, 0x21, 0x78, 0xa7, + 0xbe, 0xda, 0xff, 0xfa, + 0x92, 0x3e, 0x42, 0x5f, 0xdc, 0x57, 0xb8, 0x8b, 0xdc, 0x21, 0x3c, 0x41, + 0x1e, 0x84, 0xd7, 0xbb, + 0x5b, 0xb8, 0x87, 0xf6, 0x31, 0xf5, 0xa5, 0xf7, 0x0a, 0x77, 0xe3, 0x7b, + 0x84, 0xbb, 0xc9, 0xfd, + 0xc2, 0x53, 0xb8, 0x9f, 0xb9, 0x1f, 0xb9, 0xcb, 0x7c, 0x17, 0xe9, 0x6f, + 0xee, 0x4b, 0xee, 0x81, + 0xe7, 0xdc, 0x25, 0xdc, 0x0e, 0x8f, 0x7d, 0x88, 0xdc, 0x29, 0xf4, 0x23, + 0x7d, 0x85, 0x7b, 0xf0, + 0xdd, 0xa6, 0xbb, 0x49, 0x7f, 0xe1, 0x3e, 0xd2, 0x9f, 0xde, 0x8b, 0x9f, + 0xa3, 0x0f, 0xe3, 0xbb, + 0xe9, 0xdd, 0xe4, 0x1e, 0x3a, 0x00, 0x6e, 0x07, 0x90, 0xfb, 0xe9, 0x03, + 0xe4, 0x01, 0xd3, 0x43, + 0xf4, 0x49, 0xd3, 0x00, 0xfa, 0x2f, 0xd3, 0x40, 0xed, 0x53, 0x3d, 0x22, + 0x3c, 0x40, 0x5e, 0x14, + 0x06, 0x53, 0x44, 0x0d, 0x74, 0x38, 0x1d, 0x4a, 0xdf, 0x36, 0xbd, 0x49, + 0xdf, 0xa2, 0xaf, 0xc3, + 0x1e, 0x42, 0xdf, 0x15, 0x86, 0x51, 0x4e, 0x18, 0x42, 0x06, 0x0b, 0x83, + 0xc9, 0x50, 0x3a, 0x94, + 0x0c, 0x21, 0x43, 0xe0, 0xdf, 0xa1, 0xf0, 0xbf, 0x91, 0x82, 0x91, 0x0e, + 0xa6, 0x43, 0x4d, 0x70, + 0x3f, 0x3c, 0x66, 0x98, 0x6b, 0xc3, 0xa2, 0x54, 0x10, 0x72, 0x05, 0x03, + 0x35, 0x0a, 0x08, 0x5e, + 0x31, 0x97, 0xf2, 0x14, 0xc3, 0xcf, 0x58, 0x10, 0xe1, 0xff, 0x58, 0x30, + 0x11, 0x42, 0x11, 0x21, + 0x02, 0x85, 0x4d, 0x08, 0x2f, 0x60, 0xa2, 0x50, 0x0c, 0xf7, 0x99, 0x29, + 0x12, 0x90, 0x80, 0x69, + 0xae, 0x30, 0x42, 0x18, 0x2e, 0x0c, 0xa1, 0x6c, 0x0d, 0xa2, 0xaf, 0xd0, + 0x17, 0xe9, 0xd3, 0xf4, + 0x71, 0x3a, 0x90, 0xbe, 0x5c, 0x5b, 0x6b, 0xca, 0x8b, 0x47, 0x5b, 0xf2, + 0xcd, 0xc4, 0xa7, 0xcc, + 0xde, 0xfd, 0x7f, 0x10, 0x8f, 0x56, 0xe7, 0x05, 0x3d, 0x9a, 0x54, 0xbe, + 0x78, 0xba, 0xf3, 0x7b, + 0x3d, 0xd0, 0x8a, 0xb4, 0xa2, 0xda, 0xd6, 0x56, 0x5b, 0x9a, 0x65, 0x6f, + 0x36, 0xb2, 0xfb, 0xcc, + 0xfb, 0x1e, 0xf5, 0xc4, 0xb8, 0x35, 0xea, 0xc6, 0x13, 0xed, 0xaf, 0xb2, + 0x99, 0xe5, 0x7e, 0xfb, + 0x57, 0x3c, 0xef, 0x35, 0xa7, 0xc5, 0xc3, 0x5a, 0x8e, 0x72, 0xc1, 0x8c, + 0x7f, 0x8d, 0x59, 0x31, + 0xf4, 0xee, 0xba, 0xfd, 0x7f, 0x2f, 0xf6, 0xbc, 0xef, 0xfb, 0x6e, 0x8f, + 0x35, 0xb5, 0x45, 0xba, + 0x35, 0x2a, 0xa3, 0x71, 0xa2, 0x2d, 0x29, 0x37, 0x68, 0x5c, 0x0b, 0x76, + 0xe7, 0x77, 0xee, 0x5b, + 0xc8, 0xba, 0xec, 0x09, 0x5a, 0x0e, 0x2b, 0xd1, 0x9e, 0x94, 0xeb, 0x77, + 0x7e, 0x30, 0xab, 0x9b, + 0xd8, 0xaf, 0x54, 0x97, 0xdd, 0xdb, 0xd6, 0x5d, 0x75, 0x5f, 0x37, 0xf7, + 0x0d, 0x85, 0x05, 0x17, + 0xc2, 0x32, 0x83, 0xd2, 0xa3, 0x83, 0x9f, 0x92, 0xeb, 0x3d, 0x5b, 0xcd, + 0x1f, 0xdf, 0x44, 0xcb, + 0x75, 0xea, 0xec, 0x1b, 0x4a, 0xd6, 0xa1, 0x69, 0x95, 0x15, 0x2e, 0xed, + 0x1a, 0x78, 0x0d, 0x86, + 0x7f, 0x49, 0x6a, 0x6c, 0x00, 0xbe, 0x49, 0x72, 0x4e, 0xa2, 0x2d, 0xd1, + 0xc0, 0x34, 0xbf, 0xa3, + 0x82, 0xf0, 0x4d, 0x34, 0xed, 0x1a, 0xbd, 0x9a, 0xd4, 0xe1, 0xd4, 0xa8, + 0xb0, 0x55, 0xd7, 0xbc, + 0x48, 0x94, 0xce, 0xf9, 0x26, 0x51, 0x3e, 0xfa, 0x1c, 0x74, 0xf7, 0xf7, + 0xb3, 0x39, 0xd9, 0xd6, + 0xf0, 0x68, 0x4c, 0x6a, 0xd7, 0xc6, 0x42, 0xdf, 0xd7, 0x46, 0xf0, 0xd7, + 0xab, 0xe3, 0x30, 0x6d, + 0x36, 0xe3, 0xd8, 0x1a, 0x3c, 0x20, 0xed, 0xbb, 0x78, 0xf9, 0x1e, 0x84, + 0xe5, 0x29, 0x92, 0x9d, + 0xc9, 0xa3, 0x58, 0x9e, 0xb9, 0x8e, 0xd6, 0x14, 0xd3, 0x24, 0x98, 0x65, + 0x7f, 0xd4, 0x5f, 0x7f, + 0x71, 0x35, 0xfe, 0xb9, 0x6b, 0xbd, 0x3e, 0x7b, 0xa0, 0x57, 0xf4, 0xe9, + 0x57, 0xad, 0x65, 0x30, + 0xae, 0xfd, 0xdb, 0xbd, 0xe7, 0x3f, 0xf6, 0x40, 0x9d, 0x9e, 0x1a, 0xef, + 0xba, 0x71, 0xb0, 0x1a, + 0xee, 0x64, 0x83, 0xd6, 0x57, 0xd3, 0xeb, 0x83, 0x98, 0x37, 0x9f, 0xf0, + 0x9e, 0x21, 0xe2, 0xd9, + 0x6b, 0x1f, 0xba, 0xe3, 0xd6, 0x49, 0xad, 0x5f, 0x48, 0xb5, 0xd4, 0xb2, + 0x43, 0x38, 0xb6, 0x49, + 0xb6, 0xc4, 0xdc, 0xa0, 0xfd, 0x7a, 0x60, 0x77, 0x59, 0xce, 0xb0, 0x69, + 0x5a, 0x79, 0x72, 0x58, + 0x01, 0xe6, 0x07, 0x67, 0x0d, 0xd3, 0x6a, 0x07, 0x70, 0x0e, 0x05, 0xe4, + 0x9b, 0xe8, 0xcd, 0x61, + 0xb1, 0xba, 0xaf, 0x23, 0x86, 0x0b, 0xcc, 0x7d, 0xbb, 0x94, 0xd7, 0xcb, + 0x0e, 0xe3, 0x5c, 0x4e, + 0xfd, 0x3a, 0x5f, 0x69, 0xc3, 0x63, 0x64, 0x5f, 0xf3, 0x83, 0x2f, 0xf5, + 0x25, 0xb3, 0x7e, 0x3d, + 0xb7, 0xce, 0x17, 0xb9, 0xd2, 0xbc, 0x5e, 0x48, 0xb3, 0xe6, 0x42, 0xd5, + 0xae, 0x11, 0xfc, 0xf1, + 0x4d, 0x32, 0xc1, 0xee, 0x32, 0x82, 0xf1, 0x4d, 0xc2, 0x8a, 0x0b, 0x91, + 0xaa, 0x7f, 0x5c, 0xd0, + 0xa7, 0x51, 0x11, 0x78, 0xbe, 0x49, 0x5a, 0x5e, 0x75, 0x3d, 0xdc, 0x8b, + 0x2b, 0xaf, 0xa7, 0x97, + 0xdd, 0x75, 0x6d, 0xd4, 0xa7, 0x3d, 0x9b, 0x19, 0x1e, 0x8d, 0x0a, 0xf7, + 0xb5, 0x31, 0x15, 0xce, + 0x25, 0x86, 0xeb, 0x19, 0xc5, 0x59, 0xda, 0xdf, 0x84, 0x7d, 0x8f, 0xf4, + 0x42, 0x4f, 0x6d, 0x0e, + 0xfe, 0x2e, 0x96, 0x18, 0x1e, 0xce, 0x37, 0x8d, 0xd7, 0x14, 0x48, 0x6b, + 0xaa, 0xce, 0xf6, 0xaa, + 0xc7, 0x56, 0xc7, 0xac, 0x7e, 0x78, 0xba, 0x4d, 0x27, 0x76, 0x7f, 0xe5, + 0x81, 0xd5, 0x2f, 0xdf, + 0x55, 0xe7, 0x35, 0x58, 0x8c, 0xbb, 0xcc, 0xd0, 0xbf, 0x36, 0xe6, 0xfa, + 0x5b, 0x27, 0x0a, 0x37, + 0x0e, 0xd1, 0x7a, 0xae, 0xb7, 0xbc, 0xd0, 0x33, 0xc3, 0x16, 0x37, 0xaa, + 0xf9, 0xf4, 0x27, 0xab, + 0xdf, 0xf7, 0x99, 0x25, 0xfd, 0xee, 0xbd, 0xfe, 0xe3, 0xa6, 0xaf, 0x45, + 0xf9, 0xd0, 0x73, 0xf1, + 0x1c, 0x5b, 0x96, 0xab, 0x09, 0x9a, 0xc3, 0x02, 0x5b, 0xd7, 0x6b, 0x03, + 0x97, 0xdb, 0x9b, 0x16, + 0x59, 0x4b, 0x07, 0x3f, 0xcb, 0x87, 0x9e, 0x4b, 0x1d, 0xbe, 0x89, 0xde, + 0x1c, 0x96, 0x04, 0xf1, + 0xa6, 0x3d, 0x9a, 0xe1, 0x5f, 0xf0, 0xb9, 0x97, 0x3a, 0xf3, 0x7a, 0xe1, + 0x9c, 0xcb, 0x59, 0x5b, + 0xab, 0xde, 0x67, 0x7e, 0x4d, 0xe3, 0x9b, 0x64, 0xb9, 0xf9, 0x26, 0x09, + 0xfe, 0xf9, 0x26, 0x7a, + 0xfd, 0x85, 0xcb, 0xd0, 0xa4, 0xbe, 0x2c, 0xed, 0x9a, 0x10, 0xf8, 0x26, + 0x9e, 0xef, 0x12, 0x0a, + 0xef, 0x27, 0x5c, 0xda, 0xb3, 0xee, 0x9a, 0x17, 0x17, 0xdc, 0x67, 0xce, + 0x18, 0xce, 0xae, 0xd7, + 0xb5, 0x79, 0x84, 0x9a, 0xbf, 0xee, 0x4c, 0xd2, 0x70, 0x3d, 0x26, 0xec, + 0xda, 0xb3, 0xc1, 0x7b, + 0xd9, 0xf5, 0x6a, 0x54, 0xa4, 0x55, 0x5f, 0x1b, 0xdd, 0xb8, 0xae, 0x26, + 0x1a, 0x58, 0x4e, 0x3a, + 0x7d, 0x74, 0xc6, 0x08, 0xc6, 0x75, 0x4d, 0x2b, 0x48, 0x1d, 0xc9, 0x70, + 0x90, 0xe1, 0x1f, 0xf3, + 0x6f, 0xeb, 0x7d, 0x1f, 0x40, 0x6b, 0xaa, 0x56, 0x2d, 0x76, 0xca, 0x84, + 0x13, 0xaf, 0xd7, 0xa8, + 0xd9, 0xae, 0xe8, 0xdb, 0xcf, 0x1f, 0x4f, 0xd7, 0xd7, 0xf3, 0x3d, 0x31, + 0xae, 0x86, 0x91, 0xcc, + 0x07, 0x9c, 0x74, 0xc2, 0xaf, 0x96, 0x1f, 0xd3, 0x35, 0xd0, 0x70, 0xd2, + 0xf3, 0xfc, 0x1f, 0x5a, + 0x0d, 0x64, 0xdc, 0xdd, 0x18, 0x29, 0x96, 0x6f, 0x35, 0xa9, 0xc7, 0x8b, + 0xd7, 0x8c, 0x4b, 0x7b, + 0x37, 0x41, 0x8d, 0x37, 0xc6, 0xc3, 0x8e, 0x63, 0xfa, 0x05, 0xa2, 0xab, + 0xce, 0x50, 0x23, 0xf7, + 0x62, 0x49, 0xe0, 0x53, 0x6c, 0x71, 0x86, 0x60, 0x36, 0xc0, 0x6a, 0x0c, + 0xa9, 0x7a, 0xe6, 0x2d, + 0x8e, 0xd5, 0xd3, 0x9b, 0x16, 0x3c, 0xaf, 0xc7, 0x72, 0x4a, 0x2c, 0x96, + 0x66, 0xb9, 0x74, 0xbf, + 0xf3, 0x83, 0x59, 0xdd, 0x04, 0x62, 0x47, 0x8d, 0xfb, 0x16, 0xc4, 0x57, + 0x8b, 0x94, 0x5d, 0x75, + 0x5f, 0x4d, 0xff, 0xd9, 0x0a, 0xb6, 0xc6, 0x74, 0xf0, 0xcd, 0x70, 0x2c, + 0x7c, 0xc4, 0x61, 0xa1, + 0xe5, 0xf5, 0x22, 0xc2, 0x32, 0x97, 0x33, 0xd0, 0x31, 0xf1, 0xae, 0x9b, + 0x5c, 0x9a, 0x2b, 0x1f, + 0x80, 0x6f, 0xf2, 0x17, 0x68, 0x52, 0xeb, 0xd2, 0xae, 0x19, 0x13, 0x9c, + 0xe3, 0xa2, 0xe9, 0x43, + 0x83, 0x4f, 0x1f, 0x80, 0x6f, 0x62, 0x88, 0xb3, 0xc4, 0x70, 0xe1, 0xd4, + 0xa4, 0x8e, 0xb9, 0x02, + 0xed, 0x9a, 0x00, 0x1a, 0x15, 0x2e, 0x5c, 0x97, 0x35, 0x5c, 0x1f, 0x55, + 0xbb, 0x1e, 0xce, 0xfc, + 0xf7, 0xcc, 0x82, 0xa4, 0x91, 0x75, 0xae, 0xd7, 0x3e, 0xfa, 0xe7, 0xe3, + 0x75, 0x69, 0xcf, 0xea, + 0x9c, 0xc3, 0x7a, 0xb9, 0x1a, 0x15, 0x82, 0xab, 0x97, 0x57, 0xc3, 0x42, + 0x4d, 0xfb, 0x24, 0x25, + 0x27, 0x05, 0x7c, 0xf4, 0x24, 0xf0, 0x39, 0x12, 0xa6, 0xbd, 0xfc, 0x74, + 0x20, 0xad, 0x29, 0x9f, + 0x1c, 0x0b, 0xd3, 0x79, 0xa4, 0xf5, 0xe2, 0xcd, 0x6a, 0xfa, 0x48, 0xa0, + 0x59, 0x45, 0x1e, 0x1d, + 0x82, 0x92, 0xf1, 0x55, 0x6f, 0xf8, 0xf4, 0x2f, 0x21, 0x9e, 0xae, 0x81, + 0x9d, 0x96, 0x13, 0xdc, + 0x8a, 0x2f, 0xa7, 0x3c, 0xef, 0xab, 0x7f, 0xa5, 0xeb, 0xe8, 0x88, 0xc1, + 0xd5, 0xfd, 0xd1, 0x80, + 0x83, 0x09, 0x6a, 0x82, 0x31, 0x4e, 0x89, 0x37, 0x26, 0x5a, 0x13, 0x0d, + 0x2c, 0xef, 0x02, 0x3b, + 0x97, 0xfd, 0xcc, 0x66, 0x08, 0xb3, 0x58, 0x9f, 0x61, 0x61, 0x94, 0x9c, + 0xc4, 0xa5, 0x58, 0x63, + 0x0c, 0xc1, 0x7b, 0x56, 0xb3, 0x46, 0x06, 0xed, 0x07, 0x61, 0xbd, 0x69, + 0x63, 0xc2, 0x34, 0x6f, + 0xd1, 0xcd, 0x39, 0x05, 0x1b, 0xe0, 0x02, 0xf3, 0x4d, 0x92, 0x73, 0xb2, + 0xe0, 0xda, 0x18, 0xeb, + 0xd6, 0xc1, 0xf7, 0x8b, 0x2f, 0x0a, 0xab, 0xfb, 0xba, 0xf0, 0xcf, 0x5b, + 0x0f, 0xa6, 0x76, 0x7e, + 0xcd, 0x95, 0xd7, 0xcb, 0x30, 0x5c, 0x81, 0x56, 0xbd, 0x4f, 0x9d, 0xaf, + 0xf0, 0xcc, 0xa0, 0x8c, + 0x72, 0xc5, 0x2e, 0xe0, 0x63, 0x04, 0xe4, 0x9b, 0xc8, 0x09, 0x9c, 0x2e, + 0x5c, 0x08, 0xa7, 0x4e, + 0xb7, 0x4e, 0xed, 0x1a, 0x57, 0x2d, 0x5c, 0x8b, 0x23, 0x48, 0x30, 0xbe, + 0x49, 0x4a, 0x4d, 0xbe, + 0x49, 0x58, 0x35, 0xa9, 0xaf, 0x4c, 0xa3, 0xa2, 0xee, 0xb5, 0x91, 0xe5, + 0xd7, 0x62, 0xab, 0xf3, + 0x6b, 0x59, 0x35, 0xb4, 0x28, 0x3d, 0xb8, 0x5e, 0xa7, 0xcf, 0x21, 0xcc, + 0xfd, 0xfd, 0x49, 0xe1, + 0xaa, 0x79, 0xb1, 0x9c, 0x94, 0x9a, 0x64, 0x64, 0x7a, 0x72, 0x09, 0x0c, + 0x3b, 0xbe, 0x18, 0xf8, + 0xa2, 0xaf, 0x18, 0xb6, 0x06, 0xe7, 0xad, 0xf6, 0x72, 0x73, 0x76, 0x9f, + 0xf8, 0x22, 0xee, 0x05, + 0x9f, 0x3c, 0xdd, 0x00, 0x3a, 0x04, 0x9e, 0xe7, 0x7a, 0x74, 0xac, 0x98, + 0xef, 0x59, 0x5a, 0x5c, + 0xfa, 0xee, 0x8c, 0xef, 0xc7, 0x3c, 0xee, 0xad, 0xdd, 0xe7, 0xd9, 0xcf, + 0x2e, 0xeb, 0x7f, 0xcf, + 0xf5, 0x63, 0x12, 0xde, 0xa9, 0xfd, 0xf7, 0x4c, 0xb4, 0xc6, 0x1b, 0x18, + 0xae, 0xbb, 0x7c, 0xc2, + 0x38, 0x8e, 0x7d, 0x97, 0x64, 0x47, 0x72, 0x2e, 0xcb, 0x6b, 0xc2, 0xce, + 0x4d, 0xb6, 0x27, 0xe5, + 0x32, 0xbe, 0x42, 0x8a, 0x2d, 0x36, 0x37, 0x90, 0xc6, 0xa7, 0x66, 0x77, + 0x45, 0x59, 0x23, 0xc2, + 0x68, 0x03, 0x39, 0x7a, 0x35, 0xa3, 0x6a, 0xe6, 0xb6, 0x83, 0xf2, 0x4d, + 0x46, 0xf9, 0xe3, 0x9b, + 0xb0, 0xba, 0x6f, 0xbc, 0x12, 0xc9, 0xc7, 0x3b, 0xe3, 0x8c, 0xd1, 0x6a, + 0x0c, 0xaf, 0xe9, 0xe0, + 0xe7, 0xbb, 0xf4, 0x9f, 0x6b, 0xf7, 0x25, 0xbb, 0xfa, 0x78, 0xff, 0x76, + 0x5c, 0x80, 0x58, 0x5a, + 0x9f, 0x8f, 0xe2, 0xf2, 0x17, 0x7c, 0xcf, 0x0f, 0xd6, 0xb0, 0x10, 0xbe, + 0x0b, 0x8b, 0x97, 0x12, + 0x82, 0xf0, 0x4d, 0xc2, 0xaa, 0xd3, 0xad, 0x5e, 0x49, 0xbe, 0xbf, 0x66, + 0x7e, 0x4d, 0x2f, 0xdf, + 0x24, 0x32, 0xac, 0xf3, 0x99, 0x63, 0x35, 0x5c, 0x88, 0xd1, 0x53, 0xf3, + 0x0a, 0x9c, 0xd7, 0xd3, + 0x6a, 0xfb, 0xec, 0x3a, 0xc5, 0xf2, 0x69, 0xb5, 0x71, 0xdd, 0xbb, 0x1e, + 0x1e, 0x69, 0x89, 0xe7, + 0x99, 0xbf, 0x10, 0xec, 0x3a, 0x15, 0xd2, 0x1c, 0xd6, 0x30, 0xf4, 0xac, + 0xba, 0xfc, 0x85, 0x64, + 0x63, 0x8a, 0x1a, 0xcd, 0xf4, 0x92, 0x70, 0xd4, 0xb8, 0x5b, 0xea, 0xce, + 0xdb, 0x0d, 0xb6, 0xdc, + 0x9a, 0x55, 0x4c, 0xb3, 0xe5, 0xe9, 0xda, 0x3c, 0x5d, 0xf0, 0xe1, 0xfc, + 0xd6, 0x71, 0x59, 0x3e, + 0xef, 0x9b, 0xa1, 0x9a, 0x4e, 0x7e, 0xbb, 0xf7, 0x1b, 0xf9, 0xae, 0x65, + 0xb8, 0xf7, 0x43, 0x3f, + 0xdc, 0xfa, 0x50, 0xeb, 0xc2, 0xd4, 0x21, 0xfe, 0x70, 0x3e, 0xc9, 0x5a, + 0x2b, 0xae, 0x65, 0x7a, + 0x2e, 0x22, 0xd8, 0x3e, 0x5c, 0xa7, 0x58, 0x8e, 0x2d, 0x35, 0x3f, 0x35, + 0xc7, 0xb5, 0x5d, 0xbe, + 0x6e, 0xa2, 0xa7, 0x9e, 0x55, 0x1b, 0x0b, 0xdd, 0x73, 0xdf, 0x42, 0xd6, + 0xaa, 0x0f, 0xd8, 0x9b, + 0x76, 0x85, 0xb9, 0x6d, 0x0f, 0xc7, 0x22, 0x2f, 0x3d, 0x20, 0xdf, 0xc4, + 0xf3, 0x5d, 0x18, 0xf7, + 0x8d, 0xd5, 0x7d, 0x59, 0x0d, 0xc4, 0xe3, 0xef, 0x33, 0x3d, 0xd4, 0xda, + 0x7a, 0x2e, 0xec, 0x7a, + 0xcd, 0x72, 0x54, 0x99, 0xf9, 0xee, 0xd8, 0xc5, 0xdf, 0x75, 0x21, 0xdc, + 0x3a, 0x5f, 0x57, 0x72, + 0x4c, 0x6a, 0xf5, 0x25, 0x67, 0x05, 0x9d, 0x1f, 0xec, 0x5a, 0x49, 0x7f, + 0x93, 0x4e, 0x77, 0xad, + 0x7c, 0x7f, 0xe0, 0x59, 0x73, 0x2c, 0x0e, 0x93, 0x13, 0x8d, 0xda, 0xdf, + 0xc1, 0x67, 0x7e, 0xcd, + 0xed, 0xaf, 0xc3, 0x35, 0x2e, 0x5a, 0x4f, 0x7f, 0x40, 0xa8, 0xb8, 0x20, + 0x84, 0xa7, 0x16, 0xae, + 0xf5, 0xb2, 0x4b, 0x91, 0x7c, 0x0d, 0x5c, 0xf7, 0x51, 0x37, 0x61, 0xd7, + 0xa9, 0x58, 0xaf, 0xba, + 0xc9, 0x95, 0x6a, 0xcf, 0x86, 0x6b, 0x36, 0x2d, 0x9b, 0x31, 0x93, 0xac, + 0x44, 0xba, 0xfe, 0x4e, + 0x8e, 0x56, 0x23, 0xfc, 0xf2, 0x29, 0xfc, 0xf4, 0x3d, 0x6b, 0xf1, 0xf1, + 0xa6, 0x67, 0x7b, 0xb1, + 0xe7, 0xf7, 0xf5, 0x51, 0x3f, 0x0e, 0xb4, 0xb4, 0x5a, 0xc6, 0x86, 0x27, + 0x6e, 0xd3, 0xde, 0x3b, + 0xaf, 0xdd, 0xb0, 0x97, 0xbd, 0x75, 0x66, 0x36, 0x3d, 0xd3, 0xeb, 0xee, + 0x19, 0x5d, 0x9f, 0x68, + 0x6a, 0x8f, 0x0c, 0x9c, 0x3f, 0x83, 0x6b, 0x4b, 0xb2, 0x35, 0xd6, 0x18, + 0xa8, 0x77, 0x20, 0x46, + 0x8a, 0xe5, 0x12, 0xc1, 0xfe, 0x53, 0xf3, 0xd3, 0x46, 0xa6, 0x15, 0xba, + 0x74, 0xfe, 0x98, 0xde, + 0x1f, 0xeb, 0x3f, 0x49, 0x74, 0xd7, 0xc3, 0xb5, 0xd8, 0xc3, 0x14, 0x8b, + 0x18, 0x46, 0x44, 0x87, + 0x4f, 0xbf, 0x29, 0x6c, 0xbd, 0x69, 0x91, 0x2c, 0x56, 0x05, 0x1f, 0xa0, + 0x5a, 0x07, 0xbf, 0x16, + 0xdf, 0x24, 0xd9, 0x19, 0x67, 0x88, 0x51, 0xa2, 0x79, 0xd6, 0xf7, 0x12, + 0xc3, 0xf0, 0xcf, 0x5e, + 0x97, 0xfb, 0x76, 0x49, 0xcf, 0xc5, 0x1d, 0x87, 0x8d, 0xf5, 0x93, 0x5f, + 0xab, 0x11, 0xbb, 0x84, + 0x5f, 0xe7, 0x2b, 0xe8, 0x31, 0xd1, 0x91, 0xef, 0x67, 0x75, 0x93, 0x78, + 0x67, 0xc6, 0xa8, 0xec, + 0xe2, 0xb4, 0xe1, 0x81, 0xf4, 0x5c, 0x18, 0xdf, 0xc4, 0x9d, 0xd7, 0xe3, + 0xf5, 0x68, 0x52, 0x87, + 0x53, 0xa7, 0x3b, 0x78, 0x5e, 0x2f, 0x01, 0x69, 0xf9, 0x7e, 0x53, 0x75, + 0x7e, 0xcd, 0x37, 0xdf, + 0xa4, 0x20, 0x23, 0x27, 0x33, 0x2f, 0x3e, 0x27, 0xd0, 0x5c, 0xe8, 0x90, + 0xe6, 0x33, 0xeb, 0xd1, + 0x9e, 0xbd, 0xdc, 0x9a, 0x97, 0xbb, 0x1e, 0x5e, 0xbb, 0xcf, 0xa1, 0x3a, + 0x76, 0x71, 0xd7, 0x4d, + 0x7c, 0xf5, 0x39, 0x68, 0x1a, 0x93, 0x3a, 0xaf, 0x8d, 0xe1, 0xea, 0x59, + 0x8d, 0xb3, 0xa5, 0xe4, + 0x56, 0xc7, 0x36, 0xe6, 0x04, 0x54, 0x27, 0x86, 0xf5, 0xd3, 0x83, 0xc7, + 0x62, 0xd4, 0x6a, 0x8e, + 0xc5, 0x5c, 0x8d, 0x4f, 0x4b, 0xae, 0x63, 0x58, 0x58, 0x8b, 0xa7, 0xeb, + 0x4f, 0x87, 0xa0, 0xba, + 0xaf, 0x66, 0x66, 0xa3, 0x47, 0xab, 0xaf, 0xd3, 0xef, 0x77, 0x7f, 0xf3, + 0x81, 0xc5, 0x0f, 0xdc, + 0xdf, 0xfd, 0xd3, 0x56, 0x2f, 0x25, 0x40, 0x0c, 0xc0, 0xf2, 0x7a, 0xc1, + 0xfc, 0xd7, 0x48, 0x29, + 0x91, 0x4b, 0x56, 0x83, 0xe5, 0xf5, 0x22, 0x68, 0xa2, 0x33, 0x6d, 0x54, + 0xa2, 0x1c, 0x6d, 0xf4, + 0xe8, 0x9d, 0xa6, 0x17, 0x65, 0x8c, 0xc8, 0x28, 0xce, 0x18, 0xc1, 0xf2, + 0x49, 0x9a, 0xe6, 0xa9, + 0x86, 0x85, 0x09, 0x86, 0xcc, 0xd1, 0x69, 0x23, 0xc0, 0x7f, 0x08, 0x9c, + 0x4f, 0x77, 0x64, 0xfe, + 0xfd, 0x35, 0xaf, 0x5a, 0x9c, 0x53, 0x8d, 0x6f, 0xa2, 0x5e, 0xe2, 0x9b, + 0xa4, 0x14, 0xc6, 0xe7, + 0x6a, 0xb9, 0x3e, 0x56, 0xf7, 0xb0, 0xc5, 0x72, 0x41, 0xb8, 0x6f, 0x5a, + 0x1c, 0xa6, 0xc5, 0x2e, + 0xf0, 0xdd, 0x7d, 0xf4, 0x68, 0x5f, 0x8a, 0xc3, 0x2c, 0xf1, 0xba, 0x74, + 0xbe, 0xc2, 0x7f, 0x4c, + 0x82, 0xe7, 0xf5, 0xa2, 0x19, 0x07, 0x31, 0x2f, 0x66, 0x94, 0xff, 0xfc, + 0x5a, 0xa6, 0xd6, 0xbf, + 0xa6, 0xbd, 0xa7, 0x12, 0x65, 0x0c, 0xc4, 0x37, 0x89, 0x90, 0x92, 0xc3, + 0xa8, 0xd3, 0xad, 0x3b, + 0xdf, 0x5f, 0xa7, 0x3f, 0xc0, 0x9d, 0x5f, 0xe3, 0x92, 0xfd, 0xf3, 0x4d, + 0xb4, 0xba, 0x89, 0xaf, + 0xd8, 0x25, 0x8c, 0xb8, 0x40, 0x7d, 0xf4, 0xb2, 0x87, 0xae, 0x51, 0xe1, + 0xae, 0x9b, 0xb8, 0xb8, + 0xf2, 0x59, 0xc3, 0x7c, 0xd4, 0xc3, 0x6b, 0xf4, 0x39, 0x24, 0xe9, 0x99, + 0xcf, 0xac, 0xb7, 0xe6, + 0xa5, 0x6b, 0x36, 0x6d, 0x04, 0x49, 0x70, 0xa4, 0xe6, 0x7a, 0xff, 0x9d, + 0xea, 0xc4, 0xb0, 0xb5, + 0x74, 0x04, 0xa6, 0xcc, 0x33, 0xd7, 0xe1, 0xa7, 0x3d, 0xf0, 0x69, 0xf4, + 0x2b, 0x0c, 0xcf, 0x1b, + 0xcc, 0xac, 0x5b, 0x3f, 0x0e, 0xa8, 0x43, 0x50, 0xb3, 0x96, 0x51, 0x07, + 0xe7, 0x13, 0x58, 0x5e, + 0x2f, 0x78, 0xfc, 0xce, 0xa5, 0xa8, 0x51, 0xc6, 0x60, 0x76, 0x97, 0x9c, + 0x9f, 0x3e, 0xd2, 0xeb, + 0x7b, 0x7a, 0x69, 0xc7, 0xa7, 0x8d, 0xcc, 0xd4, 0x7a, 0x83, 0xb4, 0xbc, + 0x85, 0x96, 0xbb, 0xd0, + 0xfa, 0x92, 0x3d, 0x7d, 0x4e, 0x3e, 0x72, 0x4a, 0xa1, 0xd8, 0x40, 0x42, + 0xb8, 0x6a, 0x5e, 0xfe, + 0x73, 0xdb, 0xda, 0x77, 0x89, 0x91, 0xc1, 0xf7, 0xb3, 0xc6, 0x71, 0xd5, + 0x75, 0x0f, 0x35, 0x18, + 0xf7, 0x37, 0x82, 0xa4, 0x31, 0x1e, 0x9a, 0x14, 0xc9, 0x05, 0xd2, 0x73, + 0x49, 0xd5, 0x62, 0x97, + 0xd4, 0x11, 0x31, 0x01, 0xf2, 0x6b, 0x97, 0xf2, 0x7a, 0x61, 0xea, 0xe3, + 0xbd, 0xfc, 0x7c, 0xff, + 0x65, 0xf3, 0x4d, 0x42, 0xc2, 0x85, 0xbf, 0x47, 0xcf, 0xa7, 0xba, 0x2f, + 0x99, 0xe1, 0x77, 0x56, + 0x30, 0xbe, 0x89, 0xa6, 0x3d, 0x1b, 0x7c, 0xbe, 0x93, 0xde, 0x5e, 0xf6, + 0x94, 0x30, 0x6a, 0x54, + 0x44, 0xd9, 0x33, 0xb4, 0xd8, 0x40, 0xc3, 0x75, 0x4f, 0x5f, 0x72, 0x9d, + 0x3e, 0x87, 0x78, 0x43, + 0xb2, 0xe6, 0xa7, 0x07, 0xe3, 0xca, 0xbb, 0xe7, 0xb0, 0x86, 0x25, 0x7e, + 0x8f, 0x24, 0x2c, 0x96, + 0xf2, 0xee, 0x29, 0xf3, 0x15, 0xc3, 0x7a, 0x38, 0x6f, 0x75, 0xfb, 0xf7, + 0x9e, 0xeb, 0xd5, 0xef, + 0xeb, 0x76, 0xcf, 0xc4, 0x4a, 0xb1, 0x7c, 0xac, 0x0c, 0xfb, 0x9b, 0x41, + 0x5a, 0xfd, 0x58, 0xaf, + 0x0e, 0xc1, 0xa0, 0x92, 0x2e, 0xff, 0x0a, 0x14, 0x03, 0xd5, 0xc9, 0xeb, + 0xf9, 0x8f, 0xdf, 0x83, + 0x71, 0xc2, 0x70, 0x6a, 0x61, 0xfa, 0x48, 0x9f, 0xe7, 0x23, 0x60, 0x63, + 0x8c, 0x25, 0x8e, 0x4b, + 0x60, 0x7d, 0x4e, 0x85, 0x19, 0x23, 0x2f, 0xf5, 0xe2, 0xf9, 0xd0, 0x73, + 0x71, 0xff, 0x5d, 0xfe, + 0x17, 0x9a, 0x56, 0x5a, 0x0e, 0x4b, 0x0f, 0xf7, 0x8d, 0x69, 0xde, 0x2b, + 0x80, 0xed, 0x4a, 0x10, + 0xee, 0xaf, 0xaf, 0xbc, 0x9e, 0x97, 0x9e, 0x8b, 0xb7, 0x0e, 0x3e, 0xb3, + 0xb9, 0x00, 0x7a, 0x2e, + 0x7f, 0x4d, 0x7f, 0xff, 0x15, 0xe7, 0xfb, 0xab, 0xeb, 0x26, 0x2e, 0xbe, + 0x49, 0x90, 0xf9, 0x26, + 0x5a, 0x4e, 0x43, 0x47, 0x2d, 0x5c, 0xb7, 0x76, 0xcd, 0x98, 0xb0, 0xe9, + 0xf9, 0x50, 0x2d, 0xaf, + 0x67, 0x8d, 0x35, 0x04, 0xca, 0xaf, 0xb1, 0xd8, 0x85, 0xcd, 0x45, 0x0d, + 0xe6, 0x17, 0xe9, 0xae, + 0x85, 0x6b, 0xd7, 0xc6, 0x70, 0xd6, 0xc2, 0xab, 0xaf, 0x8d, 0x35, 0xf9, + 0x26, 0xde, 0xb1, 0x47, + 0x2d, 0xbe, 0x89, 0x2f, 0x5d, 0xcd, 0x50, 0x38, 0x2e, 0xde, 0xfc, 0x7c, + 0x7f, 0xdf, 0x93, 0x69, + 0xfb, 0x7a, 0xe7, 0x76, 0x7c, 0xc5, 0xb0, 0x75, 0xb4, 0x04, 0xd6, 0x3e, + 0x74, 0x07, 0x8b, 0x51, + 0x5d, 0x1c, 0x8b, 0x48, 0xc2, 0xf2, 0x17, 0xac, 0xde, 0x10, 0xfb, 0xf9, + 0xc3, 0x2f, 0x55, 0xd7, + 0x8f, 0x83, 0xe8, 0x10, 0xdc, 0xf2, 0x49, 0xd3, 0x97, 0x03, 0xea, 0x89, + 0x00, 0xce, 0x27, 0x05, + 0xca, 0xeb, 0xb9, 0x8f, 0x65, 0xbc, 0x2d, 0x35, 0x97, 0xf5, 0x8e, 0x04, + 0xb3, 0xbb, 0xb4, 0xc2, + 0x8c, 0x11, 0xba, 0x7c, 0xe6, 0xc2, 0xe4, 0x11, 0x89, 0x7e, 0xf4, 0x5c, + 0x3c, 0xfe, 0x3a, 0xf3, + 0xd3, 0xc3, 0xa3, 0x55, 0x1f, 0x72, 0xcd, 0x8b, 0x0b, 0xca, 0x7d, 0x73, + 0xba, 0x34, 0x4f, 0xe3, + 0x82, 0x72, 0xdf, 0x02, 0x6b, 0xd5, 0x7b, 0xfa, 0x92, 0x93, 0xbd, 0x63, + 0x17, 0x5f, 0xf3, 0x83, + 0xdd, 0x71, 0x98, 0xee, 0x3e, 0xde, 0xe2, 0x4c, 0x9d, 0xfd, 0x7a, 0x61, + 0xca, 0xf7, 0xbb, 0xfb, + 0x72, 0xe2, 0xaa, 0xf9, 0x26, 0x59, 0x7e, 0xf8, 0x26, 0x19, 0xa3, 0xb2, + 0x5c, 0xf1, 0x3b, 0x09, + 0xc8, 0x71, 0x01, 0x5c, 0xd0, 0xab, 0x49, 0x1d, 0x11, 0xc6, 0x59, 0x73, + 0xd5, 0x79, 0xbd, 0x4b, + 0x7c, 0x93, 0xdc, 0x3a, 0x7c, 0x93, 0xe2, 0x8c, 0x1a, 0x75, 0x13, 0x9f, + 0xb1, 0x8b, 0x56, 0x0b, + 0x8f, 0x0e, 0x67, 0x7f, 0xff, 0x15, 0xd4, 0xbc, 0x74, 0xf0, 0x4d, 0x94, + 0x9a, 0x7c, 0x13, 0x17, + 0xc7, 0x25, 0x4c, 0xbd, 0xec, 0xf0, 0x3d, 0xd9, 0xec, 0x33, 0xef, 0xeb, + 0x54, 0x93, 0x59, 0x75, + 0xe7, 0x92, 0x7b, 0x74, 0xee, 0x9f, 0x58, 0xd8, 0x67, 0xc0, 0x75, 0x1f, + 0xd4, 0x1f, 0xe4, 0xef, + 0x3d, 0x63, 0xc6, 0xf7, 0x7c, 0x53, 0xeb, 0xf3, 0x5b, 0x6a, 0xef, 0xef, + 0xab, 0x8e, 0xfb, 0xf8, + 0xc2, 0xbb, 0x06, 0x74, 0x1a, 0x5f, 0xff, 0x4d, 0xd6, 0xab, 0x1c, 0x9e, + 0xbc, 0x5e, 0x24, 0x61, + 0x75, 0x8d, 0xa0, 0x39, 0x5f, 0xb0, 0x01, 0x56, 0xa3, 0xd7, 0x35, 0x6f, + 0xd1, 0x7d, 0x3e, 0xfa, + 0xd6, 0x73, 0x71, 0xfb, 0xeb, 0x70, 0x3e, 0xa6, 0xda, 0xe3, 0x73, 0xfd, + 0xe9, 0xb9, 0xfc, 0x55, + 0x36, 0x10, 0x9c, 0x5b, 0x16, 0x83, 0xe3, 0x1d, 0xb1, 0x1a, 0x06, 0xc5, + 0x04, 0xe3, 0x7e, 0xe8, + 0xcc, 0xf7, 0x6b, 0x39, 0x36, 0x88, 0x5d, 0xfc, 0xce, 0x0f, 0x76, 0xc7, + 0x61, 0xa1, 0xe8, 0x7c, + 0x85, 0x9a, 0xeb, 0x0c, 0x53, 0xbe, 0x3f, 0x28, 0xdf, 0x24, 0x2b, 0x28, + 0xdf, 0x24, 0xcc, 0x9a, + 0xd4, 0x21, 0x68, 0xd7, 0xf8, 0xcc, 0xeb, 0x79, 0xf5, 0x25, 0xa7, 0xd5, + 0xc2, 0xc2, 0x6a, 0x5c, + 0x97, 0x6a, 0xf2, 0x4d, 0x5c, 0xb8, 0x10, 0xa9, 0xaf, 0x16, 0xae, 0xab, + 0xbf, 0x3f, 0x21, 0xb8, + 0x46, 0x85, 0x9e, 0x3a, 0xa0, 0xe6, 0x33, 0x67, 0x0d, 0x4b, 0x72, 0xd4, + 0xe5, 0x87, 0xd6, 0xe0, + 0x9b, 0xd8, 0xd3, 0xc3, 0xd7, 0xcb, 0x0e, 0xdf, 0x93, 0xe5, 0x77, 0x6a, + 0xf0, 0x24, 0xbe, 0x1a, + 0xf4, 0x4c, 0xed, 0x18, 0x56, 0xab, 0xf1, 0x2e, 0xeb, 0x75, 0x4f, 0xb0, + 0xef, 0x19, 0x6b, 0xcb, + 0x1c, 0xf5, 0x72, 0xed, 0x59, 0x21, 0x5b, 0x5e, 0xea, 0x39, 0x60, 0x4e, + 0x8f, 0x47, 0x5a, 0x8f, + 0x4e, 0x1c, 0x9a, 0x60, 0x4d, 0x30, 0xb2, 0xbc, 0x1a, 0xcb, 0xeb, 0xb1, + 0x1c, 0x4c, 0xa0, 0x7c, + 0x74, 0xb4, 0xd6, 0x97, 0xa3, 0x27, 0xaf, 0x97, 0x96, 0x13, 0xac, 0x37, + 0x83, 0xe5, 0xd3, 0x33, + 0x5c, 0x9a, 0x56, 0x97, 0x93, 0xdb, 0xf6, 0xd2, 0x73, 0xf1, 0xea, 0xd9, + 0x0a, 0xa0, 0xe7, 0x72, + 0xc9, 0x06, 0xf4, 0xf9, 0xe9, 0xc1, 0x6d, 0xc0, 0x9d, 0xdb, 0x16, 0xf5, + 0x70, 0xdf, 0x5c, 0x7d, + 0x2f, 0x41, 0xe7, 0xbe, 0x49, 0x21, 0xd4, 0x01, 0xed, 0x5e, 0x5c, 0x79, + 0x5f, 0xf9, 0xb5, 0x31, + 0xae, 0xd8, 0xc5, 0x5f, 0xff, 0x5a, 0xc8, 0xb8, 0x50, 0x93, 0x9f, 0x1f, + 0xf8, 0x98, 0x5c, 0x41, + 0xbe, 0xdf, 0xbb, 0x6e, 0xe2, 0x93, 0x6f, 0x62, 0xad, 0xcd, 0x37, 0xf9, + 0x87, 0xf6, 0xf1, 0x6a, + 0xd7, 0xee, 0x74, 0x6d, 0xbe, 0x67, 0x40, 0xbe, 0x09, 0x5c, 0xaf, 0x19, + 0x16, 0x85, 0x55, 0x7b, + 0x36, 0x8c, 0xb5, 0x70, 0xa6, 0x51, 0x11, 0x94, 0x6f, 0x52, 0x94, 0x39, + 0x3c, 0xab, 0x20, 0x39, + 0x30, 0xdf, 0x44, 0x6f, 0xcf, 0xaa, 0x18, 0xcf, 0xa7, 0x3a, 0x13, 0x47, + 0xd5, 0x78, 0x8d, 0x89, + 0x0f, 0xd5, 0x99, 0xb7, 0x5b, 0xca, 0x7c, 0xc2, 0xb5, 0x03, 0xef, 0x08, + 0x86, 0xb9, 0xac, 0x1e, + 0xd9, 0x7e, 0xee, 0xcb, 0x0f, 0xd5, 0xd2, 0x21, 0x30, 0x6a, 0xf5, 0x7d, + 0x8d, 0x73, 0x92, 0x60, + 0x64, 0xdc, 0x8c, 0x24, 0x7b, 0x52, 0x6e, 0x92, 0xc6, 0xd1, 0x48, 0x30, + 0xc4, 0x2b, 0xb1, 0x46, + 0xc6, 0x57, 0x8b, 0xac, 0x85, 0x85, 0xba, 0xf3, 0x7a, 0x05, 0x7e, 0xf2, + 0x7a, 0xb5, 0xec, 0x8e, + 0xf5, 0xb9, 0xe9, 0xea, 0x59, 0x0d, 0x58, 0xf3, 0x62, 0x3d, 0x5b, 0x09, + 0x1c, 0xf3, 0x15, 0x58, + 0x3c, 0xed, 0x53, 0xcf, 0x45, 0x75, 0xf5, 0x25, 0x47, 0xd9, 0xd2, 0x74, + 0x5d, 0x1b, 0x43, 0xe9, + 0x59, 0x0d, 0xda, 0x23, 0x23, 0x5f, 0xd2, 0x7c, 0x0e, 0x36, 0xf7, 0x4d, + 0x7f, 0xbe, 0xdf, 0x9f, + 0x56, 0xbd, 0x97, 0x0e, 0x7e, 0x61, 0xfa, 0xc8, 0x60, 0xf9, 0xb5, 0x90, + 0xfa, 0x78, 0x0b, 0xc3, + 0x77, 0x4c, 0x74, 0xf4, 0xf1, 0x6a, 0x36, 0xca, 0xfc, 0x05, 0x9f, 0x7c, + 0x13, 0xef, 0xbe, 0x64, + 0x29, 0x8e, 0x0b, 0x9f, 0x4e, 0xb7, 0xfe, 0x5a, 0xb8, 0x6e, 0xed, 0x1a, + 0x97, 0xcf, 0xec, 0x5f, + 0xcf, 0x85, 0xf5, 0x3a, 0x14, 0x6b, 0x7c, 0x93, 0xdc, 0x40, 0x7c, 0x93, + 0x50, 0xf2, 0x7a, 0xd9, + 0x7a, 0xb5, 0x6b, 0x2e, 0x53, 0xa3, 0xa2, 0x26, 0xdf, 0x24, 0x5b, 0x1f, + 0xdf, 0x44, 0x6f, 0xcf, + 0x2a, 0x7c, 0xcf, 0x34, 0x47, 0x42, 0xcd, 0xcf, 0x3f, 0xf6, 0x56, 0xad, + 0x07, 0xba, 0xa4, 0xf0, + 0xe2, 0x90, 0xda, 0x3c, 0xde, 0xc8, 0x20, 0xb9, 0x11, 0xc6, 0xbb, 0x60, + 0xe7, 0x46, 0x76, 0x61, + 0x93, 0x21, 0xbe, 0x1f, 0x1b, 0x89, 0x19, 0x7e, 0x24, 0xd9, 0x12, 0x0c, + 0x09, 0xb6, 0xa4, 0x5c, + 0x8d, 0x9b, 0xc1, 0x38, 0x1a, 0xe0, 0xf3, 0x32, 0x3c, 0x8c, 0x57, 0x3c, + 0xbe, 0x43, 0x24, 0x8e, + 0xb7, 0xa7, 0xe6, 0x06, 0xcd, 0xbf, 0x6a, 0x79, 0xbd, 0xf4, 0xa0, 0x79, + 0x3d, 0x76, 0x3d, 0xce, + 0xd4, 0xa1, 0x69, 0xc5, 0xe6, 0x35, 0xa4, 0xe8, 0xf0, 0x99, 0x35, 0x1b, + 0x80, 0x6b, 0x8f, 0x3f, + 0x3d, 0x17, 0x56, 0x37, 0x61, 0xf5, 0x66, 0x66, 0xeb, 0x7e, 0xf5, 0x5c, + 0xbc, 0x73, 0x58, 0x7a, + 0xfa, 0xc4, 0x74, 0xd4, 0xbc, 0x22, 0x99, 0xe6, 0xa9, 0xbb, 0xef, 0x25, + 0xa8, 0xce, 0x97, 0xfe, + 0x3e, 0xde, 0xe0, 0xc7, 0xc4, 0xc2, 0x66, 0xe1, 0x65, 0xb2, 0xd8, 0x65, + 0x54, 0x4d, 0x3d, 0x97, + 0x5a, 0x7c, 0x93, 0x50, 0x74, 0xbe, 0xe4, 0xf0, 0x1c, 0x93, 0x50, 0xe6, + 0xef, 0xb9, 0xfc, 0x05, + 0xdf, 0x7a, 0x2e, 0x97, 0xf8, 0x26, 0xe9, 0x41, 0xf9, 0x26, 0x61, 0xef, + 0xe3, 0xbd, 0x6c, 0xed, + 0x9a, 0x20, 0x7c, 0x13, 0x1f, 0x7a, 0x2e, 0xa1, 0xf6, 0xf7, 0x87, 0xad, + 0xe6, 0xa5, 0x06, 0xbd, + 0x36, 0x6a, 0x71, 0x18, 0xb3, 0x51, 0x76, 0x4e, 0xd5, 0xd4, 0x5f, 0x04, + 0x5c, 0xf7, 0xae, 0x9b, + 0x88, 0x7e, 0xe6, 0x35, 0xd4, 0xf1, 0x8b, 0x92, 0x8d, 0x69, 0xf6, 0xb8, + 0x9a, 0xc7, 0xcc, 0xd1, + 0x7a, 0x84, 0xbf, 0x79, 0xbb, 0x4d, 0xac, 0x11, 0x39, 0x81, 0xe2, 0x11, + 0xc6, 0xbd, 0xd5, 0x91, + 0xd7, 0xe3, 0x93, 0xdd, 0x7c, 0x93, 0x9a, 0x3c, 0xe4, 0xd4, 0x9c, 0x54, + 0x17, 0x17, 0x39, 0x87, + 0xe5, 0xd6, 0xb5, 0xbc, 0x9e, 0x1c, 0xc5, 0x45, 0x06, 0xea, 0xd9, 0x12, + 0xe3, 0x10, 0xbb, 0x06, + 0x44, 0x86, 0x45, 0xd3, 0x2a, 0xb4, 0x79, 0x8b, 0x35, 0x7b, 0xaf, 0x6a, + 0xea, 0xb9, 0xd4, 0xec, + 0xd9, 0xf2, 0xa3, 0xe7, 0xf2, 0x17, 0xf4, 0xac, 0x7a, 0xb8, 0x6f, 0xda, + 0x71, 0x0e, 0xd3, 0x5c, + 0x4e, 0x9d, 0xf9, 0x7e, 0xcf, 0x5c, 0x4e, 0xbf, 0xf3, 0x83, 0x3d, 0x3c, + 0x87, 0xac, 0x82, 0xa4, + 0x91, 0xb1, 0x52, 0x8c, 0xff, 0xbc, 0x69, 0x28, 0xc7, 0x44, 0x2f, 0x2e, + 0x5c, 0x6e, 0xbe, 0xbf, + 0xb6, 0x0e, 0xbe, 0x4e, 0xbe, 0x49, 0x58, 0x78, 0x3f, 0xd5, 0xd7, 0xb4, + 0x30, 0xe5, 0xfb, 0x5d, + 0x7c, 0x13, 0x57, 0xec, 0x12, 0x8c, 0x6f, 0xa2, 0xab, 0x47, 0xc6, 0x95, + 0xd7, 0xbb, 0xa2, 0xf9, + 0xcc, 0x75, 0x7c, 0xe6, 0xa0, 0xfd, 0x7a, 0x34, 0xc5, 0xdd, 0x23, 0x53, + 0x8d, 0xeb, 0x9e, 0x9e, + 0x8d, 0x5a, 0xb8, 0xce, 0x6a, 0xe1, 0xb1, 0x96, 0xc0, 0x7c, 0x93, 0x68, + 0x6b, 0xaa, 0x21, 0xcd, + 0x16, 0x5d, 0xf3, 0xef, 0x64, 0x49, 0xd5, 0x66, 0xab, 0x19, 0x26, 0x5d, + 0xbc, 0xa4, 0xc7, 0x32, + 0x7e, 0xe2, 0x1b, 0xec, 0xbe, 0xf6, 0xf9, 0x11, 0xc3, 0x02, 0xf4, 0x7b, + 0x20, 0xe6, 0xd7, 0x05, + 0xed, 0x93, 0x05, 0xcc, 0x4d, 0x56, 0x6a, 0xe4, 0xf5, 0x58, 0xfd, 0xd8, + 0xc5, 0xdb, 0x05, 0x5f, + 0x2a, 0x25, 0x3f, 0x35, 0x87, 0x71, 0x33, 0x5c, 0xfc, 0x8c, 0x94, 0x9c, + 0x64, 0x47, 0xd2, 0xa5, + 0x38, 0xaa, 0xf6, 0x77, 0x01, 0x2c, 0xcd, 0x28, 0x48, 0xce, 0x09, 0x9a, + 0xc3, 0xd2, 0x34, 0xad, + 0xa2, 0xff, 0x52, 0x4d, 0xab, 0x1a, 0x7d, 0xc9, 0xe0, 0xaf, 0xb3, 0xbf, + 0xd3, 0xa5, 0x9e, 0x2d, + 0x1f, 0x7a, 0x2e, 0xcc, 0xfe, 0xdd, 0x39, 0xac, 0xe0, 0x36, 0xa0, 0x2f, + 0x56, 0x65, 0xdc, 0xb7, + 0x38, 0x29, 0x08, 0x6e, 0x84, 0xd8, 0xc3, 0x78, 0x45, 0x3a, 0x5f, 0xb5, + 0x75, 0xf0, 0xc7, 0x06, + 0xd1, 0x73, 0xf9, 0x0b, 0xfa, 0xfb, 0x43, 0xca, 0xf7, 0x07, 0xe3, 0x9b, + 0x38, 0xd2, 0x83, 0xf3, + 0x4d, 0xe0, 0xef, 0x9a, 0x1c, 0xce, 0x3e, 0xde, 0x70, 0x6a, 0xd7, 0x68, + 0xef, 0x99, 0x31, 0x9c, + 0x71, 0x62, 0xfc, 0xe5, 0xd7, 0x34, 0xbe, 0x49, 0x7e, 0x7a, 0x4e, 0x16, + 0xe0, 0x5f, 0x60, 0xae, + 0x7c, 0x78, 0x7b, 0xd9, 0x43, 0xac, 0x79, 0xf1, 0x7a, 0xf8, 0x26, 0x19, + 0x8c, 0xd7, 0xc0, 0xfa, + 0xd7, 0xfc, 0xf0, 0x4d, 0x62, 0x6d, 0x69, 0xb9, 0x69, 0xd6, 0xba, 0xb9, + 0xf7, 0x67, 0x6b, 0xf5, + 0x40, 0x7b, 0x66, 0x72, 0xa4, 0x49, 0x01, 0xae, 0x2f, 0x62, 0x3c, 0xcf, + 0x7a, 0x18, 0x83, 0xf6, + 0xeb, 0xa9, 0xc9, 0x06, 0x77, 0x8f, 0xa3, 0x5f, 0x1f, 0x97, 0xe1, 0x47, + 0x2a, 0xc3, 0x40, 0x88, + 0x6d, 0x19, 0x3f, 0x81, 0xf9, 0x50, 0x69, 0xf9, 0x5a, 0xcf, 0x85, 0x77, + 0x2f, 0x1e, 0xd6, 0xf2, + 0x7a, 0x79, 0xc1, 0xb5, 0xea, 0xe1, 0x7a, 0xcc, 0x6c, 0x40, 0x9f, 0x7e, + 0x53, 0x78, 0x72, 0xdb, + 0x54, 0xcb, 0x61, 0xd9, 0x62, 0x0c, 0xd5, 0x75, 0x13, 0x3f, 0x3a, 0xf8, + 0x99, 0xc5, 0x99, 0xc3, + 0x63, 0xcd, 0x81, 0x75, 0xea, 0xa3, 0xf4, 0x5d, 0x1b, 0x49, 0x8c, 0x43, + 0xe3, 0xbe, 0x61, 0x1d, + 0xf8, 0x47, 0xf4, 0xf5, 0xf7, 0xc7, 0x86, 0x2b, 0xdf, 0xcf, 0xe2, 0x30, + 0x4d, 0xe7, 0x2b, 0xc3, + 0x9b, 0x6f, 0x32, 0xc6, 0x07, 0xdf, 0x44, 0xd4, 0xa7, 0xf3, 0x15, 0x65, + 0xd3, 0x5f, 0x07, 0x0c, + 0x5b, 0x1f, 0xaf, 0xa6, 0x97, 0x13, 0x97, 0x13, 0x8c, 0x6f, 0xa2, 0x61, + 0x91, 0x1a, 0x84, 0x6f, + 0xc2, 0xfa, 0x78, 0xff, 0x01, 0xda, 0x35, 0x3e, 0xf9, 0x26, 0x63, 0x6b, + 0xf1, 0x4d, 0x7c, 0xf5, + 0x39, 0xb8, 0xf3, 0x7a, 0xf1, 0x7f, 0x5d, 0x2f, 0xbb, 0xff, 0x9e, 0x55, + 0x7f, 0xd7, 0x46, 0x0f, + 0xdf, 0x44, 0xe3, 0xca, 0x7b, 0xf1, 0x4d, 0x6a, 0xeb, 0x6a, 0xba, 0xbf, + 0x0b, 0xbb, 0x9e, 0xf9, + 0x3a, 0x37, 0xfa, 0xb3, 0x7e, 0x97, 0x39, 0x1b, 0x07, 0x6a, 0xe8, 0x97, + 0xbf, 0x62, 0x98, 0x4b, + 0xef, 0xb4, 0x67, 0xff, 0xa0, 0xfd, 0x2a, 0xd6, 0xd8, 0xa0, 0xfa, 0x7a, + 0x71, 0x2c, 0xaf, 0x17, + 0xec, 0xef, 0xc4, 0x66, 0xf0, 0x16, 0xa6, 0x8d, 0x8c, 0x93, 0x18, 0x8f, + 0xcb, 0x35, 0x47, 0x23, + 0x63, 0x74, 0xc6, 0x08, 0xb6, 0x35, 0x3c, 0x2c, 0x70, 0xf5, 0x9f, 0xc5, + 0xc2, 0x6b, 0xb1, 0xbc, + 0x5e, 0xe0, 0x73, 0x48, 0xd3, 0xb4, 0xfa, 0x7b, 0x67, 0x50, 0xd6, 0xd1, + 0x65, 0xf7, 0xa3, 0xe7, + 0xa2, 0x69, 0x04, 0x67, 0x0e, 0x0b, 0xa4, 0xe7, 0x12, 0x4a, 0xac, 0x1a, + 0xa7, 0x47, 0xf3, 0x34, + 0xd4, 0x3e, 0xde, 0xf0, 0xcd, 0xe5, 0xd4, 0x62, 0x97, 0x24, 0xd9, 0x9b, + 0x6f, 0x92, 0xe9, 0xab, + 0x86, 0x34, 0x2a, 0xcb, 0xc3, 0x95, 0x0f, 0xc0, 0x37, 0xf9, 0x9f, 0x69, + 0x5a, 0xd5, 0xcc, 0xf7, + 0xd7, 0x9c, 0x1f, 0xec, 0xe5, 0xef, 0xbb, 0xf8, 0x26, 0xfe, 0xeb, 0xe1, + 0x21, 0x69, 0xd5, 0x87, + 0x4b, 0xd3, 0x2a, 0xb0, 0x46, 0xc5, 0x25, 0xbe, 0x49, 0x51, 0x6d, 0xbe, + 0x49, 0x4d, 0x3d, 0x17, + 0x17, 0x57, 0x3e, 0x46, 0x27, 0x2f, 0x3c, 0x04, 0x4d, 0xea, 0xe0, 0x35, + 0x2f, 0xad, 0x67, 0x35, + 0x68, 0x5e, 0x8f, 0xf5, 0xe5, 0x40, 0x6c, 0x50, 0x83, 0x6f, 0x32, 0xd6, + 0x13, 0xeb, 0x7b, 0xae, + 0xb7, 0xf1, 0x86, 0x04, 0xc0, 0x49, 0x77, 0x8d, 0xa1, 0xc6, 0xdf, 0xbd, + 0xdb, 0xa2, 0x41, 0xf7, + 0x0d, 0x5a, 0x3c, 0xe3, 0x3e, 0x6f, 0xfd, 0xd3, 0x47, 0x3f, 0x8d, 0x78, + 0x39, 0x28, 0x0f, 0xcd, + 0xaa, 0xb3, 0x5f, 0x2f, 0x58, 0xbf, 0x0a, 0xcb, 0xeb, 0xc1, 0xf1, 0xbe, + 0x14, 0x13, 0x45, 0x55, + 0x6b, 0xc7, 0x33, 0xfc, 0x60, 0x3e, 0x13, 0xdb, 0x0c, 0x0f, 0x99, 0x46, + 0x70, 0x52, 0xa0, 0x9e, + 0x2d, 0xad, 0x97, 0x3d, 0x4b, 0xa7, 0x0d, 0xe8, 0x9c, 0xb7, 0xe8, 0xb8, + 0x82, 0xdc, 0x76, 0x0d, + 0x1d, 0xfc, 0x8c, 0x11, 0x01, 0xe7, 0x07, 0xbb, 0x3f, 0x8b, 0x2e, 0x5d, + 0x76, 0xf7, 0xdc, 0x4b, + 0x4f, 0xdd, 0xd7, 0x5d, 0x17, 0x20, 0x81, 0xf2, 0x7a, 0xe1, 0x3b, 0x26, + 0x99, 0xfe, 0x8f, 0x89, + 0x30, 0x9d, 0x7c, 0x22, 0x4e, 0x21, 0x53, 0xc4, 0xc9, 0x64, 0x8a, 0xc4, + 0x6e, 0x6b, 0x6d, 0x8b, + 0x6b, 0x4f, 0x95, 0xa6, 0x62, 0xb6, 0x3f, 0x93, 0xbe, 0xc7, 0x97, 0xf8, + 0x26, 0x89, 0x7e, 0xf9, + 0x26, 0x71, 0xe1, 0xc6, 0x85, 0x2b, 0xd5, 0xf3, 0xf1, 0xea, 0x4b, 0xae, + 0x8e, 0xf5, 0x03, 0xd4, + 0xc3, 0x23, 0xd5, 0x10, 0x78, 0x3f, 0x7f, 0xab, 0x76, 0x8d, 0xa6, 0x49, + 0x3d, 0x32, 0xd5, 0x1e, + 0x84, 0x6f, 0x02, 0xf8, 0xc1, 0x70, 0x11, 0xde, 0x13, 0x85, 0x31, 0x7e, + 0xff, 0x2b, 0xb4, 0x6b, + 0x5c, 0x31, 0xa5, 0xa7, 0xcf, 0xa9, 0x38, 0x4b, 0xc3, 0x0e, 0xed, 0xfa, + 0x04, 0xbe, 0x94, 0xeb, + 0x1c, 0xf3, 0xcc, 0xeb, 0x76, 0xbd, 0x6e, 0x53, 0x4f, 0x0f, 0xb4, 0x3b, + 0xef, 0xc7, 0x34, 0xec, + 0x83, 0xe6, 0xf5, 0xd4, 0x14, 0x63, 0xaa, 0x35, 0xf8, 0x6c, 0x46, 0x96, + 0x0b, 0x0a, 0x96, 0xdb, + 0x09, 0x94, 0xd7, 0x73, 0xf9, 0xeb, 0x2e, 0x0d, 0x14, 0x86, 0x6b, 0x2e, + 0xde, 0xae, 0xfb, 0xef, + 0xa2, 0x5d, 0xa3, 0x12, 0x6a, 0x6a, 0x98, 0x00, 0x76, 0x66, 0x14, 0x5f, + 0x59, 0x5e, 0x6f, 0xba, + 0xf8, 0x89, 0x66, 0xab, 0x93, 0xc5, 0xc9, 0x74, 0x0a, 0xb3, 0x53, 0xcb, + 0x14, 0x5c, 0xc7, 0x8e, + 0xab, 0xf7, 0xa7, 0x64, 0x3a, 0x1c, 0x6f, 0x3d, 0x5a, 0xf5, 0xda, 0xb5, + 0x11, 0x7c, 0x00, 0x9f, + 0xf3, 0x83, 0xbd, 0xfc, 0xf5, 0x04, 0x5d, 0xbd, 0xec, 0x2e, 0xee, 0x5b, + 0xa4, 0x1b, 0xff, 0x98, + 0x06, 0x42, 0x8c, 0x1c, 0x85, 0xa2, 0x5c, 0xda, 0xcf, 0x35, 0xb1, 0x30, + 0x34, 0x5c, 0xd0, 0x39, + 0x97, 0xd3, 0x0f, 0x2e, 0x88, 0x0a, 0xbd, 0xdb, 0xfe, 0x3c, 0x7d, 0xde, + 0xe6, 0xda, 0xcf, 0xd9, + 0x9e, 0x0b, 0xb8, 0xfb, 0x5a, 0x25, 0xea, 0x9b, 0x6f, 0x52, 0xf3, 0x1a, + 0x97, 0xa8, 0xd3, 0x5f, + 0x08, 0xb3, 0x76, 0x8d, 0x8e, 0xbc, 0x9e, 0xab, 0x2f, 0x27, 0x9e, 0xe9, + 0xf1, 0x06, 0xe2, 0x9b, + 0xd8, 0xd3, 0x47, 0xb9, 0x6b, 0x0c, 0xe4, 0x8a, 0x79, 0x3f, 0x7a, 0xb5, + 0x6b, 0xec, 0x1a, 0x2e, + 0x84, 0xd6, 0xaf, 0xe7, 0x95, 0x5f, 0xab, 0x3b, 0xdf, 0x04, 0x62, 0x97, + 0x00, 0x7a, 0x2e, 0x97, + 0x51, 0x0b, 0xe7, 0x75, 0xf6, 0xac, 0x06, 0xad, 0x79, 0xf9, 0xce, 0x6d, + 0x7b, 0xeb, 0xe0, 0xa7, + 0xe6, 0x30, 0x0d, 0x14, 0x16, 0x4f, 0x6a, 0x3a, 0xf8, 0xce, 0xe4, 0x1c, + 0x0d, 0x3b, 0x20, 0xd6, + 0x8f, 0xf9, 0xda, 0xc5, 0xe3, 0xf5, 0x70, 0x76, 0x6f, 0xff, 0x28, 0x6e, + 0x50, 0xb0, 0xf7, 0x8c, + 0xb5, 0xa5, 0x1a, 0x52, 0x74, 0xf5, 0xeb, 0xa5, 0x8d, 0x8c, 0xd1, 0x31, + 0x83, 0x32, 0x23, 0x5f, + 0xc7, 0x0c, 0x4a, 0x96, 0xd7, 0x73, 0xba, 0xe7, 0x9b, 0x30, 0x1c, 0x1c, + 0xeb, 0x9a, 0x71, 0x92, + 0x31, 0xda, 0xab, 0x2f, 0x59, 0x8a, 0xe5, 0x33, 0x8b, 0xaf, 0x2c, 0xaf, + 0xa7, 0x58, 0xef, 0xae, + 0xb6, 0xdf, 0xe7, 0x83, 0xd8, 0xef, 0x73, 0xf6, 0xbe, 0x54, 0x52, 0x42, + 0x99, 0xab, 0xe6, 0x8a, + 0x1b, 0x83, 0xf2, 0x4d, 0x1c, 0x41, 0xf8, 0x26, 0x66, 0x86, 0x7f, 0x71, + 0x46, 0x8f, 0x0d, 0x78, + 0x6b, 0x3f, 0x33, 0x1d, 0xfc, 0x1a, 0x71, 0x18, 0xeb, 0xe3, 0x1d, 0x1b, + 0x3c, 0x8e, 0x88, 0x0a, + 0xc7, 0x5c, 0x4e, 0x73, 0x31, 0x7d, 0xdd, 0x6a, 0xa4, 0x46, 0x95, 0x6d, + 0x03, 0x31, 0xa8, 0x06, + 0xea, 0xda, 0xb9, 0x24, 0x57, 0xcd, 0xa5, 0xae, 0x3d, 0x8a, 0x8e, 0x72, + 0xef, 0x97, 0x94, 0x22, + 0xc2, 0xde, 0xd3, 0x6f, 0x7e, 0xcd, 0x1d, 0x87, 0xb1, 0xf7, 0x0c, 0xca, + 0x95, 0xd7, 0xa9, 0x55, + 0x1f, 0x4a, 0x5f, 0x8e, 0xde, 0x7c, 0xbf, 0x1e, 0xbe, 0x09, 0xb3, 0x65, + 0x56, 0x0f, 0xf3, 0xa9, + 0xe7, 0x12, 0x0a, 0xef, 0x47, 0x0e, 0xaf, 0x76, 0x8d, 0xdf, 0x9a, 0x97, + 0x77, 0x5f, 0x72, 0x91, + 0xcf, 0xb9, 0x55, 0x75, 0xfa, 0x1c, 0xf4, 0x69, 0xd5, 0xc7, 0x04, 0xce, + 0xeb, 0x85, 0x5c, 0xf3, + 0xca, 0xd2, 0x95, 0xdb, 0x66, 0xf8, 0xc7, 0x7a, 0x56, 0x18, 0x16, 0x32, + 0x0c, 0x64, 0x1a, 0xa1, + 0x4c, 0x1f, 0x34, 0x79, 0x42, 0xd7, 0xb7, 0xaa, 0xf9, 0x1b, 0xcb, 0x6f, + 0xbb, 0x27, 0x59, 0x07, + 0x0f, 0x37, 0xc1, 0x91, 0x36, 0x2a, 0x38, 0x0f, 0x37, 0x16, 0xb3, 0xba, + 0x6e, 0x50, 0x4e, 0x2c, + 0xeb, 0xd7, 0x73, 0xea, 0xe9, 0xd7, 0xd3, 0xb4, 0xea, 0xb9, 0xea, 0xfc, + 0x9a, 0xbb, 0x1e, 0x9e, + 0xed, 0x89, 0x3f, 0xdc, 0x3d, 0x5b, 0xda, 0x1c, 0x17, 0x35, 0xce, 0x10, + 0x48, 0xc3, 0x44, 0xeb, + 0x65, 0xf7, 0x93, 0xc3, 0x2a, 0x56, 0x5e, 0x77, 0xdb, 0xaf, 0xd1, 0xcb, + 0x7e, 0x0d, 0x5e, 0xf6, + 0x9b, 0x5b, 0x6d, 0xbf, 0xa3, 0xd4, 0x97, 0x68, 0xa1, 0x12, 0xca, 0xbc, + 0xc5, 0x18, 0xdf, 0x7c, + 0x13, 0x35, 0x10, 0xdf, 0x24, 0xce, 0xcd, 0x37, 0xf1, 0xfa, 0x2e, 0xa2, + 0xc6, 0x7d, 0x33, 0x7a, + 0xce, 0xbb, 0x68, 0x35, 0x96, 0x67, 0xf1, 0xb0, 0x86, 0x83, 0x4c, 0xff, + 0xd9, 0x3b, 0x0e, 0x53, + 0xe3, 0x8d, 0xec, 0x98, 0x04, 0xad, 0x3d, 0x32, 0x4d, 0xab, 0xfc, 0x2b, + 0xc4, 0x05, 0xd3, 0x38, + 0xfa, 0x96, 0x8a, 0x29, 0x52, 0x11, 0xdb, 0x04, 0x29, 0x88, 0xf2, 0x2a, + 0xcf, 0x36, 0x61, 0xb7, + 0x9c, 0xca, 0xb1, 0x4d, 0xdc, 0xc7, 0x97, 0xbe, 0xa6, 0x8c, 0x21, 0x5e, + 0xfe, 0x82, 0x7f, 0xbe, + 0xc9, 0x98, 0x6c, 0x6d, 0x96, 0x7a, 0x20, 0xbe, 0x89, 0xde, 0xbc, 0x5e, + 0x5c, 0x08, 0xda, 0x35, + 0x57, 0x90, 0xef, 0x27, 0x21, 0xf2, 0x4d, 0xf4, 0xf3, 0x7e, 0x74, 0xf6, + 0x07, 0x24, 0x84, 0xa0, + 0x69, 0x15, 0xac, 0xe6, 0x15, 0x6d, 0x73, 0xc7, 0x2e, 0xfe, 0xf4, 0x5c, + 0xec, 0xae, 0x38, 0x2c, + 0xb1, 0x40, 0xbf, 0xcf, 0xac, 0xcf, 0x5f, 0x08, 0x57, 0xcd, 0x2b, 0x16, + 0x31, 0xcc, 0xd6, 0xce, + 0x0d, 0x96, 0x93, 0xaa, 0x35, 0x13, 0xe4, 0xa6, 0xc5, 0x83, 0xee, 0x63, + 0xf8, 0x77, 0xe3, 0x07, + 0x49, 0x6f, 0x25, 0xdb, 0xe2, 0x73, 0x5d, 0xf1, 0xb1, 0xbf, 0x7a, 0x56, + 0x24, 0x49, 0x82, 0xb8, + 0x36, 0x38, 0x0f, 0xd7, 0x95, 0xd7, 0x0b, 0xde, 0xaf, 0x97, 0x9e, 0x9b, + 0xa9, 0x47, 0x97, 0xdd, + 0x57, 0x5e, 0x8f, 0xe9, 0xb9, 0x78, 0xf7, 0x25, 0x8f, 0x0d, 0x9e, 0x5f, + 0x73, 0xe7, 0xf5, 0xfc, + 0xea, 0xb2, 0x8f, 0x93, 0xdf, 0xa2, 0x58, 0x71, 0xdb, 0xaf, 0x66, 0xc3, + 0xbc, 0x97, 0x0d, 0x73, + 0x6e, 0x1b, 0x36, 0xba, 0x6d, 0xf8, 0x35, 0x5a, 0x6c, 0x0d, 0x57, 0x6e, + 0x9b, 0xc5, 0x1e, 0xf1, + 0x1c, 0x3b, 0xbf, 0xb4, 0x5c, 0xa1, 0xcf, 0x9c, 0x92, 0xbb, 0x6e, 0xe2, + 0xc5, 0x7d, 0xf3, 0x3e, + 0x16, 0x4c, 0xfb, 0x99, 0xe9, 0x62, 0x55, 0xfb, 0x51, 0x5a, 0x3d, 0x2c, + 0x63, 0x38, 0xe3, 0xca, + 0x07, 0xd2, 0x73, 0xa9, 0x3e, 0x26, 0xc1, 0x62, 0x97, 0x60, 0xfd, 0xfd, + 0xa6, 0x0f, 0xe8, 0x10, + 0xd5, 0x44, 0x4d, 0x8a, 0x6b, 0x0b, 0x8a, 0xc0, 0x36, 0x71, 0x6d, 0x4a, + 0xa8, 0x42, 0x28, 0x51, + 0x61, 0xc3, 0x2d, 0x06, 0x9c, 0x7c, 0x4b, 0x79, 0x9f, 0xf8, 0x3e, 0x26, + 0x5e, 0x3a, 0xf8, 0x7a, + 0xf9, 0x26, 0xea, 0xff, 0x68, 0x36, 0x6d, 0x50, 0x9f, 0x59, 0xeb, 0xb5, + 0x1f, 0x99, 0x9e, 0x97, + 0x94, 0x93, 0x1a, 0x90, 0x6f, 0x02, 0xb1, 0x4b, 0xb8, 0x38, 0x2e, 0xba, + 0x35, 0x2a, 0xe2, 0xf5, + 0xcf, 0xa0, 0x74, 0xc5, 0xd2, 0x01, 0xf9, 0x26, 0x69, 0x1a, 0x57, 0xde, + 0xc5, 0x37, 0x89, 0xf4, + 0xc7, 0x37, 0x09, 0xa7, 0x26, 0xb5, 0xfe, 0xd9, 0xb4, 0x7c, 0x66, 0x41, + 0x4a, 0x9d, 0x6b, 0x63, + 0x35, 0x57, 0x0d, 0xae, 0xb9, 0x6d, 0xc6, 0xa6, 0x0d, 0x4e, 0x71, 0xb2, + 0x9e, 0xe4, 0x94, 0x9c, + 0x64, 0xf7, 0x8c, 0x24, 0xc6, 0x57, 0x73, 0xf5, 0xe2, 0x79, 0x61, 0x21, + 0xe3, 0x0f, 0xc1, 0xdf, + 0x31, 0x28, 0x0f, 0x57, 0x4a, 0xe4, 0x32, 0xf2, 0x93, 0x82, 0xe6, 0x5f, + 0xd9, 0xec, 0xd7, 0x0c, + 0x9b, 0x8e, 0x7e, 0xbd, 0xe2, 0x20, 0x39, 0x2c, 0xf8, 0x2e, 0xac, 0xde, + 0xcc, 0x78, 0x02, 0x35, + 0xf2, 0x6b, 0x3e, 0xfc, 0x75, 0x2d, 0xb7, 0x6d, 0xf5, 0x3d, 0xe3, 0xec, + 0x03, 0x79, 0x48, 0xb5, + 0xfd, 0x9a, 0x5c, 0xf6, 0x5b, 0x6d, 0xc3, 0x54, 0xa1, 0x2e, 0xfb, 0xd5, + 0x6c, 0x18, 0x83, 0x0d, + 0xbf, 0x45, 0xc7, 0xd9, 0xd3, 0x8c, 0xe1, 0xd4, 0xa8, 0x70, 0xf5, 0xe5, + 0x04, 0xe6, 0x9b, 0x24, + 0xd8, 0xe2, 0x8c, 0x4c, 0xf3, 0x19, 0xfe, 0x2e, 0x3e, 0xeb, 0x1e, 0x2e, + 0xbd, 0xd4, 0xda, 0xbd, + 0x38, 0xde, 0xd7, 0xeb, 0xc4, 0x3a, 0x35, 0xa4, 0xb0, 0xf4, 0xf1, 0x9a, + 0x3e, 0x26, 0x39, 0x8a, + 0x42, 0x65, 0x45, 0xd6, 0xb6, 0xa4, 0x48, 0xee, 0x6d, 0xa1, 0x16, 0xd7, + 0x26, 0xa2, 0x22, 0x52, + 0xd7, 0x36, 0xd3, 0xa1, 0xca, 0x87, 0x24, 0xe8, 0x31, 0x11, 0xe3, 0x35, + 0x5c, 0x60, 0xd7, 0xea, + 0xf4, 0x40, 0x73, 0x26, 0x5d, 0x1c, 0xc4, 0x7f, 0xde, 0x6c, 0x5a, 0x4f, + 0xbe, 0x9f, 0xf9, 0xcc, + 0x7e, 0xf5, 0x5c, 0x5c, 0xf3, 0x3f, 0xb5, 0xd8, 0xc5, 0x63, 0x73, 0x7e, + 0x62, 0x17, 0x37, 0x2e, + 0xe8, 0xf2, 0xd3, 0xc3, 0x5a, 0xf3, 0xaa, 0x73, 0x6d, 0xac, 0xc5, 0x37, + 0xd1, 0xa1, 0xe7, 0x12, + 0x52, 0xfc, 0x1e, 0xce, 0x39, 0xac, 0x72, 0x72, 0x30, 0x4e, 0xac, 0xd6, + 0x97, 0x1c, 0x6f, 0x4f, + 0xc9, 0x65, 0x3d, 0xc8, 0x1a, 0x3f, 0x83, 0xcd, 0xd0, 0x28, 0x70, 0xf1, + 0x34, 0xe0, 0xbe, 0xdc, + 0xea, 0xeb, 0x2d, 0xd8, 0x96, 0x1e, 0x1e, 0x9a, 0x96, 0xd7, 0xcb, 0xd3, + 0x97, 0xd7, 0x4b, 0x0d, + 0x43, 0xcf, 0xaa, 0xbb, 0x7f, 0xde, 0xc8, 0x6c, 0xc0, 0x7b, 0x2e, 0xbc, + 0xcf, 0x39, 0x93, 0xcc, + 0x06, 0xac, 0xd1, 0x06, 0x5f, 0x79, 0x98, 0x8f, 0xe5, 0x1c, 0xa2, 0xc8, + 0xb2, 0xdb, 0x86, 0xa5, + 0x6a, 0x1b, 0xf6, 0xd8, 0xaf, 0xa5, 0xda, 0x7e, 0x45, 0x6a, 0x56, 0x87, + 0xd2, 0x09, 0xf6, 0x0c, + 0x63, 0x58, 0xe7, 0x2d, 0xd6, 0xba, 0x36, 0x56, 0xcf, 0x0f, 0xf6, 0xd2, + 0xc1, 0xf7, 0xe8, 0x3f, + 0xc7, 0xd9, 0xe3, 0x38, 0xa6, 0x83, 0x1f, 0xcc, 0xbf, 0x66, 0xe7, 0xb8, + 0x96, 0x2b, 0x18, 0x57, + 0xb3, 0x2f, 0xd1, 0xbb, 0x2f, 0x59, 0x97, 0x1e, 0x6f, 0x30, 0xad, 0x7a, + 0xd3, 0x67, 0x14, 0xc9, + 0x4e, 0xea, 0x94, 0x1d, 0xd4, 0x21, 0x3b, 0x88, 0x5d, 0xb6, 0x53, 0xbb, + 0x6c, 0xd3, 0xb6, 0x4d, + 0xb1, 0x52, 0xab, 0x0c, 0x5b, 0x51, 0xa9, 0x2a, 0xc3, 0x06, 0x9c, 0xcc, + 0x51, 0x26, 0x92, 0x64, + 0x9d, 0xb3, 0xe6, 0x5c, 0xe7, 0xa8, 0xef, 0xfc, 0x9a, 0x8b, 0x6f, 0x92, + 0x31, 0x82, 0xcd, 0x95, + 0x0f, 0xcc, 0x37, 0xf9, 0xdf, 0xcc, 0xa6, 0xf5, 0x99, 0xef, 0x17, 0x02, + 0xeb, 0xe0, 0xfb, 0x9a, + 0x1f, 0x1c, 0x76, 0x5c, 0x08, 0x41, 0xa3, 0x22, 0xe0, 0xb5, 0x51, 0xf0, + 0x70, 0xe5, 0xb3, 0x87, + 0xd5, 0xcc, 0x15, 0xd6, 0xd5, 0xc1, 0x8f, 0xb2, 0x82, 0x9f, 0xae, 0x23, + 0xcf, 0xac, 0xbb, 0x97, + 0x5d, 0xd7, 0x6c, 0xda, 0x54, 0x63, 0x70, 0x4e, 0x2c, 0x7c, 0x4f, 0x17, + 0x0f, 0x97, 0x8b, 0x12, + 0x01, 0x3f, 0x64, 0xad, 0xa6, 0x35, 0x8a, 0xf5, 0xe6, 0x69, 0xbd, 0xc9, + 0xd5, 0x7d, 0xc9, 0x09, + 0xb9, 0xec, 0x3e, 0x8d, 0x6f, 0x42, 0x03, 0xf1, 0x4d, 0x58, 0x5e, 0x2f, + 0x6e, 0x54, 0xf0, 0xd8, + 0x20, 0x6b, 0x44, 0x72, 0xd8, 0x34, 0x2a, 0xea, 0xe8, 0xb2, 0xd7, 0xd4, + 0x73, 0x19, 0x5b, 0x33, + 0x2e, 0xf4, 0xa5, 0xe7, 0xf2, 0x99, 0x84, 0xc0, 0x7e, 0x9d, 0xcc, 0x7e, + 0x61, 0xdb, 0x89, 0x5d, + 0xb1, 0x53, 0x1b, 0xd8, 0xb1, 0x4d, 0xb1, 0xb9, 0xec, 0x17, 0xb6, 0x66, + 0xbf, 0xb0, 0x15, 0x25, + 0x87, 0x7e, 0xec, 0xcc, 0x34, 0xf8, 0xc8, 0xeb, 0x5d, 0x66, 0x6f, 0x5a, + 0xe0, 0x6b, 0xa3, 0xa7, + 0x6e, 0x92, 0xe0, 0x70, 0xd7, 0x3b, 0xdc, 0x75, 0x8f, 0xa0, 0x3e, 0x8a, + 0x66, 0xa3, 0xae, 0x98, + 0x52, 0xf3, 0x29, 0x47, 0xd7, 0x9d, 0xd5, 0x90, 0xe6, 0xe6, 0xca, 0xfb, + 0xcd, 0xaf, 0xe9, 0xe9, + 0xef, 0x37, 0x4d, 0xa6, 0xa2, 0x3c, 0x9a, 0x8e, 0x96, 0x8b, 0x68, 0x51, + 0xf5, 0x2e, 0xa0, 0x05, + 0xd5, 0x3b, 0x9f, 0xe6, 0xcb, 0x79, 0x34, 0xcf, 0xbd, 0x91, 0xfc, 0x39, + 0xb9, 0xdc, 0x7e, 0xbd, + 0x3a, 0x7d, 0xc9, 0x63, 0x3d, 0xb8, 0x9e, 0x39, 0xdc, 0x3f, 0xdf, 0x24, + 0xcc, 0xb3, 0x69, 0xc3, + 0xd1, 0xc7, 0xeb, 0xee, 0x73, 0x88, 0x73, 0xa4, 0x69, 0xb1, 0x4b, 0xa0, + 0xf9, 0xc1, 0x0c, 0xd7, + 0x5d, 0xf9, 0xfe, 0x60, 0xb5, 0xf0, 0x98, 0x10, 0x34, 0xad, 0xc2, 0xa4, + 0x51, 0x01, 0xb1, 0x81, + 0x36, 0x6b, 0x0e, 0x7c, 0xa4, 0xc0, 0x7c, 0x93, 0xb4, 0x1c, 0xf6, 0x9e, + 0x01, 0xf9, 0x26, 0xba, + 0xfd, 0x05, 0x9d, 0xb8, 0x60, 0xd3, 0x91, 0x63, 0x73, 0xe7, 0xf5, 0xe2, + 0x6b, 0xcf, 0x66, 0x14, + 0xdd, 0xb9, 0x42, 0xaf, 0xbe, 0x64, 0xb6, 0xd3, 0x5c, 0x7d, 0xc9, 0x6e, + 0xcd, 0xb1, 0xba, 0xf5, + 0x70, 0x2d, 0xaf, 0xa7, 0xa3, 0x77, 0x4e, 0x7f, 0xbf, 0x9e, 0xce, 0x79, + 0x8b, 0x7e, 0x35, 0x2a, + 0x3c, 0x7d, 0xc9, 0xc9, 0x06, 0x76, 0x3e, 0x66, 0xf9, 0xd1, 0x73, 0x99, + 0x2c, 0x89, 0x60, 0xbf, + 0xa3, 0xbd, 0xec, 0xb7, 0xc8, 0xcb, 0x7e, 0x0b, 0xc0, 0x7e, 0xf3, 0xab, + 0xed, 0x37, 0x4f, 0x46, + 0xf4, 0x33, 0x67, 0x56, 0xee, 0x5f, 0x3d, 0x87, 0xb5, 0x6e, 0xfd, 0x3d, + 0x9e, 0x8b, 0x53, 0xa2, + 0xf8, 0x28, 0x29, 0x1a, 0xc5, 0xd8, 0xe2, 0xb8, 0xa0, 0xc7, 0xa4, 0xb6, + 0xbf, 0xc0, 0xf2, 0xa6, + 0x1e, 0x9f, 0xb2, 0xd6, 0xdc, 0x09, 0x7f, 0xf9, 0x35, 0x5d, 0xfd, 0xfd, + 0xa6, 0xaf, 0xe1, 0x5a, + 0xf1, 0x01, 0x19, 0x2f, 0x8d, 0xa7, 0xe3, 0xa5, 0xf7, 0xe9, 0xfb, 0x6c, + 0xcb, 0xe3, 0xc8, 0x38, + 0x69, 0x1c, 0x1d, 0x27, 0x8f, 0xa5, 0x63, 0x25, 0xd8, 0xf2, 0x18, 0x3a, + 0x46, 0xdb, 0xc5, 0x80, + 0x95, 0x93, 0x49, 0x18, 0x8e, 0x89, 0x56, 0x37, 0x61, 0x5c, 0x79, 0xf6, + 0xd9, 0xeb, 0xe6, 0xd7, + 0xbc, 0xf9, 0x26, 0x31, 0xba, 0xb8, 0xf2, 0x51, 0x61, 0xd7, 0xae, 0xd1, + 0xd9, 0xc7, 0x9b, 0x9f, + 0x10, 0x94, 0x6f, 0xa2, 0xe5, 0xf5, 0x54, 0x88, 0x5d, 0x84, 0x00, 0x73, + 0x6b, 0x42, 0xd1, 0xb4, + 0x0a, 0xb9, 0xbf, 0xdf, 0x6f, 0xbf, 0x9e, 0x4b, 0xab, 0xbe, 0x2e, 0xdf, + 0xc4, 0x58, 0x5b, 0x07, + 0x5f, 0xe3, 0x9b, 0x14, 0xf8, 0xd1, 0x73, 0xf9, 0x2b, 0x7a, 0xd9, 0xe1, + 0x7b, 0x06, 0xe5, 0xc4, + 0xc2, 0x7b, 0x32, 0xee, 0x85, 0xdf, 0xeb, 0x94, 0xa7, 0x2f, 0xd9, 0x01, + 0x31, 0x25, 0x9c, 0x57, + 0x97, 0xfa, 0x92, 0x5d, 0x3d, 0x35, 0x2e, 0xae, 0xeb, 0xa5, 0x9c, 0x52, + 0xac, 0x96, 0xd7, 0xd3, + 0x31, 0xb7, 0xbd, 0x38, 0xbc, 0xf3, 0x16, 0x83, 0xe7, 0xb6, 0x5d, 0x39, + 0x36, 0x56, 0x4b, 0xf0, + 0x95, 0x5f, 0xfb, 0x46, 0xb2, 0x91, 0x0f, 0xa4, 0xf1, 0x9a, 0x0d, 0xbf, + 0xef, 0xb2, 0x61, 0x97, + 0xfd, 0xc2, 0x1e, 0xeb, 0xb6, 0xe1, 0x31, 0x6e, 0x1b, 0x2e, 0x96, 0x45, + 0x3a, 0xd9, 0x99, 0x9d, + 0x1b, 0xb6, 0xde, 0x34, 0x9d, 0x3a, 0x2d, 0x09, 0xce, 0x78, 0x63, 0xec, + 0x25, 0xee, 0x1b, 0xb9, + 0xa2, 0x63, 0xc2, 0xe2, 0x6b, 0x6b, 0x92, 0x91, 0xe1, 0x46, 0x66, 0x0d, + 0xff, 0x38, 0xb3, 0x8e, + 0x0e, 0x7e, 0x50, 0x5c, 0x30, 0x4d, 0x27, 0xa3, 0xa5, 0x4f, 0xc9, 0xa7, + 0xd2, 0x27, 0xe4, 0x13, + 0xd8, 0x13, 0xa5, 0x89, 0x14, 0x36, 0xf9, 0x58, 0xfa, 0x98, 0x7e, 0x24, + 0x7d, 0xa4, 0xed, 0x0f, + 0xa5, 0x0f, 0xb5, 0x3d, 0x41, 0x9a, 0x40, 0xed, 0xd2, 0x37, 0x24, 0x26, + 0x3c, 0xf9, 0x7e, 0xca, + 0x6a, 0x0c, 0xac, 0x27, 0xab, 0xc6, 0xfc, 0xe0, 0x71, 0xb5, 0xae, 0x71, + 0x10, 0x87, 0xb1, 0xb8, + 0x1f, 0x62, 0x17, 0x3e, 0x60, 0xec, 0xf2, 0x3f, 0x98, 0x4d, 0x5b, 0x37, + 0xdf, 0xef, 0x27, 0xbf, + 0xe6, 0xe1, 0x9b, 0xe4, 0x05, 0xd0, 0x5f, 0x0c, 0x49, 0xd3, 0x2a, 0x8c, + 0xda, 0xb3, 0xfe, 0xaf, + 0x8d, 0xd5, 0x75, 0x93, 0x94, 0xa2, 0xac, 0x80, 0x7c, 0x13, 0x2d, 0x0e, + 0xd3, 0xe1, 0x33, 0x87, + 0xd4, 0xcb, 0x9e, 0x97, 0x99, 0x13, 0xb4, 0x16, 0x0e, 0xef, 0xc9, 0x8e, + 0x73, 0xb0, 0xf3, 0x31, + 0x02, 0xde, 0x93, 0xe5, 0x12, 0x2f, 0x69, 0xa0, 0x00, 0x0e, 0x7a, 0xfa, + 0x92, 0x8b, 0x5c, 0x31, + 0x25, 0xfb, 0x2e, 0xac, 0x4f, 0x36, 0xd5, 0xa5, 0x69, 0x4a, 0x02, 0xe2, + 0x42, 0x71, 0x78, 0x7b, + 0x56, 0x75, 0x6b, 0xd5, 0x0b, 0x97, 0xf8, 0x26, 0xde, 0x7a, 0x2e, 0x33, + 0xa4, 0xd1, 0x60, 0xbf, + 0x9f, 0x32, 0xfb, 0xa5, 0x9f, 0x80, 0xed, 0xba, 0x6c, 0xf8, 0x63, 0xb0, + 0xe1, 0x8f, 0xdc, 0x36, + 0xfc, 0xa1, 0xdb, 0x86, 0x27, 0xd0, 0x09, 0x10, 0x17, 0x7f, 0x03, 0xf8, + 0x97, 0x1c, 0x5c, 0x33, + 0x2a, 0x8c, 0x35, 0xaf, 0x48, 0x92, 0x98, 0x17, 0x6f, 0x08, 0x81, 0xfb, + 0x16, 0xfc, 0x98, 0x98, + 0x59, 0xec, 0x92, 0x39, 0x8c, 0xe5, 0x01, 0x02, 0xd5, 0x4d, 0x34, 0xae, + 0x65, 0x41, 0x82, 0xff, + 0xd8, 0xc5, 0x34, 0x9b, 0x4e, 0xb0, 0x4c, 0xa1, 0x93, 0xa5, 0x29, 0x64, + 0xb2, 0x65, 0x32, 0xdc, + 0x4e, 0x26, 0x5f, 0x48, 0x5f, 0xd0, 0x2f, 0xa5, 0x2f, 0xc8, 0x17, 0x96, + 0x49, 0x64, 0x92, 0xf4, + 0x39, 0x9d, 0x24, 0x4d, 0x22, 0x9f, 0x4b, 0x9f, 0x93, 0xcf, 0xa4, 0xcf, + 0xe8, 0x68, 0x69, 0x06, + 0x09, 0xd7, 0x31, 0xa9, 0xa3, 0x5d, 0x53, 0x5b, 0xcf, 0x65, 0xdc, 0xa5, + 0x18, 0x39, 0x18, 0xdf, + 0x24, 0x9c, 0x7d, 0xbc, 0x7a, 0x67, 0xd3, 0x06, 0xd4, 0xae, 0xf1, 0xc3, + 0x37, 0xf1, 0xa5, 0xe7, + 0xa2, 0xe1, 0x3a, 0xcb, 0xeb, 0xe9, 0x9e, 0xcf, 0x1c, 0x15, 0x26, 0xed, + 0x9a, 0x10, 0x66, 0x4a, + 0xd9, 0x63, 0x73, 0x83, 0xd5, 0x4d, 0xd8, 0x9c, 0xb2, 0xe0, 0x9c, 0x82, + 0x74, 0x9d, 0xba, 0x9b, + 0x59, 0x23, 0xf5, 0x68, 0xdd, 0xb1, 0xbc, 0x5e, 0x50, 0x9f, 0xd9, 0xca, + 0x62, 0xe9, 0xb8, 0x5a, + 0x7c, 0x13, 0xcd, 0xc7, 0xd5, 0xf8, 0x26, 0x1a, 0x47, 0x83, 0xc5, 0xfa, + 0xf0, 0xb3, 0xab, 0xb6, + 0xcf, 0xf4, 0x9f, 0xfd, 0xd4, 0xc3, 0xdd, 0xf9, 0xfe, 0xa8, 0xbf, 0x73, + 0x0e, 0xab, 0xe4, 0x3f, + 0x87, 0xc5, 0xf2, 0x6b, 0x73, 0x2c, 0x13, 0xc8, 0x14, 0x0b, 0xe3, 0x7e, + 0x4c, 0x66, 0x36, 0x4c, + 0x26, 0x33, 0xdb, 0x95, 0xbe, 0x04, 0xfb, 0xfd, 0xc2, 0x6d, 0xbb, 0x9a, + 0x1d, 0xc3, 0xed, 0x67, + 0x60, 0xc3, 0xa3, 0xe9, 0x0c, 0xc0, 0xbf, 0x84, 0xbf, 0xb9, 0x67, 0x35, + 0x29, 0x3f, 0xde, 0x10, + 0x65, 0x0e, 0xfc, 0x5a, 0x97, 0x93, 0xef, 0xf7, 0xfe, 0x7c, 0x2c, 0xa6, + 0x74, 0xe9, 0x9d, 0x7a, + 0xd7, 0x4d, 0xd8, 0x79, 0xea, 0xe1, 0xde, 0xf8, 0x98, 0x1f, 0x6c, 0x9a, + 0x4f, 0x27, 0x59, 0xbe, + 0x23, 0xdf, 0x59, 0xbe, 0xa5, 0xdf, 0x6a, 0x7b, 0x1a, 0x9d, 0x66, 0x99, + 0x46, 0xbe, 0xb1, 0x7c, + 0x43, 0x61, 0x93, 0xaf, 0x2d, 0x5f, 0xc3, 0xfe, 0x8a, 0x4e, 0xb5, 0x7c, + 0x45, 0xa6, 0x5a, 0xa6, + 0xd2, 0x0f, 0xc5, 0x65, 0xe4, 0x3c, 0x0d, 0xba, 0x88, 0x7b, 0x5f, 0xe9, + 0xe3, 0x88, 0x8e, 0x1d, + 0xca, 0x7b, 0x92, 0x10, 0x1f, 0x17, 0x8e, 0xef, 0x49, 0x42, 0xdc, 0xe1, + 0x7c, 0xcf, 0xbf, 0xea, + 0xef, 0x74, 0x25, 0xdf, 0xc3, 0xc7, 0xef, 0x7f, 0x86, 0x75, 0x0e, 0xd6, + 0x59, 0x7a, 0x86, 0x9e, + 0xa6, 0x3f, 0xd1, 0x93, 0xf4, 0x38, 0x3d, 0x4a, 0x8e, 0xd2, 0xc3, 0xf4, + 0x20, 0xad, 0xa2, 0x7b, + 0x69, 0x25, 0x2d, 0xa7, 0x65, 0x74, 0x17, 0xdd, 0x4e, 0xb7, 0xd2, 0xcd, + 0x74, 0x13, 0xdd, 0x48, + 0x37, 0xd0, 0xf5, 0x9e, 0x45, 0x36, 0xc0, 0xff, 0x36, 0xc1, 0xda, 0x0c, + 0xbf, 0xdd, 0x46, 0x77, + 0xc0, 0xe3, 0xca, 0xe8, 0x6e, 0x5a, 0x41, 0xf7, 0xc0, 0x33, 0xab, 0xe8, + 0x7e, 0x78, 0x8d, 0x43, + 0xe4, 0x30, 0x3d, 0x42, 0x8e, 0xd0, 0xa3, 0xd5, 0xeb, 0xd8, 0xa5, 0x45, + 0x8e, 0xd3, 0xe3, 0xb0, + 0x4f, 0x90, 0x13, 0xb0, 0x4f, 0xd2, 0x93, 0xb0, 0x7f, 0x22, 0x3f, 0xd1, + 0x53, 0xe4, 0x14, 0x3d, + 0x4d, 0x4e, 0xd3, 0x33, 0xe4, 0x0c, 0x3d, 0x4b, 0xce, 0xc2, 0x67, 0x3b, + 0xe7, 0x5a, 0x04, 0x3e, + 0x2d, 0xdb, 0xee, 0xf5, 0xb7, 0x9e, 0x43, 0x3e, 0xd7, 0x2a, 0xf0, 0x53, + 0xbe, 0xb3, 0x7c, 0xe7, + 0xb6, 0xdf, 0x6f, 0x99, 0xfd, 0xc2, 0xfe, 0xc6, 0x6d, 0xc3, 0x5f, 0x6b, + 0x36, 0xfc, 0x15, 0xd8, + 0x2e, 0x6c, 0xb0, 0xe1, 0x0f, 0xc9, 0x1c, 0xc0, 0xbf, 0x70, 0xea, 0x37, + 0xe9, 0xe9, 0x65, 0x4f, + 0x2e, 0x88, 0xcf, 0x0d, 0xa6, 0xf9, 0x1c, 0x62, 0xbe, 0x3f, 0x40, 0x1d, + 0xf0, 0x52, 0xdd, 0xa4, + 0x46, 0xae, 0x70, 0xac, 0x8f, 0xfc, 0x9a, 0x69, 0x09, 0x1c, 0xa7, 0x39, + 0x74, 0x8e, 0x38, 0x87, + 0xce, 0xb6, 0xcc, 0xa6, 0xb3, 0xc5, 0x59, 0x74, 0x96, 0x05, 0xb6, 0x38, + 0x93, 0xce, 0x84, 0xfd, + 0xbd, 0xe5, 0x7b, 0xd8, 0x33, 0xe8, 0x0c, 0xd8, 0xd3, 0x2d, 0xd3, 0xe9, + 0x24, 0x71, 0x35, 0xbd, + 0x78, 0x75, 0x5d, 0x5d, 0x61, 0x5e, 0x7f, 0xc2, 0xfa, 0x83, 0xfe, 0x97, + 0xfe, 0x87, 0xfe, 0x4e, + 0x2f, 0xd0, 0xdf, 0xe8, 0x2f, 0x60, 0xd7, 0xe7, 0xdc, 0x68, 0x78, 0x02, + 0x50, 0xea, 0x08, 0x3d, + 0x44, 0x0f, 0x68, 0x58, 0xb8, 0x07, 0x90, 0xad, 0x1c, 0xf0, 0xad, 0xac, + 0x7a, 0xed, 0x86, 0xff, + 0x57, 0x00, 0x46, 0xee, 0xa1, 0xfb, 0xe0, 0x11, 0x07, 0x00, 0xef, 0x00, + 0xed, 0xe0, 0x39, 0x27, + 0x00, 0x47, 0x01, 0xc3, 0xe0, 0x55, 0x18, 0x76, 0xb9, 0x90, 0xea, 0x17, + 0xf7, 0xfa, 0xb5, 0xc6, + 0xfa, 0xcd, 0xbd, 0x2e, 0x68, 0xeb, 0x77, 0x6d, 0xfd, 0x07, 0xd6, 0x7f, + 0xb5, 0xf5, 0x87, 0x7b, + 0xfd, 0x59, 0x63, 0xfd, 0x73, 0x8e, 0xdd, 0x06, 0xf1, 0x1b, 0x3a, 0x47, + 0xb3, 0x61, 0x66, 0xbf, + 0xb3, 0xdd, 0xf6, 0x3b, 0x8b, 0xce, 0xb4, 0x30, 0x1b, 0xfe, 0x5e, 0xb3, + 0xe1, 0x19, 0x9a, 0x0d, + 0x4f, 0x07, 0x1b, 0x9e, 0x44, 0x4b, 0x1c, 0x99, 0x86, 0x24, 0x35, 0xd6, + 0xaf, 0x9e, 0xcb, 0xa5, + 0x5e, 0xf6, 0x84, 0xb0, 0xcd, 0x5b, 0x4c, 0xc9, 0x8f, 0xcf, 0x0d, 0x16, + 0x37, 0x86, 0xd2, 0xdf, + 0x1f, 0x8a, 0xce, 0x57, 0x9a, 0x23, 0x7e, 0x54, 0x52, 0x9d, 0x79, 0xdd, + 0xee, 0x38, 0xcc, 0xba, + 0xd2, 0x38, 0x4b, 0x5c, 0x44, 0x16, 0x89, 0x0b, 0xc9, 0x42, 0x71, 0x21, + 0x5d, 0x20, 0x96, 0x68, + 0xbb, 0x44, 0xdb, 0xf3, 0xe9, 0x7c, 0x71, 0x3e, 0x99, 0x27, 0xce, 0x83, + 0x3d, 0x97, 0xce, 0x15, + 0xe7, 0x92, 0x6f, 0xc4, 0x35, 0xe4, 0x13, 0x7a, 0x75, 0x5d, 0x5d, 0xe1, + 0x5d, 0x13, 0xdd, 0xeb, + 0x63, 0xfa, 0x11, 0xac, 0x0f, 0xe9, 0x04, 0xfa, 0x01, 0xac, 0xf7, 0x61, + 0x8d, 0xa3, 0x63, 0x60, + 0x8d, 0xa6, 0x45, 0xb4, 0x90, 0x16, 0xd0, 0x7c, 0x9a, 0x07, 0xcb, 0x49, + 0x1d, 0x35, 0x96, 0x13, + 0x56, 0x1e, 0xfc, 0xae, 0x00, 0x56, 0x21, 0x3c, 0x72, 0x34, 0x2d, 0x86, + 0xe7, 0x8c, 0x85, 0xe7, + 0xb2, 0x57, 0x18, 0xaf, 0xbd, 0xd6, 0x04, 0x58, 0x1f, 0xd6, 0x59, 0x1f, + 0xf9, 0x5c, 0x1f, 0x6b, + 0x6b, 0xa2, 0xcf, 0xf5, 0xcf, 0x3b, 0x76, 0x1b, 0xcc, 0xb3, 0xe8, 0x22, + 0xb0, 0x61, 0x66, 0xbf, + 0x0b, 0xc5, 0x05, 0x60, 0xb7, 0x0b, 0xdc, 0xf6, 0x5b, 0xc2, 0xec, 0x17, + 0xf6, 0x3c, 0xcd, 0x86, + 0x99, 0xfd, 0xce, 0x05, 0xac, 0x5c, 0x0a, 0xfe, 0x1f, 0x8b, 0xf7, 0x03, + 0xf1, 0x4d, 0x42, 0xc9, + 0x61, 0xe9, 0x99, 0xc3, 0x9a, 0x92, 0x17, 0x17, 0x54, 0x7b, 0xb6, 0x46, + 0x1f, 0x6f, 0x18, 0x67, + 0x58, 0x54, 0xd7, 0x01, 0x59, 0xde, 0x54, 0xd3, 0x1c, 0xf2, 0xaa, 0x53, + 0x3a, 0xd7, 0xe6, 0x2e, + 0x14, 0x57, 0xd2, 0x95, 0xe6, 0x95, 0x64, 0x85, 0xb8, 0x82, 0xae, 0x30, + 0x2f, 0x27, 0xcb, 0xc5, + 0xe5, 0x64, 0x99, 0xb8, 0x8c, 0x2e, 0x13, 0x97, 0x92, 0xa5, 0xb0, 0x97, + 0x88, 0x4b, 0x28, 0x6c, + 0xb2, 0x58, 0x5c, 0x0c, 0xd7, 0x97, 0x15, 0xc1, 0xbf, 0xc3, 0xd5, 0x75, + 0x75, 0x5d, 0x5d, 0x7f, + 0xdb, 0xfa, 0xd1, 0xbc, 0x90, 0xae, 0x14, 0x57, 0x92, 0x95, 0xe6, 0x15, + 0x64, 0x05, 0x6c, 0xb0, + 0x5f, 0xba, 0x5c, 0x5c, 0xc6, 0x6c, 0x98, 0xd9, 0x2f, 0x5d, 0x0a, 0xb6, + 0xeb, 0xb2, 0xe1, 0xc5, + 0x60, 0xc3, 0xb3, 0xc9, 0x2a, 0x7b, 0x86, 0xc1, 0xd7, 0xfc, 0x60, 0x6f, + 0x1d, 0x7c, 0xd7, 0x5c, + 0xb5, 0xc8, 0x30, 0x69, 0x52, 0xa7, 0x1a, 0x53, 0x9c, 0x31, 0x06, 0x5d, + 0xdf, 0x46, 0xaa, 0x9b, + 0xd7, 0x0b, 0x7b, 0x1f, 0xaf, 0x37, 0xdf, 0x44, 0xdd, 0x6c, 0x5c, 0x65, + 0xde, 0x40, 0xd6, 0x9b, + 0xd7, 0xd3, 0xf5, 0xe6, 0x75, 0x64, 0x9d, 0xb6, 0xd7, 0x92, 0xb5, 0xb0, + 0x7f, 0x34, 0xff, 0x08, + 0xc7, 0x76, 0x0d, 0x59, 0x03, 0x7b, 0x35, 0xc4, 0xbd, 0xab, 0xcd, 0xab, + 0xc9, 0x22, 0xb8, 0xef, + 0xea, 0x19, 0x77, 0x75, 0x5d, 0x5d, 0xff, 0x9c, 0xb5, 0xc9, 0xb4, 0x8a, + 0x6c, 0x30, 0xaf, 0x67, + 0x36, 0xcc, 0xec, 0x97, 0x32, 0x1b, 0x06, 0xfb, 0xa5, 0x6b, 0xcd, 0x3f, + 0x32, 0x1b, 0x66, 0xf6, + 0x4b, 0xd7, 0x80, 0xed, 0x82, 0xfd, 0x82, 0x0d, 0x2f, 0x22, 0x6b, 0x95, + 0x24, 0x2e, 0xa0, 0x9e, + 0x0b, 0xeb, 0x5f, 0x2d, 0xcc, 0x1a, 0x99, 0x66, 0x8f, 0xc9, 0x0d, 0xd8, + 0xf3, 0x69, 0x8e, 0xd1, + 0xad, 0xdf, 0x94, 0xe2, 0x88, 0xd6, 0x85, 0x7f, 0x7f, 0xdb, 0x6c, 0xda, + 0xea, 0xb5, 0x9d, 0x6e, + 0x34, 0x6d, 0x23, 0xdb, 0x4c, 0xdb, 0xe8, 0x36, 0xf3, 0x36, 0xb2, 0xd5, + 0xbc, 0x55, 0xdb, 0x5b, + 0xcc, 0x5b, 0xc8, 0x16, 0xd3, 0x66, 0xb2, 0xd9, 0xcc, 0xf6, 0x26, 0xb2, + 0x49, 0xdb, 0x1b, 0xc9, + 0x2a, 0xd3, 0xa6, 0xab, 0xfe, 0xdf, 0xd5, 0x75, 0x75, 0xfd, 0x83, 0xd6, + 0x76, 0xd3, 0x46, 0x97, + 0xfd, 0x6a, 0x36, 0xbc, 0xd5, 0x6d, 0xc3, 0x5b, 0x34, 0x1b, 0xde, 0x6c, + 0xda, 0x4c, 0x99, 0x0d, + 0x6f, 0x72, 0xdb, 0xf0, 0x46, 0xf3, 0x2a, 0xb2, 0x59, 0x8a, 0xe7, 0x83, + 0xf2, 0x4d, 0xc6, 0xfa, + 0xe7, 0x9b, 0x5c, 0x4e, 0xcf, 0x6a, 0x8a, 0x3d, 0xca, 0xa8, 0xe7, 0xbb, + 0xfc, 0xfd, 0xb3, 0x69, + 0x4b, 0xe9, 0x0e, 0xd3, 0x6e, 0xb2, 0xdb, 0xb4, 0x9b, 0x96, 0x99, 0xca, + 0x60, 0x97, 0xd2, 0x52, + 0xd8, 0xbb, 0x4c, 0xbb, 0x60, 0xef, 0xa4, 0x3b, 0x5d, 0x9b, 0xec, 0x30, + 0xed, 0x80, 0xc7, 0xed, + 0x20, 0x1b, 0x4d, 0xdb, 0xaf, 0xe2, 0xdf, 0xd5, 0x75, 0x75, 0xfd, 0x83, + 0x56, 0xa9, 0xb0, 0x83, + 0xee, 0xd6, 0x6c, 0xb8, 0x4c, 0xb3, 0xe1, 0x52, 0xcd, 0x86, 0x77, 0x69, + 0x36, 0xbc, 0xb3, 0xda, + 0x86, 0x77, 0xb8, 0x6c, 0x18, 0x7c, 0x98, 0x1d, 0x62, 0x2c, 0xba, 0x6c, + 0xbe, 0x89, 0xb7, 0x0e, + 0xbe, 0x94, 0xc4, 0xeb, 0xe5, 0xb8, 0xa4, 0xd8, 0xea, 0xf0, 0x22, 0x49, + 0xd8, 0xf2, 0x7a, 0x01, + 0x7a, 0x64, 0x82, 0xeb, 0x7c, 0x55, 0xd0, 0x4a, 0xa1, 0x8a, 0xec, 0x13, + 0xf6, 0x51, 0xd7, 0xde, + 0x4b, 0xf6, 0x9a, 0xf6, 0x90, 0x3d, 0xc2, 0x1e, 0xba, 0x07, 0x6e, 0x2b, + 0x85, 0x4a, 0x5a, 0x61, + 0xaa, 0x70, 0xef, 0x72, 0xb2, 0x43, 0x28, 0xbd, 0x7a, 0xc6, 0x5d, 0x5d, + 0x57, 0xd7, 0x3f, 0x68, + 0x55, 0x08, 0x95, 0xa4, 0xaa, 0xda, 0x7e, 0xf7, 0x91, 0xbd, 0x60, 0xc3, + 0x9a, 0xfd, 0x0a, 0xcc, + 0x8e, 0x2b, 0xc1, 0x86, 0x3d, 0xf6, 0x5b, 0x41, 0xca, 0x01, 0x03, 0xcb, + 0xcc, 0x51, 0x38, 0x58, + 0xde, 0x8c, 0xe1, 0x1f, 0xeb, 0x11, 0xf1, 0xa7, 0xe7, 0xa2, 0xd5, 0x4d, + 0x6c, 0xc9, 0xb9, 0xee, + 0x5e, 0xf6, 0xa0, 0x7c, 0x8e, 0x24, 0xb5, 0xe6, 0x4c, 0x29, 0xa6, 0x81, + 0x10, 0x25, 0xd6, 0xd5, + 0x7e, 0x0e, 0xfb, 0x6c, 0xda, 0xa0, 0x7d, 0xbc, 0xfb, 0xc9, 0x41, 0xe1, + 0x08, 0x39, 0x22, 0x1c, + 0x26, 0x87, 0x85, 0xc3, 0xf4, 0x10, 0xdc, 0x1e, 0x32, 0x1d, 0x82, 0xfb, + 0x0e, 0xd2, 0x83, 0xa6, + 0x83, 0x70, 0x7b, 0x80, 0x1c, 0x10, 0x0e, 0x50, 0xd8, 0xa4, 0xca, 0xb4, + 0x5f, 0xc3, 0xc3, 0xab, + 0x67, 0xdc, 0xd5, 0x75, 0x75, 0xfd, 0x73, 0xd6, 0x7e, 0xe1, 0x20, 0xd8, + 0xef, 0x11, 0xcd, 0x7e, + 0x0f, 0x0b, 0x87, 0xd8, 0x26, 0x87, 0x04, 0x66, 0xbb, 0xae, 0xed, 0xb1, + 0xdf, 0x03, 0xa6, 0x2a, + 0xb2, 0xdf, 0x54, 0x09, 0x98, 0x18, 0x49, 0x82, 0xf5, 0xeb, 0x79, 0x73, + 0x4e, 0x23, 0x7d, 0xcd, + 0x0f, 0x76, 0xe7, 0x0a, 0xd9, 0xbc, 0x45, 0xbf, 0xf3, 0x83, 0xbd, 0x38, + 0x2e, 0x09, 0xb5, 0x7c, + 0x35, 0x4d, 0x0b, 0xc1, 0x19, 0x67, 0xf4, 0xe8, 0xe0, 0x7b, 0xfa, 0x92, + 0x03, 0xe9, 0x7c, 0x85, + 0xde, 0xdf, 0xaf, 0x67, 0x36, 0xed, 0x61, 0x72, 0x5c, 0x38, 0x49, 0x7f, + 0x12, 0x7e, 0x22, 0x27, + 0xe1, 0xf6, 0x84, 0x70, 0x92, 0x9c, 0x10, 0x4e, 0xc0, 0x7d, 0xc7, 0xe1, + 0xe7, 0xe3, 0x70, 0x7b, + 0x8c, 0x1c, 0x83, 0x7d, 0x54, 0x38, 0x4a, 0x61, 0xc3, 0xf1, 0xac, 0xba, + 0x7a, 0xc6, 0x5d, 0x5d, + 0x57, 0xd7, 0x3f, 0x68, 0x1d, 0xa6, 0xc7, 0xc1, 0x76, 0x7f, 0x22, 0x3f, + 0x81, 0xed, 0x9e, 0x14, + 0x4e, 0x50, 0xd8, 0xc4, 0x65, 0xbb, 0x9a, 0x1d, 0x33, 0xfb, 0xa5, 0xc7, + 0xc0, 0x76, 0x5d, 0x36, + 0x7c, 0x90, 0xec, 0x0f, 0xd6, 0x87, 0x17, 0x20, 0xaf, 0xe7, 0x5d, 0x37, + 0x49, 0xf7, 0xa5, 0xfb, + 0x61, 0xab, 0xcd, 0x0f, 0x77, 0xc5, 0xaa, 0xf1, 0xb5, 0x7c, 0x35, 0xa6, + 0x81, 0xe0, 0xad, 0x07, + 0xe3, 0x99, 0x33, 0xa9, 0x69, 0xd5, 0x5b, 0xa3, 0x0d, 0x81, 0xe6, 0x42, + 0x87, 0x77, 0x36, 0xed, + 0x31, 0x72, 0x96, 0x9e, 0x23, 0xe7, 0x84, 0x73, 0x5a, 0x8f, 0xfb, 0x59, + 0xe1, 0x2c, 0x39, 0x2b, + 0x9c, 0x21, 0x67, 0xdc, 0xfb, 0x34, 0xeb, 0x81, 0x17, 0x4e, 0x93, 0x53, + 0xc2, 0x29, 0xd8, 0x3f, + 0xc1, 0x71, 0x3d, 0x7c, 0x35, 0xff, 0x77, 0x75, 0x5d, 0x5d, 0xff, 0xa0, + 0x75, 0x94, 0xf5, 0x77, + 0x83, 0xfd, 0x9e, 0x73, 0xf1, 0x54, 0x08, 0xb3, 0x61, 0x8f, 0xfd, 0x9e, + 0x71, 0xdb, 0xef, 0x69, + 0xcd, 0x7e, 0x4f, 0x01, 0x46, 0x9e, 0x00, 0xbc, 0x0c, 0x82, 0x7f, 0xfa, + 0xb8, 0xe8, 0x24, 0x3e, + 0x2f, 0x33, 0x27, 0xab, 0x20, 0x79, 0x64, 0xa0, 0xf9, 0xc1, 0xac, 0x6e, + 0xc2, 0x70, 0x32, 0xb6, + 0x2e, 0xf7, 0x97, 0x44, 0x42, 0x1c, 0x1e, 0x2d, 0xc7, 0xf0, 0xb1, 0xf6, + 0x38, 0x2e, 0xbb, 0x16, + 0x57, 0xde, 0x9f, 0x9e, 0x8b, 0x2b, 0xaf, 0x57, 0x57, 0xb7, 0xc3, 0xd7, + 0xd2, 0xd5, 0xc3, 0x48, + 0x4f, 0x92, 0x5f, 0xe9, 0x6f, 0xe4, 0x37, 0xfa, 0x2b, 0xdc, 0x7a, 0xf6, + 0x2f, 0xe4, 0x97, 0xea, + 0xed, 0xe2, 0xde, 0x68, 0x5c, 0x1f, 0xe1, 0x67, 0x38, 0xbe, 0x47, 0xaf, + 0xe2, 0xdf, 0xd5, 0x75, + 0x75, 0xfd, 0x83, 0xd6, 0x49, 0xb0, 0xd9, 0xdf, 0xc0, 0x86, 0x7f, 0xf5, + 0xb2, 0xe1, 0x5f, 0xbc, + 0x6c, 0xd8, 0xc5, 0x9d, 0xfb, 0xd9, 0xc5, 0xdb, 0x03, 0x6c, 0x3c, 0x16, + 0x04, 0x37, 0xf4, 0x6a, + 0x54, 0xc4, 0x57, 0xc7, 0xaa, 0xfe, 0xe6, 0x07, 0xbb, 0xe6, 0x9b, 0x64, + 0x8c, 0xc9, 0x1a, 0x1e, + 0x2f, 0x33, 0xae, 0x99, 0xff, 0xf9, 0x04, 0x2e, 0x9d, 0x9e, 0x94, 0xdc, + 0x1a, 0x3a, 0xf8, 0x63, + 0xb2, 0xea, 0xe8, 0xb9, 0x68, 0x98, 0x17, 0xce, 0xd9, 0xb4, 0x70, 0x7d, + 0xf8, 0x2f, 0xfd, 0xaf, + 0x67, 0x33, 0xd6, 0x0f, 0x71, 0x6f, 0xc6, 0x02, 0x22, 0x6c, 0xbb, 0x58, + 0x41, 0x17, 0xd8, 0x2d, + 0x1c, 0xdb, 0x93, 0x57, 0xf1, 0xef, 0xea, 0xba, 0xba, 0xfe, 0x41, 0xeb, + 0xb4, 0x97, 0xfd, 0xfe, + 0xf7, 0x92, 0xfd, 0xc2, 0x76, 0xd9, 0xef, 0xef, 0x6e, 0x5e, 0x9f, 0xcb, + 0x86, 0x7f, 0x25, 0x27, + 0x83, 0xe0, 0x9f, 0xce, 0x39, 0xac, 0xbe, 0xe7, 0x2d, 0xd6, 0x98, 0x1f, + 0x7c, 0x69, 0xbe, 0x09, + 0xe3, 0xbf, 0xc5, 0x39, 0xe2, 0xb8, 0x58, 0x15, 0x62, 0x63, 0x8b, 0x9f, + 0xfa, 0x8b, 0x5b, 0xe7, + 0x2b, 0xd1, 0x1a, 0x6f, 0x70, 0xf1, 0xd5, 0x6a, 0xcf, 0xdc, 0x74, 0xcf, + 0x95, 0xb7, 0xa5, 0xe6, + 0xba, 0xf3, 0x7a, 0x01, 0xfd, 0x53, 0x5d, 0xb3, 0x69, 0xfd, 0xf3, 0x31, + 0x89, 0x7b, 0x33, 0x66, + 0x26, 0xf9, 0xc3, 0x6b, 0x5f, 0x3d, 0xe3, 0xfe, 0xbf, 0xbd, 0x37, 0x0d, + 0x92, 0x25, 0xab, 0xee, + 0x3c, 0xd3, 0x63, 0xf1, 0x88, 0xc8, 0x88, 0xcc, 0x8c, 0x88, 0xec, 0xe9, + 0x2f, 0x33, 0xa3, 0x29, + 0x61, 0x6d, 0xdd, 0x3d, 0xd6, 0x36, 0xa3, 0xb2, 0xe9, 0xe9, 0xb1, 0x51, + 0xcf, 0x34, 0x54, 0xb1, + 0x49, 0x08, 0xaa, 0x0c, 0x1b, 0x9b, 0x2f, 0x63, 0x26, 0xcc, 0xc0, 0xc6, + 0xba, 0xdb, 0x4c, 0x23, + 0xb3, 0xc6, 0xc8, 0xcc, 0xc8, 0xd8, 0xdd, 0x23, 0x63, 0xdf, 0x72, 0x7d, + 0x4b, 0x49, 0x42, 0x2a, + 0x16, 0x51, 0x80, 0x04, 0x2a, 0x10, 0x8b, 0x4c, 0x02, 0xa9, 0x80, 0x92, + 0x10, 0x5a, 0x0b, 0xb4, + 0x20, 0xa1, 0x05, 0xd0, 0x8a, 0x40, 0x42, 0x8f, 0x96, 0xd4, 0x5a, 0xba, + 0xa5, 0xce, 0xb9, 0xe7, + 0x5e, 0x77, 0x0f, 0x77, 0x0f, 0xbf, 0x7e, 0x8f, 0x67, 0xfa, 0x7b, 0xf5, + 0xd2, 0xed, 0xd8, 0x31, + 0xe7, 0x3d, 0x5e, 0x65, 0x66, 0x84, 0xdf, 0x8c, 0xfb, 0xf7, 0x7b, 0xb6, + 0xdf, 0x21, 0x23, 0x7b, + 0x78, 0x4c, 0xb2, 0x83, 0x5d, 0xfb, 0x17, 0x7a, 0xab, 0x9d, 0xfd, 0xcb, + 0xec, 0xc1, 0xb0, 0x6b, + 0x78, 0xde, 0x64, 0x56, 0x6c, 0x00, 0x7f, 0x05, 0xf8, 0x2f, 0xce, 0xcc, + 0xcb, 0x63, 0x09, 0xff, + 0xd9, 0xc7, 0xf9, 0xe2, 0x5c, 0xcd, 0x49, 0xa1, 0xe9, 0xe9, 0x57, 0xb3, + 0x78, 0xc9, 0xe0, 0x9f, + 0x07, 0xf2, 0x5c, 0x5c, 0x67, 0x4a, 0x14, 0x8f, 0xb7, 0xf7, 0x1e, 0xe3, + 0xc3, 0xa3, 0x0f, 0xb7, + 0x9e, 0x35, 0x9f, 0x35, 0xd8, 0x65, 0x19, 0xac, 0xdf, 0xb3, 0x12, 0x7b, + 0x86, 0x3e, 0x71, 0x64, + 0x64, 0x0f, 0x91, 0x3d, 0x13, 0xb8, 0x4f, 0x03, 0xf6, 0xf0, 0xd1, 0x8f, + 0x76, 0x3f, 0x32, 0xfc, + 0x50, 0x4b, 0xb5, 0x83, 0xe3, 0x9c, 0xb7, 0x28, 0x7c, 0xd5, 0xe2, 0x3e, + 0xf3, 0x7d, 0xad, 0x59, + 0x6f, 0xd9, 0x96, 0x2e, 0xe3, 0xdf, 0xcb, 0xeb, 0xf5, 0x3c, 0x73, 0x26, + 0x1d, 0x2e, 0xef, 0x1d, + 0x27, 0xd6, 0xb8, 0xce, 0xd5, 0x64, 0xfa, 0x8c, 0x9b, 0x4d, 0x1b, 0x14, + 0xeb, 0x84, 0xb5, 0xa3, + 0xcf, 0x15, 0x19, 0xd9, 0xcd, 0x3e, 0x15, 0x06, 0xc4, 0xf5, 0x30, 0xbc, + 0xc7, 0xd3, 0xea, 0xc1, + 0x7d, 0x9c, 0xb7, 0x08, 0x73, 0xab, 0xba, 0xc1, 0x71, 0xc7, 0x12, 0x22, + 0xae, 0xa7, 0xf1, 0xf9, + 0x53, 0x95, 0xb3, 0xe2, 0xc1, 0xd6, 0x45, 0x39, 0x64, 0xce, 0x64, 0xa6, + 0x8d, 0x9f, 0x59, 0xed, + 0x8f, 0x75, 0x92, 0xfe, 0x91, 0x91, 0x25, 0x40, 0xff, 0x8c, 0x2b, 0xc6, + 0xf5, 0xf0, 0xf3, 0x16, + 0x63, 0xe1, 0xb4, 0x48, 0xb5, 0x32, 0x58, 0x9f, 0xed, 0x99, 0xd5, 0x3d, + 0x7b, 0xbe, 0x41, 0xc9, + 0x33, 0x1f, 0x49, 0xe4, 0x4d, 0xb6, 0x0e, 0xc0, 0x4f, 0x2e, 0x4c, 0x32, + 0x4d, 0xd9, 0xfc, 0x60, + 0xf1, 0x9a, 0x41, 0x6b, 0x42, 0xfa, 0x47, 0x46, 0x76, 0xe3, 0xf5, 0x8f, + 0xf9, 0x93, 0xee, 0xba, + 0x64, 0x31, 0x6b, 0xee, 0x0a, 0x5c, 0x76, 0x89, 0xaf, 0x1a, 0x1b, 0xa7, + 0xc5, 0xa3, 0x95, 0xe8, + 0xb9, 0x9c, 0x6d, 0x6f, 0xac, 0xd1, 0x3d, 0x67, 0xd2, 0x35, 0xc3, 0xcb, + 0x95, 0x37, 0xf1, 0xcf, + 0x0f, 0x96, 0xd7, 0xc8, 0x90, 0xfe, 0x91, 0x91, 0xdd, 0x78, 0xfd, 0x9b, + 0xef, 0x36, 0xdc, 0x75, + 0xc9, 0xfa, 0x49, 0xe5, 0xd0, 0x9a, 0x6f, 0x27, 0xd7, 0xac, 0xb8, 0xe7, + 0xb0, 0x62, 0x38, 0x2d, + 0xb6, 0x56, 0x2e, 0xe3, 0xe9, 0x7d, 0xe3, 0x79, 0x13, 0x98, 0x2b, 0x7f, + 0xa7, 0xbc, 0xb7, 0x36, + 0x8f, 0xcc, 0x3d, 0x67, 0x92, 0x69, 0x21, 0x8f, 0x75, 0xae, 0xd5, 0xc8, + 0x90, 0xfe, 0x91, 0x91, + 0xdd, 0x78, 0xfd, 0x9b, 0xee, 0x34, 0x3d, 0x75, 0xc9, 0x4c, 0x0b, 0x2a, + 0xe7, 0xa5, 0x7d, 0x29, + 0xcf, 0x05, 0x2c, 0x5e, 0xfe, 0x32, 0x8e, 0xd3, 0x62, 0x6b, 0x65, 0x4c, + 0xb3, 0x69, 0xb9, 0x4d, + 0xb6, 0x5a, 0x10, 0xd7, 0x73, 0xe7, 0x4d, 0x02, 0x6a, 0xb4, 0x6b, 0x30, + 0x9b, 0x76, 0x7b, 0x9e, + 0xa9, 0x7b, 0xfb, 0x4d, 0x48, 0xff, 0xc8, 0xc8, 0x6e, 0x7e, 0xfc, 0xcf, + 0x5b, 0x97, 0x5c, 0x91, + 0xcc, 0x0f, 0xce, 0xb8, 0x7b, 0x2c, 0xec, 0xde, 0x37, 0x54, 0x6f, 0x59, + 0x4c, 0x9c, 0x96, 0x28, + 0x5a, 0xd9, 0xcf, 0x76, 0x31, 0xb3, 0x69, 0xd7, 0xf9, 0xfd, 0x62, 0x26, + 0x08, 0x9f, 0x8f, 0xe4, + 0xca, 0x9b, 0x54, 0x03, 0xfb, 0x4d, 0x2e, 0x0d, 0xd2, 0x3f, 0x32, 0xb2, + 0x04, 0xe5, 0x7f, 0xd9, + 0xb9, 0x09, 0xe6, 0x33, 0x83, 0xe6, 0x49, 0x79, 0x2e, 0xc0, 0xc1, 0x1f, + 0x17, 0x5a, 0x56, 0x5c, + 0xcf, 0xbc, 0x76, 0x5c, 0x0f, 0x3b, 0x87, 0xd5, 0xad, 0x95, 0xf7, 0x6d, + 0x36, 0xad, 0xe7, 0x7d, + 0x39, 0x79, 0x13, 0x5e, 0x4b, 0x73, 0xd7, 0xd7, 0x6f, 0x32, 0xbe, 0x6c, + 0x91, 0xfe, 0x91, 0x91, + 0x25, 0x48, 0xff, 0x2c, 0x2d, 0xe2, 0x7e, 0x63, 0x08, 0xcf, 0xa5, 0x7c, + 0xbe, 0xbd, 0x0f, 0xf5, + 0x70, 0x21, 0x3c, 0x17, 0x6e, 0x30, 0x2b, 0xb9, 0x3c, 0x8f, 0xa7, 0x46, + 0xc6, 0xa7, 0x95, 0xd8, + 0xb9, 0x9c, 0xa1, 0x16, 0x3a, 0x9b, 0xd6, 0xf5, 0x9a, 0xa0, 0x7f, 0x9b, + 0xfe, 0x7e, 0x93, 0xc5, + 0x65, 0x83, 0xf4, 0x8f, 0x8c, 0x2c, 0x41, 0xfa, 0x27, 0x61, 0xd5, 0x2b, + 0x39, 0xf8, 0x6b, 0x3c, + 0x97, 0x28, 0xbe, 0x2a, 0x8e, 0xd3, 0xe2, 0xd6, 0xca, 0x38, 0xe7, 0x72, + 0x6e, 0x4f, 0x35, 0xa5, + 0x2f, 0xed, 0xe1, 0x7c, 0x41, 0xde, 0x64, 0x5a, 0x68, 0x16, 0xe9, 0xfc, + 0x47, 0x46, 0x96, 0x2c, + 0xfd, 0x53, 0xb3, 0xea, 0x39, 0x07, 0x3f, 0x7f, 0x5a, 0xa9, 0x01, 0x5b, + 0xa5, 0x12, 0xc2, 0x73, + 0x81, 0xfa, 0x65, 0xdc, 0x8c, 0x72, 0x1c, 0xa7, 0x25, 0x8a, 0x56, 0x8a, + 0xb8, 0x1e, 0xae, 0x46, + 0x06, 0x33, 0x97, 0x33, 0x78, 0x4d, 0x28, 0xff, 0x41, 0x46, 0x96, 0x28, + 0xfd, 0xc3, 0x31, 0xad, + 0x78, 0xdc, 0xac, 0x7a, 0x9c, 0x3d, 0x94, 0xf2, 0x5c, 0x6e, 0x89, 0x58, + 0x21, 0x9f, 0x7b, 0x39, + 0x4e, 0xb5, 0x64, 0xf3, 0x83, 0x1d, 0x5f, 0x55, 0xd2, 0xcf, 0x91, 0x1a, + 0xa4, 0xba, 0x9a, 0xe0, + 0xb0, 0x1a, 0xb6, 0x56, 0x56, 0xe3, 0x62, 0x5a, 0x31, 0xbf, 0x76, 0x1b, + 0xd3, 0xfb, 0xc6, 0xd7, + 0x24, 0xa8, 0x86, 0x91, 0xf4, 0x8f, 0x8c, 0x2c, 0x49, 0xfa, 0x67, 0xd5, + 0xeb, 0x29, 0x7b, 0x2b, + 0x38, 0x7f, 0xd9, 0x1d, 0xd7, 0xeb, 0x59, 0x6c, 0x2a, 0x1f, 0x07, 0x1f, + 0x34, 0x11, 0x72, 0x05, + 0xb2, 0xf9, 0xc1, 0x8e, 0xaf, 0x2a, 0xa9, 0x91, 0x01, 0x06, 0x82, 0xbe, + 0xd0, 0x5b, 0x36, 0x07, + 0x3f, 0x35, 0x29, 0x36, 0x31, 0x4c, 0x2b, 0x3e, 0x97, 0x73, 0x99, 0x3a, + 0xc4, 0xd4, 0xc8, 0x60, + 0xe6, 0x72, 0x06, 0xd7, 0x30, 0x92, 0xfe, 0x91, 0x91, 0x25, 0x49, 0xff, + 0xac, 0x3e, 0x2f, 0x65, + 0xdc, 0x2c, 0x90, 0x69, 0x65, 0xeb, 0x85, 0x9d, 0x37, 0x39, 0xde, 0x3a, + 0xac, 0x32, 0xbf, 0x38, + 0x6c, 0x7e, 0x30, 0xf7, 0xa7, 0xe7, 0xe5, 0x86, 0xac, 0x46, 0xc6, 0xcd, + 0x7e, 0x06, 0x0e, 0xfe, + 0xf6, 0xd9, 0xf6, 0x01, 0xe8, 0x5f, 0x46, 0xca, 0x73, 0x71, 0xc7, 0xf5, + 0x36, 0x50, 0x71, 0x3d, + 0xcc, 0x5c, 0xce, 0x60, 0x7d, 0x26, 0xfd, 0x23, 0x23, 0x4b, 0x92, 0xfe, + 0xc1, 0x0c, 0xca, 0x38, + 0x98, 0x56, 0xc2, 0x57, 0x15, 0x9c, 0x16, 0x7d, 0xaa, 0xc8, 0x9b, 0x1c, + 0x0b, 0x5f, 0x3a, 0x48, + 0xcb, 0x80, 0xfd, 0x9c, 0x1a, 0xa7, 0x3b, 0x36, 0x07, 0xdf, 0x89, 0x35, + 0xde, 0x92, 0xf0, 0x5c, + 0x5c, 0x71, 0xbd, 0x22, 0x26, 0xae, 0x77, 0xa7, 0xbc, 0xa7, 0xea, 0x4d, + 0xce, 0x2c, 0x64, 0x6b, + 0x42, 0xfa, 0x47, 0x46, 0x96, 0x24, 0xfd, 0x83, 0x19, 0x94, 0xd5, 0x63, + 0x1c, 0xd3, 0x2a, 0xaf, + 0xee, 0x7d, 0x73, 0xc7, 0xf5, 0x24, 0xf3, 0x83, 0x21, 0x6f, 0x52, 0x75, + 0xfa, 0x4d, 0xd2, 0x7d, + 0x67, 0xd6, 0xdb, 0xda, 0x99, 0x0e, 0xb4, 0x70, 0xf3, 0xb4, 0x72, 0x00, + 0x3c, 0x05, 0x39, 0xcf, + 0x85, 0xf9, 0xd7, 0xec, 0xfd, 0x6d, 0x63, 0xea, 0x09, 0x91, 0xb1, 0x4e, + 0x5d, 0xba, 0x26, 0xa4, + 0x7f, 0x64, 0x64, 0x49, 0xd2, 0x3f, 0x88, 0xeb, 0xdd, 0x47, 0xa6, 0x95, + 0x73, 0x3e, 0xf3, 0xf4, + 0x9b, 0xdc, 0x59, 0x69, 0x59, 0xf1, 0x44, 0x6f, 0x64, 0x67, 0x99, 0x56, + 0x7a, 0x08, 0x3a, 0xb6, + 0xde, 0x77, 0xc7, 0xf4, 0x99, 0xf7, 0x26, 0xcb, 0x79, 0x2e, 0x3b, 0xfb, + 0xa5, 0x65, 0x9e, 0xd7, + 0x2b, 0xe6, 0x47, 0x5a, 0x3b, 0x2c, 0x4f, 0x22, 0x38, 0x5f, 0x88, 0x58, + 0xe7, 0x59, 0xf5, 0x20, + 0xb8, 0x86, 0x91, 0xf4, 0x8f, 0x8c, 0x2c, 0x39, 0xfa, 0xa7, 0x85, 0xc6, + 0xf5, 0x56, 0x7e, 0xa3, + 0x60, 0x5a, 0xc5, 0x32, 0x57, 0xed, 0x28, 0xcd, 0x6b, 0x64, 0xec, 0x7e, + 0x93, 0xd2, 0x79, 0xae, + 0xce, 0xe3, 0x7d, 0x90, 0xf7, 0x58, 0xea, 0x6b, 0xef, 0xc3, 0xcf, 0xaa, + 0xe7, 0xb1, 0x46, 0x3f, + 0xcf, 0xe5, 0xae, 0xe8, 0x57, 0xdb, 0x09, 0xe1, 0xb9, 0x58, 0x35, 0x32, + 0x51, 0x38, 0x5f, 0x4d, + 0xd2, 0x3f, 0x32, 0xb2, 0x04, 0xeb, 0x5f, 0x84, 0xb8, 0x1e, 0xd4, 0x83, + 0xa8, 0x6a, 0x50, 0x70, + 0x9c, 0x16, 0xcd, 0xb0, 0x7d, 0x55, 0xd0, 0x32, 0x38, 0xf7, 0xa5, 0xa7, + 0xd9, 0xb6, 0x7e, 0x2c, + 0xf2, 0x1e, 0x7e, 0x2d, 0x0a, 0x8b, 0xeb, 0xb9, 0x39, 0xf8, 0xbb, 0x77, + 0xc3, 0x79, 0x2e, 0x1b, + 0x11, 0x38, 0x5f, 0xf2, 0x35, 0x21, 0xfd, 0x23, 0x23, 0x4b, 0x8c, 0xfe, + 0x21, 0x59, 0xf5, 0x22, + 0xae, 0x57, 0x8c, 0x67, 0xae, 0x9a, 0x8c, 0xd3, 0x62, 0x71, 0xf0, 0x83, + 0xb4, 0x52, 0x5d, 0xaf, + 0x57, 0x6c, 0xc3, 0xbc, 0xf5, 0x50, 0x9e, 0xcb, 0x54, 0x6f, 0xea, 0xc7, + 0x0e, 0xe7, 0x2b, 0xf4, + 0xfd, 0xc9, 0x63, 0x9d, 0xa4, 0x7f, 0x64, 0x64, 0xc9, 0xd1, 0xbf, 0x98, + 0x99, 0x56, 0xe0, 0xab, + 0xc6, 0xc4, 0x69, 0xb1, 0xf5, 0x8f, 0x6b, 0xe5, 0x20, 0x4a, 0xef, 0x5b, + 0x30, 0xcf, 0x05, 0x62, + 0x8d, 0xe0, 0x2f, 0x97, 0xcf, 0x8a, 0x07, 0xd2, 0xf9, 0xc1, 0xfc, 0xfd, + 0x85, 0xad, 0x09, 0xe9, + 0x1f, 0x19, 0xd9, 0x8d, 0xd7, 0x3f, 0xa6, 0x41, 0xbc, 0x2e, 0xd9, 0x8a, + 0xeb, 0x69, 0xb1, 0xb0, + 0xea, 0x23, 0x72, 0x5a, 0x7a, 0x88, 0xde, 0xb7, 0xa3, 0x94, 0x51, 0xc5, + 0xd4, 0xeb, 0x41, 0xef, + 0x5b, 0x50, 0x5c, 0xcf, 0xcd, 0xc1, 0xbf, 0xa8, 0xec, 0x57, 0xef, 0x2a, + 0xe6, 0x07, 0x3b, 0x35, + 0x32, 0xb2, 0x58, 0x27, 0xe9, 0x1f, 0x19, 0xd9, 0x8d, 0xd7, 0xbf, 0x59, + 0xa5, 0x61, 0xef, 0x7f, + 0xa8, 0x07, 0x49, 0x87, 0xf0, 0x5c, 0x44, 0x0e, 0x36, 0x12, 0xd3, 0x2a, + 0x16, 0x4e, 0x8b, 0x38, + 0x8b, 0xa5, 0xbb, 0xa0, 0x95, 0xca, 0x7a, 0x3d, 0xd1, 0xfb, 0x16, 0xaa, + 0xcf, 0x10, 0x2b, 0xe4, + 0x9c, 0xaf, 0xd3, 0xad, 0x9a, 0x6c, 0x7e, 0x30, 0xcf, 0x9b, 0x84, 0x72, + 0xbe, 0x48, 0xff, 0xc8, + 0xc8, 0x6e, 0xbc, 0xfe, 0x2d, 0x76, 0x1b, 0x76, 0x7c, 0x6c, 0xf7, 0x4e, + 0x28, 0xcf, 0xc5, 0x89, + 0xeb, 0x29, 0x59, 0xf5, 0xf1, 0x72, 0x5a, 0xac, 0xbc, 0x73, 0xa6, 0x83, + 0xae, 0xd7, 0x53, 0xcd, + 0xe5, 0xb4, 0x39, 0x5f, 0xcc, 0x97, 0x96, 0xcd, 0x0f, 0xb6, 0xf3, 0x26, + 0xf2, 0x7e, 0x13, 0xd2, + 0x3f, 0x32, 0xb2, 0x1b, 0xaf, 0x7f, 0x4c, 0xab, 0x72, 0xd3, 0x42, 0xa3, + 0x74, 0x5e, 0x39, 0x58, + 0xf5, 0xed, 0x06, 0xf0, 0x5c, 0x2c, 0x0e, 0x7e, 0x9c, 0x4c, 0x2b, 0x1c, + 0xa7, 0xc5, 0xce, 0x6b, + 0x64, 0x3b, 0xa8, 0xb9, 0x9c, 0x67, 0xf8, 0xb9, 0x9c, 0x19, 0x6f, 0x5c, + 0xcf, 0x90, 0x72, 0xf0, + 0x03, 0xfb, 0x4d, 0x48, 0xff, 0xc8, 0xc8, 0x92, 0x92, 0xff, 0xe0, 0x71, + 0x3d, 0xa6, 0x2f, 0x39, + 0x19, 0xcf, 0x85, 0x73, 0xf0, 0xb3, 0x4d, 0xa8, 0x87, 0x2b, 0x8e, 0x14, + 0x35, 0x82, 0xc8, 0xb8, + 0x1e, 0x8a, 0xd3, 0x62, 0x9f, 0x15, 0xc7, 0x7a, 0x47, 0x5d, 0xaf, 0xc7, + 0x6b, 0x18, 0x11, 0x4c, + 0x2b, 0x5d, 0xc1, 0xf9, 0x12, 0x79, 0x93, 0x02, 0x70, 0xbe, 0x64, 0xfd, + 0x26, 0xc3, 0xcb, 0x0e, + 0xe9, 0x1f, 0x19, 0x59, 0x32, 0xf4, 0x8f, 0xc7, 0xf5, 0x6c, 0xbf, 0x51, + 0xc2, 0x73, 0x81, 0x5c, + 0x00, 0x9c, 0x9b, 0xb6, 0x8e, 0x0b, 0x52, 0x9e, 0x8b, 0x2f, 0xae, 0x17, + 0xee, 0xab, 0x62, 0x38, + 0x2d, 0x4e, 0xdd, 0x4d, 0xae, 0x8d, 0x62, 0x5a, 0xe1, 0xe6, 0x72, 0xb6, + 0x30, 0x73, 0x39, 0x45, + 0x8d, 0xa0, 0x5e, 0xb3, 0xf3, 0x26, 0x3b, 0xb7, 0x2a, 0xab, 0x99, 0x99, + 0x73, 0xe2, 0x3f, 0x93, + 0x91, 0x25, 0x45, 0xff, 0xf2, 0xb2, 0xb8, 0x9e, 0x87, 0x83, 0x5f, 0xd9, + 0x53, 0xf1, 0x5c, 0x22, + 0xc4, 0xf5, 0x70, 0x9c, 0x16, 0xa7, 0xee, 0x26, 0xd7, 0x56, 0xc6, 0xf5, + 0x62, 0x9e, 0xcb, 0xe9, + 0xe7, 0x7c, 0x79, 0xe6, 0x07, 0xcf, 0x2e, 0x9b, 0xa4, 0x7f, 0x64, 0x64, + 0x89, 0xd0, 0x3f, 0xa3, + 0x88, 0x88, 0xeb, 0x69, 0xc0, 0x1f, 0x65, 0x3e, 0x60, 0xe9, 0x74, 0xab, + 0x16, 0xc6, 0xc1, 0x4f, + 0x47, 0xe0, 0x2f, 0x2b, 0x39, 0x2d, 0xf6, 0x59, 0x6c, 0x9e, 0x6b, 0xed, + 0x4c, 0x15, 0x71, 0x3d, + 0x9b, 0x69, 0x15, 0x53, 0x0d, 0x63, 0xd8, 0x9a, 0x68, 0x3d, 0x9a, 0xff, + 0x46, 0x46, 0x96, 0x08, + 0xfd, 0xeb, 0x21, 0x67, 0x50, 0x0e, 0x20, 0xae, 0xb7, 0xb3, 0xb7, 0x11, + 0xca, 0x73, 0x29, 0xef, + 0x41, 0xfc, 0xb0, 0x7a, 0x5a, 0x38, 0xc8, 0x0c, 0x24, 0xf3, 0x83, 0x6d, + 0x5f, 0x55, 0xd1, 0xcf, + 0xa1, 0xad, 0x72, 0xae, 0x46, 0x66, 0x99, 0x6b, 0x15, 0xaf, 0xcc, 0xaa, + 0xf7, 0xfb, 0xb5, 0x78, + 0xce, 0x97, 0x7c, 0x4d, 0x28, 0xff, 0x41, 0x46, 0x96, 0x08, 0xfd, 0xb3, + 0x99, 0x56, 0x0a, 0x66, + 0x94, 0x16, 0xc8, 0xaa, 0xf7, 0xf2, 0x5c, 0x76, 0x3d, 0x79, 0x53, 0x2b, + 0x6f, 0x32, 0xf1, 0xcd, + 0x0f, 0x76, 0xf9, 0xaa, 0x61, 0xfd, 0x1c, 0xc0, 0x7e, 0xce, 0x4e, 0x81, + 0xfd, 0xcc, 0x7c, 0x70, + 0xa6, 0x7f, 0x57, 0x67, 0xd5, 0x7b, 0x4d, 0xd4, 0x30, 0xa6, 0xaf, 0x39, + 0x97, 0x93, 0xf4, 0x8f, + 0x8c, 0x2c, 0x19, 0xfa, 0xe7, 0xf4, 0x79, 0xa9, 0xeb, 0xf5, 0xc2, 0xfc, + 0x46, 0x2b, 0x6f, 0x02, + 0x7e, 0x6d, 0xe5, 0xb6, 0x2b, 0x57, 0xe0, 0x9f, 0x1f, 0x0c, 0x79, 0x93, + 0x7e, 0xb6, 0x53, 0x51, + 0xf4, 0xbe, 0xb9, 0xd9, 0xcf, 0xc0, 0x44, 0xd8, 0x5a, 0xe6, 0xa5, 0x3c, + 0x17, 0x11, 0xd7, 0xdb, + 0xba, 0x52, 0x5c, 0x2f, 0xac, 0x46, 0x46, 0xde, 0x0f, 0x48, 0xfa, 0x47, + 0x46, 0x96, 0x08, 0xfd, + 0x1b, 0xe0, 0xea, 0xf5, 0x50, 0x4c, 0x2b, 0x66, 0xbc, 0x06, 0x65, 0x9a, + 0x6a, 0x4a, 0xe7, 0x07, + 0x5b, 0x79, 0x93, 0x2a, 0x3b, 0x1f, 0x66, 0x42, 0xfa, 0x4d, 0x52, 0xa3, + 0x74, 0x27, 0x33, 0xd3, + 0x5b, 0x39, 0x8b, 0x07, 0xe3, 0xe5, 0xb9, 0xe4, 0x3d, 0x3c, 0x17, 0x11, + 0xd7, 0xdb, 0xb9, 0x76, + 0x5c, 0x6f, 0x15, 0x4b, 0x54, 0xad, 0x09, 0xe9, 0x1f, 0x19, 0x59, 0x22, + 0xf4, 0xcf, 0x62, 0xd5, + 0xe3, 0xe6, 0xaa, 0x65, 0x22, 0xcf, 0x55, 0x0b, 0x9e, 0x1f, 0xbc, 0xde, + 0x6f, 0x62, 0x71, 0xec, + 0xfd, 0xef, 0xc1, 0xd0, 0x86, 0xe9, 0x2e, 0x68, 0xe0, 0x56, 0x08, 0xcf, + 0x05, 0xea, 0x92, 0x33, + 0x3c, 0xae, 0x77, 0x1d, 0xa6, 0x95, 0xa7, 0x46, 0xa6, 0xbd, 0x7b, 0x2b, + 0x6c, 0x4d, 0x48, 0xff, + 0xc8, 0xc8, 0x92, 0xa0, 0x7f, 0x3e, 0x56, 0xbd, 0xd4, 0x22, 0x31, 0xad, + 0x82, 0xe3, 0x7a, 0xab, + 0xbc, 0xc9, 0x99, 0x2f, 0x56, 0xc8, 0xb4, 0x6c, 0x73, 0x91, 0x69, 0xa6, + 0x47, 0xa9, 0x0e, 0x9c, + 0xe9, 0x3c, 0xb5, 0xd3, 0x7d, 0xa6, 0x7f, 0xcb, 0x6c, 0x8b, 0xbd, 0xd3, + 0xae, 0x88, 0x35, 0xae, + 0xf3, 0x5c, 0x20, 0xd6, 0x08, 0x3d, 0x2c, 0x95, 0x93, 0x7c, 0xcd, 0xaa, + 0x4b, 0x0c, 0x3e, 0xb7, + 0x61, 0xf9, 0xfd, 0x21, 0x73, 0x39, 0x49, 0xff, 0xc8, 0xc8, 0x92, 0xa3, + 0x7f, 0xbc, 0x1e, 0x04, + 0x5b, 0xaf, 0x87, 0x64, 0x5a, 0x21, 0x38, 0x2d, 0x0d, 0xe0, 0xcf, 0xbb, + 0xf3, 0x26, 0x9c, 0xff, + 0x0c, 0xf1, 0xbe, 0xa5, 0xde, 0x04, 0x0e, 0xfe, 0xea, 0x2c, 0x96, 0xed, + 0xe4, 0x16, 0x99, 0x96, + 0xef, 0x9c, 0xd9, 0x0d, 0xe2, 0xe0, 0xc3, 0x99, 0x52, 0x70, 0xf0, 0x03, + 0x78, 0x2e, 0xa8, 0xb8, + 0x1e, 0xb6, 0x46, 0x86, 0xf4, 0x8f, 0x8c, 0x2c, 0x09, 0xfa, 0x87, 0x8b, + 0xeb, 0x21, 0xeb, 0xf5, + 0xac, 0xde, 0xb7, 0x54, 0x94, 0xde, 0xb7, 0x9e, 0xc6, 0xb5, 0x4c, 0x9f, + 0x66, 0x5a, 0xfa, 0xc2, + 0x9a, 0x79, 0xe9, 0xe2, 0x3f, 0x43, 0xef, 0x5b, 0x6e, 0x9e, 0x6e, 0xc9, + 0xeb, 0x64, 0x04, 0x07, + 0x1f, 0xfc, 0xda, 0xca, 0x1d, 0xdf, 0xcc, 0x4d, 0x3f, 0x07, 0xdf, 0x8a, + 0x75, 0xa6, 0x50, 0x9c, + 0xaf, 0xb0, 0x35, 0x21, 0xfd, 0x23, 0x23, 0x4b, 0x82, 0xfe, 0xf1, 0x7a, + 0x90, 0x2b, 0xc4, 0xf5, + 0x82, 0x6b, 0x50, 0x8a, 0xad, 0x6b, 0x71, 0x5a, 0x7a, 0xc0, 0x7e, 0x4e, + 0x75, 0x81, 0x83, 0xbf, + 0xca, 0xeb, 0xea, 0xed, 0xdc, 0x2c, 0xd5, 0x56, 0xdd, 0x0d, 0xaf, 0xd7, + 0x9b, 0xa6, 0x9b, 0x61, + 0x3c, 0x97, 0x4d, 0x9e, 0x77, 0xd9, 0xde, 0x4b, 0xcb, 0xe7, 0x07, 0xaf, + 0x6a, 0x64, 0x42, 0xd7, + 0x84, 0xf4, 0x8f, 0x8c, 0x2c, 0x09, 0xfa, 0x77, 0x2d, 0x56, 0x7d, 0x50, + 0x8d, 0x0c, 0x86, 0xd3, + 0x72, 0x8a, 0xe0, 0xb4, 0xd8, 0xbe, 0xe8, 0x34, 0xd7, 0xce, 0x4d, 0xb5, + 0x70, 0xfd, 0x5b, 0xe7, + 0xf7, 0x07, 0xf3, 0x5c, 0xee, 0x88, 0xbc, 0x8b, 0x7c, 0x7e, 0x30, 0x36, + 0xd6, 0x49, 0xfa, 0x47, + 0x46, 0x76, 0xe3, 0xf5, 0x8f, 0x9d, 0xeb, 0xb0, 0x71, 0xbd, 0x0a, 0x82, + 0x55, 0x8f, 0x9b, 0xab, + 0x86, 0xe4, 0xb4, 0xd8, 0xbe, 0xe8, 0x3c, 0xd7, 0xd2, 0x47, 0x8a, 0x79, + 0xbe, 0xa1, 0x71, 0x3d, + 0x37, 0x07, 0xdf, 0x1d, 0x2b, 0x0c, 0x98, 0x1f, 0x6c, 0xe5, 0x4d, 0x80, + 0xdf, 0x1f, 0x5e, 0x23, + 0x43, 0xfa, 0x47, 0x46, 0x76, 0xe3, 0xf5, 0x6f, 0xba, 0xdd, 0x04, 0xbf, + 0xb1, 0x34, 0xcb, 0x34, + 0xa4, 0x3c, 0x17, 0x57, 0x5c, 0x2f, 0x16, 0xa6, 0x15, 0xd3, 0x5c, 0x54, + 0x0d, 0x8a, 0x75, 0x8e, + 0xcb, 0x2c, 0x72, 0xad, 0xcc, 0x50, 0x31, 0x23, 0x24, 0xca, 0x5c, 0x4e, + 0x76, 0x3e, 0x0d, 0x9e, + 0x1f, 0x6c, 0x71, 0xf0, 0x47, 0x99, 0x56, 0xf1, 0x42, 0xc5, 0xef, 0x27, + 0xfd, 0x23, 0x23, 0xbb, + 0xf1, 0xfa, 0x67, 0xf1, 0x9f, 0x45, 0xae, 0x00, 0xf6, 0xff, 0x3a, 0xcf, + 0x85, 0xdb, 0xf8, 0x9a, + 0x71, 0xbd, 0x00, 0x5f, 0x5a, 0xc5, 0x69, 0xb1, 0xcf, 0x6e, 0xd9, 0x65, + 0xae, 0x99, 0x1e, 0x28, + 0xf4, 0xcf, 0x62, 0x5a, 0xa1, 0xe6, 0x72, 0x5a, 0xef, 0xcf, 0xc3, 0x73, + 0xf1, 0x73, 0xf0, 0xd9, + 0xfb, 0x0b, 0xef, 0x37, 0x21, 0xfd, 0x23, 0x23, 0xbb, 0xf1, 0xfa, 0xc7, + 0x74, 0xcd, 0x89, 0x8d, + 0x39, 0xfb, 0xbf, 0xbc, 0x07, 0xb9, 0x02, 0x37, 0x07, 0x5f, 0xd9, 0xfb, + 0xe6, 0xaa, 0x91, 0x89, + 0x8b, 0xd3, 0x62, 0xe7, 0x43, 0xa0, 0xf7, 0x2d, 0xd5, 0x0f, 0xd7, 0x35, + 0x2c, 0xd3, 0x4a, 0x16, + 0xd7, 0xf3, 0x70, 0xf0, 0x6f, 0x57, 0x95, 0xf3, 0x83, 0x49, 0xff, 0xc8, + 0xc8, 0x12, 0xa0, 0x7f, + 0x47, 0x99, 0x2e, 0xf8, 0x7e, 0xfa, 0x38, 0xdb, 0xca, 0xfb, 0x78, 0xa7, + 0x2e, 0xf6, 0xfb, 0x41, + 0xfe, 0x78, 0xfb, 0x70, 0xf7, 0x2c, 0x7f, 0x20, 0xe5, 0xb9, 0xb8, 0x6a, + 0x64, 0x4a, 0x31, 0x71, + 0x5a, 0x6c, 0x5f, 0x19, 0x6a, 0x02, 0x55, 0x5f, 0x8b, 0x9e, 0xcb, 0xa9, + 0xee, 0x7d, 0x33, 0x52, + 0xa3, 0x7c, 0x1b, 0xea, 0x68, 0x42, 0xfb, 0x4d, 0x8e, 0x2e, 0xbb, 0xa4, + 0x7f, 0x64, 0x64, 0x37, + 0x5c, 0xff, 0x86, 0x82, 0x69, 0xb5, 0xf2, 0x1b, 0x81, 0x61, 0x90, 0x83, + 0xba, 0xe2, 0xc3, 0x1d, + 0xdb, 0x27, 0xb4, 0xf3, 0xa6, 0xb7, 0x6d, 0x0e, 0x7e, 0x00, 0xcf, 0xc5, + 0x3a, 0xab, 0xe1, 0x6a, + 0x64, 0x70, 0x9c, 0x16, 0x2b, 0xaf, 0x6b, 0x40, 0xef, 0x5b, 0xac, 0x73, + 0x39, 0x95, 0x9c, 0xaf, + 0x9c, 0x58, 0x93, 0x1e, 0xf4, 0x9b, 0x04, 0xcf, 0x0f, 0xae, 0xcc, 0x88, + 0xff, 0x4c, 0x46, 0x96, + 0x00, 0xff, 0xb7, 0x2d, 0x8d, 0xeb, 0xf5, 0x44, 0x5d, 0x31, 0xf4, 0xed, + 0x42, 0x3c, 0xcc, 0xcd, + 0xc1, 0x87, 0x5c, 0x81, 0x87, 0xe7, 0x02, 0xdf, 0x7f, 0x94, 0xea, 0xa2, + 0x66, 0x94, 0x23, 0x39, + 0x2d, 0x42, 0x8b, 0xa0, 0xf7, 0x4d, 0x6f, 0x6e, 0x28, 0x99, 0x56, 0xd5, + 0x28, 0x73, 0x39, 0xc3, + 0xe3, 0x8e, 0x41, 0x73, 0x39, 0x5d, 0xfd, 0x26, 0x9c, 0x83, 0xbd, 0x20, + 0xfd, 0x23, 0x23, 0xbb, + 0xf1, 0xfa, 0x37, 0xd9, 0x6a, 0x61, 0xea, 0xf5, 0xa0, 0x1e, 0xa4, 0x7c, + 0x5a, 0xa8, 0x95, 0x4e, + 0xb7, 0x6b, 0xee, 0x78, 0xa1, 0x9d, 0x37, 0xe1, 0x3d, 0x16, 0x4c, 0x0b, + 0x21, 0x76, 0xa6, 0xee, + 0x2d, 0xc3, 0x71, 0x5a, 0x44, 0x5e, 0x23, 0xb3, 0xde, 0xfb, 0x16, 0x60, + 0x82, 0x69, 0xf5, 0x60, + 0xe6, 0x72, 0xf2, 0xbc, 0x49, 0x9f, 0xfc, 0x5f, 0x32, 0xb2, 0x1b, 0xaf, + 0x7f, 0xb3, 0x72, 0x73, + 0xf7, 0x14, 0x57, 0xaf, 0x67, 0xf7, 0xbe, 0x41, 0xae, 0xc0, 0x99, 0x13, + 0xe7, 0xce, 0x9b, 0xdc, + 0xda, 0xd9, 0x03, 0x3d, 0x2c, 0xce, 0xf3, 0x75, 0xd9, 0xfc, 0x60, 0xee, + 0xab, 0x2e, 0x31, 0xbe, + 0xea, 0x86, 0x01, 0x3e, 0xaf, 0xaa, 0xf7, 0xcd, 0xfe, 0xda, 0xe2, 0x03, + 0x9f, 0xcb, 0x49, 0xf9, + 0x0f, 0x32, 0xb2, 0x9b, 0xaf, 0x7f, 0x95, 0x06, 0x6a, 0xae, 0x5a, 0x70, + 0x5c, 0x4f, 0xb0, 0x9f, + 0x43, 0xf2, 0x26, 0xfe, 0xf9, 0xc1, 0x96, 0xaf, 0x5a, 0xab, 0x2a, 0x7d, + 0x55, 0xcd, 0xc8, 0xce, + 0x32, 0xed, 0xd4, 0xd4, 0xe9, 0x7d, 0x33, 0xae, 0x1d, 0xd7, 0x83, 0xf9, + 0x25, 0x68, 0xce, 0x97, + 0x6a, 0x2e, 0x27, 0xe9, 0x1f, 0x19, 0xd9, 0x8d, 0xd7, 0xbf, 0x79, 0xb5, + 0x51, 0x59, 0xa4, 0xaf, + 0xc3, 0xb4, 0x72, 0x34, 0x28, 0xbb, 0xd8, 0xae, 0xef, 0xde, 0x29, 0xef, + 0x39, 0xbc, 0x53, 0xff, + 0xfc, 0x60, 0x8b, 0x83, 0xcf, 0x7d, 0xd5, 0xd9, 0x46, 0x43, 0xa5, 0x7f, + 0x0e, 0xff, 0x79, 0xc9, + 0xbe, 0x6f, 0x9a, 0x6e, 0x07, 0xf2, 0x5c, 0x22, 0xc4, 0xf5, 0xd4, 0x4c, + 0x2b, 0x61, 0x3a, 0xa6, + 0x1f, 0x90, 0xf4, 0x8f, 0x8c, 0x2c, 0x01, 0xfa, 0xb7, 0xdb, 0xd8, 0x9e, + 0x6a, 0xa8, 0xde, 0x37, + 0x15, 0xd3, 0x4a, 0x9b, 0x6e, 0x37, 0xb8, 0xdf, 0xa8, 0xc8, 0x9b, 0x40, + 0x8d, 0xcc, 0xd6, 0x3c, + 0x1b, 0xde, 0x6f, 0x72, 0x94, 0x32, 0x80, 0x81, 0x00, 0xb5, 0x7f, 0x5c, + 0x03, 0xd9, 0xe5, 0x89, + 0x35, 0xba, 0xeb, 0x92, 0x99, 0x3e, 0x63, 0x98, 0x56, 0xf1, 0xce, 0xe5, + 0x24, 0xfd, 0x23, 0x23, + 0xbb, 0xf1, 0xfa, 0xb7, 0xd8, 0x6d, 0xc4, 0x37, 0x57, 0xad, 0xb2, 0x36, + 0x57, 0x0d, 0x72, 0x05, + 0xfa, 0xb4, 0xd0, 0x0c, 0xca, 0x9b, 0xec, 0x9c, 0x07, 0xcf, 0x0f, 0x16, + 0x9a, 0x9b, 0xe6, 0xda, + 0x06, 0xbd, 0x6f, 0x3a, 0x3b, 0xfb, 0x01, 0x07, 0x3f, 0x90, 0xe7, 0x02, + 0x35, 0xda, 0x63, 0xbd, + 0x05, 0xff, 0x3f, 0x1e, 0x7e, 0x3f, 0x76, 0x2e, 0x27, 0xe9, 0x1f, 0x19, + 0x59, 0x12, 0xf4, 0x0f, + 0x57, 0xaf, 0xa7, 0xee, 0x7d, 0xcb, 0x2a, 0x7a, 0xdf, 0x52, 0x3c, 0x6f, + 0x52, 0xac, 0x3b, 0x3a, + 0x66, 0xe5, 0x4d, 0x2a, 0x56, 0xbf, 0x49, 0x6e, 0x92, 0x06, 0x1d, 0x14, + 0xec, 0xe7, 0x61, 0x86, + 0xeb, 0x21, 0xcc, 0x7d, 0xb3, 0x7a, 0xdf, 0x2c, 0x9e, 0x4b, 0xc1, 0xcb, + 0x73, 0xb1, 0xe6, 0xcc, + 0x41, 0x5c, 0x6f, 0x73, 0xa6, 0x37, 0x64, 0x3c, 0x17, 0xfe, 0xfe, 0x90, + 0xbd, 0xc9, 0xa8, 0x1a, + 0x46, 0x93, 0xe6, 0xff, 0x92, 0x91, 0x25, 0x41, 0xff, 0x94, 0xf5, 0x7a, + 0xdc, 0x6f, 0x2c, 0x2a, + 0x6b, 0x64, 0x20, 0xae, 0xa7, 0x64, 0x5a, 0x31, 0x7d, 0x01, 0xfd, 0xcb, + 0x4d, 0xb2, 0xad, 0x82, + 0x2f, 0x6f, 0x52, 0x3a, 0xcb, 0xd5, 0x21, 0xd6, 0xa7, 0xcf, 0x32, 0xad, + 0xf4, 0x24, 0xdb, 0xb6, + 0x7b, 0xdf, 0xd2, 0x6b, 0x7e, 0xad, 0x3d, 0x73, 0x53, 0xd4, 0x25, 0x57, + 0xef, 0xa8, 0x79, 0x2e, + 0x60, 0x31, 0xf0, 0xfb, 0x57, 0xef, 0x80, 0xf4, 0x8f, 0x8c, 0x2c, 0x11, + 0xf1, 0xbf, 0x4c, 0x2c, + 0x4c, 0xab, 0x0d, 0xa8, 0x91, 0x39, 0x50, 0xf7, 0xbe, 0x09, 0x4e, 0xcb, + 0xca, 0x97, 0x16, 0xfd, + 0x26, 0x30, 0x27, 0x6e, 0xf3, 0x24, 0xd7, 0xb0, 0xd9, 0xcf, 0x10, 0xef, + 0xe3, 0x39, 0x10, 0xe8, + 0x7d, 0x3b, 0x0a, 0x39, 0x77, 0xf6, 0x52, 0x5d, 0x1d, 0xf2, 0x2e, 0xb7, + 0xb7, 0xf7, 0xd6, 0x79, + 0x2e, 0x5e, 0x0e, 0x7e, 0x14, 0xce, 0x97, 0x72, 0x4d, 0x7a, 0xa4, 0x7f, + 0x64, 0x64, 0x37, 0xbf, + 0xfe, 0xa5, 0xdc, 0xc4, 0x31, 0xad, 0x14, 0xf5, 0x7a, 0xd8, 0xb9, 0x6a, + 0x23, 0x98, 0xab, 0x26, + 0xe1, 0xb4, 0x70, 0xf6, 0x73, 0xba, 0x93, 0xb1, 0xf2, 0x1e, 0xbc, 0xf7, + 0xed, 0x44, 0xdd, 0xfb, + 0xa6, 0x41, 0x3d, 0xf5, 0xa9, 0x5e, 0xb3, 0x39, 0xf8, 0x81, 0x3c, 0x97, + 0xf3, 0xad, 0x03, 0xde, + 0x9b, 0x3c, 0x4d, 0x37, 0x53, 0x61, 0xec, 0x67, 0x1e, 0xeb, 0x44, 0x70, + 0xbe, 0xa8, 0xff, 0x97, + 0x8c, 0xec, 0xe6, 0xeb, 0xdf, 0x64, 0xab, 0xb5, 0x11, 0x0b, 0xd3, 0x6a, + 0x8d, 0xbf, 0x1c, 0xac, + 0x55, 0x9c, 0xd3, 0xa2, 0xae, 0x41, 0x49, 0xcf, 0x72, 0x2d, 0x31, 0xf7, + 0x4d, 0xdd, 0xfb, 0xc6, + 0xf5, 0xd9, 0x57, 0x4f, 0xe8, 0xe1, 0xb9, 0xdc, 0x71, 0xe7, 0x5d, 0x44, + 0xac, 0x31, 0x68, 0x7e, + 0x30, 0xb7, 0x31, 0x2e, 0xd6, 0xa9, 0xf7, 0x2f, 0x3b, 0xa4, 0x7f, 0x64, + 0x64, 0x37, 0x5c, 0xff, + 0x46, 0x45, 0x25, 0x83, 0xb4, 0x70, 0x86, 0x60, 0xd5, 0xc7, 0x36, 0x57, + 0x4d, 0xf8, 0xd2, 0xc0, + 0x7c, 0xe6, 0xbd, 0x6f, 0x4b, 0x75, 0xef, 0x9b, 0x22, 0xae, 0x27, 0xf2, + 0x26, 0xf3, 0xcd, 0x06, + 0xbc, 0xbf, 0xb0, 0xf9, 0xc1, 0x90, 0x37, 0x41, 0xf3, 0xfb, 0x87, 0x97, + 0x6d, 0xd2, 0x3f, 0x32, + 0xb2, 0x9b, 0x7f, 0xfe, 0xb3, 0xeb, 0x92, 0x83, 0x67, 0xe6, 0x22, 0x59, + 0xf5, 0x10, 0xd7, 0xc3, + 0xd4, 0xc8, 0x2c, 0x70, 0xbd, 0x6f, 0x90, 0xf7, 0xd5, 0x46, 0x7a, 0x27, + 0xb7, 0x50, 0xf7, 0xbe, + 0xa9, 0x59, 0xf5, 0x42, 0x9f, 0x1d, 0xce, 0x97, 0x64, 0x7e, 0x30, 0xe4, + 0x4d, 0x72, 0x8b, 0xad, + 0x3a, 0xe7, 0x7c, 0x29, 0xfa, 0x4d, 0x8a, 0xe3, 0xcb, 0x16, 0xe9, 0x1f, + 0x19, 0xd9, 0xcd, 0xcf, + 0xff, 0x82, 0x2e, 0x54, 0x2e, 0xd8, 0xfe, 0xf7, 0xf3, 0x5c, 0xac, 0x98, + 0xdc, 0xf6, 0xad, 0xdd, + 0x3d, 0x65, 0x5c, 0xcf, 0xe2, 0x2f, 0x6f, 0xc4, 0xc2, 0x69, 0x11, 0x79, + 0x5f, 0x6d, 0xc2, 0xf4, + 0x4f, 0x39, 0xf7, 0xcd, 0xea, 0x7d, 0x1b, 0x2b, 0x7b, 0xdf, 0x44, 0x5c, + 0xcf, 0xb9, 0xaf, 0xe0, + 0xf9, 0xc1, 0x55, 0x8b, 0xf3, 0x25, 0x9d, 0x1f, 0x6c, 0xaf, 0xc9, 0xe4, + 0xb2, 0x49, 0xfa, 0x47, + 0x46, 0x76, 0xf3, 0xcf, 0x7f, 0x4e, 0xbf, 0x9a, 0x9d, 0x2b, 0xb8, 0x70, + 0x71, 0xf0, 0x07, 0xe9, + 0x0e, 0x8e, 0x69, 0x85, 0xe3, 0x2f, 0xa3, 0x38, 0x2d, 0xa0, 0x7f, 0x90, + 0xf7, 0xc5, 0xcc, 0x7d, + 0x8b, 0xce, 0xb4, 0x5a, 0xd3, 0x67, 0x37, 0x07, 0x1f, 0x7e, 0x16, 0x3f, + 0x17, 0xca, 0xe6, 0x07, + 0xc3, 0xf7, 0xb3, 0xd7, 0x2c, 0xcf, 0x48, 0xff, 0xc8, 0xc8, 0x6e, 0xbc, + 0xfe, 0xb1, 0xf3, 0x13, + 0xdb, 0xff, 0x1d, 0x7d, 0x92, 0x6f, 0x42, 0xbf, 0xda, 0xaa, 0xc7, 0xc2, + 0xea, 0xd1, 0x38, 0x2b, + 0x1d, 0x40, 0x2e, 0x35, 0x3f, 0x4e, 0xb7, 0xc2, 0xf2, 0xa6, 0x31, 0xf2, + 0x97, 0x1d, 0xe6, 0x69, + 0x6a, 0xc6, 0xf4, 0x6f, 0xa2, 0x9a, 0x7b, 0x99, 0x8e, 0x85, 0x69, 0x65, + 0xbf, 0x3f, 0x1e, 0xeb, + 0x3c, 0x29, 0xd4, 0xa4, 0xf3, 0x83, 0x81, 0x83, 0x3f, 0xca, 0xb6, 0x89, + 0x7f, 0x4a, 0x46, 0x96, + 0x04, 0xfd, 0xf3, 0xe7, 0x0a, 0x32, 0x9d, 0xdc, 0xb4, 0xd0, 0x28, 0x9d, + 0xba, 0x7a, 0x2c, 0x9e, + 0xda, 0xb5, 0x73, 0x05, 0x81, 0x3c, 0x17, 0x7c, 0x5c, 0x0f, 0xc9, 0x69, + 0x81, 0xbc, 0xef, 0xb1, + 0xde, 0x84, 0x1c, 0x48, 0x56, 0x75, 0xae, 0xeb, 0x67, 0xbb, 0x55, 0xdc, + 0x5c, 0xce, 0x7a, 0xc4, + 0xb9, 0x9c, 0xc1, 0xf3, 0x83, 0xed, 0x7e, 0x93, 0x39, 0xe9, 0x1f, 0x19, + 0x59, 0xc2, 0xf4, 0xcf, + 0xa3, 0x05, 0xbc, 0xc7, 0x62, 0xb9, 0x55, 0x87, 0x79, 0xe1, 0xd5, 0xbb, + 0x01, 0x3c, 0x17, 0x17, + 0x07, 0x3f, 0x7b, 0xbc, 0x9a, 0xab, 0x76, 0x6d, 0x5f, 0x95, 0xe7, 0x7d, + 0xb3, 0x2d, 0xc8, 0x81, + 0x64, 0x94, 0x73, 0xdf, 0xfc, 0xfc, 0xfe, 0x90, 0x1a, 0x19, 0x4c, 0xef, + 0xdb, 0xad, 0xa0, 0xde, + 0x37, 0xf7, 0xfc, 0xe0, 0xb2, 0xd0, 0x42, 0xe2, 0x3f, 0x93, 0x91, 0x25, + 0x58, 0xff, 0xec, 0xb8, + 0x59, 0x89, 0x33, 0xa3, 0x78, 0xae, 0xc0, 0xd7, 0xaf, 0xe6, 0xce, 0x9b, + 0xf0, 0xde, 0xb7, 0x45, + 0xba, 0x1e, 0xaa, 0x43, 0xab, 0x1a, 0x99, 0x70, 0x5f, 0x75, 0x94, 0xe5, + 0x79, 0xdf, 0xe0, 0xde, + 0xb7, 0x80, 0xb8, 0x1e, 0x96, 0x69, 0xb5, 0xc4, 0x71, 0xbe, 0x42, 0x6b, + 0x18, 0x81, 0x6d, 0xb3, + 0xd8, 0x6a, 0x90, 0xfe, 0x91, 0x91, 0x25, 0x5f, 0xff, 0xd6, 0x58, 0xf5, + 0xd0, 0x63, 0x31, 0x16, + 0xfd, 0x6a, 0x9e, 0xbc, 0x09, 0xd3, 0xb5, 0xca, 0x45, 0x08, 0xcf, 0x85, + 0xfb, 0xaa, 0x38, 0xfe, + 0xb2, 0x60, 0x3e, 0xa7, 0xda, 0xba, 0xaa, 0xf7, 0xcd, 0x8c, 0xc6, 0xb4, + 0x42, 0xcf, 0xe5, 0x54, + 0x73, 0xbe, 0x9a, 0xa4, 0x7f, 0x64, 0x64, 0xc9, 0xd7, 0x3f, 0xce, 0xb4, + 0x92, 0xc4, 0xf5, 0xb4, + 0x7e, 0x48, 0xde, 0xe4, 0xdc, 0x3b, 0x3f, 0x98, 0x6b, 0xe1, 0x10, 0x7a, + 0xdf, 0xd4, 0xbe, 0x2a, + 0xcf, 0xfb, 0xce, 0x52, 0x6d, 0x88, 0x01, 0x3a, 0x3c, 0x98, 0xb0, 0xb8, + 0x1e, 0x92, 0x69, 0x55, + 0x8a, 0x93, 0xf3, 0x45, 0xfa, 0x47, 0x46, 0x96, 0x78, 0xfd, 0x43, 0xb1, + 0xea, 0x99, 0xdf, 0x08, + 0x71, 0x3d, 0x38, 0xfb, 0x79, 0xf2, 0x26, 0xab, 0x1e, 0x0b, 0x91, 0x37, + 0x99, 0x6e, 0xa2, 0x7a, + 0xdf, 0xec, 0xbc, 0xaf, 0xcd, 0x7e, 0x06, 0x0e, 0x7e, 0x7a, 0x98, 0xea, + 0xa4, 0x03, 0x6a, 0xb4, + 0x33, 0x71, 0x32, 0xad, 0xf0, 0x9c, 0xaf, 0x43, 0xca, 0x7f, 0x90, 0x91, + 0x25, 0x5f, 0xff, 0x44, + 0xbd, 0x1e, 0xae, 0xf7, 0x4d, 0xf8, 0x8d, 0x36, 0x9b, 0xca, 0x9a, 0x8f, + 0xe4, 0xcb, 0x9b, 0x80, + 0xbe, 0x84, 0xf7, 0x9b, 0xb0, 0xf3, 0xd5, 0x3c, 0xd7, 0xd2, 0x47, 0x1b, + 0x1d, 0xae, 0x7f, 0x36, + 0x0f, 0xe6, 0x38, 0xd7, 0x5c, 0xf1, 0x5c, 0xb2, 0x4e, 0x5d, 0xb2, 0x1e, + 0x81, 0x69, 0x95, 0xc3, + 0xcd, 0xe5, 0x44, 0x71, 0xbe, 0xa8, 0xfe, 0x8f, 0x8c, 0x2c, 0xf1, 0xfa, + 0xc7, 0x99, 0x56, 0xca, + 0x7a, 0xbd, 0x81, 0x24, 0xae, 0xd7, 0x03, 0xb6, 0xd5, 0x2a, 0x6f, 0x62, + 0x9f, 0x0b, 0x43, 0xfb, + 0x4d, 0xac, 0xde, 0x37, 0xc8, 0xfb, 0xc2, 0xdc, 0xcb, 0xd4, 0x30, 0xd5, + 0xb5, 0x39, 0xf8, 0x5e, + 0x9e, 0x8b, 0x88, 0x35, 0xe6, 0x81, 0x69, 0x35, 0xe3, 0xf5, 0xd4, 0xc6, + 0x75, 0xe3, 0x7a, 0x22, + 0xd6, 0x99, 0x57, 0xc6, 0x12, 0xc5, 0xac, 0x39, 0xea, 0x7f, 0x23, 0x23, + 0x4b, 0xb4, 0xfe, 0x61, + 0x99, 0x56, 0x98, 0xb8, 0xde, 0x51, 0xaa, 0x9b, 0x3f, 0xa9, 0xd4, 0xaa, + 0xec, 0xfc, 0x17, 0xd4, + 0x6f, 0x02, 0x5a, 0x96, 0x19, 0xb0, 0x33, 0xdd, 0xd1, 0x8a, 0x79, 0x0a, + 0x39, 0x10, 0xe7, 0x6c, + 0x76, 0xa4, 0x75, 0xd7, 0x78, 0x2e, 0xe0, 0x5f, 0xb3, 0xbf, 0x43, 0x8f, + 0x86, 0x94, 0xe7, 0x62, + 0xc7, 0xf5, 0xee, 0x94, 0xf7, 0x54, 0x71, 0xbd, 0x0c, 0xd4, 0x30, 0xa2, + 0x39, 0x5f, 0xc4, 0x3f, + 0x20, 0x23, 0x4b, 0xb4, 0xfe, 0x59, 0x4c, 0xab, 0xfc, 0x20, 0xa6, 0xb9, + 0x6a, 0xc7, 0xc2, 0x57, + 0x95, 0xe5, 0x4d, 0x4a, 0xa7, 0xb9, 0xba, 0x3e, 0xcf, 0xb4, 0xf4, 0x25, + 0xd3, 0xbf, 0xa1, 0xd6, + 0x95, 0xf4, 0xfe, 0x8a, 0x1a, 0x6d, 0xe0, 0xe0, 0x9f, 0x6e, 0x1f, 0xa8, + 0x78, 0x2e, 0x22, 0xae, + 0x57, 0x6c, 0xa3, 0x98, 0x56, 0x3c, 0xd6, 0x89, 0xe5, 0x7c, 0x11, 0xff, + 0x8a, 0x8c, 0x2c, 0xd9, + 0xfa, 0x87, 0x64, 0x5a, 0x4d, 0x91, 0xbd, 0x6f, 0xeb, 0x9c, 0x16, 0x97, + 0x96, 0xed, 0x1c, 0x70, + 0xfe, 0xbd, 0x1d, 0xef, 0x5b, 0xea, 0x4d, 0x65, 0xef, 0x5b, 0x3f, 0xc3, + 0xe3, 0x7a, 0xc5, 0xe5, + 0x66, 0x5d, 0xc6, 0x73, 0xe1, 0x1c, 0xfc, 0x59, 0xa9, 0x81, 0x8a, 0xeb, + 0x9d, 0x55, 0x0f, 0xca, + 0x68, 0xce, 0x17, 0xf1, 0x4f, 0xc9, 0xc8, 0x12, 0xad, 0x7f, 0x16, 0xab, + 0x3e, 0xae, 0xb9, 0x6a, + 0xe1, 0x9c, 0x16, 0xcd, 0x48, 0xf5, 0x53, 0xdd, 0xf4, 0x24, 0xd3, 0xce, + 0x59, 0x33, 0x2f, 0x21, + 0x07, 0x12, 0xae, 0x7f, 0x22, 0xae, 0x97, 0x82, 0xf7, 0x17, 0xc2, 0x73, + 0x81, 0xbc, 0x09, 0x9c, + 0x4f, 0x75, 0x19, 0xcf, 0xc5, 0x7a, 0x7d, 0xe8, 0x7d, 0x63, 0xfa, 0x8c, + 0xe3, 0xf7, 0x13, 0xff, + 0x99, 0x8c, 0x2c, 0xd9, 0xfa, 0x37, 0x0c, 0x61, 0xd5, 0xbb, 0xeb, 0x41, + 0x02, 0xf8, 0xcb, 0x41, + 0x35, 0x28, 0x56, 0xef, 0x5b, 0xf8, 0x99, 0x6e, 0x90, 0xe9, 0x42, 0xef, + 0x9b, 0x36, 0x60, 0x7a, + 0xa6, 0xea, 0x7d, 0x93, 0xb0, 0xea, 0xfd, 0x1c, 0xfc, 0xaa, 0x8a, 0xe7, + 0x12, 0x39, 0xd6, 0x09, + 0x6b, 0x42, 0xf3, 0x3f, 0xc8, 0xc8, 0x92, 0xac, 0x7f, 0xda, 0xa4, 0x84, + 0x8a, 0xeb, 0x45, 0x9a, + 0xab, 0x86, 0xea, 0x7d, 0x13, 0xcc, 0x67, 0x75, 0xef, 0x9b, 0xba, 0x5e, + 0x0f, 0x62, 0x8d, 0x85, + 0xd3, 0xea, 0x41, 0x95, 0x69, 0x96, 0x74, 0x7e, 0x30, 0xe4, 0x4d, 0xd8, + 0xd7, 0x81, 0x3e, 0x23, + 0x38, 0x5f, 0x2d, 0xc1, 0xf9, 0xa2, 0xf9, 0xbf, 0x64, 0x64, 0x37, 0x5e, + 0xff, 0xd8, 0x19, 0x2a, + 0x88, 0xe7, 0x22, 0xea, 0x41, 0xf0, 0x71, 0x3d, 0xcc, 0x5c, 0x35, 0x0c, + 0xa7, 0x45, 0xf4, 0xbe, + 0x09, 0xe6, 0x33, 0xae, 0xf7, 0x4d, 0x1d, 0xd7, 0xcb, 0x41, 0x6f, 0xf2, + 0x3c, 0xd5, 0x90, 0xf2, + 0x5c, 0x20, 0x6f, 0x72, 0x52, 0xac, 0x71, 0xce, 0xd7, 0x48, 0x3e, 0x3f, + 0xd8, 0xbb, 0x26, 0xa4, + 0x7f, 0x64, 0x64, 0x37, 0x5e, 0xff, 0xe6, 0xd5, 0x46, 0xe5, 0x56, 0x79, + 0x8d, 0xe7, 0xb2, 0x8a, + 0xeb, 0xe9, 0xd7, 0x8c, 0xeb, 0xd9, 0x7e, 0xa3, 0xc5, 0x69, 0x51, 0xcd, + 0x72, 0xb3, 0x7a, 0xdf, + 0xf8, 0xdf, 0x15, 0x5f, 0x1b, 0x61, 0x2e, 0xa7, 0xaf, 0xf7, 0xcd, 0x3b, + 0x3f, 0x78, 0xd7, 0xcd, + 0xf9, 0x0a, 0x99, 0x1f, 0xec, 0x5d, 0x13, 0xd2, 0x3f, 0x32, 0xb2, 0x1b, + 0xaf, 0x7f, 0xb3, 0x4a, + 0x23, 0x88, 0xe7, 0x02, 0x75, 0xc9, 0x10, 0xd7, 0xab, 0xc6, 0x15, 0xd7, + 0x5b, 0xf1, 0x97, 0x43, + 0xcd, 0xcd, 0x3c, 0x8d, 0x87, 0x69, 0xa5, 0xe0, 0xf7, 0xdb, 0x79, 0x93, + 0xe3, 0xad, 0x43, 0xc8, + 0x1b, 0x7b, 0xf3, 0x26, 0xdb, 0xfb, 0x7e, 0x0e, 0xfe, 0x8a, 0xf3, 0x45, + 0xfa, 0x47, 0x46, 0x76, + 0xe3, 0xf5, 0x8f, 0xe9, 0x57, 0x30, 0xcf, 0xa5, 0xf2, 0x96, 0x6d, 0xf6, + 0xff, 0xcb, 0xa7, 0x9b, + 0x35, 0x29, 0xcf, 0xc5, 0x55, 0x0f, 0x12, 0x13, 0x7f, 0xd9, 0xe9, 0x7d, + 0xc3, 0xbc, 0x7b, 0xdc, + 0x5c, 0x4e, 0x5c, 0xef, 0x9b, 0xcd, 0xf9, 0x0a, 0x9b, 0x1f, 0x0c, 0x79, + 0x13, 0x88, 0x75, 0xee, + 0xcc, 0x81, 0xa3, 0x45, 0xf9, 0x0f, 0x32, 0xb2, 0x24, 0xe5, 0x3f, 0xbc, + 0x1c, 0xfc, 0xea, 0x5b, + 0xc4, 0x1c, 0x8c, 0xaa, 0x9c, 0xe7, 0xc2, 0xe3, 0x7a, 0x38, 0xa6, 0x15, + 0x8e, 0xd3, 0xb2, 0x61, + 0x64, 0xa0, 0xf7, 0x6d, 0xa8, 0xc8, 0x7b, 0x58, 0x16, 0x65, 0x2e, 0x67, + 0x26, 0xe2, 0x5c, 0xce, + 0xc0, 0xf9, 0xc1, 0xee, 0x7e, 0x13, 0xea, 0xff, 0x20, 0x23, 0x4b, 0x6a, + 0xfe, 0xd7, 0x48, 0x0d, + 0xb3, 0x6d, 0x88, 0xeb, 0x6d, 0x9f, 0x6f, 0xcb, 0x79, 0x2e, 0x90, 0x37, + 0x19, 0xe5, 0xdb, 0x10, + 0xd7, 0xdb, 0x88, 0xc3, 0x57, 0x35, 0x35, 0x83, 0xf7, 0x7e, 0x0c, 0x30, + 0xfa, 0x87, 0x9d, 0xcb, + 0x99, 0xbb, 0xee, 0x5c, 0xce, 0x15, 0x07, 0xff, 0x74, 0xe7, 0xc0, 0xd1, + 0x42, 0xe2, 0x5f, 0x91, + 0x91, 0x25, 0xb8, 0xfe, 0x45, 0xb3, 0xe2, 0x7a, 0x5a, 0x3b, 0x8c, 0xe7, + 0xb2, 0x75, 0x5a, 0xaa, + 0x41, 0x5c, 0x2f, 0xd3, 0x97, 0xf3, 0x5c, 0xb8, 0xaf, 0x7a, 0x02, 0xbe, + 0x6a, 0x0a, 0x35, 0xf7, + 0x52, 0x95, 0xf7, 0xb5, 0xe3, 0x8e, 0xf1, 0xce, 0xe5, 0x44, 0xd4, 0x30, + 0xb2, 0xb3, 0x24, 0xac, + 0x49, 0xe9, 0xb8, 0x78, 0x48, 0xfc, 0x03, 0x32, 0xb2, 0x04, 0xeb, 0x5f, + 0x10, 0xab, 0xde, 0xc7, + 0x73, 0xb1, 0x73, 0x05, 0x70, 0x2e, 0x84, 0x1e, 0x0b, 0x09, 0xcf, 0x85, + 0x9f, 0xa1, 0x80, 0xbf, + 0xbc, 0x3d, 0xd5, 0x70, 0x73, 0xdf, 0x7a, 0x08, 0xfd, 0x43, 0x33, 0xad, + 0x62, 0x9c, 0xcb, 0x69, + 0xbd, 0xa6, 0xf0, 0xa5, 0x29, 0xfe, 0x47, 0x46, 0x96, 0x58, 0xfd, 0x53, + 0xc5, 0xf5, 0x6c, 0x0e, + 0xfe, 0x59, 0xb9, 0x06, 0xfa, 0x27, 0x9d, 0x1f, 0x0c, 0x79, 0x93, 0x9e, + 0xe0, 0x2f, 0x17, 0x55, + 0xbe, 0x6a, 0x1f, 0xf4, 0x4f, 0x6f, 0xda, 0x75, 0x2f, 0xa1, 0xec, 0x67, + 0x9b, 0x69, 0xd5, 0xc7, + 0x30, 0xad, 0x0a, 0x48, 0xa6, 0x95, 0xaa, 0x86, 0xd1, 0xbd, 0x26, 0x94, + 0xff, 0x25, 0x23, 0x4b, + 0xac, 0xfe, 0x0d, 0xf3, 0xed, 0x5d, 0xc4, 0x5c, 0xb5, 0xf4, 0xa2, 0xc2, + 0xf3, 0x1a, 0xd9, 0x30, + 0x0e, 0xfe, 0x2c, 0xd7, 0x80, 0x58, 0x62, 0x61, 0xa4, 0xb5, 0x42, 0xfd, + 0x50, 0xab, 0xf7, 0xcd, + 0xfe, 0x1a, 0x60, 0x20, 0x00, 0x0f, 0x26, 0x3d, 0x4a, 0x75, 0x20, 0xe7, + 0xe2, 0xa9, 0x4b, 0x46, + 0xb3, 0xea, 0xf1, 0x4c, 0x2b, 0xe5, 0x5c, 0x4e, 0xcf, 0x9a, 0x90, 0xfe, + 0x91, 0x91, 0x25, 0x55, + 0xff, 0xb0, 0x4c, 0x2b, 0xde, 0xfb, 0x36, 0x77, 0x7a, 0xdf, 0x3c, 0x3c, + 0x17, 0x77, 0xde, 0x04, + 0xfe, 0xbe, 0x73, 0x5a, 0x94, 0xce, 0x0f, 0xe6, 0xaf, 0xe9, 0xea, 0x7d, + 0x13, 0x3f, 0xdb, 0x62, + 0xc1, 0x58, 0x1c, 0x7c, 0xab, 0x2e, 0xb9, 0xc9, 0xeb, 0x92, 0x57, 0xac, + 0x7a, 0x33, 0x3c, 0xae, + 0x57, 0x3d, 0xdc, 0x45, 0x32, 0xad, 0x54, 0x73, 0x39, 0xbd, 0x6b, 0x42, + 0xfa, 0x47, 0x46, 0x96, + 0x58, 0xfd, 0x83, 0x7a, 0x3d, 0x6c, 0xef, 0xdb, 0x34, 0xc8, 0x6f, 0x74, + 0x71, 0xf0, 0xcf, 0x76, + 0x82, 0xd8, 0x54, 0x35, 0x3f, 0x07, 0xdf, 0xdd, 0xfb, 0xc6, 0xff, 0xff, + 0x40, 0xf0, 0x60, 0x20, + 0x27, 0x0c, 0x3a, 0xe8, 0xe6, 0xb9, 0x94, 0x4e, 0x4a, 0x35, 0x88, 0xeb, + 0xf1, 0x73, 0x61, 0xc8, + 0x99, 0x32, 0x0a, 0xbf, 0x5f, 0xc5, 0xf9, 0xf2, 0xae, 0x09, 0xe9, 0x1f, + 0x19, 0x59, 0x52, 0xf5, + 0x0f, 0xcb, 0xb4, 0x42, 0xc5, 0xf5, 0x86, 0x50, 0x23, 0x53, 0xde, 0x2b, + 0x2c, 0x8a, 0x87, 0xb2, + 0xf9, 0xc1, 0x3c, 0x6f, 0x32, 0xd1, 0xdb, 0x81, 0xcc, 0x53, 0xe6, 0x9f, + 0x02, 0x07, 0xdf, 0x5f, + 0x97, 0x0c, 0x73, 0xd9, 0x77, 0xce, 0x5d, 0x33, 0x37, 0xd7, 0xd9, 0xcf, + 0x76, 0x5c, 0x0f, 0xc1, + 0xb4, 0xaa, 0x46, 0xe4, 0x7c, 0x91, 0xfe, 0x91, 0x91, 0x25, 0x55, 0xff, + 0x44, 0xbd, 0x5e, 0x26, + 0xee, 0xb9, 0x6a, 0xf2, 0xf9, 0xc1, 0xb7, 0x2b, 0x6f, 0xd9, 0x3c, 0xce, + 0x35, 0x72, 0x73, 0x9e, + 0x33, 0x91, 0xe6, 0x3d, 0x04, 0x3b, 0xba, 0xd0, 0x2c, 0x9e, 0x55, 0x56, + 0x67, 0xca, 0x20, 0x9e, + 0x0b, 0xd7, 0x42, 0xad, 0x1b, 0x1b, 0xbf, 0x7f, 0x6d, 0x4d, 0x48, 0xff, + 0xc8, 0xc8, 0x92, 0xaa, + 0x7f, 0x91, 0x98, 0x56, 0x03, 0x4c, 0xef, 0xdb, 0x3a, 0xa7, 0xc5, 0xcf, + 0xc1, 0x2f, 0x9d, 0xe7, + 0xea, 0x3c, 0xd6, 0x77, 0x9c, 0x6b, 0xea, 0xf3, 0x6c, 0x4b, 0x15, 0xd7, + 0xab, 0x9e, 0xe4, 0x6a, + 0xb9, 0x69, 0x21, 0x98, 0xe7, 0x62, 0x71, 0xf0, 0xa1, 0x46, 0x50, 0xd5, + 0x9b, 0x7c, 0x35, 0xce, + 0x17, 0xe9, 0x1f, 0x19, 0x59, 0x42, 0xf5, 0x2f, 0x24, 0xae, 0xe7, 0xad, + 0x41, 0xa9, 0xe2, 0xe7, + 0xaa, 0x85, 0xf9, 0xd2, 0xd0, 0x6f, 0xd2, 0xc9, 0xb3, 0xf3, 0x9f, 0xbe, + 0xd0, 0x5b, 0x76, 0xde, + 0x23, 0xec, 0x67, 0x8a, 0x19, 0x94, 0x1b, 0x0d, 0x6f, 0xac, 0xd1, 0xc7, + 0x73, 0x61, 0xfe, 0x31, + 0xe8, 0xea, 0xd6, 0xc9, 0xa6, 0x94, 0xe7, 0x22, 0xde, 0xdf, 0x55, 0x38, + 0x5f, 0xa4, 0x7f, 0x64, + 0x64, 0xc9, 0xd4, 0x3f, 0x27, 0xae, 0x87, 0x60, 0x5a, 0x21, 0xe6, 0xaa, + 0xa1, 0x7a, 0xdf, 0x36, + 0x8c, 0xc2, 0x49, 0xae, 0x01, 0xbd, 0x6f, 0x1a, 0x70, 0xf0, 0xc7, 0x99, + 0xb0, 0x33, 0xa5, 0xcd, + 0xaa, 0x6f, 0x06, 0xf8, 0xe4, 0xdd, 0x55, 0x8d, 0x76, 0x79, 0x8d, 0x83, + 0xef, 0xe7, 0xb9, 0x5c, + 0x3d, 0xd6, 0x49, 0xfa, 0x47, 0x46, 0x96, 0x48, 0xfd, 0x8b, 0xce, 0xb4, + 0x52, 0xcf, 0x55, 0x43, + 0x70, 0x5a, 0x36, 0x4f, 0x73, 0x8d, 0x54, 0x1f, 0xd3, 0xfb, 0x86, 0x63, + 0xd5, 0xf3, 0x1a, 0x99, + 0xdb, 0x3b, 0x7b, 0xc1, 0x3c, 0x97, 0x55, 0xde, 0x24, 0x0a, 0xbf, 0x7f, + 0x15, 0xeb, 0x24, 0xfd, + 0x23, 0x23, 0xbb, 0xf1, 0xfa, 0xc7, 0x74, 0x67, 0x2d, 0x6f, 0x8a, 0x65, + 0xd5, 0x23, 0x99, 0x56, + 0xc0, 0x9f, 0xc7, 0x70, 0x5a, 0x8a, 0x67, 0xb9, 0x3a, 0xaa, 0xf7, 0x97, + 0xbd, 0x3f, 0x31, 0x83, + 0x52, 0xc5, 0xb4, 0x2a, 0xb6, 0xec, 0xde, 0x37, 0x19, 0xcf, 0x05, 0xb4, + 0x70, 0xeb, 0xa2, 0xba, + 0x5f, 0x3e, 0x29, 0xd4, 0xa4, 0xf3, 0x83, 0x03, 0xd7, 0x84, 0xf4, 0x8f, + 0x8c, 0xec, 0xc6, 0xeb, + 0xdf, 0xac, 0xdc, 0xf4, 0xf0, 0x5c, 0xa0, 0x2e, 0x19, 0xc9, 0xaa, 0xe7, + 0x4c, 0x2b, 0x25, 0x7f, + 0x19, 0xcb, 0x69, 0xd1, 0x3b, 0x30, 0xff, 0x57, 0xc3, 0xf4, 0xfe, 0xf6, + 0x91, 0x73, 0x39, 0x83, + 0xe3, 0x7a, 0xab, 0x1a, 0x6d, 0x7f, 0xde, 0xe4, 0x96, 0x64, 0x7e, 0xb0, + 0x88, 0x75, 0x76, 0x2a, + 0x9e, 0x58, 0x27, 0xe9, 0x1f, 0x19, 0xd9, 0x8d, 0xd7, 0xbf, 0xc5, 0x6e, + 0x63, 0x55, 0x97, 0x6c, + 0x71, 0xf0, 0x67, 0xf9, 0x46, 0xf5, 0xd6, 0xce, 0x9e, 0x4a, 0xff, 0x70, + 0xfc, 0xe5, 0x14, 0x76, + 0xae, 0x5a, 0xab, 0x74, 0xa2, 0x37, 0x54, 0xbe, 0xb4, 0xd0, 0xca, 0x9c, + 0x35, 0x83, 0x12, 0x53, + 0xaf, 0x17, 0xd6, 0xfb, 0xa6, 0x19, 0xe9, 0x91, 0xde, 0x86, 0x1c, 0xf1, + 0x0e, 0xc4, 0x0a, 0x65, + 0xf3, 0x83, 0x21, 0x6f, 0x62, 0xd5, 0x30, 0xae, 0xde, 0x1f, 0xe9, 0x1f, + 0x19, 0xd9, 0x8d, 0xd7, + 0x3f, 0x76, 0xee, 0xf2, 0xf3, 0x5c, 0x40, 0x5b, 0x76, 0xd9, 0x5e, 0x0f, + 0xe1, 0xb9, 0x88, 0xb8, + 0xde, 0x49, 0x7c, 0xfc, 0x65, 0xe0, 0xb4, 0x94, 0x8e, 0x33, 0x0d, 0xd4, + 0xfb, 0x8e, 0x93, 0x69, + 0xc5, 0x7e, 0x06, 0xd4, 0x30, 0xe6, 0x47, 0xa9, 0x96, 0x93, 0x37, 0x59, + 0x9b, 0x1f, 0xbc, 0xbd, + 0x0f, 0xcc, 0x2b, 0x88, 0x75, 0xae, 0xf2, 0x26, 0xa4, 0x7f, 0x64, 0x64, + 0x89, 0xc9, 0x7f, 0x78, + 0xea, 0x92, 0x2b, 0x7b, 0xa1, 0x3c, 0x17, 0x4b, 0x77, 0x80, 0x69, 0xb5, + 0x33, 0x55, 0xc4, 0xf5, + 0xd0, 0x9c, 0x96, 0xed, 0x46, 0x69, 0x99, 0x46, 0xe9, 0x9f, 0x60, 0x5a, + 0xe1, 0xea, 0xf5, 0x30, + 0x4c, 0x2b, 0x3f, 0xbf, 0x5f, 0x63, 0xff, 0x16, 0xc4, 0xc1, 0x17, 0xfd, + 0x26, 0xd6, 0xfc, 0xe0, + 0xfe, 0x65, 0x87, 0xf4, 0x8f, 0x8c, 0x2c, 0x79, 0xf9, 0xdf, 0xcc, 0x62, + 0xa7, 0x0e, 0x79, 0x03, + 0x29, 0xcf, 0xc5, 0xe2, 0xe0, 0x17, 0x2f, 0x76, 0x0f, 0x62, 0xe3, 0x2f, + 0x2f, 0xcb, 0xf5, 0xd2, + 0x22, 0xd5, 0xc4, 0xbc, 0x6b, 0x74, 0xbd, 0x1e, 0x8a, 0x69, 0x95, 0x0d, + 0xed, 0x7d, 0x73, 0xf2, + 0x26, 0xfe, 0x7e, 0x93, 0x39, 0xf1, 0x9f, 0xc9, 0xc8, 0x92, 0xa9, 0x7f, + 0x8e, 0xdf, 0x28, 0x72, + 0x05, 0xd3, 0x75, 0x9e, 0x0b, 0xf4, 0x58, 0x70, 0x16, 0xf2, 0x5c, 0xaf, + 0xcb, 0x78, 0x2e, 0xdc, + 0x78, 0xef, 0x1b, 0xc6, 0x57, 0xad, 0x1e, 0x96, 0xe6, 0x1a, 0x4a, 0xff, + 0x38, 0xd3, 0x0a, 0x3b, + 0x97, 0x53, 0xcd, 0xb4, 0xea, 0xec, 0x22, 0xe6, 0x72, 0xa6, 0x97, 0x15, + 0x9e, 0xeb, 0x71, 0xe6, + 0x07, 0x93, 0xfe, 0x91, 0x91, 0x25, 0x52, 0xff, 0x82, 0x59, 0xf5, 0x2e, + 0x9e, 0x4b, 0x10, 0x07, + 0x3f, 0x60, 0x7e, 0xf0, 0xca, 0x57, 0xc5, 0xf1, 0x97, 0x37, 0xa7, 0x5a, + 0x0b, 0xf3, 0xae, 0x51, + 0x71, 0xbd, 0x55, 0x0d, 0x23, 0xa2, 0x46, 0x46, 0xed, 0x4b, 0xf3, 0x35, + 0x71, 0x7a, 0xdf, 0xd8, + 0x5a, 0x1c, 0x5d, 0x76, 0x49, 0xff, 0xc8, 0xc8, 0x12, 0xa7, 0x7f, 0x16, + 0xab, 0x3e, 0xc4, 0x6f, + 0x04, 0x0e, 0x3e, 0xf3, 0x09, 0x2b, 0xb7, 0xab, 0x6f, 0xd9, 0xb9, 0xb0, + 0x62, 0x85, 0x41, 0x3c, + 0x97, 0x7e, 0xaa, 0x93, 0x9a, 0x6f, 0xe3, 0x66, 0x94, 0x33, 0x5f, 0xb5, + 0xe0, 0xeb, 0x37, 0xb1, + 0xce, 0x64, 0x46, 0x90, 0x56, 0xaa, 0xe3, 0x7a, 0x01, 0xfc, 0xfe, 0xa0, + 0x53, 0x22, 0xae, 0x86, + 0x31, 0x60, 0x4d, 0x28, 0xff, 0x41, 0x46, 0x96, 0x3c, 0xfd, 0xc3, 0xb2, + 0xea, 0x75, 0xde, 0xfb, + 0x06, 0x1a, 0x27, 0xe3, 0xb9, 0x40, 0xde, 0x64, 0xf3, 0x74, 0xa7, 0x56, + 0x3d, 0xcd, 0xd7, 0xa4, + 0x75, 0xc5, 0x96, 0x9e, 0x82, 0xaf, 0x9a, 0xf3, 0x9d, 0xd5, 0x80, 0x81, + 0x90, 0x19, 0xa7, 0x3b, + 0x2e, 0x1e, 0x0c, 0xff, 0xfe, 0xe8, 0xac, 0xfa, 0x90, 0x58, 0x62, 0x84, + 0xde, 0x37, 0x6f, 0xac, + 0x93, 0xf4, 0x8f, 0x8c, 0x2c, 0x71, 0xfa, 0x17, 0x9d, 0x69, 0x65, 0xac, + 0x72, 0x05, 0x5e, 0x9e, + 0x8b, 0x27, 0x6f, 0x7a, 0x26, 0x99, 0x1f, 0xec, 0xf2, 0x55, 0xb3, 0xbe, + 0xb9, 0x97, 0x6e, 0xf6, + 0x33, 0x70, 0xf0, 0x45, 0x5d, 0x72, 0xba, 0x8d, 0xab, 0x27, 0x14, 0x73, + 0x39, 0xb5, 0x38, 0xe6, + 0x72, 0x06, 0xae, 0x09, 0xe9, 0x1f, 0x19, 0x59, 0xe2, 0xf4, 0x0f, 0xcb, + 0xb4, 0x9a, 0x6c, 0x41, + 0x5c, 0x4f, 0xe6, 0x37, 0x3a, 0x79, 0x93, 0x2d, 0x76, 0x6e, 0x0a, 0x9d, + 0x1f, 0x0c, 0x79, 0x13, + 0xcb, 0x57, 0xf5, 0x9f, 0xd5, 0x80, 0x81, 0x90, 0x75, 0xf1, 0x60, 0x76, + 0x2d, 0xff, 0x1a, 0xb4, + 0xb2, 0x38, 0xcb, 0x36, 0x64, 0x3c, 0x17, 0xfe, 0xfe, 0x22, 0xc4, 0xf5, + 0xae, 0xc6, 0xf9, 0x22, + 0xfd, 0x23, 0x23, 0x4b, 0x9c, 0xfe, 0xd9, 0xf5, 0x7a, 0xea, 0xde, 0x37, + 0x4c, 0x5c, 0xcf, 0x84, + 0x1a, 0x99, 0xad, 0x45, 0xb6, 0xa1, 0xca, 0x9b, 0x80, 0xbf, 0x1c, 0xec, + 0xab, 0x6a, 0x86, 0xcd, + 0xc1, 0xf7, 0xd6, 0x25, 0x57, 0x5c, 0x3c, 0x97, 0xac, 0x87, 0xe7, 0x12, + 0x3d, 0xae, 0xa7, 0x29, + 0x39, 0x5f, 0xeb, 0x6b, 0x42, 0xfa, 0x47, 0x46, 0x96, 0x38, 0xfd, 0x43, + 0xd7, 0xeb, 0x55, 0xd0, + 0x73, 0xd5, 0x1c, 0x5f, 0x55, 0x32, 0x3f, 0x98, 0xf7, 0x9b, 0xb0, 0x2b, + 0x3f, 0x4b, 0xb7, 0x80, + 0x73, 0xaf, 0x1d, 0x69, 0x81, 0x79, 0x0f, 0x0d, 0x6a, 0xb4, 0xa7, 0x9b, + 0x4d, 0xde, 0x93, 0x11, + 0xc2, 0x73, 0x01, 0xff, 0x5a, 0xdd, 0xfb, 0x16, 0x21, 0xd6, 0x39, 0xc8, + 0x8b, 0x7e, 0x3b, 0xcf, + 0x9a, 0x90, 0xfe, 0x91, 0x91, 0x25, 0x4e, 0xff, 0x02, 0xe2, 0x7a, 0x81, + 0x7e, 0x23, 0x92, 0x69, + 0xc5, 0x6b, 0x50, 0x82, 0x7c, 0xe9, 0x80, 0x7e, 0x93, 0xd2, 0x59, 0xae, + 0xce, 0xd9, 0xcf, 0xcc, + 0xe7, 0xcd, 0x4c, 0xd2, 0x6d, 0x99, 0x16, 0x01, 0xab, 0x3e, 0x35, 0x48, + 0x4b, 0x79, 0x2e, 0x10, + 0x6b, 0x2c, 0x9c, 0x94, 0x6b, 0x95, 0x93, 0x5c, 0x2d, 0xd5, 0x0b, 0xcb, + 0xbb, 0x60, 0x63, 0x9d, + 0x41, 0x9c, 0x2f, 0xd2, 0x3f, 0x32, 0xb2, 0xa4, 0xe9, 0x9f, 0x8c, 0x55, + 0xbf, 0x5e, 0x83, 0xb2, + 0x5b, 0x53, 0x32, 0xad, 0x90, 0x9c, 0x96, 0x34, 0xd4, 0xc8, 0x5c, 0x94, + 0xf6, 0x73, 0xf3, 0x6c, + 0x53, 0x77, 0xcd, 0xbc, 0x0c, 0x8e, 0x3b, 0xae, 0xb1, 0xea, 0x25, 0x3c, + 0x97, 0x5d, 0xde, 0xc3, + 0x2c, 0xe5, 0xb9, 0x44, 0x89, 0x75, 0x06, 0xae, 0x09, 0xe9, 0x1f, 0x19, + 0x59, 0xd2, 0xf4, 0x0f, + 0xc7, 0xb4, 0xda, 0x40, 0x32, 0xad, 0x04, 0xa7, 0x05, 0x55, 0x83, 0x72, + 0x92, 0x85, 0xd7, 0x34, + 0xc0, 0xc7, 0x4d, 0x8d, 0xd2, 0x9d, 0xcc, 0x5c, 0x0f, 0xfc, 0xd9, 0x5a, + 0x68, 0xef, 0xdb, 0x8a, + 0x83, 0x0f, 0xe7, 0xba, 0x6a, 0x18, 0xcf, 0x05, 0xf2, 0x26, 0x78, 0xce, + 0x57, 0x40, 0xac, 0x93, + 0xf4, 0x8f, 0x8c, 0x2c, 0x69, 0xfa, 0x67, 0xd5, 0x83, 0x44, 0x8b, 0xeb, + 0x49, 0x6b, 0x50, 0xae, + 0xc5, 0x69, 0x09, 0xfc, 0x1e, 0x1c, 0xab, 0x7e, 0x43, 0xd4, 0xeb, 0xcd, + 0xf5, 0x7a, 0x30, 0xcf, + 0xc5, 0xca, 0x9b, 0x4c, 0x72, 0x4d, 0xe0, 0x7c, 0xa5, 0x50, 0x9c, 0x2f, + 0x9d, 0xf4, 0x8f, 0x8c, + 0x2c, 0x69, 0xfa, 0xd7, 0xf3, 0xe6, 0x1a, 0x70, 0x71, 0xbd, 0x14, 0x9a, + 0x69, 0x85, 0x9e, 0xab, + 0x36, 0x57, 0xd4, 0xa0, 0xd8, 0x5a, 0x19, 0x61, 0x2e, 0xa7, 0xcd, 0xef, + 0xe7, 0x79, 0x93, 0x00, + 0x9e, 0x0b, 0xd4, 0x6f, 0x83, 0x8f, 0x1c, 0x32, 0x3f, 0x38, 0x64, 0x4d, + 0x48, 0xff, 0xc8, 0xc8, + 0x6e, 0xbc, 0xfe, 0x4d, 0xb6, 0x5a, 0xee, 0xba, 0x64, 0xce, 0xaa, 0x57, + 0xcd, 0x7d, 0x3b, 0xba, + 0x16, 0x7f, 0x79, 0xed, 0xac, 0x86, 0xe2, 0xb4, 0xb8, 0xb5, 0xf2, 0x1a, + 0x73, 0x39, 0xdd, 0x1c, + 0xfc, 0x95, 0x16, 0xca, 0xe6, 0x07, 0xbb, 0x38, 0x5f, 0x6b, 0xb1, 0x4e, + 0xd2, 0x3f, 0x32, 0xb2, + 0x1b, 0xaf, 0x7f, 0xc0, 0x7f, 0x76, 0xd5, 0x25, 0xf3, 0xb8, 0xde, 0x34, + 0xd5, 0x90, 0xf2, 0x5c, + 0x78, 0x5c, 0x4f, 0xc7, 0xd5, 0xc8, 0x2c, 0x62, 0xe4, 0xb4, 0xd8, 0x5a, + 0x79, 0x86, 0x63, 0x5a, + 0x21, 0x6a, 0x18, 0x8d, 0x2c, 0xe7, 0x7c, 0x95, 0xf6, 0xc3, 0xe6, 0x07, + 0x43, 0xde, 0x24, 0x98, + 0xf3, 0x45, 0xfa, 0x47, 0x46, 0x76, 0xe3, 0xf5, 0x6f, 0xb4, 0xd9, 0xf6, + 0xd4, 0x25, 0xb3, 0x3f, + 0xc3, 0x78, 0x2e, 0x31, 0xc4, 0xf5, 0xd6, 0x7c, 0x55, 0x14, 0xa7, 0xc5, + 0xad, 0x95, 0xc8, 0xb9, + 0x9c, 0x4a, 0xa6, 0xd5, 0xa2, 0x52, 0x17, 0xef, 0x4f, 0x36, 0x3f, 0x58, + 0xf4, 0x9b, 0x80, 0x2f, + 0x5d, 0x5a, 0xeb, 0x37, 0x21, 0xfd, 0x23, 0x23, 0x4b, 0x44, 0xfe, 0xc3, + 0x55, 0x97, 0xcc, 0x6b, + 0xe9, 0xee, 0xca, 0x79, 0x2e, 0xbc, 0xc7, 0x42, 0x30, 0xad, 0x10, 0x35, + 0x32, 0xf1, 0x71, 0x5a, + 0x22, 0x69, 0xe5, 0x75, 0xe6, 0x72, 0xba, 0xe7, 0x07, 0xaf, 0xf5, 0x9b, + 0x6c, 0xaf, 0xe6, 0x07, + 0x13, 0xff, 0x8a, 0x8c, 0x2c, 0x59, 0xf9, 0x5f, 0x4b, 0x8b, 0xf2, 0xd3, + 0x5c, 0x53, 0xc6, 0x73, + 0xe1, 0x1c, 0xfc, 0xc5, 0x56, 0xdd, 0x8a, 0xeb, 0x19, 0xa1, 0x35, 0x32, + 0x31, 0x72, 0x5a, 0xec, + 0xb8, 0x9e, 0x9f, 0x55, 0x1f, 0x78, 0x4a, 0x44, 0xcf, 0xe5, 0x0c, 0xe7, + 0xf7, 0x73, 0x0e, 0xfe, + 0xb4, 0xd0, 0xac, 0x04, 0xf5, 0x9b, 0xcc, 0x2e, 0x9b, 0xa4, 0x7f, 0x64, + 0x64, 0x09, 0xd2, 0x3f, + 0xab, 0xf7, 0xcd, 0xf6, 0x1b, 0xd9, 0xfe, 0x0f, 0xe4, 0xb9, 0x54, 0x6e, + 0x57, 0xf6, 0xe0, 0x7c, + 0xb5, 0x29, 0xe3, 0xb9, 0xb8, 0x6a, 0x64, 0x30, 0xfc, 0x65, 0x0c, 0xa7, + 0xc5, 0x8e, 0xeb, 0xa1, + 0x98, 0x56, 0x50, 0xc3, 0x78, 0x1a, 0xd3, 0x5c, 0x4e, 0x78, 0x4d, 0xb6, + 0x26, 0xc0, 0x6a, 0xf0, + 0xf4, 0x9b, 0x2c, 0x88, 0xff, 0x4c, 0x46, 0x96, 0x28, 0xfd, 0x93, 0xb3, + 0xea, 0x3d, 0x1c, 0x7c, + 0xc8, 0xad, 0x86, 0xf2, 0x5c, 0x22, 0xf8, 0xaa, 0x58, 0x4e, 0x8b, 0x47, + 0x2b, 0x7b, 0x31, 0x31, + 0xad, 0x6e, 0x61, 0x39, 0x5f, 0x9e, 0x35, 0x61, 0x6b, 0x91, 0xed, 0xe4, + 0x06, 0x34, 0xff, 0x88, + 0x8c, 0x2c, 0x49, 0xfa, 0x67, 0x31, 0xad, 0xf6, 0x55, 0xe7, 0x26, 0xa8, + 0x91, 0x29, 0x9f, 0x15, + 0x6b, 0xa1, 0x1c, 0xfc, 0x61, 0xa6, 0x8d, 0xa9, 0x91, 0x51, 0xf8, 0xaa, + 0xc6, 0x5a, 0x5c, 0x0f, + 0xcb, 0xaa, 0x8f, 0x6d, 0x2e, 0xa7, 0x6c, 0x4d, 0x28, 0xff, 0x41, 0x46, + 0x96, 0x24, 0xfd, 0x4b, + 0xcd, 0x76, 0x70, 0xf5, 0x7a, 0xa2, 0x06, 0xa5, 0x25, 0xe7, 0xb9, 0x40, + 0xde, 0x64, 0x6b, 0x1f, + 0xfc, 0xe4, 0xc2, 0x24, 0xd3, 0x94, 0xcd, 0x0f, 0x5e, 0xd5, 0xc8, 0x04, + 0xf7, 0x73, 0x00, 0x03, + 0x21, 0x35, 0x58, 0xb1, 0x9f, 0xb9, 0x56, 0x22, 0xde, 0x5f, 0xa4, 0xb9, + 0x9c, 0x2a, 0x5f, 0x5a, + 0xba, 0x26, 0xa4, 0x7f, 0x64, 0x64, 0x49, 0xd2, 0xbf, 0x0c, 0xa6, 0x5e, + 0x4f, 0xd6, 0xfb, 0xe6, + 0xe1, 0xb9, 0x54, 0x57, 0x33, 0x41, 0x42, 0xe6, 0x07, 0xab, 0x7c, 0x55, + 0xce, 0x3d, 0x3d, 0x06, + 0xf6, 0xb3, 0xe0, 0xe0, 0x67, 0x17, 0xdb, 0x76, 0x5c, 0xcf, 0x08, 0x3b, + 0x9f, 0x96, 0xb0, 0xbd, + 0xc9, 0xd7, 0xe2, 0x7c, 0x91, 0xfe, 0x91, 0x91, 0x25, 0x49, 0xff, 0x44, + 0x3d, 0x48, 0x46, 0xd9, + 0xfb, 0x26, 0x65, 0x5a, 0xd9, 0x0a, 0x04, 0x1c, 0x7c, 0xc8, 0x11, 0xdf, + 0x29, 0xef, 0xad, 0x62, + 0x85, 0xeb, 0xf3, 0x83, 0x21, 0x6f, 0x22, 0x7a, 0xdf, 0xb4, 0xc0, 0x7e, + 0x0e, 0x60, 0x20, 0xe4, + 0x5c, 0x3c, 0x18, 0x9e, 0x77, 0x61, 0xe7, 0x4a, 0x29, 0xcf, 0xc5, 0x8e, + 0xeb, 0x5d, 0x91, 0xdf, + 0x1f, 0x64, 0x30, 0x97, 0xb3, 0x7a, 0x1c, 0xe4, 0x4b, 0x93, 0xfe, 0x91, + 0x91, 0x25, 0x49, 0xff, + 0x44, 0xbd, 0x9e, 0x86, 0xad, 0xd7, 0x0b, 0xaf, 0x57, 0x99, 0x88, 0xb8, + 0x9e, 0xc3, 0xa6, 0x3a, + 0x0d, 0xec, 0xb1, 0x38, 0xe0, 0xbd, 0x6f, 0xf3, 0xb4, 0xac, 0xdf, 0xc4, + 0xd0, 0xfa, 0xa9, 0xae, + 0xcd, 0xc1, 0x77, 0x72, 0xd0, 0x5e, 0x9e, 0x4b, 0xd3, 0x53, 0x97, 0x1c, + 0x2d, 0xae, 0x77, 0x0d, + 0xce, 0x17, 0xe9, 0x1f, 0x19, 0x59, 0x82, 0xf4, 0xcf, 0xe0, 0xac, 0x7a, + 0x55, 0xbd, 0xde, 0x00, + 0x57, 0xaf, 0xb7, 0x1e, 0xd7, 0x93, 0xcc, 0x0f, 0x76, 0xf5, 0x9b, 0x64, + 0x47, 0x4c, 0xc7, 0x64, + 0x73, 0xe2, 0x98, 0xdf, 0x0d, 0xf5, 0x84, 0x3b, 0x67, 0xa5, 0x03, 0x29, + 0xcf, 0x05, 0x6a, 0xb4, + 0xd9, 0x6b, 0x54, 0x30, 0x4c, 0xab, 0xd9, 0x4e, 0x03, 0xc9, 0xf9, 0x12, + 0xb1, 0x4e, 0xd2, 0x3f, + 0x32, 0xb2, 0xe4, 0xea, 0x1f, 0x9e, 0x69, 0xd5, 0x06, 0xfe, 0x32, 0x6e, + 0xae, 0x9a, 0xc4, 0x97, + 0x76, 0xe5, 0x4d, 0xb8, 0x7f, 0x6c, 0x69, 0x61, 0xe9, 0x34, 0x57, 0xd7, + 0x97, 0x7a, 0x2b, 0x3b, + 0x65, 0xbe, 0xf1, 0x30, 0xd5, 0x0d, 0xd0, 0x22, 0xce, 0xaa, 0xd7, 0xec, + 0x58, 0xe3, 0xf1, 0xd6, + 0xe1, 0xce, 0x1a, 0x07, 0x7f, 0xeb, 0x00, 0x7a, 0xdf, 0xa0, 0x47, 0x23, + 0x6c, 0xe6, 0x26, 0x8f, + 0x75, 0x9e, 0xe8, 0xd7, 0xe0, 0x7c, 0x91, 0xfe, 0x91, 0x91, 0x25, 0x46, + 0xff, 0x10, 0x71, 0x3d, + 0x7e, 0x8a, 0x43, 0xd6, 0xa0, 0x44, 0xe1, 0xb4, 0x40, 0xed, 0x20, 0xe4, + 0x4d, 0x36, 0x4f, 0x72, + 0x0d, 0x67, 0xe6, 0xe5, 0xb1, 0x8f, 0xff, 0xcc, 0xb4, 0x28, 0x28, 0xae, + 0x27, 0x66, 0x6e, 0xfa, + 0x39, 0xf8, 0xbb, 0xa1, 0x3c, 0x17, 0x27, 0xd6, 0x79, 0x9c, 0x46, 0xc5, + 0x3a, 0x83, 0x7d, 0x69, + 0xd2, 0x3f, 0x32, 0xb2, 0xe4, 0xe8, 0x1f, 0x92, 0x69, 0x35, 0xdd, 0x8e, + 0x52, 0x23, 0x83, 0xe2, + 0xb4, 0xd8, 0xbe, 0x2a, 0xcc, 0x3d, 0x4a, 0x0d, 0xd3, 0x9d, 0xcc, 0x2c, + 0xdb, 0xd2, 0x4f, 0xd6, + 0xf5, 0x4f, 0xc1, 0xaa, 0xe7, 0x35, 0xda, 0xf9, 0xe3, 0xed, 0x43, 0xc8, + 0xbb, 0x84, 0xf1, 0x5c, + 0x20, 0x6f, 0x02, 0xb1, 0xce, 0x9d, 0xe9, 0xc6, 0x35, 0x62, 0x9d, 0xa4, + 0x7f, 0x64, 0x64, 0x89, + 0xd1, 0x3f, 0x1e, 0xd7, 0xab, 0x20, 0xe3, 0x7a, 0x48, 0xa6, 0xd5, 0xd5, + 0x39, 0x2d, 0x9c, 0x83, + 0xef, 0x3b, 0x8b, 0x19, 0x98, 0x7a, 0x3d, 0x6d, 0x2a, 0xea, 0xf5, 0xa4, + 0x3c, 0x17, 0x2b, 0x6f, + 0x02, 0xb1, 0xc4, 0xd2, 0x34, 0xd5, 0x94, 0xcd, 0x0f, 0x76, 0xd6, 0x04, + 0x6a, 0x64, 0x8e, 0x48, + 0xff, 0xc8, 0xc8, 0x12, 0xaa, 0x7f, 0xc6, 0x2a, 0xae, 0xb7, 0xad, 0x8c, + 0xeb, 0xc5, 0xca, 0xb4, + 0x42, 0x72, 0x5a, 0xc4, 0x59, 0x31, 0xdd, 0xc5, 0x30, 0xad, 0xd6, 0xea, + 0x09, 0x65, 0x3c, 0x17, + 0xc8, 0xbb, 0x38, 0x3c, 0x97, 0xf5, 0xf9, 0xc1, 0xea, 0x35, 0x21, 0xfd, + 0x23, 0x23, 0xbb, 0xf1, + 0xfa, 0xc7, 0xf6, 0x38, 0xd4, 0x25, 0xa7, 0xa7, 0xc5, 0x66, 0x9c, 0x71, + 0xbd, 0x38, 0x39, 0x2d, + 0xe2, 0x2c, 0x96, 0xe9, 0x5e, 0x77, 0x2e, 0xa7, 0x9b, 0x83, 0xef, 0x8f, + 0x15, 0xfa, 0xe7, 0x07, + 0xf3, 0xd7, 0x19, 0x97, 0x42, 0xfa, 0x01, 0x49, 0xff, 0xc8, 0xc8, 0x6e, + 0xbc, 0xfe, 0xcd, 0x77, + 0x1b, 0xa2, 0x2e, 0x79, 0x7b, 0x1f, 0xf6, 0x7a, 0x50, 0xae, 0xc0, 0x13, + 0xd7, 0x43, 0x31, 0xad, + 0x60, 0xae, 0x1a, 0x92, 0xd3, 0xa2, 0xae, 0x41, 0x11, 0x36, 0xca, 0x76, + 0xd0, 0x4c, 0x2b, 0xe4, + 0x5c, 0xce, 0xc2, 0x2c, 0xdf, 0x90, 0xcd, 0x0f, 0xe6, 0x79, 0x93, 0xf9, + 0x56, 0x43, 0xce, 0xf9, + 0x22, 0xfd, 0x23, 0x23, 0xbb, 0xf1, 0xfa, 0x37, 0xdd, 0x69, 0x06, 0xd5, + 0x25, 0xaf, 0xf1, 0x5c, + 0x22, 0xc7, 0xf5, 0x62, 0xe2, 0xb4, 0x38, 0x79, 0x67, 0xbd, 0xa3, 0x66, + 0x5a, 0x45, 0x9b, 0xcb, + 0x69, 0xf7, 0x15, 0x07, 0xcf, 0x0f, 0xae, 0x3a, 0x9c, 0xaf, 0xe0, 0x7e, + 0x13, 0xd2, 0x3f, 0x32, + 0xb2, 0x9b, 0x1f, 0xff, 0x13, 0x75, 0xc9, 0x9b, 0x67, 0x15, 0x5e, 0x37, + 0xe7, 0x9d, 0x99, 0x5b, + 0xf6, 0x72, 0xf0, 0x8f, 0x52, 0x1d, 0x79, 0x3d, 0x88, 0x2f, 0xae, 0x17, + 0x17, 0xa7, 0xc5, 0xd6, + 0xbf, 0x49, 0xae, 0xad, 0x66, 0x5a, 0x69, 0x38, 0xa6, 0x95, 0x94, 0xdf, + 0xef, 0xe5, 0xe0, 0x4b, + 0xfa, 0x4d, 0xac, 0xf9, 0xc1, 0x97, 0x06, 0xe9, 0x1f, 0x19, 0x59, 0x32, + 0xf2, 0xbf, 0xa0, 0x45, + 0xe5, 0x45, 0xa6, 0x2e, 0xe7, 0xb9, 0xb0, 0xfd, 0xbf, 0x2c, 0x70, 0xb6, + 0x41, 0x6e, 0xa8, 0xb5, + 0xc3, 0xf2, 0x24, 0xc8, 0xb8, 0x1e, 0x8e, 0xd3, 0x62, 0xfb, 0xca, 0xb3, + 0x5c, 0x3b, 0x3e, 0xa6, + 0x55, 0x49, 0xcd, 0xf9, 0xea, 0xa5, 0xf8, 0x2c, 0xbc, 0xca, 0x79, 0x69, + 0x7f, 0xbd, 0xdf, 0x64, + 0x9b, 0x9d, 0x31, 0x2f, 0x5b, 0xa4, 0x7f, 0x64, 0x64, 0x89, 0xd0, 0x3f, + 0x9b, 0x55, 0xdf, 0x72, + 0xd5, 0x9b, 0xac, 0xf3, 0x5c, 0xee, 0x8a, 0x0b, 0x7a, 0x2c, 0x64, 0x3c, + 0x17, 0x27, 0xae, 0xa7, + 0x9c, 0x51, 0x8e, 0xe4, 0xb4, 0xd8, 0x75, 0x37, 0xf3, 0x5c, 0x4b, 0xcd, + 0xb4, 0x12, 0x71, 0xbd, + 0x4c, 0x3c, 0x73, 0x39, 0xf9, 0xdc, 0x4b, 0x58, 0x13, 0xce, 0xc1, 0xf7, + 0xcf, 0x0f, 0x26, 0xfe, + 0x33, 0x19, 0x59, 0x42, 0xf4, 0x2f, 0x9c, 0x55, 0xbf, 0xe2, 0xe0, 0x6f, + 0xd7, 0x20, 0x2e, 0x16, + 0xc6, 0x73, 0x01, 0x2d, 0xcc, 0x44, 0x98, 0x51, 0xae, 0xf4, 0x55, 0x2d, + 0x7d, 0xce, 0x2c, 0x72, + 0xad, 0xd8, 0x98, 0x56, 0x11, 0x6a, 0x18, 0xfd, 0xbd, 0x6f, 0xce, 0xfc, + 0x60, 0x3a, 0xff, 0x91, + 0x91, 0x25, 0x43, 0xff, 0x22, 0xd6, 0xeb, 0xd9, 0x1c, 0x7c, 0x59, 0xde, + 0x04, 0x7c, 0xe9, 0xca, + 0x32, 0x8d, 0xea, 0x7d, 0x53, 0xc6, 0x12, 0x2d, 0x2d, 0xd2, 0x97, 0xb9, + 0x66, 0x61, 0x14, 0x17, + 0xd3, 0x2a, 0x8e, 0x1a, 0x46, 0xca, 0x7f, 0x90, 0x91, 0x25, 0x42, 0xff, + 0x90, 0x33, 0x28, 0xbd, + 0x71, 0x3d, 0x09, 0xcf, 0x85, 0xcf, 0x4a, 0xdb, 0xdd, 0x2b, 0x9f, 0x15, + 0x0f, 0xf2, 0x13, 0xc9, + 0xfc, 0x60, 0xab, 0x46, 0x46, 0xd5, 0xcf, 0x01, 0x0c, 0x04, 0xe8, 0x89, + 0xdb, 0x60, 0x97, 0x7e, + 0x9c, 0x6b, 0x2a, 0xeb, 0x09, 0xd1, 0x4c, 0xab, 0x38, 0x38, 0x5f, 0xa4, + 0x7f, 0x64, 0x64, 0x89, + 0xd0, 0x3f, 0xe4, 0x0c, 0xca, 0xb4, 0x2c, 0xae, 0xe7, 0xe1, 0xe0, 0x97, + 0xf7, 0xab, 0xaa, 0xf9, + 0xc1, 0xdc, 0x57, 0xcd, 0x2b, 0x7d, 0x55, 0x60, 0x20, 0xe8, 0x0b, 0x1d, + 0xd8, 0xcf, 0x6d, 0x38, + 0xff, 0xe9, 0x03, 0xad, 0x1d, 0x76, 0xb6, 0xb3, 0x98, 0x56, 0xca, 0xbc, + 0x4b, 0x3c, 0x73, 0x39, + 0x49, 0xff, 0xc8, 0xc8, 0x12, 0xa1, 0x7f, 0x91, 0x98, 0x56, 0x8a, 0x1a, + 0x94, 0x7e, 0xa6, 0x03, + 0x71, 0xbd, 0xad, 0x93, 0x52, 0x4d, 0x3a, 0x3f, 0x18, 0xf2, 0x26, 0x63, + 0xc7, 0x57, 0x95, 0x9a, + 0x9b, 0xfd, 0x0c, 0x57, 0x18, 0xcf, 0x85, 0xeb, 0xf3, 0x12, 0xcf, 0xb4, + 0x2a, 0x5e, 0x9b, 0xf3, + 0x45, 0xfa, 0x47, 0x46, 0x96, 0x04, 0xfd, 0x8b, 0xc4, 0xb4, 0x5a, 0x2a, + 0x7a, 0xdf, 0x7a, 0x29, + 0xce, 0x69, 0x01, 0x5f, 0x5a, 0xb0, 0xa9, 0xd6, 0xe7, 0x07, 0xdb, 0x79, + 0x13, 0x78, 0xcd, 0xb0, + 0x7e, 0x13, 0xe8, 0x57, 0x4b, 0x8d, 0xd2, 0x1d, 0x9b, 0x83, 0x1f, 0xc6, + 0x73, 0x11, 0x71, 0x3d, + 0x19, 0xab, 0xde, 0xed, 0xd7, 0x5a, 0x9c, 0xaf, 0x6b, 0xcf, 0xe5, 0x24, + 0xfd, 0x23, 0x23, 0x4b, + 0x84, 0xfe, 0x45, 0x60, 0x5a, 0x6d, 0x4f, 0xd5, 0xbd, 0x6f, 0x01, 0x71, + 0x3d, 0x43, 0xc5, 0xc1, + 0x87, 0xbc, 0x49, 0xba, 0xef, 0xcc, 0x7a, 0xf3, 0xe5, 0x35, 0xb2, 0x9d, + 0xdc, 0x32, 0xdb, 0x0a, + 0xe3, 0xb9, 0x00, 0x07, 0x3f, 0x07, 0x4c, 0xab, 0x79, 0x2a, 0x16, 0x7e, + 0xbf, 0x7a, 0x4d, 0x48, + 0xff, 0xc8, 0xc8, 0x92, 0xa0, 0x7f, 0x61, 0x33, 0x28, 0xdd, 0x39, 0xd8, + 0x92, 0xc5, 0x5f, 0x56, + 0xd7, 0xa0, 0x84, 0x71, 0x5a, 0x44, 0xde, 0xa4, 0x70, 0x5a, 0xa9, 0x79, + 0x38, 0x7d, 0x4c, 0xcb, + 0x8a, 0x27, 0x7a, 0x23, 0x3b, 0xcb, 0xb4, 0xd2, 0x43, 0x87, 0x83, 0x6f, + 0x9d, 0xc5, 0xf4, 0x4e, + 0x6e, 0x9e, 0x6e, 0x59, 0xe7, 0xcb, 0x60, 0x9e, 0x0b, 0xfb, 0x7e, 0x38, + 0xd7, 0xed, 0x9c, 0x6c, + 0xd6, 0xa4, 0x3c, 0x17, 0xfe, 0xfe, 0xae, 0xca, 0xef, 0x27, 0xfd, 0x23, + 0x23, 0x4b, 0xa2, 0xfe, + 0xf1, 0xb8, 0xde, 0x71, 0x4c, 0xf5, 0x7a, 0xc8, 0x1a, 0x94, 0xcc, 0x12, + 0x7c, 0xd5, 0xec, 0x61, + 0x7a, 0xa4, 0xb7, 0xed, 0x7e, 0x93, 0xd2, 0x79, 0xae, 0xce, 0xe3, 0x7d, + 0x90, 0xf7, 0x58, 0xea, + 0xad, 0x55, 0x5e, 0x57, 0x6f, 0xe7, 0x66, 0xa9, 0x76, 0x90, 0x7f, 0xec, + 0x70, 0xf0, 0x6f, 0x55, + 0xf6, 0xec, 0xfa, 0x6c, 0x29, 0xcf, 0x25, 0x42, 0xac, 0x33, 0xab, 0x5c, + 0x13, 0xd2, 0x3f, 0x32, + 0xb2, 0x24, 0xe8, 0x5f, 0x14, 0x56, 0xbd, 0x3e, 0x88, 0x87, 0x69, 0xb5, + 0xc6, 0x69, 0x61, 0x5a, + 0x06, 0xe7, 0xbe, 0xf4, 0x34, 0xdb, 0x86, 0x5a, 0x17, 0xd0, 0x41, 0x27, + 0xaf, 0x3b, 0xcd, 0xb5, + 0x73, 0x53, 0x2d, 0x54, 0x77, 0xb5, 0x81, 0xde, 0x86, 0xf3, 0xdf, 0xd6, + 0xd9, 0x96, 0x9c, 0xe7, + 0x02, 0xb1, 0xc6, 0x49, 0x5c, 0x9c, 0x2f, 0xd2, 0x3f, 0x32, 0xb2, 0x04, + 0xe8, 0x5f, 0x04, 0x56, + 0x7d, 0x55, 0xc9, 0x5f, 0x4e, 0xcd, 0x77, 0x1a, 0xd7, 0xe6, 0xb4, 0x58, + 0x1c, 0xfc, 0x55, 0xdd, + 0x4d, 0xae, 0xa5, 0x8f, 0x15, 0x75, 0xd2, 0x16, 0x73, 0x90, 0xbd, 0xbf, + 0x8e, 0x9c, 0xe7, 0x52, + 0xe6, 0xfa, 0x08, 0x35, 0x82, 0x9c, 0x61, 0xd0, 0x93, 0xde, 0x8b, 0x88, + 0x75, 0x86, 0xae, 0x09, + 0xe9, 0x1f, 0x19, 0x59, 0x12, 0xf4, 0x0f, 0x57, 0x0f, 0x92, 0xef, 0x5c, + 0x89, 0xbf, 0x2c, 0xa9, + 0x41, 0x01, 0x4e, 0x8b, 0x72, 0xd6, 0x9c, 0xa5, 0x45, 0xd0, 0xfb, 0x96, + 0x1d, 0x2a, 0xe6, 0x0d, + 0x5b, 0xfc, 0x7e, 0x2f, 0xab, 0xde, 0xcb, 0x73, 0xd9, 0x75, 0x6b, 0xa1, + 0x6c, 0x7e, 0xb0, 0x37, + 0xd6, 0xd9, 0x26, 0xfd, 0x23, 0x23, 0x4b, 0xb0, 0xfe, 0xf5, 0x33, 0x5d, + 0xd0, 0x3f, 0x65, 0x5c, + 0x0f, 0xc9, 0xaa, 0x0f, 0xe3, 0x2f, 0xfb, 0x7d, 0x69, 0x6c, 0xef, 0x5b, + 0x76, 0x99, 0x63, 0x1a, + 0xa5, 0xd0, 0x3f, 0x15, 0xbf, 0xdf, 0xca, 0x9b, 0x70, 0xce, 0x17, 0xd3, + 0x49, 0xe9, 0xfc, 0x60, + 0xc8, 0x9b, 0xa0, 0x66, 0xe1, 0x91, 0xfe, 0x91, 0x91, 0xdd, 0x78, 0xfd, + 0x9b, 0x55, 0x1a, 0xe0, + 0x37, 0x6e, 0x2d, 0xf3, 0x87, 0x32, 0x9e, 0x4b, 0xe4, 0xb8, 0x1e, 0x92, + 0xd3, 0xa2, 0xaa, 0x41, + 0xb1, 0xcf, 0x8a, 0x10, 0x0f, 0x4c, 0xf5, 0xc3, 0x75, 0x57, 0x9b, 0x94, + 0x5a, 0x4a, 0xa6, 0x95, + 0x29, 0x38, 0x5f, 0x95, 0x65, 0xf6, 0xd0, 0xce, 0x9b, 0x94, 0xd7, 0xe6, + 0x07, 0x6f, 0xef, 0x17, + 0xe7, 0xb9, 0xba, 0xcd, 0xf9, 0xda, 0xa0, 0xfa, 0x67, 0x32, 0xb2, 0x44, + 0xeb, 0x9f, 0x27, 0x57, + 0x10, 0xc0, 0x73, 0x71, 0xe2, 0x7a, 0x4a, 0x56, 0xbd, 0x86, 0xe7, 0x2f, + 0x23, 0x38, 0x2d, 0x76, + 0xde, 0x19, 0x6a, 0x9f, 0x99, 0x5f, 0x1b, 0xfa, 0xb5, 0x48, 0xa6, 0x95, + 0xcd, 0xef, 0x5f, 0xe5, + 0x96, 0x03, 0xe7, 0x07, 0x57, 0xf9, 0x7c, 0xa4, 0x9d, 0xd3, 0x52, 0x48, + 0xbf, 0x09, 0xe9, 0x1f, + 0x19, 0xd9, 0x8d, 0xd7, 0xbf, 0xd1, 0x66, 0x1b, 0xe2, 0x7a, 0xa5, 0xd3, + 0xed, 0x83, 0x30, 0x0e, + 0x3e, 0x9a, 0x69, 0x75, 0x0b, 0x5b, 0x23, 0x13, 0xc4, 0x5f, 0x0e, 0xf2, + 0x95, 0x99, 0xfe, 0xb1, + 0xf3, 0x9f, 0x16, 0x23, 0xd3, 0x4a, 0x12, 0xd7, 0xf3, 0xd4, 0x68, 0xef, + 0x2a, 0xe6, 0x07, 0x93, + 0xfe, 0x91, 0x91, 0x25, 0x43, 0xff, 0x44, 0x3d, 0x88, 0x9c, 0xe7, 0x02, + 0x1c, 0xfc, 0xd2, 0x79, + 0x65, 0xbf, 0x7c, 0x92, 0x3f, 0x4c, 0xcb, 0x78, 0x2e, 0x11, 0xe2, 0x7a, + 0x16, 0xa7, 0x65, 0x1f, + 0xf5, 0x1e, 0x07, 0xe9, 0x6e, 0x6e, 0xa9, 0x37, 0x37, 0x5e, 0x84, 0xb9, + 0x9c, 0xa1, 0xfd, 0x26, + 0xc3, 0xcb, 0x0e, 0xe9, 0x1f, 0x19, 0xd9, 0x0d, 0xd7, 0xbf, 0xc9, 0x56, + 0x6b, 0x2d, 0xae, 0xe7, + 0xe1, 0xb9, 0xac, 0x7a, 0x2c, 0x76, 0xad, 0x5c, 0x41, 0x20, 0xcf, 0x45, + 0xd4, 0xc8, 0x74, 0x31, + 0x33, 0xca, 0x05, 0xa7, 0x45, 0xed, 0xab, 0x8a, 0xbc, 0x06, 0x3b, 0x93, + 0x2d, 0x33, 0x4a, 0x46, + 0x34, 0xd4, 0xeb, 0x61, 0x99, 0x56, 0x91, 0xe6, 0x72, 0xca, 0xfa, 0x4d, + 0xe6, 0xc4, 0x7f, 0x26, + 0x23, 0xbb, 0xf1, 0xfa, 0x37, 0xdd, 0x69, 0x86, 0xf6, 0x79, 0x59, 0x33, + 0x73, 0xc1, 0x6f, 0xac, + 0xdc, 0x76, 0xb1, 0x9f, 0xef, 0xf8, 0x78, 0x2e, 0x90, 0x37, 0x19, 0xe4, + 0xda, 0x10, 0xd7, 0x53, + 0xf5, 0x56, 0x70, 0x4e, 0x8b, 0xd2, 0x57, 0x15, 0x3f, 0xc3, 0xd3, 0xfb, + 0x16, 0x16, 0xd7, 0x3b, + 0x8b, 0x83, 0x69, 0x65, 0xe9, 0xb3, 0x84, 0xf3, 0xe5, 0xe1, 0xe0, 0xcf, + 0x2e, 0x9b, 0xa4, 0x7f, + 0x64, 0x64, 0x09, 0xc8, 0x7f, 0xa8, 0x67, 0x50, 0x8a, 0x7a, 0xbd, 0x49, + 0xba, 0x19, 0xc6, 0x73, + 0x81, 0x7e, 0x33, 0xf0, 0x1b, 0x53, 0x47, 0xc1, 0x39, 0xe4, 0x95, 0xaf, + 0x5a, 0x3d, 0xac, 0x2e, + 0x33, 0xca, 0x1a, 0x41, 0xe1, 0x2b, 0x33, 0xfd, 0x0b, 0xe8, 0x7d, 0x0b, + 0x8c, 0xeb, 0xa9, 0x6b, + 0x18, 0xdb, 0xbb, 0x31, 0xcd, 0xe5, 0xd4, 0x7a, 0x34, 0xff, 0x8d, 0x8c, + 0xec, 0xc6, 0xeb, 0xdf, + 0xbc, 0xda, 0x50, 0x32, 0xad, 0xd6, 0xe3, 0x7a, 0x22, 0x57, 0x10, 0xc0, + 0xc1, 0xdf, 0x65, 0xe7, + 0x42, 0xf9, 0xfc, 0x60, 0x61, 0x28, 0xfe, 0x32, 0xd3, 0x3f, 0x60, 0x20, + 0xf0, 0xde, 0xb7, 0x49, + 0x78, 0xef, 0x5b, 0xa4, 0xb8, 0x1e, 0x7a, 0x2e, 0x67, 0xea, 0x50, 0xb9, + 0x76, 0xf4, 0x09, 0x22, + 0x23, 0xbb, 0xe1, 0xfa, 0xb7, 0xdb, 0xd8, 0x9e, 0x6a, 0x57, 0x61, 0x5a, + 0x39, 0x67, 0xaf, 0x55, + 0xde, 0xc4, 0x1b, 0x2b, 0xb4, 0x72, 0x05, 0xab, 0xf9, 0xc1, 0x56, 0xde, + 0xa4, 0x78, 0xb1, 0x7b, + 0xa0, 0xac, 0x91, 0x39, 0x4a, 0x19, 0x9c, 0xfd, 0xbc, 0xc8, 0xb5, 0xf4, + 0x09, 0xe4, 0x5c, 0x99, + 0x1e, 0xca, 0xce, 0x94, 0x51, 0x98, 0x56, 0xc8, 0xb9, 0x9c, 0x4a, 0xce, + 0x17, 0xe9, 0x1f, 0x19, + 0xd9, 0xcd, 0xd7, 0xbf, 0xc5, 0x6e, 0x03, 0xcb, 0xb4, 0x4a, 0x29, 0xfd, + 0xc6, 0x72, 0x1d, 0xf4, + 0x25, 0x2f, 0x9b, 0x1f, 0xcc, 0xf3, 0x26, 0x99, 0x16, 0xf4, 0x96, 0x29, + 0x7b, 0xdf, 0xfa, 0xe9, + 0x2e, 0x67, 0xc1, 0xd8, 0x3c, 0x18, 0xa6, 0x85, 0x81, 0x3c, 0x97, 0x08, + 0x71, 0xbd, 0x28, 0x9c, + 0x2f, 0xf5, 0x5c, 0x4e, 0xd2, 0x3f, 0x32, 0xb2, 0x24, 0xe8, 0x5f, 0x5c, + 0x4c, 0x2b, 0xfd, 0xb8, + 0x72, 0x58, 0xb5, 0x7d, 0x69, 0xc9, 0xfc, 0x60, 0xde, 0x63, 0xc1, 0x7c, + 0xe9, 0xad, 0x65, 0xbe, + 0x1e, 0xd6, 0x6f, 0x02, 0x79, 0x5f, 0x60, 0x3f, 0x73, 0x16, 0x8c, 0xc5, + 0x83, 0x09, 0xe4, 0xb9, + 0x80, 0x16, 0x42, 0x5c, 0x8f, 0x9d, 0x35, 0x37, 0xe2, 0xe0, 0xf7, 0xa3, + 0xe7, 0x72, 0x52, 0xfc, + 0x8f, 0x8c, 0x2c, 0x09, 0xfa, 0xa7, 0x0f, 0x62, 0x9c, 0xab, 0x36, 0x5b, + 0x8f, 0xeb, 0x79, 0x38, + 0xf8, 0xb7, 0x2b, 0x7b, 0xb2, 0x7e, 0x13, 0x8b, 0xc7, 0x22, 0xf2, 0x1e, + 0x23, 0x9d, 0xeb, 0x22, + 0xe8, 0x1f, 0x70, 0xb1, 0x40, 0x0b, 0x83, 0x78, 0x2e, 0xbc, 0x2e, 0x79, + 0xb1, 0x59, 0x87, 0xb8, + 0x5e, 0x08, 0xcf, 0xc5, 0xa9, 0x91, 0x89, 0x8d, 0xf3, 0x45, 0xfa, 0x47, + 0x46, 0x96, 0x88, 0xf8, + 0x1f, 0x8a, 0x69, 0x85, 0xeb, 0x7d, 0xf3, 0xf4, 0x96, 0x05, 0xc5, 0xd6, + 0x52, 0xa3, 0x42, 0x0b, + 0x74, 0x2f, 0x88, 0x83, 0xbf, 0xb9, 0xc8, 0x34, 0xd3, 0x23, 0xa6, 0x75, + 0xec, 0x4c, 0x07, 0x79, + 0x5f, 0xc8, 0x81, 0x78, 0x7b, 0xdf, 0x82, 0x79, 0x2e, 0xe0, 0xfb, 0x02, + 0x4b, 0x5a, 0xce, 0x73, + 0x89, 0x10, 0xd7, 0xc3, 0xd6, 0x30, 0x52, 0xfe, 0x97, 0x8c, 0x2c, 0x01, + 0xf5, 0x2f, 0x65, 0x65, + 0x6f, 0x59, 0x66, 0x01, 0x7e, 0x23, 0x6e, 0xae, 0xda, 0x26, 0x82, 0xa3, + 0x25, 0x7a, 0xdf, 0xd6, + 0xfb, 0x4d, 0x38, 0xff, 0x19, 0x66, 0xbd, 0x2d, 0xf5, 0x66, 0x66, 0xa1, + 0xb7, 0x78, 0xef, 0xdb, + 0x89, 0xa4, 0xf7, 0xcd, 0x5d, 0x97, 0x7c, 0x61, 0xf9, 0xd7, 0x32, 0x9e, + 0x8b, 0x38, 0x53, 0x22, + 0xf9, 0xfd, 0x79, 0x54, 0xac, 0x33, 0x7d, 0x74, 0xd9, 0x25, 0xfd, 0x23, + 0x23, 0xbb, 0xe1, 0xfa, + 0x37, 0xd9, 0x6a, 0x6d, 0xc4, 0xc4, 0xb4, 0x82, 0x1a, 0x14, 0x75, 0xef, + 0x5b, 0x00, 0xa7, 0xc5, + 0xea, 0x37, 0xd1, 0xa7, 0x99, 0x96, 0xbe, 0xb0, 0x72, 0x1e, 0xc0, 0x7f, + 0xee, 0x47, 0xe8, 0x7d, + 0x3b, 0xdb, 0x3c, 0xe0, 0x1c, 0xfc, 0x20, 0x9e, 0x8b, 0x95, 0x37, 0x89, + 0x95, 0xf3, 0xd5, 0xa7, + 0xfe, 0x37, 0x32, 0xb2, 0x1b, 0xaf, 0x7f, 0xa3, 0xa2, 0x92, 0x41, 0x9a, + 0x3f, 0xf3, 0xb1, 0xea, + 0x03, 0xfd, 0x46, 0x5c, 0x0d, 0x8a, 0x92, 0xd3, 0xd2, 0x13, 0xec, 0xe7, + 0xec, 0x32, 0xd7, 0xc2, + 0xf6, 0xbe, 0x71, 0xa6, 0x95, 0x55, 0x4f, 0x28, 0xe5, 0xb9, 0xb0, 0x33, + 0x1d, 0xc4, 0xf5, 0x4a, + 0xf3, 0x5c, 0x3d, 0x74, 0xe6, 0x26, 0xef, 0x7d, 0x43, 0xc4, 0x3a, 0xa9, + 0xff, 0x97, 0x8c, 0xec, + 0xe6, 0xeb, 0xdf, 0x20, 0xa7, 0x62, 0x90, 0xe2, 0x99, 0x56, 0x6b, 0xfc, + 0x65, 0x59, 0x0d, 0x8a, + 0xb2, 0xf7, 0xcd, 0x04, 0xfd, 0x83, 0x1c, 0x48, 0x6e, 0x81, 0xeb, 0x7d, + 0x0b, 0x60, 0xd5, 0x1b, + 0x1e, 0x0e, 0xfe, 0x9d, 0xea, 0x5b, 0x54, 0xf3, 0x83, 0xf1, 0xb1, 0x4e, + 0xb6, 0x26, 0xe3, 0xcb, + 0x16, 0xe9, 0x1f, 0x19, 0xd9, 0xcd, 0xd7, 0x3f, 0x29, 0xcf, 0xc5, 0x3a, + 0x8f, 0xa1, 0x58, 0xf5, + 0xc3, 0x02, 0x8a, 0x69, 0x85, 0xe3, 0xb4, 0x08, 0xe6, 0x29, 0xb6, 0xf7, + 0x4d, 0x1d, 0xd7, 0xd3, + 0x8c, 0xf4, 0x64, 0xb3, 0x59, 0x85, 0x1c, 0xc9, 0xb9, 0x7c, 0x7e, 0x30, + 0xe4, 0x4d, 0x70, 0x9c, + 0x2f, 0xcd, 0xd8, 0x9a, 0x90, 0xfe, 0x91, 0x91, 0xdd, 0x78, 0xfd, 0x9b, + 0xee, 0x34, 0x4b, 0x32, + 0x9e, 0x8b, 0xab, 0x1e, 0x04, 0x11, 0xd7, 0x43, 0xcf, 0x55, 0x2b, 0xab, + 0x66, 0x94, 0x83, 0xfe, + 0x41, 0xde, 0x97, 0xcf, 0x7d, 0x4b, 0x29, 0x7b, 0xdf, 0x90, 0x73, 0x39, + 0xdb, 0xbb, 0x17, 0x5b, + 0xfb, 0x61, 0xf3, 0x83, 0x21, 0x6f, 0x52, 0x3c, 0xab, 0x1c, 0x54, 0x8e, + 0x73, 0x35, 0xe9, 0xfc, + 0x60, 0x7b, 0x4d, 0x88, 0x7f, 0x40, 0x46, 0x76, 0xf3, 0xf5, 0x6f, 0xb1, + 0xdb, 0x90, 0xf2, 0x5c, + 0x60, 0xff, 0x5b, 0xbd, 0x65, 0x99, 0xeb, 0xc6, 0xf5, 0x5c, 0xbe, 0xaa, + 0x92, 0xd3, 0x62, 0xe5, + 0x7d, 0x53, 0xb3, 0x5c, 0x5b, 0x9f, 0x68, 0xca, 0xb9, 0x6f, 0xbc, 0x5e, + 0xaf, 0x1f, 0x7d, 0x2e, + 0x27, 0x9f, 0x1f, 0x3c, 0xf1, 0x71, 0xf0, 0xf9, 0xb9, 0x10, 0xea, 0x12, + 0x25, 0xf3, 0x83, 0xf9, + 0x6b, 0xb2, 0x35, 0x99, 0x11, 0xff, 0x8a, 0x8c, 0xec, 0xc6, 0xeb, 0xdf, + 0x30, 0xdf, 0x81, 0xba, + 0x64, 0xd0, 0x90, 0x35, 0x9e, 0x0b, 0xd4, 0x25, 0x8f, 0x75, 0x5e, 0xaf, + 0x97, 0x8e, 0x25, 0xae, + 0x87, 0xe4, 0xb4, 0x40, 0xde, 0xf7, 0x58, 0x6f, 0xc2, 0xdc, 0xcb, 0xac, + 0x8a, 0x69, 0xd0, 0xcf, + 0x76, 0xaa, 0x4c, 0x9f, 0xd3, 0xd7, 0x9c, 0xcb, 0xc9, 0xf3, 0x26, 0xd3, + 0x42, 0x13, 0xce, 0x92, + 0xa1, 0xf3, 0x83, 0x41, 0x0b, 0x81, 0xf3, 0x45, 0xfc, 0x3f, 0x32, 0xb2, + 0x9b, 0xaf, 0x7f, 0xee, + 0x5c, 0x81, 0xc5, 0x73, 0xa9, 0xb8, 0xea, 0x92, 0xab, 0xb7, 0x76, 0xf6, + 0x80, 0x19, 0xb5, 0x39, + 0x93, 0xf3, 0x5c, 0xf0, 0x71, 0x3d, 0x24, 0xa7, 0x85, 0xe7, 0x7d, 0xb3, + 0x2d, 0xc8, 0x81, 0x64, + 0x94, 0x73, 0xdf, 0x62, 0x9c, 0xcb, 0x69, 0xcf, 0x02, 0x9d, 0x66, 0x9a, + 0xb2, 0xf9, 0xc1, 0x3c, + 0x6f, 0x32, 0x2f, 0x34, 0x76, 0x49, 0xff, 0xc8, 0xc8, 0x92, 0xa2, 0x7f, + 0xde, 0x5c, 0x81, 0xab, + 0x2e, 0xb9, 0x7a, 0xc7, 0xcb, 0xc1, 0x0f, 0xe2, 0xb9, 0xf0, 0x7a, 0x90, + 0x53, 0x44, 0x5c, 0x0f, + 0xcb, 0x69, 0x19, 0x65, 0x79, 0xde, 0x97, 0xf7, 0xbe, 0xa9, 0x66, 0xc4, + 0x61, 0xeb, 0xf5, 0x4e, + 0xae, 0x32, 0x97, 0x53, 0x32, 0x3f, 0x18, 0xe6, 0x67, 0x2e, 0x48, 0xff, + 0xc8, 0xc8, 0x92, 0xa7, + 0x7f, 0xde, 0x3c, 0x44, 0x76, 0xb1, 0x73, 0x08, 0xfa, 0x22, 0xe7, 0xb9, + 0x88, 0xbc, 0x89, 0x7f, + 0xae, 0x5a, 0xb0, 0xaf, 0x8a, 0xe3, 0xb4, 0x08, 0xe6, 0x73, 0xaa, 0xad, + 0x23, 0xe6, 0xbe, 0x21, + 0xe7, 0x72, 0x5a, 0xbd, 0x6f, 0x48, 0xce, 0x57, 0x90, 0xe6, 0x7a, 0xfa, + 0x4d, 0xd8, 0x5a, 0x90, + 0xfe, 0x91, 0x91, 0x25, 0x5b, 0xff, 0x78, 0xdc, 0xac, 0x0c, 0x7c, 0xe8, + 0x9a, 0x94, 0xe7, 0x02, + 0x79, 0x93, 0xf3, 0xad, 0x03, 0xe1, 0x37, 0xa6, 0x9b, 0x52, 0x9e, 0x8b, + 0xe5, 0xab, 0x72, 0xfe, + 0xb2, 0xe2, 0xac, 0x96, 0x9a, 0xe4, 0xda, 0x50, 0xf7, 0x22, 0xed, 0x7d, + 0xf3, 0xc6, 0xf5, 0xea, + 0x61, 0x71, 0x3d, 0xfb, 0x1c, 0x17, 0xe7, 0x5c, 0xce, 0x0c, 0xc4, 0x3a, + 0x49, 0xff, 0xc8, 0xc8, + 0x12, 0xaf, 0x7f, 0xc0, 0xaa, 0xdf, 0xf5, 0xb1, 0xea, 0xb5, 0x23, 0x17, + 0xcf, 0xc5, 0xf6, 0x8f, + 0x9f, 0xda, 0x0d, 0x9d, 0x1f, 0x2c, 0xce, 0x75, 0x38, 0xfe, 0x32, 0xe4, + 0x7d, 0x81, 0xf9, 0x8c, + 0xe9, 0x7d, 0xc3, 0x31, 0xad, 0x34, 0x6c, 0x8d, 0x0c, 0xbe, 0x86, 0x91, + 0xe2, 0x7f, 0x64, 0x64, + 0x89, 0xd7, 0x3f, 0x05, 0xab, 0xde, 0xea, 0xb1, 0xd8, 0x6c, 0x80, 0x0e, + 0x86, 0xcd, 0x0f, 0x86, + 0xbc, 0x09, 0xf7, 0x55, 0x11, 0x35, 0x32, 0x90, 0xf7, 0xd5, 0x47, 0x1b, + 0x1d, 0xd0, 0x3f, 0x60, + 0x5f, 0x69, 0x92, 0x5e, 0xb5, 0xa8, 0x71, 0x3d, 0x3d, 0xa6, 0xb9, 0x9c, + 0x82, 0xf3, 0x45, 0xf5, + 0x7f, 0x64, 0x64, 0x09, 0xd7, 0x3f, 0xa3, 0x78, 0x8e, 0x99, 0xab, 0x96, + 0xed, 0x42, 0x5c, 0x4f, + 0x1f, 0x65, 0x5b, 0xc1, 0xf3, 0x83, 0x05, 0x07, 0x3f, 0xb7, 0xdc, 0x3e, + 0x04, 0x5f, 0x35, 0xb4, + 0xdf, 0x84, 0xbd, 0x66, 0xc6, 0xca, 0xfb, 0xba, 0xd9, 0xcf, 0xd9, 0x69, + 0xba, 0xed, 0xe3, 0xb9, + 0x70, 0x8b, 0x95, 0x69, 0x85, 0x9c, 0xcb, 0x29, 0xd6, 0x84, 0xfa, 0x3f, + 0xc8, 0xc8, 0x92, 0x9e, + 0xff, 0xc0, 0x31, 0xad, 0x0a, 0xed, 0xea, 0x6d, 0x17, 0x7f, 0x59, 0x32, + 0x3f, 0x98, 0xf7, 0xe0, + 0xb2, 0xaf, 0x0b, 0xed, 0x37, 0xb1, 0x7a, 0xdf, 0x20, 0xef, 0x0b, 0x35, + 0x80, 0x9c, 0x87, 0x05, + 0x3a, 0xc8, 0xfe, 0x74, 0xcf, 0x99, 0x13, 0x35, 0xda, 0xa9, 0x2e, 0x8e, + 0x69, 0x85, 0x8b, 0xeb, + 0xa5, 0x97, 0x95, 0x3a, 0x9e, 0xf3, 0x75, 0xd9, 0x26, 0xfd, 0x23, 0x23, + 0x4b, 0xb0, 0xfe, 0x1d, + 0xa5, 0x38, 0xd3, 0x2a, 0x8f, 0x62, 0x5a, 0x49, 0xe2, 0x7a, 0xee, 0xbc, + 0x09, 0xfb, 0x59, 0xfc, + 0x5c, 0x68, 0xb3, 0xa9, 0x82, 0xfa, 0x4d, 0x2c, 0xfd, 0x83, 0xbc, 0x2f, + 0xe4, 0x40, 0xa0, 0x47, + 0x23, 0x35, 0xce, 0x74, 0xb2, 0xec, 0x0c, 0xe8, 0xf4, 0x67, 0x58, 0xfe, + 0xf5, 0x0e, 0xf3, 0xaf, + 0xb9, 0x16, 0x4d, 0xd2, 0xcd, 0x54, 0x88, 0x8f, 0x8c, 0xe7, 0xf7, 0x83, + 0x2f, 0xad, 0xa8, 0x61, + 0x74, 0xd6, 0x84, 0xf8, 0x2f, 0x64, 0x64, 0xc9, 0xd6, 0xbf, 0x98, 0x98, + 0x56, 0x96, 0xdf, 0x08, + 0xbd, 0x6f, 0x3b, 0xc7, 0xf9, 0x9a, 0x6c, 0x7e, 0x70, 0x6e, 0x92, 0x6e, + 0xa5, 0x06, 0xa9, 0x2e, + 0xf8, 0xbc, 0x1a, 0xe8, 0x9f, 0x77, 0xee, 0xa5, 0x91, 0x1e, 0xea, 0x6d, + 0x7f, 0xdf, 0x2e, 0x5c, + 0xe0, 0x5f, 0xcb, 0x78, 0x2e, 0x4e, 0x5c, 0xef, 0x1c, 0xc7, 0xef, 0x57, + 0x72, 0xbe, 0x9c, 0x35, + 0x21, 0xfe, 0x29, 0x19, 0x59, 0xa2, 0xf5, 0xcf, 0xaa, 0xd7, 0x4b, 0xc5, + 0x38, 0x57, 0x8d, 0xf9, + 0xaa, 0xed, 0x0d, 0xc9, 0xfc, 0xe0, 0xd2, 0x59, 0xae, 0x0e, 0x39, 0x0f, + 0xf0, 0x7b, 0x33, 0xe3, + 0x54, 0x07, 0x72, 0x20, 0x32, 0x1f, 0x34, 0x33, 0x12, 0x7d, 0xbb, 0x4e, + 0xce, 0x45, 0xc2, 0x73, + 0x81, 0x58, 0xa3, 0xe8, 0x7d, 0xcb, 0xa9, 0x99, 0x56, 0x17, 0x88, 0x58, + 0xe7, 0xc0, 0xae, 0x61, + 0x24, 0xfd, 0x23, 0x23, 0x4b, 0xb4, 0xfe, 0x0d, 0x0b, 0x7c, 0xae, 0x9a, + 0x86, 0xa9, 0x07, 0x39, + 0xc9, 0x5c, 0x71, 0xae, 0xda, 0xaa, 0xdf, 0xa4, 0xb0, 0xf4, 0xc6, 0xfb, + 0x32, 0xaa, 0xde, 0x37, + 0xd0, 0x22, 0x76, 0x76, 0xcc, 0x4d, 0x83, 0x6b, 0x71, 0x84, 0x7f, 0xbd, + 0x79, 0xa8, 0x2f, 0x77, + 0x0e, 0xab, 0x27, 0xb9, 0x5a, 0xe8, 0x7d, 0x44, 0x88, 0x75, 0x8a, 0x35, + 0xa1, 0xf9, 0x1f, 0x64, + 0x64, 0x49, 0xd6, 0xbf, 0xd0, 0xb8, 0x9e, 0xcb, 0x22, 0xcd, 0x55, 0x0b, + 0xe5, 0xb4, 0x68, 0x46, + 0x6a, 0x9c, 0x6d, 0xc3, 0xf9, 0x0f, 0x38, 0xf8, 0xca, 0xde, 0xb7, 0x91, + 0xd3, 0xfb, 0x26, 0xbe, + 0x1b, 0x18, 0x06, 0xb3, 0x42, 0xd3, 0x3b, 0x5b, 0x89, 0xf9, 0xc7, 0xec, + 0xbc, 0x56, 0xbd, 0xd8, + 0x92, 0xf3, 0x5c, 0xac, 0xb8, 0x1e, 0xbc, 0x3f, 0x7c, 0xac, 0x93, 0xe6, + 0xff, 0x92, 0x91, 0x25, + 0x59, 0xff, 0x62, 0x65, 0x5a, 0xf1, 0x1a, 0x19, 0x35, 0xa7, 0x65, 0x63, + 0x24, 0x7a, 0xdf, 0x38, + 0x07, 0x1f, 0xd5, 0xfb, 0x16, 0x1c, 0xd7, 0xe3, 0xfe, 0xb5, 0xdd, 0xc3, + 0xec, 0xab, 0x4b, 0x5c, + 0xe3, 0xb9, 0xb8, 0x38, 0x5f, 0xa8, 0x58, 0xe7, 0x39, 0xac, 0x09, 0xe9, + 0x1f, 0x19, 0xd9, 0xcd, + 0xd7, 0x3f, 0xcd, 0x08, 0x8f, 0xeb, 0x21, 0x99, 0x56, 0x63, 0xf5, 0xdc, + 0x37, 0x0c, 0xa7, 0x45, + 0xb3, 0x7a, 0xdf, 0xf8, 0xdf, 0xd5, 0xbd, 0x6f, 0x6a, 0x56, 0x7d, 0x4f, + 0xc4, 0x1d, 0x77, 0x4e, + 0x8b, 0x07, 0x9e, 0xbc, 0xc9, 0x5d, 0xc1, 0x73, 0x70, 0xf2, 0x26, 0x23, + 0xc1, 0xf9, 0xc2, 0xc7, + 0x3a, 0x49, 0xff, 0xc8, 0xc8, 0x6e, 0xbc, 0xfe, 0x8d, 0x8b, 0xad, 0x20, + 0x9e, 0x8b, 0x13, 0xd7, + 0xc3, 0x33, 0xad, 0x62, 0x99, 0xab, 0x66, 0xf7, 0xbe, 0x71, 0xfd, 0x43, + 0xf5, 0xbe, 0xe1, 0xea, + 0xf5, 0x78, 0xdc, 0xd1, 0x95, 0x37, 0xe1, 0xb5, 0x38, 0xee, 0xbc, 0xc9, + 0xc5, 0xf6, 0x3e, 0xd4, + 0x26, 0x16, 0xe4, 0xf3, 0x83, 0x7d, 0x6b, 0x42, 0xfa, 0x47, 0x46, 0x76, + 0xe3, 0xf5, 0x6f, 0xb1, + 0xdb, 0x08, 0xe2, 0xb9, 0x80, 0xf6, 0x08, 0x56, 0xbd, 0xaa, 0x1e, 0x24, + 0xcd, 0xfd, 0xc6, 0xab, + 0xf0, 0x97, 0x03, 0xcf, 0x57, 0x56, 0xef, 0x1b, 0xe6, 0xdd, 0x63, 0x7b, + 0xdf, 0x02, 0xe7, 0x72, + 0xf6, 0x80, 0xfd, 0x9c, 0x6f, 0x85, 0xe5, 0x4d, 0x82, 0xfa, 0x4d, 0xf2, + 0x4e, 0xac, 0x93, 0xf4, + 0x8f, 0x8c, 0xec, 0xe6, 0x9f, 0xff, 0x4a, 0xad, 0x35, 0x9e, 0x8b, 0x55, + 0x97, 0x0c, 0xbd, 0x65, + 0x5b, 0xd3, 0x54, 0x38, 0x83, 0x80, 0xf3, 0x97, 0xab, 0x18, 0xfe, 0x32, + 0x82, 0xd3, 0xb2, 0x61, + 0x64, 0x16, 0xb9, 0x56, 0x66, 0xa8, 0x88, 0x11, 0x5a, 0x5f, 0x5b, 0x38, + 0xab, 0xa2, 0xe7, 0x72, + 0x86, 0xf1, 0xfb, 0x21, 0x6f, 0x92, 0x3f, 0x29, 0x1f, 0x02, 0xd7, 0xcf, + 0x9d, 0x37, 0x59, 0xeb, + 0x37, 0x39, 0xd2, 0xba, 0x2b, 0xce, 0x17, 0xe9, 0x1f, 0x19, 0x59, 0x12, + 0xf2, 0x1f, 0x6e, 0x9e, + 0xcb, 0x8a, 0x83, 0xcf, 0xce, 0x84, 0x4c, 0x03, 0xca, 0x21, 0x3c, 0x17, + 0x3b, 0xae, 0xc7, 0x99, + 0x56, 0xb1, 0xf0, 0x97, 0x35, 0x43, 0x5f, 0xe6, 0x98, 0xff, 0x89, 0xd1, + 0x3f, 0x11, 0xd7, 0x8b, + 0x8b, 0x69, 0xa5, 0x01, 0xe7, 0xeb, 0x54, 0xaf, 0x41, 0xde, 0xc4, 0xe9, + 0x61, 0x0e, 0xe8, 0x37, + 0xe1, 0x35, 0x8c, 0xec, 0x99, 0x90, 0xea, 0x51, 0xfd, 0x0b, 0x19, 0x59, + 0xc2, 0xf2, 0xbf, 0xbc, + 0x2e, 0x19, 0xe6, 0x60, 0x94, 0x4e, 0xb7, 0x6b, 0x2a, 0x9e, 0x8b, 0x13, + 0xd7, 0x43, 0xd4, 0xc8, + 0xa0, 0x7c, 0x55, 0x57, 0xef, 0x9b, 0xf2, 0xbd, 0x5b, 0x4c, 0xab, 0xf8, + 0xe6, 0x72, 0x56, 0xfd, + 0xb1, 0xce, 0xf0, 0x7e, 0x93, 0x09, 0xf1, 0x5f, 0xc8, 0xc8, 0x12, 0x5b, + 0xff, 0x62, 0x31, 0x53, + 0x8a, 0x8b, 0xcd, 0xfa, 0x3a, 0xcf, 0xc5, 0xc5, 0xc1, 0x9f, 0x6d, 0x35, + 0xb0, 0xfc, 0xe5, 0x9d, + 0xa9, 0x2a, 0x96, 0x98, 0x32, 0xec, 0xde, 0x37, 0xe5, 0x7b, 0x8f, 0x34, + 0x97, 0x53, 0xcd, 0xb4, + 0xca, 0x85, 0xf1, 0xfb, 0x83, 0xfa, 0x4d, 0x88, 0x7f, 0x4a, 0x46, 0x96, + 0x64, 0xfd, 0x13, 0xbd, + 0x6f, 0x3d, 0xc1, 0x24, 0x90, 0xf1, 0x5c, 0xca, 0xb7, 0xca, 0xfb, 0x70, + 0xfe, 0x93, 0xf2, 0x5c, + 0xa2, 0xf8, 0xaa, 0x5c, 0xff, 0x74, 0x25, 0xf3, 0xd9, 0xad, 0xcf, 0x71, + 0xf5, 0x26, 0x47, 0xe1, + 0x7c, 0xe5, 0x67, 0xf9, 0x66, 0x71, 0x4c, 0xfc, 0x17, 0x32, 0xb2, 0xc4, + 0xea, 0xdf, 0x30, 0xcf, + 0x99, 0x56, 0x5a, 0x40, 0x9f, 0x84, 0x9b, 0x83, 0x5f, 0xbd, 0xbb, 0x9e, + 0x37, 0xf1, 0xf0, 0x5c, + 0xac, 0x1a, 0x19, 0x14, 0x7f, 0x79, 0x90, 0xee, 0xc2, 0xdc, 0x37, 0x97, + 0xaf, 0x6a, 0x5c, 0x37, + 0xae, 0x97, 0x5e, 0x22, 0x6a, 0x18, 0xaf, 0xc4, 0xf9, 0xa2, 0xfc, 0x07, + 0x19, 0x59, 0x52, 0xf5, + 0x0f, 0xc3, 0xaa, 0x87, 0xbc, 0x49, 0xe1, 0xb4, 0x7a, 0x00, 0xb5, 0x73, + 0xd2, 0xf9, 0xc1, 0x90, + 0x37, 0x19, 0xa4, 0x3b, 0xa8, 0x19, 0xe5, 0x43, 0x98, 0xfb, 0x96, 0x71, + 0xce, 0x88, 0xe9, 0x51, + 0xaa, 0x03, 0x39, 0x97, 0xc0, 0xf3, 0x60, 0x14, 0x56, 0xfd, 0x32, 0x9e, + 0xb9, 0x9c, 0xde, 0x35, + 0x21, 0xfd, 0x23, 0x23, 0x4b, 0xac, 0xfe, 0x21, 0xeb, 0xf5, 0xf2, 0xa7, + 0xbb, 0xb5, 0xed, 0xa9, + 0xd6, 0x08, 0xe2, 0xb9, 0x38, 0x79, 0x93, 0x93, 0x62, 0xad, 0x72, 0xbb, + 0xb2, 0x97, 0x1b, 0xa5, + 0x5a, 0xb2, 0xf9, 0xc1, 0x42, 0x5f, 0xf4, 0x76, 0x6e, 0x9e, 0x76, 0xf4, + 0x8f, 0xb3, 0x10, 0x96, + 0x7a, 0x33, 0x3b, 0xcb, 0xb4, 0x81, 0x83, 0xef, 0xa9, 0x4b, 0x16, 0xac, + 0x7a, 0x14, 0xd3, 0x4a, + 0x5d, 0xc3, 0x88, 0x9c, 0xcb, 0x39, 0xdd, 0x76, 0xc5, 0x3a, 0x49, 0xff, + 0xc8, 0xc8, 0x92, 0xaa, + 0x7f, 0x11, 0x99, 0x56, 0x2d, 0xf7, 0xbf, 0xb9, 0xe7, 0x07, 0xef, 0xba, + 0x39, 0x04, 0x16, 0x07, + 0x5f, 0xd6, 0x6f, 0x92, 0x9a, 0xea, 0x4e, 0xef, 0x1b, 0xcf, 0x19, 0x2f, + 0x2d, 0x16, 0x8c, 0xc5, + 0xc1, 0x2f, 0x5f, 0xec, 0xec, 0x3b, 0x35, 0xda, 0xf3, 0x38, 0xe3, 0x7a, + 0xb8, 0xb9, 0x9c, 0xde, + 0x35, 0x21, 0xfd, 0x23, 0x23, 0x4b, 0xaa, 0xfe, 0x89, 0x7a, 0xbd, 0xab, + 0x32, 0xad, 0xdc, 0x79, + 0x53, 0xbd, 0x55, 0x38, 0xde, 0x3a, 0x84, 0xb3, 0x60, 0xd8, 0xfc, 0x60, + 0x88, 0x33, 0x66, 0x66, + 0xb9, 0x96, 0x87, 0x79, 0x0a, 0x0c, 0x84, 0x61, 0xaa, 0x9b, 0x9e, 0x66, + 0xdb, 0x50, 0x17, 0xe3, + 0xf1, 0xaf, 0x2f, 0xca, 0xfb, 0xc0, 0x3e, 0xc8, 0xca, 0x78, 0x2e, 0x11, + 0xe3, 0x7a, 0x18, 0xce, + 0x97, 0xb7, 0x86, 0x91, 0xf4, 0x8f, 0x8c, 0x2c, 0xa9, 0xfa, 0x17, 0x89, + 0x69, 0xa5, 0xa8, 0x41, + 0x61, 0xbe, 0x6a, 0x0b, 0x6a, 0x50, 0x02, 0xe7, 0x07, 0xbb, 0x38, 0xf8, + 0x59, 0xe8, 0x7d, 0x1b, + 0x4b, 0xe6, 0x07, 0x33, 0x8d, 0xd3, 0x27, 0x85, 0x66, 0xf1, 0x64, 0xbb, + 0xc6, 0xfb, 0xd5, 0xee, + 0x0a, 0xff, 0x9a, 0x6b, 0x61, 0x10, 0xcf, 0xc5, 0xca, 0xd5, 0x44, 0x8f, + 0xeb, 0x85, 0xd4, 0xc8, + 0x78, 0xd6, 0x84, 0xf4, 0x8f, 0x8c, 0x2c, 0xa1, 0xfa, 0xc7, 0x99, 0x56, + 0xb1, 0xcd, 0x55, 0xf3, + 0x71, 0x5a, 0x02, 0xe7, 0x07, 0x33, 0x2d, 0x2b, 0x9e, 0xe6, 0xea, 0xfa, + 0x22, 0xdb, 0xca, 0x8c, + 0x99, 0x8e, 0xf5, 0xa5, 0x71, 0x42, 0x5e, 0xa3, 0x5d, 0x3c, 0xaf, 0x1e, + 0x80, 0x3f, 0x1d, 0x50, + 0xa3, 0x5d, 0x2b, 0xcc, 0x2c, 0x0e, 0x7e, 0x3f, 0xd3, 0xc1, 0xbc, 0x3f, + 0x11, 0xd7, 0xc3, 0x71, + 0xbe, 0x56, 0x6b, 0x42, 0xfa, 0x47, 0x46, 0x96, 0x4c, 0xfd, 0x0b, 0x8a, + 0xeb, 0x05, 0xd5, 0xa0, + 0xe0, 0x98, 0x56, 0x21, 0x9c, 0x16, 0x17, 0x07, 0x7f, 0xbb, 0x56, 0x04, + 0xfe, 0xbd, 0xc5, 0x7e, + 0xb6, 0x66, 0x9f, 0x4b, 0x4d, 0xf4, 0xe1, 0x6a, 0x4d, 0x11, 0x6b, 0x2c, + 0x36, 0xb6, 0x2e, 0x02, + 0x66, 0x6e, 0x32, 0xff, 0x1a, 0x34, 0x51, 0x1f, 0x32, 0x2d, 0x0c, 0x99, + 0xb9, 0x89, 0x8d, 0x75, + 0x5a, 0x9c, 0xaf, 0x16, 0xe9, 0x1f, 0x19, 0x59, 0x82, 0xf5, 0x0f, 0x5b, + 0xaf, 0x37, 0x2a, 0x46, + 0x98, 0xab, 0xa6, 0xe2, 0xb4, 0x64, 0xba, 0x9b, 0xa7, 0xb9, 0x46, 0x66, + 0x92, 0x6e, 0xc3, 0xac, + 0x37, 0xd0, 0x40, 0x79, 0xdc, 0x31, 0x20, 0xae, 0xd7, 0x4b, 0x75, 0x9d, + 0x1a, 0x6d, 0x1f, 0xe7, + 0x0f, 0xfc, 0xeb, 0x55, 0xac, 0x51, 0x5b, 0xab, 0xd1, 0xe6, 0xfa, 0x8c, + 0xe4, 0x7c, 0xad, 0xd6, + 0x84, 0xf4, 0x8f, 0x8c, 0x2c, 0x91, 0xfa, 0x87, 0x8c, 0xeb, 0x21, 0x6b, + 0x64, 0x70, 0x9c, 0x16, + 0xa6, 0x7f, 0x70, 0xfe, 0x13, 0x67, 0x49, 0xcd, 0xd0, 0x06, 0x29, 0xb9, + 0xcf, 0x6a, 0xc5, 0xf5, + 0x64, 0xbd, 0x6f, 0x9a, 0x5d, 0xa3, 0x7d, 0xb2, 0x53, 0x73, 0xf2, 0x2e, + 0x76, 0xac, 0xf1, 0x7c, + 0x7b, 0x8d, 0x83, 0xcf, 0xe3, 0x7a, 0x73, 0x2d, 0x62, 0xac, 0x93, 0xf4, + 0x8f, 0x8c, 0x2c, 0x91, + 0xfa, 0x67, 0xf5, 0xbe, 0xa1, 0xe2, 0x7a, 0x4a, 0xa6, 0x95, 0x06, 0x73, + 0xd5, 0x50, 0x9c, 0x96, + 0xd2, 0xa9, 0xad, 0x7f, 0x0a, 0x43, 0xd6, 0xeb, 0x6d, 0x4c, 0xb7, 0x39, + 0x1f, 0xdf, 0x93, 0x37, + 0x79, 0xca, 0x9f, 0x37, 0xc9, 0x35, 0x04, 0xe7, 0x4b, 0x53, 0x71, 0xbe, + 0xba, 0xde, 0x35, 0x21, + 0xfd, 0x23, 0x23, 0xbb, 0xf1, 0xfa, 0xc7, 0x74, 0xc7, 0xc3, 0x73, 0xe1, + 0xf5, 0x20, 0x51, 0xe2, + 0x7a, 0x59, 0x25, 0xd3, 0x65, 0xfb, 0x16, 0x8e, 0xd3, 0x52, 0x3a, 0xd1, + 0x1b, 0x2a, 0x5f, 0x5a, + 0x68, 0x25, 0xd4, 0xeb, 0x61, 0x59, 0xf5, 0x4e, 0xdc, 0x51, 0xc4, 0x1a, + 0x67, 0x85, 0x46, 0xe9, + 0xcc, 0x57, 0xa3, 0xcd, 0x74, 0x71, 0xe7, 0x0c, 0xd8, 0x36, 0xc1, 0xf3, + 0x83, 0x83, 0xd7, 0x84, + 0xf4, 0x8f, 0x8c, 0xec, 0xc6, 0xeb, 0xdf, 0xbc, 0xda, 0xf0, 0xf0, 0x5c, + 0xa0, 0x2e, 0x79, 0xec, + 0x9d, 0xab, 0x76, 0xbd, 0xb8, 0x1e, 0x9e, 0xd3, 0x52, 0x3a, 0xce, 0x34, + 0x50, 0xef, 0x9b, 0xd7, + 0xeb, 0x6d, 0xab, 0xe7, 0x72, 0x4a, 0xe3, 0x7a, 0x76, 0x8d, 0x76, 0xb1, + 0xb1, 0x75, 0xee, 0xd2, + 0x42, 0xc9, 0xfc, 0x60, 0xfe, 0x3d, 0xe3, 0x62, 0xdb, 0x1b, 0xeb, 0x24, + 0xfd, 0x23, 0x23, 0xbb, + 0xf1, 0xfa, 0x37, 0xab, 0x34, 0xfc, 0x75, 0xc9, 0xa5, 0x93, 0xad, 0x1a, + 0xf4, 0x96, 0xa5, 0xa4, + 0x3c, 0x17, 0x3b, 0xae, 0x87, 0x60, 0x5a, 0x45, 0xe0, 0xb4, 0x94, 0x96, + 0x69, 0x94, 0xfe, 0xa1, + 0x99, 0x56, 0x98, 0x1a, 0x46, 0xe6, 0xeb, 0x83, 0x3e, 0x17, 0x8f, 0x8b, + 0x87, 0xee, 0xbc, 0x09, + 0x67, 0xdb, 0xb8, 0xfb, 0x4d, 0xd6, 0x38, 0x5f, 0xa4, 0x7f, 0x64, 0x64, + 0x37, 0x5e, 0xff, 0x7a, + 0x29, 0x23, 0xa8, 0x2e, 0x79, 0x37, 0x8c, 0xe7, 0x12, 0x31, 0xae, 0x87, + 0xe2, 0xb4, 0x30, 0x5f, + 0xb5, 0xb4, 0x48, 0x35, 0x31, 0xef, 0x1a, 0x3d, 0x97, 0x13, 0xc9, 0xb4, + 0x02, 0x7d, 0x86, 0xf7, + 0xc7, 0xf3, 0x26, 0x13, 0x7b, 0x3e, 0x52, 0xd5, 0xc7, 0x73, 0xd8, 0xd9, + 0xe7, 0x35, 0xdc, 0xa3, + 0x8c, 0x55, 0x63, 0x4d, 0xfc, 0x67, 0x32, 0xb2, 0x24, 0xe5, 0x3f, 0x9c, + 0xba, 0xe4, 0xf3, 0x8a, + 0xa7, 0x6f, 0x77, 0x8d, 0xe7, 0x02, 0xfb, 0xbf, 0xa7, 0x75, 0x71, 0x35, + 0x32, 0x78, 0x4e, 0x4b, + 0x69, 0xae, 0xa1, 0xf4, 0x2f, 0xfe, 0xb9, 0x9c, 0xeb, 0xbd, 0x6f, 0x7c, + 0x96, 0x7a, 0x40, 0xbf, + 0x09, 0x70, 0x1c, 0x78, 0xde, 0x64, 0x44, 0xfc, 0x3f, 0x32, 0xb2, 0x24, + 0xe6, 0x7f, 0x21, 0xae, + 0x57, 0x39, 0xd1, 0x0f, 0x05, 0x07, 0x7f, 0xe7, 0xa0, 0x12, 0xc8, 0xc1, + 0xd7, 0x1b, 0x3b, 0xb7, + 0xd4, 0x73, 0x2f, 0x35, 0xc1, 0x69, 0x51, 0xfa, 0xaa, 0xc0, 0x69, 0x29, + 0x4e, 0xb5, 0x16, 0xe6, + 0x5d, 0x47, 0x9c, 0xcb, 0x19, 0xde, 0x9b, 0xa7, 0x8e, 0x75, 0xf2, 0xbc, + 0xc9, 0xe6, 0x99, 0xaf, + 0xdf, 0x84, 0xf8, 0xcf, 0x64, 0x64, 0x49, 0xd4, 0x3f, 0x2b, 0xae, 0x67, + 0xfb, 0x8d, 0x12, 0x9e, + 0xcb, 0x9d, 0xea, 0x5b, 0xaa, 0xec, 0x5c, 0xb4, 0x1d, 0xc2, 0x73, 0x11, + 0xbe, 0xea, 0x0e, 0x9a, + 0xd3, 0x52, 0x50, 0x9d, 0xd5, 0xec, 0xb8, 0x5e, 0x18, 0xab, 0xde, 0x57, + 0x23, 0x13, 0xd7, 0x5c, + 0x4e, 0xce, 0xf9, 0x9a, 0xa5, 0x1a, 0x4e, 0xde, 0x64, 0x72, 0xd9, 0x22, + 0xfd, 0x23, 0x23, 0x4b, + 0x9a, 0xfe, 0x85, 0xb0, 0xea, 0x3d, 0x1c, 0xfc, 0xf2, 0xbe, 0x8a, 0xe7, + 0x22, 0x7c, 0xd5, 0x0a, + 0x9a, 0xbf, 0x9c, 0x1b, 0xa2, 0xe6, 0xfe, 0x22, 0xe3, 0x7a, 0x7a, 0x84, + 0xb9, 0x9c, 0x38, 0xce, + 0x97, 0x77, 0x4d, 0x28, 0xfe, 0x47, 0x46, 0x96, 0x38, 0xfd, 0xb3, 0x7b, + 0xdf, 0x14, 0xf5, 0x7a, + 0xa2, 0x46, 0x66, 0x67, 0x6f, 0x8d, 0xe7, 0xe2, 0xcb, 0x9b, 0x80, 0xaf, + 0xaa, 0xae, 0x91, 0x11, + 0xfd, 0x1c, 0x59, 0xdf, 0xdc, 0x4b, 0x60, 0x20, 0x58, 0xf5, 0x76, 0x86, + 0x3f, 0xae, 0xa7, 0xae, + 0x27, 0xb4, 0xf8, 0xfd, 0xb1, 0xd4, 0x30, 0x06, 0xf5, 0x03, 0x52, 0xfe, + 0x97, 0x8c, 0x2c, 0x71, + 0xfa, 0x17, 0x65, 0xae, 0xda, 0xb9, 0xe0, 0x2f, 0x07, 0xf3, 0x5c, 0x44, + 0xde, 0x64, 0xfb, 0xa2, + 0xba, 0x57, 0x3e, 0x29, 0xd4, 0xa4, 0xf3, 0x83, 0x5d, 0xbe, 0xaa, 0xff, + 0xac, 0x06, 0x0c, 0x04, + 0x7d, 0x9e, 0x69, 0xb9, 0x38, 0xf8, 0x5d, 0x3b, 0xae, 0xa7, 0x7a, 0x7f, + 0x1b, 0xd8, 0x1a, 0x46, + 0xa8, 0x91, 0x59, 0x5e, 0x85, 0xf3, 0x45, 0xfa, 0x47, 0x46, 0x96, 0x38, + 0xfd, 0xc3, 0x32, 0xad, + 0x66, 0x5e, 0xa6, 0x95, 0x3b, 0x57, 0x20, 0xe5, 0xe0, 0x07, 0xcd, 0x0f, + 0xe6, 0x35, 0x32, 0xfa, + 0x6a, 0xd6, 0x9c, 0x5b, 0xff, 0x4e, 0x2c, 0xf6, 0xb3, 0xc5, 0x83, 0xb1, + 0xea, 0x92, 0x5b, 0xe5, + 0xdb, 0x55, 0x44, 0x6f, 0xf2, 0x36, 0x7a, 0x2e, 0xe7, 0xd5, 0x38, 0x5f, + 0xa4, 0x7f, 0x64, 0x64, + 0x89, 0xd3, 0x3f, 0xce, 0xb4, 0x52, 0xd7, 0xeb, 0x65, 0xa0, 0x06, 0xe5, + 0x24, 0x2c, 0xae, 0xa7, + 0x19, 0xe9, 0x91, 0xde, 0x06, 0xbf, 0x91, 0xd7, 0xce, 0xc9, 0xe6, 0x07, + 0x43, 0xde, 0x64, 0x54, + 0xe0, 0xbe, 0xf4, 0xda, 0x4f, 0x18, 0xa4, 0xba, 0xe9, 0x49, 0xa6, 0x6d, + 0x73, 0xf0, 0x45, 0xac, + 0xb1, 0xc2, 0xe3, 0x8d, 0x5b, 0xcb, 0x82, 0x94, 0xe7, 0xb2, 0xaa, 0x91, + 0xb9, 0x0a, 0xbf, 0x3f, + 0xc0, 0x78, 0x0d, 0x63, 0x79, 0xcf, 0xbb, 0x26, 0xa4, 0x7f, 0x64, 0x64, + 0x89, 0xd3, 0x3f, 0x5e, + 0xaf, 0x17, 0x13, 0xd3, 0x8a, 0xe9, 0x8b, 0xa8, 0x41, 0xd1, 0xda, 0xb2, + 0xf9, 0xc1, 0x3c, 0x6f, + 0x72, 0x52, 0xaa, 0x01, 0x7f, 0x39, 0x8c, 0x63, 0x0f, 0x1c, 0x7c, 0x5e, + 0x97, 0x7c, 0xab, 0xb2, + 0xa7, 0xe2, 0xb9, 0x5c, 0x2f, 0xae, 0x17, 0x60, 0x81, 0x6b, 0x42, 0xfa, + 0x47, 0x46, 0x96, 0x34, + 0xfd, 0xe3, 0xf5, 0x7a, 0xe7, 0xb8, 0xb9, 0x6a, 0x18, 0xa6, 0xd5, 0x5a, + 0xef, 0x9b, 0x6f, 0x7e, + 0xb0, 0xd3, 0x6f, 0x72, 0xb7, 0xf2, 0x96, 0xcd, 0x63, 0x9d, 0xf3, 0xff, + 0x52, 0x03, 0xc9, 0xcc, + 0x4b, 0xf0, 0xbb, 0xa7, 0xa5, 0xe6, 0xee, 0xed, 0xed, 0x3d, 0x39, 0xcf, + 0x45, 0x70, 0xf0, 0x79, + 0x5c, 0x6f, 0x1e, 0x0f, 0xbf, 0x3f, 0x78, 0x4d, 0x48, 0xff, 0xc8, 0xc8, + 0x92, 0xa6, 0x7f, 0x7e, + 0x56, 0xbd, 0xec, 0x5c, 0x57, 0xbc, 0xe0, 0x35, 0x28, 0x0a, 0xbf, 0x51, + 0x70, 0x5a, 0x64, 0x35, + 0x28, 0x4e, 0xde, 0xe4, 0x4c, 0xf4, 0x9b, 0x94, 0xce, 0x73, 0x75, 0x1e, + 0xeb, 0x3b, 0xce, 0x35, + 0xf5, 0x79, 0xb6, 0x15, 0x1c, 0xd7, 0x63, 0x5a, 0x24, 0xea, 0x09, 0x43, + 0x63, 0x8d, 0x90, 0x23, + 0xde, 0x5e, 0xe6, 0x0e, 0xa5, 0x3c, 0x97, 0x28, 0xb1, 0xce, 0xc0, 0x35, + 0x21, 0xfd, 0x23, 0x23, + 0x4b, 0x9a, 0xfe, 0x85, 0xb0, 0xea, 0x3d, 0xfe, 0x28, 0x7e, 0xae, 0xda, + 0x36, 0x6e, 0xae, 0xda, + 0x69, 0xbe, 0x06, 0x73, 0x3f, 0x32, 0x73, 0xc1, 0x7e, 0x86, 0x78, 0x5f, + 0xd0, 0xd7, 0x06, 0xc7, + 0xf5, 0x5c, 0x3c, 0x97, 0x20, 0x0e, 0x7e, 0x10, 0xcf, 0xc5, 0x89, 0x75, + 0x22, 0x38, 0x5f, 0x0b, + 0xee, 0x4b, 0x93, 0xfe, 0x91, 0x91, 0x25, 0x5c, 0xff, 0xb0, 0x4c, 0x2b, + 0x4c, 0x0d, 0x8a, 0x36, + 0x29, 0xb5, 0xd0, 0x9c, 0x96, 0x15, 0x7f, 0xd9, 0xd0, 0xfa, 0xa9, 0x6e, + 0x7a, 0x9c, 0xe9, 0x48, + 0xb5, 0x32, 0xac, 0xf7, 0x0d, 0x38, 0xf8, 0xe3, 0x7c, 0x0b, 0xde, 0x9f, + 0x13, 0x2b, 0x0c, 0xe2, + 0xb9, 0x40, 0xde, 0x64, 0xbc, 0x79, 0x0d, 0xce, 0x17, 0xe9, 0x1f, 0x19, + 0x59, 0xd2, 0xf4, 0xaf, + 0x70, 0x8a, 0x60, 0xd5, 0xf7, 0x33, 0x68, 0xa6, 0x55, 0x6c, 0x9c, 0x16, + 0xb7, 0x56, 0xaa, 0x98, + 0x56, 0xec, 0x7c, 0xca, 0x6b, 0x18, 0x47, 0xa9, 0x16, 0x8f, 0x35, 0x06, + 0xf0, 0x5c, 0x78, 0xde, + 0xe4, 0xb8, 0x74, 0xc8, 0x39, 0x5f, 0xb2, 0xbc, 0x8b, 0x1d, 0xeb, 0x84, + 0x7e, 0xc0, 0xb5, 0x35, + 0x21, 0xfd, 0x23, 0x23, 0xbb, 0xf1, 0xfa, 0xc7, 0xce, 0x72, 0xae, 0xfd, + 0x8f, 0x67, 0x5a, 0x45, + 0xe7, 0x2f, 0x4b, 0x63, 0x89, 0x28, 0x4e, 0x8b, 0xad, 0x95, 0x67, 0x38, + 0xa6, 0x95, 0x9f, 0xdf, + 0xbf, 0xc6, 0x73, 0x71, 0x71, 0xbe, 0xa4, 0xf3, 0x83, 0xad, 0xd7, 0x0c, + 0x5e, 0x13, 0xd2, 0x3f, + 0x32, 0xb2, 0x1b, 0xaf, 0x7f, 0xb3, 0x72, 0x13, 0xea, 0x92, 0x37, 0x67, + 0xa2, 0x2e, 0x19, 0x19, + 0xd7, 0x43, 0x33, 0xad, 0x22, 0x70, 0x5a, 0x10, 0xfa, 0xe7, 0xd4, 0xeb, + 0x21, 0x98, 0x56, 0xd2, + 0xb8, 0xde, 0x8a, 0x83, 0x7f, 0x5e, 0x5d, 0xd5, 0x25, 0xba, 0xe7, 0x07, + 0x7b, 0x38, 0xf8, 0x82, + 0xdf, 0xbf, 0x5e, 0x23, 0x43, 0xfa, 0x47, 0x46, 0x76, 0xe3, 0xf5, 0x6f, + 0xb1, 0xdb, 0x70, 0x72, + 0x05, 0x17, 0x3b, 0x7b, 0xa0, 0x45, 0xc5, 0x59, 0x56, 0xca, 0x73, 0xb1, + 0xe2, 0x7a, 0x68, 0xfe, + 0x72, 0x5c, 0x9c, 0x16, 0x9f, 0x56, 0x86, 0x7f, 0xed, 0x28, 0x02, 0xbf, + 0xff, 0x24, 0x5f, 0x53, + 0xe4, 0x4d, 0x5a, 0x9c, 0xf3, 0x35, 0x20, 0xfd, 0x23, 0x23, 0x4b, 0x9c, + 0xfe, 0x0d, 0xf4, 0x8e, + 0x53, 0x97, 0x7c, 0xd7, 0xce, 0x15, 0x54, 0xa4, 0x3c, 0x97, 0xd8, 0xe3, + 0x7a, 0x48, 0x4e, 0x8b, + 0x9d, 0x77, 0xe1, 0xf5, 0x7a, 0x31, 0x31, 0xad, 0xf8, 0x5c, 0x4e, 0xbb, + 0xf7, 0x4d, 0x32, 0x3f, + 0x98, 0xaf, 0x05, 0xd3, 0xe7, 0xad, 0x63, 0x7f, 0xbf, 0x09, 0xe9, 0x1f, + 0x19, 0x59, 0x62, 0xf2, + 0x1f, 0x47, 0x6c, 0xff, 0x4f, 0x37, 0x9b, 0xbc, 0x8e, 0x38, 0x84, 0xe7, + 0x02, 0x1c, 0x7c, 0x1e, + 0xd7, 0x53, 0xf5, 0x56, 0xd8, 0x71, 0xbd, 0x98, 0x38, 0x2d, 0x56, 0x5c, + 0x2f, 0x02, 0xd3, 0xea, + 0xea, 0x73, 0x39, 0x9d, 0xf9, 0xc1, 0x61, 0xfd, 0x26, 0xfd, 0xcb, 0x0e, + 0xe9, 0x1f, 0x19, 0x59, + 0x82, 0xf2, 0xbf, 0x56, 0xbd, 0x5e, 0xaa, 0xbf, 0xe2, 0xb9, 0xc0, 0x79, + 0xcb, 0xcf, 0xc1, 0x2f, + 0x9c, 0x56, 0x0e, 0x2a, 0xc7, 0xfa, 0x61, 0x68, 0xde, 0x34, 0x3a, 0x7f, + 0x59, 0xad, 0x7f, 0x76, + 0x5c, 0xcf, 0x8c, 0x89, 0x69, 0x85, 0x98, 0xcb, 0x99, 0x82, 0xf7, 0xc7, + 0xf4, 0x79, 0xad, 0xdf, + 0x64, 0x4e, 0xfc, 0x67, 0x32, 0xb2, 0x24, 0xe9, 0x5f, 0x40, 0x5c, 0x8f, + 0xe7, 0x0a, 0xd6, 0x39, + 0xf8, 0xec, 0x0a, 0xe3, 0xb9, 0xb8, 0xe2, 0x7a, 0xaa, 0x1a, 0x19, 0x24, + 0xa7, 0xc5, 0xaf, 0x95, + 0xe1, 0x71, 0x3d, 0xce, 0xb4, 0x4a, 0xa3, 0x7a, 0xdf, 0x94, 0x1c, 0x2d, + 0x51, 0xc3, 0x78, 0xb0, + 0xe1, 0x9f, 0x1f, 0x4c, 0xfa, 0x47, 0x46, 0x96, 0x28, 0xfd, 0x0b, 0x67, + 0xd5, 0xaf, 0x7a, 0x2c, + 0x80, 0x19, 0x50, 0x0d, 0xe3, 0xb9, 0x40, 0xde, 0xc4, 0x8a, 0xeb, 0xe1, + 0x6a, 0x64, 0x54, 0x9c, + 0x96, 0x48, 0x71, 0x3d, 0x8b, 0x69, 0xa5, 0xe1, 0x98, 0x56, 0xa8, 0x1a, + 0xc6, 0xfc, 0xc1, 0xda, + 0x5a, 0x1c, 0x5d, 0x76, 0x49, 0xff, 0xc8, 0xc8, 0x92, 0xa3, 0x7f, 0xe9, + 0xa5, 0x8a, 0x69, 0x25, + 0xf4, 0x05, 0xe2, 0x7a, 0xa5, 0xb9, 0xde, 0x90, 0xf2, 0x5c, 0x20, 0x6f, + 0x32, 0xcd, 0x37, 0xab, + 0xe0, 0x4b, 0xf7, 0xc2, 0xf5, 0x25, 0xcc, 0x57, 0xf5, 0xb3, 0x9f, 0xa3, + 0xb0, 0xea, 0x8b, 0x71, + 0xcd, 0xe5, 0x94, 0xae, 0x09, 0xe5, 0x3f, 0xc8, 0xc8, 0x92, 0xa4, 0x7f, + 0xd9, 0xe3, 0xaa, 0xba, + 0x5e, 0xcf, 0x62, 0xd5, 0xe7, 0x6d, 0xbf, 0x51, 0xc2, 0x73, 0x01, 0x6d, + 0x81, 0xb8, 0x99, 0x7c, + 0x7e, 0xf0, 0xaa, 0x46, 0x46, 0xd6, 0xcf, 0x01, 0x0c, 0x84, 0xcc, 0x38, + 0xdd, 0xb1, 0x39, 0xf8, + 0xca, 0xde, 0x37, 0x3b, 0xae, 0x17, 0xeb, 0x5c, 0x4e, 0x58, 0x93, 0xa0, + 0x7e, 0x40, 0xd2, 0x3f, + 0x32, 0xb2, 0x24, 0xe9, 0x5f, 0x44, 0xa6, 0x55, 0x67, 0x3d, 0x6f, 0xea, + 0xca, 0x9b, 0xac, 0xcd, + 0x0f, 0xf7, 0xcd, 0x0f, 0xb6, 0x74, 0x67, 0x33, 0x84, 0xbf, 0xec, 0x66, + 0x3f, 0x03, 0x07, 0xbf, + 0x70, 0x5a, 0xa9, 0x95, 0x97, 0xd9, 0xba, 0x16, 0x76, 0xa6, 0x8c, 0xc2, + 0xb4, 0xba, 0xc0, 0x71, + 0xbe, 0xca, 0x81, 0x6b, 0x42, 0xfa, 0x47, 0x46, 0x96, 0x20, 0xfd, 0x8b, + 0xc0, 0xb4, 0x52, 0xd6, + 0xa0, 0x18, 0x59, 0xf0, 0x1b, 0x2f, 0x4a, 0xfb, 0x45, 0x05, 0x07, 0xbf, + 0x18, 0xe2, 0xab, 0x02, + 0x03, 0x21, 0xbb, 0x58, 0xf1, 0x60, 0xe0, 0xe7, 0x54, 0xc3, 0x78, 0x2e, + 0xee, 0xb8, 0x1e, 0x8e, + 0xdf, 0x8f, 0x9a, 0xcb, 0x19, 0xbc, 0x26, 0xa4, 0x7f, 0x64, 0x64, 0x89, + 0xd1, 0xbf, 0x28, 0x4c, + 0x2b, 0xa8, 0xd7, 0xc3, 0xd4, 0xa0, 0x70, 0xbf, 0x51, 0x3e, 0x3f, 0x18, + 0x7a, 0x2c, 0xac, 0x7e, + 0x93, 0x86, 0x95, 0x37, 0x31, 0x82, 0xe2, 0x79, 0x36, 0x07, 0x1f, 0xbe, + 0x76, 0x55, 0xa3, 0x1d, + 0xc0, 0x73, 0x81, 0xef, 0xe7, 0xbd, 0xc9, 0x58, 0xa6, 0xd5, 0x75, 0x38, + 0x5f, 0xa4, 0x7f, 0x64, + 0x64, 0x89, 0xd1, 0x3f, 0x2b, 0xae, 0x87, 0x63, 0x5a, 0x95, 0x70, 0x4c, + 0x2b, 0x7f, 0x5c, 0xcf, + 0x33, 0x3f, 0xd8, 0xd7, 0x63, 0x71, 0xb1, 0xb3, 0x97, 0x67, 0x3e, 0x2e, + 0x70, 0xee, 0xb5, 0x23, + 0xcd, 0x08, 0x88, 0xcb, 0xf1, 0xb8, 0x5e, 0x71, 0x9e, 0xab, 0x4b, 0x79, + 0x2e, 0x50, 0x97, 0x3c, + 0x2d, 0x34, 0xa1, 0x46, 0x46, 0x8b, 0x83, 0xdf, 0x1f, 0xba, 0x26, 0xa4, + 0x7f, 0x64, 0x64, 0xc9, + 0xd1, 0xbf, 0x98, 0x99, 0x56, 0x10, 0xd7, 0x0b, 0xeb, 0x7d, 0x83, 0xbc, + 0xc9, 0xa4, 0xd0, 0xe4, + 0xe7, 0x38, 0x4b, 0xcb, 0x4a, 0x67, 0xb9, 0x3a, 0x67, 0x3f, 0x33, 0x9f, + 0x17, 0x38, 0xf8, 0x7e, + 0xed, 0x74, 0xf7, 0xbe, 0x71, 0x9e, 0xcb, 0x34, 0xdf, 0x5c, 0xe7, 0xe0, + 0x97, 0xf7, 0x80, 0x8f, + 0xbf, 0x39, 0x93, 0xf2, 0x5c, 0x44, 0x5c, 0xef, 0xac, 0x7a, 0x50, 0x9e, + 0x5f, 0x81, 0xdf, 0x4f, + 0xfa, 0x47, 0x46, 0x96, 0x3c, 0xfd, 0xb3, 0x58, 0xf5, 0xf1, 0xd4, 0xeb, + 0x21, 0x39, 0x2d, 0xf0, + 0x9a, 0x4c, 0xaf, 0xd2, 0x03, 0x91, 0x37, 0xc9, 0xcd, 0xb3, 0x2d, 0xdd, + 0x35, 0xf3, 0xd2, 0xa7, + 0x97, 0x86, 0x24, 0xae, 0xe7, 0xe1, 0xe0, 0xbb, 0xb5, 0xd0, 0xe1, 0xb9, + 0xcc, 0xdc, 0x3c, 0x17, + 0x27, 0xd6, 0xb9, 0xaf, 0xec, 0x4d, 0x1e, 0x84, 0xd5, 0x30, 0x92, 0xfe, + 0x91, 0x91, 0x25, 0x46, + 0xff, 0x90, 0xac, 0x7a, 0x2c, 0xd3, 0x6a, 0x1b, 0xc3, 0xb4, 0x5a, 0xe7, + 0xb4, 0x18, 0xd0, 0x7b, + 0x9b, 0x1a, 0xa5, 0x3b, 0xc0, 0xc1, 0xf7, 0xe6, 0x35, 0xd2, 0x5d, 0x35, + 0xab, 0x5e, 0x33, 0x74, + 0x78, 0x7f, 0xcc, 0x3f, 0x0f, 0x8a, 0x35, 0xae, 0xf2, 0x26, 0xe9, 0x4e, + 0x14, 0x7e, 0x7f, 0x70, + 0x8d, 0x0c, 0xe9, 0x1f, 0x19, 0x59, 0x52, 0xf4, 0x2f, 0x12, 0xab, 0x7e, + 0x81, 0x9c, 0xab, 0x76, + 0x3d, 0x4e, 0x8b, 0x57, 0x73, 0x06, 0x99, 0x2e, 0xa6, 0x4f, 0x18, 0xea, + 0xf5, 0xaa, 0xf0, 0xfe, + 0xa4, 0x3c, 0x17, 0xc8, 0x9b, 0x6c, 0x1d, 0x40, 0x5c, 0x6f, 0x73, 0x9a, + 0x69, 0xca, 0xe6, 0x07, + 0xab, 0xd7, 0x84, 0xf4, 0x8f, 0x8c, 0xec, 0xc6, 0xeb, 0x5f, 0x4f, 0xe4, + 0x1a, 0xb4, 0x58, 0x99, + 0x56, 0xc0, 0x5f, 0xde, 0xc5, 0x70, 0x5a, 0x10, 0xb3, 0xe6, 0xec, 0xb3, + 0x62, 0xb6, 0x83, 0x9b, + 0xcb, 0xb9, 0xbb, 0x56, 0xc3, 0xe8, 0xe1, 0xb9, 0xd8, 0x79, 0x93, 0xa7, + 0xc2, 0xe7, 0x07, 0xab, + 0x63, 0x9d, 0xa4, 0x7f, 0x64, 0x64, 0x37, 0x5e, 0xff, 0x26, 0x5b, 0x2d, + 0x5e, 0x97, 0xbc, 0x74, + 0x7a, 0xcb, 0x42, 0xfd, 0x4b, 0x14, 0xab, 0x3e, 0x4e, 0x4e, 0x8b, 0xfd, + 0xca, 0x63, 0xbd, 0x83, + 0xd0, 0x4a, 0x25, 0xbf, 0x9f, 0xe7, 0x4d, 0x66, 0xc5, 0x06, 0xef, 0xd5, + 0x0b, 0x99, 0x1f, 0x0c, + 0x5a, 0x68, 0x71, 0xbe, 0x6a, 0xa4, 0x7f, 0x64, 0x64, 0x09, 0xd5, 0x3f, + 0xe0, 0x3f, 0xdf, 0x85, + 0x1c, 0x6c, 0x65, 0xaf, 0x7a, 0xb1, 0xb5, 0x2f, 0xe5, 0xb9, 0x58, 0x71, + 0x3d, 0x14, 0xab, 0x3e, + 0x4e, 0x4e, 0x8b, 0xe3, 0x8b, 0xea, 0xed, 0xf8, 0xe6, 0x72, 0xe6, 0x79, + 0x5c, 0x2f, 0x3d, 0xcc, + 0xb4, 0x1d, 0x9e, 0x4b, 0x00, 0x07, 0x3f, 0x7f, 0x52, 0x3e, 0x04, 0xce, + 0x57, 0x70, 0xbf, 0x09, + 0xe9, 0x1f, 0x19, 0xd9, 0x8d, 0xd7, 0xbf, 0x71, 0xa9, 0xe5, 0xf4, 0xed, + 0x7a, 0x73, 0x05, 0xb5, + 0xc2, 0x44, 0xf7, 0x72, 0xf0, 0x8f, 0xd2, 0x28, 0x56, 0x7d, 0xac, 0x9c, + 0x16, 0xc7, 0x17, 0xcd, + 0xb5, 0x31, 0x73, 0x39, 0x31, 0x4c, 0xab, 0x75, 0xce, 0x57, 0xf0, 0xfc, + 0x60, 0xde, 0x6f, 0x72, + 0x5b, 0xd6, 0x6f, 0x42, 0xfa, 0x47, 0x46, 0x96, 0x88, 0xfc, 0xc7, 0x51, + 0xaa, 0x0b, 0xf5, 0x2a, + 0xe5, 0xf3, 0xad, 0x03, 0x87, 0x77, 0xfa, 0x94, 0xcd, 0x7e, 0x76, 0xf5, + 0x58, 0x30, 0x8d, 0xc0, + 0xf3, 0x97, 0x71, 0x35, 0x32, 0xca, 0x59, 0x73, 0x76, 0xdd, 0xcd, 0x3c, + 0xd7, 0xc2, 0xce, 0xe5, + 0xcc, 0x5c, 0xa7, 0x86, 0xd1, 0xce, 0x9b, 0x2c, 0x4b, 0xf5, 0xd0, 0x7e, + 0x13, 0xe2, 0x5f, 0x91, + 0x91, 0x25, 0x24, 0xff, 0x2b, 0xb4, 0x08, 0xfc, 0x46, 0x8d, 0x9d, 0xa1, + 0xa0, 0x87, 0xa2, 0x78, + 0xba, 0x5d, 0x73, 0x78, 0xa7, 0x4e, 0xae, 0x60, 0xeb, 0x00, 0xfa, 0x6f, + 0x73, 0x63, 0x39, 0xcf, + 0x05, 0x1d, 0xd7, 0xc3, 0x72, 0x5a, 0xac, 0xb3, 0x62, 0x66, 0x99, 0x6b, + 0x95, 0xe2, 0x62, 0x5a, + 0x45, 0x98, 0xcb, 0x59, 0x5a, 0x48, 0xfa, 0x4d, 0x66, 0x97, 0x4d, 0xd2, + 0x3f, 0x32, 0xb2, 0x04, + 0xe8, 0x9f, 0x84, 0x55, 0xaf, 0xf5, 0x81, 0x77, 0xec, 0xeb, 0xdb, 0x65, + 0x7f, 0x42, 0x7c, 0x0c, + 0x72, 0x05, 0x41, 0x3c, 0x17, 0x3b, 0xae, 0x57, 0x5d, 0xa6, 0x50, 0xbe, + 0xaa, 0x8a, 0xd3, 0x62, + 0x6b, 0x91, 0xbe, 0xcc, 0x35, 0x95, 0x71, 0xbd, 0x48, 0x4c, 0x2b, 0xe4, + 0x5c, 0xce, 0x81, 0xab, + 0xdf, 0xc4, 0x3d, 0x3f, 0x78, 0x41, 0xfc, 0x67, 0x32, 0xb2, 0x64, 0xf8, + 0xbf, 0xca, 0xde, 0x37, + 0x23, 0xc5, 0x7c, 0xdf, 0xc2, 0x49, 0xb9, 0x06, 0xf9, 0x01, 0x27, 0x56, + 0x78, 0x57, 0xb0, 0x9f, + 0xfd, 0x1c, 0xfc, 0x42, 0x08, 0xd3, 0xca, 0x5d, 0x23, 0x83, 0xe1, 0xb4, + 0xd8, 0x79, 0x0d, 0xfd, + 0x38, 0xd7, 0x8c, 0x1e, 0xd7, 0x93, 0xd5, 0xc8, 0xe0, 0xe7, 0x72, 0x06, + 0x70, 0xbe, 0x44, 0xbf, + 0xc9, 0x80, 0xe6, 0x1f, 0x91, 0x91, 0x25, 0x42, 0xff, 0x90, 0x33, 0x28, + 0x35, 0xc1, 0x8c, 0xaa, + 0xa5, 0x47, 0x7a, 0xbb, 0xe0, 0xe6, 0x9d, 0xfa, 0x7a, 0x2c, 0x78, 0x0d, + 0xca, 0x24, 0xd5, 0x94, + 0xcd, 0x0f, 0x5e, 0xf9, 0xaa, 0xe5, 0x3d, 0x85, 0xaf, 0x2a, 0xfe, 0xdb, + 0x51, 0xca, 0x80, 0x7e, + 0xb8, 0x4c, 0x4c, 0xbd, 0xc9, 0xc5, 0x58, 0xe6, 0x72, 0x52, 0xfe, 0x83, + 0x8c, 0x2c, 0x11, 0xfa, + 0x67, 0xcf, 0xa0, 0x8c, 0x5a, 0xaf, 0xc7, 0x7c, 0xc4, 0xec, 0x38, 0xdf, + 0xf2, 0xcc, 0x89, 0xb3, + 0xf2, 0xa6, 0x30, 0x33, 0x53, 0x36, 0x3f, 0x78, 0xe5, 0xab, 0x86, 0xf7, + 0x73, 0x00, 0x03, 0x21, + 0x35, 0xd0, 0xba, 0x5a, 0x3f, 0xd5, 0x05, 0x2e, 0x82, 0xea, 0xfd, 0x71, + 0x56, 0xfd, 0x29, 0xae, + 0x46, 0xa6, 0x88, 0xe8, 0x7d, 0x0b, 0x5f, 0x13, 0xd2, 0x3f, 0x32, 0xb2, + 0x24, 0xe8, 0x9f, 0x06, + 0xf5, 0x7a, 0x57, 0x65, 0x5a, 0xd9, 0x67, 0x43, 0x2b, 0x6f, 0x52, 0x72, + 0xf3, 0x4e, 0x5d, 0x3d, + 0x16, 0x6b, 0x1c, 0xfc, 0x89, 0xba, 0x46, 0x86, 0x73, 0x4f, 0x81, 0x07, + 0x33, 0xcf, 0xb6, 0x38, + 0x03, 0x3a, 0x84, 0xe7, 0x22, 0xe2, 0x7a, 0x15, 0x09, 0xab, 0x3e, 0x20, + 0xae, 0xa7, 0x98, 0xcb, + 0xa9, 0x5e, 0x13, 0xd2, 0x3f, 0x32, 0xb2, 0x44, 0xe8, 0x1f, 0xd4, 0xeb, + 0x21, 0xfc, 0xc6, 0x28, + 0x71, 0xbd, 0xcd, 0xc5, 0x66, 0xdd, 0x9f, 0x37, 0xb1, 0x7b, 0x2c, 0x78, + 0xde, 0x64, 0xbe, 0x5d, + 0xb7, 0x5e, 0x53, 0x7e, 0xfe, 0x9b, 0xaf, 0xd8, 0xcf, 0xf0, 0xa7, 0xc3, + 0x8e, 0xe6, 0x3c, 0x97, + 0x74, 0xdb, 0x5f, 0x97, 0x2c, 0xe2, 0x7a, 0xd7, 0x61, 0x5a, 0xb9, 0x7c, + 0x69, 0xe5, 0x5c, 0x4e, + 0xd2, 0x3f, 0x32, 0xb2, 0x24, 0xe8, 0x5f, 0x44, 0xa6, 0x95, 0xa2, 0x06, + 0x25, 0xcf, 0x6b, 0x50, + 0x2c, 0x5d, 0xe3, 0x79, 0x93, 0xbc, 0x8f, 0x77, 0x2a, 0x7a, 0x2c, 0x2a, + 0x7b, 0xbb, 0xaa, 0x7e, + 0x13, 0xe8, 0x4b, 0x66, 0xbe, 0x6f, 0x7a, 0xa6, 0xb7, 0x73, 0x27, 0x7a, + 0xb3, 0x2a, 0xe5, 0xb9, + 0x30, 0xff, 0x9a, 0x7d, 0x3f, 0xc4, 0xf5, 0x94, 0x35, 0x32, 0xc8, 0x58, + 0xa7, 0x7a, 0x4d, 0x48, + 0xff, 0xc8, 0xc8, 0x92, 0xa0, 0x7f, 0x22, 0xae, 0x87, 0xab, 0x07, 0x29, + 0xe0, 0x99, 0x56, 0x86, + 0x5f, 0x3f, 0xad, 0xba, 0x62, 0x0f, 0x83, 0xc0, 0xdd, 0x6f, 0xa2, 0x8f, + 0x52, 0x6d, 0x2d, 0xc0, + 0xbf, 0x85, 0xde, 0xdf, 0xdc, 0x3c, 0xd5, 0x0e, 0x66, 0x47, 0x5b, 0x75, + 0xc9, 0xcb, 0xc2, 0x21, + 0xaf, 0x61, 0x1c, 0x6b, 0xad, 0xd0, 0x38, 0x21, 0x67, 0x5a, 0xa9, 0x63, + 0x9d, 0x59, 0xe5, 0x9a, + 0x90, 0xfe, 0x91, 0x91, 0x25, 0x41, 0xff, 0x22, 0x31, 0xad, 0x06, 0x98, + 0xde, 0x37, 0x05, 0xa7, + 0xa5, 0x97, 0xe2, 0x67, 0xb5, 0x0a, 0x3b, 0xff, 0xb9, 0xf3, 0x26, 0xa5, + 0xd3, 0x5c, 0x1d, 0xd8, + 0xcf, 0xd9, 0x69, 0xba, 0x0d, 0x1c, 0xfc, 0x95, 0x2f, 0x9a, 0x6b, 0xe7, + 0xa6, 0x5a, 0x7b, 0x15, + 0x6b, 0x0c, 0xe0, 0xb9, 0xdc, 0xb5, 0xf2, 0x2e, 0x30, 0x67, 0x4e, 0xc2, + 0x73, 0xc1, 0xc5, 0xf5, + 0xd4, 0xb1, 0x4e, 0xd2, 0x3f, 0x32, 0xb2, 0xc4, 0xe8, 0x1f, 0x3a, 0xae, + 0x57, 0xc5, 0xcc, 0x55, + 0xc3, 0x31, 0xad, 0x38, 0x47, 0x0b, 0x7c, 0xd5, 0x55, 0xde, 0x64, 0xbb, + 0xc6, 0xf9, 0xf7, 0xa7, + 0x56, 0xbc, 0xef, 0x78, 0xc5, 0x7f, 0x86, 0xde, 0x37, 0x7d, 0xac, 0x05, + 0xea, 0xee, 0x8a, 0x83, + 0xbf, 0x75, 0x58, 0x55, 0xf0, 0x5c, 0xb8, 0x3f, 0x3d, 0x8d, 0xc0, 0xef, + 0x0f, 0x5d, 0x13, 0xd2, + 0x3f, 0x32, 0xb2, 0x9b, 0xaf, 0x7f, 0x51, 0xe2, 0x7a, 0x88, 0xb9, 0x6a, + 0xcb, 0xab, 0xcf, 0x55, + 0xd3, 0xfa, 0x5a, 0x37, 0x35, 0x4e, 0x8b, 0x99, 0x97, 0xa7, 0x8e, 0xfe, + 0x19, 0x99, 0x45, 0xae, + 0x95, 0x1d, 0x2a, 0xea, 0xa4, 0xf9, 0xdc, 0xb7, 0xca, 0x5b, 0x0a, 0xb3, + 0x42, 0xbd, 0x14, 0x3c, + 0x73, 0x53, 0x70, 0xf0, 0x17, 0xb8, 0xde, 0x64, 0x8b, 0xf3, 0xd5, 0x22, + 0xfd, 0x23, 0x23, 0x4b, + 0xb0, 0xfe, 0x61, 0xfb, 0x70, 0xa5, 0x71, 0x3d, 0xaf, 0x89, 0xde, 0xb7, + 0x6b, 0x73, 0x5a, 0x78, + 0xde, 0xc3, 0xd6, 0xa2, 0xec, 0x32, 0xd7, 0x4c, 0x0f, 0x14, 0xfa, 0x67, + 0xc5, 0xf5, 0xec, 0xef, + 0x09, 0xe2, 0xb9, 0x40, 0xac, 0xb1, 0x7c, 0x0b, 0x38, 0x5f, 0xa5, 0x7d, + 0xe9, 0xfc, 0x60, 0x74, + 0xac, 0x93, 0xf4, 0x8f, 0x8c, 0xec, 0xc6, 0xeb, 0x9f, 0xa5, 0x45, 0xaa, + 0x7a, 0x10, 0x3c, 0xd3, + 0xaa, 0x7a, 0xa0, 0xe4, 0xb4, 0x1c, 0xe1, 0x38, 0x2d, 0xf6, 0x59, 0x11, + 0x7a, 0xdf, 0xd2, 0xaa, + 0xf7, 0x27, 0x9b, 0xcb, 0xe9, 0xe6, 0xe0, 0x5f, 0x54, 0xf6, 0xab, 0xaa, + 0xf9, 0xc1, 0xe8, 0x58, + 0x27, 0xe9, 0x1f, 0x19, 0xd9, 0x8d, 0xd7, 0xbf, 0x61, 0xbe, 0x03, 0xb5, + 0x28, 0xfa, 0x80, 0xe7, + 0x17, 0x8c, 0xd0, 0xb8, 0xde, 0x69, 0x5e, 0xe9, 0x37, 0x16, 0x31, 0x4c, + 0x2b, 0x3e, 0xf7, 0x4d, + 0xcd, 0x69, 0x11, 0x5a, 0xa4, 0xf1, 0xde, 0xb7, 0xd4, 0x51, 0xf8, 0xd7, + 0x62, 0x7a, 0xdf, 0x20, + 0xd6, 0x58, 0x3c, 0xdf, 0xdd, 0x87, 0xb8, 0xa0, 0x74, 0x7e, 0x30, 0xe4, + 0x4d, 0x86, 0xd9, 0x90, + 0xb9, 0x6f, 0xa4, 0x7f, 0x64, 0x64, 0x89, 0xd1, 0xbf, 0x79, 0xb5, 0x01, + 0x7e, 0xe1, 0xce, 0xb9, + 0x9c, 0xe7, 0xb2, 0x8a, 0xeb, 0x21, 0x98, 0x56, 0xb7, 0x76, 0xf7, 0x10, + 0x73, 0xd5, 0x50, 0x9c, + 0x16, 0xa1, 0x7f, 0x29, 0x83, 0xf7, 0xbe, 0xc5, 0xc2, 0xb4, 0xda, 0x10, + 0xb1, 0x4e, 0xe0, 0x7c, + 0xf9, 0x79, 0x2e, 0x9e, 0xbc, 0x49, 0x89, 0x73, 0xbe, 0xf4, 0x51, 0x58, + 0xbf, 0x09, 0xe9, 0x1f, + 0x19, 0xd9, 0x8d, 0xd7, 0xbf, 0xe9, 0x4e, 0x73, 0xf7, 0xae, 0x77, 0x7e, + 0x38, 0xf4, 0x58, 0x6c, + 0xce, 0xbc, 0x75, 0xc9, 0xfa, 0x71, 0x2c, 0x71, 0x3d, 0xdb, 0x57, 0x45, + 0x71, 0x5a, 0xc4, 0x59, + 0x31, 0xdd, 0x85, 0xde, 0xb7, 0x0d, 0x4c, 0xbd, 0x1e, 0x96, 0x69, 0xe5, + 0xed, 0x7d, 0x13, 0x3c, + 0x97, 0x35, 0x0e, 0xfe, 0xee, 0x2a, 0x6f, 0x32, 0x5d, 0x9b, 0x1f, 0x4c, + 0xfa, 0x47, 0x46, 0x96, + 0x04, 0xfd, 0x9b, 0x6c, 0xf1, 0xb8, 0x59, 0x6e, 0x2e, 0x38, 0x7f, 0xde, + 0x1e, 0x8b, 0xb2, 0xc3, + 0xc1, 0x87, 0xb9, 0x6a, 0xdb, 0x4a, 0xfe, 0x72, 0x16, 0xd7, 0x5b, 0x86, + 0xe4, 0xb4, 0x88, 0xb3, + 0x22, 0xd3, 0xa6, 0x45, 0x46, 0xc9, 0x88, 0xc6, 0xd6, 0x30, 0x86, 0xf3, + 0xfb, 0x45, 0xde, 0xa4, + 0x70, 0xbc, 0x53, 0xdb, 0xbd, 0x53, 0x79, 0x4b, 0x68, 0xbf, 0x89, 0x79, + 0x69, 0x90, 0xfe, 0x91, + 0x91, 0x25, 0xe0, 0xfc, 0x67, 0xd7, 0x83, 0xf4, 0xac, 0x1e, 0x8d, 0xa0, + 0x1e, 0x0b, 0x76, 0xae, + 0xdb, 0x39, 0xd9, 0xac, 0x49, 0x79, 0x2e, 0x76, 0x0d, 0x0a, 0x86, 0xbf, + 0xbc, 0xc4, 0xf9, 0xaa, + 0x5c, 0x91, 0x78, 0xef, 0x47, 0x5a, 0xa5, 0x7f, 0xd8, 0xb9, 0x9c, 0x11, + 0x38, 0x5f, 0x85, 0x03, + 0xf9, 0xfc, 0xe0, 0x9d, 0xfd, 0xad, 0xc9, 0x65, 0x8b, 0xf4, 0x8f, 0x8c, + 0xec, 0x86, 0xeb, 0xdf, + 0xac, 0xd2, 0x08, 0x8c, 0xeb, 0xd9, 0x3d, 0x16, 0x9c, 0xf3, 0x57, 0x11, + 0x73, 0x30, 0xee, 0xda, + 0x33, 0x41, 0x02, 0x78, 0x2e, 0xbc, 0x46, 0x66, 0xb3, 0x8d, 0xe3, 0x2f, + 0x33, 0x5f, 0x75, 0xa9, + 0xf2, 0x55, 0x35, 0xa1, 0x7f, 0x13, 0xa6, 0x7f, 0xb3, 0x54, 0x5b, 0xf5, + 0xb5, 0xf8, 0xb9, 0x9c, + 0xd1, 0x39, 0x5f, 0x81, 0xfd, 0x26, 0xc4, 0x7f, 0x26, 0x23, 0x4b, 0x44, + 0xfe, 0x43, 0x15, 0xd7, + 0xd3, 0x06, 0x7a, 0x1b, 0xce, 0x7f, 0x5b, 0xa7, 0x5b, 0x35, 0xa7, 0x5f, + 0xcd, 0xe6, 0xb9, 0xb8, + 0xf3, 0x26, 0xd3, 0x52, 0x63, 0xf7, 0x02, 0x33, 0xa3, 0x1c, 0xc1, 0x69, + 0xb1, 0xf4, 0xcf, 0xdf, + 0xfb, 0x16, 0x21, 0xae, 0xb7, 0x6e, 0xc8, 0xde, 0xb7, 0xb0, 0xb9, 0x9c, + 0x4e, 0xde, 0x64, 0x7c, + 0xd9, 0x26, 0xfd, 0x23, 0x23, 0xbb, 0xe9, 0xfa, 0xb7, 0xdb, 0xd8, 0x99, + 0x6e, 0xa0, 0xea, 0xf5, + 0xc0, 0x6f, 0x84, 0x5c, 0x81, 0xcd, 0xf9, 0xab, 0xf8, 0x7b, 0x2c, 0xce, + 0xb6, 0x0f, 0xa0, 0xf7, + 0x57, 0xb0, 0xa9, 0x34, 0x29, 0x4b, 0x1f, 0xc5, 0x5f, 0x3e, 0x4a, 0x71, + 0xfd, 0x4b, 0xcf, 0xe4, + 0xbd, 0x6f, 0xfe, 0xf7, 0xf7, 0x60, 0xe7, 0x72, 0x52, 0xfe, 0x83, 0x8c, + 0xec, 0xc6, 0xeb, 0xdf, + 0x62, 0xb7, 0x71, 0xb5, 0xb9, 0x6a, 0x76, 0x8f, 0x85, 0x7f, 0x3e, 0x92, + 0x37, 0x6f, 0x92, 0xf1, + 0xf7, 0x58, 0x60, 0x67, 0x94, 0xf7, 0xd3, 0x4c, 0x6b, 0x53, 0xdd, 0xb4, + 0xe8, 0x7d, 0x0b, 0xd7, + 0x3f, 0x24, 0xd3, 0x2a, 0xde, 0xb9, 0x9c, 0xa4, 0x7f, 0x64, 0x64, 0x49, + 0xd0, 0xbf, 0x02, 0x6a, + 0xae, 0x5a, 0x48, 0xef, 0x9b, 0x95, 0x37, 0xd9, 0x3c, 0xab, 0x1e, 0x80, + 0x4e, 0xba, 0x73, 0x05, + 0x95, 0x8b, 0x9d, 0x3d, 0x0f, 0x07, 0xff, 0x28, 0xd5, 0x05, 0x5f, 0x55, + 0x55, 0x23, 0xc3, 0xf3, + 0xbe, 0xc0, 0x7e, 0x66, 0x17, 0xe7, 0xc1, 0x0c, 0xb4, 0xae, 0xb4, 0x16, + 0x4f, 0xc9, 0xaa, 0x0f, + 0x8e, 0xeb, 0xc9, 0x7c, 0x69, 0xdc, 0x5c, 0x4e, 0xca, 0xff, 0x92, 0x91, + 0x25, 0x41, 0xff, 0xd4, + 0xf5, 0x7a, 0x08, 0xa6, 0x95, 0x55, 0x83, 0x52, 0x5e, 0x64, 0xea, 0x19, + 0x27, 0x6f, 0xe2, 0xea, + 0xb1, 0xb0, 0xf3, 0x26, 0x8b, 0x7c, 0xbd, 0x7c, 0xbb, 0xca, 0xf4, 0x2f, + 0xbc, 0xdf, 0x44, 0x1b, + 0xe9, 0x5c, 0xff, 0x6c, 0xf6, 0x33, 0xfc, 0x3d, 0x88, 0xe7, 0x12, 0x39, + 0xae, 0x17, 0x17, 0xe7, + 0x8b, 0xf4, 0x8f, 0x8c, 0x2c, 0x11, 0xf1, 0x3f, 0x25, 0xd3, 0x6a, 0x86, + 0x63, 0x5a, 0x15, 0x2f, + 0x78, 0x5c, 0xaf, 0xb5, 0xca, 0x9b, 0x42, 0xae, 0x40, 0xb0, 0xa9, 0x56, + 0x79, 0x93, 0x2a, 0xaf, + 0xab, 0x0b, 0x9b, 0x1f, 0x6c, 0xd7, 0xbd, 0x68, 0xcc, 0xff, 0xe5, 0xe7, + 0x3f, 0x8b, 0x83, 0xef, + 0xe3, 0xb9, 0x38, 0x1c, 0xfc, 0xd4, 0x2c, 0x7e, 0x7e, 0xbf, 0x72, 0x4d, + 0x7a, 0xa4, 0x7f, 0x64, + 0x64, 0x49, 0xa8, 0x7f, 0x51, 0xd7, 0xeb, 0x55, 0xea, 0x57, 0x65, 0x5a, + 0xd9, 0xda, 0xc3, 0x7b, + 0x2c, 0xa6, 0x85, 0x06, 0xe4, 0x4d, 0x76, 0xd7, 0xd9, 0x54, 0x7c, 0x7e, + 0x70, 0xba, 0xaf, 0x75, + 0xed, 0x3e, 0xb7, 0xd4, 0x24, 0xd7, 0x76, 0xf7, 0xbe, 0x01, 0x0f, 0x86, + 0xf3, 0x5c, 0xce, 0xbd, + 0x3c, 0x17, 0xa8, 0x4b, 0xe6, 0x3f, 0x93, 0xe9, 0x9f, 0x55, 0x97, 0xd8, + 0x0d, 0x8b, 0xeb, 0x15, + 0x31, 0xb1, 0xce, 0x3b, 0xca, 0xb9, 0x9c, 0x66, 0xe6, 0xe8, 0xb2, 0x4b, + 0xfa, 0x47, 0x46, 0x76, + 0xc3, 0xf5, 0x6f, 0xb2, 0xd5, 0xda, 0x50, 0x31, 0xad, 0x50, 0xbd, 0x6f, + 0x29, 0xee, 0x37, 0xe6, + 0x55, 0x71, 0xbd, 0x71, 0xa9, 0x09, 0xb1, 0xc4, 0xb5, 0xbc, 0x09, 0xd3, + 0xb2, 0xe2, 0x89, 0xde, + 0xc8, 0xce, 0x32, 0xad, 0xf4, 0x30, 0xd5, 0x49, 0xcd, 0x98, 0xfe, 0xf5, + 0x03, 0x7a, 0xdf, 0x7c, + 0x3c, 0x97, 0xd5, 0x4c, 0x91, 0x8a, 0x9c, 0xe7, 0x12, 0x25, 0xae, 0x87, + 0x98, 0xcb, 0xc9, 0xd7, + 0xa4, 0x4f, 0xf3, 0xcf, 0xc9, 0xc8, 0x6e, 0xbc, 0xfe, 0x8d, 0x8a, 0x6d, + 0xd5, 0x57, 0x41, 0xbd, + 0x1e, 0x96, 0x69, 0x85, 0x9a, 0xab, 0x66, 0xfb, 0xaa, 0xbe, 0x7e, 0x93, + 0xd2, 0xb9, 0xc5, 0x7f, + 0x3e, 0x11, 0x79, 0x0f, 0x9e, 0x03, 0x59, 0xca, 0x7b, 0xdf, 0xec, 0xba, + 0xe4, 0xe2, 0x79, 0x75, + 0x1f, 0x72, 0x2d, 0x52, 0x9e, 0x0b, 0xf8, 0xd7, 0x58, 0xce, 0x17, 0x32, + 0xd6, 0x99, 0x1f, 0x92, + 0xfe, 0x91, 0x91, 0xdd, 0x78, 0xfd, 0x1b, 0xe6, 0x3b, 0x98, 0xb8, 0x1e, + 0x8a, 0x69, 0x75, 0xa7, + 0x72, 0xf5, 0xb9, 0x6a, 0x4c, 0xcb, 0xe0, 0xdc, 0x97, 0x9e, 0x66, 0xdb, + 0xfa, 0x52, 0x68, 0x20, + 0xcf, 0x81, 0x2c, 0x94, 0xbd, 0x6f, 0x26, 0x8f, 0xeb, 0xcd, 0x33, 0x75, + 0xc1, 0xc1, 0x0f, 0xe2, + 0xb9, 0x6c, 0x71, 0x9e, 0x03, 0x70, 0xbe, 0xb2, 0x03, 0x57, 0xbf, 0x4a, + 0x70, 0x8d, 0x0c, 0x22, + 0xd6, 0xa9, 0x19, 0xc5, 0x31, 0xf5, 0xbf, 0x91, 0x91, 0xdd, 0x78, 0xfd, + 0xeb, 0xeb, 0x9d, 0x6b, + 0xc4, 0xf5, 0x3c, 0x35, 0x28, 0xd0, 0xfb, 0xa6, 0xc5, 0xc1, 0x69, 0x39, + 0x12, 0x79, 0x0f, 0xde, + 0xfb, 0xab, 0xea, 0x7d, 0x5b, 0x67, 0xd5, 0x7b, 0x62, 0x8d, 0x6e, 0x0e, + 0x3e, 0xf8, 0xd8, 0x0e, + 0x07, 0x3f, 0x60, 0x7e, 0xf0, 0xaa, 0x46, 0x06, 0x11, 0xeb, 0xa4, 0xfe, + 0x5f, 0x32, 0xb2, 0x9b, + 0xaf, 0x7f, 0xbd, 0x94, 0xa1, 0xd2, 0x22, 0x4c, 0xbd, 0x1e, 0x96, 0x69, + 0x85, 0xe2, 0xb4, 0x58, + 0xcc, 0x67, 0xc8, 0x81, 0x60, 0x7b, 0xdf, 0x82, 0xe3, 0x7a, 0x2e, 0x0e, + 0x3e, 0xc4, 0x1a, 0x9f, + 0x0a, 0xe3, 0xb9, 0x6c, 0x44, 0xe2, 0x7c, 0xed, 0x4c, 0x2f, 0x9b, 0xa4, + 0x7f, 0x64, 0x64, 0x37, + 0x5c, 0xff, 0x98, 0xdf, 0x2a, 0xe5, 0xb9, 0x44, 0x89, 0xeb, 0x21, 0x99, + 0x56, 0x9b, 0xc8, 0xde, + 0x37, 0xc8, 0xfb, 0x42, 0x0e, 0x44, 0x9f, 0xa8, 0x7a, 0xdf, 0x22, 0xcc, + 0xe5, 0xbc, 0x28, 0xed, + 0x4b, 0x79, 0x2e, 0x3c, 0x6f, 0x92, 0x69, 0x01, 0xe7, 0x6b, 0x67, 0xaa, + 0xe2, 0x7c, 0xb1, 0x35, + 0x99, 0x11, 0xff, 0x80, 0x8c, 0x2c, 0x09, 0xf5, 0x2f, 0x52, 0x9e, 0x8b, + 0x2b, 0xae, 0x97, 0x8a, + 0x85, 0xbf, 0x8c, 0xe4, 0xb4, 0x40, 0xde, 0xf7, 0x58, 0x6f, 0xc2, 0xdc, + 0x4b, 0x75, 0xef, 0x9b, + 0x60, 0x5a, 0xa1, 0x6a, 0x18, 0xad, 0xb8, 0xa3, 0x87, 0xe7, 0x72, 0xcb, + 0xcb, 0xc1, 0x87, 0xb3, + 0xe4, 0xf6, 0x71, 0xe1, 0x50, 0x36, 0x3f, 0xd8, 0xa9, 0x91, 0x99, 0x93, + 0xfe, 0x91, 0x91, 0xdd, + 0x78, 0xfd, 0x03, 0xfe, 0xbd, 0x8c, 0xe7, 0x02, 0xfb, 0x7f, 0xe4, 0xb0, + 0xea, 0x43, 0x8d, 0x33, + 0xad, 0xae, 0xc6, 0x5f, 0x0e, 0x88, 0x25, 0x42, 0xde, 0x37, 0xdb, 0xca, + 0x2e, 0x73, 0xad, 0x8c, + 0x72, 0xee, 0x5b, 0x94, 0xb9, 0x9c, 0xeb, 0xbd, 0x6f, 0x1e, 0x0e, 0xfe, + 0xed, 0xaa, 0x72, 0x7e, + 0xb0, 0x55, 0x23, 0xd3, 0xde, 0x25, 0xfd, 0x23, 0x23, 0xbb, 0xf9, 0xfa, + 0xc7, 0xfc, 0xdb, 0x20, + 0x9e, 0x8b, 0xcd, 0xc1, 0x07, 0x7f, 0x11, 0xe2, 0x7a, 0x21, 0x3c, 0x17, + 0x11, 0xd7, 0xe3, 0x4c, + 0xab, 0x14, 0xaa, 0x46, 0x46, 0xc9, 0x69, 0x19, 0x65, 0x79, 0xde, 0x17, + 0x33, 0xf7, 0x8d, 0xf7, + 0xbe, 0xc5, 0x33, 0x97, 0xd3, 0x48, 0x0d, 0x2d, 0xce, 0xd7, 0x59, 0xc8, + 0xfc, 0xe0, 0x41, 0x0a, + 0x38, 0x5f, 0x4d, 0xe2, 0xff, 0x91, 0x91, 0x25, 0x40, 0xff, 0xd6, 0x72, + 0x05, 0xeb, 0x1c, 0xfc, + 0xdd, 0x3b, 0x21, 0x3c, 0x97, 0x28, 0x71, 0x3d, 0x24, 0xa7, 0x45, 0x30, + 0x9f, 0x53, 0x6d, 0x1d, + 0x31, 0xf7, 0x0d, 0xc9, 0xb4, 0xe2, 0x35, 0x32, 0xca, 0xb8, 0x9e, 0xc5, + 0xc7, 0xcf, 0xf4, 0xb5, + 0x8e, 0x6c, 0x7e, 0x30, 0xcf, 0x9b, 0x9c, 0x6e, 0xd5, 0x48, 0xff, 0xc8, + 0xc8, 0x92, 0xa4, 0x7f, + 0xde, 0xfc, 0xab, 0x5d, 0x97, 0xbc, 0x75, 0x51, 0xdd, 0xdf, 0x75, 0xcd, + 0xcc, 0xe5, 0xfb, 0x1f, + 0x72, 0x05, 0x13, 0x37, 0x07, 0x1f, 0x5b, 0x23, 0x93, 0x47, 0x71, 0x5a, + 0x34, 0x60, 0x9e, 0xce, + 0x52, 0x6d, 0x5e, 0x03, 0xa8, 0xf0, 0x6b, 0x05, 0xd3, 0x2a, 0x1f, 0x0f, + 0xd3, 0x2a, 0x88, 0xf3, + 0xe5, 0xee, 0x37, 0x71, 0xe5, 0x4d, 0x48, 0xff, 0xc8, 0xc8, 0x12, 0xaa, + 0x7f, 0x6e, 0xbf, 0xf1, + 0xb8, 0x72, 0x58, 0x3d, 0x2b, 0x1c, 0x14, 0x64, 0x3c, 0x17, 0x2b, 0x6f, + 0x02, 0x73, 0x2f, 0x55, + 0x71, 0x3d, 0x6d, 0xe5, 0xab, 0x9a, 0xe1, 0xb9, 0x0a, 0xa6, 0x7f, 0x13, + 0xad, 0x0d, 0x39, 0x90, + 0x8d, 0xb8, 0x98, 0x56, 0xec, 0xfd, 0x5d, 0x97, 0xf3, 0xe5, 0xe9, 0x37, + 0xa1, 0xf8, 0x1f, 0x19, + 0x59, 0xe2, 0xf5, 0x2f, 0x0f, 0x4c, 0xab, 0x99, 0xe0, 0x43, 0x07, 0xf3, + 0x5c, 0x76, 0x79, 0xac, + 0x10, 0xfc, 0xc6, 0xd2, 0x22, 0x57, 0xcf, 0x86, 0xcc, 0xcc, 0xc5, 0xf2, + 0x97, 0x21, 0xef, 0xab, + 0x8f, 0x36, 0x42, 0x7b, 0xdf, 0xdc, 0x71, 0x3d, 0x19, 0xab, 0xde, 0x5f, + 0x23, 0x83, 0xac, 0x61, + 0xc4, 0x71, 0xbe, 0x66, 0x54, 0xff, 0x47, 0x46, 0x96, 0x70, 0xfd, 0x93, + 0xb1, 0xea, 0x0d, 0x0f, + 0x07, 0xff, 0x4e, 0x75, 0x8d, 0xe7, 0xe2, 0x9f, 0x1f, 0xbc, 0xaa, 0x91, + 0xc9, 0x29, 0x39, 0x5a, + 0x19, 0x2b, 0xef, 0x6b, 0xf5, 0xbe, 0x85, 0x9d, 0xff, 0x70, 0xac, 0x7a, + 0x9b, 0x69, 0xd5, 0x47, + 0x71, 0xbe, 0xd6, 0xf4, 0xef, 0x83, 0x83, 0xb7, 0x1b, 0xef, 0x1d, 0xbc, + 0xd7, 0x78, 0xcf, 0xe0, + 0x3d, 0xe6, 0x7b, 0xd8, 0x9f, 0xef, 0x1d, 0xfe, 0x90, 0xf1, 0x43, 0xc3, + 0x8f, 0x1b, 0x1f, 0x87, + 0xbf, 0xaf, 0x5d, 0xef, 0x30, 0x3e, 0xd8, 0x43, 0xcc, 0x75, 0x27, 0x23, + 0x23, 0x7b, 0x30, 0xd6, + 0xfb, 0xa0, 0xf1, 0x76, 0xbe, 0x37, 0xdf, 0xc3, 0xf7, 0xf0, 0x6a, 0xaf, + 0x06, 0xef, 0xe1, 0x77, + 0x0c, 0x3e, 0x68, 0xd8, 0x71, 0x40, 0x75, 0x5c, 0x4f, 0x33, 0xd2, 0x93, + 0x62, 0x73, 0x97, 0xe9, + 0xde, 0x3a, 0x9b, 0xca, 0x9b, 0x37, 0xc9, 0xa0, 0x66, 0x94, 0x8b, 0xde, + 0x0f, 0xc8, 0xfb, 0x82, + 0xff, 0x9b, 0x01, 0xf6, 0xf3, 0x30, 0xd5, 0xd5, 0x8e, 0x34, 0x63, 0x3d, + 0x6e, 0x78, 0x8d, 0xb8, + 0x5e, 0x80, 0xf1, 0xb9, 0x9c, 0x01, 0xbd, 0x6f, 0x93, 0xd9, 0x2b, 0xcd, + 0x37, 0xcc, 0xdf, 0x60, + 0x5d, 0xdf, 0x69, 0x7e, 0x67, 0xd8, 0xb5, 0x78, 0xb9, 0x39, 0x1a, 0xd0, + 0x67, 0x8e, 0x8c, 0xec, + 0xa1, 0xb1, 0xc1, 0xc4, 0x7c, 0xe5, 0xe2, 0x0d, 0xce, 0x1e, 0xfe, 0x4e, + 0xc5, 0x1e, 0x7e, 0xf9, + 0x6c, 0x64, 0xf9, 0x8d, 0xa2, 0xf7, 0x4d, 0x59, 0xaf, 0x37, 0x2a, 0xb6, + 0x39, 0x7f, 0x39, 0x64, + 0x7e, 0x30, 0x70, 0xf0, 0x21, 0x6e, 0x56, 0x3e, 0xce, 0x1d, 0x86, 0xf6, + 0x9b, 0xd8, 0xbd, 0x6f, + 0x47, 0x1b, 0x06, 0xe7, 0x3e, 0x5b, 0xec, 0x67, 0x7d, 0xa1, 0xb7, 0x3c, + 0x3c, 0x17, 0xf8, 0x7e, + 0xf6, 0xb5, 0x71, 0x32, 0xad, 0xb2, 0xc7, 0x55, 0xa6, 0xcf, 0xeb, 0x35, + 0x32, 0xb7, 0x27, 0xff, + 0xce, 0x6c, 0x4e, 0x9b, 0x70, 0x19, 0x8d, 0x69, 0xc3, 0xb4, 0x2e, 0xa3, + 0x3e, 0xad, 0x9b, 0xf6, + 0x75, 0x38, 0x3d, 0xb4, 0xae, 0x37, 0x99, 0xe7, 0x7d, 0xfa, 0xcc, 0x91, + 0x91, 0x3d, 0x34, 0xd6, + 0xbf, 0x6d, 0xfe, 0xbb, 0x59, 0xd3, 0xda, 0xc3, 0x0d, 0xd7, 0x1e, 0xae, + 0xbb, 0xf6, 0xf0, 0xa1, + 0xb3, 0x87, 0xdf, 0x34, 0x39, 0xb7, 0xf4, 0x0f, 0xd7, 0xfb, 0xa6, 0x4d, + 0x03, 0x7a, 0xdf, 0x3c, + 0xf3, 0x83, 0xad, 0xbc, 0x09, 0x3f, 0x17, 0x86, 0xcc, 0x0f, 0x16, 0xdf, + 0xe7, 0x30, 0x4f, 0x61, + 0xee, 0x79, 0x66, 0x9a, 0xe5, 0xec, 0x67, 0xe0, 0x62, 0xad, 0xd5, 0x25, + 0x8f, 0x32, 0x6d, 0x5c, + 0x6f, 0xf2, 0x56, 0x13, 0x3b, 0x97, 0x33, 0x88, 0xf3, 0xf5, 0xd4, 0xf8, + 0xbb, 0xcc, 0xee, 0xa4, + 0x63, 0x76, 0xa6, 0x1d, 0x83, 0x5f, 0x93, 0xb6, 0xd9, 0x9e, 0xf2, 0xcb, + 0x68, 0x4f, 0x5b, 0x66, + 0x8b, 0x5f, 0x4d, 0x43, 0xac, 0xef, 0xbf, 0x35, 0x6f, 0xf7, 0xc9, 0xff, + 0x25, 0x23, 0x7b, 0x68, + 0xec, 0xe8, 0x29, 0xf3, 0xbb, 0xa6, 0x5d, 0xd8, 0xbf, 0x62, 0x0f, 0xb3, + 0xbd, 0xbc, 0xda, 0xbf, + 0x6d, 0x6b, 0xff, 0xb6, 0xac, 0xfd, 0xdb, 0x34, 0xff, 0xed, 0xe4, 0xb6, + 0xd8, 0xbf, 0x03, 0x5c, + 0xbd, 0x9e, 0x2a, 0xae, 0xc7, 0xf3, 0x26, 0xd3, 0x42, 0x13, 0xce, 0x6a, + 0x2b, 0x36, 0xd5, 0x7a, + 0xbf, 0x09, 0xe7, 0xb1, 0x58, 0xbd, 0x6f, 0xa0, 0x89, 0x90, 0x03, 0x81, + 0x3f, 0x21, 0xef, 0x9a, + 0x1a, 0xa5, 0x3b, 0x7e, 0x9e, 0x0b, 0xd4, 0xe2, 0x40, 0xcf, 0x46, 0x71, + 0xa6, 0x37, 0x64, 0x3c, + 0x97, 0xb0, 0xb8, 0xde, 0x5a, 0xac, 0xd3, 0xc7, 0xef, 0xb7, 0xed, 0xfb, + 0xc6, 0xff, 0xc1, 0x3c, + 0x9a, 0x1c, 0x59, 0x57, 0xcf, 0xec, 0x89, 0xcb, 0x80, 0xcb, 0x9c, 0x98, + 0xa6, 0x31, 0x35, 0xc4, + 0x35, 0xe9, 0x9a, 0xdd, 0xe9, 0x77, 0x99, 0x4f, 0x1d, 0xd1, 0x67, 0x8e, + 0x8c, 0xec, 0xe1, 0xd1, + 0xbf, 0xef, 0x33, 0xff, 0xc3, 0xf4, 0xc8, 0xd9, 0xc3, 0xee, 0xfd, 0xdb, + 0x9b, 0x98, 0x6c, 0x0f, + 0xdb, 0xfb, 0xd7, 0x60, 0xfb, 0xb7, 0x6b, 0x7e, 0xd7, 0xf8, 0x29, 0xf1, + 0x7d, 0x9c, 0x69, 0x85, + 0x98, 0xab, 0x86, 0xe9, 0x7d, 0x63, 0x3f, 0x03, 0xf4, 0x6f, 0x73, 0x92, + 0x69, 0x06, 0xb1, 0xa9, + 0x20, 0x6f, 0xb2, 0xb9, 0xc8, 0x36, 0xd3, 0x93, 0x34, 0xef, 0x7d, 0x83, + 0xf3, 0x5f, 0x66, 0xad, + 0xf7, 0xcd, 0xc7, 0x73, 0xb9, 0x5b, 0x0d, 0xe0, 0xb9, 0xe8, 0x1e, 0x9e, + 0x0b, 0x7f, 0x7f, 0x0b, + 0x24, 0xd3, 0x4a, 0x12, 0xeb, 0x7c, 0x7a, 0x5c, 0x33, 0x26, 0xe3, 0xb1, + 0x39, 0x9e, 0xc0, 0x35, + 0x32, 0x47, 0xd6, 0x35, 0x9c, 0x0c, 0xe1, 0x32, 0x86, 0x93, 0x81, 0x39, + 0xb0, 0xae, 0xfe, 0xf4, + 0xcd, 0xe6, 0x5b, 0x49, 0xff, 0xc8, 0xc8, 0x1e, 0x22, 0xfd, 0x7b, 0xda, + 0xa8, 0x4d, 0x26, 0xd6, + 0xfe, 0x1d, 0x3b, 0xfb, 0x77, 0x24, 0xf6, 0x2f, 0xdf, 0xc3, 0x03, 0x67, + 0x0f, 0xf7, 0xcd, 0x37, + 0x8f, 0xdf, 0x6a, 0xd7, 0x83, 0xa0, 0xe6, 0xaa, 0xe5, 0xa2, 0xcc, 0x55, + 0x73, 0x7a, 0xdf, 0xd6, + 0xe7, 0x07, 0x73, 0xfe, 0x33, 0xcc, 0x7c, 0x63, 0xe7, 0xbf, 0xec, 0x2c, + 0xd3, 0x0e, 0xed, 0x7d, + 0x83, 0xba, 0xe4, 0x59, 0xa9, 0xb1, 0x7b, 0x7b, 0x67, 0xcf, 0x1f, 0x6b, + 0xf4, 0x73, 0xf0, 0x05, + 0xd3, 0x4a, 0xf5, 0xfe, 0xe4, 0x9c, 0xaf, 0x77, 0x8e, 0x3a, 0xe6, 0xf1, + 0xf8, 0xd8, 0x5c, 0x8e, + 0x97, 0xec, 0x5a, 0x18, 0x8b, 0xc9, 0xc2, 0x9c, 0x8f, 0xd9, 0x35, 0x99, + 0x9b, 0xb3, 0xf1, 0x8c, + 0x5f, 0xd3, 0xf1, 0x94, 0x5f, 0x93, 0x49, 0xcd, 0x7c, 0x9a, 0xfc, 0x5f, + 0x32, 0xb2, 0x87, 0x48, + 0xff, 0xde, 0x69, 0x76, 0xd8, 0xfe, 0x3d, 0xe6, 0xfb, 0x77, 0x69, 0x2c, + 0xd8, 0xde, 0x5d, 0x8c, + 0xe7, 0xfc, 0x9a, 0x4f, 0xc4, 0xfe, 0x9d, 0x4d, 0xc4, 0xfe, 0x9d, 0x32, + 0x9d, 0xac, 0x8d, 0x9f, + 0x16, 0x33, 0x88, 0xb0, 0x4c, 0xab, 0x33, 0x4c, 0xef, 0x1b, 0xd4, 0xa0, + 0x48, 0x38, 0x2d, 0x56, + 0xde, 0x44, 0x9f, 0x66, 0x5a, 0xd9, 0x85, 0x35, 0xf3, 0xf2, 0x54, 0xdd, + 0xfb, 0xc6, 0x67, 0x89, + 0x9c, 0x17, 0x0f, 0xc2, 0x78, 0x2e, 0x9c, 0x83, 0x7f, 0x5e, 0x3d, 0xd8, + 0x59, 0x64, 0xeb, 0x52, + 0x9e, 0x8b, 0x22, 0xd6, 0xf9, 0x9e, 0xd1, 0xc0, 0xbc, 0x35, 0xbe, 0x65, + 0x5e, 0x8c, 0x2f, 0x9c, + 0xeb, 0x6c, 0x7c, 0xe6, 0x5c, 0xa7, 0xe3, 0x53, 0xf3, 0x64, 0x7c, 0x62, + 0x5d, 0x1d, 0xf3, 0x9d, + 0xa4, 0x7f, 0x64, 0x64, 0x0f, 0x91, 0xfe, 0xbd, 0xc7, 0x1c, 0xb0, 0xfd, + 0x7b, 0xcb, 0xb5, 0x7f, + 0x2f, 0x5c, 0xfb, 0xf7, 0x8c, 0xed, 0xdf, 0x53, 0x67, 0xff, 0x9e, 0x30, + 0xad, 0x7c, 0xa7, 0x81, + 0x89, 0xeb, 0xb9, 0x6b, 0x50, 0x94, 0x4c, 0x2b, 0x24, 0xa7, 0x25, 0x35, + 0xd5, 0xdb, 0x50, 0xf7, + 0x07, 0x1c, 0x7c, 0x44, 0xef, 0xdb, 0x1a, 0xab, 0x9e, 0xf3, 0x5c, 0xfc, + 0x1c, 0xfc, 0xa7, 0x76, + 0xc3, 0x79, 0x2e, 0xae, 0x58, 0x67, 0x2a, 0x40, 0x9f, 0xdf, 0x37, 0x9a, + 0x9b, 0xdf, 0x37, 0xfa, + 0x5e, 0xe3, 0x7b, 0x47, 0xdf, 0x6b, 0x7e, 0xcf, 0xe8, 0x7b, 0xe0, 0x32, + 0x9e, 0x1a, 0x3d, 0x65, + 0xc2, 0x75, 0x77, 0x7c, 0xd7, 0xbc, 0x3b, 0xba, 0x6b, 0xde, 0x19, 0xdf, + 0xe1, 0xd7, 0xed, 0xf1, + 0xc0, 0x7c, 0x37, 0xf9, 0xbf, 0x64, 0x64, 0x0f, 0x91, 0xfe, 0xbd, 0x8f, + 0xf9, 0x6b, 0xdf, 0xc7, + 0xf7, 0xef, 0xf7, 0x8a, 0xfd, 0x6b, 0x7e, 0xcf, 0xf8, 0x29, 0xb1, 0x87, + 0xad, 0xfd, 0x7b, 0xd7, + 0xda, 0xbf, 0x77, 0xc6, 0xb7, 0xcd, 0xc1, 0xe8, 0xdd, 0xa2, 0x1e, 0x64, + 0x19, 0x23, 0xd3, 0x0a, + 0xc9, 0x69, 0xb1, 0x7b, 0xdf, 0xb8, 0x96, 0xa9, 0xe2, 0x8e, 0x3c, 0xae, + 0x97, 0x95, 0xe9, 0xb3, + 0xe0, 0xe0, 0xcf, 0x36, 0x1b, 0xf0, 0xfe, 0xaa, 0x41, 0x33, 0x37, 0xdd, + 0x1c, 0x7c, 0x8b, 0xdf, + 0x1f, 0xf4, 0xfe, 0x3e, 0x38, 0xbc, 0x65, 0xbc, 0x63, 0xf4, 0x0e, 0xe3, + 0xed, 0xa3, 0xb7, 0x9b, + 0x6f, 0x1f, 0xbd, 0xcd, 0x78, 0xdb, 0xe8, 0x6d, 0xe6, 0xdb, 0x46, 0x4f, + 0x1b, 0x4f, 0x8f, 0x7e, + 0xc0, 0xfc, 0x01, 0x7e, 0x7d, 0xbf, 0xf9, 0xfd, 0xfc, 0x7a, 0xab, 0xf9, + 0x56, 0x76, 0xb6, 0x7e, + 0x1f, 0xe9, 0x1f, 0x19, 0xd9, 0x43, 0xa4, 0x7f, 0x1f, 0x34, 0x6e, 0xb1, + 0xfd, 0xfb, 0x8e, 0xd1, + 0xdb, 0x61, 0x0f, 0x5b, 0xfb, 0xf7, 0x6d, 0x6c, 0xff, 0x3e, 0x6d, 0xed, + 0xdf, 0x1f, 0xb0, 0xf6, + 0xef, 0xf7, 0x9b, 0x6f, 0x65, 0x7b, 0x78, 0x31, 0x7a, 0x5f, 0xa4, 0xb8, + 0x1e, 0x8a, 0x69, 0x85, + 0xe4, 0xb4, 0xd8, 0xbd, 0x6f, 0xb6, 0x86, 0x85, 0x7d, 0x2d, 0x8a, 0x55, + 0xcf, 0x7c, 0x6b, 0xce, + 0xc7, 0x9f, 0x66, 0x9b, 0x52, 0x9e, 0x0b, 0xe4, 0x4d, 0xd8, 0x7f, 0xe3, + 0x9c, 0xaf, 0x80, 0xd7, + 0xfc, 0xe8, 0xf0, 0xad, 0xe6, 0x7b, 0x87, 0xef, 0x31, 0xdf, 0x3b, 0x7a, + 0x8f, 0xf1, 0x9e, 0x21, + 0xbb, 0x46, 0xcf, 0x18, 0xcf, 0x8c, 0xde, 0x6d, 0x3c, 0x33, 0x7c, 0xc6, + 0x7c, 0xd7, 0xe8, 0x5d, + 0xc6, 0x0f, 0xb2, 0xeb, 0x5d, 0xa3, 0x1f, 0x64, 0x7f, 0xbe, 0xd3, 0x78, + 0xe7, 0xe8, 0x96, 0xf9, + 0xc1, 0x23, 0xf2, 0x7f, 0xc9, 0xc8, 0x1e, 0x1e, 0xfd, 0xfb, 0xa8, 0xf9, + 0xd6, 0xe1, 0x7b, 0xcd, + 0xf7, 0x8c, 0xde, 0x0b, 0xfb, 0x97, 0xfd, 0xf9, 0x1e, 0xb6, 0x7f, 0x9f, + 0x31, 0xdf, 0x0d, 0xfb, + 0x78, 0xc8, 0xf7, 0xae, 0xb5, 0x8f, 0x7f, 0x90, 0xed, 0xdf, 0x77, 0x9a, + 0xb7, 0x86, 0xa2, 0xff, + 0x03, 0xc7, 0xb4, 0xca, 0x76, 0xab, 0x4c, 0xff, 0x54, 0x35, 0x32, 0x38, + 0x4e, 0xcb, 0x86, 0x91, + 0x59, 0xe4, 0x5a, 0x99, 0xa1, 0x82, 0xf9, 0x67, 0x59, 0x1e, 0x98, 0x56, + 0x33, 0x04, 0xab, 0x1e, + 0x7a, 0xdf, 0xec, 0xf7, 0x27, 0xe1, 0xb9, 0x00, 0xcf, 0x01, 0x72, 0x29, + 0xa5, 0xe5, 0xfa, 0xfc, + 0xe0, 0x8f, 0xb1, 0x35, 0xfa, 0xc0, 0xf0, 0x03, 0xe6, 0xb3, 0xc3, 0x67, + 0xf9, 0xf5, 0x23, 0xc3, + 0x1f, 0x61, 0xd7, 0xfb, 0x8d, 0xf7, 0x0f, 0xdf, 0x6f, 0xbe, 0x7f, 0xf8, + 0x3e, 0xe3, 0x7d, 0xec, + 0xfa, 0xe1, 0xe1, 0x0f, 0x99, 0x3f, 0xcc, 0xfb, 0xe2, 0xbe, 0xdf, 0xf8, + 0x28, 0xe9, 0x1f, 0x19, + 0xd9, 0x43, 0xa4, 0x7f, 0x1f, 0x33, 0xdf, 0x35, 0xfc, 0x00, 0xdb, 0xc3, + 0xcf, 0x5a, 0x7b, 0x18, + 0xf6, 0xef, 0x8f, 0x58, 0xfb, 0xf7, 0xfd, 0x7c, 0xff, 0xbe, 0x6f, 0xf8, + 0xc3, 0xe6, 0x0f, 0x0d, + 0x7f, 0x98, 0xed, 0xdf, 0x1f, 0x32, 0xbf, 0x7f, 0xf8, 0x63, 0x46, 0xaa, + 0x9f, 0xea, 0xf0, 0xb8, + 0xde, 0x08, 0x13, 0xd7, 0x43, 0xd4, 0xc8, 0x60, 0x38, 0x2d, 0xa6, 0x66, + 0xc0, 0xec, 0xcb, 0xf4, + 0x00, 0xa5, 0x7f, 0x50, 0xaf, 0x87, 0xeb, 0x7d, 0x03, 0x7e, 0x7f, 0x80, + 0x3e, 0x2b, 0xf3, 0x26, + 0x56, 0xbf, 0xc9, 0x27, 0x07, 0xef, 0x37, 0x7f, 0x6c, 0xf8, 0x63, 0xe6, + 0x8f, 0x0d, 0x3e, 0x6a, + 0x7e, 0x94, 0x5d, 0x1f, 0x19, 0x7e, 0xc4, 0xfc, 0xc8, 0xe0, 0x23, 0xe6, + 0x87, 0x87, 0x1f, 0x36, + 0x3f, 0x3c, 0xf8, 0x90, 0xf9, 0xa1, 0xe1, 0x87, 0xcc, 0x1f, 0x1d, 0xfe, + 0x28, 0xbb, 0x3e, 0xc8, + 0x7c, 0xe5, 0x77, 0x99, 0x1f, 0x23, 0xff, 0x97, 0x8c, 0xec, 0xe1, 0xb1, + 0xde, 0x27, 0x99, 0xce, + 0xc1, 0xfe, 0xfd, 0x31, 0xe6, 0xcb, 0xc1, 0x1e, 0xfe, 0x88, 0xb5, 0x87, + 0x61, 0xff, 0x7e, 0x98, + 0xef, 0xdf, 0x0f, 0xf1, 0xfd, 0xfb, 0xa3, 0x6c, 0xff, 0x7e, 0xd0, 0x7c, + 0xd7, 0xe0, 0xe3, 0xc6, + 0xce, 0x59, 0xe9, 0x00, 0x98, 0x51, 0x9b, 0x93, 0x74, 0x33, 0x34, 0x6f, + 0x8a, 0x64, 0x5a, 0xa1, + 0x38, 0x2d, 0xae, 0xde, 0x37, 0xf5, 0x3d, 0xa1, 0xe7, 0x72, 0xb6, 0x64, + 0x71, 0x3d, 0xaf, 0x2f, + 0xcd, 0xf4, 0x99, 0xf9, 0xe7, 0x41, 0xf3, 0x83, 0x7f, 0x76, 0xf0, 0x11, + 0xe3, 0xb9, 0xc1, 0x73, + 0xc6, 0x4f, 0x0d, 0x7e, 0xca, 0xfc, 0xa9, 0xc1, 0x4f, 0x9a, 0x1f, 0xe7, + 0xd7, 0xc7, 0xf9, 0xf5, + 0xb1, 0xc1, 0xc7, 0xd8, 0xf5, 0x13, 0xc6, 0x4f, 0xb0, 0xeb, 0xc7, 0x07, + 0x3f, 0xce, 0xae, 0xf7, + 0x9b, 0x3f, 0xd7, 0x7b, 0xbb, 0xf1, 0x76, 0x93, 0x8c, 0x8c, 0xec, 0xa1, + 0xb0, 0xde, 0x2f, 0x33, + 0xad, 0x7b, 0x8e, 0xed, 0xe1, 0x9f, 0xe2, 0x7b, 0xf8, 0x27, 0xd9, 0xbe, + 0xfd, 0x49, 0x6b, 0xff, + 0x7e, 0x9c, 0xef, 0xdf, 0x8f, 0xf1, 0xfd, 0xfb, 0x13, 0x83, 0x1f, 0x37, + 0x61, 0x0f, 0xbf, 0x7f, + 0xf0, 0x29, 0xc3, 0xf6, 0x0b, 0xc3, 0x78, 0x2e, 0x11, 0xe2, 0x7a, 0x38, + 0x4e, 0x0b, 0xf4, 0xbe, + 0x01, 0xf3, 0x19, 0xc3, 0x4f, 0x89, 0xc6, 0xb4, 0x42, 0xd5, 0x30, 0x96, + 0xe7, 0x9c, 0xf3, 0xb5, + 0x9a, 0x1f, 0x6c, 0x71, 0xf0, 0x7f, 0x81, 0xad, 0xdb, 0xa7, 0x07, 0x9f, + 0x36, 0x3e, 0xdd, 0xff, + 0x19, 0xe3, 0x67, 0xd8, 0xf5, 0xd3, 0x83, 0x9f, 0x36, 0x7f, 0x7a, 0xf0, + 0xbc, 0xf1, 0x3c, 0xbb, + 0x3e, 0x35, 0xf8, 0x94, 0xf9, 0xa9, 0xc1, 0x27, 0x8d, 0x4f, 0x0e, 0x3e, + 0x69, 0x7e, 0x72, 0xf0, + 0x09, 0xe3, 0x13, 0x83, 0x8f, 0x1a, 0xbf, 0xd2, 0xbb, 0x34, 0xc9, 0xc8, + 0xc8, 0x1e, 0x12, 0xeb, + 0xfd, 0x06, 0x3b, 0xb7, 0x7c, 0xda, 0xfc, 0x74, 0xff, 0xd3, 0xc6, 0xcf, + 0x0c, 0x7e, 0xc6, 0xfc, + 0x99, 0xfe, 0x4f, 0xc3, 0x1e, 0x86, 0xfd, 0x6b, 0x3e, 0xcf, 0xb4, 0x8e, + 0xed, 0x61, 0x6b, 0xff, + 0x7e, 0x92, 0xed, 0xdf, 0x4f, 0xb0, 0xf3, 0xe1, 0xa7, 0x8d, 0xfc, 0xbc, + 0x58, 0x87, 0x7a, 0x90, + 0x6a, 0x08, 0xcf, 0x05, 0x7a, 0x2c, 0x78, 0x0d, 0x0a, 0x62, 0xee, 0x1b, + 0x8a, 0xd3, 0xd2, 0x5f, + 0xf5, 0xfe, 0x2a, 0xf5, 0xcf, 0x8e, 0xeb, 0xdd, 0xd7, 0xb9, 0x9c, 0xa2, + 0x46, 0xfb, 0xb3, 0xfd, + 0x9f, 0x35, 0x7e, 0xb9, 0xff, 0x4b, 0xc6, 0x2f, 0xb1, 0xeb, 0x17, 0xfb, + 0xbf, 0x68, 0xb2, 0xcb, + 0xf8, 0x85, 0xfe, 0x2f, 0x98, 0xbf, 0xd0, 0xff, 0x79, 0xe3, 0xe7, 0xd9, + 0xf5, 0x73, 0xfd, 0x9f, + 0x33, 0x7f, 0xae, 0xff, 0x19, 0xe3, 0x33, 0xfd, 0xcf, 0x98, 0x9f, 0xe9, + 0x3f, 0x67, 0xfc, 0x46, + 0xef, 0x3f, 0x19, 0xff, 0xc9, 0xe4, 0x97, 0xca, 0x30, 0x5f, 0x77, 0x3f, + 0x7e, 0x16, 0xf6, 0x32, + 0x5f, 0x84, 0xf7, 0x66, 0x3e, 0xc0, 0x7b, 0xb8, 0x5f, 0x6b, 0x7b, 0x95, + 0x9f, 0x75, 0x95, 0x7b, + 0x79, 0x58, 0xef, 0x33, 0xca, 0xbd, 0xdc, 0xff, 0xf7, 0xdf, 0xfb, 0x1d, + 0xf3, 0x67, 0xfb, 0xbf, + 0x0c, 0xfb, 0xd7, 0xfc, 0x25, 0xb6, 0x77, 0x7f, 0x91, 0x5f, 0xbf, 0x00, + 0x7b, 0x18, 0xf6, 0xaf, + 0xf9, 0xf3, 0xfd, 0x9f, 0x83, 0x3d, 0x6c, 0x7c, 0x66, 0x00, 0xfb, 0xf7, + 0x33, 0xc6, 0x73, 0xec, + 0xdf, 0x36, 0x06, 0x22, 0xae, 0x97, 0x95, 0xf1, 0x5c, 0x6c, 0x0e, 0xfe, + 0x71, 0xf9, 0xb0, 0x7a, + 0xa2, 0xd7, 0x42, 0xe3, 0x7f, 0xc0, 0x5f, 0xc6, 0x70, 0x5a, 0x06, 0xe9, + 0x6e, 0x6e, 0xa9, 0x66, + 0x3e, 0x3b, 0x71, 0x3d, 0x2c, 0xd3, 0xea, 0x14, 0xd7, 0xfb, 0x26, 0x8b, + 0x75, 0xfe, 0xfa, 0xd1, + 0x0b, 0xc6, 0xaf, 0x1d, 0xfd, 0x9a, 0xc9, 0xaf, 0xfe, 0xaf, 0x1a, 0xbf, + 0xca, 0xaf, 0x5f, 0x31, + 0x7e, 0x85, 0x5d, 0x9f, 0x3b, 0xfa, 0x9c, 0xf9, 0xb9, 0xfe, 0xe7, 0x8c, + 0xcf, 0xf6, 0x3f, 0xcb, + 0xaf, 0x17, 0x98, 0x56, 0x7e, 0x76, 0x5e, 0x69, 0x60, 0xea, 0x86, 0xe2, + 0x65, 0xd7, 0x54, 0x02, + 0xd9, 0x35, 0x7e, 0x3d, 0x17, 0xb5, 0x4a, 0x5a, 0x3b, 0x3d, 0xd4, 0xe5, + 0xf3, 0x4d, 0x4e, 0x4a, + 0x35, 0xe8, 0xfb, 0xb1, 0x38, 0x3d, 0xdd, 0xd0, 0x98, 0x06, 0xb6, 0xef, + 0x07, 0xc3, 0xa8, 0x38, + 0xbf, 0x12, 0xa3, 0xc2, 0x48, 0xb1, 0x67, 0x14, 0xd4, 0x39, 0x95, 0xdc, + 0x73, 0xab, 0xc0, 0x77, + 0x61, 0xf7, 0xc2, 0xe7, 0x56, 0x4d, 0xc5, 0xdc, 0x2a, 0x7f, 0x7f, 0x78, + 0x6a, 0x8a, 0xaf, 0xef, + 0xdf, 0x9e, 0x6e, 0xe0, 0x18, 0x93, 0xea, 0x3c, 0xe0, 0x5a, 0xcd, 0xaa, + 0xe7, 0x5e, 0xfa, 0x99, + 0x8e, 0x3e, 0x13, 0xbd, 0xf2, 0xd5, 0xbb, 0xbb, 0xeb, 0xf3, 0x08, 0x99, + 0x1f, 0xc6, 0xeb, 0x57, + 0xc1, 0x0f, 0x83, 0x9a, 0x55, 0xf6, 0xef, 0xda, 0x83, 0x9c, 0x4d, 0x6b, + 0xc7, 0xfb, 0x95, 0xaf, + 0x59, 0xe1, 0xf9, 0xce, 0xec, 0x24, 0xdf, 0x5a, 0xe7, 0x25, 0xdb, 0x7d, + 0xff, 0xb9, 0x06, 0x9c, + 0x8b, 0x36, 0x47, 0x5a, 0x38, 0xe7, 0x93, 0xef, 0x01, 0x75, 0x0c, 0x4b, + 0x3e, 0x83, 0xf2, 0xd7, + 0xcd, 0x17, 0x8e, 0x7e, 0x4d, 0xec, 0xe1, 0xfe, 0xaf, 0x59, 0xfb, 0xf7, + 0x57, 0xf9, 0xfe, 0xfd, + 0x95, 0xa3, 0xcf, 0x19, 0xb0, 0x7f, 0x3f, 0x67, 0xed, 0xdf, 0xcf, 0xf6, + 0x5f, 0x30, 0x7e, 0xf6, + 0xe8, 0xb3, 0xc6, 0x1a, 0xab, 0x3e, 0x88, 0xe7, 0x72, 0x57, 0x68, 0x61, + 0x95, 0xbd, 0x37, 0x87, + 0x4d, 0xe5, 0xe7, 0xb9, 0x44, 0xd9, 0x03, 0x43, 0x98, 0xfb, 0xa6, 0x66, + 0x3e, 0x47, 0xd3, 0x85, + 0xea, 0xb5, 0x6b, 0x18, 0xbf, 0xd0, 0xfb, 0xbc, 0xf9, 0xdb, 0x47, 0xbf, + 0x6d, 0xfc, 0xf6, 0xd1, + 0x6f, 0x99, 0xbf, 0xc5, 0xae, 0x2f, 0x1c, 0x7d, 0x81, 0x5d, 0xbf, 0x69, + 0xfe, 0x26, 0xbb, 0x7e, + 0xe3, 0xe8, 0x37, 0xac, 0xeb, 0xf3, 0xc6, 0xe7, 0x8f, 0x3e, 0x6f, 0x7e, + 0x9e, 0xad, 0xdf, 0xaf, + 0x2f, 0x2a, 0x8d, 0xf2, 0x52, 0x3f, 0x0c, 0xef, 0x37, 0x89, 0xa0, 0x0b, + 0x48, 0x76, 0x4d, 0x59, + 0x95, 0x0b, 0x0f, 0xea, 0x71, 0xb1, 0xf3, 0xe1, 0xcb, 0x92, 0x77, 0xbe, + 0xc9, 0xdd, 0xaa, 0xc5, + 0xe9, 0x11, 0x73, 0xe1, 0xdd, 0xf9, 0x70, 0x6f, 0x4c, 0x23, 0x26, 0x5d, + 0x98, 0x85, 0xea, 0x82, + 0x3b, 0xe7, 0x75, 0x20, 0xf7, 0x23, 0xd8, 0x79, 0x7d, 0xc4, 0x74, 0x7d, + 0x51, 0xe2, 0xbe, 0xcb, + 0x8a, 0x39, 0xe4, 0xee, 0x0f, 0xcf, 0xb6, 0xec, 0xfe, 0x70, 0xae, 0x0b, + 0x27, 0x68, 0x5d, 0x68, + 0xc5, 0x51, 0xdf, 0x8f, 0xcb, 0x03, 0x6e, 0x88, 0xd7, 0x9c, 0x66, 0x9b, + 0xa0, 0xeb, 0x9e, 0x79, + 0x84, 0x96, 0x1f, 0xb6, 0x0d, 0x7e, 0xd8, 0xac, 0xd0, 0x80, 0x3d, 0x90, + 0xea, 0x85, 0xaf, 0x6d, + 0xac, 0xb3, 0x69, 0x23, 0xc4, 0xfb, 0xab, 0xab, 0x67, 0xa3, 0xd0, 0xf5, + 0x69, 0xa1, 0x59, 0x3c, + 0xdd, 0xae, 0x79, 0xe6, 0x4c, 0xb2, 0xbf, 0xef, 0x58, 0xf1, 0xb5, 0x6c, + 0x40, 0x7c, 0x2d, 0x4a, + 0x0c, 0x8b, 0xef, 0x81, 0x79, 0xd0, 0x1e, 0xf8, 0x82, 0xf9, 0x79, 0xbe, + 0x7f, 0x7f, 0x9b, 0xef, + 0xdf, 0xdf, 0xe2, 0xfb, 0xf7, 0x0b, 0x7c, 0xff, 0xfe, 0xa6, 0xb3, 0x7f, + 0x7f, 0x43, 0xec, 0x5f, + 0xb6, 0x8f, 0x5f, 0x38, 0xfa, 0x75, 0x23, 0x2c, 0xae, 0xb7, 0xc6, 0xc1, + 0xbf, 0x1b, 0x32, 0x3f, + 0x18, 0xf6, 0x0c, 0x72, 0x0f, 0x68, 0x63, 0xbd, 0x0d, 0xcc, 0x2b, 0xe7, + 0xff, 0x87, 0x7c, 0x96, + 0xb0, 0xac, 0xfa, 0x7c, 0x84, 0xb9, 0x9c, 0x32, 0xce, 0xd7, 0xef, 0xf6, + 0xbe, 0x68, 0xfc, 0x7e, + 0xef, 0xf7, 0xcc, 0xdf, 0x13, 0x97, 0xf1, 0xe5, 0xde, 0x97, 0x8d, 0x2f, + 0xf5, 0xbe, 0x64, 0xb2, + 0x8b, 0xfd, 0xf9, 0x45, 0xe3, 0x8b, 0xbd, 0xdf, 0x35, 0x7f, 0xf7, 0x88, + 0x5f, 0xc6, 0xef, 0xb0, + 0x35, 0xfc, 0xad, 0xe5, 0x6e, 0x1d, 0x72, 0xce, 0xa1, 0xfd, 0x26, 0xd1, + 0x74, 0x41, 0xcd, 0xae, + 0x39, 0x0f, 0x66, 0xd7, 0x78, 0xb5, 0x28, 0x9c, 0xe7, 0xc3, 0x7e, 0xaf, + 0x5d, 0xfe, 0xbc, 0x3e, + 0xab, 0xac, 0xd8, 0x12, 0x4e, 0x3e, 0x9c, 0xfd, 0x5e, 0x3d, 0xfc, 0x45, + 0xab, 0xef, 0x47, 0x95, + 0x7f, 0x1a, 0x08, 0x5d, 0x48, 0xa1, 0x74, 0xe1, 0xea, 0x8c, 0x0a, 0x5f, + 0xce, 0x8b, 0x73, 0x3b, + 0xe0, 0x79, 0x0d, 0xba, 0xee, 0xe6, 0xaf, 0xb9, 0xe6, 0xd6, 0x1c, 0x42, + 0xce, 0xab, 0x72, 0xcc, + 0xb5, 0xc8, 0x50, 0xe9, 0x82, 0xf2, 0x9c, 0x8e, 0x9d, 0xc3, 0x8a, 0xa9, + 0x59, 0xf5, 0xc7, 0xb6, + 0x7b, 0xb6, 0xae, 0xc3, 0x3c, 0x32, 0x5f, 0xcd, 0x16, 0xcc, 0x66, 0x64, + 0x7e, 0x58, 0x7e, 0x35, + 0x8f, 0xac, 0x7b, 0x9d, 0x3d, 0x10, 0x53, 0x1d, 0xaf, 0x21, 0x9f, 0xb7, + 0xa8, 0x39, 0xe7, 0x75, + 0xd0, 0xf5, 0xdd, 0x20, 0x5d, 0xb7, 0xe3, 0x6b, 0x96, 0xae, 0x6b, 0x7c, + 0x0f, 0x14, 0xb0, 0x7b, + 0x20, 0xe0, 0x79, 0xfc, 0xbb, 0xe6, 0x17, 0x7b, 0xbf, 0x6f, 0xfc, 0x9e, + 0xb3, 0x87, 0xbf, 0x6c, + 0x7c, 0xf9, 0xe8, 0x4b, 0x62, 0x0f, 0xb3, 0x3f, 0xbf, 0xd8, 0xfb, 0xa2, + 0xbd, 0x7f, 0xd9, 0xf5, + 0x3b, 0xc6, 0xe7, 0x7b, 0x5f, 0xc0, 0xf5, 0xbe, 0xf5, 0xc4, 0x1e, 0xd8, + 0x3a, 0x2e, 0x1c, 0xca, + 0xe6, 0x07, 0xf3, 0xbc, 0x09, 0xfb, 0x1c, 0x62, 0xf6, 0x40, 0x7a, 0xa2, + 0xf3, 0xb9, 0x6f, 0xce, + 0x73, 0x0b, 0x18, 0x08, 0x43, 0xb6, 0x0e, 0x01, 0xe7, 0x28, 0x6c, 0x5c, + 0xaf, 0x18, 0xc3, 0x5c, + 0xce, 0x3f, 0xe8, 0xfd, 0x91, 0xf1, 0x27, 0xbd, 0x3f, 0x31, 0xbe, 0xd2, + 0xfb, 0x8a, 0xf9, 0x95, + 0xde, 0x1f, 0xc3, 0x65, 0xfc, 0x31, 0xfb, 0xb7, 0x3f, 0xb2, 0xae, 0x3f, + 0xec, 0xfd, 0xa1, 0xc9, + 0x2e, 0xe3, 0x0f, 0x8f, 0x7e, 0xdf, 0xf8, 0x83, 0xa3, 0x2f, 0x1a, 0x5f, + 0x02, 0xfd, 0x0b, 0x99, + 0x1f, 0xcc, 0x7f, 0xaf, 0xdc, 0x7f, 0x57, 0x9f, 0x17, 0xd2, 0xcb, 0x4a, + 0x3d, 0x6e, 0x5d, 0x50, + 0xd5, 0x2a, 0xf1, 0xd7, 0x64, 0xbf, 0x7b, 0x67, 0x2e, 0xfc, 0x9d, 0x20, + 0x3f, 0x4c, 0x6f, 0xc0, + 0x6b, 0x16, 0x46, 0xbc, 0x57, 0x27, 0xc4, 0x77, 0x89, 0x53, 0x17, 0x52, + 0x11, 0x72, 0x5e, 0x2b, + 0x6e, 0x87, 0xad, 0xeb, 0x50, 0xe7, 0x54, 0xbe, 0xbd, 0xf2, 0xc3, 0xa0, + 0x1f, 0xbd, 0x7a, 0xb1, + 0xb5, 0x5f, 0x5c, 0xe4, 0xeb, 0xfa, 0xd0, 0xc5, 0xd5, 0xbd, 0x8f, 0xf5, + 0xfd, 0x85, 0x53, 0xc4, + 0x1c, 0x56, 0xeb, 0xd9, 0x18, 0xf8, 0x3c, 0x86, 0xf3, 0xba, 0xd0, 0xf5, + 0xc3, 0x6d, 0x99, 0xae, + 0x8f, 0xc4, 0x79, 0xdd, 0xbe, 0x97, 0x62, 0x8c, 0xb3, 0x69, 0x45, 0x1d, + 0x6f, 0x2e, 0x9e, 0x78, + 0x3f, 0x3f, 0x33, 0x57, 0xde, 0x12, 0x16, 0x5f, 0x03, 0x5d, 0xcf, 0x60, + 0xce, 0xe9, 0xa1, 0x31, + 0xac, 0x3f, 0x60, 0xfb, 0xf4, 0x4f, 0xd8, 0x1e, 0xfe, 0x0a, 0xdf, 0xc3, + 0x7f, 0xcc, 0xfe, 0xfc, + 0xe3, 0xa3, 0x3f, 0x86, 0xbd, 0x6b, 0xfe, 0xd1, 0x11, 0xec, 0xe1, 0x3f, + 0x74, 0xf6, 0xf0, 0xef, + 0x1f, 0xfd, 0x01, 0xd7, 0xc3, 0x48, 0x73, 0xd5, 0xf8, 0xb3, 0x51, 0x3e, + 0x3f, 0xb8, 0xc2, 0x7e, + 0x2f, 0xb0, 0xef, 0xac, 0x38, 0x8c, 0x34, 0xa6, 0x94, 0x99, 0xe5, 0x5a, + 0xb9, 0xa9, 0xe6, 0xbc, + 0x7f, 0xce, 0x41, 0xb0, 0xd8, 0xcf, 0xd9, 0x69, 0xba, 0x2d, 0xea, 0x92, + 0x05, 0x3b, 0x5a, 0xf8, + 0x2e, 0xd9, 0xc3, 0xab, 0xaf, 0x89, 0x57, 0x17, 0xc2, 0x6a, 0x18, 0xbf, + 0x62, 0xfe, 0xa9, 0xf1, + 0xf5, 0xde, 0x9f, 0x1b, 0x7f, 0xde, 0xfb, 0x3a, 0xfb, 0xf3, 0xcf, 0x4c, + 0x76, 0x19, 0x7f, 0xd6, + 0xfb, 0x53, 0xe3, 0x4f, 0xd9, 0x9f, 0x7f, 0xca, 0xfe, 0xfc, 0x5a, 0xef, + 0x6b, 0xe6, 0xd7, 0x7a, + 0x5f, 0x35, 0xbe, 0xda, 0xfb, 0xaa, 0xf9, 0x55, 0xa6, 0x87, 0x7f, 0xc0, + 0xf4, 0xaf, 0x38, 0x53, + 0xf4, 0x9b, 0x80, 0xef, 0xc2, 0xf6, 0x9e, 0xa6, 0xf0, 0x5d, 0xb0, 0xe7, + 0x05, 0xee, 0xbb, 0xa8, + 0x75, 0x01, 0xcf, 0xf3, 0x99, 0x6b, 0x2b, 0xdf, 0x65, 0x90, 0xed, 0xac, + 0xc5, 0xd7, 0xe0, 0x5e, + 0xd8, 0xdf, 0xb7, 0x4f, 0x8b, 0xd2, 0xf8, 0xda, 0x4a, 0x17, 0x8a, 0x08, + 0x5d, 0xa8, 0xaa, 0x6b, + 0xd9, 0x91, 0x3c, 0xde, 0xb0, 0x67, 0xa3, 0xe6, 0xf2, 0xc3, 0x56, 0x31, + 0x29, 0x49, 0x7c, 0x4d, + 0xf8, 0x2e, 0x11, 0x74, 0x41, 0x3d, 0x87, 0xb5, 0x18, 0xe3, 0xbc, 0x86, + 0x0c, 0xc4, 0xb6, 0x99, + 0x0f, 0xb4, 0x79, 0xe2, 0xd5, 0x75, 0xc7, 0x0f, 0x5b, 0xe4, 0x1b, 0x3a, + 0xf3, 0xc3, 0x90, 0x75, + 0xbc, 0xed, 0xd8, 0xea, 0x78, 0xed, 0xd8, 0x36, 0xbe, 0x36, 0xcd, 0xa3, + 0xeb, 0xfe, 0xf3, 0xfa, + 0xce, 0x45, 0x65, 0xaf, 0x7a, 0x56, 0x3c, 0x90, 0xc6, 0xd7, 0xac, 0x67, + 0xa3, 0xdc, 0x7f, 0xff, + 0x0a, 0xdb, 0xa7, 0x5f, 0x37, 0xff, 0x9c, 0xed, 0xe1, 0xaf, 0xb3, 0x3f, + 0xff, 0x8c, 0xed, 0xe3, + 0x3f, 0x13, 0x7b, 0xd7, 0x14, 0xfb, 0xf8, 0x6b, 0xb0, 0x87, 0xad, 0xfd, + 0xfb, 0x55, 0xa6, 0x87, + 0xbf, 0x1f, 0x8d, 0x69, 0xe5, 0xdf, 0x77, 0x3e, 0x0e, 0x7e, 0xf5, 0xae, + 0x97, 0x83, 0xbf, 0x62, + 0x53, 0x79, 0x39, 0xf8, 0xfa, 0x82, 0x69, 0xdd, 0x78, 0xf5, 0xb3, 0x80, + 0x81, 0x00, 0xf5, 0x80, + 0x5c, 0x07, 0x4f, 0x72, 0x4d, 0x4f, 0x5d, 0x32, 0xc6, 0x77, 0x41, 0xf2, + 0xfb, 0x79, 0xac, 0x33, + 0x44, 0x17, 0xbe, 0x6a, 0xfe, 0x85, 0xf9, 0x97, 0xbd, 0xbf, 0x34, 0xfe, + 0xd2, 0xfc, 0x0b, 0xe3, + 0x2f, 0xe0, 0xea, 0xfd, 0x85, 0xf1, 0x1f, 0x7b, 0xff, 0x51, 0x5c, 0xe6, + 0x37, 0x8c, 0x6f, 0xf4, + 0xe0, 0xba, 0x67, 0xdc, 0x63, 0xd7, 0x9f, 0x33, 0x7d, 0xfc, 0x93, 0xc5, + 0x6e, 0xdd, 0x59, 0x93, + 0x2b, 0xf4, 0x9b, 0x78, 0x7d, 0x97, 0xdd, 0x5a, 0x5c, 0xba, 0xa0, 0x45, + 0xe0, 0xf9, 0x6c, 0x07, + 0x9e, 0x17, 0xe0, 0x19, 0x67, 0xe5, 0x4d, 0xce, 0x77, 0x82, 0x75, 0xdd, + 0x15, 0x5f, 0x43, 0xc4, + 0xfb, 0x23, 0xea, 0x82, 0x88, 0xf7, 0xa7, 0xae, 0xc9, 0xe3, 0xb5, 0xf7, + 0x28, 0x3c, 0x1b, 0xe1, + 0xb3, 0x58, 0x0a, 0x8a, 0xaf, 0xd9, 0x79, 0x13, 0xee, 0xbb, 0xc4, 0xa5, + 0x0b, 0x5a, 0x84, 0x39, + 0xac, 0xc8, 0x78, 0xff, 0x32, 0x75, 0xb8, 0x16, 0x5f, 0xbb, 0xe3, 0xf5, + 0xc3, 0x60, 0x0f, 0x94, + 0xe6, 0x7a, 0xdd, 0xa5, 0xeb, 0xc1, 0x7b, 0x00, 0x5d, 0xc7, 0x9b, 0xba, + 0xaf, 0xf3, 0x16, 0x21, + 0xbe, 0x96, 0x0d, 0x8b, 0xaf, 0x2d, 0x7c, 0xf1, 0x35, 0xe5, 0x1e, 0xe0, + 0x3b, 0xd8, 0x80, 0x3d, + 0xcc, 0xf6, 0xaf, 0x09, 0xfb, 0xf7, 0x2f, 0xec, 0xfd, 0xcb, 0xae, 0x6f, + 0x58, 0x7b, 0xf8, 0x1e, + 0xdf, 0xc3, 0x7f, 0xce, 0xb4, 0xf1, 0x2b, 0xf1, 0xe5, 0xbc, 0x98, 0x06, + 0xe9, 0xcb, 0x9d, 0xc3, + 0xdd, 0xdb, 0xdb, 0x7b, 0x61, 0xf3, 0x83, 0xa1, 0xdf, 0x04, 0xce, 0x7a, + 0x59, 0x7f, 0xef, 0xdb, + 0x91, 0x66, 0x00, 0xfb, 0x39, 0x33, 0xcb, 0xb6, 0xdc, 0xbf, 0xd7, 0x0a, + 0xd7, 0xd2, 0xad, 0x7d, + 0x69, 0x7c, 0x2d, 0xca, 0x79, 0x41, 0xe1, 0xbb, 0x7c, 0xdd, 0xfc, 0x1b, + 0xe3, 0x6f, 0xcd, 0xbf, + 0x35, 0xfe, 0x86, 0xfd, 0x69, 0x5f, 0x7f, 0x6d, 0xfe, 0xb5, 0x73, 0x89, + 0x9c, 0xfb, 0x5f, 0x19, + 0x7f, 0x05, 0x17, 0x5b, 0xdb, 0xaf, 0x31, 0xfd, 0xcb, 0xc8, 0xfa, 0x4d, + 0x26, 0xea, 0x7e, 0x13, + 0xf7, 0xbd, 0x58, 0xba, 0xd0, 0x54, 0xea, 0x82, 0x84, 0x5d, 0x73, 0x8d, + 0x3c, 0x60, 0x4b, 0x7d, + 0x66, 0x2e, 0xef, 0x6d, 0x2e, 0x8b, 0xec, 0x5e, 0x2a, 0x7b, 0x5e, 0xfe, + 0xa2, 0xf0, 0xc3, 0x20, + 0x6f, 0xc2, 0xcf, 0x28, 0xc8, 0x73, 0x3a, 0xce, 0x7f, 0xdf, 0x56, 0x6a, + 0x11, 0x36, 0xde, 0xbf, + 0xed, 0x9c, 0x99, 0x9d, 0xf8, 0x5a, 0xc3, 0x1d, 0x5f, 0x5b, 0xf9, 0x2e, + 0xdb, 0x7b, 0x7e, 0x5d, + 0x0f, 0x8c, 0xf7, 0x47, 0x8d, 0xeb, 0x85, 0xe7, 0xbc, 0xd4, 0xf1, 0xfe, + 0x93, 0xa0, 0x78, 0xbf, + 0x37, 0xbe, 0xe6, 0xe4, 0x81, 0xdc, 0xf1, 0xb5, 0xa9, 0x37, 0xbe, 0x16, + 0x7b, 0x1d, 0x6f, 0x7c, + 0xb1, 0x6d, 0xee, 0x7b, 0xc0, 0xf9, 0x75, 0x87, 0xed, 0x0f, 0x7f, 0x7c, + 0xcd, 0x93, 0x37, 0x61, + 0xcf, 0x65, 0xb8, 0xd7, 0xe0, 0x78, 0xd2, 0xd7, 0xd9, 0x9e, 0xfd, 0x5b, + 0xb6, 0x87, 0xff, 0xc6, + 0xb5, 0x87, 0xff, 0xda, 0xb5, 0x87, 0x45, 0xdd, 0x0c, 0xdb, 0xbf, 0xe6, + 0x5f, 0xf5, 0xfe, 0x8a, + 0x69, 0xe3, 0xd7, 0x6c, 0xa6, 0x55, 0x0b, 0x13, 0xdb, 0x56, 0x72, 0xaa, + 0x16, 0xe5, 0x06, 0xec, + 0x01, 0xf9, 0xfc, 0x60, 0xe1, 0x7b, 0x14, 0x4e, 0xa0, 0xc6, 0x5a, 0xeb, + 0x58, 0x3f, 0xcf, 0x58, + 0x5f, 0x0b, 0xab, 0x2e, 0x99, 0xcf, 0xdc, 0x54, 0xf0, 0x5c, 0x1c, 0x5d, + 0xa8, 0x5c, 0x9b, 0xdf, + 0xff, 0x0d, 0xf3, 0xef, 0x8d, 0xbf, 0x17, 0x17, 0xb3, 0xff, 0x62, 0xfc, + 0x17, 0xe7, 0xfa, 0xcf, + 0xc6, 0x7f, 0xe6, 0xd7, 0xdf, 0xd9, 0x66, 0xfc, 0x1d, 0x5b, 0xdb, 0xaf, + 0xcf, 0xcb, 0x0d, 0x95, + 0xef, 0xc2, 0xf7, 0x28, 0x7b, 0xf6, 0x49, 0xe3, 0x6b, 0x56, 0x0e, 0x29, + 0x4a, 0x5c, 0x6f, 0x23, + 0x26, 0x5d, 0xd8, 0x89, 0x56, 0x97, 0xe3, 0x8b, 0xaf, 0x79, 0x75, 0x1d, + 0xce, 0xbc, 0x95, 0xd3, + 0xcd, 0x83, 0xec, 0x48, 0x12, 0x5f, 0xbb, 0x0f, 0xb5, 0xec, 0x79, 0x94, + 0xef, 0x92, 0xf1, 0xf1, + 0x78, 0xdd, 0xf9, 0x70, 0x57, 0xde, 0xe4, 0xee, 0x7a, 0x7c, 0x2d, 0x28, + 0x1f, 0x2e, 0x8f, 0xf7, + 0x87, 0xf4, 0xa2, 0x87, 0xea, 0xc2, 0x55, 0x6b, 0x56, 0xbd, 0xcf, 0x95, + 0xf4, 0xa4, 0xd0, 0x02, + 0x5d, 0x08, 0x8b, 0xaf, 0x81, 0x1f, 0x96, 0xe6, 0xfe, 0xbb, 0x8e, 0x65, + 0xdd, 0x21, 0x7a, 0x4e, + 0x11, 0x39, 0x2f, 0x54, 0xfe, 0x7d, 0xc3, 0x7a, 0x36, 0x6a, 0x2d, 0x47, + 0xd7, 0xfd, 0xf1, 0x35, + 0x51, 0x97, 0x7c, 0x08, 0x75, 0x28, 0xd9, 0xc0, 0x67, 0xd4, 0x37, 0xcc, + 0xbf, 0x77, 0xed, 0xe1, + 0xd5, 0xfe, 0x65, 0x3b, 0xd8, 0xda, 0xc3, 0xab, 0xfd, 0xfb, 0x77, 0x4c, + 0x1b, 0xbf, 0x8e, 0xcc, + 0x79, 0x6d, 0x5e, 0x35, 0xb6, 0xed, 0xd1, 0x32, 0xfb, 0x5e, 0x38, 0xff, + 0x79, 0xa9, 0x37, 0xf5, + 0x39, 0xfb, 0x9d, 0x8c, 0x52, 0x9d, 0xb0, 0xe7, 0xa8, 0xed, 0xbb, 0xac, + 0xcf, 0xdc, 0x74, 0x71, + 0xf0, 0xc7, 0xf9, 0x16, 0x4a, 0x17, 0xb8, 0xef, 0x22, 0xd7, 0x85, 0xe0, + 0xaa, 0xf2, 0xff, 0x6a, + 0xfc, 0x57, 0x71, 0x71, 0xfb, 0x07, 0xf3, 0x1f, 0x0c, 0xeb, 0x32, 0xff, + 0x81, 0x3d, 0xbf, 0x31, + 0x75, 0x39, 0x16, 0x93, 0xda, 0xe2, 0x74, 0x15, 0xbc, 0xf1, 0x35, 0x6b, + 0xbe, 0x09, 0xfc, 0x1e, + 0xc4, 0x7c, 0x93, 0x94, 0x74, 0xbe, 0x89, 0x3f, 0xde, 0x1f, 0xda, 0xe3, + 0xb2, 0x50, 0xe5, 0x01, + 0xaf, 0x17, 0xef, 0xd7, 0xfc, 0x7e, 0xd8, 0x5d, 0xbf, 0xae, 0xfb, 0xe2, + 0x6b, 0xaa, 0x78, 0x7f, + 0x6c, 0xb5, 0xec, 0xd1, 0xe3, 0xfd, 0xa0, 0xeb, 0x50, 0xdf, 0x0a, 0xbe, + 0x8b, 0x24, 0xbe, 0x66, + 0xe5, 0x4d, 0x52, 0xdd, 0x22, 0x56, 0x17, 0x62, 0xae, 0x59, 0x55, 0x3e, + 0x1b, 0xd9, 0x6b, 0xf2, + 0x9c, 0xd7, 0x91, 0x3c, 0xbe, 0x06, 0xba, 0x5e, 0x3c, 0x2d, 0xd7, 0xaa, + 0x27, 0xf9, 0x5a, 0x68, + 0xcd, 0x56, 0xcc, 0x35, 0xab, 0x5c, 0x17, 0x8e, 0xd5, 0x39, 0xaf, 0xb5, + 0xd8, 0x36, 0xc4, 0xd7, + 0x86, 0xeb, 0x75, 0xc9, 0xf6, 0x9e, 0xf1, 0xe5, 0xc3, 0x0d, 0xe9, 0x0e, + 0xf6, 0xec, 0x61, 0x67, + 0xff, 0xf2, 0x0b, 0x55, 0x9b, 0x86, 0x8c, 0x6d, 0x87, 0x73, 0x5a, 0x56, + 0x33, 0x3d, 0x8a, 0xa7, + 0x4c, 0xff, 0x4e, 0x56, 0xf1, 0x3e, 0xd5, 0x19, 0x85, 0x9f, 0x17, 0xdc, + 0xf1, 0xb5, 0x35, 0x0e, + 0x3e, 0xf8, 0x2e, 0x5b, 0xfb, 0x61, 0xf1, 0x35, 0x27, 0xde, 0x1f, 0x72, + 0x5e, 0x78, 0xc6, 0x7c, + 0x96, 0xd9, 0x07, 0x8c, 0x0f, 0x8f, 0x3e, 0xd2, 0xfa, 0x40, 0xef, 0x59, + 0xe3, 0x59, 0x33, 0xc4, + 0x8e, 0x3e, 0xd4, 0x79, 0xdf, 0xac, 0xd8, 0xb8, 0x42, 0x1d, 0xaf, 0x67, + 0x2d, 0xa4, 0x79, 0x93, + 0x49, 0x76, 0x6d, 0xbe, 0x49, 0xcc, 0x9c, 0x6e, 0xae, 0x0b, 0x99, 0xeb, + 0xc7, 0xfb, 0xb9, 0x1f, + 0x06, 0x7b, 0x74, 0xe7, 0x62, 0x67, 0xdf, 0xf3, 0xbc, 0xbe, 0x5d, 0xf6, + 0xd6, 0x25, 0x0f, 0x73, + 0x6d, 0x5e, 0xc7, 0x6b, 0xc6, 0x50, 0xc7, 0x8b, 0xce, 0x79, 0xe1, 0xb8, + 0x1d, 0x29, 0xa8, 0xe3, + 0x05, 0xdf, 0x45, 0x1a, 0x5f, 0xab, 0xf0, 0xfa, 0x35, 0xae, 0x45, 0x93, + 0x54, 0xd3, 0xa3, 0xeb, + 0x57, 0xaf, 0x59, 0x65, 0xba, 0x90, 0xc1, 0xe9, 0xc2, 0x15, 0x62, 0xdb, + 0x56, 0x7c, 0x4d, 0xd4, + 0x25, 0xdb, 0xba, 0x6e, 0xcd, 0x66, 0x94, 0xc6, 0xd7, 0x1e, 0xa6, 0x9a, + 0x55, 0xdf, 0x3a, 0x80, + 0xae, 0x6f, 0x9e, 0xec, 0xd4, 0x9c, 0x9a, 0xad, 0xa7, 0x7c, 0xf1, 0xb5, + 0xc1, 0xbb, 0xdb, 0x6c, + 0x67, 0xc2, 0xbe, 0x35, 0x3e, 0x38, 0xfc, 0x48, 0xfb, 0x43, 0x47, 0xcf, + 0x76, 0x43, 0xf7, 0x70, + 0xef, 0xdd, 0x46, 0x15, 0x57, 0xcb, 0x5e, 0x47, 0xd6, 0xac, 0x22, 0x7a, + 0xdf, 0xf4, 0x4e, 0x89, + 0xe9, 0x1f, 0xcc, 0x3a, 0x4f, 0x4f, 0x32, 0x6d, 0xc8, 0x85, 0x44, 0x5d, + 0x93, 0x35, 0x9e, 0xcb, + 0x5d, 0x75, 0x7c, 0x0d, 0x0c, 0x1b, 0xeb, 0xac, 0x5e, 0xbf, 0xbe, 0x1f, + 0x1f, 0xef, 0x07, 0x5d, + 0x9f, 0x6c, 0x36, 0x79, 0xfe, 0x2b, 0x30, 0xbe, 0xb6, 0xaa, 0x4b, 0x8e, + 0x54, 0xc7, 0x1b, 0xa8, + 0x0b, 0x65, 0xf3, 0x51, 0x54, 0x1d, 0xef, 0x63, 0x57, 0xaa, 0xe3, 0x2d, + 0x30, 0xdf, 0x65, 0xd5, + 0x6f, 0xc2, 0x9e, 0x51, 0x01, 0xba, 0x0e, 0xba, 0x10, 0x56, 0x1b, 0x10, + 0x6f, 0x1d, 0x2f, 0xbb, + 0x5f, 0x45, 0xce, 0x0b, 0xbe, 0xc6, 0x60, 0xab, 0xf2, 0x7f, 0x2f, 0xab, + 0x87, 0xde, 0x67, 0xa3, + 0xa6, 0xe8, 0x37, 0xb1, 0xe2, 0x6b, 0xfd, 0xc7, 0x3b, 0xfe, 0xf3, 0xba, + 0x5c, 0x17, 0x5c, 0xeb, + 0x1f, 0x5a, 0xc7, 0x1b, 0xb4, 0x07, 0xca, 0xdd, 0x47, 0x43, 0xf5, 0xef, + 0x3b, 0x5a, 0xb2, 0x67, + 0xe3, 0x1b, 0xcd, 0xe7, 0x98, 0x7d, 0xc2, 0x80, 0x7e, 0x13, 0xf8, 0x3d, + 0x55, 0xfd, 0xf1, 0x35, + 0x57, 0x3e, 0x9c, 0xd7, 0x25, 0x5b, 0xe7, 0xf4, 0x74, 0x7c, 0x7b, 0x40, + 0x5d, 0xb3, 0x8a, 0x8c, + 0x61, 0x69, 0xf3, 0x32, 0x3f, 0x03, 0x84, 0xf7, 0x9b, 0xe4, 0x1b, 0xf0, + 0x9a, 0xc5, 0xb1, 0xa2, + 0xdf, 0x64, 0x18, 0xa5, 0x66, 0x35, 0x1b, 0x57, 0x6d, 0x5a, 0xab, 0x74, + 0xaa, 0x37, 0xdc, 0xdf, + 0x77, 0x9d, 0x78, 0x3f, 0x70, 0xf0, 0xf3, 0xdc, 0x77, 0xd9, 0xd9, 0x0b, + 0xac, 0x73, 0x70, 0xf2, + 0x26, 0xa9, 0x6e, 0x94, 0x3a, 0x5e, 0xed, 0x81, 0xae, 0x49, 0xbe, 0x03, + 0xb1, 0xf7, 0xca, 0xd1, + 0xcb, 0xbb, 0xaf, 0x18, 0xbd, 0xaa, 0xfd, 0x6d, 0xb3, 0xd7, 0x34, 0x5e, + 0x77, 0xf6, 0x2d, 0xec, + 0x5c, 0xf8, 0x92, 0xb7, 0x3c, 0x79, 0xf6, 0xe4, 0xc1, 0x13, 0xa7, 0x4f, + 0xd4, 0x5e, 0x77, 0xfc, + 0x7f, 0x1c, 0x6e, 0x9e, 0x56, 0x0e, 0x1e, 0x59, 0xbe, 0xaa, 0xfe, 0x78, + 0xef, 0xf1, 0xee, 0x63, + 0xe6, 0x63, 0x06, 0xbb, 0xd8, 0x8e, 0x82, 0xff, 0x5d, 0xed, 0x8c, 0xc7, + 0x7a, 0x8f, 0x1b, 0xff, + 0xe7, 0xf9, 0x4b, 0xf6, 0x5f, 0xdd, 0x7f, 0xac, 0xf3, 0x98, 0x69, 0x5b, + 0x99, 0xff, 0xb7, 0xd7, + 0x9b, 0x5f, 0x62, 0x7b, 0x1d, 0xfe, 0xf6, 0xa8, 0xf9, 0xd8, 0xf0, 0x35, + 0xed, 0x27, 0x8f, 0x5f, + 0x73, 0x08, 0x3f, 0x67, 0xc3, 0x7c, 0xc4, 0xf5, 0x33, 0xca, 0xec, 0xc9, + 0x78, 0x69, 0x8a, 0x7f, + 0x7b, 0xcc, 0x7c, 0xe5, 0xfc, 0x89, 0xc6, 0x13, 0xd3, 0x97, 0x37, 0xe1, + 0xef, 0x8f, 0x04, 0xbc, + 0xf7, 0x47, 0xe1, 0xa7, 0x07, 0xc4, 0xf5, 0x1e, 0x65, 0xef, 0xf1, 0x15, + 0xc3, 0x57, 0xb5, 0x5f, + 0x3d, 0x7d, 0x4d, 0xf3, 0xb5, 0xa7, 0xec, 0x5e, 0xb8, 0x0e, 0x3e, 0xba, + 0xf7, 0xe4, 0xe9, 0x13, + 0x07, 0xaf, 0x3b, 0x7e, 0xed, 0xe1, 0x6b, 0xe6, 0xff, 0xbc, 0x21, 0x74, + 0xbd, 0xd2, 0xb1, 0xef, + 0xc5, 0x7e, 0x0f, 0xa0, 0x0b, 0xaf, 0x9b, 0x3c, 0xde, 0x5a, 0xbd, 0xff, + 0x80, 0x57, 0x3e, 0xfa, + 0x47, 0xdd, 0xd7, 0x9d, 0x3e, 0x79, 0xf0, 0xca, 0xa3, 0xc7, 0xba, 0xf6, + 0x57, 0x3d, 0xca, 0x95, + 0xdb, 0xbe, 0x5b, 0xb8, 0xdf, 0x7b, 0xa6, 0xc9, 0x7c, 0x97, 0x27, 0x97, + 0xdf, 0x76, 0xb8, 0xfa, + 0x59, 0xab, 0xff, 0x2e, 0xcc, 0x10, 0x5e, 0xd2, 0x7c, 0xb7, 0xb1, 0x3d, + 0x7d, 0xb4, 0xe9, 0xfe, + 0x3a, 0x7b, 0x0d, 0x1e, 0x33, 0x1f, 0x37, 0x5e, 0x3e, 0x78, 0x25, 0xbb, + 0x97, 0x6f, 0x6d, 0x54, + 0x2f, 0x9e, 0xd8, 0x7f, 0xf2, 0x96, 0xf5, 0x39, 0xbb, 0xf5, 0xd2, 0xbd, + 0x2f, 0xf7, 0x3f, 0xd5, + 0xd9, 0x5a, 0x7e, 0xeb, 0xe1, 0xab, 0x47, 0xaf, 0x68, 0xbf, 0xfc, 0xe8, + 0xf1, 0xee, 0xe3, 0xec, + 0x5e, 0x1e, 0x9f, 0xfc, 0x4f, 0xcd, 0x97, 0x1c, 0xbf, 0xba, 0xe6, 0xfe, + 0x59, 0x8f, 0xf9, 0xd7, + 0x9f, 0x7d, 0xdd, 0xb7, 0x2f, 0x9f, 0x3c, 0x7c, 0xcd, 0xe8, 0xb1, 0xb6, + 0xff, 0xfe, 0x1e, 0x71, + 0x7f, 0x5f, 0xff, 0x95, 0x5d, 0xd8, 0x03, 0xff, 0x57, 0xef, 0x4b, 0x86, + 0xb1, 0xb6, 0xf2, 0x8f, + 0x38, 0x7f, 0x7f, 0xee, 0xe8, 0xf9, 0x0e, 0xc4, 0xb6, 0x3d, 0xdf, 0x6b, + 0xad, 0xc9, 0x1b, 0xd9, + 0x3a, 0xbc, 0xc0, 0x2e, 0xf8, 0x4a, 0x5e, 0xaf, 0x37, 0xcb, 0x36, 0x72, + 0xb3, 0xff, 0xb1, 0xf1, + 0x9a, 0xe5, 0x6b, 0xeb, 0x4f, 0xb0, 0xcf, 0x17, 0x7c, 0xc6, 0x9e, 0xbc, + 0xa8, 0xee, 0x55, 0x2e, + 0xfe, 0xe7, 0xfd, 0xef, 0x98, 0xbf, 0xa6, 0xfe, 0xea, 0xf1, 0xab, 0x5a, + 0x4f, 0x9c, 0xbc, 0xb6, + 0xf6, 0x72, 0x47, 0xd7, 0x1f, 0x0d, 0x5c, 0x3d, 0xd8, 0x03, 0x2f, 0x5b, + 0xbc, 0xb2, 0xfe, 0x88, + 0xb5, 0xee, 0xfe, 0x35, 0xe6, 0x9f, 0x4d, 0xf6, 0x79, 0xfc, 0x8e, 0x93, + 0x27, 0x6b, 0xdf, 0x36, + 0x78, 0xa4, 0xf3, 0xc8, 0xda, 0x57, 0x3d, 0x12, 0x3d, 0xe7, 0xe5, 0x65, + 0xd5, 0x4b, 0xfb, 0x4d, + 0x40, 0xbf, 0x77, 0x42, 0x78, 0x2e, 0x91, 0x6a, 0x56, 0x63, 0xcd, 0x79, + 0x95, 0x9a, 0xa5, 0x93, + 0x8c, 0xd2, 0x6f, 0x74, 0xaf, 0xc9, 0x86, 0x89, 0xe8, 0x41, 0x3c, 0xce, + 0x1e, 0x06, 0xc5, 0x1a, + 0x57, 0x79, 0x93, 0x62, 0x8d, 0x6b, 0xd1, 0x38, 0xd5, 0x0a, 0xad, 0xc5, + 0x7b, 0x91, 0xd6, 0x64, + 0xf7, 0xe2, 0xbf, 0x3d, 0x78, 0xc1, 0x15, 0xb3, 0x78, 0xe1, 0x68, 0xb7, + 0xfb, 0x8f, 0x07, 0x9f, + 0x6d, 0xbb, 0xe3, 0x18, 0xdf, 0xcd, 0x3e, 0xbb, 0x4f, 0x4e, 0x2e, 0x9b, + 0xee, 0x7f, 0x7b, 0xb6, + 0x77, 0x62, 0xc0, 0x9f, 0xaf, 0xe7, 0x3f, 0xe9, 0x69, 0xf6, 0xb7, 0x7b, + 0xc6, 0xbf, 0x61, 0x9f, + 0x67, 0x6f, 0x04, 0xe4, 0x59, 0xfe, 0x5f, 0x9f, 0x63, 0x7f, 0x33, 0xf8, + 0x7e, 0x70, 0xff, 0xb7, + 0x37, 0x5a, 0x1a, 0xf0, 0x9c, 0x73, 0xf6, 0xbb, 0xe4, 0xfa, 0x57, 0x36, + 0x5f, 0xf0, 0x7c, 0xdd, + 0x0b, 0x3e, 0xdd, 0x10, 0x9f, 0x6f, 0xf8, 0xb7, 0x47, 0x8f, 0xfe, 0xd7, + 0xb5, 0x78, 0xff, 0xa3, + 0x6c, 0xbf, 0xad, 0xbe, 0xf7, 0x9e, 0xf1, 0x4f, 0xc6, 0xf9, 0xd6, 0xb7, + 0x0e, 0xef, 0xb9, 0xee, + 0xe7, 0x1b, 0xc6, 0x4b, 0xd9, 0x19, 0xf1, 0x7f, 0x98, 0x7d, 0xae, 0xe1, + 0x7b, 0x37, 0x46, 0x71, + 0xd9, 0xaa, 0x87, 0xbf, 0xb2, 0xf0, 0x23, 0x9e, 0x19, 0x5c, 0x76, 0x5c, + 0xaf, 0xc1, 0xf7, 0x3a, + 0xfc, 0xcd, 0x3e, 0xbd, 0xc2, 0xfd, 0x9a, 0xb3, 0x9d, 0x86, 0x77, 0x2d, + 0x9e, 0x5e, 0x3b, 0xeb, + 0x1a, 0xa6, 0x61, 0x0c, 0x4f, 0x76, 0x6b, 0xff, 0xde, 0xf3, 0xf3, 0xde, + 0xb8, 0xd2, 0x46, 0xfb, + 0x15, 0xfa, 0xff, 0xaa, 0x5b, 0x9d, 0x5f, 0x36, 0x2e, 0x7b, 0x6f, 0x37, + 0x78, 0xde, 0xe4, 0x78, + 0x52, 0xbb, 0xec, 0x3f, 0xdf, 0xdd, 0x3d, 0x79, 0xfe, 0xd0, 0xfd, 0x75, + 0x9f, 0x9d, 0x7e, 0x53, + 0xf3, 0xc3, 0x7d, 0xf7, 0xcf, 0x12, 0x3f, 0xcd, 0x5e, 0xff, 0x47, 0x7d, + 0xf1, 0xa9, 0x17, 0x82, + 0x15, 0xd9, 0xb1, 0x26, 0xf3, 0xf9, 0xd8, 0xf7, 0xfa, 0xf4, 0xcf, 0xfe, + 0x69, 0xd6, 0x77, 0x1c, + 0xb1, 0xf7, 0x71, 0xfc, 0x8f, 0x0e, 0xbf, 0xe4, 0x7d, 0xc7, 0x7c, 0x4d, + 0xca, 0xec, 0xd3, 0xf1, + 0x28, 0xfc, 0xcd, 0x13, 0xd7, 0xf3, 0xbd, 0xca, 0xb0, 0xd1, 0xde, 0x3d, + 0x9b, 0x78, 0x3f, 0x37, + 0xfd, 0x5a, 0x07, 0xe2, 0x6b, 0x6f, 0xea, 0x5d, 0x1a, 0x41, 0xef, 0x16, + 0xe2, 0x7a, 0xcf, 0x1f, + 0x5d, 0x76, 0x8d, 0xb5, 0xd8, 0xf9, 0xd3, 0x6b, 0x9f, 0x9f, 0xcf, 0x9a, + 0x65, 0x23, 0xec, 0x13, + 0x25, 0x6a, 0x56, 0x8b, 0xd7, 0x98, 0x41, 0x29, 0x62, 0x4a, 0xb2, 0x3e, + 0x42, 0x3f, 0xcf, 0x25, + 0x52, 0x2d, 0xfb, 0x19, 0xbe, 0x66, 0x15, 0xc3, 0x69, 0x29, 0x2d, 0xd3, + 0x28, 0xfd, 0xbb, 0xfa, + 0x5c, 0x4e, 0xff, 0xfc, 0xe0, 0xd5, 0x2c, 0xf6, 0xb0, 0xf9, 0xc1, 0x91, + 0xfb, 0x7e, 0xb0, 0x4c, + 0x6a, 0x4c, 0xbc, 0x7f, 0xf9, 0xc1, 0x3a, 0x7c, 0x6e, 0xdc, 0xcf, 0xcf, + 0x67, 0xf9, 0x27, 0x89, + 0x9d, 0x27, 0xfa, 0xaf, 0xe8, 0xbc, 0xaa, 0x7f, 0xd9, 0xbd, 0x9c, 0xbe, + 0xac, 0xf9, 0xc4, 0xe4, + 0xb2, 0x75, 0x39, 0x79, 0xb2, 0xf9, 0xe4, 0xd9, 0x13, 0x07, 0xdf, 0x39, + 0xb9, 0xd7, 0xba, 0x1c, + 0xfc, 0xfb, 0xce, 0x3b, 0xd8, 0x67, 0xf0, 0x5e, 0xef, 0x7f, 0xe9, 0x32, + 0xf5, 0x33, 0xee, 0x31, + 0x2d, 0x82, 0x33, 0x8a, 0xd0, 0x01, 0xb0, 0xd7, 0x73, 0x25, 0x5a, 0xed, + 0x3f, 0xb1, 0xfb, 0x1e, + 0x9f, 0xbc, 0xae, 0xf9, 0xe4, 0xe2, 0xd5, 0xf5, 0x47, 0x9d, 0x1d, 0xe7, + 0xd7, 0x3f, 0xae, 0x6f, + 0xc6, 0x6b, 0x86, 0x97, 0x4c, 0xb3, 0xde, 0xbc, 0x76, 0x6a, 0x12, 0x5f, + 0xf9, 0x28, 0x68, 0x87, + 0x69, 0xf4, 0xff, 0x69, 0x07, 0xb4, 0xcc, 0xeb, 0x47, 0xac, 0x9e, 0xf6, + 0x4f, 0xf3, 0xcf, 0xfa, + 0x06, 0xbc, 0x0f, 0xa3, 0x35, 0x7b, 0x75, 0xe3, 0x95, 0xa3, 0x57, 0xb7, + 0x6a, 0x4c, 0x6b, 0xbe, + 0xb1, 0xd8, 0xad, 0x7f, 0x84, 0xe9, 0xc4, 0x33, 0x8b, 0x27, 0xea, 0x4f, + 0x9c, 0xbc, 0xae, 0xf6, + 0xda, 0x31, 0xbb, 0x37, 0xa6, 0x31, 0xff, 0x7a, 0x74, 0xd9, 0xbe, 0x67, + 0xbe, 0xde, 0x58, 0x9d, + 0x71, 0x25, 0xcf, 0xc6, 0xf3, 0xd7, 0xee, 0x3f, 0x6e, 0xbe, 0x60, 0x88, + 0x75, 0x7b, 0xc4, 0xc9, + 0x61, 0xb9, 0xf5, 0xaf, 0xc7, 0x9e, 0x8d, 0xf0, 0x6f, 0x6f, 0x76, 0x9d, + 0xc3, 0x02, 0xe3, 0xfd, + 0xe7, 0x2f, 0x73, 0xad, 0x99, 0x7d, 0x12, 0x35, 0xf8, 0x3b, 0x77, 0x4e, + 0x2b, 0x10, 0xd7, 0x03, + 0xfd, 0xe3, 0xab, 0x55, 0x36, 0xb5, 0x9e, 0xd9, 0xbd, 0xec, 0x7d, 0xc2, + 0x28, 0x4e, 0x3e, 0xd5, + 0xbc, 0x1c, 0x3c, 0xd3, 0x79, 0xd2, 0x3a, 0x4b, 0x3d, 0x72, 0xda, 0xac, + 0x5d, 0xf6, 0x3e, 0x67, + 0x7c, 0xfb, 0xe4, 0xd5, 0xcd, 0x57, 0x0e, 0x5e, 0xd1, 0x7e, 0xbc, 0xf7, + 0xcd, 0x3c, 0x0e, 0x23, + 0xd6, 0xbf, 0x6c, 0x82, 0x46, 0xbd, 0x99, 0x9d, 0x8b, 0x5e, 0xcb, 0xce, + 0x45, 0x70, 0x4e, 0xf7, + 0xbf, 0x1f, 0xf7, 0xab, 0xbe, 0x99, 0xad, 0xd9, 0x37, 0x46, 0xff, 0xba, + 0xe5, 0x56, 0x3b, 0x99, + 0xfe, 0x55, 0xe6, 0xcf, 0x36, 0xdc, 0x9f, 0xa1, 0xb5, 0x95, 0xf3, 0xc4, + 0xf5, 0x7c, 0xaf, 0xc2, + 0x9e, 0x51, 0xff, 0x72, 0x70, 0xd4, 0x81, 0xf7, 0xfd, 0xda, 0x93, 0x27, + 0x0e, 0x9f, 0x3c, 0x69, + 0xd5, 0xf8, 0x33, 0xea, 0xfc, 0xa5, 0x5c, 0x13, 0x5f, 0x33, 0x63, 0xf7, + 0x32, 0x7c, 0x45, 0xfb, + 0x6d, 0xec, 0xfd, 0x3c, 0x6b, 0x9d, 0x0d, 0xa0, 0xc7, 0xe5, 0x53, 0x2e, + 0xfd, 0xf3, 0xae, 0xb1, + 0xf5, 0xe9, 0x3d, 0x7a, 0x45, 0xf7, 0x09, 0x76, 0x4e, 0xff, 0x6f, 0xf8, + 0x1e, 0x10, 0xde, 0x8a, + 0xfd, 0xb5, 0xe5, 0xfb, 0x95, 0xf3, 0x62, 0x7e, 0x23, 0xd4, 0xcd, 0x6d, + 0x2e, 0x43, 0x78, 0x2e, + 0x90, 0x37, 0x79, 0x11, 0x6a, 0xd9, 0x21, 0xe7, 0x55, 0x5a, 0xa4, 0x9a, + 0x18, 0xfd, 0x8b, 0x25, + 0xde, 0xbf, 0xea, 0xfb, 0x3f, 0x74, 0xf7, 0xca, 0x07, 0xcd, 0x0f, 0x86, + 0xb3, 0xb7, 0xe0, 0x7c, + 0xc5, 0xd4, 0xf7, 0x83, 0x5d, 0x13, 0x88, 0xeb, 0x2d, 0x3e, 0x51, 0x0f, + 0xfb, 0x84, 0xf3, 0x4f, + 0x18, 0xd3, 0x3d, 0xae, 0x47, 0xa3, 0x62, 0x9b, 0xe7, 0x4d, 0x4e, 0x9e, + 0xa9, 0x5d, 0x8e, 0xbf, + 0xbb, 0xc5, 0xff, 0xb4, 0xce, 0x59, 0xff, 0xdb, 0x34, 0xdf, 0xac, 0x32, + 0x5d, 0xb0, 0x35, 0xcc, + 0x3e, 0x15, 0xae, 0xf4, 0x4f, 0x7c, 0xfe, 0x32, 0x93, 0x46, 0x73, 0x32, + 0xee, 0xb5, 0x0c, 0xfe, + 0x0a, 0xb0, 0x17, 0xbe, 0x24, 0xb4, 0x8c, 0x7f, 0xf5, 0xe5, 0x4a, 0x17, + 0xa6, 0x70, 0xde, 0x7c, + 0x2c, 0xd0, 0xf3, 0x7d, 0x84, 0x29, 0x1a, 0xd7, 0x0a, 0xa6, 0x0b, 0x6f, + 0x38, 0xdd, 0xaa, 0x79, + 0xcf, 0xcc, 0xaf, 0xb7, 0x7e, 0x9e, 0xc1, 0x9f, 0xfa, 0xcf, 0x5a, 0x7b, + 0xe4, 0x89, 0x99, 0x78, + 0xf6, 0xf1, 0x77, 0xd1, 0xcf, 0x76, 0x3f, 0xc1, 0xce, 0x16, 0xc3, 0xe5, + 0xce, 0x21, 0x7f, 0x5e, + 0x2f, 0x98, 0xb6, 0x4c, 0x9e, 0x68, 0x4d, 0xd8, 0x3d, 0x7e, 0x79, 0x30, + 0x6c, 0xf7, 0x07, 0x47, + 0xed, 0xde, 0x91, 0xd9, 0xfd, 0xe6, 0xa0, 0x7e, 0x13, 0x27, 0xae, 0xb7, + 0xb6, 0x4a, 0xec, 0x0e, + 0xc4, 0xeb, 0x82, 0xce, 0x1c, 0x2d, 0xab, 0x87, 0xee, 0x7f, 0x33, 0x82, + 0xd4, 0x14, 0x74, 0xe1, + 0xfc, 0x49, 0x6b, 0xcd, 0xde, 0xec, 0x7c, 0xa5, 0x77, 0x5d, 0x0c, 0xf3, + 0xf5, 0x10, 0xd7, 0x5b, + 0x5c, 0x36, 0xec, 0xd3, 0xcb, 0x23, 0xce, 0x73, 0x03, 0xde, 0xc3, 0x27, + 0x8c, 0xa3, 0x41, 0xbf, + 0x3d, 0x9c, 0x8c, 0x9a, 0xff, 0xe6, 0xf4, 0x0d, 0x5c, 0x3b, 0x26, 0xf3, + 0x49, 0x7d, 0x32, 0x9b, + 0x34, 0xc6, 0xb3, 0xff, 0xa7, 0x01, 0x7e, 0xd8, 0x27, 0x98, 0x76, 0x98, + 0xcc, 0x0f, 0xe3, 0xeb, + 0xd1, 0xeb, 0x19, 0xec, 0xbf, 0xd5, 0xd9, 0x1f, 0x46, 0x39, 0x40, 0xff, + 0xec, 0xa7, 0x51, 0xea, + 0xe8, 0xcb, 0xdd, 0x6f, 0x0c, 0xff, 0xf7, 0xb6, 0x42, 0xff, 0x0c, 0xd0, + 0xbf, 0xad, 0xc9, 0x49, + 0x13, 0xde, 0x97, 0xe1, 0xd8, 0xa3, 0x21, 0xf5, 0x7a, 0xee, 0x57, 0xd9, + 0x60, 0x77, 0x79, 0x8f, + 0x3f, 0xcd, 0xe0, 0xdf, 0x32, 0xa0, 0x0b, 0x6c, 0x6d, 0xbf, 0xdc, 0xbb, + 0xd7, 0xb5, 0x7d, 0x09, + 0x3b, 0xbe, 0x36, 0x1e, 0x5e, 0x76, 0x3e, 0x39, 0xca, 0xb7, 0x21, 0x6f, + 0x02, 0xfd, 0x76, 0x9f, + 0xea, 0xad, 0xf4, 0xcf, 0xbb, 0xc6, 0xd6, 0xfb, 0x0b, 0xe0, 0xb2, 0xbb, + 0x9f, 0x51, 0xf7, 0x85, + 0x5d, 0x63, 0xc5, 0xb0, 0xf8, 0xe7, 0x31, 0x88, 0xe7, 0xe2, 0xee, 0x37, + 0x39, 0x57, 0xf4, 0x9b, + 0x58, 0xbd, 0x6f, 0x71, 0xf1, 0x97, 0x21, 0xb6, 0x5d, 0x9a, 0x6b, 0x28, + 0xfd, 0x8b, 0xb4, 0x26, + 0x23, 0xdc, 0x5c, 0x4e, 0x7d, 0x92, 0x6b, 0x86, 0xd6, 0x25, 0x2f, 0xcb, + 0x87, 0xd5, 0x63, 0xbd, + 0xb6, 0x11, 0x07, 0xe7, 0x0b, 0xbd, 0x26, 0xd5, 0x43, 0xac, 0xfe, 0xbd, + 0xda, 0xe7, 0x57, 0xbd, + 0x63, 0x5a, 0x6a, 0x42, 0xed, 0x1d, 0xf7, 0x05, 0x99, 0x16, 0xf2, 0x7e, + 0x93, 0x8b, 0xd7, 0xed, + 0x7b, 0xfd, 0x91, 0xe7, 0x5c, 0x3f, 0x4f, 0xe8, 0x9f, 0xbe, 0x7c, 0x69, + 0xfd, 0x1b, 0xa6, 0xf0, + 0x6b, 0xd6, 0x3d, 0xae, 0xcb, 0x95, 0x2e, 0xcc, 0x64, 0xfa, 0xf7, 0x18, + 0x7f, 0x4f, 0x76, 0xbc, + 0xff, 0x49, 0xe6, 0x5f, 0x78, 0xd5, 0xd1, 0xfd, 0xd3, 0xbe, 0xc4, 0x77, + 0x04, 0xfc, 0xed, 0x75, + 0x13, 0xf1, 0xbb, 0xb7, 0x4f, 0x99, 0xe2, 0x3d, 0x59, 0x75, 0xc9, 0x43, + 0xb8, 0x87, 0xd7, 0x72, + 0xfd, 0x73, 0x7f, 0xf7, 0xa7, 0x26, 0xc5, 0xa6, 0xbf, 0x2e, 0x59, 0x73, + 0x98, 0x56, 0xeb, 0xfa, + 0xe7, 0xb6, 0xc1, 0xf1, 0xae, 0xc7, 0x37, 0x7d, 0xb3, 0xac, 0x8e, 0xf7, + 0xc2, 0xd6, 0xbf, 0x95, + 0xe7, 0xee, 0x5d, 0x97, 0x2f, 0x99, 0x55, 0xa8, 0xd7, 0xe3, 0xfa, 0xf7, + 0x7a, 0xae, 0xe9, 0xf7, + 0xf8, 0x19, 0xc7, 0xd6, 0x3f, 0x27, 0xd6, 0xc0, 0xcf, 0x0b, 0xb7, 0x07, + 0xde, 0xdf, 0xd3, 0xcb, + 0xd8, 0xe7, 0x0d, 0x7c, 0xc5, 0xd1, 0xbc, 0x58, 0xff, 0xe7, 0x83, 0x7b, + 0xed, 0xf5, 0xe8, 0x84, + 0xdc, 0xff, 0xfd, 0xee, 0x79, 0xae, 0xae, 0xd4, 0x3f, 0xe6, 0x87, 0x83, + 0x2e, 0xbc, 0x10, 0xb0, + 0xee, 0xc1, 0xf1, 0x7e, 0xff, 0xab, 0xbc, 0x31, 0xe0, 0x95, 0x0d, 0x23, + 0xc5, 0x7c, 0x0f, 0xf8, + 0x9b, 0x1d, 0x5f, 0x83, 0xdf, 0xcd, 0xf3, 0x50, 0xd3, 0x65, 0xf5, 0x9b, + 0xc0, 0xf9, 0xaf, 0xd7, + 0x4f, 0x77, 0xd6, 0xd7, 0xd8, 0x7a, 0x7f, 0x01, 0x7b, 0x20, 0x48, 0xff, + 0x22, 0xe6, 0xbc, 0xb0, + 0x8c, 0x8a, 0xeb, 0xf1, 0x5c, 0xee, 0x47, 0xcd, 0xea, 0x69, 0xb5, 0x56, + 0x9c, 0x6a, 0x28, 0xf6, + 0xd5, 0xfd, 0xe4, 0xf9, 0xf0, 0xf9, 0xc1, 0x01, 0x7d, 0xff, 0x95, 0xdb, + 0xa2, 0x57, 0x7e, 0x73, + 0x16, 0xd6, 0x6f, 0x12, 0xff, 0x9a, 0x94, 0x67, 0xcf, 0x35, 0x30, 0xfa, + 0xf7, 0x4a, 0xf6, 0x79, + 0xbb, 0x74, 0x3d, 0xe1, 0xcb, 0x56, 0xfd, 0xda, 0x2b, 0xe0, 0xdf, 0x27, + 0x5b, 0x2d, 0xae, 0xeb, + 0xb7, 0x9e, 0xdc, 0x83, 0xcf, 0x18, 0x3f, 0x7b, 0x4c, 0x47, 0xcd, 0xcf, + 0xb2, 0x33, 0xd6, 0xff, + 0x3b, 0xc8, 0xb4, 0x45, 0x0c, 0xe9, 0x31, 0xae, 0x79, 0xa2, 0xbe, 0xff, + 0xb1, 0xe6, 0x6a, 0x9f, + 0xaf, 0xfb, 0xbf, 0x5c, 0x17, 0xb8, 0xbf, 0x17, 0xa4, 0x7f, 0x8f, 0x30, + 0xa5, 0x10, 0x67, 0x0d, + 0x73, 0xfa, 0x4d, 0x8d, 0x37, 0x2c, 0xf3, 0x9e, 0x98, 0xcc, 0x0b, 0xeb, + 0x9f, 0x71, 0xfe, 0xba, + 0xdf, 0x31, 0x12, 0x67, 0x66, 0xaf, 0xfe, 0xb9, 0xee, 0xb1, 0xff, 0xaa, + 0x0e, 0xec, 0xb1, 0x4f, + 0x32, 0x5d, 0x87, 0x7b, 0x79, 0xc9, 0xfc, 0x1b, 0x75, 0x5b, 0xd7, 0x3d, + 0x75, 0xc9, 0x0b, 0xbb, + 0x3f, 0x7f, 0x5d, 0xff, 0xdc, 0xfe, 0x2f, 0xc4, 0xf5, 0x82, 0xf6, 0xdb, + 0xda, 0x39, 0xdd, 0x7a, + 0x66, 0x78, 0xd7, 0xc0, 0x7b, 0x46, 0xe2, 0x39, 0xaf, 0x85, 0x58, 0x0f, + 0x91, 0x25, 0xba, 0x74, + 0xe9, 0x9f, 0xe1, 0x79, 0x1e, 0xf3, 0x67, 0xa3, 0xc5, 0x73, 0x39, 0x67, + 0xbf, 0x9b, 0x2f, 0xcf, + 0x2b, 0xf5, 0xe7, 0xfb, 0x97, 0xdd, 0x09, 0x5b, 0x77, 0xbb, 0xdf, 0x04, + 0xea, 0x72, 0xfe, 0x19, + 0xd7, 0xc2, 0x37, 0x19, 0xee, 0x38, 0x8c, 0xfb, 0xd4, 0xd9, 0x1b, 0x37, + 0x5a, 0xb0, 0x07, 0xc2, + 0xf5, 0xcf, 0xe4, 0xfa, 0xe7, 0xd7, 0x85, 0x17, 0xfc, 0xd1, 0x4e, 0x0f, + 0xbb, 0xc6, 0x7b, 0xb6, + 0x7d, 0xb3, 0xeb, 0x95, 0x8f, 0xc6, 0x93, 0xd6, 0x64, 0x64, 0xb6, 0xee, + 0xf1, 0x33, 0xa1, 0xbd, + 0x16, 0x22, 0x1f, 0x7e, 0xc4, 0xee, 0xe5, 0x53, 0xec, 0x7c, 0x68, 0xc7, + 0xd7, 0x40, 0xd3, 0x27, + 0x27, 0x65, 0xbe, 0xc6, 0xaf, 0x1e, 0xeb, 0xad, 0x55, 0xbf, 0x89, 0xf5, + 0x64, 0x0b, 0xd8, 0x03, + 0x41, 0xbf, 0x8f, 0xdc, 0x83, 0x65, 0xd7, 0xf0, 0x5a, 0x5c, 0x76, 0x7e, + 0xdd, 0x07, 0x1f, 0x50, + 0xca, 0x73, 0x81, 0xbc, 0xc9, 0x20, 0xdb, 0x41, 0xe5, 0xc2, 0x23, 0x70, + 0x5a, 0x0a, 0xaa, 0xf3, + 0xab, 0xa7, 0x3f, 0x5f, 0x5d, 0xdf, 0x7f, 0xcd, 0x35, 0x51, 0xf5, 0x9b, + 0x78, 0x79, 0x2e, 0x76, + 0x5c, 0xef, 0x6e, 0x7c, 0x4c, 0x6a, 0xc1, 0xed, 0x38, 0x69, 0xc1, 0x5e, + 0x72, 0x2b, 0xdb, 0x89, + 0xe9, 0xfe, 0x17, 0xe6, 0x51, 0xcd, 0xbe, 0xa5, 0xf1, 0x72, 0x1e, 0x8b, + 0x0e, 0x3a, 0x8d, 0x89, + 0x4f, 0x69, 0x06, 0x74, 0xe1, 0xec, 0x35, 0xdc, 0x67, 0xb1, 0xef, 0x85, + 0x3f, 0xb3, 0xd9, 0xde, + 0x85, 0x67, 0xf5, 0x60, 0xfc, 0x4f, 0x5b, 0x10, 0x87, 0x1b, 0x4e, 0x27, + 0x8d, 0x61, 0xff, 0xe9, + 0x8e, 0x88, 0xcc, 0x49, 0xf4, 0x0f, 0x74, 0x41, 0xaa, 0x7f, 0x1b, 0x4e, + 0xf6, 0xf9, 0x5f, 0xce, + 0xbf, 0xa5, 0xfe, 0xe8, 0xb1, 0x7e, 0xe8, 0xff, 0x8c, 0x3f, 0xed, 0xde, + 0x5d, 0x4c, 0x0b, 0x3e, + 0xc7, 0xde, 0xfb, 0x3b, 0x8f, 0x8c, 0xae, 0xed, 0x65, 0xc3, 0x2b, 0xfb, + 0xef, 0xf1, 0xde, 0xe0, + 0x9f, 0x75, 0x5e, 0x32, 0xbf, 0xc7, 0x5e, 0xf3, 0xc4, 0x34, 0x7a, 0x66, + 0xf7, 0x8c, 0x7d, 0xcf, + 0xbd, 0xf1, 0xbf, 0x68, 0xdd, 0x19, 0x3d, 0xdf, 0xf2, 0xf4, 0x9b, 0x40, + 0xbf, 0xf9, 0xd9, 0xe6, + 0x41, 0x76, 0xf0, 0x89, 0x0e, 0x9c, 0x53, 0xec, 0x67, 0x94, 0x5f, 0xff, + 0x46, 0xa7, 0x42, 0xff, + 0x9e, 0xf6, 0xed, 0xf4, 0xb5, 0x7a, 0xbd, 0xf3, 0x7f, 0xb1, 0x7f, 0xcf, + 0xbc, 0x74, 0xc5, 0x00, + 0x5e, 0x58, 0xf3, 0x7f, 0x8f, 0x66, 0x2f, 0x6d, 0xb8, 0xd7, 0xe3, 0x69, + 0x8f, 0xfe, 0xd9, 0x77, + 0x61, 0x1a, 0xe3, 0xd3, 0x97, 0xd4, 0xfe, 0x55, 0xdf, 0xe8, 0xb8, 0xfd, + 0x7f, 0xa3, 0x97, 0xea, + 0x82, 0xff, 0x3b, 0x98, 0x95, 0x1a, 0x3b, 0x27, 0xcd, 0x1a, 0xf7, 0x8d, + 0xd9, 0x75, 0x97, 0x9d, + 0x79, 0xef, 0x4d, 0xff, 0xfb, 0x26, 0xe7, 0xb9, 0x58, 0x75, 0x4e, 0xec, + 0x55, 0x8d, 0xe7, 0x7c, + 0xb1, 0xed, 0xe7, 0xcc, 0xb0, 0x4f, 0xc7, 0x73, 0xc6, 0xe5, 0xf0, 0x6e, + 0x07, 0xf6, 0xc0, 0xeb, + 0x5d, 0x5f, 0x73, 0xcf, 0xa7, 0x33, 0xde, 0x3d, 0xe0, 0xd5, 0x76, 0xf7, + 0xbf, 0x71, 0x76, 0xcd, + 0x4c, 0x6b, 0x08, 0x05, 0x7b, 0xc4, 0x5c, 0xad, 0x8b, 0xc1, 0xef, 0xf4, + 0xa4, 0x57, 0x31, 0xcc, + 0x7e, 0xbf, 0x03, 0xcf, 0xd7, 0x2f, 0xb3, 0xdf, 0xcf, 0x1b, 0x98, 0xde, + 0xc3, 0x4a, 0x3c, 0xc3, + 0x3e, 0x53, 0x93, 0xe9, 0xb8, 0x31, 0x1a, 0xd7, 0x9a, 0xf9, 0xd1, 0x19, + 0xd3, 0xf5, 0xe7, 0x0c, + 0x73, 0x38, 0x6a, 0x4f, 0x26, 0xfd, 0xa6, 0x3b, 0xee, 0x10, 0xa0, 0x7f, + 0xb1, 0xd5, 0xb2, 0xe3, + 0xd9, 0x35, 0xbc, 0xe7, 0xf4, 0xa0, 0x34, 0x81, 0x9a, 0x2d, 0x09, 0xcf, + 0x85, 0xe7, 0x4d, 0x36, + 0xf9, 0x59, 0x57, 0x1f, 0xb2, 0xfd, 0x1f, 0x52, 0xb3, 0xc5, 0x6b, 0xd9, + 0x91, 0xec, 0x9a, 0x9c, + 0xea, 0xac, 0x16, 0x69, 0x4d, 0x70, 0xdc, 0x0e, 0x54, 0xac, 0x93, 0x9d, + 0x25, 0x39, 0xe7, 0xeb, + 0xa4, 0x78, 0x18, 0x5a, 0x97, 0xcc, 0x9e, 0xe9, 0xf7, 0xa3, 0xbe, 0xff, + 0x69, 0x9f, 0x37, 0x62, + 0xef, 0x30, 0x3b, 0xb6, 0xf7, 0x52, 0xf6, 0xac, 0x7a, 0xdc, 0x54, 0xe8, + 0x1f, 0xaf, 0x0f, 0x78, + 0x39, 0xf7, 0xf9, 0x6c, 0x9e, 0xcb, 0x90, 0xf9, 0xcc, 0xcf, 0x33, 0x3f, + 0x90, 0x9f, 0x3f, 0x4e, + 0xab, 0x07, 0x2f, 0x9d, 0xde, 0x6b, 0xae, 0xf2, 0xcc, 0xd5, 0xae, 0xd6, + 0x33, 0xba, 0x81, 0xfa, + 0x07, 0xba, 0xb0, 0x90, 0xeb, 0x9f, 0x5d, 0xf5, 0xf0, 0x8a, 0xc5, 0xb7, + 0xd4, 0xfd, 0xf5, 0xfd, + 0x7e, 0x3f, 0xf4, 0xe9, 0xa3, 0x54, 0xf7, 0x9b, 0xe6, 0xbf, 0xd2, 0x58, + 0xcf, 0xfe, 0x3d, 0xed, + 0xcd, 0x57, 0xc2, 0x19, 0xc5, 0xd2, 0x6f, 0xdb, 0x5e, 0x2f, 0x74, 0xd2, + 0x08, 0xea, 0x37, 0xa9, + 0x2c, 0x9f, 0x3f, 0xbc, 0x1c, 0x0c, 0x3b, 0x76, 0xfd, 0x9a, 0xb5, 0xb7, + 0x0c, 0x5b, 0xff, 0xc6, + 0x67, 0xbb, 0xb5, 0xf5, 0x8c, 0x68, 0x40, 0x1d, 0x2f, 0xd3, 0x05, 0x77, + 0xce, 0x5a, 0xbc, 0x3b, + 0xaf, 0x3f, 0xf8, 0x8e, 0x65, 0xf5, 0x70, 0xc7, 0x13, 0x0f, 0x7d, 0x63, + 0x80, 0xff, 0x7b, 0x69, + 0xfe, 0x7f, 0xa7, 0x2f, 0xab, 0xdd, 0x33, 0xbd, 0x39, 0x53, 0xf7, 0x89, + 0xed, 0x69, 0xcf, 0x7f, + 0xbb, 0x34, 0x41, 0x3f, 0xdc, 0x7e, 0xd8, 0x80, 0xfd, 0x9e, 0x3e, 0x71, + 0x94, 0xe9, 0x80, 0xef, + 0x61, 0xc5, 0xb6, 0x5b, 0xcf, 0xad, 0xf9, 0xaa, 0xde, 0x95, 0x7b, 0x86, + 0x9d, 0x73, 0xd3, 0x47, + 0x6f, 0xec, 0x7a, 0x57, 0xfd, 0x24, 0xa4, 0x8e, 0x57, 0xaa, 0x7f, 0x4e, + 0xbc, 0x7f, 0x95, 0xaf, + 0xbe, 0xb7, 0x96, 0x3f, 0x77, 0x6a, 0x08, 0x7a, 0x6f, 0x32, 0xa0, 0x2e, + 0xd9, 0xfd, 0xaa, 0xdf, + 0x98, 0xbd, 0xac, 0x01, 0xe7, 0xf5, 0x77, 0xb9, 0x62, 0x35, 0x6f, 0x72, + 0xf9, 0x51, 0xeb, 0xfa, + 0x87, 0x8e, 0x61, 0xc5, 0xcf, 0xae, 0x71, 0x9f, 0x99, 0x7d, 0x3c, 0x17, + 0x2f, 0x23, 0xd8, 0xca, + 0x15, 0x4c, 0xd6, 0x79, 0x2e, 0x4e, 0x0c, 0x4b, 0xd5, 0xe3, 0x62, 0xf9, + 0xaa, 0x59, 0xcc, 0xdc, + 0xcb, 0x08, 0xf5, 0xfd, 0xbb, 0x31, 0x72, 0x3b, 0x56, 0xbe, 0x8b, 0x8c, + 0xe7, 0x02, 0x6b, 0xb1, + 0x75, 0x00, 0x31, 0x0d, 0x55, 0xbf, 0x89, 0xe0, 0x76, 0xc4, 0xe3, 0xbf, + 0xaf, 0xe2, 0xfd, 0x6f, + 0xb4, 0x2a, 0xb9, 0xd6, 0xab, 0x78, 0xef, 0x99, 0x32, 0x56, 0xfd, 0x9b, + 0x8d, 0x0f, 0x0c, 0xf4, + 0x8e, 0xa2, 0xdf, 0x64, 0xad, 0xef, 0x9f, 0xeb, 0xc2, 0xd9, 0xb7, 0xd7, + 0x5e, 0x08, 0xf7, 0x1e, + 0x63, 0x65, 0xd7, 0x70, 0x56, 0xfd, 0xf9, 0xfa, 0x99, 0xf9, 0x51, 0x6b, + 0xcf, 0xdb, 0xfd, 0x26, + 0xf0, 0x9c, 0x82, 0xcf, 0x64, 0xf5, 0xf8, 0xf9, 0xc3, 0xc9, 0xe9, 0x4b, + 0x0e, 0xd6, 0x78, 0x2e, + 0x70, 0x5e, 0xb7, 0x7c, 0x97, 0x54, 0x2c, 0x75, 0xbc, 0xa2, 0xbe, 0x1f, + 0x57, 0xc7, 0x5b, 0x55, + 0x3e, 0x1b, 0x79, 0x1d, 0x2f, 0x3b, 0xa3, 0x04, 0xf5, 0x9b, 0x4c, 0xa6, + 0x1f, 0x6e, 0x7c, 0xcb, + 0xad, 0x0a, 0xef, 0xfb, 0xe7, 0x35, 0xab, 0xab, 0x7e, 0x93, 0xd0, 0xd8, + 0x76, 0x34, 0x26, 0xb5, + 0xc1, 0x3c, 0xf8, 0x47, 0xd6, 0xf4, 0xef, 0xd9, 0xde, 0x37, 0xaf, 0xf6, + 0x40, 0x44, 0x76, 0xcd, + 0x1a, 0xcf, 0xc5, 0x3a, 0xaf, 0xfb, 0xfb, 0x4d, 0xee, 0x99, 0x6f, 0xf4, + 0xf6, 0xfd, 0xdf, 0x0f, + 0x26, 0xb5, 0xe0, 0xe5, 0x5c, 0xbd, 0x36, 0xcd, 0xce, 0x9b, 0xb8, 0xfb, + 0x4d, 0x02, 0x79, 0x2e, + 0x22, 0x6f, 0x12, 0xa5, 0xc7, 0x25, 0xc0, 0x6f, 0x34, 0xae, 0x15, 0xd7, + 0x43, 0xd4, 0xc8, 0xa0, + 0xe6, 0x72, 0x4a, 0xfa, 0x7e, 0x3c, 0xfd, 0x26, 0xb7, 0x71, 0x3c, 0x97, + 0xe8, 0xf5, 0xfd, 0x18, + 0x5d, 0x10, 0xbe, 0x4b, 0x59, 0xda, 0xc9, 0x20, 0x67, 0xd5, 0x97, 0x3d, + 0xfd, 0x26, 0x85, 0x26, + 0xd4, 0x07, 0xa8, 0xfa, 0x4d, 0x56, 0x7e, 0x44, 0x59, 0xa5, 0x0b, 0x07, + 0x28, 0xa6, 0x55, 0x0c, + 0x8c, 0x0a, 0xdb, 0x44, 0x7f, 0x3e, 0xf3, 0x5d, 0x46, 0xff, 0x38, 0x98, + 0xe7, 0x62, 0xd5, 0x39, + 0x54, 0x81, 0x0f, 0xad, 0xe8, 0x37, 0x89, 0xc2, 0xb4, 0xc2, 0xb2, 0x6b, + 0xa2, 0x33, 0x2a, 0x56, + 0xfd, 0x26, 0xff, 0x9d, 0xa7, 0x3f, 0xdc, 0xea, 0x37, 0x39, 0x09, 0xe1, + 0x2f, 0x46, 0xd2, 0x05, + 0xfb, 0x8c, 0x52, 0x0e, 0xfe, 0x04, 0xc5, 0x13, 0xdb, 0x76, 0xea, 0x92, + 0xb7, 0x2e, 0xd6, 0xfb, + 0x4d, 0xbe, 0xe9, 0xd4, 0xd7, 0x6f, 0x62, 0xf5, 0xa2, 0x2b, 0xb9, 0x6e, + 0x91, 0xd8, 0x35, 0xf1, + 0xcc, 0x6b, 0xd0, 0xa6, 0x3b, 0x7c, 0xdf, 0xa9, 0xfa, 0x4d, 0xc0, 0x57, + 0x2d, 0x89, 0xdc, 0x9e, + 0x11, 0xf5, 0xd9, 0x08, 0x0c, 0x04, 0xd0, 0x0e, 0xcf, 0xf3, 0x6b, 0xa5, + 0x0b, 0x9d, 0xf8, 0xd6, + 0xe4, 0xfa, 0x3c, 0x1f, 0xc8, 0x9b, 0xe4, 0x8e, 0x77, 0x78, 0xbf, 0x89, + 0x94, 0xe7, 0x62, 0xe5, + 0x4d, 0xe2, 0x60, 0xd5, 0x47, 0xd3, 0x05, 0x2c, 0xb7, 0x43, 0xe7, 0xe7, + 0x85, 0xf4, 0x40, 0xf4, + 0x87, 0x06, 0xf1, 0x5c, 0x80, 0x83, 0x0f, 0xcf, 0xbe, 0xea, 0xa9, 0xaa, + 0x57, 0x1e, 0xd9, 0xe3, + 0x32, 0xba, 0x52, 0x7d, 0x3f, 0x3e, 0x0f, 0xe8, 0xe7, 0xb9, 0xac, 0xcd, + 0x37, 0x29, 0xc8, 0xe6, + 0x9b, 0x5c, 0x8d, 0x55, 0x7f, 0xcd, 0x9c, 0x17, 0x8f, 0xf7, 0xcb, 0x18, + 0x15, 0x2e, 0x0e, 0xbe, + 0xe3, 0xeb, 0x4b, 0x78, 0x2e, 0xa0, 0xeb, 0x7c, 0x0f, 0x20, 0xe2, 0xcc, + 0x38, 0x76, 0x4d, 0x16, + 0x59, 0xb3, 0x8a, 0x62, 0xd7, 0x98, 0x3c, 0x86, 0xb5, 0x80, 0x7e, 0x93, + 0x90, 0xf9, 0x26, 0x4c, + 0xd7, 0x2b, 0xb7, 0x2b, 0x7b, 0x19, 0xc5, 0x5e, 0x8f, 0x77, 0x0f, 0xe4, + 0x50, 0xbd, 0x6f, 0x22, + 0xae, 0xe7, 0xf4, 0x79, 0xf1, 0x5c, 0x01, 0xe8, 0xba, 0x9f, 0x83, 0xcf, + 0xfb, 0x4d, 0xce, 0x14, + 0xfd, 0x26, 0x12, 0x2e, 0x3b, 0x67, 0x21, 0x2c, 0xf5, 0xa6, 0xcd, 0xc1, + 0xe7, 0x7e, 0xd8, 0x40, + 0x70, 0xbe, 0x52, 0x6a, 0xe6, 0x56, 0xfd, 0x41, 0xd7, 0xeb, 0xa5, 0xb8, + 0xef, 0xa2, 0xd7, 0xfc, + 0xf3, 0x83, 0xfd, 0xfd, 0x26, 0x96, 0xef, 0x12, 0xde, 0x6f, 0x82, 0x64, + 0xd5, 0x5f, 0x39, 0xa6, + 0xa1, 0x60, 0x5a, 0xad, 0xf1, 0x5c, 0x3c, 0xf9, 0xf0, 0x5d, 0x3e, 0x77, + 0x62, 0x5b, 0xc6, 0x73, + 0x71, 0xf5, 0xe7, 0xe7, 0xe2, 0x64, 0x52, 0x63, 0x79, 0xbc, 0x92, 0xfd, + 0xe2, 0xcc, 0x37, 0x39, + 0xf5, 0xf9, 0x2e, 0x6e, 0x9e, 0x8b, 0xeb, 0xbc, 0x0e, 0xf1, 0x7e, 0xf5, + 0x79, 0x21, 0xf3, 0x22, + 0xb0, 0x6b, 0xb2, 0xbc, 0xf7, 0x2d, 0x37, 0xc9, 0x35, 0x65, 0x3c, 0x17, + 0x9e, 0x37, 0x59, 0x6c, + 0xdb, 0xb1, 0x6d, 0xe3, 0x81, 0xd5, 0xac, 0x2e, 0xaf, 0xc0, 0xaa, 0xb7, + 0x74, 0x7d, 0x9d, 0x61, + 0x52, 0xe1, 0x3e, 0xf2, 0x3a, 0xcf, 0xe5, 0x81, 0xec, 0x01, 0x04, 0xd3, + 0x2a, 0xe8, 0x79, 0xec, + 0xe2, 0xe0, 0x23, 0xfb, 0x4d, 0x36, 0xc6, 0xc1, 0x7b, 0x00, 0x18, 0x08, + 0x9c, 0x05, 0x63, 0x71, + 0xf0, 0xed, 0x58, 0x23, 0x70, 0xbe, 0x32, 0x92, 0xb5, 0xf0, 0xae, 0xc9, + 0x83, 0x9e, 0x41, 0xe9, + 0xe7, 0xf9, 0x48, 0x78, 0x2e, 0xe0, 0xbb, 0x5c, 0xc8, 0x79, 0x2e, 0x32, + 0x6e, 0xc7, 0xb5, 0x75, + 0xe1, 0x7a, 0x33, 0x28, 0x1d, 0x0e, 0xbe, 0xa7, 0x57, 0x3e, 0x88, 0xe7, + 0x02, 0xba, 0x7e, 0x84, + 0x65, 0xdd, 0x05, 0xc7, 0xf5, 0xae, 0xa3, 0x0b, 0xca, 0x5e, 0xf9, 0x99, + 0xf0, 0x5d, 0xa4, 0x3c, + 0x17, 0xab, 0xef, 0xdf, 0xf2, 0x5d, 0xc2, 0x7b, 0xe5, 0x6d, 0x5d, 0x88, + 0x93, 0x3d, 0x8b, 0x8c, + 0xf7, 0xdb, 0xef, 0x2b, 0x90, 0xe7, 0x62, 0xcd, 0x37, 0x81, 0xcf, 0x2d, + 0xf8, 0x61, 0xfa, 0x48, + 0x52, 0xb3, 0x85, 0x65, 0xd5, 0xa3, 0x99, 0xd4, 0x88, 0x78, 0x7f, 0x18, + 0xbb, 0xc6, 0xcd, 0xc1, + 0xbf, 0xa8, 0xec, 0x05, 0xf2, 0x5c, 0x7c, 0x75, 0xc9, 0xb9, 0x17, 0x69, + 0x0e, 0xab, 0x32, 0x86, + 0xd5, 0x17, 0x71, 0xe6, 0xe2, 0x71, 0x40, 0xbf, 0x89, 0x9b, 0x83, 0x3f, + 0xdb, 0x0a, 0x7e, 0x36, + 0xf6, 0x20, 0xf6, 0x91, 0xea, 0xda, 0x1c, 0x7c, 0xe7, 0xec, 0x01, 0xbe, + 0x4b, 0x48, 0x7c, 0x6d, + 0xc3, 0x7c, 0xb1, 0x66, 0xd3, 0x86, 0xc4, 0xfb, 0x5d, 0x73, 0x26, 0xab, + 0x77, 0x76, 0xd7, 0xfa, + 0x4d, 0xfc, 0x1c, 0x7c, 0x6d, 0x7a, 0x5d, 0x56, 0x7d, 0xf4, 0x98, 0x06, + 0x32, 0xde, 0xcf, 0x99, + 0xd4, 0x5b, 0x0b, 0xbd, 0x1e, 0x9a, 0x37, 0x61, 0x5a, 0x08, 0x7e, 0x04, + 0x7b, 0xcd, 0x58, 0x7c, + 0x97, 0x38, 0x67, 0xd3, 0x7a, 0xcf, 0x0b, 0x12, 0x9e, 0xcb, 0x1d, 0xbb, + 0x57, 0xbe, 0x78, 0x10, + 0x36, 0xdf, 0xe4, 0xfa, 0xb3, 0x69, 0xaf, 0x98, 0xf3, 0x0a, 0x7e, 0x1e, + 0x7b, 0xfa, 0xfe, 0xbd, + 0xdc, 0x0f, 0x2f, 0xcf, 0xc5, 0xc9, 0x9b, 0x44, 0x63, 0x52, 0xc7, 0xa3, + 0x0b, 0xc8, 0x18, 0x56, + 0x7a, 0xbe, 0xcd, 0xe7, 0x7b, 0x6e, 0xca, 0xe2, 0x6b, 0x56, 0xde, 0xe4, + 0x45, 0x9a, 0xc3, 0xba, + 0x8f, 0xad, 0xcb, 0xe1, 0x9f, 0x47, 0xe9, 0xfc, 0x60, 0xe8, 0x37, 0x29, + 0xef, 0x43, 0x6c, 0x44, + 0xb0, 0x9f, 0x35, 0x23, 0xf0, 0xb3, 0x74, 0xa4, 0x19, 0xfa, 0x34, 0xdf, + 0x2c, 0x9e, 0xb9, 0xcf, + 0x51, 0xc1, 0xf1, 0x35, 0x3b, 0xa6, 0xb1, 0x35, 0x79, 0xf0, 0x6b, 0x82, + 0xe1, 0x7c, 0xc1, 0x3d, + 0xe7, 0xa6, 0xa2, 0xdf, 0xa4, 0x2c, 0xc9, 0x9b, 0x64, 0x9d, 0x3a, 0xde, + 0x70, 0xdf, 0x05, 0xc5, + 0xaa, 0xbf, 0x9f, 0xec, 0x1a, 0x97, 0xae, 0x7b, 0xf3, 0x26, 0x62, 0x36, + 0x63, 0x58, 0x7c, 0xed, + 0x7e, 0xd7, 0xb2, 0x47, 0x67, 0x54, 0xb8, 0x38, 0xf8, 0xc8, 0xf9, 0x26, + 0x1b, 0xd7, 0x62, 0xd5, + 0x5f, 0x2d, 0xe7, 0x85, 0x8b, 0x6d, 0x6b, 0xfc, 0xd9, 0xb8, 0x73, 0xba, + 0x59, 0x0b, 0x8b, 0xaf, + 0x65, 0x98, 0xf6, 0x3f, 0xf0, 0x39, 0xac, 0x03, 0x74, 0xbd, 0x5e, 0xc3, + 0x3a, 0x33, 0xcb, 0xe7, + 0x07, 0x83, 0xef, 0xc1, 0x3e, 0x1b, 0xf0, 0x3c, 0x96, 0xcd, 0x0f, 0x5e, + 0xed, 0x01, 0x8c, 0xff, + 0x5e, 0xa9, 0xc7, 0xc8, 0xb4, 0x0a, 0xe4, 0xb2, 0xcb, 0xfa, 0x4d, 0x80, + 0xff, 0x07, 0xec, 0xe7, + 0xcc, 0x98, 0xe9, 0x58, 0x3f, 0xf8, 0x3e, 0x78, 0x8c, 0x4d, 0xf8, 0x2e, + 0x12, 0x9e, 0x4b, 0x09, + 0x9e, 0xd7, 0x0d, 0xf8, 0x3d, 0xa0, 0x74, 0xe1, 0xce, 0x03, 0xe7, 0x7c, + 0xd9, 0x6b, 0xa2, 0xec, + 0x37, 0xe1, 0xcf, 0xbe, 0xb0, 0x7e, 0x93, 0x87, 0x61, 0x36, 0x6d, 0x40, + 0x7c, 0x4d, 0xf4, 0x11, + 0x56, 0xf6, 0xc2, 0xe7, 0x07, 0x8b, 0xf7, 0x92, 0x3f, 0xc5, 0x30, 0xa9, + 0x33, 0xa1, 0x71, 0xbd, + 0x2b, 0x31, 0x2a, 0x54, 0xf1, 0x7e, 0xde, 0x2b, 0xcf, 0x7d, 0x17, 0x69, + 0x7c, 0x8d, 0xeb, 0xfa, + 0xfc, 0xc1, 0x32, 0xa9, 0x57, 0x35, 0xab, 0x39, 0x54, 0x7f, 0x3e, 0xdf, + 0x03, 0xd2, 0xf9, 0xc1, + 0x62, 0x86, 0x0e, 0x68, 0x48, 0x01, 0xe2, 0x30, 0x7d, 0x79, 0x3e, 0x3c, + 0x4a, 0x5c, 0x0f, 0xb5, + 0x07, 0xd0, 0xb5, 0x69, 0xfe, 0x67, 0xa3, 0x6b, 0xbe, 0x49, 0x40, 0x5d, + 0xf2, 0x76, 0x50, 0x7c, + 0x2d, 0x72, 0x5c, 0xef, 0x81, 0xcd, 0x5b, 0xe4, 0x79, 0x93, 0xcd, 0xb3, + 0xea, 0x01, 0xf8, 0xc3, + 0xa5, 0xb3, 0x5c, 0xdd, 0x66, 0x3f, 0x43, 0xde, 0x43, 0x9d, 0x07, 0x94, + 0xf0, 0x5c, 0x2c, 0xdf, + 0x05, 0xd6, 0x42, 0xc6, 0x73, 0x11, 0x6b, 0x12, 0xef, 0x6c, 0xda, 0x6b, + 0xc6, 0xfb, 0x3d, 0x1c, + 0x7c, 0xb7, 0xef, 0x12, 0x18, 0x5f, 0xb3, 0x7e, 0x0f, 0xbc, 0xc7, 0x65, + 0x10, 0x93, 0x2e, 0x5c, + 0x77, 0x36, 0xad, 0xfb, 0xb3, 0x3b, 0xdf, 0xe6, 0xbd, 0xf2, 0xd2, 0xf8, + 0x9a, 0x95, 0x37, 0xb1, + 0xeb, 0x78, 0x1f, 0x5c, 0x7d, 0x3f, 0x36, 0xde, 0x2f, 0x66, 0xcd, 0xf1, + 0x58, 0x84, 0x64, 0x7e, + 0xb0, 0xe8, 0x37, 0x61, 0xbe, 0xcb, 0x79, 0xf1, 0x20, 0x3b, 0xcc, 0xb4, + 0xa5, 0xf9, 0x70, 0x7c, + 0xcd, 0x6a, 0x7b, 0xf7, 0xf6, 0x7d, 0xce, 0x79, 0xf5, 0xc2, 0x39, 0xf8, + 0x41, 0xf3, 0x83, 0x83, + 0x63, 0xdb, 0x21, 0xe7, 0xf4, 0x07, 0x95, 0xf3, 0x82, 0xba, 0xe4, 0x71, + 0xbe, 0x05, 0x7b, 0xc5, + 0x1b, 0x2b, 0x5c, 0xcf, 0x87, 0xa7, 0x90, 0x4c, 0xab, 0x58, 0x6b, 0x56, + 0x71, 0x39, 0x2f, 0xde, + 0x73, 0xba, 0x35, 0xd5, 0x9a, 0xa9, 0x7e, 0xaa, 0x9b, 0x1e, 0x67, 0x3a, + 0xd9, 0x85, 0xde, 0x92, + 0xf1, 0xef, 0xa5, 0x6b, 0xe2, 0xe1, 0xe0, 0x97, 0xf7, 0xdd, 0xb5, 0x01, + 0x41, 0x3c, 0x97, 0x95, + 0x2e, 0x60, 0xf8, 0xfd, 0x0f, 0x66, 0x36, 0xad, 0xfb, 0xf7, 0x0a, 0xe7, + 0xd7, 0x1d, 0xa6, 0xdf, + 0xe1, 0xfd, 0x26, 0xe0, 0xbb, 0x3c, 0x9c, 0xb3, 0x69, 0x53, 0xab, 0xf9, + 0xcc, 0xf2, 0xf9, 0xc1, + 0xb6, 0xef, 0x32, 0xd7, 0xeb, 0x61, 0xf3, 0x4d, 0xb0, 0xac, 0xfa, 0x07, + 0x90, 0x07, 0x34, 0x64, + 0xf3, 0x4d, 0xa0, 0x4e, 0x23, 0x70, 0x7e, 0xf0, 0x7d, 0xa8, 0x59, 0x8d, + 0x2b, 0xde, 0xcf, 0xfd, + 0x30, 0xc8, 0x11, 0x03, 0x23, 0xf8, 0xb6, 0x3c, 0xbe, 0x06, 0xba, 0x2e, + 0xea, 0x78, 0x37, 0x1e, + 0xa4, 0x2e, 0xe0, 0x62, 0xdb, 0x76, 0x9e, 0x8d, 0x9d, 0x71, 0x42, 0xe7, + 0x9b, 0x30, 0xff, 0x0a, + 0xf2, 0x6c, 0xa1, 0x35, 0x5b, 0xd8, 0x18, 0x96, 0xb5, 0x07, 0xd2, 0xf1, + 0xce, 0x5b, 0x6c, 0xbb, + 0xff, 0x4d, 0x1b, 0xa4, 0xba, 0xd2, 0x35, 0x51, 0xc4, 0x3a, 0xb5, 0x41, + 0x8e, 0xeb, 0x42, 0xf1, + 0xb8, 0x54, 0x0b, 0x9b, 0x33, 0x99, 0x46, 0xf1, 0xfb, 0x5f, 0x84, 0xd9, + 0xb4, 0x76, 0xad, 0xd2, + 0x48, 0xdd, 0x6f, 0x02, 0x75, 0xbc, 0xf9, 0x49, 0x26, 0xb4, 0xdf, 0x24, + 0xd2, 0x6c, 0xda, 0x61, + 0x8c, 0xb3, 0x69, 0x8f, 0xd7, 0x7d, 0x17, 0x15, 0x07, 0x3f, 0x70, 0xce, + 0xe4, 0x43, 0x34, 0x9b, + 0xd6, 0xef, 0x87, 0x15, 0xcf, 0x99, 0xef, 0xc2, 0xfc, 0xae, 0xf5, 0xf9, + 0xc1, 0xae, 0xba, 0x64, + 0xa6, 0x99, 0xb8, 0x9a, 0x5a, 0x5c, 0xbd, 0xde, 0x66, 0xac, 0x75, 0xbc, + 0xdb, 0x4d, 0x88, 0xeb, + 0x85, 0xce, 0x0f, 0x3e, 0x2d, 0x1d, 0x70, 0x56, 0xfd, 0x2c, 0xdd, 0xd0, + 0xc2, 0xfa, 0x4d, 0x62, + 0xad, 0x65, 0x47, 0xd6, 0xeb, 0x05, 0xf4, 0xb8, 0x84, 0xf6, 0x9b, 0x9c, + 0x49, 0x78, 0x2e, 0xd1, + 0xfc, 0xf7, 0x56, 0x9c, 0x73, 0x58, 0x51, 0xcf, 0xc6, 0x48, 0xf1, 0xfe, + 0x9c, 0xc3, 0xf9, 0xe2, + 0xf1, 0x35, 0xc8, 0x9b, 0x04, 0xcc, 0x99, 0xdc, 0x3e, 0x2f, 0x8b, 0x5e, + 0x79, 0x59, 0x7c, 0xed, + 0x21, 0x5b, 0x13, 0xe1, 0x87, 0xe5, 0xa4, 0x75, 0xc9, 0xb2, 0x7c, 0x78, + 0xfc, 0x4c, 0x6a, 0x1c, + 0x8f, 0x37, 0x34, 0xde, 0xcf, 0xfb, 0x4d, 0xf2, 0x4d, 0x9e, 0x63, 0x0d, + 0x99, 0x1f, 0xcc, 0xfb, + 0x4d, 0x66, 0x70, 0x4e, 0x2f, 0xc4, 0x5b, 0xcb, 0xde, 0x8f, 0x25, 0xde, + 0x2f, 0xea, 0x78, 0xd9, + 0x6b, 0x4a, 0xe7, 0x07, 0x83, 0xae, 0xb3, 0x7b, 0xa9, 0x60, 0x7a, 0xe5, + 0xef, 0x43, 0x1d, 0xaf, + 0x32, 0xe7, 0xb5, 0x80, 0x67, 0xa3, 0xfb, 0x8c, 0xe2, 0x9b, 0x1f, 0x2c, + 0xef, 0x37, 0x59, 0x9b, + 0x6f, 0x12, 0x69, 0x3e, 0x33, 0xb2, 0x36, 0x4d, 0xc9, 0xb4, 0x0a, 0x8f, + 0x61, 0x39, 0x79, 0x93, + 0xd2, 0x45, 0x75, 0xad, 0xdf, 0x64, 0xdb, 0xcf, 0xc1, 0x67, 0xaf, 0x89, + 0xab, 0x07, 0xc1, 0xef, + 0x01, 0x35, 0xa7, 0x05, 0x37, 0x6f, 0x31, 0x86, 0x78, 0xbf, 0x21, 0xe5, + 0xe0, 0xdf, 0x92, 0xcc, + 0x0f, 0xbe, 0x0f, 0xba, 0x80, 0x9d, 0x4d, 0xab, 0x5a, 0x13, 0xde, 0x6f, + 0xb2, 0xdc, 0x0e, 0xe9, + 0x37, 0xc9, 0x39, 0x79, 0x13, 0x11, 0xef, 0x47, 0xd4, 0xf1, 0xde, 0x8d, + 0xad, 0xbe, 0x1f, 0x17, + 0xef, 0x67, 0xf7, 0xc9, 0x67, 0xcd, 0xb1, 0x35, 0x0f, 0xef, 0x37, 0x61, + 0xbe, 0xcb, 0x99, 0xca, + 0x77, 0x89, 0xa2, 0x0b, 0xf1, 0xd6, 0xf1, 0x7a, 0x9e, 0x8d, 0x41, 0xfd, + 0x26, 0x77, 0xbd, 0xfd, + 0x26, 0xba, 0x24, 0x1f, 0xfe, 0x62, 0xd4, 0xac, 0x86, 0xc6, 0xb6, 0x23, + 0xf6, 0x9b, 0x88, 0x3a, + 0xde, 0xe2, 0x03, 0xa9, 0x65, 0x8f, 0x18, 0xdb, 0x16, 0xf3, 0x16, 0x97, + 0xfa, 0x61, 0xc8, 0xfc, + 0x60, 0x9e, 0x37, 0x81, 0xcf, 0x9f, 0xea, 0x35, 0x63, 0xae, 0x65, 0x47, + 0xc5, 0xb6, 0xe3, 0x5d, + 0x13, 0x91, 0x37, 0x01, 0xce, 0x17, 0xdc, 0xbb, 0x74, 0x7e, 0x30, 0x3c, + 0xe3, 0x2c, 0xdf, 0x25, + 0x2e, 0xce, 0x57, 0x9c, 0x6b, 0xa2, 0x59, 0x75, 0x39, 0x22, 0x6f, 0xb2, + 0x29, 0xed, 0x37, 0xe1, + 0xfe, 0xfb, 0x34, 0xd5, 0x0c, 0xed, 0x37, 0x79, 0x31, 0x66, 0xd3, 0x06, + 0xe4, 0x01, 0x83, 0xe7, + 0x4c, 0x22, 0xfa, 0x4d, 0xee, 0x7b, 0x2d, 0x7b, 0x48, 0x1d, 0xef, 0x40, + 0xd1, 0x6f, 0x72, 0x12, + 0xd2, 0x6f, 0x32, 0x5c, 0x9d, 0xd7, 0xc5, 0x79, 0x41, 0x7b, 0x78, 0x6a, + 0x56, 0x7d, 0x67, 0x94, + 0xfc, 0x54, 0xd1, 0x6f, 0x32, 0xdf, 0xaa, 0x5b, 0x7b, 0xc0, 0x50, 0xf9, + 0xef, 0xd8, 0xda, 0xb4, + 0xf4, 0xfd, 0x98, 0xb7, 0x28, 0x99, 0x1f, 0x0c, 0xf7, 0x02, 0xfb, 0x2e, + 0x8c, 0xe7, 0x72, 0x1f, + 0x6a, 0xd9, 0x51, 0x35, 0xab, 0x6e, 0x5d, 0x40, 0xd5, 0xf1, 0x9e, 0x22, + 0xea, 0x78, 0x79, 0x7d, + 0x7f, 0xaa, 0x29, 0x8f, 0xaf, 0xed, 0xec, 0x83, 0xef, 0x02, 0x67, 0xe5, + 0xec, 0x40, 0x0b, 0xed, + 0x37, 0x89, 0x95, 0xd3, 0x7d, 0xe5, 0x78, 0xbf, 0x3b, 0xbe, 0x26, 0x9b, + 0x6f, 0x12, 0x10, 0x5f, + 0x8b, 0xac, 0x0b, 0xf7, 0x6f, 0x36, 0x6d, 0x60, 0xbf, 0xc9, 0x05, 0xa6, + 0xdf, 0x04, 0xf9, 0x6c, + 0x7c, 0x90, 0xb3, 0x69, 0xdd, 0x31, 0x36, 0xf6, 0x9a, 0xaa, 0x7e, 0x13, + 0x3b, 0x0f, 0x18, 0xfa, + 0x3b, 0x78, 0x31, 0x6a, 0x56, 0x7d, 0xfd, 0xf9, 0xb2, 0xf8, 0x1a, 0xdc, + 0x0b, 0xf8, 0xbf, 0x9b, + 0xb2, 0xf8, 0x5a, 0x94, 0x18, 0xd6, 0x95, 0xd8, 0x35, 0x21, 0x67, 0x66, + 0x19, 0xa3, 0xc2, 0x53, + 0x97, 0x8c, 0xeb, 0x37, 0x89, 0xbd, 0x66, 0x15, 0x91, 0xf3, 0x8a, 0x7f, + 0x4d, 0xd6, 0xe3, 0xfd, + 0x6b, 0xf3, 0x83, 0x9d, 0xb3, 0x47, 0x35, 0x34, 0xbe, 0x76, 0x5f, 0xea, + 0xfb, 0xb1, 0xec, 0x9a, + 0x85, 0x84, 0x5d, 0xe3, 0xaa, 0x4b, 0xae, 0xac, 0xf5, 0x9b, 0x78, 0x79, + 0x2e, 0x5c, 0x67, 0xe3, + 0xec, 0xfb, 0xc1, 0xeb, 0x02, 0xba, 0x3e, 0x60, 0x67, 0xa1, 0x1f, 0x3a, + 0xf1, 0x35, 0xc9, 0x79, + 0x1d, 0x6a, 0x26, 0x55, 0x3d, 0x05, 0x2f, 0xc6, 0x6c, 0x5a, 0xef, 0xb3, + 0xf1, 0x9a, 0xfd, 0x26, + 0x2f, 0xd2, 0x6c, 0x5a, 0x49, 0xce, 0x0b, 0xdd, 0x6f, 0xe2, 0xe4, 0x4d, + 0xa2, 0xb3, 0xea, 0xef, + 0x6b, 0xcd, 0xaa, 0xe7, 0xb3, 0x01, 0x7e, 0x23, 0xf4, 0x0b, 0x86, 0xf0, + 0x5c, 0x40, 0xd7, 0x73, + 0x31, 0xf6, 0xb8, 0x60, 0xfd, 0xf7, 0x48, 0x6b, 0x12, 0x43, 0xbc, 0xdf, + 0xa9, 0x4b, 0x3e, 0x85, + 0x3e, 0x80, 0xaa, 0xb2, 0xdf, 0x24, 0x8a, 0x2e, 0xe8, 0x0f, 0x92, 0x5d, + 0x63, 0xbd, 0x66, 0x5e, + 0xda, 0x6f, 0x22, 0x74, 0x3d, 0xbb, 0x70, 0x7a, 0x10, 0x0d, 0x44, 0x7d, + 0x7f, 0x3c, 0x75, 0xbc, + 0x57, 0x89, 0xf7, 0x4b, 0x78, 0x2e, 0xc2, 0x77, 0x81, 0x5e, 0xf9, 0xf0, + 0x7e, 0x93, 0xf5, 0x78, + 0xff, 0x75, 0x6b, 0xd9, 0x91, 0xec, 0x9a, 0xa0, 0xb8, 0x5e, 0xcf, 0xdd, + 0x6f, 0xe2, 0x8f, 0x49, + 0x41, 0x7c, 0xad, 0xe8, 0x8d, 0xaf, 0x89, 0x3d, 0xd0, 0x8e, 0xb3, 0x66, + 0x15, 0x1f, 0xdb, 0x56, + 0x3d, 0x8f, 0x35, 0xa3, 0x70, 0x5a, 0x3d, 0xa8, 0x9c, 0x15, 0x0f, 0xa4, + 0xfd, 0x26, 0x50, 0x97, + 0x3c, 0xcc, 0xb4, 0xe3, 0xae, 0x65, 0xdf, 0x8e, 0x89, 0x5d, 0xa3, 0xf1, + 0x18, 0x96, 0xe0, 0x45, + 0xc8, 0x78, 0x2e, 0xa0, 0xeb, 0xf0, 0xd9, 0xd8, 0x5e, 0xe6, 0x0e, 0x33, + 0x61, 0xfd, 0x26, 0xd8, + 0x9a, 0x55, 0x24, 0xd7, 0x2d, 0xf6, 0xfa, 0x7e, 0xe4, 0x0c, 0x4a, 0x7e, + 0x46, 0x61, 0xe7, 0x22, + 0x39, 0xcf, 0x45, 0x70, 0xf0, 0x45, 0xbf, 0x9d, 0xf6, 0x40, 0xeb, 0xfb, + 0xa3, 0xc4, 0xfb, 0x9d, + 0x9a, 0x47, 0x78, 0x5e, 0x07, 0xf6, 0x9b, 0xb0, 0xb3, 0x3f, 0xdb, 0x57, + 0x85, 0x99, 0x24, 0xbe, + 0x76, 0xdf, 0xea, 0xfb, 0xaf, 0x5e, 0xaf, 0xa7, 0xee, 0x37, 0xc9, 0xaf, + 0x9d, 0xd7, 0x1f, 0x50, + 0x2d, 0x7b, 0xf4, 0x78, 0x7f, 0x3f, 0xdb, 0x01, 0x5d, 0x28, 0x9d, 0x84, + 0xc4, 0xd7, 0x40, 0xd7, + 0xa1, 0x57, 0x1e, 0x33, 0x9b, 0xf6, 0x34, 0xde, 0xd9, 0xb4, 0x58, 0x8e, + 0x16, 0x3f, 0x33, 0x4b, + 0x79, 0x2e, 0xa2, 0xdf, 0x04, 0x3e, 0x6b, 0xae, 0x7e, 0x13, 0x43, 0xbe, + 0x07, 0xf2, 0x0f, 0x76, + 0xde, 0x62, 0x60, 0xce, 0xcb, 0xc5, 0x73, 0x09, 0xc9, 0x9b, 0xac, 0xf5, + 0x9b, 0xb0, 0x3d, 0x10, + 0x5b, 0xcd, 0xea, 0x8b, 0x58, 0xc7, 0x9b, 0x5e, 0xb8, 0x39, 0x5f, 0x12, + 0x9e, 0x0b, 0xf8, 0x94, + 0xec, 0xb3, 0x2b, 0xfa, 0x4d, 0xb2, 0xf2, 0x7e, 0x93, 0x38, 0xd7, 0x24, + 0x52, 0xbc, 0x5f, 0xe2, + 0xbb, 0xb8, 0xea, 0x92, 0x9d, 0xf3, 0xfe, 0x9d, 0x90, 0x7e, 0x93, 0x98, + 0xfd, 0xf7, 0x38, 0xb9, + 0x1d, 0x5c, 0x17, 0xc0, 0x77, 0x09, 0x89, 0xaf, 0x81, 0xae, 0xf3, 0x3c, + 0xe0, 0xc3, 0x58, 0xc7, + 0x6b, 0x9d, 0x51, 0xa0, 0x7e, 0xd4, 0xc9, 0x9b, 0x04, 0xf4, 0x9b, 0xec, + 0x9c, 0xef, 0xf0, 0x5e, + 0xf9, 0xd0, 0x7e, 0x93, 0xfb, 0xb1, 0x07, 0xae, 0x1a, 0xef, 0x97, 0xf5, + 0x9b, 0xdc, 0x96, 0xc7, + 0xd7, 0x1e, 0xe0, 0x1e, 0xf0, 0xc7, 0xb6, 0xc3, 0xd9, 0x35, 0x9c, 0x83, + 0x9f, 0x6b, 0xc1, 0x1e, + 0xf0, 0xd7, 0x6c, 0x79, 0xe6, 0x07, 0x83, 0xae, 0x4f, 0x8a, 0x4d, 0x7c, + 0x0c, 0x4b, 0xb1, 0x07, + 0x9c, 0x67, 0x42, 0xb1, 0x59, 0x5a, 0x28, 0x66, 0xa4, 0xb3, 0xf7, 0x58, + 0x38, 0x2b, 0x1d, 0xea, + 0xaa, 0xb8, 0xe3, 0x30, 0xd7, 0x2e, 0x9d, 0x15, 0xea, 0xaa, 0x35, 0xc9, + 0x2c, 0xf8, 0x6b, 0x36, + 0x03, 0x7d, 0x17, 0xf6, 0x19, 0xd4, 0xe7, 0xf9, 0x66, 0xe1, 0xb4, 0x58, + 0x2f, 0xdd, 0x2a, 0xd5, + 0xf8, 0x75, 0x51, 0x3a, 0x2c, 0x9e, 0x6e, 0x1e, 0xe6, 0xe7, 0x7a, 0x73, + 0x2d, 0x06, 0x3c, 0xca, + 0xb7, 0x4b, 0xa7, 0x79, 0xe5, 0xbd, 0x66, 0x96, 0xa5, 0x46, 0x71, 0xa6, + 0x38, 0x4b, 0xb2, 0xdf, + 0x7d, 0xf1, 0xbc, 0x54, 0x53, 0x9e, 0x5f, 0xc7, 0xf0, 0x9a, 0xb9, 0xba, + 0xea, 0xb3, 0xab, 0x1f, + 0xb3, 0xd7, 0x3c, 0xce, 0xd5, 0x0b, 0x27, 0xbe, 0x7b, 0x39, 0xdb, 0x3c, + 0x2c, 0x2c, 0x98, 0x76, + 0x8c, 0xd9, 0x7e, 0x1b, 0xa4, 0x3b, 0x45, 0xf6, 0x6f, 0xca, 0xbc, 0xf4, + 0xa4, 0xd0, 0x2e, 0x9d, + 0xe8, 0xaa, 0xfb, 0x34, 0xf4, 0x93, 0x52, 0x43, 0x39, 0xf3, 0x8a, 0x69, + 0x01, 0xee, 0x35, 0x37, + 0x5b, 0xa5, 0x65, 0xb6, 0x21, 0x74, 0x1d, 0xe2, 0xf3, 0x7a, 0x2b, 0x7f, + 0xbc, 0x59, 0x67, 0xf7, + 0xe0, 0xba, 0x97, 0xe2, 0x21, 0x7c, 0x36, 0x0a, 0xb3, 0x8c, 0xf8, 0x8c, + 0xca, 0xf6, 0x3d, 0xf3, + 0x0d, 0xe0, 0xeb, 0x95, 0x3d, 0x2e, 0x33, 0xf6, 0xd9, 0x58, 0x66, 0x1a, + 0xaa, 0xb5, 0xcd, 0x9f, + 0x96, 0x0e, 0x73, 0x23, 0xc5, 0xe7, 0x71, 0x90, 0xed, 0x96, 0xce, 0x37, + 0x0f, 0x7d, 0xef, 0x09, + 0xea, 0x57, 0xbb, 0x19, 0xb8, 0x97, 0x65, 0xa1, 0x51, 0x5c, 0xdd, 0x4b, + 0x0d, 0xee, 0x65, 0xf3, + 0x38, 0x5f, 0xcf, 0xd9, 0xf9, 0xac, 0x9e, 0xb7, 0x8e, 0x17, 0xb7, 0x07, + 0xf4, 0x0e, 0x66, 0x0f, + 0x58, 0xfb, 0xae, 0xa9, 0xda, 0x77, 0x9b, 0xe7, 0xa5, 0xc3, 0xb0, 0x19, + 0x16, 0x10, 0x5f, 0xcf, + 0x4c, 0xf3, 0x2d, 0xb8, 0x4f, 0xf6, 0xd9, 0x3d, 0x74, 0x3e, 0x67, 0xe7, + 0xec, 0x5e, 0x4e, 0x0a, + 0xf5, 0xdc, 0x2c, 0xdb, 0xca, 0x0c, 0xe1, 0x5e, 0xb4, 0x2e, 0xec, 0x81, + 0xd2, 0x4c, 0x31, 0x0f, + 0x32, 0xd6, 0x3d, 0x00, 0x71, 0x0a, 0xb6, 0x07, 0x54, 0x33, 0x28, 0x79, + 0x6f, 0x16, 0x7b, 0xcd, + 0x81, 0xd6, 0x81, 0xfe, 0x2b, 0xd8, 0xff, 0x9b, 0x67, 0xde, 0x7b, 0x29, + 0x9e, 0xb2, 0x7b, 0x59, + 0xe4, 0x1b, 0xa5, 0x93, 0x5c, 0x5d, 0x53, 0xf4, 0x9b, 0x84, 0xed, 0x01, + 0x60, 0x20, 0x58, 0xbf, + 0x57, 0x63, 0xa5, 0x0b, 0x29, 0xa5, 0x2e, 0xc0, 0xef, 0xe1, 0x81, 0xae, + 0x09, 0xdb, 0x2f, 0xb0, + 0x26, 0xf9, 0x05, 0xf0, 0xae, 0x7d, 0xbf, 0x57, 0xb6, 0x16, 0x79, 0xa8, + 0x2b, 0x1c, 0xa6, 0x3b, + 0xa9, 0x49, 0xa1, 0x85, 0xd6, 0x85, 0x49, 0x4c, 0xba, 0x30, 0x65, 0xba, + 0x70, 0x9c, 0x6d, 0xa8, + 0x5e, 0x33, 0x77, 0x52, 0xaa, 0xe7, 0x79, 0xbf, 0x89, 0xd6, 0xb5, 0x75, + 0x7d, 0xf3, 0xb4, 0x78, + 0xe8, 0xd1, 0x42, 0xf6, 0x19, 0x85, 0x7d, 0xa7, 0x8f, 0x43, 0xea, 0xc5, + 0xb9, 0x2e, 0x80, 0x16, + 0xc5, 0xa9, 0x0b, 0xc5, 0x43, 0x55, 0xce, 0x2b, 0x1d, 0xa8, 0x45, 0x90, + 0x6b, 0xc8, 0x74, 0xb2, + 0x33, 0x76, 0xfe, 0x38, 0x95, 0xe8, 0xfa, 0x88, 0xb3, 0x36, 0xbc, 0x7e, + 0x18, 0xd7, 0x85, 0xcd, + 0xc3, 0x38, 0x75, 0x41, 0x75, 0x7e, 0xe5, 0xcf, 0xe3, 0xd3, 0x7c, 0xd8, + 0x79, 0x87, 0xeb, 0x7a, + 0xee, 0xb8, 0x54, 0x07, 0xfd, 0xf0, 0xea, 0x3a, 0xbb, 0x97, 0x65, 0xbe, + 0xc1, 0xfc, 0xe3, 0x36, + 0xd7, 0x75, 0xa6, 0x33, 0x98, 0x3d, 0xb0, 0x11, 0x6d, 0x0f, 0x34, 0x95, + 0x9f, 0x47, 0x84, 0x16, + 0x6d, 0x8c, 0xe1, 0xd9, 0xc8, 0x74, 0xc1, 0xd1, 0xf5, 0x4d, 0x8f, 0xae, + 0xf3, 0x3d, 0x03, 0xba, + 0xce, 0xee, 0xb3, 0x30, 0x4d, 0xb7, 0x42, 0x7f, 0xef, 0x91, 0xf6, 0x80, + 0x7a, 0xdf, 0xc1, 0x1e, + 0x50, 0x3e, 0x8f, 0x03, 0x9e, 0x8d, 0x5c, 0xd7, 0xc7, 0xd9, 0x76, 0x6e, + 0xc1, 0x9e, 0x51, 0xee, + 0xfd, 0x7f, 0x51, 0xac, 0x71, 0x5d, 0x9f, 0xae, 0x74, 0xdd, 0x5f, 0x93, + 0xcc, 0xf6, 0x40, 0x5d, + 0xb6, 0x07, 0x80, 0x81, 0xa0, 0xcf, 0xd9, 0xb3, 0xda, 0xe2, 0xe0, 0xc3, + 0x19, 0x65, 0x13, 0x77, + 0x5e, 0xa8, 0x3d, 0xd0, 0x35, 0x61, 0xaf, 0x09, 0x6b, 0x02, 0xbf, 0x2b, + 0xad, 0x0f, 0x6b, 0xa1, + 0xb7, 0x73, 0xbe, 0xe7, 0x35, 0xfc, 0x5e, 0x0b, 0x27, 0xec, 0x3c, 0xc2, + 0x7e, 0xf7, 0xe9, 0x55, + 0xed, 0xbc, 0x21, 0xd1, 0x05, 0xd0, 0xa2, 0xfb, 0xa8, 0x0b, 0xc1, 0x67, + 0xe6, 0xb5, 0xf9, 0x7b, + 0xec, 0xf7, 0x0a, 0xcf, 0xb8, 0x9c, 0x44, 0xd7, 0x73, 0x96, 0xae, 0xfb, + 0x7f, 0xaf, 0xd8, 0x73, + 0x3a, 0x5a, 0x17, 0xce, 0x0a, 0x87, 0xea, 0x73, 0x7a, 0xa9, 0x59, 0x9a, + 0x87, 0x3c, 0x1b, 0x41, + 0xd7, 0x47, 0x50, 0xf3, 0x59, 0xaa, 0x6d, 0x9e, 0x15, 0x7d, 0xcf, 0x6b, + 0x71, 0x5e, 0xcf, 0x58, + 0xe7, 0x75, 0xed, 0x45, 0xd0, 0x05, 0x71, 0x66, 0x46, 0xbc, 0x26, 0xec, + 0x81, 0x89, 0xd6, 0x02, + 0x5d, 0xd7, 0x67, 0xb9, 0x66, 0xb0, 0xae, 0xeb, 0x4d, 0x78, 0x4e, 0x65, + 0x14, 0x35, 0x5b, 0xfc, + 0xcc, 0x7c, 0x1f, 0x75, 0x41, 0xfa, 0x6c, 0xf4, 0x3e, 0x8f, 0xc5, 0x79, + 0x7d, 0x9a, 0x6b, 0xe5, + 0x4f, 0x5c, 0xe7, 0xf5, 0x5b, 0x70, 0xc6, 0x75, 0xeb, 0xba, 0xb6, 0x7e, + 0x5e, 0xef, 0xe3, 0xf6, + 0x40, 0xea, 0x3a, 0x7b, 0x20, 0x20, 0xe7, 0xcf, 0xcf, 0xe9, 0x92, 0x7e, + 0x13, 0xc8, 0x9b, 0x72, + 0x5d, 0x67, 0x6b, 0xe6, 0xfa, 0xbd, 0xd8, 0xba, 0xde, 0xd0, 0xa1, 0x57, + 0xd5, 0x3e, 0xaf, 0xc3, + 0x1e, 0x38, 0x93, 0x9f, 0x99, 0x39, 0x07, 0xc6, 0xc5, 0x83, 0xe1, 0xbe, + 0x0b, 0x7b, 0x26, 0xa4, + 0x82, 0xd6, 0xe2, 0x21, 0x58, 0x93, 0x8d, 0xb5, 0x5e, 0x79, 0x6b, 0x2d, + 0x8e, 0x37, 0x1b, 0x25, + 0x9f, 0xef, 0xc2, 0x7f, 0xaf, 0xee, 0xb5, 0xf0, 0xfb, 0x2e, 0x2a, 0x5d, + 0x18, 0x61, 0xfd, 0x77, + 0x85, 0x2e, 0xb8, 0xce, 0xcc, 0x61, 0xf1, 0x2e, 0xfe, 0xbc, 0x9e, 0x15, + 0x9a, 0x6c, 0x6d, 0x6b, + 0x81, 0xcf, 0xeb, 0xe9, 0xca, 0x0f, 0x13, 0xba, 0xa0, 0x88, 0x3d, 0x31, + 0x6d, 0x8d, 0x53, 0x17, + 0xf8, 0xb3, 0x51, 0x55, 0xaf, 0x02, 0xfe, 0xd2, 0x05, 0xf8, 0x2e, 0xa9, + 0x8e, 0xd0, 0x75, 0xdf, + 0xf3, 0xda, 0xd6, 0x75, 0xf6, 0xef, 0x70, 0x4e, 0xd7, 0x7a, 0xe1, 0xbe, + 0x4b, 0x24, 0x5d, 0x50, + 0xe5, 0x01, 0x91, 0xe7, 0xf4, 0xb5, 0x67, 0x23, 0xd7, 0xf5, 0xcc, 0xba, + 0x1f, 0x76, 0xab, 0xc4, + 0xfd, 0x30, 0xb7, 0xae, 0xfb, 0xef, 0x25, 0xde, 0x3d, 0xc0, 0xf6, 0xdd, + 0x99, 0x54, 0x17, 0x70, + 0x31, 0xac, 0x9e, 0x38, 0xaf, 0x83, 0xae, 0xc3, 0x67, 0xc3, 0x1f, 0x53, + 0x72, 0xce, 0xeb, 0xf6, + 0xbd, 0x0c, 0x73, 0x1d, 0xfc, 0x1e, 0x48, 0xe3, 0xf6, 0x80, 0x6a, 0x06, + 0x65, 0x94, 0x18, 0xd6, + 0x22, 0xd3, 0x10, 0xba, 0x5e, 0xac, 0xaf, 0x9f, 0xd7, 0x73, 0x5c, 0xd7, + 0xe1, 0x77, 0x96, 0x91, + 0xd5, 0xa0, 0x0c, 0xd8, 0xf9, 0x63, 0xc2, 0x7e, 0xb7, 0x16, 0x07, 0xdf, + 0x3a, 0x53, 0x5a, 0xcf, + 0xeb, 0x5c, 0x70, 0x8d, 0x65, 0x5c, 0xe7, 0x85, 0x58, 0xd7, 0x44, 0x13, + 0xbe, 0x0b, 0xdb, 0x2f, + 0xc5, 0x33, 0x9f, 0x4f, 0x69, 0xad, 0x05, 0x8f, 0xaf, 0x81, 0xae, 0x5b, + 0xba, 0xa0, 0x3c, 0xbf, + 0x8e, 0x23, 0xe8, 0x82, 0xca, 0x7f, 0x47, 0x9e, 0x99, 0x85, 0xef, 0xa2, + 0x83, 0xef, 0x62, 0xc7, + 0xd7, 0x1a, 0x6b, 0xf1, 0x35, 0xa6, 0xeb, 0x5c, 0x17, 0xc4, 0x7c, 0x13, + 0x43, 0x75, 0x66, 0x8e, + 0x4b, 0x17, 0x72, 0x98, 0x33, 0x33, 0x68, 0x91, 0xef, 0xd9, 0x18, 0x18, + 0x5f, 0x13, 0x5a, 0x58, + 0x2b, 0xb0, 0xe7, 0xb5, 0x2f, 0xbe, 0x66, 0xac, 0xf9, 0xef, 0xc3, 0x2b, + 0xc5, 0xf5, 0x82, 0x75, + 0x61, 0x79, 0xbd, 0xd8, 0xb6, 0xe3, 0x87, 0xb1, 0x7b, 0x29, 0x79, 0xef, + 0x65, 0x2d, 0xbe, 0x06, + 0xf7, 0x92, 0x46, 0xed, 0x01, 0x0d, 0xb9, 0x07, 0x72, 0x11, 0x62, 0xdb, + 0xea, 0xd7, 0x84, 0x3d, + 0x00, 0xe7, 0x03, 0x59, 0x7c, 0x8d, 0xeb, 0x3a, 0xd3, 0x16, 0x6b, 0x0f, + 0x18, 0xaa, 0x73, 0x7a, + 0x5c, 0x7b, 0xe0, 0x4a, 0xb1, 0x6d, 0x91, 0x2b, 0x58, 0x3f, 0xaf, 0xb3, + 0x7b, 0x81, 0x3d, 0x00, + 0xe7, 0x75, 0x79, 0xbd, 0xb8, 0xfd, 0x5c, 0x48, 0x77, 0x80, 0x81, 0x0f, + 0x97, 0x73, 0x26, 0x84, + 0xff, 0xbf, 0xd0, 0x5b, 0x99, 0x09, 0xfb, 0xde, 0x81, 0x88, 0x15, 0x6a, + 0xc3, 0x6c, 0x27, 0xb7, + 0xc8, 0xb4, 0x94, 0xb9, 0x94, 0x59, 0xae, 0xa5, 0x8f, 0x15, 0x9f, 0xdd, + 0x23, 0xcd, 0x80, 0xd7, + 0x61, 0x7b, 0x34, 0x7c, 0x66, 0xeb, 0x48, 0x67, 0xaf, 0x99, 0x56, 0xbf, + 0xe6, 0x9c, 0xbd, 0xe6, + 0x88, 0x69, 0x9c, 0xad, 0xeb, 0x4b, 0xef, 0x7c, 0x13, 0xb8, 0x97, 0x2c, + 0xbb, 0x17, 0xb8, 0x47, + 0x8b, 0xff, 0x2a, 0xf7, 0x5d, 0xc6, 0xec, 0x35, 0xe7, 0xca, 0xd7, 0x34, + 0x32, 0x8b, 0x5c, 0x2b, + 0x3b, 0x54, 0x7c, 0x76, 0x8f, 0x52, 0x06, 0xbc, 0xbe, 0x6a, 0x8f, 0x6a, + 0x13, 0xf6, 0x9a, 0xb3, + 0x54, 0xdb, 0x7b, 0xc6, 0xe5, 0xcc, 0xb2, 0xb6, 0xcd, 0x2c, 0x73, 0x9f, + 0xd7, 0xb3, 0x53, 0x31, + 0xb7, 0x4a, 0x3b, 0x0a, 0x60, 0x7a, 0x33, 0xdd, 0xc9, 0x1d, 0xeb, 0x4d, + 0xd5, 0x79, 0x41, 0x9b, + 0xe4, 0xda, 0xbe, 0xd7, 0x0c, 0x7c, 0xbe, 0x64, 0xd9, 0x5a, 0xa6, 0x55, + 0x7b, 0x74, 0xc0, 0x5e, + 0x53, 0x70, 0x25, 0x25, 0xbe, 0x4b, 0xaa, 0x9b, 0x1a, 0x33, 0x6d, 0x67, + 0x6b, 0xe6, 0xbf, 0x17, + 0x7d, 0x26, 0xe2, 0x30, 0x3c, 0x9e, 0xcd, 0xd7, 0x09, 0x72, 0x46, 0xec, + 0x35, 0x55, 0xf1, 0x2e, + 0xf6, 0xb9, 0xcf, 0x2d, 0xb3, 0xca, 0xcf, 0x46, 0x6a, 0xc6, 0xee, 0x73, + 0xa2, 0xb5, 0x55, 0xba, + 0xc0, 0x3f, 0x1b, 0x8a, 0xcf, 0xe3, 0xc6, 0x30, 0xdb, 0x85, 0xd7, 0x4c, + 0x8d, 0x98, 0xff, 0x31, + 0x5b, 0xff, 0xbd, 0x00, 0x63, 0x38, 0x3d, 0x4e, 0x75, 0xe0, 0x35, 0xf5, + 0xb1, 0xd6, 0x51, 0xbd, + 0x26, 0x6e, 0x0f, 0x64, 0x31, 0x7b, 0xc0, 0x10, 0x7b, 0x40, 0xb5, 0xef, + 0x7c, 0x9f, 0xc7, 0x23, + 0xb1, 0xff, 0x33, 0x33, 0x31, 0x07, 0xc3, 0xbd, 0xff, 0xe1, 0x7e, 0x32, + 0xec, 0x77, 0xe6, 0xcf, + 0x15, 0x5c, 0x69, 0x0f, 0x9c, 0x5c, 0x69, 0x0f, 0x04, 0xde, 0x27, 0xfb, + 0x3c, 0xb6, 0x32, 0x41, + 0x9f, 0x47, 0xf7, 0x4c, 0x8f, 0x25, 0xfb, 0xdd, 0x48, 0xb5, 0x4c, 0x5b, + 0xab, 0x3d, 0xcb, 0x59, + 0xba, 0x20, 0x7e, 0xaf, 0x59, 0xef, 0xef, 0x15, 0xbe, 0x1f, 0x7e, 0xaf, + 0x53, 0xf0, 0x6b, 0x9c, + 0xb8, 0xa9, 0xf1, 0x40, 0x74, 0x61, 0x7c, 0xc5, 0x35, 0xf1, 0xcd, 0x37, + 0x71, 0xee, 0xe5, 0x04, + 0xd6, 0x22, 0xeb, 0xd1, 0x75, 0xff, 0xbd, 0x60, 0x75, 0x41, 0xbf, 0xbe, + 0x2e, 0xb8, 0xce, 0x62, + 0xec, 0x35, 0xa7, 0x92, 0xd7, 0xec, 0x09, 0x66, 0x59, 0x9a, 0x69, 0x9e, + 0x7e, 0x12, 0xa0, 0xeb, + 0x53, 0xb8, 0x97, 0x54, 0xd7, 0x99, 0x6f, 0x30, 0xc8, 0x74, 0x5f, 0x04, + 0x5d, 0xc0, 0x3f, 0x1b, + 0xd9, 0x7d, 0xc2, 0x33, 0x8a, 0xeb, 0xfa, 0xa9, 0x4f, 0xd7, 0xad, 0x79, + 0x84, 0xd6, 0x6b, 0x76, + 0x63, 0xd0, 0x05, 0x33, 0x8a, 0x2e, 0xa4, 0x30, 0x9f, 0xc7, 0xd5, 0xb3, + 0x71, 0xa5, 0xeb, 0x73, + 0xaf, 0x16, 0xf2, 0xf3, 0xc4, 0xdc, 0xa5, 0xeb, 0x81, 0x73, 0x27, 0x90, + 0xba, 0xc0, 0x5f, 0x53, + 0xbd, 0x07, 0x32, 0x32, 0x5d, 0x08, 0x7a, 0x36, 0xae, 0xbf, 0xa6, 0x01, + 0xef, 0xd3, 0xd6, 0x75, + 0xcf, 0x9e, 0xb1, 0x75, 0x1d, 0x72, 0x05, 0x7d, 0xcf, 0xcc, 0x5c, 0xdc, + 0xb3, 0xb1, 0x8f, 0xdc, + 0x03, 0x93, 0x90, 0x3d, 0xe0, 0xfb, 0x3c, 0xaa, 0x9e, 0x8d, 0x1a, 0x7f, + 0x36, 0xc2, 0x39, 0x76, + 0x5d, 0xd7, 0xe1, 0x5e, 0x14, 0xe7, 0x05, 0x03, 0xce, 0xfb, 0x7c, 0x2d, + 0x7c, 0xbf, 0x57, 0xf8, + 0x3a, 0xfb, 0x79, 0xbd, 0x36, 0x3f, 0x78, 0x75, 0x5e, 0x68, 0xc5, 0xb6, + 0x26, 0xa0, 0x0b, 0x33, + 0xed, 0x5a, 0x6b, 0xe2, 0xfe, 0xbd, 0xae, 0xdd, 0x8b, 0x98, 0x09, 0xe0, + 0xf9, 0xbd, 0xf2, 0xd7, + 0xc4, 0xea, 0x42, 0x5f, 0xa5, 0x0b, 0x19, 0x94, 0x2e, 0x60, 0xcf, 0x0b, + 0xa0, 0x7f, 0x70, 0xbe, + 0x08, 0x7a, 0x5e, 0x3b, 0xba, 0x3e, 0x76, 0x5e, 0xd3, 0xb8, 0xb6, 0x2e, + 0xf4, 0xc4, 0x1e, 0x8d, + 0xa8, 0x0b, 0xb8, 0x33, 0x33, 0x3c, 0xa3, 0x6c, 0x5d, 0xf7, 0x9c, 0xd7, + 0x75, 0x7e, 0x4f, 0xd9, + 0x89, 0x4f, 0xd7, 0xef, 0xab, 0x2e, 0x80, 0xfe, 0xe9, 0x98, 0x33, 0x8a, + 0xec, 0xd9, 0x68, 0xd8, + 0xbe, 0x47, 0xe0, 0x79, 0x7d, 0x16, 0x70, 0x5e, 0x7f, 0x11, 0x74, 0xc1, + 0x7a, 0x36, 0xaa, 0x5e, + 0xd3, 0xe0, 0xcf, 0x46, 0xf6, 0x19, 0xf2, 0xeb, 0xba, 0xe7, 0xbc, 0xde, + 0x87, 0xbc, 0x29, 0x72, + 0x0f, 0x2c, 0x91, 0x7b, 0x60, 0x82, 0xd8, 0x03, 0xe8, 0xe7, 0x31, 0xff, + 0x3c, 0x1a, 0x9a, 0x7d, + 0xae, 0x73, 0xdd, 0x4b, 0xc0, 0x9a, 0xb4, 0xc2, 0x7c, 0x17, 0xce, 0x8e, + 0x5e, 0xe6, 0xc2, 0x7e, + 0xaf, 0xe2, 0x19, 0x17, 0x45, 0x17, 0x90, 0x6b, 0x12, 0xdb, 0x19, 0x05, + 0xce, 0x0b, 0xec, 0x35, + 0x03, 0x75, 0xdd, 0xf5, 0x7b, 0x15, 0xfe, 0xbb, 0x86, 0xd3, 0x85, 0xa3, + 0x58, 0x75, 0x21, 0x92, + 0xef, 0x12, 0xa6, 0xeb, 0xf0, 0x19, 0xe7, 0x7e, 0x58, 0x3f, 0xe8, 0x19, + 0xe5, 0xd2, 0x85, 0xfb, + 0xe7, 0xbf, 0x47, 0xf3, 0x5d, 0xdc, 0x7e, 0xd8, 0x52, 0xa2, 0xeb, 0x3e, + 0x3f, 0x2c, 0x85, 0x39, + 0xa7, 0xf7, 0xac, 0x73, 0x7a, 0x1f, 0x73, 0x4e, 0xcf, 0xb6, 0x70, 0xe7, + 0x74, 0xc5, 0xe7, 0x91, + 0x9d, 0x1d, 0xe0, 0xf3, 0x98, 0x99, 0x05, 0xc7, 0x61, 0x32, 0xf6, 0x79, + 0xfd, 0xc5, 0xda, 0x03, + 0xd8, 0xe7, 0x31, 0x7f, 0x36, 0x6a, 0x86, 0x3f, 0x57, 0xe0, 0x9c, 0x71, + 0xd9, 0xef, 0x85, 0x6b, + 0xae, 0x2c, 0x0e, 0x13, 0x2d, 0x86, 0xc5, 0xfd, 0xf7, 0xa8, 0x7b, 0x20, + 0xe2, 0xbe, 0x73, 0xb4, + 0xec, 0x2a, 0x6b, 0xc2, 0xcf, 0x0b, 0x96, 0xef, 0xe2, 0x9f, 0x1f, 0xec, + 0xf8, 0x61, 0x43, 0xf1, + 0xbb, 0x8f, 0x29, 0xae, 0x77, 0x1f, 0xd6, 0xc4, 0xd9, 0x2f, 0x2b, 0x5d, + 0x5f, 0x04, 0xf8, 0x2e, + 0xa0, 0x85, 0x43, 0x85, 0xef, 0xf2, 0x20, 0x74, 0x21, 0xe0, 0x9c, 0x1e, + 0x14, 0x87, 0x71, 0xfb, + 0x61, 0x6b, 0xbe, 0x8b, 0xeb, 0x79, 0xbd, 0x7a, 0xbf, 0xd6, 0x79, 0x21, + 0x56, 0xff, 0x5d, 0x8b, + 0xc7, 0x77, 0x19, 0x31, 0x5d, 0x60, 0xf7, 0x29, 0x3b, 0xaf, 0xdb, 0xba, + 0xce, 0x75, 0x61, 0xfc, + 0x60, 0x75, 0x81, 0xef, 0x01, 0x55, 0x6c, 0xdb, 0x3a, 0xa7, 0x8b, 0xd9, + 0x8c, 0xf2, 0xf8, 0x1a, + 0xec, 0x19, 0xfe, 0x3c, 0x96, 0xc7, 0xd7, 0x56, 0x71, 0xbd, 0xfb, 0xab, + 0x0b, 0xb8, 0x18, 0x96, + 0xf4, 0xbc, 0xee, 0xd6, 0x75, 0x6d, 0xed, 0xbc, 0x7e, 0x3f, 0xf6, 0x40, + 0x3c, 0xb1, 0xed, 0x6b, + 0xfa, 0x2e, 0x41, 0xf1, 0x35, 0x38, 0x7b, 0xc0, 0xb3, 0x2f, 0x24, 0xbe, + 0xf6, 0xf0, 0xad, 0x89, + 0xeb, 0x19, 0xb7, 0x74, 0xed, 0x39, 0x59, 0x7c, 0xed, 0x45, 0xd2, 0x05, + 0x64, 0xbc, 0xdf, 0x80, + 0xf3, 0x6b, 0x6e, 0xce, 0x7c, 0x97, 0xb0, 0xbc, 0x89, 0xed, 0xbb, 0xc4, + 0x19, 0xd7, 0x43, 0xfa, + 0xef, 0x38, 0x2d, 0xb2, 0x7d, 0x97, 0xe0, 0xf8, 0x1a, 0xbf, 0x17, 0xf6, + 0xd9, 0xd0, 0x27, 0xa9, + 0xf6, 0x2a, 0x6f, 0xf2, 0x22, 0xe9, 0x02, 0x2e, 0xae, 0x67, 0x48, 0xcf, + 0xeb, 0x4b, 0xaf, 0xae, + 0xfb, 0xbf, 0x2f, 0x13, 0xeb, 0x1e, 0xd0, 0xe3, 0xc9, 0x79, 0x81, 0xae, + 0x8f, 0xc5, 0x73, 0x2a, + 0x30, 0x0e, 0x33, 0x5e, 0x9d, 0xd7, 0x5f, 0x84, 0x3d, 0x80, 0x3b, 0x33, + 0xc7, 0x95, 0x07, 0x84, + 0xb5, 0x08, 0x8a, 0x9b, 0x5a, 0xb1, 0xc6, 0xa0, 0x1c, 0x52, 0x68, 0xbc, + 0xff, 0x7e, 0xae, 0x09, + 0xd2, 0x77, 0xc9, 0x86, 0xc5, 0xd7, 0x40, 0xd7, 0x47, 0x99, 0x58, 0x75, + 0x21, 0xc6, 0x3c, 0xe0, + 0x2a, 0xae, 0xe7, 0xce, 0x9b, 0xac, 0x3d, 0xaf, 0x6d, 0xdf, 0x25, 0x64, + 0x2e, 0xf4, 0x83, 0xd1, + 0x05, 0x6c, 0xbc, 0x5f, 0x9c, 0xd7, 0x15, 0x79, 0x93, 0x35, 0x3f, 0xcc, + 0x8e, 0xeb, 0xc5, 0xa7, + 0x0b, 0x38, 0x2d, 0x0a, 0x7f, 0x36, 0x8a, 0x7b, 0x61, 0xbf, 0x27, 0x3b, + 0xd6, 0x29, 0xcf, 0x87, + 0x47, 0x8a, 0xeb, 0xa9, 0xfd, 0xf7, 0x19, 0x5e, 0x8b, 0x94, 0x31, 0x2c, + 0xfe, 0x9a, 0x99, 0x96, + 0x52, 0xd7, 0xe7, 0xd6, 0x73, 0x2a, 0xec, 0xf7, 0x8e, 0x7c, 0x36, 0x6a, + 0x51, 0xce, 0xe9, 0x23, + 0xcc, 0xdc, 0x8f, 0x58, 0xd7, 0xc4, 0xd0, 0xc6, 0x59, 0x91, 0x77, 0x09, + 0x8a, 0xaf, 0xb9, 0xfa, + 0x4d, 0x44, 0xbc, 0x7f, 0x23, 0x96, 0x58, 0x67, 0xac, 0x79, 0x40, 0x4b, + 0x8b, 0x78, 0xbd, 0x4f, + 0x58, 0xde, 0x04, 0xf6, 0xe0, 0xc2, 0xe3, 0xbb, 0x5c, 0x2f, 0xae, 0x77, + 0xbf, 0xf3, 0x80, 0xbd, + 0x00, 0x3f, 0xec, 0x34, 0x3c, 0xbe, 0x86, 0xd7, 0x85, 0x8d, 0xb8, 0x74, + 0x01, 0x17, 0xef, 0xef, + 0x89, 0x9a, 0x4f, 0x1e, 0xa7, 0x08, 0x8b, 0xaf, 0x81, 0xae, 0x0f, 0x91, + 0xb9, 0xf0, 0xd8, 0xcf, + 0x28, 0x19, 0xd4, 0x6b, 0xea, 0xec, 0x8c, 0x22, 0x8d, 0xaf, 0x2d, 0x85, + 0xef, 0x21, 0xe2, 0x97, + 0xe1, 0x35, 0x5b, 0x1b, 0x71, 0xea, 0xc2, 0xd5, 0x63, 0xdb, 0xae, 0x3a, + 0xa7, 0xf5, 0x3d, 0x93, + 0x9d, 0x85, 0xe4, 0xc3, 0x23, 0xed, 0x01, 0xdc, 0xf3, 0x38, 0x2c, 0xb6, + 0xfd, 0xff, 0x03, 0x75, + 0x97, 0x23, 0xba +}; diff --git a/ genplus-gx/source/ngc/gui/iso9660.c b/ genplus-gx/source/ngc/gui/iso9660.c new file mode 100644 index 0000000..2a8bb9a --- /dev/null +++ b/ genplus-gx/source/ngc/gui/iso9660.c @@ -0,0 +1,239 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * DVD ISO9660/Joliet Parsing + * + * This is not intended as a complete guide to ISO9660. + * Here I use the bare minimum! + ***************************************************************************/ +#include "shared.h" +#include "dvd.h" +#include "iso9660.h" + +/** Minimal ISO Directory Definition **/ +#define RECLEN 0 /* Record length */ +#define EXTENT 6 /* Extent */ +#define FILE_LENGTH 14 /* File length (BIG ENDIAN) */ +#define FILE_FLAGS 25 /* File flags */ +#define FILENAME_LENGTH 32 /* Filename length */ +#define FILENAME 33 /* ASCIIZ filename */ + +/** Minimal Primary Volume Descriptor **/ +#define PVDROOT 0x9c + +static int IsJoliet = 0; +u64 rootdir = 0; +u64 basedir = 0; +int rootdirlength = 0; + +/** Global file entry table **/ +FILEENTRIES filelist[MAXFILES]; +static char dvdbuffer[2048]; + +/**************************************************************************** + * Primary Volume Descriptor + * + * The PVD should reside between sector 16 and 31. + * This is for single session DVD only. + ****************************************************************************/ +int getpvd () +{ + int sector = 16; + u32 rootdir32; + + basedir = rootdirlength = 0; + IsJoliet = -1; + + /** Look for Joliet PVD first **/ + while (sector < 32) + { + if (dvd_read (&dvdbuffer, 2048, (u64)(sector << 11))) + { + if (memcmp (&dvdbuffer, "\2CD001\1", 8) == 0) + { + memcpy(&rootdir32, &dvdbuffer[PVDROOT + EXTENT], 4); + basedir = (u64)rootdir32; + memcpy (&rootdirlength, &dvdbuffer[PVDROOT + FILE_LENGTH], 4); + basedir <<= 11; + IsJoliet = 1; + break; + } + } + else return 0; /*** Can't read sector! ***/ + sector++; + } + + if (IsJoliet > 0) return 1; /*** Joliet PVD Found ? ***/ + + /*** Look for standard ISO9660 PVD ***/ + sector = 16; + while (sector < 32) + { + if (dvd_read (&dvdbuffer, 2048, (u64)(sector << 11))) + { + if (memcmp (&dvdbuffer, "\1CD001\1", 8) == 0) + { + memcpy (&rootdir32, &dvdbuffer[PVDROOT + EXTENT], 4); + basedir = (u64)rootdir32; + memcpy (&rootdirlength, &dvdbuffer[PVDROOT + FILE_LENGTH], 4); + IsJoliet = 0; + basedir <<= 11; + break; + } + } + else return 0; /*** Can't read sector! ***/ + sector++; + } + + return (IsJoliet == 0); +} + +/**************************************************************************** + * getentry + * + * Support function to return the next file entry, if any + * Declared static to avoid accidental external entry. + ****************************************************************************/ +static int diroffset = 0; +static int getentry (int entrycount) +{ + char fname[512]; /* Huge, but experience has determined this */ + char *ptr; + char *filename; + char *filenamelength; + char *rr; + int j; + u32 offset32; + + /* Basic checks */ + if (entrycount >= MAXFILES) return 0; + if (diroffset >= 2048) return 0; + + /** Decode this entry **/ + if (dvdbuffer[diroffset]) /* Record length available */ + { + /* Update offsets into sector buffer */ + ptr = (char *) &dvdbuffer[0]; + ptr += diroffset; + filename = ptr + FILENAME; + filenamelength = ptr + FILENAME_LENGTH; + + /* Check for wrap round - illegal in ISO spec, + * but certain crap writers do it! */ + if ((diroffset + dvdbuffer[diroffset]) > 2048) return 0; + + if (*filenamelength) + { + memset (&fname, 0, 512); + + /*** Do ISO 9660 first ***/ + if (!IsJoliet) strcpy (fname, filename); + else + { + /*** The more tortuous unicode joliet entries ***/ + for (j = 0; j < (*filenamelength >> 1); j++) + { + fname[j] = filename[j * 2 + 1]; + } + + fname[j] = 0; + + if (strlen (fname) >= MAXJOLIET) fname[MAXJOLIET - 1] = 0; + if (strlen (fname) == 0) fname[0] = filename[0]; + } + + if (strlen (fname) == 0) strcpy (fname, "."); + else + { + if (fname[0] == 1) strcpy (fname, ".."); + else + { + /* + * Move *filenamelength to t, + * Only to stop gcc warning for noobs :) + */ + int t = *filenamelength; + fname[t] = 0; + } + } + + /** Rockridge Check **/ + rr = strstr (fname, ";"); + if (rr != NULL) *rr = 0; + + strcpy (filelist[entrycount].filename, fname); + memcpy (&offset32, &dvdbuffer[diroffset + EXTENT], 4); + filelist[entrycount].offset = (u64)offset32; + memcpy (&filelist[entrycount].length, &dvdbuffer[diroffset + FILE_LENGTH], 4); + memcpy (&filelist[entrycount].flags, &dvdbuffer[diroffset + FILE_FLAGS], 1); + + filelist[entrycount].offset <<= 11; + filelist[entrycount].flags = filelist[entrycount].flags & 2; + filelist[entrycount].filename_offset = 0; + + /*** Prepare for next entry ***/ + diroffset += dvdbuffer[diroffset]; + + return 1; + } + } + return 0; +} + +/**************************************************************************** + * parsedirectory + * + * This function will parse the directory tree. + * It relies on rootdir and rootdirlength being pre-populated by a call to + * getpvd, a previous parse or a menu selection. + * + * The return value is number of files collected, or 0 on failure. + ****************************************************************************/ +int parsedirectory () +{ + int pdlength; + u64 pdoffset; + u64 rdoffset; + int len = 0; + int filecount = 0; + + pdoffset = rdoffset = rootdir; + pdlength = rootdirlength; + filecount = 0; + + /** Clear any existing values ***/ + memset (&filelist, 0, sizeof (FILEENTRIES) * MAXFILES); + + /*** Get as many files as possible ***/ + while (len < pdlength) + { + if (dvd_read (&dvdbuffer, 2048, pdoffset) == 0) return 0; + + diroffset = 0; + + while (getentry (filecount)) + { + if (filecount < MAXFILES) filecount++; + } + + len += 2048; + pdoffset = rdoffset + len; + } + return filecount; +} diff --git a/ genplus-gx/source/ngc/gui/iso9660.h b/ genplus-gx/source/ngc/gui/iso9660.h new file mode 100644 index 0000000..026adda --- /dev/null +++ b/ genplus-gx/source/ngc/gui/iso9660.h @@ -0,0 +1,45 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * DVD ISO9660/Joliet Parsing + * + * This is not intended as a complete guide to ISO9660. + * Here I use the bare minimum! + ***************************************************************************/ +#include "vfat.h" +#define MAXFILES 1000 /** Restrict to 1000 files per dir **/ +#define MAXJOLIET 256 + +typedef struct +{ + u64 offset; + unsigned int length; + char flags; + char filename[13]; + char displayname[MAX_LONG_NAME]; + u16 filename_offset; +} FILEENTRIES; + +extern u64 basedir; +extern u64 rootdir; +extern int rootdirlength; + +extern int getpvd (); +extern int parsedirectory (); +extern FILEENTRIES filelist[MAXFILES]; diff --git a/ genplus-gx/source/ngc/gui/iso9660.h.old b/ genplus-gx/source/ngc/gui/iso9660.h.old new file mode 100644 index 0000000..ae132d6 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/iso9660.h.old @@ -0,0 +1,44 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * DVD ISO9660/Joliet Parsing + * + * This is not intended as a complete guide to ISO9660. + * Here I use the bare minimum! + ***************************************************************************/ + +#define MAXJOLIET 256 +#define MAXFILES 1000 /** Restrict to 1000 files per dir **/ + +typedef struct +{ + u64 offset; + unsigned int length; + char flags; + char filename[MAXJOLIET]; + u16 filename_offset; +} FILEENTRIES; + +extern u64 basedir; +extern u64 rootdir; +extern int rootdirlength; + +extern int getpvd (); +extern int parsedirectory (); +extern FILEENTRIES filelist[MAXFILES]; diff --git a/ genplus-gx/source/ngc/gui/legal.c b/ genplus-gx/source/ngc/gui/legal.c new file mode 100644 index 0000000..e5fde47 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/legal.c @@ -0,0 +1,100 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ***************************************************************************/ + +#include "shared.h" +#include "font.h" +#include "dkpro.h" + +extern u32 *xfb[2]; +extern int whichfb; + +/* + * Unpack the devkit pro logo + */ +u32 *dkproraw; + +int dkunpack () +{ + unsigned long res, inbytes, outbytes; + + inbytes = dkpro_COMPRESSED; + outbytes = dkpro_RAW; + dkproraw = malloc (dkpro_RAW + 16); + res = uncompress ((char *) dkproraw, &outbytes, (char *) &dkpro[0], inbytes); + if (res == Z_OK) return 1; + free (dkproraw); + return 0; +} + +/* + * This is the legal stuff - which must be shown at program startup + * Any derivative work MUST include the same textual output. + * + * In other words, play nice and give credit where it's due. + */ +void legal () +{ + int ypos = 64; + + whichfb ^= 1; + VIDEO_ClearFrameBuffer(&TVNtsc480IntDf, xfb[whichfb], COLOR_BLACK); + back_framewidth = 640; + + WriteCentre (ypos, "Genesis Plus Sega Mega Drive Emulator (v1.2a)"); + ypos += fheight; + WriteCentre (ypos, "(C) 1999 - 2003 Charles MacDonald"); + ypos += fheight; + WriteCentre (ypos, "This is free software, and you are welcome to"); + ypos += fheight; + WriteCentre (ypos, "redistribute it under the conditions of the"); + ypos += fheight; + WriteCentre (ypos, "GNU GENERAL PUBLIC LICENSE Version 2"); + ypos += fheight; + WriteCentre (ypos, "Additionally, the developers of this port"); + ypos += fheight; + WriteCentre (ypos, "disclaims all copyright interests in the "); + ypos += fheight; + WriteCentre (ypos, "Nintendo Gamecube Porting code."); + ypos += fheight; + WriteCentre (ypos, "You are free to use it as you wish."); + ypos += 6 * fheight; + + if (dkunpack ()) + { + int w, h, p, dispoffset; + p = 0; + dispoffset = (316 * 320) + ((640 - dkpro_WIDTH) >> 2); + + for (h = 0; h < dkpro_HEIGHT; h++) + { + for (w = 0; w < dkpro_WIDTH >> 1; w++) + xfb[whichfb][dispoffset + w] = dkproraw[p++]; + + dispoffset += 320; + } + + free (dkproraw); + } + else WriteCentre (ypos, "Developed with DevkitPPC and libOGC"); + + WriteCentre (ypos, "Press A to continue"); + SetScreen (); + WaitButtonA (); +} diff --git a/ genplus-gx/source/ngc/gui/mcard.c b/ genplus-gx/source/ngc/gui/mcard.c new file mode 100644 index 0000000..0119f3e --- /dev/null +++ b/ genplus-gx/source/ngc/gui/mcard.c @@ -0,0 +1,588 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ***************************************************************************/ +#include "shared.h" +#include "dvd.h" +#include "font.h" +#include "rominfo.h" +#include "saveicon.h" /*** Nice little icon - thanks brakken! ***/ + +/* Support for MemCards */ +/** + * libOGC System Work Area + */ +static u8 SysArea[CARD_WORKAREA] ATTRIBUTE_ALIGN (32); + +/** + * DMA Transfer Area. + * Must be 32-byte aligned. + * 64k SRAM + 2k Icon + */ +unsigned char savebuffer[0x24000] ATTRIBUTE_ALIGN (32); + +card_dir CardDir; +card_file CardFile; +card_stat CardStatus; +extern int CARDSLOT; +extern int use_SDCARD; + +int ManageSRAM (int direction); +int ManageState (int direction); + +/**************************************************************************** + * SRAM autoload + * + * the detection order is the following: + * MCARD (SLOTA) > MCARD (SLOTB) > SDCARD (SLOTA) > SDCARD (SLOTB) + * + *****************************************************************************/ +extern u8 SILENT; + +void sram_autoload() +{ + int ret = 0; + int i = 0; + int old_cardslot = CARDSLOT; + int old_sdcard = use_SDCARD; + + SILENT = 1; /* this should be transparent to the user */ + while ((i < 4) && (!ret)) + { + use_SDCARD = (i&2) ? 1 : 0; + CARDSLOT = (i&1) ? CARD_SLOTB : CARD_SLOTA; + ret = ManageSRAM(1); + i++; + } + if (!ret) + { + /* restore old settings if not found */ + CARDSLOT = old_cardslot; + use_SDCARD = old_sdcard; + } + SILENT = 0; +} + +/**************************************************************************** + * SDCARD Access functions + * + * We use the same buffer as for Memory Card manager + * Function returns TRUE on success. + *****************************************************************************/ +int SD_ManageFile(char *filename, int direction, int filetype) +{ + char name[1024]; + sd_file *handle; + int len = 0; + int offset = 0; + int filesize; + unsigned long inbytes,outbytes; + + /* build complete SDCARD filename */ + sprintf (name, "dev%d:\\genplus\\saves\\%s", CARDSLOT, filename); + + /* open file */ + handle = direction ? SDCARD_OpenFile (name, "rb") : + SDCARD_OpenFile (name, "wb"); + + if (handle == NULL) + { + sprintf (filename, "Error opening %s", name); + WaitPrompt(filename); + return 0; + } + + switch (direction) + { + case 0: /* SAVING */ + + if (filetype) /* SRAM */ + { + inbytes = 0x10000; + outbytes = 0x12000; + compress2 ((char *) &savebuffer[sizeof(outbytes)], &outbytes, (char *) &sram.sram, inbytes, 9); + memcpy(&savebuffer[0], &outbytes, sizeof(outbytes)); + filesize = outbytes + sizeof(outbytes); + } + else filesize = state_save(&savebuffer[0]); /* STATE */ + + len = SDCARD_WriteFile (handle, savebuffer, filesize); + SDCARD_CloseFile (handle); + + if (len != filesize) + { + sprintf (filename, "Error writing %s", name); + WaitPrompt (filename); + return 0; + } + + if (filetype) sram.crc = crc32 (0, &sram.sram[0], 0x10000); + sprintf (filename, "Saved %d bytes successfully", filesize); + WaitPrompt (filename); + return 1; + + case 1: /* LOADING */ + + while ((len = SDCARD_ReadFile (handle, &savebuffer[offset], 2048)) > 0) offset += len; + if (filetype) /* SRAM */ + { + memcpy(&inbytes,&savebuffer[0],sizeof(inbytes)); + outbytes = 0x10000; + uncompress ((char *) &sram.sram, &outbytes, (char *) &savebuffer[sizeof(inbytes)], inbytes); + sram.crc = crc32 (0, &sram.sram[0], outbytes); + system_reset (); + } + else state_load(&savebuffer[0]); /* STATE */ + SDCARD_CloseFile (handle); + + sprintf (filename, "Loaded %d bytes successfully", offset); + WaitPrompt (filename); + return 1; + } + + return 0; +} + +/**************************************************************************** + * MountTheCard + * + * libOGC provides the CARD_Mount function, and it should be all you need. + * However, experience with previous emulators has taught me that you are + * better off doing a little bit more than that! + * + * Function returns TRUE on success. + *****************************************************************************/ +int MountTheCard () +{ + int tries = 0; + int CardError; + while (tries < 10) + { + *(unsigned long *) (0xcc006800) |= 1 << 13; /*** Disable Encryption ***/ + uselessinquiry (); + VIDEO_WaitVSync (); + CardError = CARD_Mount (CARDSLOT, SysArea, NULL); /*** Don't need or want a callback ***/ + if (CardError == 0) return 1; + else EXI_ProbeReset (); + tries++; + } + return 0; +} + +/**************************************************************************** + * CardFileExists + * + * Wrapper to search through the files on the card. + * Returns TRUE if found. + ****************************************************************************/ +int CardFileExists (char *filename) +{ + int CardError = CARD_FindFirst (CARDSLOT, &CardDir, TRUE); + while (CardError != CARD_ERROR_NOFILE) + { + CardError = CARD_FindNext (&CardDir); + if (strcmp ((char *) CardDir.filename, filename) == 0) return 1; + } + return 0; +} + +/**************************************************************************** + * ManageSRAM + * + * Here is the main SRAM Management stuff. + * The output file contains an icon (2K), 64 bytes comment and the SRAM (64k). + * As memcards are allocated in blocks of 8k or more, you have a around + * 6k bytes to save/load any other data you wish without altering any of the + * main save / load code. + * + * direction == 0 save, 1 load. + ****************************************************************************/ +int ManageSRAM (int direction) +{ + char filename[128]; + char action[80]; + int CardError; + unsigned int SectorSize; + int blocks; + char comment[2][32] = { {"Genesis Plus 1.2a"}, {"SRAM Save"} }; + int outbytes = 0; + int sbo; + int i; + unsigned long inzipped,outzipped; + + if (!genromsize) return 0; + + if (direction) ShowAction ("Loading SRAM ..."); + else ShowAction ("Saving SRAM ..."); + + /* First, build a filename based on the information retrieved for this ROM */ + if (strlen (rominfo.domestic)) strcpy (filename, rominfo.domestic); + else strcpy (filename, rominfo.international); + + /* As these names tend to be bulked with spaces, let's strip them */ + /* Name should be in 16 character blocks, so take first 16 */ + filename[16] = 0; + for (i = strlen (filename) - 1; i > 0; i--) + if (filename[i] != 32) break; + filename[i + 1] = 0; + + /* Now add the 16bit checksum, to ensure it's the same ROM */ + sprintf (filename, "%s%02X.srm", filename, rominfo.checksum); + strcpy (comment[1], filename); + + /* device is SDCARD, let's go */ + if (use_SDCARD) return SD_ManageFile(filename,direction,1); + + /* device is MCARD, we continue */ + if (direction == 0) /*** Saving ***/ + { + /*** Build the output buffer ***/ + memcpy (&savebuffer, &icon, 2048); + memcpy (&savebuffer[2048], &comment[0], 64); + + inzipped = 0x10000; + outzipped = 0x12000; + compress2 ((char *) &savebuffer[2112+sizeof(outzipped)], &outzipped, (char *) &sram.sram, inzipped, 9); + memcpy(&savebuffer[2112], &outzipped, sizeof(outzipped)); + } + + outbytes = 2048 + 64 + outzipped + sizeof(outzipped); + + /*** Initialise the CARD system ***/ + memset (&SysArea, 0, CARD_WORKAREA); + CARD_Init ("GENP", "00"); + + /*** Attempt to mount the card ***/ + CardError = MountTheCard (); + + if (CardError) + { + /*** Retrieve the sector size ***/ + CardError = CARD_GetSectorSize (CARDSLOT, &SectorSize); + + switch (direction) + { + case 0: /*** Saving ***/ + /*** Determine number of blocks on this card ***/ + blocks = (outbytes / SectorSize) * SectorSize; + if (outbytes % SectorSize) blocks += SectorSize; + + /*** Check if a previous save exists ***/ + if (CardFileExists (filename)) + { + CardError = CARD_Open (CARDSLOT, filename, &CardFile); + if (CardError) + { + sprintf (action, "Error Open : %d", CardError); + WaitPrompt (action); + CARD_Unmount (CARDSLOT); + return 0; + } + + int size = CardFile.len; + CARD_Close (&CardFile); + + if (size < blocks) + { + /* new size is bigger: check if there is enough space left */ + CardError = CARD_Create (CARDSLOT, "TEMP", blocks-size, &CardFile); + if (CardError) + { + sprintf (action, "Error Update : %d", CardError); + WaitPrompt (action); + CARD_Unmount (CARDSLOT); + return 0; + } + CARD_Close (&CardFile); + CARD_Delete(CARDSLOT, "TEMP"); + } + + /* always delete existing slot */ + CARD_Delete(CARDSLOT, filename); + } + + /*** Create a new slot ***/ + CardError = CARD_Create (CARDSLOT, filename, blocks, &CardFile); + if (CardError) + { + sprintf (action, "Error create : %d %d", CardError, CARDSLOT); + WaitPrompt (action); + CARD_Unmount (CARDSLOT); + return 0; + } + + /*** Continue and save ***/ + CARD_GetStatus (CARDSLOT, CardFile.filenum, &CardStatus); + CardStatus.icon_addr = 0x0; + CardStatus.icon_fmt = 2; + CardStatus.icon_speed = 1; + CardStatus.comment_addr = 2048; + CARD_SetStatus (CARDSLOT, CardFile.filenum, &CardStatus); + + /*** And write the blocks out ***/ + sbo = 0; + while (outbytes > 0) + { + CardError = CARD_Write (&CardFile, &savebuffer[sbo], SectorSize, sbo); + outbytes -= SectorSize; + sbo += SectorSize; + } + + CARD_Close (&CardFile); + CARD_Unmount (CARDSLOT); + sram.crc = crc32 (0, &sram.sram[0], 0x10000); + sprintf (action, "Saved %d bytes successfully", blocks); + WaitPrompt (action); + return 1; + + default: /*** Loading ***/ + if (!CardFileExists (filename)) + { + WaitPrompt ("No SRAM File Found"); + CARD_Unmount (CARDSLOT); + return 0; + } + + memset (&CardFile, 0, sizeof (CardFile)); + CardError = CARD_Open (CARDSLOT, filename, &CardFile); + if (CardError) + { + sprintf (action, "Error Open : %d", CardError); + WaitPrompt (action); + CARD_Unmount (CARDSLOT); + return 0; + } + + blocks = CardFile.len; + if (blocks < SectorSize) blocks = SectorSize; + if (blocks % SectorSize) blocks++; + + /*** Just read the file back in ***/ + sbo = 0; + int size = blocks; + while (blocks > 0) + { + CARD_Read (&CardFile, &savebuffer[sbo], SectorSize, sbo); + sbo += SectorSize; + blocks -= SectorSize; + } + CARD_Close (&CardFile); + CARD_Unmount (CARDSLOT); + + /* Copy to SRAM */ + memcpy(&inzipped,&savebuffer[2112],sizeof(inzipped)); + outzipped = 0x10000; + uncompress ((char *) &sram.sram, &outzipped, (char *) &savebuffer[2112+sizeof(inzipped)], inzipped); + sram.crc = crc32 (0, &sram.sram[0], 0x10000); + system_reset (); + + /*** Inform user ***/ + sprintf (action, "Loaded %d bytes successfully", size); + WaitPrompt (action); + return 1; + } + } + else WaitPrompt ("Unable to mount memory card"); + return 0; /*** Signal failure ***/ +} + +/**************************************************************************** + * ManageSTATE + * + * Here is the main Freeze File Management stuff. + * The output file contains an icon (2K), 64 bytes comment and the STATE (~128k) + * + * direction == 0 save, 1 load. + ****************************************************************************/ +int ManageState (int direction) +{ + char filename[128]; + char action[80]; + int CardError; + unsigned int SectorSize; + int blocks; + char comment[2][32] = { {"Genesis Plus 1.2a [FRZ]"}, {"Freeze State"} }; + int outbytes; + int sbo; + int i; + int state_size = 0; + + if (!genromsize) return 0; + + if (direction) ShowAction ("Loading State ..."); + else ShowAction ("Saving State ..."); + + /* First, build a filename based on the information retrieved for this ROM */ + if (strlen (rominfo.domestic)) strcpy (filename, rominfo.domestic); + else strcpy (filename, rominfo.international); + + /* As these names tend to be bulked with spaces, let's strip them */ + /* Name should be in 16 character blocks, so take first 16 */ + filename[16] = 0; + for (i = strlen (filename) - 1; i > 0; i--) if (filename[i] != 32) break; + filename[i + 1] = 0; + + /* Now add the 16bit checksum, to ensure it's the same ROM */ + sprintf (filename, "%s%02X.gpz", filename, rominfo.checksum); + strcpy (comment[1], filename); + + /* device is SDCARD, let's go */ + if (use_SDCARD) return SD_ManageFile(filename,direction,0); + + /* device is MCARD, we continue */ + if (direction == 0) /* Saving */ + { + /* Build the output buffer */ + memcpy (&savebuffer, &icon, 2048); + memcpy (&savebuffer[2048], &comment[0], 64); + state_size = state_save(&savebuffer[2112]); + } + + outbytes = 2048 + 64 + state_size; + + /*** Initialise the CARD system ***/ + memset (&SysArea, 0, CARD_WORKAREA); + CARD_Init ("GENP", "00"); + + /*** Attempt to mount the card ***/ + CardError = MountTheCard (); + + if (CardError) + { + /*** Retrieve the sector size ***/ + CardError = CARD_GetSectorSize (CARDSLOT, &SectorSize); + + switch (direction) + { + case 0: /*** Saving ***/ + /*** Determine number of blocks on this card ***/ + blocks = (outbytes / SectorSize) * SectorSize; + if (outbytes % SectorSize) blocks += SectorSize; + + /*** Check if a previous save exists ***/ + if (CardFileExists (filename)) + { + CardError = CARD_Open (CARDSLOT, filename, &CardFile); + if (CardError) + { + sprintf (action, "Error Open : %d", CardError); + WaitPrompt (action); + CARD_Unmount (CARDSLOT); + return 0; + } + + int size = CardFile.len; + CARD_Close (&CardFile); + + if (size < blocks) + { + /* new size is bigger: check if there is enough space left */ + CardError = CARD_Create (CARDSLOT, "TEMP", blocks-size, &CardFile); + if (CardError) + { + sprintf (action, "Error Update : %d", CardError); + WaitPrompt (action); + CARD_Unmount (CARDSLOT); + return 0; + } + CARD_Close (&CardFile); + CARD_Delete(CARDSLOT, "TEMP"); + } + + /* always delete existing slot */ + CARD_Delete(CARDSLOT, filename); + } + + /*** Create a new slot ***/ + CardError = CARD_Create (CARDSLOT, filename, blocks, &CardFile); + if (CardError) + { + sprintf (action, "Error create : %d %d", CardError, CARDSLOT); + WaitPrompt (action); + CARD_Unmount (CARDSLOT); + return 0; + } + + /*** Continue and save ***/ + CARD_GetStatus (CARDSLOT, CardFile.filenum, &CardStatus); + CardStatus.icon_addr = 0x0; + CardStatus.icon_fmt = 2; + CardStatus.icon_speed = 1; + CardStatus.comment_addr = 2048; + CARD_SetStatus (CARDSLOT, CardFile.filenum, &CardStatus); + + /*** And write the blocks out ***/ + sbo = 0; + while (outbytes > 0) + { + CardError = CARD_Write (&CardFile, &savebuffer[sbo], SectorSize, sbo); + outbytes -= SectorSize; + sbo += SectorSize; + } + + CARD_Close (&CardFile); + CARD_Unmount (CARDSLOT); + sprintf (action, "Saved %d bytes successfully", blocks); + WaitPrompt (action); + return 1; + + default: /*** Loading ***/ + if (!CardFileExists (filename)) + { + WaitPrompt ("No Savestate Found"); + CARD_Unmount (CARDSLOT); + return 0; + } + + memset (&CardFile, 0, sizeof (CardFile)); + CardError = CARD_Open (CARDSLOT, filename, &CardFile); + if (CardError) + { + sprintf (action, "Error Open : %d", CardError); + WaitPrompt (action); + CARD_Unmount (CARDSLOT); + return 0; + } + + blocks = CardFile.len; + if (blocks < SectorSize) blocks = SectorSize; + if (blocks % SectorSize) blocks++; + + /*** Just read the file back in ***/ + sbo = 0; + int size = blocks; + while (blocks > 0) + { + CARD_Read (&CardFile, &savebuffer[sbo], SectorSize, sbo); + sbo += SectorSize; + blocks -= SectorSize; + } + CARD_Close (&CardFile); + CARD_Unmount (CARDSLOT); + + state_load(&savebuffer[2112]); + + /*** Inform user ***/ + sprintf (action, "Loaded %d bytes successfully", size); + WaitPrompt (action); + return 1; + } + } + else WaitPrompt ("Unable to mount memory card"); + return 0; /*** Signal failure ***/ +} diff --git a/ genplus-gx/source/ngc/gui/menu.c b/ genplus-gx/source/ngc/gui/menu.c new file mode 100644 index 0000000..c0ca9e9 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/menu.c @@ -0,0 +1,623 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Nintendo Gamecube Menus + * + * Please put any user menus here! - softdev March 12 2006 + ***************************************************************************/ +#include "shared.h" +#include "dvd.h" +#include "rominfo.h" +#include "font.h" + +#define PSOSDLOADID 0x7c6000a6 + +/*************************************************************************** + * drawmenu + * + * As it says, simply draws the menu with a highlight on the currently + * selected item :) + ***************************************************************************/ +char menutitle[60] = { "" }; +int menu = 0; + +void drawmenu (char items[][20], int maxitems, int selected) +{ + int i; + int ypos; + + ypos = (310 - (fheight * maxitems)) >> 1; + ypos += 130; + + ClearScreen (); + WriteCentre (134, menutitle); + + for (i = 0; i < maxitems; i++) + { + if (i == selected) WriteCentre_HL (i * fheight + ypos, (char *) items[i]); + else WriteCentre (i * fheight + ypos, (char *) items[i]); + } + + SetScreen (); +} + +/**************************************************************************** + * domenu + * + * Returns index into menu array when A is pressed, -1 for B + ****************************************************************************/ +int domenu (char items[][20], int maxitems) +{ + int redraw = 1; + int quit = 0; + short p; + int ret = 0; + signed char a,b; + + while (quit == 0) + { + if (redraw) + { + drawmenu (&items[0], maxitems, menu); + redraw = 0; + } + + p = PAD_ButtonsDown (0); + a = PAD_StickY (0); + b = PAD_StickX (0); + + /*** Look for up ***/ + if ((p & PAD_BUTTON_UP) || (a > 70)) + { + redraw = 1; + menu--; + if (menu < 0) menu = maxitems - 1; + } + + /*** Look for down ***/ + if ((p & PAD_BUTTON_DOWN) || (a < -70)) + { + redraw = 1; + menu++; + if (menu == maxitems) menu = 0; + } + + if ((p & PAD_BUTTON_A) || (b > 40) || (p & PAD_BUTTON_RIGHT)) + { + quit = 1; + ret = menu; + } + + if ((b < -40) || (p & PAD_BUTTON_LEFT)) + { + quit = 1; + ret = 0 - 2 - menu; + } + + if (p & PAD_BUTTON_B) + { + quit = 1; + ret = -1; + } + } + + return ret; +} + +/**************************************************************************** + * Sound Option menu + * + ****************************************************************************/ +double psg_preamp = 3.0; +double fm_preamp = 1.0; +u8 boost = 1; +uint8 clipping = 2; +uint8 hq_fm = 1; +uint8 FM_GENS = 0; +uint8 PSG_MAME = 0; + +void soundmenu () +{ + int ret; + int quit = 0; + int prevmenu = menu; + int count = 7; + char items[7][20]; + + strcpy (menutitle, "Sound Options"); + + sprintf (items[0], "PSG Volume : %1.2f", psg_preamp); + sprintf (items[1], "FM Volume : %1.2f", fm_preamp); + sprintf (items[2], "Volume Boost: %dX", boost); + sprintf (items[3], "HQ YM2612: %s", hq_fm ? "Y" : "N"); + sprintf (items[4], "FM core : %s", FM_GENS ? "GENS" : "MAME"); + sprintf (items[5], "PSG core: %s", PSG_MAME ? "MAME" : "SMSP"); + + strcpy (items[6], "Return to previous"); + + menu = 0; + while (quit == 0) + { + ret = domenu (&items[0], count); + switch (ret) + { + case 0: + case -2: + if (ret<0) psg_preamp -= 0.01; + else psg_preamp += 0.01; + if (psg_preamp < 0.0) psg_preamp = 5.0; + if (psg_preamp > 5.0) psg_preamp = 0.0; + sprintf (items[0], "PSG Volume : %1.2f", psg_preamp); + break; + + case 1: + case -3: + if (ret<0) fm_preamp -= 0.01; + else fm_preamp += 0.01; + if (fm_preamp < 0.0) fm_preamp = 5.0; + if (fm_preamp > 5.0) fm_preamp = 0.0; + sprintf (items[1], "FM Volume : %1.2f", fm_preamp); + break; + + case 2: + boost ++; + if (boost > 4) boost = 0; + sprintf (items[2], "Volume Boost: %dX", boost); + break; + + case 3: + hq_fm ^= 1; + sprintf (items[3], "HQ YM2612: %s", hq_fm ? "Y" : "N"); + if (genromsize) + { audio_init(48000); + fm_restore(); + } + break; + + case 4: + FM_GENS ^= 1; + psg_preamp = PSG_MAME ? (FM_GENS ? 0.85 : 0.50) : (FM_GENS ? 4.0 : 3.0); + fm_preamp = 1.0; + sprintf (items[0], "PSG Volume : %1.2f", psg_preamp); + sprintf (items[1], "FM Volume : %1.2f", fm_preamp); + sprintf (items[4], "FM core : %s", FM_GENS ? "GENS" : "MAME"); + if (genromsize) + { + audio_init(48000); + fm_restore(); + } + break; + + case 5: + PSG_MAME ^= 1; + psg_preamp = PSG_MAME ? (FM_GENS ? 0.85 : 0.50) : (FM_GENS ? 4.0 : 3.0); + fm_preamp = 1.0; + sprintf (items[0], "PSG Volume : %1.2f", psg_preamp); + sprintf (items[1], "FM Volume : %1.2f", fm_preamp); + sprintf (items[5], "PSG core: %s", PSG_MAME ? "MAME" : "SMSP"); + if (genromsize) audio_init(48000); + break; + + case 6: + case -1: + quit = 1; + break; + } + } + menu = prevmenu; +} + +/**************************************************************************** + * Misc Option menu + * + ****************************************************************************/ +extern void reloadrom (); +extern s16 square[]; +extern int oldvwidth, oldvheight; +extern uint8 alttiming; +extern uint8 dmatiming; +extern uint8 vdptiming; + +uint8 autoload = 0; +uint8 region_detect = 0; +uint8 cpu_detect = 0; + +void miscmenu () +{ + int ret; + int quit = 0; + int prevmenu = menu; + int count = 9; + char items[9][20]; + + sprintf (items[0], "Scale X: %02d", square[3]); + sprintf (items[1], "Scale Y: %02d", square[1]); + sprintf (items[2], "Vdp Latency: %s", vdptiming ? "Y" : "N"); + sprintf (items[3], "Dma Timing : %s", dmatiming ? "Y" : "N"); + sprintf (items[4], "Alt Timing : %s", alttiming ? "Y" : "N"); + if (cpu_detect == 0) sprintf (items[5], "Cpu Mode: AUTO"); + else if (cpu_detect == 1) sprintf (items[5], "Cpu Mode: NTSC"); + else if (cpu_detect == 2) sprintf (items[5], "Cpu Mode: PAL"); + if (region_detect == 0) sprintf (items[6], "Region: AUTO"); + else if (region_detect == 1) sprintf (items[6], "Region: USA"); + else if (region_detect == 2) sprintf (items[6], "Region: EUR"); + else if (region_detect == 3) sprintf (items[6], "Region: JAP-NTSC"); + else if (region_detect == 4) sprintf (items[6], "Region: JAP-PAL"); + sprintf (items[7], "SRAM autoload: %s", autoload ? "Y" : "N"); + strcpy (items[8], "Return to previous"); + + menu = 0; + while (quit == 0) + { + strcpy (menutitle, ""); + ret = domenu (&items[0], count); + switch (ret) + { + case 0: /*** Scale X ***/ + case -2: + if (ret<0) square[3] -= 2; + else square[3] += 2; + if (square[3] < 40) square[3] = 80; + if (square[3] > 80) square[3] = 40; + square[6] = square[3]; + square[0] = square[9] = -square[3]; + oldvwidth = -1; + sprintf (items[0], "Scale X: %02d", square[3]); + break; + + case 1: /*** Scale Y ***/ + case -3: + if (ret<0) square[1] -= 2; + else square[1] += 2; + if (square[1] < 30) square[1] = 60; + if (square[1] > 60) square[1] = 30; + square[4] = square[1]; + square[7] = square[10] = -square[1]; + oldvheight = -1; + sprintf (items[1], "Scale Y: %02d", square[1]); + break; + + case 2: /*** VDP access latency ***/ + vdptiming ^= 1; + sprintf (items[2], "Vdp Latency: %s", vdptiming ? "Y" : "N"); + break; + + case 3: /*** DMA timing fix ***/ + dmatiming ^= 1; + sprintf (items[3], "Dma Timing : %s", dmatiming ? "Y" : "N"); + break; + + case 4: /*** Alternate rendering timing ***/ + alttiming ^= 1; + sprintf (items[4], "Alt Timing : %s", alttiming ? "Y" : "N"); + break; + + case 5: /*** Cpu mode : PAL (50hz) or NTSC (60Hz) ***/ + cpu_detect ++; + if (cpu_detect > 2) cpu_detect = 0; + if (cpu_detect == 0) sprintf (items[5], "Cpu Mode: AUTO"); + else if (cpu_detect == 1) sprintf (items[5], "Cpu Mode: NTSC"); + else if (cpu_detect == 2) sprintf (items[5], "Cpu Mode: PAL"); + if (genromsize) reloadrom(); + break; + + case 6: /* region detection */ + region_detect ++; + if (region_detect > 4) region_detect = 0; + if (region_detect == 0) sprintf (items[6], "Region: AUTO"); + else if (region_detect == 1) sprintf (items[6], "Region: USA"); + else if (region_detect == 2) sprintf (items[6], "Region: EUR"); + else if (region_detect == 3) sprintf (items[6], "Region: JAP-NTSC"); + else if (region_detect == 4) sprintf (items[6], "Region: JAP-PAL"); + if (genromsize) reloadrom(); + break; + + case 7: /*** VDP access latency ***/ + autoload ^= 1; + sprintf (items[7], "SRAM autoload: %s", autoload ? "Y" : "N"); + break; + + case 8: + case -1: + quit = 1; + break; + } + } + menu = prevmenu; +} + +/**************************************************************************** + * Main Option menu + * + ****************************************************************************/ +extern void ConfigureJoypads(); +extern void GetGGEntries(); + +void optionmenu () +{ + int ret; + int quit = 0; + int prevmenu = menu; + int count = 5; + char items[5][20] = { + "Misc. Options", + "Sound Options", + "Configure Joypads", + "Game Genie Codes", + "Return to previous" + }; + + menu = 0; + while (quit == 0) + { + strcpy (menutitle, ""); + ret = domenu (&items[0], count); + switch (ret) + { + case 0: + miscmenu(); + break; + case 1: + soundmenu(); + break; + case 2: + ConfigureJoypads(); + break; + case 3: + GetGGEntries(); + break; + case 4: + case -1: + quit = 1; + break; + } + } + menu = prevmenu; +} + +/**************************************************************************** +* Generic Load/Save menu +* +****************************************************************************/ +int CARDSLOT = CARD_SLOTB; +int use_SDCARD = 0; +extern int ManageSRAM (int direction); +extern int ManageState (int direction); + +int loadsavemenu (int which) +{ + int prevmenu = menu; + int quit = 0; + int ret; + int count = 5; + char items[5][20]; + + strcpy (menutitle, ""); + + if (use_SDCARD) sprintf(items[0], "Device: SDCARD"); + else sprintf(items[0], "Device: MCARD"); + + if (CARDSLOT == CARD_SLOTA) sprintf(items[1], "Use: SLOT A"); + else sprintf(items[1], "Use: SLOT B"); + + if (which) + { + sprintf(items[2], "Save State"); + sprintf(items[3], "Load State"); + } + else + { + sprintf(items[2], "Save SRAM"); + sprintf(items[3], "Load SRAM"); + } + sprintf(items[4], "Return to previous"); + + menu = 2; + + while (quit == 0) + { + ret = domenu (&items[0], count); + switch (ret) + { + case -1: + case 4: + quit = 1; + break; + + case 0: + use_SDCARD ^= 1; + if (use_SDCARD) sprintf(items[0], "Device: SDCARD"); + else sprintf(items[0], "Device: MCARD"); + break; + case 1: + CARDSLOT ^= 1; + if (CARDSLOT == CARD_SLOTA) sprintf(items[1], "Use: SLOT A"); + else sprintf(items[1], "Use: SLOT B"); + break; + case 2: + case 3: + if (which) quit = ManageState(ret-2); + else quit = ManageSRAM(ret-2); + if (quit) return 1; + break; + } + } + + menu = prevmenu; + return 0; +} + + +/**************************************************************************** + * File Manager menu + * + ****************************************************************************/ +int filemenu () +{ + int prevmenu = menu; + int ret; + int quit = 0; + uint32 crccheck; + int count = 3; + char items[3][20] = { + {"SRAM Manager"}, + {"STATE Manager"}, + {"Return to previous"} + }; + + crccheck = crc32 (0, &sram.sram[0], 0x10000); + if (genromsize && (crccheck != sram.crc)) strcpy (menutitle, "*** SRAM has been modified ***"); + else strcpy (menutitle, ""); + + menu = 0; + + while (quit == 0) + { + ret = domenu (&items[0], count); + switch (ret) + { + case -1: /*** Button B ***/ + case 2: /*** Quit ***/ + ret = 0; + quit = 1; + break; + case 0: /*** SRAM Manager ***/ + case 1: /*** SaveState Manager ***/ + if (loadsavemenu(ret)) return 1; + break; + } + } + + menu = prevmenu; + return 0; +} + +/**************************************************************************** + * Load Rom menu + * + ****************************************************************************/ +extern void OpenDVD (); +extern int OpenSD (); +extern u8 UseSDCARD; + +void loadmenu () +{ + int prevmenu = menu; + int ret; + int quit = 0; + int count = 3; + char item[3][20] = { + {"Load from DVD"}, + {"Load from SDCARD"}, + {"Return to previous"} + }; + + menu = UseSDCARD ? 1 : 0; + + while (quit == 0) + { + strcpy (menutitle, ""); + ret = domenu (&item[0], count); + switch (ret) + { + case -1: /*** Button B ***/ + case 2: /*** Quit ***/ + quit = 1; + menu = prevmenu; + break; + case 0: /*** Load from DVD ***/ + OpenDVD (); + quit = 1; + break; + case 1: /*** Load from SCDARD ***/ + OpenSD (); + quit = 1; + break; + } + } +} + +/**************************************************************************** + * Main menu + * + ****************************************************************************/ + +void MainMenu () +{ + menu = 0; + int ret; + int quit = 0; + int *psoid = (int *) 0x80001800; + void (*PSOReload) () = (void (*)()) 0x80001800; /*** Stock PSO/SD Reload call ***/ + int count = 8; + char items[8][20] = { + {"Play Game"}, + {"Game Infos"}, + {"Reset Game"}, + {"Load New Game"}, + {"File Management"}, + {"Emulator Options"}, + {"Stop DVD Motor"}, + {"System Reboot"} + }; + + while (quit == 0) + { + strcpy (menutitle, ""); + ret = domenu (&items[0], count); + switch (ret) + { + case -1: /*** Button B ***/ + case 0: /*** Play Game ***/ + quit = 1; + break; + case 1: /*** ROM Information ***/ + showrominfo (); + break; + case 2: /*** Emulator Reset ***/ + system_reset (); + quit = 1; + break; + case 3: /*** Load ROM Menu ***/ + loadmenu(); + menu = 0; + break; + case 4: /*** Memory Manager ***/ + quit = filemenu (); + break; + case 5: /*** Emulator Options */ + optionmenu (); + break; + case 6: /*** Stop DVD Motor ***/ + ShowAction("Stopping DVD Motor ..."); + dvd_motor_off(); + break; + case 7: /*** SD/PSO Reload ***/ + if (psoid[0] == PSOSDLOADID) PSOReload (); + else SYS_ResetSystem(SYS_HOTRESET,0,FALSE); + break; + } + } + + /*** Remove any still held buttons ***/ + while(PAD_ButtonsHeld(0)) VIDEO_WaitVSync(); + + /*** Stop the DVD from causing clicks while playing ***/ + uselessinquiry (); +} diff --git a/ genplus-gx/source/ngc/gui/rominfo.c b/ genplus-gx/source/ngc/gui/rominfo.c new file mode 100644 index 0000000..40678a6 --- /dev/null +++ b/ genplus-gx/source/ngc/gui/rominfo.c @@ -0,0 +1,414 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Information in this module was gleaned from + * http://en.wikibooks.org/wiki/Genesis_Programming + ***************************************************************************/ + +#include "shared.h" +#include "font.h" +#include "rominfo.h" + +#define MAXCOMPANY 64 + +/*** ROM Information ***/ +#define ROMCONSOLE 256 +#define ROMCOPYRIGHT 272 +#define ROMDOMESTIC 288 +#define ROMWORLD 336 +#define ROMTYPE 384 +#define ROMPRODUCT 386 +#define ROMCHECKSUM 398 +#define ROMIOSUPPORT 400 +#define ROMROMSTART 416 +#define ROMROMEND 420 +#define ROMRAMINFO 424 +#define ROMRAMSTART 436 +#define ROMRAMEND 440 +#define ROMMODEMINFO 444 +#define ROMMEMO 456 +#define ROMCOUNTRY 496 + +#define P3BUTTONS 1 +#define P6BUTTONS 2 +#define PKEYBOARD 4 +#define PPRINTER 8 +#define PBALL 16 +#define PFLOPPY 32 +#define PACTIVATOR 64 +#define PTEAMPLAYER 128 +#define PMSYSTEMPAD 256 +#define PSERIAL 512 +#define PTABLET 1024 +#define PPADDLE 2048 +#define PCDROM 4096 +#define PMOUSE 8192 + +typedef struct +{ + char companyid[6]; + char company[30]; +} COMPANYINFO; + +typedef struct +{ + char pID[2]; + char pName[21]; +} PERIPHERALINFO; + +int peripherals; +int checksumok; +ROMINFO rominfo; +uint16 GetRealChecksum (); + + /*************************************************************************** + * Genesis ROM Manufacturers + * + * Based on the document provided at + * http://www.zophar.net/tech/files/Genesis_ROM_Format.txt + ***************************************************************************/ +COMPANYINFO companyinfo[MAXCOMPANY] = { + {"ACLD", "Ballistic"}, + {"RSI", "Razorsoft"}, + {"SEGA", "SEGA"}, + {"TREC", "Treco"}, + {"VRGN", "Virgin Games"}, + {"WSTN", "Westone"}, + {"10", "Takara"}, + {"11", "Taito or Accolade"}, + {"12", "Capcom"}, + {"13", "Data East"}, + {"14", "Namco or Tengen"}, + {"15", "Sunsoft"}, + {"16", "Bandai"}, + {"17", "Dempa"}, + {"18", "Technosoft"}, + {"19", "Technosoft"}, + {"20", "Asmik"}, + {"22", "Micronet"}, + {"23", "Vic Tokai"}, + {"24", "American Sammy"}, + {"29", "Kyugo"}, + {"32", "Wolfteam"}, + {"33", "Kaneko"}, + {"35", "Toaplan"}, + {"36", "Tecmo"}, + {"40", "Toaplan"}, + {"42", "UFL Company Limited"}, + {"43", "Human"}, + {"45", "Game Arts"}, + {"47", "Sage's Creation"}, + {"48", "Tengen"}, + {"49", "Renovation or Telenet"}, + {"50", "Electronic Arts"}, + {"56", "Razorsoft"}, + {"58", "Mentrix"}, + {"60", "Victor Musical Industries"}, + {"69", "Arena"}, + {"70", "Virgin"}, + {"73", "Soft Vision"}, + {"74", "Palsoft"}, + {"76", "Koei"}, + {"79", "U.S. Gold"}, + {"81", "Acclaim/Flying Edge"}, + {"83", "Gametek"}, + {"86", "Absolute"}, + {"87", "Mindscape"}, + {"93", "Sony"}, + {"95", "Konami"}, + {"97", "Tradewest"}, + {"100", "T*HQ Software"}, + {"101", "Tecmagik"}, + {"112", "Designer Software"}, + {"113", "Psygnosis"}, + {"119", "Accolade"}, + {"120", "Code Masters"}, + {"125", "Interplay"}, + {"130", "Activision"}, + {"132", "Shiny & Playmates"}, + {"144", "Atlus"}, + {"151", "Infogrames"}, + {"161", "Fox Interactive"}, + {"177", "Ubisoft"}, + {"239", "Disney Interactive"}, + {"---", "Unknown"} +}; + + /*************************************************************************** + * Genesis Peripheral Information + * + * Based on the document provided at + * http://www.zophar.net/tech/files/Genesis_ROM_Format.txt + ***************************************************************************/ +PERIPHERALINFO peripheralinfo[14] = { + {"J", "3-Button Joypad"}, + {"6", "6-button Joypad"}, + {"K", "Keyboard"}, + {"P", "Printer"}, + {"B", "Control Ball"}, + {"F", "Floppy Drive"}, + {"L", "Activator"}, + {"4", "Team Player"}, + {"0", "MS Joypad"}, + {"R", "RS232C Serial"}, + {"T", "Tablet"}, + {"V", "Paddle"}, + {"C", "CD-ROM"}, + {"M", "Mega Mouse"} +}; + +/**************************************************************************** + * getcompany + * + * Try to determine which company made this rom + * + * Ok, for some reason there's no standard for this. + * It seems that there can be pretty much anything you like following the + * copyright (C) symbol! + ****************************************************************************/ +int getcompany () +{ + char *s; + int i; + char company[10]; + + for (i = 3; i < 8; i++) company[i - 3] = rominfo.copyright[i]; + company[5] = 0; + + /** OK, first look for a hyphen + * Capcom use T-12 for example + */ + s = strstr (company, "-"); + if (s != NULL) + { + s++; + strcpy (company, s); + } + + /** Strip any trailing spaces **/ + for (i = strlen (company) - 1; i >= 0; i--) + if (company[i] == 32) company[i] = 0; + + if (strlen (company) == 0) return MAXCOMPANY - 1; + + for (i = 0; i < MAXCOMPANY - 1; i++) + { + if (!(strncmp (company, companyinfo[i].companyid, strlen (company)))) return i; + } + + return MAXCOMPANY - 1; +} + + + /*************************************************************************** + * getrominfo + * + * Pass a pointer to the ROM base address. + ***************************************************************************/ +void getrominfo (char *romheader) +{ + int i,j; + + memset (&rominfo, 0, sizeof (ROMINFO)); + + memcpy (&rominfo.consoletype, romheader + ROMCONSOLE, 16); + memcpy (&rominfo.copyright, romheader + ROMCOPYRIGHT, 16); + memcpy (&rominfo.domestic, romheader + ROMDOMESTIC, 48); + memcpy (&rominfo.international, romheader + ROMWORLD, 48); + memcpy (&rominfo.ROMType, romheader + ROMTYPE, 2); + memcpy (&rominfo.product, romheader + ROMPRODUCT, 12); + memcpy (&rominfo.checksum, romheader + ROMCHECKSUM, 2); + memcpy (&rominfo.io_support, romheader + ROMIOSUPPORT, 16); + memcpy (&rominfo.romstart, romheader + ROMROMSTART, 4); + memcpy (&rominfo.romend, romheader + ROMROMEND, 4); + memcpy (&rominfo.RAMInfo, romheader + ROMRAMINFO, 12); + memcpy (&rominfo.ramstart, romheader + ROMRAMSTART, 4); + memcpy (&rominfo.ramend, romheader + ROMRAMEND, 4); + memcpy (&rominfo.modem, romheader + ROMMODEMINFO, 12); + memcpy (&rominfo.memo, romheader + ROMMEMO, 40); + memcpy (&rominfo.country, romheader + ROMCOUNTRY, 16); + + checksumok = (GetRealChecksum ((char *) cart_rom + 512, genromsize - 512) + == rominfo.checksum); + + peripherals = 0; + + i=0; + while (rominfo.io_support[i] != 0x20 && i<14) + { + for (j = 0; j < 14; j++) + { + if (rominfo.io_support[i] == peripheralinfo[j].pID[0]) peripherals |= (1 << j); + } + i++; + } + + if (peripherals & P6BUTTONS) pad_type = DEVICE_6BUTTON; + else pad_type = DEVICE_3BUTTON; +} + +/*************************************************************************** + * Show rom info screen + ***************************************************************************/ + /* Automatically fixing the checksum is not a cool idea + * This should be user switchable, or at least only applied + * when genromsize == ( romend - romstart ) + if(realchecksum != (rominfo.checksum)) + { + sprintf(msg, "WARNING: Possible hacked ROM loaded!"); + write_font( 10, 224, msg); + cart_rom[0x18e] = realchecksum >> 8; + cart_rom[0x18f] = realchecksum & 0xff; + sprintf(msg, "Checksum corrected to %04x", realchecksum); + write_font( 10, 248, msg); + } + */ +void showrominfo () +{ + int ypos; + u8 i,j,quit,redraw,max; + char msg[128]; + short p; + signed char a; + char pName[14][21]; + uint16 realchecksum = GetRealChecksum (((uint8 *) cart_rom) + 0x200, genromsize - 0x200); + + quit = 0; + j = 0; + redraw = 1; + + /*** Remove any still held buttons ***/ + while(PAD_ButtonsHeld(0)) VIDEO_WaitVSync(); + + max = 14; + for (i = 0; i < 14; i++) + { + if (peripherals & (1 << i)) + { + sprintf(pName[max-14],"%s",peripheralinfo[i].pName); + max ++; + } + } + + while (quit == 0) + { + if (redraw) + { + ClearScreen (); + + ypos = 134; + WriteCentre(ypos, "ROM Header Information"); + ypos += 2*fheight; + + for (i=0; i<8; i++) + { + switch (i+j) + { + case 0: + sprintf (msg, "Console type: %s", rominfo.consoletype); + break; + case 1: + sprintf (msg, "Copyright: %s", rominfo.copyright); + break; + case 2: + sprintf (msg, "Company: %s", companyinfo[getcompany ()].company); + break; + case 3: + sprintf (msg, "Game Domestic Name:"); + break; + case 4: + sprintf(msg, " %s",rominfo.domestic); + break; + case 5: + sprintf (msg, "Game International Name:"); + break; + case 6: + sprintf(msg, " %s",rominfo.international); + break; + case 7: + sprintf (msg, "Type - %s : %s", rominfo.ROMType, strcmp (rominfo.ROMType, "AI") ? "Game" : "Educational"); + break; + case 8: + sprintf (msg, "Product - %s", rominfo.product); + break; + case 9: + sprintf (msg, "Checksum - %04x (%04x) (%s)", rominfo.checksum, realchecksum, rominfo.checksum == realchecksum ? "Good" : "Bad"); + break; + case 10: + sprintf (msg, "ROM end: $%06X", rominfo.romend); + break; + case 11: + if (sram.custom) sprintf (msg, "EEPROM(%dK) - $%06X", ((eeprom.type.size_mask+1)* 8) /1024, (unsigned int)sram.start); + else if (sram.detected) sprintf (msg, "SRAM Start - $%06X", rominfo.ramstart); + else sprintf (msg, "External RAM undetected"); + + break; + case 12: + if (sram.custom) sprintf (msg, "EEPROM(%dK) - $%06X", ((eeprom.type.size_mask+1)* 8) /1024, (unsigned int)sram.end); + else if (sram.detected) sprintf (msg, "SRAM End - $%06X", rominfo.ramend); + else if (sram.on) sprintf (msg, "Default SRAM activated "); + else sprintf (msg, "SRAM is disactivated "); + break; + case 13: + if (region_code == REGION_USA) sprintf (msg, "Region - %s (USA)", rominfo.country); + else if (region_code == REGION_EUROPE) sprintf (msg, "Region - %s (EUR)", rominfo.country); + else if (region_code == REGION_JAPAN_NTSC) sprintf (msg, "Region - %s (JAP)", rominfo.country); + else if (region_code == REGION_JAPAN_PAL) sprintf (msg, "Region - %s (JPAL)", rominfo.country); + break; + default: + sprintf (msg, "Supports - %s", pName[i+j-14]); + break; + } + + write_font (100, ypos, msg); + ypos += fheight; + } + + ypos += fheight; + WriteCentre (ypos, "Press A to Continue"); + SetScreen (); + } + + p = PAD_ButtonsDown (0); + a = PAD_StickY (0); + redraw = 0; + + if ((j<(max-8)) && ((p & PAD_BUTTON_DOWN) || (a < -70))) {redraw = 1; j++;} + if ((j>0) && ((p & PAD_BUTTON_UP) || (a > 70))) {redraw = 1; j--;} + if (p & PAD_BUTTON_A) quit = 1; + if (p & PAD_BUTTON_B) quit = 1; + } +} + +/* + * softdev - New Checksum Calculation + */ +uint16 GetRealChecksum (uint8 * rom, int length) +{ + int i; + uint16 checksum = 0; + + for (i = 0; i < length; i += 2) + { + checksum += (uint16) rom[i]; + checksum += (uint16) rom[i + 1] << 8; + } + + return checksum; +} diff --git a/ genplus-gx/source/ngc/gui/rominfo.h b/ genplus-gx/source/ngc/gui/rominfo.h new file mode 100644 index 0000000..9078dbf --- /dev/null +++ b/ genplus-gx/source/ngc/gui/rominfo.h @@ -0,0 +1,49 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Information in this module was gleaned from + * http://en.wikibooks.org/wiki/Genesis_Programming + ***************************************************************************/ +#include "shared.h" + + +typedef struct +{ + char consoletype[18]; /* Genesis or Mega Drive */ + char copyright[18]; /* Copyright message */ + char domestic[50]; /* Domestic name of ROM */ + char international[50]; /* International name of ROM */ + char ROMType[4]; /* Educational or Game */ + char product[14]; /* Product serial number */ + unsigned short checksum; /* Checksum */ + char io_support[18]; /* Actually 16 chars :) */ + unsigned int romstart; + unsigned int romend; + char RAMInfo[14]; + unsigned int ramstart; + unsigned int ramend; + char modem[14]; + char memo[50]; + char country[18]; +} ROMINFO; + + +extern void getrominfo (char *romheader); +extern void showrominfo (); +extern ROMINFO rominfo; diff --git a/ genplus-gx/source/ngc/gui/saveicon.h b/ genplus-gx/source/ngc/gui/saveicon.h new file mode 100644 index 0000000..edf898d --- /dev/null +++ b/ genplus-gx/source/ngc/gui/saveicon.h @@ -0,0 +1,136 @@ +/*********************************************************** + * Genesis Plus Save Icon + * Made by Brakken (http://www.tehskeen.com) + * + ************************************************************/ +unsigned short icon[1024] = { + + 0xFFFF, 0xFFFF, 0xFBDE, 0xFBDE, 0xFBDE, 0xFBDE, 0xFBDE, 0xEB5A, + 0xFBDE, 0xFBDE, 0xFBDE, 0xBDCD, 0xFBDE, 0xF7BD, 0xF7BD, 0xAD49, + 0xEB59, 0xB9AD, 0xC1EF, 0xC1EF, 0x9062, 0x8000, 0x8C41, 0x8C41, + 0x8000, 0x9CE6, 0xA0E6, 0xA507, 0x8400, 0x9CC5, 0xA0E6, 0xA0E6, + 0xC1EF, 0xC1EF, 0xC1EF, 0xC1EF, 0x8000, 0x8000, 0x8000, 0x8000, + 0x9083, 0x8C63, 0x8C63, 0x9484, 0x8C63, 0x9083, 0x9484, 0x94A4, + 0xC1EF, 0xC20F, 0xC20F, 0xBDCE, 0x8000, 0x8000, 0x8000, 0x8000, + 0x9083, 0x8821, 0x8842, 0x8842, 0x8842, 0xA107, 0xB58C, 0xAD6B, + 0xA529, 0x94A4, 0x9083, 0x94A4, 0x8000, 0x8000, 0x8400, 0x8400, + 0x8842, 0x8842, 0x8842, 0x8821, 0xB18B, 0xA949, 0xA108, 0xA107, + 0xA528, 0xB9AD, 0xC630, 0xCE51, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8821, 0x8821, 0x8821, 0x8400, 0xA108, 0xA529, 0xA108, 0xA529, + 0xCA30, 0xC630, 0xCA30, 0xFBDE, 0x8000, 0x8000, 0x8000, 0xAD27, + 0x8400, 0x9083, 0x8863, 0x8400, 0x9CE6, 0x8842, 0x8C63, 0x8C20, + 0xFBDE, 0xFBDE, 0xFFFF, 0xFFFF, 0xFBDE, 0xFBDE, 0xFBDE, 0xFBDE, + 0xDA92, 0xFBDE, 0xFBDE, 0xFBDE, 0xC1AB, 0xF7BD, 0xFBDE, 0xFBDE, + 0xF7BD, 0xF7BD, 0xF7BD, 0xA0E6, 0xF7BD, 0xF7BD, 0xF39C, 0x9484, + 0xF39C, 0xF39C, 0xDEF7, 0x8C41, 0xF39C, 0xEF7B, 0xD272, 0x8400, + 0x8C42, 0x9CE6, 0xA507, 0xA0E6, 0x8C63, 0x9CC5, 0xA107, 0x9CE6, + 0x9484, 0x98A5, 0x9CE6, 0x98C5, 0x9CC5, 0x98C5, 0xA0E7, 0x98C5, + 0x8C42, 0x9083, 0x94A5, 0x9083, 0x8C42, 0x9083, 0x9084, 0x8C62, + 0x8C62, 0x9083, 0x9084, 0x8C62, 0x8C63, 0x9083, 0x94A4, 0x8C63, + 0x8842, 0x9CC6, 0xA107, 0xA0E7, 0x8842, 0x8842, 0xA108, 0xA54A, + 0x8842, 0x8C63, 0xB5AD, 0xB5AD, 0x8C63, 0x8C62, 0x8842, 0x8C63, + 0x98C5, 0xA528, 0xB5AC, 0xB5AC, 0xA52A, 0xBDEF, 0xC631, 0xCA52, + 0xB9CE, 0xB9CE, 0xA94A, 0xAD6B, 0x8C63, 0x8821, 0x8821, 0x8821, + 0xA529, 0x98C5, 0x98C5, 0xA0E6, 0xC210, 0xA529, 0xA529, 0xA529, + 0xB5AD, 0xB5CD, 0xB5AD, 0xBDEF, 0x8400, 0x8821, 0x8C62, 0x8821, + 0xA0E7, 0x8842, 0x8842, 0x8C41, 0x9083, 0x8842, 0x8842, 0x8842, + 0x94A5, 0x8842, 0x8C62, 0x8C62, 0x8C42, 0x9083, 0x8C62, 0x8C62, + 0xB548, 0xF7BD, 0xF7BD, 0xF7BD, 0xA4C4, 0xF7BD, 0xF7BD, 0xF7BD, + 0x9461, 0xDED5, 0xF39C, 0xF39C, 0x8C20, 0xD271, 0xF39C, 0xF39C, + 0xEF7B, 0xEF7B, 0xC610, 0x8400, 0xEF7B, 0xEB5A, 0xB9AC, 0x8000, + 0xEB5A, 0xEB5A, 0xA528, 0x9CC5, 0xE739, 0xE739, 0x9CC6, 0x98A5, + 0x98C5, 0x98C5, 0xA0E6, 0x94A4, 0x94A4, 0x98C5, 0x94A5, 0x9484, + 0xA528, 0x98C5, 0x9CE6, 0xA0E7, 0x9CE6, 0xA4E6, 0x98A4, 0xA507, + 0x8C62, 0x9083, 0x9484, 0x9083, 0x94A4, 0x94A5, 0x98C5, 0x98C5, + 0xA107, 0xA107, 0xA107, 0xB18B, 0xA907, 0x9062, 0x9484, 0x9CE6, + 0x8842, 0x94A4, 0x9484, 0x9084, 0x8C62, 0x8C63, 0x9CC5, 0x9CC5, + 0x98C6, 0x8C63, 0x9484, 0xA0E6, 0x9CE6, 0x9084, 0x94A4, 0x90A5, + 0x8C63, 0x8C42, 0x8C62, 0x8C62, 0x8C63, 0xA108, 0xA94A, 0xA528, + 0x94A5, 0x8884, 0x8884, 0x8884, 0xB0A5, 0xBC84, 0xA483, 0xA484, + 0x8C63, 0x8C42, 0x8C63, 0x9083, 0xA94A, 0x9083, 0x8C62, 0x94A4, + 0x8884, 0x8063, 0x90A5, 0x94A4, 0xA483, 0xBC63, 0xA884, 0x8884, + 0x9083, 0x8C63, 0x8C42, 0x8C63, 0x9084, 0x8842, 0x9083, 0x9084, + 0x8C42, 0x8C62, 0x98C6, 0xAD6A, 0x9083, 0x8C63, 0x98C5, 0xA107, + 0x8400, 0xC1ED, 0xEF7B, 0xEF7B, 0x8400, 0xAD27, 0xEF7B, 0xEF7B, + 0x9CE6, 0x9CA4, 0xEB5A, 0xEB5A, 0x9CE6, 0x9062, 0xDAB4, 0xE739, + 0xE739, 0xE318, 0x9483, 0x8C63, 0xE318, 0xCE72, 0x9062, 0x9CC5, + 0xDEF7, 0xC20F, 0x8C41, 0x9CE6, 0xDAD6, 0xB9AC, 0x8C20, 0x9CC5, + 0xA0E6, 0xA528, 0x9CC5, 0xA528, 0xA508, 0x94A5, 0x98C6, 0xA108, + 0x9CE6, 0x9CC5, 0xA0E7, 0xA94A, 0xA0E6, 0xA0E7, 0xA507, 0xAD6B, + 0xA107, 0x98C6, 0x9CE6, 0x9083, 0x98C6, 0xA108, 0xA107, 0x98C5, + 0xB9CD, 0xB18B, 0xA107, 0x9CC6, 0xC210, 0xB9CE, 0xA528, 0x9CC6, + 0x98C5, 0x94A5, 0x9084, 0x8884, 0x9CC6, 0x9CE6, 0x9CC6, 0x94A5, + 0x9CE6, 0x9CE6, 0x9CE7, 0xA108, 0x98C5, 0x98C5, 0x98C6, 0x98C6, + 0xB0C6, 0xD0C6, 0xD0C6, 0xD0C6, 0x90A4, 0x90A4, 0x98A5, 0x9CA4, + 0x9CE6, 0x90A4, 0x9084, 0x9084, 0x98C6, 0x98C6, 0x98C6, 0x98C6, + 0xD0A5, 0xD0A5, 0xA484, 0x8483, 0x9484, 0x9083, 0x8C83, 0x9084, + 0x90A5, 0x94A5, 0x9CE6, 0x9CE6, 0x98C6, 0x98C6, 0x9CE6, 0x98C6, + 0x8C63, 0x9084, 0x9484, 0x9083, 0x98C5, 0x98C5, 0x94A4, 0x94A5, + 0x98C6, 0x98C6, 0x98C5, 0x98C5, 0x98C6, 0x98C6, 0x98C6, 0x98C6, + 0x9084, 0x8821, 0xCE51, 0xE739, 0x94A5, 0x8C20, 0xBDCE, 0xE318, + 0x98C5, 0x8821, 0xB18B, 0xE318, 0x98C6, 0x8842, 0xAD49, 0xDEF7, + 0xDAD6, 0xAD49, 0x8C41, 0xA508, 0xD6B5, 0xBDCC, 0x8C20, 0x8C41, + 0xD6B5, 0xD294, 0xB98A, 0xAD06, 0xD294, 0xCE73, 0xCE73, 0xCA52, + 0xA94A, 0xB5AD, 0xB18C, 0xAD6B, 0x9062, 0x9062, 0x9062, 0x9062, + 0xAD27, 0xAD06, 0xAD06, 0xAD06, 0xCA52, 0xC631, 0xC631, 0xC210, + 0xA94B, 0xB18C, 0xB58D, 0xAD6B, 0x9062, 0x9484, 0x98A4, 0x98A4, + 0xA906, 0xA906, 0xA506, 0xA907, 0xC210, 0xC210, 0xB9F0, 0xBDEF, + 0xA94B, 0xA94B, 0xA94B, 0xA94B, 0x98A5, 0x98A5, 0x98A4, 0x98A4, + 0xA907, 0xA907, 0xA907, 0xA506, 0xBDEF, 0xBDEF, 0xBDEF, 0xB1F2, + 0xA94B, 0xA94A, 0xA54A, 0xA529, 0x9484, 0x9484, 0x9483, 0x9483, + 0xA4E6, 0xA4E6, 0xA4E6, 0xA4E6, 0xBDEF, 0xBDEF, 0xBDEF, 0xBDEF, + 0xA529, 0xA529, 0xA529, 0xA108, 0x9062, 0x8C63, 0x9062, 0x9062, + 0xA4E6, 0x9CE6, 0xA0E6, 0xA506, 0xBDEF, 0xC210, 0xC210, 0xC210, + 0xA108, 0x9CE7, 0x9CE7, 0x98C6, 0x8C41, 0x8C42, 0x8C41, 0x8C41, + 0xA507, 0xA508, 0xAD27, 0xB127, 0xC631, 0xC631, 0xCA52, 0xCA52, + 0x98C6, 0x8C63, 0xA0E6, 0xDAD6, 0x8C41, 0x8400, 0xB548, 0xDAD6, + 0xB127, 0xB548, 0xD6B5, 0xD6B5, 0xCE73, 0xCE73, 0xD294, 0xD6B5, + 0xD294, 0xCA74, 0xBA56, 0xB635, 0x9A3B, 0x81FF, 0x81FF, 0x81FF, + 0x81FF, 0x8A1F, 0xA27F, 0xA27F, 0x81FF, 0xA27F, 0xFFFF, 0xFFFF, + 0xB635, 0xB214, 0xB214, 0xBE11, 0x81FF, 0x81FF, 0x81FF, 0x81FF, + 0xA27F, 0xA27F, 0xA27F, 0x8A1F, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF7F, + 0xA1F7, 0x91FA, 0x81FF, 0x95F9, 0x81FF, 0x81FF, 0x8A1F, 0x81FF, + 0x81FF, 0xD75F, 0xBEFF, 0x81FF, 0x81FF, 0xFFFF, 0xBEFF, 0x81FF, + 0xB9CE, 0xB9CE, 0x8DFC, 0x81FF, 0xA9D2, 0xA9D2, 0x81FF, 0x9A5F, + 0x99D6, 0x99D6, 0x81FF, 0xBEFF, 0x99D6, 0x99D6, 0x81FF, 0xBEFF, + 0x85FD, 0x95F9, 0xB5CF, 0xB1F1, 0x81FF, 0x81FF, 0x95F9, 0x81FF, + 0xEFBF, 0x81FF, 0x85FD, 0x81FF, 0xFFFF, 0x81FF, 0x81FF, 0x81FF, + 0xA5F5, 0xA5F5, 0xB5F2, 0xB214, 0x81FF, 0x81FF, 0x81FF, 0x81FF, + 0xB2BF, 0xB2BF, 0x81FF, 0x9A5F, 0xDF7F, 0xDF7F, 0x81FF, 0xE79F, + 0xA218, 0xA218, 0xA218, 0xA639, 0x81FF, 0x81FF, 0x81FF, 0x81FF, + 0xBEFF, 0xBEFF, 0xBEFF, 0xBEFF, 0xF7DF, 0xDF7F, 0xDF7F, 0xDF7F, + 0xA639, 0xB657, 0xCA75, 0xD294, 0x81FF, 0x81FF, 0x861E, 0xCA95, + 0xBEFF, 0xAA9F, 0x81FF, 0xB658, 0xD75F, 0x8A1F, 0x81FF, 0xCA75, + 0x81FF, 0xA27F, 0xFFFF, 0xA27F, 0x81FF, 0xA27F, 0xFFFF, 0xFFFF, + 0x81FF, 0xA27F, 0xFFFF, 0xBADF, 0x81FF, 0xA27F, 0xFFFF, 0xA27F, + 0x81FF, 0x81FF, 0xCF3F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBADF, + 0xA27F, 0xA27F, 0xA27F, 0x81FF, 0x81FF, 0x81FF, 0x81FF, 0x81FF, + 0x923F, 0xFFFF, 0xBEFF, 0x81FF, 0x81FF, 0xFFFF, 0xBEFF, 0x81FF, + 0x81FF, 0xFFFF, 0xCF3F, 0xA27F, 0x81FF, 0xFFFF, 0xFFFF, 0xFFFF, + 0x99D6, 0x99D6, 0x81FF, 0xBEFF, 0x81FF, 0x81FF, 0x81FF, 0xBEFF, + 0xA27F, 0xA27F, 0x9A5F, 0xBADF, 0xFFFF, 0xFFFF, 0xA27F, 0x81FF, + 0xFFFF, 0x81FF, 0x81FF, 0x81FF, 0xFFFF, 0x81FF, 0x81FF, 0x81FF, + 0xFFFF, 0xBEFF, 0xBEFF, 0xBEFF, 0xC71F, 0xDF7F, 0xDF7F, 0xDF7F, + 0xDF7F, 0xDF7F, 0x923F, 0xF7DF, 0xDF7F, 0xDF7F, 0x81FF, 0xAA9F, + 0xEFBF, 0xC71F, 0x81FF, 0x9A5F, 0xCF3F, 0x81FF, 0x8A1F, 0xD75F, + 0xE79F, 0xBEFF, 0xBEFF, 0xBEFF, 0xDF7F, 0xDF7F, 0xDF7F, 0xDF7F, + 0xBEFF, 0xBEFF, 0xBEFF, 0xC71F, 0xDF7F, 0xDF7F, 0xDF7F, 0xDF7F, + 0xBEFF, 0x81FF, 0x81FF, 0xB657, 0xFFFF, 0xC71F, 0x81FF, 0xA23A, + 0xFFFF, 0xC71F, 0x81FF, 0xA23A, 0xD75F, 0x8A1F, 0x81FF, 0xB658, + 0x81FF, 0x9A5F, 0xAA9F, 0x81FF, 0x921D, 0x81FF, 0x81FF, 0x85FE, + 0xD294, 0xBE55, 0xB657, 0xC653, 0xD294, 0xD294, 0xCE73, 0xCA52, + 0x8A1D, 0xB214, 0xB214, 0x8DFC, 0xBA34, 0xC631, 0xC210, 0xB612, + 0xC631, 0xC631, 0xC631, 0xC210, 0xCA52, 0xCA52, 0xC631, 0xC631, + 0x81FF, 0x81FF, 0x81FF, 0x81FF, 0x8DFC, 0x81FF, 0x81FF, 0x81FF, + 0xC210, 0xBE10, 0xBDEF, 0xBDEF, 0xC210, 0xC210, 0xC210, 0xBE10, + 0x81FF, 0x81FF, 0x81FF, 0x81FF, 0x81FF, 0x81FF, 0x8DFB, 0xA5D4, + 0xBDEF, 0xB9CE, 0xB9CE, 0xB9CE, 0xBDEF, 0xBDEF, 0xBDEF, 0xBDEF, + 0x81FF, 0x81FF, 0x81FF, 0x81FF, 0x99F8, 0x8DFB, 0x8DFB, 0x8DFB, + 0xB9CE, 0xBDEF, 0xBDEF, 0xBDEF, 0xBDEF, 0xBDEF, 0xBE10, 0xC210, + 0x81FF, 0x81FF, 0x81FF, 0x81FF, 0x95F9, 0xA5F5, 0xA1F7, 0x91FA, + 0xBDEF, 0xBE10, 0xC210, 0xC210, 0xC210, 0xC210, 0xC631, 0xC631, + 0x81FF, 0x81FF, 0x81FF, 0x81FF, 0x921C, 0x921C, 0x921C, 0x921C, + 0xC631, 0xC631, 0xCA52, 0xCA52, 0xC631, 0xCA52, 0xCA52, 0xCE73, + 0x81FF, 0x81FF, 0x9A3B, 0xD294, 0x961B, 0xAA39, 0xD294, 0xD294, + 0xCE73, 0xCE73, 0xD294, 0xD6B5, 0xCE73, 0xD294, 0xD6B5, 0xD6B5, +}; diff --git a/ genplus-gx/source/ngc/loadrom.c b/ genplus-gx/source/ngc/loadrom.c new file mode 100644 index 0000000..becd4e2 --- /dev/null +++ b/ genplus-gx/source/ngc/loadrom.c @@ -0,0 +1,206 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ***************************************************************************/ + +#include "shared.h" +#include "rominfo.h" +#include + +/* patch_game + * set specific configuration for some games + */ + extern uint8 alttiming; + extern uint8 vdptiming; + extern uint8 irqtiming; + extern uint8 sys_type[2]; + + void set_game_default() + { + + if ((strstr(rominfo.product,"T-5040") != NULL) || /* Legend of Galahad */ + (strstr(rominfo.product,"T-50116") != NULL) || /* Road Rash */ + (strstr(rominfo.product,"T-50496") != NULL) || /* Road Rash II */ + (strstr(rominfo.product,"T-106143") != NULL) || /* Road Rash II (J) */ + (strstr(rominfo.product,"T-50966") != NULL) || /* Road Rash III */ + (strstr(rominfo.product,"MK-1079") != NULL) || /* Sonic The Hedgehog 3 (UE) */ + (strstr(rominfo.product,"MK-1563") != NULL)) /* Sonic The Hedgehog 3 (J) */ + { + alttiming = 1; + } + else alttiming = 0; + + /* Sesame Street Counting cafe */ + if (strstr(rominfo.product,"T-50896") != NULL) irqtiming = 1; + else irqtiming = 0; + + /* 6-in-1 Menacer */ + if (strstr(rominfo.product,"MK-1658") != NULL) + { + input.system[0] = NO_SYSTEM; + input.system[1] = SYSTEM_MENACER; + } + else + { + if (sys_type[0] == 0) input.system[0] = SYSTEM_GAMEPAD; + else if (sys_type[0] == 1) input.system[0] = SYSTEM_TEAMPLAYER; + else if (sys_type[0] == 2) input.system[0] = NO_SYSTEM; + + if (sys_type[1] == 0) input.system[1] = SYSTEM_GAMEPAD; + else if (sys_type[1] == 1) input.system[1] = SYSTEM_TEAMPLAYER; + else if (sys_type[1] == 2) input.system[1] = NO_SYSTEM; + } + +} + +/* 05/05/2006: new detection routine */ +extern uint8 region_detect; +extern uint8 cpu_detect; + +void genesis_set_region () +{ + /* country codes used to differentiate region */ + /* 0001 = japan ntsc (1) */ + /* 0010 = japan pal (2) */ + /* 0100 = usa (4) */ + /* 1000 = europe (8) */ + + int country = 0; + int i = 0; + char c; + + /* reading header to find the country */ + if (!strnicmp(rominfo.country, "eur", 3)) country |= 8; + else if (!strnicmp(rominfo.country, "usa", 3)) country |= 4; + else if (!strnicmp(rominfo.country, "jap", 3)) country |= 1; + + else for(i = 0; i < 4; i++) + { + c = toupper((int)rominfo.country[i]); + if (c == 'U') country |= 4; + else if (c == 'J') country |= 1; + else if (c == 'E') country |= 8; + else if (c < 16) country |= c; + else if ((c >= '0') && (c <= '9')) country |= c - '0'; + else if ((c >= 'A') && (c <= 'F')) country |= c - 'A' + 10; + } + + /* automatic detection */ + /* setting region */ + /* this is used by IO register */ + if (country & 4) region_code = REGION_USA; + else if (country & 8) region_code = REGION_EUROPE; + else if (country & 1) region_code = REGION_JAPAN_NTSC; + else if (country & 2) region_code = REGION_JAPAN_PAL; + else region_code = REGION_USA; + + /* cpu mode: PAL or NTSC */ + if ((region_code == REGION_EUROPE) || (region_code == REGION_JAPAN_PAL)) vdp_pal = 1; + else vdp_pal = 0; + + /* Force region setting */ + if (region_detect == 1) region_code = REGION_USA; + else if (region_detect == 2) region_code = REGION_EUROPE; + else if (region_detect == 3) region_code = REGION_JAPAN_NTSC; + else if (region_detect == 4) region_code = REGION_JAPAN_PAL; + + /* Force CPU mode */ + if (cpu_detect == 1) vdp_pal = 0; + else if (cpu_detect == 2) vdp_pal = 1; +} + + + +static uint8 block[0x4000]; + +void deinterleave_block (uint8 * src) +{ + int i; + memcpy (block, src, 0x4000); + for (i = 0; i < 0x2000; i += 1) + { + src[i * 2 + 0] = block[0x2000 + (i)]; + src[i * 2 + 1] = block[0x0000 + (i)]; + } +} + +/* + * load_memrom + * softdev 12 March 2006 + * Changed from using ROM buffer to a single copy in cart_rom + * + * Saving ROM size in bytes :) + * Required for remote loading. + * + * WIP3 - Removed 5Mb SSF2TNC from main memory to Audio ROM + */ +void load_memrom (int size) +{ + int offset = 0; + + SSF2TNC = 0; + + /* Support for interleaved roms */ + if ((size / 512) & 1) + { + int i; + size -= 512; + offset += 512; + + for (i = 0; i < (size / 0x4000); i += 1) + { + deinterleave_block (cart_rom + offset + (i * 0x4000)); + } + } + + if (size > 0x500000) size = 0x500000; + if (offset) memcpy (cart_rom, cart_rom + offset, size); + if (size > 0x400000) SSF2TNC = 1; /*** Assume SSF2TNC (mapped ROM) ***/ + + genromsize = size; + + /*** Clear out space ***/ + if (size < 0x500000) memset (cart_rom + size, 0, 0x500000 - size); + return; +} + +/*** Reloadrom + performs some initialization before running the new rom + ***/ +extern void decode_ggcodes (); +extern void ClearGGCodes (); +extern void sram_autoload(); +extern uint8 autoload; + +void reloadrom () +{ + load_memrom (genromsize); + getrominfo (cart_rom); /* get infos from ROM Header */ + set_game_default(); /* patch specific games */ + genesis_set_region (); /* Region Detection */ + SRAM_Init (); /* External RAM infos from ROM header */ + + + system_init (); + audio_init(48000); + ClearGGCodes (); /* Game Genie */ + decode_ggcodes (); + + system_reset (); + if (autoload) sram_autoload(); +} diff --git a/ genplus-gx/source/ngc/ngc.c b/ genplus-gx/source/ngc/ngc.c new file mode 100644 index 0000000..9f8d74a --- /dev/null +++ b/ genplus-gx/source/ngc/ngc.c @@ -0,0 +1,641 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ***************************************************************************/ +#include "shared.h" +#include "gcaram.h" +#include "dvd.h" +#include "font.h" + +#define ROMOFFSET 0x80600000 + +unsigned char *gen_bmp; /*** Work bitmap ***/ +int frameticker = 0; +int ConfigRequested = 0; +int padcal = 70; +int RenderedFrameCount = 0; +int FrameCount = 0; +int FramesPerSecond = 0; +u8 isWII = 0; + +/*************************************************************************** + * Nintendo Gamecube Hardware Specific Functions + * + * T I M E R + ***************************************************************************/ +#define TB_CLOCK 40500000 +#define mftb(rval) ({unsigned long u; do { \ + asm volatile ("mftbu %0" : "=r" (u)); \ + asm volatile ("mftb %0" : "=r" ((rval)->l)); \ + asm volatile ("mftbu %0" : "=r" ((rval)->u)); \ + } while(u != ((rval)->u)); }) + +typedef struct +{ + unsigned long l, u; +} tb_t; + +unsigned long tb_diff_msec(tb_t *end, tb_t *start) +{ + unsigned long upper, lower; + upper = end->u - start->u; + if (start->l > end->l) upper--; + lower = end->l - start->l; + return ((upper*((unsigned long)0x80000000/(TB_CLOCK/2000))) + (lower/(TB_CLOCK/1000))); +} + +int msBetweenFrames = 20; +tb_t now, prev; + + +/*************************************************************************** + * Nintendo Gamecube Hardware Specific Functions + * + * V I D E O + ***************************************************************************/ +/*** 2D Video ***/ +unsigned int *xfb[2]; /*** Double buffered ***/ +int whichfb = 0; /*** Switch ***/ +GXRModeObj *vmode; /*** General video mode ***/ + +/*** GX ***/ +#define TEX_WIDTH 320 +#define TEX_HEIGHT 256 +#define DEFAULT_FIFO_SIZE 256 * 1024 + +static u8 gp_fifo[DEFAULT_FIFO_SIZE] ATTRIBUTE_ALIGN (32); +static u8 texturemem[TEX_WIDTH * (TEX_HEIGHT + 8) * 2] ATTRIBUTE_ALIGN (32); +GXTexObj texobj; +static Mtx view; +int vwidth, vheight, oldvwidth, oldvheight; + +/* New texture based scaler */ +#define HASPECT 76 +#define VASPECT 54 + +typedef struct tagcamera +{ + Vector pos; + Vector up; + Vector view; +} camera; + +/*** Square Matrix + This structure controls the size of the image on the screen. + Think of the output as a -80 x 80 by -60 x 60 graph. +***/ +s16 square[] ATTRIBUTE_ALIGN (32) = +{ + /* + * X, Y, Z + * Values set are for roughly 4:3 aspect + */ + -HASPECT, VASPECT, 0, // 0 + HASPECT, VASPECT, 0, // 1 + HASPECT, -VASPECT, 0, // 2 + -HASPECT, -VASPECT, 0, // 3 +}; + +static camera cam = { {0.0F, 0.0F, 0.0F}, +{0.0F, 0.5F, 0.0F}, +{0.0F, 0.0F, -0.5F} +}; + +/*** Framestart function + Simply increment the tick counter + ***/ +static void framestart() +{ + frameticker++; +} + +/*** WIP3 - Scaler Support Functions + ***/ +static void draw_init (void) +{ + GX_ClearVtxDesc (); + GX_SetVtxDesc (GX_VA_POS, GX_INDEX8); + GX_SetVtxDesc (GX_VA_CLR0, GX_INDEX8); + GX_SetVtxDesc (GX_VA_TEX0, GX_DIRECT); + GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); + GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GX_SetArray (GX_VA_POS, square, 3 * sizeof (s16)); + GX_SetNumTexGens (1); + GX_SetTexCoordGen (GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); + GX_InvalidateTexAll (); + GX_InitTexObj (&texobj, texturemem, vwidth, vheight, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); +} + +static void draw_vert (u8 pos, u8 c, f32 s, f32 t) +{ + GX_Position1x8 (pos); + GX_Color1x8 (c); + GX_TexCoord2f32 (s, t); +} + +static void draw_square (Mtx v) +{ + Mtx m; // model matrix. + Mtx mv; // modelview matrix. + + guMtxIdentity (m); + guMtxTransApply (m, m, 0, 0, -100); + guMtxConcat (v, m, mv); + GX_LoadPosMtxImm (mv, GX_PNMTX0); + GX_Begin (GX_QUADS, GX_VTXFMT0, 4); + draw_vert (0, 0, 0.0, 0.0); + draw_vert (1, 0, 1.0, 0.0); + draw_vert (2, 0, 1.0, 1.0); + draw_vert (3, 0, 0.0, 1.0); + GX_End (); +} + +/*** StartGX + This function initialises the GX. + WIP3 - Based on texturetest from libOGC examples. + ***/ +static void StartGX (void) +{ + Mtx p; + GXColor gxbackground = { 0, 0, 0, 0xff }; + + /*** Clear out FIFO area ***/ + memset (&gp_fifo, 0, DEFAULT_FIFO_SIZE); + + /*** Initialise GX ***/ + GX_Init (&gp_fifo, DEFAULT_FIFO_SIZE); + GX_SetCopyClear (gxbackground, 0x00ffffff); + GX_SetViewport (0, 0, vmode->fbWidth, vmode->efbHeight, 0, 1); + GX_SetDispCopyYScale ((f32) vmode->xfbHeight / (f32) vmode->efbHeight); + GX_SetScissor (0, 0, vmode->fbWidth, vmode->efbHeight); + GX_SetDispCopySrc (0, 0, vmode->fbWidth, vmode->efbHeight); + GX_SetDispCopyDst (vmode->fbWidth, vmode->xfbHeight); + GX_SetCopyFilter (vmode->aa, vmode->sample_pattern, GX_TRUE, vmode->vfilter); + GX_SetFieldMode (vmode->field_rendering, ((vmode->viHeight == 2 * vmode->xfbHeight) ? GX_ENABLE : GX_DISABLE)); + GX_SetPixelFmt (GX_PF_RGB8_Z24, GX_ZC_LINEAR); + GX_SetCullMode (GX_CULL_NONE); + GX_CopyDisp (xfb[whichfb ^ 1], GX_TRUE); + GX_SetDispCopyGamma (GX_GM_1_0); + guPerspective (p, 60, 1.33F, 10.0F, 1000.0F); + GX_LoadProjectionMtx (p, GX_PERSPECTIVE); + memset (texturemem, 0, TEX_WIDTH * TEX_HEIGHT * 2); + vwidth = 100; + vheight = 100; +} + +/*** InitGCVideo + This function MUST be called at startup. + ***/ +static void InitGCVideo () +{ + int *romptr = (int *)ROMOFFSET; + + /* + * Before doing anything else under libogc, + * Call VIDEO_Init + */ + VIDEO_Init (); + + /* + * Before any memory is allocated etc. + * Rescue any tagged ROM in data 2 + */ + StartARAM(); + if ( memcmp((char *)romptr,"GENPLUSR",8) == 0 ) + { + genromsize = romptr[2]; + ARAMPut ((char *) 0x80600020, (char *) 0x8000, genromsize); + } + else genromsize = 0; + + /* Init Gamepads */ + PAD_Init (); + + /* + * Reset the video mode + * This is always set to 60hz + * Whether your running PAL or NTSC + */ + vmode = &TVNtsc480IntDf; + VIDEO_Configure (vmode); + + /*** Now configure the framebuffer. + Really a framebuffer is just a chunk of memory + to hold the display line by line. + **/ + xfb[0] = (u32 *) MEM_K0_TO_K1((u32 *) SYS_AllocateFramebuffer(vmode)); + + /*** I prefer also to have a second buffer for double-buffering. + This is not needed for the console demo. + ***/ + xfb[1] = (u32 *) MEM_K0_TO_K1((u32 *) SYS_AllocateFramebuffer(vmode)); + + /*** Define a console ***/ + console_init(xfb[0], 20, 64, vmode->fbWidth, vmode->xfbHeight, vmode->fbWidth * 2); + + /*** Clear framebuffer to black ***/ + VIDEO_ClearFrameBuffer(vmode, xfb[0], COLOR_BLACK); + VIDEO_ClearFrameBuffer(vmode, xfb[1], COLOR_BLACK); + + /*** Set the framebuffer to be displayed at next VBlank ***/ + VIDEO_SetNextFramebuffer(xfb[0]); + + /*** Increment frameticker and timer ***/ + VIDEO_SetPreRetraceCallback(framestart); + + /*** Get the PAD status updated by libogc ***/ + VIDEO_SetPostRetraceCallback(PAD_ScanPads); + VIDEO_SetBlack (FALSE); + + /*** Update the video for next vblank ***/ + VIDEO_Flush(); + + /*** Wait for VBL ***/ + VIDEO_WaitVSync(); + if (vmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); + + DVD_Init (); + SDCARD_Init (); + unpackBackdrop (); + init_font(); + StartGX (); + + /* Wii drive detection for 4.7Gb support */ + int driveid = dvd_inquiry(); + if ((driveid == 4) || (driveid == 6) || (driveid == 8)) isWII = 0; + else isWII = 1; +} + +/*** Video Update + called after each emulation frame + ***/ +static void update_video () +{ + int h, w; + vwidth = (reg[12] & 1) ? 320 : 256; + vheight = (reg[1] & 8) ? 240 : 224; + + long long int *dst = (long long int *)texturemem; + long long int *src1 = (long long int *)(bitmap.data + 64); + long long int *src2 = src1 + 256; + long long int *src3 = src2 + 256; + long long int *src4 = src3 + 256; + long long int stride = 1024 - ( vwidth >> 2 ); + + whichfb ^= 1; + + if ((oldvheight != vheight) || (oldvwidth != vwidth)) + { + /** Update scaling **/ + oldvwidth = vwidth; + oldvheight = vheight; + draw_init (); + memset (&view, 0, sizeof (Mtx)); + guLookAt(view, &cam.pos, &cam.up, &cam.view); + GX_SetViewport (0, 0, vmode->fbWidth, vmode->efbHeight, 0, 1); + } + + GX_InvVtxCache (); + GX_InvalidateTexAll (); + GX_SetTevOp (GX_TEVSTAGE0, GX_DECAL); + GX_SetTevOrder (GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + + for (h = 0; h < vheight; h += 4) + { + for (w = 0; w < (vwidth >> 2); w++ ) + { + *dst++ = *src1++; + *dst++ = *src2++; + *dst++ = *src3++; + *dst++ = *src4++; + } + + src1 += stride; + src2 += stride; + src3 += stride; + src4 += stride; + } + + DCFlushRange (texturemem, TEX_WIDTH * TEX_HEIGHT * 2); + GX_SetNumChans (1); + GX_LoadTexObj (&texobj, GX_TEXMAP0); + draw_square (view); + GX_DrawDone (); + GX_SetZMode (GX_TRUE, GX_LEQUAL, GX_TRUE); + GX_SetColorUpdate (GX_TRUE); + GX_CopyDisp (xfb[whichfb], GX_TRUE); + GX_Flush (); + VIDEO_SetNextFramebuffer (xfb[whichfb]); + VIDEO_Flush (); +} + +/*************************************************************************** + * Nintendo Gamecube Hardware Specific Functions + * + * A U D I O + ***************************************************************************/ +unsigned char soundbuffer[16][3840] ATTRIBUTE_ALIGN(32); +int mixbuffer = 0; +int playbuffer = 0; +int IsPlaying = 0; + +/*** AudioSwitchBuffers + Genesis Plus only provides sound data on completion of each frame. + To try to make the audio less choppy, this function is called from both the + DMA completion and update_audio. + Testing for data in the buffer ensures that there are no clashes. + ***/ +static void AudioSwitchBuffers() +{ + u32 dma_len = (vdp_pal) ? 3840 : 3200; + + if ( !ConfigRequested ) + { + AUDIO_InitDMA((u32) soundbuffer[playbuffer], dma_len); + DCFlushRange(soundbuffer[playbuffer], dma_len); + AUDIO_StartDMA(); + playbuffer++; + playbuffer &= 0xf; + if ( playbuffer == mixbuffer ) playbuffer--; + if ( playbuffer < 0 ) playbuffer = 15; + IsPlaying = 1; + } + else IsPlaying = 0; +} + +/*** InitGCAudio + Stock code to set the DSP at 48Khz + ***/ +static void InitGCAudio () +{ + AUDIO_Init (NULL); + AUDIO_SetDSPSampleRate (AI_SAMPLERATE_48KHZ); + AUDIO_RegisterDMACallback (AudioSwitchBuffers); + memset(soundbuffer, 0, 16 * 3840); +} + +/*** Audio Update + called after each emulation frame + ***/ +static void update_audio () +{ + if (IsPlaying == 0) AudioSwitchBuffers (); +} + +/*************************************************************************** + * Nintendo Gamecube Hardware Specific Functions + * + * I N P U T + ***************************************************************************/ +/** + * IMPORTANT + * If you change the padmap here, be sure to update confjoy to + * reflect the changes - or confusion will ensue! + * + * DEFAULT MAPPING IS: + * Genesis Gamecube + * A B + * B A + * C X + * X LT + * Y Y + * Z RT + * + * Mode is unused, as it's our menu hotkey for now :) + * Also note that libOGC has LT/RT reversed - it's not a typo! + */ +unsigned int gppadmap[] = { INPUT_A, INPUT_B, INPUT_C, + INPUT_X, INPUT_Y, INPUT_Z, + INPUT_UP, INPUT_DOWN, + INPUT_LEFT, INPUT_RIGHT, + INPUT_START, INPUT_MODE +}; + +unsigned short gcpadmap[] = { PAD_BUTTON_B, PAD_BUTTON_A, PAD_BUTTON_X, + PAD_TRIGGER_L, PAD_BUTTON_Y, PAD_TRIGGER_R, + PAD_BUTTON_UP, PAD_BUTTON_DOWN, + PAD_BUTTON_LEFT, PAD_BUTTON_RIGHT, + PAD_BUTTON_START, PAD_TRIGGER_Z +}; + +static unsigned int DecodeJoy (unsigned short p) +{ + unsigned int J = 0; + int i; + + for (i = 0; i < 12; i++) if (p & gcpadmap[i]) J |= gppadmap[i]; + return J; +} + +static unsigned int GetAnalog (int Joy) +{ + signed char x, y; + unsigned int i = 0; + + x = PAD_StickX (Joy); + y = PAD_StickY (Joy); + if (x > padcal) i |= INPUT_RIGHT; + if (x < -padcal) i |= INPUT_LEFT; + if (y > padcal) i |= INPUT_UP; + if (y < -padcal) i |= INPUT_DOWN; + return i; +} + +/*** Inputs Update + called before each emulation frame + ***/ +static void update_inputs() +{ + int i = 0; + int joynum = 0; + + /*** Check for SOFT-RESET combo ***/ + if ((PAD_ButtonsHeld (0) & PAD_TRIGGER_Z) && + (PAD_ButtonsHeld (0) & PAD_TRIGGER_L)) + { + m68k_pulse_reset (); + return; + } + + /*** Check for menu combo ***/ + if (PAD_ButtonsHeld (0) & PAD_TRIGGER_Z) + { + ConfigRequested = 1; + return; + } + + for (i=0; i msBetweenFrames) + { + memcpy(&prev, &now, sizeof(tb_t)); + system_frame(1); + } + else + { + /*** Delay ***/ + while (tb_diff_msec(&now, &prev) < msBetweenFrames) mftb(&now); + memcpy(&prev, &now, sizeof(tb_t) ); + system_frame(0); + RenderedFrameCount++; + } + } + else /* NTSC 60Hz (use vsync) */ + { + while ( frameticker < 1 ) usleep(10); + + /** Simulate a frame **/ + if (frameticker > 1) + { + frameticker--; + if (frameticker > 5) + { + system_frame (0); + RenderedFrameCount++; + frameticker = 1; + } + else system_frame (1); + } + else + { + system_frame (0); + RenderedFrameCount++; + } + } + + frameticker--; + + /** Draw the frame **/ + update_video (); + + /** add the audio **/ + update_audio (); + + /** Check render frames **/ + if ((FrameCount == vdp_rate)) + { + FramesPerSecond = RenderedFrameCount; + RenderedFrameCount = 0; + FrameCount = 0; + } + + if (ConfigRequested) + { + AUDIO_StopDMA (); + IsPlaying = mixbuffer = playbuffer = 0; + MainMenu (); + ConfigRequested = 0; + } + } + return 0; +} diff --git a/ genplus-gx/source/ngc/osd.h b/ genplus-gx/source/ngc/osd.h new file mode 100644 index 0000000..63553b3 --- /dev/null +++ b/ genplus-gx/source/ngc/osd.h @@ -0,0 +1,19 @@ + +#ifndef _OSD_H_ +#define _OSD_H_ + +#define NGC 1 + +#include +#include +#include +#include +#include +#include + +#include "gcaram.h" + + +extern void error (char *format, ...); + +#endif /* _OSD_H_ */ diff --git a/ genplus-gx/source/ngc/unzip.c b/ genplus-gx/source/ngc/unzip.c new file mode 100644 index 0000000..a629279 --- /dev/null +++ b/ genplus-gx/source/ngc/unzip.c @@ -0,0 +1,193 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Nintendo Gamecube Zip Support + * + * Only partial support is included, in that only the first file within the archive + * is considered to be a Genesis ROM image. + ***************************************************************************/ +#include +#include +#include "shared.h" +#include "dvd.h" +#include "font.h" +#include "diskio.h" +#include "vfat.h" + +extern VFATFS fs; +extern FSDIRENTRY f; +extern u8 UseSDCARD; + +/* + * PKWare Zip Header - adopted into zip standard + */ +#define PKZIPID 0x504b0304 +#define MAXROM 0x500000 +#define ZIPCHUNK 2048 + +/* + * Zip file header definition + */ +typedef struct +{ + unsigned int zipid __attribute__ ((__packed__)); // 0x04034b50 + unsigned short zipversion __attribute__ ((__packed__)); + unsigned short zipflags __attribute__ ((__packed__)); + unsigned short compressionMethod __attribute__ ((__packed__)); + unsigned short lastmodtime __attribute__ ((__packed__)); + unsigned short lastmoddate __attribute__ ((__packed__)); + unsigned int crc32 __attribute__ ((__packed__)); + unsigned int compressedSize __attribute__ ((__packed__)); + unsigned int uncompressedSize __attribute__ ((__packed__)); + unsigned short filenameLength __attribute__ ((__packed__)); + unsigned short extraDataLength __attribute__ ((__packed__)); +} PKZIPHEADER; + +/* + * Zip files are stored little endian + * Support functions for short and int types + */ +static inline u32 FLIP32 (u32 b) +{ + unsigned int c; + c = (b & 0xff000000) >> 24; + c |= (b & 0xff0000) >> 8; + c |= (b & 0xff00) << 8; + c |= (b & 0xff) << 24; + return c; +} + +static inline u16 FLIP16 (u16 b) +{ + u16 c; + c = (b & 0xff00) >> 8; + c |= (b & 0xff) << 8; + return c; +} + +/**************************************************************************** + * IsZipFile + * + * Returns TRUE when PKZIPID is first four characters of buffer + ****************************************************************************/ +int IsZipFile (char *buffer) +{ + unsigned int *check; + check = (unsigned int *) buffer; + if (check[0] == PKZIPID) return 1; + return 0; +} + + /***************************************************************************** + * UnZipBuffer + * + * It should be noted that there is a limit of 5MB total size for any ROM + ******************************************************************************/ +int UnZipBuffer (unsigned char *outbuffer, u64 discoffset, int length) +{ + PKZIPHEADER pkzip; + int zipoffset = 0; + int zipchunk = 0; + char out[ZIPCHUNK]; + z_stream zs; + int res; + int bufferoffset = 0; + int have = 0; + char readbuffer[2048]; + char msg[128]; + + /*** Read Zip Header ***/ + if ( UseSDCARD ) + { + VFAT_fseek(&f, 0, SEEK_SET); + VFAT_fread(&f, readbuffer, 2048); + } + else dvd_read (&readbuffer, 2048, discoffset); + + /*** Copy PKZip header to local, used as info ***/ + memcpy (&pkzip, &readbuffer, sizeof (PKZIPHEADER)); + + sprintf (msg, "Unzipping %d bytes ... Wait", FLIP32 (pkzip.uncompressedSize)); + ShowAction (msg); + + /*** Prepare the zip stream ***/ + memset (&zs, 0, sizeof (z_stream)); + zs.zalloc = Z_NULL; + zs.zfree = Z_NULL; + zs.opaque = Z_NULL; + zs.avail_in = 0; + zs.next_in = Z_NULL; + res = inflateInit2 (&zs, -MAX_WBITS); + + if (res != Z_OK) return 0; + + /*** Set ZipChunk for first pass ***/ + zipoffset = (sizeof (PKZIPHEADER) + FLIP16 (pkzip.filenameLength) + FLIP16 (pkzip.extraDataLength)); + zipchunk = ZIPCHUNK - zipoffset; + + /*** Now do it! ***/ + do + { + zs.avail_in = zipchunk; + zs.next_in = (Bytef *) & readbuffer[zipoffset]; + + /*** Now inflate until input buffer is exhausted ***/ + do + { + zs.avail_out = ZIPCHUNK; + zs.next_out = (Bytef *) & out; + res = inflate (&zs, Z_NO_FLUSH); + + if (res == Z_MEM_ERROR) + { + inflateEnd (&zs); + return 0; + } + + have = ZIPCHUNK - zs.avail_out; + if (have) + { + /*** Copy to normal block buffer ***/ + memcpy (&outbuffer[bufferoffset], &out, have); + bufferoffset += have; + } + } + while (zs.avail_out == 0); + + /*** Readup the next 2k block ***/ + zipoffset = 0; + zipchunk = ZIPCHUNK; + discoffset += 2048; + + if (UseSDCARD) VFAT_fread(&f, readbuffer, 2048); + else dvd_read (&readbuffer, 2048, discoffset); + } + while (res != Z_STREAM_END); + + inflateEnd (&zs); + + if ( UseSDCARD ) VFAT_fclose(&f); + + if (res == Z_STREAM_END) + { + if (FLIP32 (pkzip.uncompressedSize) == (u32) bufferoffset) return bufferoffset; + else return FLIP32 (pkzip.uncompressedSize); + } + + return 0; +} diff --git a/ genplus-gx/source/ngc/unzip.c.old b/ genplus-gx/source/ngc/unzip.c.old new file mode 100644 index 0000000..e7941a1 --- /dev/null +++ b/ genplus-gx/source/ngc/unzip.c.old @@ -0,0 +1,190 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Nintendo Gamecube Zip Support + * + * Only partial support is included, in that only the first file within the archive + * is considered to be a Genesis ROM image. + ***************************************************************************/ +#include +#include +#include "shared.h" +#include "dvd.h" +#include "font.h" + +extern sd_file *filehandle; +extern u8 UseSDCARD; + +/* + * PKWare Zip Header - adopted into zip standard + */ +#define PKZIPID 0x504b0304 +#define MAXROM 0x500000 +#define ZIPCHUNK 2048 + +/* + * Zip file header definition + */ +typedef struct +{ + unsigned int zipid __attribute__ ((__packed__)); // 0x04034b50 + unsigned short zipversion __attribute__ ((__packed__)); + unsigned short zipflags __attribute__ ((__packed__)); + unsigned short compressionMethod __attribute__ ((__packed__)); + unsigned short lastmodtime __attribute__ ((__packed__)); + unsigned short lastmoddate __attribute__ ((__packed__)); + unsigned int crc32 __attribute__ ((__packed__)); + unsigned int compressedSize __attribute__ ((__packed__)); + unsigned int uncompressedSize __attribute__ ((__packed__)); + unsigned short filenameLength __attribute__ ((__packed__)); + unsigned short extraDataLength __attribute__ ((__packed__)); +} PKZIPHEADER; + +/* + * Zip files are stored little endian + * Support functions for short and int types + */ +static inline u32 FLIP32 (u32 b) +{ + unsigned int c; + c = (b & 0xff000000) >> 24; + c |= (b & 0xff0000) >> 8; + c |= (b & 0xff00) << 8; + c |= (b & 0xff) << 24; + return c; +} + +static inline u16 FLIP16 (u16 b) +{ + u16 c; + c = (b & 0xff00) >> 8; + c |= (b & 0xff) << 8; + return c; +} + +/**************************************************************************** + * IsZipFile + * + * Returns TRUE when PKZIPID is first four characters of buffer + ****************************************************************************/ +int IsZipFile (char *buffer) +{ + unsigned int *check; + check = (unsigned int *) buffer; + if (check[0] == PKZIPID) return 1; + return 0; +} + + /***************************************************************************** + * UnZipBuffer + * + * It should be noted that there is a limit of 5MB total size for any ROM + ******************************************************************************/ +int UnZipBuffer (unsigned char *outbuffer, u64 discoffset, int length) +{ + PKZIPHEADER pkzip; + int zipoffset = 0; + int zipchunk = 0; + char out[ZIPCHUNK]; + z_stream zs; + int res; + int bufferoffset = 0; + int have = 0; + char readbuffer[2048]; + char msg[128]; + + /*** Read Zip Header ***/ + if ( UseSDCARD ) + { + SDCARD_SeekFile(filehandle, 0, SDCARD_SEEK_SET); + SDCARD_ReadFile(filehandle, &readbuffer, 2048); + } + else dvd_read (&readbuffer, 2048, discoffset); + + /*** Copy PKZip header to local, used as info ***/ + memcpy (&pkzip, &readbuffer, sizeof (PKZIPHEADER)); + + sprintf (msg, "Unzipping %d bytes ... Wait", FLIP32 (pkzip.uncompressedSize)); + ShowAction (msg); + + /*** Prepare the zip stream ***/ + memset (&zs, 0, sizeof (z_stream)); + zs.zalloc = Z_NULL; + zs.zfree = Z_NULL; + zs.opaque = Z_NULL; + zs.avail_in = 0; + zs.next_in = Z_NULL; + res = inflateInit2 (&zs, -MAX_WBITS); + + if (res != Z_OK) return 0; + + /*** Set ZipChunk for first pass ***/ + zipoffset = (sizeof (PKZIPHEADER) + FLIP16 (pkzip.filenameLength) + FLIP16 (pkzip.extraDataLength)); + zipchunk = ZIPCHUNK - zipoffset; + + /*** Now do it! ***/ + do + { + zs.avail_in = zipchunk; + zs.next_in = (Bytef *) & readbuffer[zipoffset]; + + /*** Now inflate until input buffer is exhausted ***/ + do + { + zs.avail_out = ZIPCHUNK; + zs.next_out = (Bytef *) & out; + res = inflate (&zs, Z_NO_FLUSH); + + if (res == Z_MEM_ERROR) + { + inflateEnd (&zs); + return 0; + } + + have = ZIPCHUNK - zs.avail_out; + if (have) + { + /*** Copy to normal block buffer ***/ + memcpy (&outbuffer[bufferoffset], &out, have); + bufferoffset += have; + } + } + while (zs.avail_out == 0); + + /*** Readup the next 2k block ***/ + zipoffset = 0; + zipchunk = ZIPCHUNK; + discoffset += 2048; + + if (UseSDCARD) SDCARD_ReadFile(filehandle, &readbuffer, 2048); + else dvd_read (&readbuffer, 2048, discoffset); + } + while (res != Z_STREAM_END); + + inflateEnd (&zs); + + if ( UseSDCARD ) SDCARD_CloseFile(filehandle); + + if (res == Z_STREAM_END) + { + if (FLIP32 (pkzip.uncompressedSize) == (u32) bufferoffset) return bufferoffset; + else return FLIP32 (pkzip.uncompressedSize); + } + + return 0; +} diff --git a/ genplus-gx/source/ngc/unzip.h b/ genplus-gx/source/ngc/unzip.h new file mode 100644 index 0000000..c033928 --- /dev/null +++ b/ genplus-gx/source/ngc/unzip.h @@ -0,0 +1,26 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Nintendo Gamecube Zip Support + * + * Only partial support is included, in that only the first file within the archive + * is considered to be a ROM image. + ***************************************************************************/ + +extern int IsZipFile (char *buffer); +int UnZipBuffer (unsigned char *outbuffer, u64 discoffset, int length); diff --git a/ genplus-gx/source/ngc/vfat/diskio.c b/ genplus-gx/source/ngc/vfat/diskio.c new file mode 100644 index 0000000..5775b85 --- /dev/null +++ b/ genplus-gx/source/ngc/vfat/diskio.c @@ -0,0 +1,99 @@ +/**************************************************************************** +* FAT16 - VFAT Support +* +* NOTE: Only supports FAT16 with Long File Names +* I have no interest in adding FAT32 +* +* Reference Documentation: +* +* FAT: General Overview of On-Disk Format +* Version 1.02 May 05, 1999 +* Microsoft Corporation +* +* FAT: General Overview of On-Disk Format +* Version 1.03 December 06, 2000 +* Microsoft Corporation +* +* This is targetted at MMC/SD cards. +* +* Copyright softdev 2007. All rights reserved. +* +* Diskio Module +* ------------- +* +* This module is almost identical to the one found in ChaN's TinyFAT FS. +* It's a logical abstration after all :) +* +* This covers stdio file on a SD image file +****************************************************************************/ +#include +#include +#include +#include +#include +#include "vfat.h" + +/* Not so public exports from card_io.c */ +#define MAX_DRIVE 2 +extern u8 g_CID[MAX_DRIVE][16]; +extern u8 g_CSD[MAX_DRIVE][16]; +extern u8 g_CardStatus[MAX_DRIVE][64]; +extern s32 card_initIO(s32 drv_no); +extern s32 card_readSector(s32 drv_no,u32 sector_no,u8 *buf,u32 len); +extern s32 card_writeSector(s32 drv_no,u32 sector_no,const void *buf,u32 len); +extern s32 card_readStatus(s32 drv_no); +#define CARDIO_ERROR_READY 0 + +/* End of not so public exports */ + +/**************************************************************************** +* DISKIO_Init +* +* Initialise communication with the disc +****************************************************************************/ +int DISKIO_Init( int drive ) +{ + int res; + + if ( drive < 0 || drive > 1 ) + return FS_ERR_PARAM; + + res = card_initIO( drive ); + + if ( res == CARDIO_ERROR_READY ) + return FS_SUCCESS; + + return FS_ERR_IO; + +} + +/**************************************************************************** +* DISKIO_ReadSectors +* +* Read sectors from the disc +****************************************************************************/ +int DISKIO_ReadSectors( int drive, void *buffer, int sector, int count ) +{ + int res = -1; + int i; + int bytes = 0; + + if ( drive != 0 && drive != 1 ) + return FS_ERR_PARAM; /* Must be 0 or 1 */ + + /* libOGC appears to only read in single sectors */ + for( i = 0; i < count; i++ ) + { + res = card_readSector( (int)drive, sector + i, buffer + bytes, SECTOR_SIZE); + if ( res != CARDIO_ERROR_READY ) + return FS_ERR_IO; + bytes += SECTOR_SIZE; + } + + if ( res == CARDIO_ERROR_READY ) + return FS_SUCCESS; + + return FS_ERR_IO; + +} + diff --git a/ genplus-gx/source/ngc/vfat/diskio.h b/ genplus-gx/source/ngc/vfat/diskio.h new file mode 100644 index 0000000..d9e9313 --- /dev/null +++ b/ genplus-gx/source/ngc/vfat/diskio.h @@ -0,0 +1,36 @@ +/**************************************************************************** +* FAT16 - VFAT Support +* +* NOTE: Only supports FAT16 with Long File Names +* I have no interest in adding FAT32 +* +* Reference Documentation: +* +* FAT: General Overview of On-Disk Format +* Version 1.02 May 05, 1999 +* Microsoft Corporation +* +* FAT: General Overview of On-Disk Format +* Version 1.03 December 06, 2000 +* Microsoft Corporation +* +* This is targetted at MMC/SD cards. +* +* Copyright softdev 2007. All rights reserved. +* +* Diskio Module +* ------------- +* +* This module is almost identical to the one found in ChaN's TinyFAT FS. +* It's a logical abstration after all :) +* +* This covers stdio file on a SD image file +****************************************************************************/ +#ifndef __DISKIO__ +#define __DISKIO__ + +int DISKIO_Init( int drive ); +int DISKIO_ReadSectors( int drive, void *buffer, int sector, int count ); + +#endif + diff --git a/ genplus-gx/source/ngc/vfat/vfat.c b/ genplus-gx/source/ngc/vfat/vfat.c new file mode 100644 index 0000000..93ee705 --- /dev/null +++ b/ genplus-gx/source/ngc/vfat/vfat.c @@ -0,0 +1,841 @@ +/**************************************************************************** +* FAT16 - VFAT Support +* +* NOTE: Only supports FAT16 with Long File Names +* I have no interest in adding FAT32 +* +* Reference Documentation: +* +* FAT: General Overview of On-Disk Format +* Version 1.02 May 05, 1999 +* Microsoft Corporation +* +* FAT: General Overview of On-Disk Format +* Version 1.03 December 06, 2000 +* Microsoft Corporation +* +* This is targetted at MMC/SD cards. +* +* Copyright softdev 2007. All rights reserved. +* +* $Date: 2007-08-03 13:23:19 +0100 (Fri, 03 Aug 2007) $ +* $Rev: 3 $ +****************************************************************************/ +#include +#include +#include +#include +#include "vfat.h" +#include "diskio.h" + +static BYTE sector[SECTOR_SIZE]; /* Local sector buffer */ +static VFATFS *vfs[2]; /* VFAT Pointers for 2 drives */ + +#ifdef WORDS_BIGENDIAN +#define strcasecmp stricmp +#endif + +/** + * Z E R O S E C T O R / B I O S P A R A M E T E R B L O C K + * + * These functions take care of parsing the 0th sector/BPB + * Supports SuperFloppy Format and standard partitioning. + * + */ + +static int BPBCheck( BYTE *sector ) +{ + BPB16 *bpb = (BPB16 *)sector; + + /* Check signatures */ + if ( ( bpb->sigkey1 == 0x55 ) && ( bpb->sigkey2 == 0xAA ) ) + { + /* Check for FAT16 signature */ + if ( memcmp(bpb->FilSysType, "FAT16", 5) == 0 ) + return FS_TYPE_FAT16; + /* Non MS utilities simply put FAT */ + if ( memcmp(bpb->FilSysType, "FAT", 3) == 0 ) + return FS_TYPE_FAT16; + } + + return FS_TYPE_NONE; +} + +static int PECheck( BYTE *sector ) +{ + int i; + PARTENTRY *pe; + + if ( ( sector[SECTOR_SIZE-2] == 0x55 ) && ( sector[SECTOR_SIZE-1] == 0xAA ) ) + { + /* Find a FAT16 partition entry */ + for( i = 0; i < 4; i++ ) + { + pe = (PARTENTRY *)(sector + 446 + (i<<4)); + if ( pe->partitiontype == 0x06 ) + { + return SWAP32(pe->partitionstart); + } + } + } + + return FS_TYPE_NONE; +} + +/**************************************************************************** +* VFAT_Mount +* +* Function to mount a FAT16-VFAT volume +***************************************************************************/ +int VFAT_mount( int driveid, VFATFS *v ) +{ + int ret; + int bpbsector = 0; + BPB16 *bpb = (BPB16 *)sector; + BYTE media = 0; + + if ( driveid < 0 || driveid > 1 ) + return FS_TYPE_NONE; + + memset(v, 0, sizeof(VFATFS)); + + /* Copy pointer */ + vfs[driveid] = v; + + if ( DISKIO_Init( driveid ) != FS_SUCCESS ) + return FS_ERR_IO; + + if ( DISKIO_ReadSectors( driveid, sector, 0, 1 ) != FS_SUCCESS ) + return FS_ERR_IO; + + /* Check for SuperFloppy Format */ + ret = BPBCheck( sector ); + + if ( ret == FS_TYPE_NONE ) + { + /* Check for Partition Entry */ + bpbsector = PECheck(sector); + if ( !bpbsector ) + return FS_TYPE_NONE; + + if ( DISKIO_ReadSectors( driveid, sector, bpbsector, 1 ) != FS_SUCCESS ) + return FS_ERR_IO; + + /* Check BPB */ + ret = BPBCheck( sector ); + } + + if ( ret == FS_TYPE_FAT16 ) + { + /* Capture defaults to machine native format */ + v->BaseOffset = bpbsector; + v->BytesPerSector = SWAP16(bpb->bytesPerSec); + v->SectorsPerFAT = SWAP16(bpb->FATsz16); + v->ReservedSectors = SWAP16(bpb->reservedSec); + v->NumberOfFATs = bpb->numFATs; + v->SectorsPerCluster = bpb->secPerClust; + v->RootDirEntries = SWAP16(bpb->rootEntCount); + + /* Calculate number of root directory sectors */ + v->RootDirSectors = ( ( SWAP16(bpb->rootEntCount) << 5 ) + ( v->BytesPerSector - 1 ) ) / v->BytesPerSector; + + /* First data sector */ + v->FirstDataSector = v->ReservedSectors + (v->NumberOfFATs * v->SectorsPerFAT) + v->RootDirSectors + v->BaseOffset; + + /* Total sectors */ + if ( bpb->totSec16 == 0 ) + v->TotalSectors = SWAP32(bpb->totSec32); + else + v->TotalSectors = SWAP16(bpb->totSec16); + + /* Data Sectors */ + v->DataSectors = v->TotalSectors - ( v->ReservedSectors + ( v->NumberOfFATs * v->SectorsPerFAT ) + v->RootDirSectors ); + + /* Count of clusters */ + v->CountOfClusters = v->DataSectors / bpb->secPerClust; + + /* From v1.03 Document - Page 14 - FAT Type Determination */ + if ( v->CountOfClusters < 4085 ) + return FS_TYPE_NONE; /* FAT12 Volume */ + else + { + if ( v->CountOfClusters >= 65525 ) + return FS_TYPE_NONE; /* FAT32 Volume */ + } + + /* Root Directory Offset */ + v->RootDirOffset = v->ReservedSectors + ( bpb->numFATs * v->SectorsPerFAT ) + v->BaseOffset; + + /* First copy of FAT offset */ + v->FirstFATOffset = v->ReservedSectors + v->BaseOffset; + + media = bpb->media; + + /* Read first FAT */ + if ( DISKIO_ReadSectors( driveid, sector, v->FirstFATOffset, 1 ) != FS_SUCCESS ) + return FS_ERR_IO; + + if ( sector[0] == media ) + { + /* Allocate work spaces */ + v->FAT = (WORD *)malloc(v->SectorsPerFAT * SECTOR_SIZE); + if ( v->FAT == NULL ) + return FS_ERR_NOMEM; + + /* Save time running in and out - just load up the FAT table */ + if ( DISKIO_ReadSectors(driveid, v->FAT, v->FirstFATOffset, v->SectorsPerFAT) != FS_SUCCESS ) + { + free(v->FAT); + return FS_ERR_IO; + } + + /* Likewise, the same for the root directory */ + v->rootDir = (BYTE *)malloc(v->BytesPerSector * v->RootDirSectors); + if ( v->rootDir == NULL ) + { + free(v->FAT); + return FS_ERR_NOMEM; + } + + /* Read root directory */ + if ( DISKIO_ReadSectors(driveid, v->rootDir, v->RootDirOffset, v->RootDirSectors) != FS_SUCCESS ) + { + free(v->FAT); + free(v->rootDir); + return FS_ERR_IO; + } + return FS_TYPE_FAT16; + } + } + + return FS_TYPE_NONE; + +} + +/** + * F I L E N A M I N G S U P P O R T + * + * Routines to en/decode long and short file names + */ + +/**************************************************************************** +* CalcShortNameChecksum +* +* Calculate the checksum for a short filename +* Filename should be in UPPER case, and padded with spaces to match +* a standard directory entry +****************************************************************************/ +static unsigned char CalcShortNameCheckSum( BYTE *fname ) +{ + int i; + unsigned char sum = 0; + + for( i = 0; i < 11; i++ ) + sum = ( ( sum & 1 ) ? 0x80 : 0 ) + ( sum >> 1 ) + fname[i]; + + return sum; +} + +/**************************************************************************** +* BuildShortNameFromDirEntry +* +* User friendly shortname +****************************************************************************/ +static void BuildShortNameFromDirEntry( SFNDIRREC *sfn, BYTE *out ) +{ + int i,j; + + for(i = 0, j = 0; i < 11; i++ ) + { + if ( sfn->dirname[i] != 32 ) + { + out[j++] = sfn->dirname[i]; + } + + if ( (i == 7) && ( sfn->dirname[8] != 32 ) ) + out[j++] = '.'; + } +} + +/**************************************************************************** +* BuildLongNameFromDirEntry +* +* Build a long name from unicode to asciiz. +* Each directory entry may contain up to 13 characters for sub entry. +****************************************************************************/ +static void BuildLongNameFromDirEntry( LFNDIRREC *lfn, int position, BYTE *out ) +{ + int j = ( ( position - 1 ) * 13 ); + int i; + + /* Part one */ + for( i = 0; i < 10; i += 2 ) + { + if ( lfn->dirname1[i] == 0xFF ) + return; + + out[j++] = lfn->dirname1[i]; + } + + /* Part two */ + for( i = 0; i < 12; i += 2 ) + { + if ( lfn->dirname2[i] == 0xFF ) + return; + + out[j++] = lfn->dirname2[i]; + } + + /* Part three */ + for( i = 0; i < 4; i += 2 ) + { + if ( lfn->dirname3[i] == 0xFF ) + return; + + out[j++] = lfn->dirname3[i]; + } +} + +/** + * D I R E C T O R Y F U N C T I O N S + * + * These routines take care of all directory level parsing + */ + +static int SectorFromCluster( int drive, int cluster ) +{ + VFATFS *v = vfs[drive]; + return ( ( cluster - 2 ) * v->SectorsPerCluster ) + v->FirstDataSector; +} + +static int ReadCluster( FSDIRENTRY *d ) +{ + int sector; + + sector = SectorFromCluster( d->driveid, d->CurrentCluster ); + if ( DISKIO_ReadSectors( d->driveid, d->clusterdata, sector, vfs[d->driveid]->SectorsPerCluster) != FS_SUCCESS ) + return FS_ERR_IO; + + d->CachedCluster = d->CurrentCluster; + return FS_SUCCESS; +} + +static int NextCluster( FSDIRENTRY *d ) +{ + d->CurrentCluster = SWAP16(vfs[d->driveid]->FAT[d->CurrentCluster]); + if ( d->CurrentCluster >= CLUSTER_END_CHAIN ) + return 0; + + return 1; +} + +/**************************************************************************** +* FindEntry +* +* Look through a directory tree looking for an active entry. +* The current cluster should be available in d->clusterdata +****************************************************************************/ +static int FindEntry( FSDIRENTRY *d, int maxentries ) +{ + int found = 0; + unsigned char *direntry; + VFATFS *v = vfs[d->driveid]; + SFNDIRREC *sfn; + LFNDIRREC *lfn; + static BYTE checksum = 0; + + if ( !d->crosscluster ) + { + /* Clear names */ + memset(d->shortname, 0, 13); + memset(d->longname, 0, MAX_LONG_NAME); + } + + while( d->CurrentDirEntry < maxentries && !found ) + { + /* Pointer to this directory entry */ + if ( d->CurrentCluster == ROOTCLUSTER ) + direntry = (v->rootDir + ( d->CurrentDirEntry << 5 ) ); + else + direntry = (d->clusterdata + ( d->CurrentDirEntry << 5 ) ); + + switch( direntry[0] ) + { + case 0x00: + case 0xE5: + break; /* Inactive entries */ + + default: + + sfn = (SFNDIRREC *)direntry; + d->crosscluster = 1; + + if ( ( sfn->attribute & ATTR_LONG_NAME_MASK ) == ATTR_LONG_NAME ) + { + if ( direntry[0] & LFN_LAST_ENTRY ) + memset(&d->longname, 0, MAX_LONG_NAME); + + lfn = (LFNDIRREC *)direntry; + BuildLongNameFromDirEntry( lfn, direntry[0] & LFN_ENTRY_MASK, d->longname); + checksum = lfn->checksum; + } + else + { + /* Short name entry */ + found = 1; + memcpy(&d->dirent, direntry, 32); + BuildShortNameFromDirEntry( sfn, d->shortname ); + d->fsize = SWAP32(sfn->filesize); + d->crosscluster = 0; + /* Ensure long name is populated with something */ + if ( strlen((char *)d->longname) == 0 ) + { + strcpy((char *)d->longname, (char *)d->shortname); + return found; + } + else + { + /* If checksums don't match - the FS is inconsistent + To do no harm, skip this entry */ + if ( checksum == CalcShortNameCheckSum(sfn->dirname) ) + return found; + else + found = 0; + } + } + } + + d->CurrentDirEntry++; + + } + + return found; +} + +/**************************************************************************** +* FindInRootDirectory +* +* Root directory is somewhat special. It's a fixed length and has no entry +* in the FAT as such. +* +* Logically, this should be the first 2 clusters, but the spec says it can +* be set to any size by the format utility (Think NT! FAT64/128/256) +* +* For speed, as all searches begin here, the root directory is held in +* memory throughout. +* +* FSDIRENTRY should only have the drive id set. +****************************************************************************/ +static int FindInRootDirectory( FSDIRENTRY *d, char *search ) +{ + int found = 0; + + d->CurrentDirEntry++; + + while( (FindEntry(d, vfs[d->driveid]->RootDirEntries)) && !found ) + { + if ( strcasecmp(search, (char *) d->shortname) == 0 ) + { + found = 1; + } + + if ( strcasecmp(search, (char *) d->longname) == 0 ) + { + found = 1; + } + + if ( !found ) + d->CurrentDirEntry++; + } + + return found; +} + +/**************************************************************************** +* FindInClusters +* +* Generic routine to find a given name in a chain of clusters. +* Used for non-Root Directory searching +****************************************************************************/ +static int FindInClusters( FSDIRENTRY *d, char *findme ) +{ + int found = 0; + + if ( d->CurrentDirEntry == -1 ) + d->CurrentDirEntry = 0; + + /* While not at end of chain */ + while( !found && ( d->CurrentCluster < CLUSTER_END_CHAIN ) ) + { + /* Retrieve dir entries looking for match */ + while( !found && (FindEntry( d, ( vfs[d->driveid]->BytesPerSector * vfs[d->driveid]->SectorsPerCluster) >> 5 ) ) ) + { + if ( strcasecmp((char *)d->shortname, findme) == 0 ) + found = 1; + if ( strcasecmp((char *)d->longname, findme) == 0 ) + found = 1; + + if (!found) + d->CurrentDirEntry++; + } + + /* Read next cluster */ + if ( !found ) + { + if ( NextCluster(d) ) + { + d->CurrentDirEntry = 0; + ReadCluster(d); + } + } + } + + return found; +} + +/**************************************************************************** +* VFAT_opendir +* +* Find the requested directory. +****************************************************************************/ +int VFAT_opendir( int drive, FSDIRENTRY *d, char *search ) +{ + char *p; + char srchtmp[1024]; + int searchroot = 1; + int found = 0; + + /* Clear out FSDIRENTRY */ + memset(d, 0, sizeof(FSDIRENTRY)); + + /* Set drive and root */ + d->driveid = drive; + d->CurrentCluster = ROOTCLUSTER; + d->CurrentDirEntry = -1; + + /* Is this a request for root ? */ + if ( ( strlen(search) == 0 ) || ( strcmp(search,PSEPS) == 0 ) || ( strcmp(search, DIR_ROOT) == 0 ) ) + { + return FS_FILE_OK; + } + + /* Searching for a sub-directory */ + if ( search[0] == PSEP ) + strcpy(srchtmp, &search[1]); + else + strcpy(srchtmp, search); + + p = strtok(srchtmp, PSEPS); + while ( p ) + { + found = 0; + if ( searchroot ) + { + if ( !FindInRootDirectory(d, p) ) + return FS_NO_FILE; + else + { + /* MUST be a directory */ + if ( d->dirent.attribute & ATTR_DIRECTORY ) + { + d->CurrentCluster = d->FirstCluster = SWAP16(d->dirent.fstClustLow); + d->CurrentDirEntry = -1; + + /* Allocate the cluster for this data record */ + d->clusterdata = (BYTE *)malloc(vfs[d->driveid]->SectorsPerCluster * vfs[d->driveid]->BytesPerSector); + ReadCluster(d); + found = 1; + searchroot = 0; + } + else + return FS_NO_FILE; + } + } + else + { + if ( FindInClusters( d, p ) ) + { + /* MUST be a directory */ + if ( !( d->dirent.attribute & ATTR_DIRECTORY ) ) + { + free(d->clusterdata); + return FS_NO_FILE; + } + + /* Read up this cluster */ + d->CurrentCluster = d->FirstCluster = SWAP16(d->dirent.fstClustLow); + d->CurrentDirEntry = 0; + ReadCluster(d); + found = 1; + } + } + + p = strtok(NULL, PSEPS); + } + + if ( !found ) + { + if ( d->clusterdata != NULL ) + { + free(d->clusterdata); + d->clusterdata = NULL; + } + return FS_NO_FILE; + } + + return FS_FILE_OK; + +} + +/**************************************************************************** +* VFAT_readdir +****************************************************************************/ +int VFAT_readdir( FSDIRENTRY *d ) +{ + int ret; + + d->CurrentDirEntry++; + /* Are we in root ? */ + if ( d->CurrentCluster == ROOTCLUSTER ) + { + if( FindEntry( d, vfs[d->driveid]->RootDirEntries ) ) + return FS_FILE_OK; + } + else + { + while( d->CurrentCluster < CLUSTER_END_CHAIN ) + { + ret = FindEntry( d, ( vfs[d->driveid]->BytesPerSector * vfs[d->driveid]->SectorsPerCluster) >> 5 ); + + if ( ret ) + return FS_FILE_OK; + + if ( NextCluster(d) ) + { + d->CurrentDirEntry = 0; + ReadCluster(d); + } + } + } + return FS_NO_FILE; +} + +/**************************************************************************** +* VFAT_closedir +****************************************************************************/ +void VFAT_closedir( FSDIRENTRY *d ) +{ + if ( d->clusterdata != NULL ) + { + free(d->clusterdata); + d->clusterdata = NULL; + } +} + +/**************************************************************************** +* VFAT_fopen +* +* v0.1 - VFAT_READ_ONLY Supported +****************************************************************************/ +int VFAT_fopen( int drive, FSDIRENTRY *d, char *fname, int mode ) +{ + char filename[1024]; + char path[1024]; + char temp[1024]; + char *p; + + if ( drive < 0 || drive > 1 ) + return FS_NO_FILE; + + if ( mode != FS_READ ) + return FS_NO_FILE; + + /* Clear */ + memset(d, 0, sizeof(FSDIRENTRY)); + d->driveid = drive; + + path[0] = temp[0] = filename[0] = 0; + + if ( fname[0] == PSEP ) + strcpy(temp, &fname[1]); + else + strcpy(temp, fname); + + /* Split into filename and path */ + p = strrchr(temp, PSEP); + if ( p ) + { + /* Have path and filename */ + *p = 0; + strcpy(path, temp); + p++; + strcpy(filename, p); + } + else + strcpy(filename, temp); + + /* Do search */ + if ( strlen(path) ) + { + if ( VFAT_opendir(drive, d, path) != FS_FILE_OK ) + { + VFAT_closedir(d); + return FS_NO_FILE; + } + + if ( !FindInClusters( d, filename ) ) + { + VFAT_closedir(d); + return FS_NO_FILE; + } + } + else + { + /* Much simpler check on root directory */ + d->CurrentCluster = ROOTCLUSTER; + d->CurrentDirEntry = -1; + if ( !FindInRootDirectory( d, filename ) ) + { + VFAT_closedir(d); + return FS_NO_FILE; + } + d->clusterdata = (BYTE *)malloc(vfs[d->driveid]->SectorsPerCluster * vfs[d->driveid]->BytesPerSector); + } + + /* Must be a file only */ + if ( d->dirent.attribute & ( ATTR_DIRECTORY | ATTR_VOLUME_ID ) ) + { + VFAT_closedir(d); + return FS_NO_FILE; + } + + d->FirstCluster = d->CurrentCluster = SWAP16(d->dirent.fstClustLow); + d->CachedCluster = -1; + + return FS_FILE_OK; + +} + +/**************************************************************************** +* VFAT_fclose +****************************************************************************/ +void VFAT_fclose( FSDIRENTRY *d ) +{ + VFAT_closedir(d); +} + +/**************************************************************************** +* VFAT_fread +****************************************************************************/ +int VFAT_fread( FSDIRENTRY *d, void *buffer, int length ) +{ + int cluster; + int tbytes; + int umask; + int i; + int bytesdone = 0; + int reallength; + BYTE *p = (BYTE *)buffer; + + if ( length <= 0 ) + return 0; + + /* Determine which cluster in the chain we are in */ + tbytes = ( vfs[d->driveid]->SectorsPerCluster * vfs[d->driveid]->BytesPerSector ); + umask = tbytes - 1; + cluster = ( d->fpos / tbytes ); + + /* Rewind current cluster */ + d->CurrentCluster = d->FirstCluster; + + /* Bring this cluster into view */ + for ( i = 0; i < cluster; i++ ) + d->CurrentCluster = SWAP16(vfs[d->driveid]->FAT[d->CurrentCluster]); + + /* Read the cluster */ + if ( d->CachedCluster != d->CurrentCluster ) + ReadCluster(d); + + /* Get real read length */ + reallength = ( d->fpos + length ) < d->fsize ? length : d->fsize - d->fpos; + + if ( reallength <= 0 ) + return 0; + + /* Move data */ + while( reallength ) + { + if ( !(d->fpos & umask) && ( reallength >= tbytes ) ) + { + /* Move a full cluster */ + memcpy(p + bytesdone, d->clusterdata, tbytes); + reallength -= tbytes; + bytesdone += tbytes; + d->fpos += tbytes; + } + else + { + p[bytesdone++] = d->clusterdata[d->fpos & umask]; + d->fpos++; + reallength--; + } + + if ( !( d->fpos & umask ) ) + { + if ( NextCluster(d) ) + { + ReadCluster(d); + } + else + return bytesdone; + } + } + + return bytesdone; +} + +/**************************************************************************** +* VFAT_fseek +****************************************************************************/ +int VFAT_fseek( FSDIRENTRY *d, int where, int whence ) +{ + switch( whence ) + { + case SEEK_SET: + if ( ( where >= 0 ) && ( where <= d->fsize ) ) + { + d->fpos = where; + return FS_FILE_OK; + } + break; + + case SEEK_CUR: + if ( ( ( d->fpos + where ) >= 0 ) && ( ( d->fpos + where ) <= d->fsize ) ) + { + d->fpos += where; + return FS_FILE_OK; + } + break; + + case SEEK_END: + if ( ( where <= 0 ) && ( abs(where) <= d->fsize ) ) + { + d->fpos = d->fsize + where; + return FS_FILE_OK; + } + break; + } + + return FS_NO_FILE; +} + +/**************************************************************************** +* VFAT_ftell +* +* Return the current position of a file +****************************************************************************/ +int VFAT_ftell( FSDIRENTRY *d ) +{ + return d->fpos; +} + diff --git a/ genplus-gx/source/ngc/vfat/vfat.h b/ genplus-gx/source/ngc/vfat/vfat.h new file mode 100644 index 0000000..e66341a --- /dev/null +++ b/ genplus-gx/source/ngc/vfat/vfat.h @@ -0,0 +1,226 @@ +/**************************************************************************** +* FAT16 - VFAT Support +* +* NOTE: Only supports FAT16 with Long File Names +* I have no interest in adding FAT32 +* +* Reference Documentation: +* +* FAT: General Overview of On-Disk Format +* Version 1.02 May 05, 1999 +* Microsoft Corporation +* +* FAT: General Overview of On-Disk Format +* Version 1.03 December 06, 2000 +* Microsoft Corporation +* +* This is targetted at MMC/SD cards. +* +* Copyright softdev 2007. All rights reserved. +* +* $Date: 2007-08-03 13:23:19 +0100 (Fri, 03 Aug 2007) $ +* $Rev: 3 $ +****************************************************************************/ +#ifndef __FATVFAT__ +#define __FATVFAT__ + +/* x86 type definitions */ +typedef unsigned int DWORD; +typedef unsigned short WORD; +typedef unsigned char BYTE; + +/* Big Endian Support */ +#ifdef WORDS_BIGENDIAN +#define SWAP16(a) (((a&0xff)<<8) | ((a&0xff00)>>8)) +#define SWAP32(a) (((a&0xff000000)>>24) | ((a&0xff0000) >> 8) | ((a&0xff00)<<8) |((a&0xff)<<24)) +#else +#define SWAP16(a) (a) +#define SWAP32(a) (a) +#endif + +/* General */ +#define SECTOR_SIZE 512 +#define SECTOR_SHIFT_BITS 9 +#define LFN_LAST_ENTRY 0x40 +#define LFN_ENTRY_MASK 0x3F +#define ROOTCLUSTER 0xdeadc0de +#define PSEP '/' +#define PSEPS "/" +#define DIR_ROOT "." +#define DIR_PARENT ".." + +/* FSTYPES */ +#define FS_TYPE_NONE 0 +#define FS_TYPE_FAT16 1 + +/* Errors */ +#define FS_FILE_OK 0 +#define FS_SUCCESS FS_FILE_OK +#define FS_ERR_NOMEM -128 +#define FS_NO_FILE -64 +#define FS_ERR_IO -32 +#define FS_ERR_PARAM -16 + +/* File modes */ +#define FS_READ 1 + +/* Gamecube Specific */ +#define FS_SLOTA 0 +#define FS_SLOTB 1 + +/* FAT12/16 */ +typedef struct + { + BYTE jmpBoot[3]; /* Always 0xEBxx90 or 0xE9xxxx */ + BYTE OEMName[8]; /* OEM Name 'MSWIN4.1' or similar */ + WORD bytesPerSec; /* Bytes per sector */ + BYTE secPerClust; /* Sectors per cluster */ + WORD reservedSec; /* Reserved Sector Count */ + BYTE numFATs; /* Number of FAT copies */ + WORD rootEntCount; /* FAT12/16 number of root entries. */ + WORD totSec16; /* Sector count if < 0x10000 */ + BYTE media; /* Media ID byte (HD == 0xF8) */ + WORD FATsz16; /* Sectors occupied by one copy of FAT */ + WORD secPerTrack; /* Sectors per track */ + WORD numHeads; /* Number of heads */ + DWORD hiddenSec; /* Hidden sector count */ + DWORD totSec32; /* Total sectors when >= 0x10000 */ + BYTE drvNum; /* BIOS Drive Number (0x80) */ + BYTE reserved1; /* Unused - always zero */ + BYTE bootSig; /* Boot signature */ + DWORD volID; /* Volume serial number */ + BYTE volName[11]; /* Volume Name */ + BYTE FilSysType[8]; /* File system type */ + BYTE filler[SECTOR_SIZE-64]; + BYTE sigkey1; /* 0x55 */ + BYTE sigkey2; /* 0xAA */ + } +__attribute__((__packed__)) BPB16; + +/* Partition entry */ +typedef struct + { + BYTE bootindicator; + BYTE startCHS[3]; + BYTE partitiontype; + BYTE endCHS[3]; + DWORD partitionstart; + DWORD partitionsize; + } +__attribute__((__packed__)) PARTENTRY; + +/* VFAT - Main structure */ +typedef struct + { + DWORD BaseOffset; + DWORD SectorsPerCluster; + DWORD BytesPerSector; + DWORD ReservedSectors; + DWORD RootDirSectors; + DWORD SectorsPerFAT; + DWORD NumberOfFATs; + DWORD FirstDataSector; + DWORD TotalSectors; + DWORD CountOfClusters; + DWORD DataSectors; + DWORD RootDirOffset; + DWORD FirstFATOffset; + DWORD RootDirEntries; + WORD *FAT; /* Holds first FAT copy */ + BYTE *rootDir; /* Holds entire root directory */ + } +__attribute__((__packed__)) VFATFS; + +/** + * Directory + */ + +#define MAX_LONG_NAME 256 + +/* Directory entry attributes */ +#define ATTR_READ_ONLY 0x01 +#define ATTR_HIDDEN 0x02 +#define ATTR_SYSTEM 0x04 +#define ATTR_VOLUME_ID 0x08 +#define ATTR_DIRECTORY 0x10 +#define ATTR_ARCHIVE 0x20 +#define ATTR_LONG_NAME (ATTR_READ_ONLY | \ + ATTR_HIDDEN | \ + ATTR_SYSTEM | \ + ATTR_VOLUME_ID ) + +#define ATTR_LONG_NAME_MASK ( ATTR_READ_ONLY | \ + ATTR_HIDDEN | \ + ATTR_SYSTEM | \ + ATTR_VOLUME_ID | \ + ATTR_DIRECTORY | \ + ATTR_ARCHIVE ) + +#define CLUSTER_END_CHAIN 0xFFF8 +#define CLUSTER_BAD 0xFFF7 + +/* Short file name */ +typedef struct + { + BYTE dirname[11]; /* Record name */ + BYTE attribute; /* Attributes */ + BYTE NTReserved; /* Reserved for Window NT - set 0 */ + BYTE dirTenthSecs; /* Tenth of a second, 0-199 */ + WORD dirCreateTime; /* Time of creation */ + WORD dirCreateDate; /* Date of creation */ + WORD dirLastAccDate;/* Date of last access */ + WORD fstClustHigh; /* High word of first cluster - ZERO on FAT16 */ + WORD dirWriteTime; /* Time of last write */ + WORD dirWriteDate; /* Date of last write */ + WORD fstClustLow; /* Low word of first cluster */ + DWORD filesize; /* Filesize in bytes */ + } +__attribute__((__packed__)) SFNDIRREC; + +/* Long file name */ +typedef struct + { + BYTE ordinal; /* Entry number */ + BYTE dirname1[10]; + BYTE attribute; /* Attributes */ + BYTE type; /* Reserved */ + BYTE checksum; /* SFN Checksum */ + BYTE dirname2[12]; + WORD fstClustLo; /* MUST BE ZERO */ + BYTE dirname3[4]; + } +__attribute__((__packed__)) LFNDIRREC; + +/* User dir entry */ +typedef struct + { + BYTE longname[MAX_LONG_NAME]; + BYTE shortname[13]; /* Keep word aligned*/ + DWORD fpos; + DWORD fsize; + DWORD driveid; + DWORD FirstCluster; + DWORD CurrentCluster; + DWORD CachedCluster; + DWORD CurrentDirEntry; + DWORD crosscluster; + BYTE *clusterdata; + /* Now a copy of the current directory entry */ + SFNDIRREC dirent; + } +__attribute__((__packed__)) FSDIRENTRY; + +/* VFAT API */ +/* Directory */ +int VFAT_opendir( int drive, FSDIRENTRY *d, char *search ); +int VFAT_readdir( FSDIRENTRY *d ); +void VFAT_closedir( FSDIRENTRY *d ); +int VFAT_fopen( int drive, FSDIRENTRY *d, char *fname, int mode ); +void VFAT_fclose( FSDIRENTRY *d ); +int VFAT_fread( FSDIRENTRY *d, void *buffer, int length ); +int VFAT_ftell( FSDIRENTRY *d ); +int VFAT_fseek( FSDIRENTRY *d, int where, int whence ); +int VFAT_mount( int driveid, VFATFS *v ); + +#endif + diff --git a/ genplus-gx/source/render.c b/ genplus-gx/source/render.c new file mode 100644 index 0000000..6fd65ad --- /dev/null +++ b/ genplus-gx/source/render.c @@ -0,0 +1,1536 @@ +/* + only update window clip on window change (?) + fix leftmost window/nta render and window bug + sprite masking isn't right in sonic/micromachines 2, but + seems ok in galaxy force 2 + + Eke-Eke (2007): + . pixel sprite limit fixed (sonic/micromachines 2) + . sprite collision detection added + . big endian support improved + . fixed leftmost window/nta render and window bug + . some code speedup (minor) +*/ + + +#include "shared.h" + +#ifndef LSB_FIRST +static uint32 ATTR_MSB; +#endif + +#ifdef ALIGN_LONG + +/* Or change the names if you depend on these from elsewhere.. */ +#undef READ_LONG +#undef WRITE_LONG + +static __inline__ uint32 READ_LONG(void *address) +{ + if ((uint32)address & 3) + { +#ifdef LSB_FIRST /* little endian version */ + return ( *((uint8 *)address) + + (*((uint8 *)address+1) << 8) + + (*((uint8 *)address+2) << 16) + + (*((uint8 *)address+3) << 24) ); +#else /* big endian version */ + return ( *((uint8 *)address+3) + + (*((uint8 *)address+2) << 8) + + (*((uint8 *)address+1) << 16) + + (*((uint8 *)address) << 24) ); +#endif /* LSB_FIRST */ + } + else return *(uint32 *)address; +} + +static __inline__ void WRITE_LONG(void *address, uint32 data) +{ + if ((uint32)address & 3) + { +#ifdef LSB_FIRST + *((uint8 *)address) = data; + *((uint8 *)address+1) = (data >> 8); + *((uint8 *)address+2) = (data >> 16); + *((uint8 *)address+3) = (data >> 24); +#else + *((uint8 *)address+3) = data; + *((uint8 *)address+2) = (data >> 8); + *((uint8 *)address+1) = (data >> 16); + *((uint8 *)address) = (data >> 24); +#endif /* LSB_FIRST */ + return; + } + else *(uint32 *)address = data; +} + +#endif /* ALIGN_LONG */ + + +/* + Two Pattern Attributes are written in VRAM as two 16bits WORD: + + P = priority bit + C = color palette (2 bits) + V = Vertical Flip bit + H = Horizontal Flip bit + N = Pattern Number (11 bits) + + MSB PCCVHNNN NNNNNNNN LSB PCCVHNNN NNNNNNNN LSB + PATTERN1 PATTERN2 + + Pattern attributes are read from VRAM as 32bits WORD like this: + + LIT_ENDIAN: ATTR is MSB PCCVHNNN NNNNNNNN PCCVHNNN NNNNNNNN LSB + PATTERN2 PATTERN1 + + BIG_ENDIAN: ATTR is MSB PCCVHNNN NNNNNNNN PCCVHNNN NNNNNNNN LSB + PATTERN1 PATTERN2 + + + Each Line Buffer written byte describe one pixel data like this: + + msb SPppcccc lsb + + with: + S = sprite data indicator (not written here) + P = priority bit (from Pattern Attribute) + p = color palette (from Pattern Attribute) + c = color data (from Pattern Cache) + + + A column is 2 patterns wide + A pattern is 8 pixels wide = 8 bytes = two 32 bits write +*/ + +/* Draw a single 8-pixel column */ +/* + pattern cache is addressed like this: 00000VHN NNNNNNNN NNYYYXXX + with : Y = pattern row (1-8 lines) + X = pattern column (1-8 pixels) + V = Vertical Flip bit + H = Horizontal Flip bit + N = Pattern Number (1-2048) +*/ +#ifdef ALIGN_LONG +#ifdef LSB_FIRST +#define DRAW_COLUMN(ATTR, LINE) \ + atex = atex_table[(ATTR >> 13) & 7]; \ + src = (uint32 *)&bg_pattern_cache[(ATTR & 0x1FFF) << 6 | (LINE)]; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + ATTR >>= 16; \ + atex = atex_table[(ATTR >> 13) & 7]; \ + src = (uint32 *)&bg_pattern_cache[(ATTR & 0x1FFF) << 6 | (LINE)]; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; +#else +#define DRAW_COLUMN(ATTR, LINE) \ + ATTR_MSB = ATTR >> 16; \ + atex = atex_table[(ATTR_MSB >> 13) & 7]; \ + src = (uint32 *)&bg_pattern_cache[(ATTR_MSB & 0x1FFF) << 6 | (LINE)]; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + atex = atex_table[(ATTR >> 13) & 7]; \ + src = (uint32 *)&bg_pattern_cache[(ATTR & 0x1FFF) << 6 | (LINE)]; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; +#endif +#else /* NOT ALIGNED */ +#ifdef LSB_FIRST +#define DRAW_COLUMN(ATTR, LINE) \ + atex = atex_table[(ATTR >> 13) & 7]; \ + src = (uint32 *)&bg_pattern_cache[(ATTR & 0x1FFF) << 6 | (LINE)]; \ + *dst++ = (*src++ | atex); \ + *dst++ = (*src++ | atex); \ + ATTR >>= 16; \ + atex = atex_table[(ATTR >> 13) & 7]; \ + src = (uint32 *)&bg_pattern_cache[(ATTR & 0x1FFF) << 6 | (LINE)]; \ + *dst++ = (*src++ | atex); \ + *dst++ = (*src++ | atex); +#else +#define DRAW_COLUMN(ATTR, LINE) \ + ATTR_MSB = ATTR >> 16; \ + atex = atex_table[(ATTR_MSB >> 13) & 7]; \ + src = (uint32 *)&bg_pattern_cache[(ATTR_MSB & 0x1FFF) << 6 | (LINE)]; \ + *dst++ = (*src++ | atex); \ + *dst++ = (*src++ | atex); \ + atex = atex_table[(ATTR >> 13) & 7]; \ + src = (uint32 *)&bg_pattern_cache[(ATTR & 0x1FFF) << 6 | (LINE)]; \ + *dst++ = (*src++ | atex); \ + *dst++ = (*src++ | atex); +#endif +#endif /* ALIGN_LONG */ + + +/* Draw a single 16-pixel column */ +/* + pattern cache is addressed like this: 00000VHN NNNNNNNN NYYYYXXX + with : Y = pattern row (1-16 lines) + X = pattern column (1-8 pixels) + V = Vertical Flip bit + H = Horizontal Flip bit + N = Pattern Number (1-1024) + + one pattern line is 8 pixels = 8 bytes = 2 * 32 bits +*/ +#ifdef ALIGN_LONG +#ifdef LSB_FIRST +#define DRAW_COLUMN_IM2(ATTR, LINE) \ + atex = atex_table[(ATTR >> 13) & 7]; \ + offs = (ATTR & 0x03FF) << 7 | (ATTR & 0x1800) << 6 | (LINE); \ + if(ATTR & 0x1000) offs ^= 0x40; \ + src = (uint32 *)&bg_pattern_cache[offs]; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + ATTR >>= 16; \ + atex = atex_table[(ATTR >> 13) & 7]; \ + offs = (ATTR & 0x03FF) << 7 | (ATTR & 0x1800) << 6 | (LINE); \ + if(ATTR & 0x1000) offs ^= 0x40; \ + src = (uint32 *)&bg_pattern_cache[offs]; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; +#else +#define DRAW_COLUMN_IM2(ATTR, LINE) \ + ATTR_MSB = ATTR >> 16; \ + atex = atex_table[(ATTR_MSB >> 13) & 7]; \ + offs = (ATTR_MSB & 0x03FF) << 7 | (ATTR_MSB & 0x1800) << 6 | (LINE); \ + if(ATTR_MSB & 0x1000) offs ^= 0x40; \ + src = (uint32 *)&bg_pattern_cache[offs]; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + atex = atex_table[(ATTR >> 13) & 7]; \ + offs = (ATTR & 0x03FF) << 7 | (ATTR & 0x1800) << 6 | (LINE); \ + if(ATTR & 0x1000) offs ^= 0x40; \ + src = (uint32 *)&bg_pattern_cache[offs]; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; \ + WRITE_LONG(dst, READ_LONG(src) | atex); \ + dst++; \ + src++; +#endif +#else /* NOT ALIGNED */ +#ifdef LSB_FIRST +#define DRAW_COLUMN_IM2(ATTR, LINE) \ + atex = atex_table[(ATTR >> 13) & 7]; \ + offs = (ATTR & 0x03FF) << 7 | (ATTR & 0x1800) << 6 | (LINE); \ + if(ATTR & 0x1000) offs ^= 0x40; \ + src = (uint32 *)&bg_pattern_cache[offs]; \ + *dst++ = (*src++ | atex); \ + *dst++ = (*src++ | atex); \ + ATTR >>= 16; \ + atex = atex_table[(ATTR >> 13) & 7]; \ + offs = (ATTR & 0x03FF) << 7 | (ATTR & 0x1800) << 6 | (LINE); \ + if(ATTR & 0x1000) offs ^= 0x40; \ + src = (uint32 *)&bg_pattern_cache[offs]; \ + *dst++ = (*src++ | atex); \ + *dst++ = (*src++ | atex); +#else +#define DRAW_COLUMN_IM2(ATTR, LINE) \ + ATTR_MSB = ATTR >> 16; \ + atex = atex_table[(ATTR_MSB >> 13) & 7]; \ + offs = (ATTR_MSB & 0x03FF) << 7 | (ATTR_MSB & 0x1800) << 6 | (LINE); \ + if(ATTR_MSB & 0x1000) offs ^= 0x40; \ + src = (uint32 *)&bg_pattern_cache[offs]; \ + *dst++ = (*src++ | atex); \ + *dst++ = (*src++ | atex); \ + atex = atex_table[(ATTR >> 13) & 7]; \ + offs = (ATTR & 0x03FF) << 7 | (ATTR & 0x1800) << 6 | (LINE); \ + if(ATTR & 0x1000) offs ^= 0x40; \ + src = (uint32 *)&bg_pattern_cache[offs]; \ + *dst++ = (*src++ | atex); \ + *dst++ = (*src++ | atex); +#endif +#endif /* ALIGN_LONG */ + +/* + gcc complains about this: + *lb++ = table[(*lb << 8) |(*src++ | palette)]; + .. claiming the result on lb is undefined. + So we manually advance lb and use constant offsets into the line buffer. +*/ + +/* added sprite collision detection: + check if non-transparent sprite data has been previously drawn +*/ +#define DRAW_SPRITE_TILE \ + for(i=0; i<8; i++) \ + { \ + if ((lb[i] & 0x80) && ((lb[i] | src[i]) & 0x0F)) status |= 0x20; \ + lb[i] = table[(lb[i] << 8) |(src[i] | palette)]; \ + } + + +/* Pixel creation macros, input is four bits each */ +/* 8:8:8 RGB */ +#define MAKE_PIXEL_32(r,g,b) ((r) << 20 | (g) << 12 | (b) << 4) + +/* 5:5:5 RGB */ +#define MAKE_PIXEL_15(r,g,b) ((r) << 11 | (g) << 6 | (b) << 1) + +/* 5:6:5 RGB */ +#define MAKE_PIXEL_16(r,g,b) ((r) << 11 | (g) << 5 | (b)) + +/* 3:3:2 RGB */ +#define MAKE_PIXEL_8(r,g,b) ((r) << 5 | (g) << 2 | ((b) >> 1)) + +/* Clip data */ +static clip_t clip[2]; + +/* Attribute expansion table */ +static const uint32 atex_table[] = { + 0x00000000, 0x10101010, 0x20202020, 0x30303030, + 0x40404040, 0x50505050, 0x60606060, 0x70707070 +}; + +/* Sprite name look-up table */ +uint8 name_lut[0x400]; + +/* Sprite line buffer data */ +uint8 object_index_count; + +struct +{ + uint16 ypos; + uint16 xpos; + uint16 attr; + uint8 size; + uint8 index; +} object_info[20]; + +/* Pixel look-up tables and table base address */ +uint8 *lut[5]; +uint8 *lut_base = NULL; + +/* 8-bit pixel remapping data */ +uint8 pixel_8[0x100]; +uint8 pixel_8_lut[3][0x200]; + +/* 15-bit pixel remapping data */ +uint16 pixel_15[0x100]; +uint16 pixel_15_lut[3][0x200]; + +/* 16-bit pixel remapping data */ +uint16 pixel_16[0x100]; +uint16 pixel_16_lut[3][0x200]; + +/* 32-bit pixel remapping data */ +uint32 pixel_32[0x100]; +uint32 pixel_32_lut[3][0x200]; + +/* Line buffers */ +uint8 tmp_buf[0x400]; /* Temporary buffer */ +uint8 bg_buf[0x400]; /* Merged background buffer */ +uint8 nta_buf[0x400]; /* Plane A / Window line buffer */ +uint8 ntb_buf[0x400]; /* Plane B line buffer */ +uint8 obj_buf[0x400]; /* Object layer line buffer */ + +/* + 3:3:3 to 5:6:5 RGB pixel extrapolation tables + this is used to convert 3bits RGB values to 5bits (R,B) or 6bits (G) values + there is three color modes: + normal: RGB range is [0;MAX] + half: RGB range is [0;MAX/2] (shadow mode) + high: RGB range is [MAX/2;MAX] (highlight mode) + + MAX is 31 (R,B) or 63 (G) for 5:6:5 pixels and 7 (R,G,B) for 3:3:3 pixels + MAX/2 is rounded to inferior value (15, 31 or 3) + + the extrapolation is linear and calculated like this: + + for (i=0; i<8; i++) + { + rgb565_norm[0][i] = round(((double)i * 31.0) / 7.0); + rgb565_norm[1][i] = round(((double)i * 63.0) / 7.0); + + rgb565_half[0][i] = round(((double)i * 31.0) / 7.0 / 2.0); + rgb565_half[1][i] = round(((double)i * 63.0) / 7.0 / 2.0); + + rgb565_high[0][i] = round(((double)i * 31.0) / 7.0 / 2.0 + 15.5); + rgb565_high[1][i] = round(((double)i * 63.0) / 7.0 / 2.0 + 31.5); + } + +*/ + +uint8 rgb565_norm[2][8] = {{0 , 4, 9, 13, 18, 22, 27, 31}, + {0 , 9, 18, 27, 36, 45, 54, 63}}; +uint8 rgb565_half[2][8] = {{0 , 2, 4, 7, 9, 11, 13, 15}, + {0 , 4, 9, 13, 18, 22, 27, 31}}; +uint8 rgb565_high[2][8] = {{15, 18, 20, 22, 24, 27, 29, 31}, + {31, 36, 40, 45, 49, 54, 58, 63}}; + + +/*--------------------------------------------------------------------------*/ +/* Init, reset, shutdown routines */ +/*--------------------------------------------------------------------------*/ + +int render_init (void) +{ + int bx, ax, i; + + /* Allocate and align pixel look-up tables */ + if (lut_base == NULL) lut_base = malloc ((LUT_MAX * LUT_SIZE) + LUT_SIZE); + lut[0] = (uint8 *) (((uint32) lut_base + LUT_SIZE) & ~(LUT_SIZE - 1)); + for (i = 1; i < LUT_MAX; i += 1) lut[i] = lut[0] + (i * LUT_SIZE); + + /* Make pixel look-up table data */ + for (bx = 0; bx < 0x100; bx += 1) + for (ax = 0; ax < 0x100; ax += 1) + { + uint16 index = (bx << 8) | (ax); + lut[0][index] = make_lut_bg (bx, ax); + lut[1][index] = make_lut_obj (bx, ax); + lut[2][index] = make_lut_bg_ste (bx, ax); + lut[3][index] = make_lut_obj_ste (bx, ax); + lut[4][index] = make_lut_bgobj_ste (bx, ax); + } + + /* Make pixel data tables */ + for (i = 0; i < 0x200; i += 1) + { + int r, g, b; + + r = (i >> 6) & 7; + g = (i >> 3) & 7; + b = (i >> 0) & 7; + + pixel_8_lut[0][i] = MAKE_PIXEL_8(r>>1,g>>1,b>>1); + pixel_8_lut[1][i] = MAKE_PIXEL_8(r,g,b); + pixel_8_lut[2][i] = MAKE_PIXEL_8((r>>1)|4,(g>>1)|4,(b>>1)|4); + + pixel_15_lut[0][i] = MAKE_PIXEL_15(r,g,b); + pixel_15_lut[1][i] = MAKE_PIXEL_15(r<<1,g<<1,b<<1); + pixel_15_lut[2][i] = MAKE_PIXEL_15(r|8,g|8,b|8); + + /* RGB 565 format: we extrapolate each 3-bit value into a 5-bit (R,B) or 6-bit (G) value + this is needed to correctly cover full color range: [0-31] for R,B or [0-63] for G */ + pixel_16_lut[0][i] = MAKE_PIXEL_16(rgb565_half[0][r],rgb565_half[1][g],rgb565_half[0][b]); + pixel_16_lut[1][i] = MAKE_PIXEL_16(rgb565_norm[0][r],rgb565_norm[1][g],rgb565_norm[0][b]); + pixel_16_lut[2][i] = MAKE_PIXEL_16(rgb565_high[0][r],rgb565_high[1][g],rgb565_high[0][b]); + + pixel_32_lut[0][i] = MAKE_PIXEL_32(r,g,b); + pixel_32_lut[1][i] = MAKE_PIXEL_32(r<<1,g<<1,b<<1); + pixel_32_lut[2][i] = MAKE_PIXEL_32(r|8,g|8,b|8); + } + + /* Set up color update function */ + switch(bitmap.depth) + { + case 8: color_update = color_update_8; break; + case 15: color_update = color_update_15; break; + case 16: color_update = color_update_16; break; + case 32: color_update = color_update_32; break; + } + + /* Make sprite name look-up table */ + make_name_lut(); + + return (1); +} + +void make_name_lut(void) +{ + int col, row; + int vcol, vrow; + int width, height; + int flipx, flipy; + int i, name; + + memset (name_lut, 0, sizeof (name_lut)); + + for (i = 0; i < 0x400; i += 1) + { + vcol = col = i & 3; + vrow = row = (i >> 2) & 3; + height = (i >> 4) & 3; + width = (i >> 6) & 3; + flipx = (i >> 8) & 1; + flipy = (i >> 9) & 1; + + if(flipx) vcol = (width - col); + if(flipy) vrow = (height - row); + + name = vrow + (vcol * (height + 1)); + + if ((row > height) || col > width) name = -1; + + name_lut[i] = name; + } +} + +void render_reset(void) +{ + memset(&clip, 0, sizeof(clip)); + + memset(bg_buf, 0, sizeof(bg_buf)); + memset(tmp_buf, 0, sizeof(tmp_buf)); + memset(nta_buf, 0, sizeof(nta_buf)); + memset(ntb_buf, 0, sizeof(ntb_buf)); + memset(obj_buf, 0, sizeof(obj_buf)); + + memset(&pixel_8, 0, sizeof(pixel_8)); + memset(&pixel_15, 0, sizeof(pixel_15)); + memset(&pixel_16, 0, sizeof(pixel_16)); + memset(&pixel_32, 0, sizeof(pixel_32)); +} + + +void render_shutdown(void) +{ + if(lut_base) free(lut_base); +} + +/*--------------------------------------------------------------------------*/ +/* Line render function */ +/*--------------------------------------------------------------------------*/ + +void render_line(int line) +{ + uint8 *lb = tmp_buf; + int width = bitmap.viewport.w; + + if((reg[1] & 0x40) == 0x00) + { + memset(&lb[bitmap.viewport.x], 0x40 | border, width); + } + else + { + update_bg_pattern_cache(); + window_clip(line); + + if(im2_flag) + { + if (clip[0].enable) render_ntx_im2(0, line, nta_buf); + render_ntx_im2(1, line, ntb_buf); + if (clip[1].enable) render_ntw_im2(line, nta_buf); + } + else + { + if(reg[11] & 4) + { + if (clip[0].enable) render_ntx_vs(0, line, nta_buf); + render_ntx_vs(1, line, ntb_buf); + } + else + { + if (clip[0].enable) render_ntx(0, line, nta_buf); + render_ntx(1, line, ntb_buf); + } + if (clip[1].enable) render_ntw(line, nta_buf); + } + + if(reg[12] & 8) + { + merge(&nta_buf[0x20], &ntb_buf[0x20], &bg_buf[0x20], lut[2], width); + memset(&obj_buf[0x20], 0, width); + + if(im2_flag) render_obj_im2(line, obj_buf, lut[3]); + else render_obj(line, obj_buf, lut[3]); + + merge(&obj_buf[0x20], &bg_buf[0x20], &lb[0x20], lut[4], width); + } + else + { + merge(&nta_buf[0x20], &ntb_buf[0x20], &lb[0x20], lut[0], width); + if(im2_flag) render_obj_im2(line, lb, lut[1]); + else render_obj(line, lb, lut[1]); + } + } + + if(reg[0] & 0x20) + { + memset(&lb[bitmap.viewport.x], 0x40 | border, 0x08); + } + + void *out = (void *)&bitmap.data[(line * bitmap.pitch) + (bitmap.viewport.x * bitmap.granularity)]; + switch(bitmap.depth) + { + case 8: + remap_8(lb+0x20, (uint8 *)out, pixel_8, width); + break; + case 15: + remap_16(lb+0x20, (uint16 *)out, pixel_15, width); + break; + case 16: + remap_16(lb+0x20, (uint16 *)out, pixel_16, width); + break; + case 32: + remap_32(lb+0x20, (uint32 *)out, pixel_32, width); + break; + } + } + +/*--------------------------------------------------------------------------*/ +/* Window rendering */ +/*--------------------------------------------------------------------------*/ + +void render_ntw(int line, uint8 *buf) +{ + int column, v_line, width; + uint32 *nt, *src, *dst, atex, atbuf; + + v_line = (line & 7) << 3; + width = (reg[12] & 1) ? 7 : 6; + nt = (uint32 *)&vram[ntwb | ((line >> 3) << width)]; + dst = (uint32 *)&buf[0x20 + (clip[1].left << 4)]; + + for(column = clip[1].left; column < clip[1].right; column ++) + { + atbuf = nt[column]; + DRAW_COLUMN(atbuf, v_line) + } +} + +void render_ntw_im2(int line, uint8 *buf) +{ + int column, v_line, width; + uint32 *nt, *src, *dst, atex, atbuf, offs; + + v_line = ((line & 7) << 1 | ((status >> 4) & 1)) << 3; + width = (reg[12] & 1) ? 7 : 6; + nt = (uint32 *)&vram[ntwb | ((line >> 3) << width)]; + dst = (uint32 *)&buf[0x20 + (clip[1].left << 4)]; + + for(column = clip[1].left; column < clip[1].right; column ++) + { + atbuf = nt[column]; + DRAW_COLUMN_IM2(atbuf, v_line) + } +} + +/*--------------------------------------------------------------------------*/ +/* Background plane rendering */ +/*--------------------------------------------------------------------------*/ + +void render_ntx(int which, int line, uint8 *buf) +{ + int column; + int start, end; + int index; + int shift; + int v_line; + uint32 atex, atbuf, *src, *dst; + uint16 xscroll; + int y_scroll; + uint32 *nt; + uint32 *vs; + uint16 table[2] = {ntab,ntbb}; + uint8 xshift[2] = {0,2}; +#ifdef LSB_FIRST + uint8 vsr_shift[2] = {0,16}; +#else + uint8 vsr_shift[2] = {16,0}; +#endif + + get_hscroll(line, xshift[which], &xscroll); + shift = (xscroll & 0x0F); + index = playfield_col_mask + 1 - ((xscroll >> 4) & playfield_col_mask); + + if(which) + { + start = 0; + end = (reg[12] & 1) ? 20 : 16; + } + else + { + start = clip[0].left; + end = clip[0].right; + index = (index + clip[0].left) & playfield_col_mask; + } + + vs = (uint32 *)&vsram[0]; + y_scroll = (vs[0] >> vsr_shift[which]) & 0x3FF; + y_scroll = (line + y_scroll) & playfield_row_mask; + v_line = (y_scroll & 7) << 3; + nt = (uint32 *)&vram[table[which] + (((y_scroll >> 3) << playfield_shift) & y_mask)]; + + if(shift) + { + dst = (uint32 *)&buf[0x10 + shift + (start<<4)]; + + /* Window bug */ + if (start) atbuf = nt[(index) & playfield_col_mask]; + else atbuf = nt[(index-1) & playfield_col_mask]; + + DRAW_COLUMN(atbuf, v_line); + } + + dst = (uint32 *)&buf[0x20 + shift + (start<<4)]; + + for(column = start; column < end; column ++, index ++) + { + atbuf = nt[index & playfield_col_mask]; + DRAW_COLUMN(atbuf, v_line) + } +} + +void render_ntx_im2(int which, int line, uint8 *buf) +{ + int column; + int start, end; + int index; + int shift; + int v_line; + uint32 atex, atbuf, *src, *dst; + uint16 xscroll; + int y_scroll; + uint32 *nt; + uint32 *vs; + uint32 offs; + uint16 table[2] = {ntab,ntbb}; + uint8 xshift[2] = {0,2}; +#ifdef LSB_FIRST + uint8 vsr_shift[2] = {1,17}; +#else + uint8 vsr_shift[2] = {17,1}; +#endif + + get_hscroll(line, xshift[which], &xscroll); + shift = (xscroll & 0x0F); + index = playfield_col_mask + 1 - ((xscroll >> 4) & playfield_col_mask); + + if(which) + { + start = 0; + end = (reg[0x0C] & 1) ? 20 : 16; + } + else + { + start = clip[0].left; + end = clip[0].right; + index = (index + clip[0].left) & playfield_col_mask; + } + + vs = (uint32 *)&vsram[0]; + y_scroll = (vs[0] >> vsr_shift[which]) & 0x3FF; + y_scroll = (line + y_scroll) & playfield_row_mask; + v_line = (((y_scroll & 7) << 1) | ((status >> 4) & 1)) << 3; + nt = (uint32 *)&vram[table[which] + (((y_scroll >> 3) << playfield_shift) & y_mask)]; + + if(shift) + { + dst = (uint32 *)&buf[0x10 + shift + (start<<4)]; + + /* Window bug */ + if (start) atbuf = nt[(index) & playfield_col_mask]; + else atbuf = nt[(index-1) & playfield_col_mask]; + + DRAW_COLUMN(atbuf, v_line); + } + + dst = (uint32 *)&buf[0x20 + shift + (start<<4)]; + for(column = start; column < end; column ++, index ++) + { + atbuf = nt[index & playfield_col_mask]; + DRAW_COLUMN_IM2(atbuf, v_line) + } +} + +void render_ntx_vs(int which, int line, uint8 *buf) +{ + int column; + int start, end; + int index; + int shift; + int v_line; + uint32 atex, atbuf, *src, *dst; + uint16 xscroll; + int y_scroll; + uint32 *nt; + uint32 *vs; + uint16 table[2] = {ntab,ntbb}; + uint8 xshift[2] = {0,2}; +#ifdef LSB_FIRST + uint8 vsr_shift[2] = {0,16}; +#else + uint8 vsr_shift[2] = {16,0}; +#endif + + get_hscroll(line, xshift[which], &xscroll); + shift = (xscroll & 0x0F); + index = playfield_col_mask + 1 - ((xscroll >> 4) & playfield_col_mask); + + if(which) + { + start = 0; + end = (reg[0x0C] & 1) ? 20 : 16; + } + else + { + start = clip[0].left; + end = clip[0].right; + index = (index + clip[0].left) & playfield_col_mask; + } + + vs = (uint32 *)&vsram[0]; + + if (shift) + { + dst = (uint32 *)&buf[0x10 + shift + (start<<4)]; + y_scroll = (line & playfield_row_mask); + v_line = (y_scroll & 7) << 3; + nt = (uint32 *)&vram[table[which] + (((y_scroll >> 3) << playfield_shift) & y_mask)]; + + /* Window bug */ + if (start) atbuf = nt[(index) & playfield_col_mask]; + else atbuf = nt[(index-1) & playfield_col_mask]; + + DRAW_COLUMN(atbuf, v_line); + } + + dst = (uint32 *)&buf[0x20 + shift + (start<<4)]; + + for(column = start; column < end; column ++, index ++) + { + y_scroll = (vs[column] >> vsr_shift[which]) & 0x3FF; + y_scroll = (line + y_scroll) & playfield_row_mask; + v_line = (y_scroll & 7) << 3; + nt = (uint32 *)&vram[table[which] + (((y_scroll >> 3) << playfield_shift) & y_mask)]; + atbuf = nt[index & playfield_col_mask]; + DRAW_COLUMN(atbuf, v_line) + } +} + +/*--------------------------------------------------------------------------*/ +/* Helper functions (cache update, hscroll, window clip) */ +/*--------------------------------------------------------------------------*/ + +void update_bg_pattern_cache(void) +{ + int i; + uint8 x, y, c; + uint16 name; +#ifdef LSB_FIRST + uint8 shift_table[8] = {12, 8, 4, 0, 28, 24, 20, 16}; + #else + uint8 shift_table[8] = {28, 24, 20, 16, 12, 8, 4, 0}; + #endif + + if(!bg_list_index) return; + + for(i = 0; i < bg_list_index; i ++) + { + name = bg_name_list[i]; + bg_name_list[i] = 0; + + for(y = 0; y < 8; y ++) + { + if(bg_name_dirty[name] & (1 << y)) + { + uint8 *dst = &bg_pattern_cache[name << 6]; + uint32 bp = *(uint32 *)&vram[(name << 5) | (y << 2)]; + + for(x = 0; x < 8; x ++) + { + c = (bp >> shift_table[x]) & 0x0F; + dst[0x00000 | (y << 3) | (x)] = (c); /* hf=0, vf=0: normal */ + dst[0x20000 | (y << 3) | (x ^ 7)] = (c); /* hf=1, vf=0: horizontal flipped */ + dst[0x40000 | ((y ^ 7) << 3) | (x)] = (c); /* hf=0, vf=1: vertical flipped */ + dst[0x60000 | ((y ^ 7) << 3) | (x ^ 7)] = (c); /* hf=1, vf=1: horizontal & vertical flipped */ + } + } + } + bg_name_dirty[name] = 0; + } + bg_list_index = 0; +} + +void get_hscroll(int line, int shift, uint16 *scroll) +{ + switch(reg[11] & 3) + { + case 0: /* Full-screen */ + *scroll = *(uint16 *)&vram[hscb + shift]; + break; + + case 1: /* First 8 lines */ + *scroll = *(uint16 *)&vram[hscb + ((line & 7) << 2) + shift]; + break; + + case 2: /* Every 8 lines */ + *scroll = *(uint16 *)&vram[hscb + ((line & ~7) << 2) + shift]; + break; + + case 3: /* Every line */ + *scroll = *(uint16 *)&vram[hscb + (line << 2) + shift]; + break; + } + + *scroll &= 0x03FF; +} + +void window_clip(int line) +{ + /* Window size and invert flags */ + int hp = (reg[17] & 0x1F); + int hf = (reg[17] >> 7) & 1; + int vp = (reg[18] & 0x1F) << 3; + int vf = (reg[18] >> 7) & 1; + + /* Display size */ + int sw = (reg[12] & 1) ? 20 : 16; + + /* Clear clipping data */ + memset(&clip, 0, sizeof(clip)); + + /* Check if line falls within window range */ + if(vf == (line >= vp)) + { + /* Window takes up entire line */ + clip[1].right = sw; + clip[1].enable = 1; + } + else + { + /* Perform horizontal clipping; the results are applied in reverse + if the horizontal inversion flag is set */ + int a = hf; + int w = hf ^ 1; + + if(hp) + { + if(hp > sw) + { + /* Plane W takes up entire line */ + clip[w].right = sw; + clip[w].enable = 1; + } + else + { + /* Window takes left side, Plane A takes right side */ + clip[w].right = hp; + clip[a].left = hp; + clip[a].right = sw; + clip[0].enable = clip[1].enable = 1; + } + } + else + { + /* Plane A takes up entire line */ + clip[a].right = sw; + clip[a].enable = 1; + } + } +} + + +/*--------------------------------------------------------------------------*/ +/* Look-up table functions (handles priority between layers pixels) */ +/*--------------------------------------------------------------------------*/ + +/* Input (bx): d5-d0=color, d6=priority, d7=unused */ +/* Input (ax): d5-d0=color, d6=priority, d7=unused */ +/* Output: d5-d0=color, d6=priority, d7=unused */ +int make_lut_bg(int bx, int ax) +{ + int bf, bp, b; + int af, ap, a; + int x = 0; + int c; + + bf = (bx & 0x7F); + bp = (bx >> 6) & 1; + b = (bx & 0x0F); + + af = (ax & 0x7F); + ap = (ax >> 6) & 1; + a = (ax & 0x0F); + + c = (ap ? (a ? af : (b ? bf : x)) : \ + (bp ? (b ? bf : (a ? af : x)) : \ + ( (a ? af : (b ? bf : x)) ))); + + /* Strip palette bits from transparent pixels */ + if((c & 0x0F) == 0x00) c &= 0xC0; + + return (c); +} + + +/* Input (bx): d5-d0=color, d6=priority, d7=sprite pixel marker */ +/* Input (sx): d5-d0=color, d6=priority, d7=unused */ +/* Output: d5-d0=color, d6=zero, d7=sprite pixel marker */ +int make_lut_obj(int bx, int sx) +{ + int bf, bp, bs, b; + int sf, sp, s; + int c; + + bf = (bx & 0x3F); + bs = (bx >> 7) & 1; + bp = (bx >> 6) & 1; + b = (bx & 0x0F); + + sf = (sx & 0x3F); + sp = (sx >> 6) & 1; + s = (sx & 0x0F); + + if(s == 0) return bx; + + if(bs) + { + c = bf; /* previous sprite has higher priority */ + } + else + { + c = (sp ? (s ? sf : bf) : \ + (bp ? (b ? bf : (s ? sf : bf)) : \ + (s ? sf : bf) )); + } + + /* Strip palette bits from transparent pixels */ + if((c & 0x0F) == 0x00) c &= 0xC0; + + return (c | 0x80); +} + + +/* Input (bx): d5-d0=color, d6=priority, d7=unused */ +/* Input (sx): d5-d0=color, d6=priority, d7=unused */ +/* Output: d5-d0=color, d6=priority, d7=intensity select (half/normal) */ +int make_lut_bg_ste(int bx, int ax) +{ + int bf, bp, b; + int af, ap, a; + int gi; + int x = 0; + int c; + + bf = (bx & 0x7F); + bp = (bx >> 6) & 1; + b = (bx & 0x0F); + + af = (ax & 0x7F); + ap = (ax >> 6) & 1; + a = (ax & 0x0F); + + gi = (ap | bp) ? 0x80 : 0x00; + + c = (ap ? (a ? af : (b ? bf : x)) : + (bp ? (b ? bf : (a ? af : x)) : ((a ? af : (b ? bf : x))))); + + c |= gi; + + /* Strip palette bits from transparent pixels */ + if((c & 0x0F) == 0x00) c &= 0xC0; + + return (c); +} + + +/* Input (bx): d5-d0=color, d6=priority, d7=sprite pixel marker */ +/* Input (sx): d5-d0=color, d6=priority, d7=unused */ +/* Output: d5-d0=color, d6=priority, d7=sprite pixel marker */ +int make_lut_obj_ste(int bx, int sx) +{ + int bf, bs; + int sf; + int c; + + bf = (bx & 0x7F); + bs = (bx >> 7) & 1; + sf = (sx & 0x7F); + + if((sx & 0x0F) == 0) return bx; + + c = (bs) ? bf : sf; + + /* Strip palette bits from transparent pixels */ + if((c & 0x0F) == 0x00) c &= 0xC0; + + return (c | 0x80); +} + + +/* Input (bx): d5-d0=color, d6=priority, d7=intensity (half/normal) */ +/* Input (sx): d5-d0=color, d6=priority, d7=sprite marker */ +/* Output: d5-d0=color, d6=intensity (half/normal), d7=(double/invalid) */ +int make_lut_bgobj_ste(int bx, int sx) +{ + int c; + + int bf = (bx & 0x3F); + int bp = (bx >> 6) & 1; + int bi = (bx & 0x80) ? 0x40 : 0x00; + int b = (bx & 0x0F); + + int sf = (sx & 0x3F); + int sp = (sx >> 6) & 1; + int si = (sx & 0x40); + int s = (sx & 0x0F); + + if(bi & 0x40) si |= 0x40; + + if(sp) + { + if(s) + { + if((sf & 0x3E) == 0x3E) + { + if(sf & 1) + { + c = (bf | 0x00); + } + else + { + c = (bx & 0x80) ? (bf | 0x80) : (bf | 0x40); + } + } + else + { + if(sf == 0x0E || sf == 0x1E || sf == 0x2E) + { + c = (sf | 0x40); + } + else + { + c = (sf | si); + } + } + } + else + { + c = (bf | bi); + } + } + else + { + if(bp) + { + if(b) + { + c = (bf | bi); + } + else + { + if(s) + { + if((sf & 0x3E) == 0x3E) + { + if(sf & 1) + { + c = (bf | 0x00); + } + else + { + c = (bx & 0x80) ? (bf | 0x80) : (bf | 0x40); + } + } + else + { + if(sf == 0x0E || sf == 0x1E || sf == 0x2E) + { + c = (sf | 0x40); + } + else + { + c = (sf | si); + } + } + } + else + { + c = (bf | bi); + } + } + } + else + { + if(s) + { + if((sf & 0x3E) == 0x3E) + { + if(sf & 1) + { + c = (bf | 0x00); + } + else + { + c = (bx & 0x80) ? (bf | 0x80) : (bf | 0x40); + } + } + else + { + if(sf == 0x0E || sf == 0x1E || sf == 0x2E) + { + c = (sf | 0x40); + } + else + { + c = (sf | si); + } + } + } + else + { + c = (bf | bi); + } + } + } + + if((c & 0x0f) == 0x00) c &= 0xC0; + + return (c); +} + +/*--------------------------------------------------------------------------*/ +/* Remap functions */ +/*--------------------------------------------------------------------------*/ + +void remap_8(uint8 *src, uint8 *dst, uint8 *table, int length) +{ + int count; + for(count = 0; count < length; count += 1) + { + *dst++ = table[*src++]; + } +} + +void remap_16(uint8 *src, uint16 *dst, uint16 *table, int length) +{ + int count; + for(count = 0; count < length; count += 1) + { + *dst++ = table[*src++]; + } +} + +void remap_32(uint8 *src, uint32 *dst, uint32 *table, int length) +{ + int count; + for(count = 0; count < length; count += 1) + { + *dst++ = table[*src++]; + } +} + +/*--------------------------------------------------------------------------*/ +/* Merge functions */ +/*--------------------------------------------------------------------------*/ + +void merge(uint8 *srca, uint8 *srcb, uint8 *dst, uint8 *table, int width) +{ + int i; + for(i = 0; i < width; i += 1) + { + uint8 a = srca[i]; + uint8 b = srcb[i]; + uint8 c = table[(b << 8) | (a)]; + dst[i] = c; + } +} + +/*--------------------------------------------------------------------------*/ +/* Color update functions */ +/*--------------------------------------------------------------------------*/ + +void color_update_8(int index, uint16 data) +{ + if(reg[12] & 8) + { + pixel_8[0x00 | index] = pixel_8_lut[0][data]; + pixel_8[0x40 | index] = pixel_8_lut[1][data]; + pixel_8[0x80 | index] = pixel_8_lut[2][data]; + } + else + { + uint8 temp = pixel_8_lut[1][data]; + pixel_8[0x00 | index] = temp; + pixel_8[0x40 | index] = temp; + pixel_8[0x80 | index] = temp; + } +} + +void color_update_15(int index, uint16 data) +{ + if(reg[12] & 8) + { + pixel_15[0x00 | index] = pixel_15_lut[0][data]; + pixel_15[0x40 | index] = pixel_15_lut[1][data]; + pixel_15[0x80 | index] = pixel_15_lut[2][data]; + } + else + { + uint16 temp = pixel_15_lut[1][data]; + pixel_15[0x00 | index] = temp; + pixel_15[0x40 | index] = temp; + pixel_15[0x80 | index] = temp; + } +} + +void color_update_16(int index, uint16 data) +{ + if(reg[12] & 8) + { + pixel_16[0x00 | index] = pixel_16_lut[0][data]; + pixel_16[0x40 | index] = pixel_16_lut[1][data]; + pixel_16[0x80 | index] = pixel_16_lut[2][data]; + } + else + { + uint16 temp = pixel_16_lut[1][data]; + pixel_16[0x00 | index] = temp; + pixel_16[0x40 | index] = temp; + pixel_16[0x80 | index] = temp; + } +} + +void color_update_32(int index, uint16 data) +{ + if(reg[12] & 8) + { + pixel_32[0x00 | index] = pixel_32_lut[0][data]; + pixel_32[0x40 | index] = pixel_32_lut[1][data]; + pixel_32[0x80 | index] = pixel_32_lut[2][data]; + } + else + { + uint32 temp = pixel_32_lut[1][data]; + pixel_32[0x00 | index] = temp; + pixel_32[0x40 | index] = temp; + pixel_32[0x80 | index] = temp; + } +} + +/*--------------------------------------------------------------------------*/ +/* Object render functions */ +/*--------------------------------------------------------------------------*/ + +void parse_satb(int line) +{ + static uint8 sizetab[] = {8, 16, 24, 32}; + uint8 link = 0; + uint16 *p, *q; + uint16 ypos; + uint8 size; + int count; + int height; + + int limit = (reg[12] & 1) ? 20 : 16; + int total = (reg[12] & 1) ? 80 : 64; + + object_index_count = 0; + + for(count = 0; count < total; count += 1) + { + q = (uint16 *) &sat[link << 3]; + + ypos = q[0]; + if(im2_flag) ypos = (ypos >> 1) & 0x1FF; + else ypos &= 0x1FF; + + size = q[1] >> 8; + height = sizetab[size & 3]; + + if((line >= ypos) && (line < (ypos + height))) + { + /* sprite limit (max. 16 or 20 sprites displayed per line) */ + if(object_index_count == limit) + { + if(vint_pending == 0) status |= 0x40; + return; + } + + // using xpos from internal satb stops sprite x + // scrolling in bloodlin.bin, + // but this seems to go against the test prog + p = (uint16 *) &vram[satb + (link << 3)]; + object_info[object_index_count].ypos = q[0]; + object_info[object_index_count].xpos = p[3]; + object_info[object_index_count].attr = p[2]; + object_info[object_index_count].size = size; + object_info[object_index_count].index = count; + object_index_count += 1; + } + + link = q[1] & 0x7F; + if(link == 0) break; + } +} + +void render_obj(int line, uint8 *buf, uint8 *table) +{ + uint16 ypos; + uint16 attr; + uint16 xpos; + uint8 sizetab[] = {8, 16, 24, 32}; + uint8 size; + uint8 *src; + + int count; + int pixelcount = 0; + int width; + int height; + int v_line; + int column; + int sol_flag = 0; + int left = 0x80; + int right = 0x80 + bitmap.viewport.w; + int i; + + uint8 *s, *lb; + uint16 name, index; + uint8 palette; + + int attr_mask, nt_row; + + for(count = 0; count < object_index_count; count += 1) + { + xpos = object_info[count].xpos; + xpos &= 0x1ff; + + /* sprite masking */ + if(xpos != 0) sol_flag = 1; + else if(xpos == 0 && sol_flag) return; + + size = object_info[count].size & 0x0f; + width = sizetab[(size >> 2) & 3]; + + /* update pixel count (off-screen sprites included) */ + pixelcount += width; + + if(((xpos + width) >= left) && (xpos < right)) + { + ypos = object_info[count].ypos; + ypos &= 0x1ff; + attr = object_info[count].attr; + attr_mask = (attr & 0x1800); + + height = sizetab[size & 3]; + palette = (attr >> 9) & 0x70; + + v_line = (line - ypos); + nt_row = (v_line >> 3) & 3; + v_line = (v_line & 7) << 3; + + name = (attr & 0x07FF); + s = &name_lut[((attr >> 3) & 0x300) | (size << 4) | (nt_row << 2)]; + + lb = (uint8 *)&buf[0x20 + (xpos - 0x80)]; + + /* number of tiles to draw */ + width >>= 3; + + for(column = 0; column < width; column += 1, lb+=8) + { + index = attr_mask | ((name + s[column]) & 0x07FF); + src = &bg_pattern_cache[(index << 6) | (v_line)]; + DRAW_SPRITE_TILE; + } + + } + + /* sprite limit (256 or 320 pixels) */ + if (pixelcount >= bitmap.viewport.w) return; + + } +} + +void render_obj_im2(int line, uint8 *buf, uint8 *table) +{ + uint16 ypos; + uint16 attr; + uint16 xpos; + uint8 sizetab[] = {8, 16, 24, 32}; + uint8 size; + uint8 *src; + + int count; + int pixelcount = 0; + int width; + int height; + int v_line; + int column; + int sol_flag = 0; + int left = 0x80; + int right = 0x80 + bitmap.viewport.w; + int i; + + uint8 *s, *lb; + uint16 name, index; + uint8 palette; + uint32 offs; + + int attr_mask, nt_row; + + for(count = 0; count < object_index_count; count += 1) + { + xpos = object_info[count].xpos; + xpos &= 0x1ff; + + /* sprite masking */ + if(xpos != 0) sol_flag = 1; + else if(xpos == 0 && sol_flag) return; + + size = object_info[count].size & 0x0f; + width = sizetab[(size >> 2) & 3]; + + /* update pixel count (off-screen sprites included) */ + pixelcount += width; + + if(((xpos + width) >= left) && (xpos < right)) + { + ypos = object_info[count].ypos; + ypos = (ypos >> 1) & 0x1ff; + attr = object_info[count].attr; + attr_mask = (attr & 0x1800); + + height = sizetab[size & 3]; + palette = (attr >> 9) & 0x70; + + v_line = (line - ypos); + nt_row = (v_line >> 3) & 3; + v_line = (((v_line & 7) << 1) | ((status >> 4) & 1)) << 3; + + name = (attr & 0x03FF); + s = &name_lut[((attr >> 3) & 0x300) | (size << 4) | (nt_row << 2)]; + + lb = (uint8 *)&buf[0x20 + (xpos - 0x80)]; + + /* number of tiles to draw */ + width >>= 3; + + for(column = 0; column < width; column += 1, lb+=8) + { + index = (name + s[column]) & 0x3ff; + offs = index << 7 | attr_mask << 6 | v_line; + if(attr & 0x1000) offs ^= 0x40; + src = &bg_pattern_cache[offs]; + DRAW_SPRITE_TILE; + } + } + + /* sprite limit (256 or 320 pixels) */ + if (pixelcount >= bitmap.viewport.w) return; + } +} + diff --git a/ genplus-gx/source/render.h b/ genplus-gx/source/render.h new file mode 100644 index 0000000..575c421 --- /dev/null +++ b/ genplus-gx/source/render.h @@ -0,0 +1,53 @@ + +#ifndef _RENDER_H_ +#define _RENDER_H_ + + +/* Look-up pixel table information */ +#define LUT_MAX (5) +#define LUT_SIZE (0x10000) + +/* Clip structure */ +typedef struct +{ + uint8 left; + uint8 right; + uint8 enable; +}clip_t; + +/* Function prototypes */ +int render_init(void); +void render_reset(void); +void render_shutdown(void); +void render_line(int line); +void render_obj(int line, uint8 *buf, uint8 *table); +void render_obj_im2(int line, uint8 *buf, uint8 *table); +void render_ntw(int line, uint8 *buf); +void render_ntw_im2(int line, uint8 *buf); +void render_ntx(int which, int line, uint8 *buf); +void render_ntx_im2(int which, int line, uint8 *buf); +void render_ntx_vs(int which, int line, uint8 *buf); +void update_bg_pattern_cache(void); +void get_hscroll(int line, int shift, uint16 *scroll); +void window_clip(int line); +int make_lut_bg(int bx, int ax); +int make_lut_obj(int bx, int sx); +int make_lut_bg_ste(int bx, int ax); +int make_lut_obj_ste(int bx, int sx); +int make_lut_bgobj_ste(int bx, int sx); +void remap_8(uint8 *src, uint8 *dst, uint8 *table, int length); +void remap_16(uint8 *src, uint16 *dst, uint16 *table, int length); +void remap_32(uint8 *src, uint32 *dst, uint32 *table, int length); +void merge(uint8 *srca, uint8 *srcb, uint8 *dst, uint8 *table, int width); +void color_update_8(int index, uint16 data); +void color_update_15(int index, uint16 data); +void color_update_16(int index, uint16 data); +void color_update_32(int index, uint16 data); +void make_name_lut(void); +void parse_satb(int line); + +/* global variables */ +extern uint8 object_index_count; + +#endif /* _RENDER_H_ */ + diff --git a/ genplus-gx/source/shared.h b/ genplus-gx/source/shared.h new file mode 100644 index 0000000..55035a4 --- /dev/null +++ b/ genplus-gx/source/shared.h @@ -0,0 +1,43 @@ +#ifndef _SHARED_H_ +#define _SHARED_H_ + + +#include +#include +#include + +#include "types.h" +#include "macros.h" +#include "m68k.h" +#include "z80.h" +#include "genesis.h" +#include "vdp.h" +#include "render.h" +#include "mem68k.h" +#include "memz80.h" +#include "membnk.h" +#include "memvdp.h" +#include "system.h" +#ifndef NGC +#include "unzip.h" +#include "fileio.h" +#include "loadrom.h" +#endif +#include "io.h" +#include "input.h" +#include "sound.h" +#include "fm.h" +#include "sn76496.h" +#include "osd.h" +#include "state.h" +#include "sram.h" +#include "eeprom.h" +#include "ssf2tnc.h" +#include "sn76489.h" +#include "ym2612.h" + +extern uint8 FM_GENS; +extern uint8 PSG_MAME; + +#endif /* _SHARED_H_ */ + diff --git a/ genplus-gx/source/sound/fm.c b/ genplus-gx/source/sound/fm.c new file mode 100644 index 0000000..eaabaa5 --- /dev/null +++ b/ genplus-gx/source/sound/fm.c @@ -0,0 +1,4745 @@ +#define YM2610B_WARNING + +/* +** +** File: fm.c -- software implementation of Yamaha FM sound generator +** +** Copyright (C) 2001, 2002, 2003 Jarek Burczynski (bujar at mame dot net) +** Copyright (C) 1998 Tatsuyuki Satoh , MultiArcadeMachineEmulator development +** +** Version 1.4 (final beta) +** +*/ + +/* +** History: +** +** 03-08-2003 Jarek Burczynski: +** - fixed YM2608 initial values (after the reset) +** - fixed flag and irqmask handling (YM2608) +** - fixed BUFRDY flag handling (YM2608) +** +** 14-06-2003 Jarek Burczynski: +** - implemented all of the YM2608 status register flags +** - implemented support for external memory read/write via YM2608 +** - implemented support for deltat memory limit register in YM2608 emulation +** +** 22-05-2003 Jarek Burczynski: +** - fixed LFO PM calculations (copy&paste bugfix) +** +** 08-05-2003 Jarek Burczynski: +** - fixed SSG support +** +** 22-04-2003 Jarek Burczynski: +** - implemented 100% correct LFO generator (verified on real YM2610 and YM2608) +** +** 15-04-2003 Jarek Burczynski: +** - added support for YM2608's register 0x110 - status mask +** +** 01-12-2002 Jarek Burczynski: +** - fixed register addressing in YM2608, YM2610, YM2610B chips. (verified on real YM2608) +** The addressing patch used for early Neo-Geo games can be removed now. +** +** 26-11-2002 Jarek Burczynski, Nicola Salmoria: +** - recreated YM2608 ADPCM ROM using data from real YM2608's output which leads to: +** - added emulation of YM2608 drums. +** - output of YM2608 is two times lower now - same as YM2610 (verified on real YM2608) +** +** 16-08-2002 Jarek Burczynski: +** - binary exact Envelope Generator (verified on real YM2203); +** identical to YM2151 +** - corrected 'off by one' error in feedback calculations (when feedback is off) +** - corrected connection (algorithm) calculation (verified on real YM2203 and YM2610) +** +** 18-12-2001 Jarek Burczynski: +** - added SSG-EG support (verified on real YM2203) +** +** 12-08-2001 Jarek Burczynski: +** - corrected sin_tab and tl_tab data (verified on real chip) +** - corrected feedback calculations (verified on real chip) +** - corrected phase generator calculations (verified on real chip) +** - corrected envelope generator calculations (verified on real chip) +** - corrected FM volume level (YM2610 and YM2610B). +** - changed YMxxxUpdateOne() functions (YM2203, YM2608, YM2610, YM2610B, YM2612) : +** this was needed to calculate YM2610 FM channels output correctly. +** (Each FM channel is calculated as in other chips, but the output of the channel +** gets shifted right by one *before* sending to accumulator. That was impossible to do +** with previous implementation). +** +** 23-07-2001 Jarek Burczynski, Nicola Salmoria: +** - corrected YM2610 ADPCM type A algorithm and tables (verified on real chip) +** +** 11-06-2001 Jarek Burczynski: +** - corrected end of sample bug in ADPCMA_calc_cha(). +** Real YM2610 checks for equality between current and end addresses (only 20 LSB bits). +** +** 08-12-98 hiro-shi: +** rename ADPCMA -> ADPCMB, ADPCMB -> ADPCMA +** move ROM limit check.(CALC_CH? -> 2610Write1/2) +** test program (ADPCMB_TEST) +** move ADPCM A/B end check. +** ADPCMB repeat flag(no check) +** change ADPCM volume rate (8->16) (32->48). +** +** 09-12-98 hiro-shi: +** change ADPCM volume. (8->16, 48->64) +** replace ym2610 ch0/3 (YM-2610B) +** change ADPCM_SHIFT (10->8) missing bank change 0x4000-0xffff. +** add ADPCM_SHIFT_MASK +** change ADPCMA_DECODE_MIN/MAX. +*/ + + + + +/************************************************************************/ +/* comment of hiro-shi(Hiromitsu Shioya) */ +/* YM2610(B) = OPN-B */ +/* YM2610 : PSG:3ch FM:4ch ADPCM(18.5KHz):6ch DeltaT ADPCM:1ch */ +/* YM2610B : PSG:3ch FM:6ch ADPCM(18.5KHz):6ch DeltaT ADPCM:1ch */ +/************************************************************************/ + +#include +#include +#include +#include +#include + +#if 0 +#ifndef __RAINE__ +#include "sndintrf.h" /* use M.A.M.E. */ +#else +#include "deftypes.h" /* use RAINE */ +#include "support.h" /* use RAINE */ +#endif +#include "ay8910.h" +#endif + +#include "fm.h" + + +/* include external DELTA-T unit (when needed) */ +#if (BUILD_YM2608||BUILD_YM2610||BUILD_YM2610B) + #include "ymdeltat.h" +#endif + +/* shared function building option */ +#define BUILD_OPN (BUILD_YM2203||BUILD_YM2608||BUILD_YM2610||BUILD_YM2610B||BUILD_YM2612) +#define BUILD_OPN_PRESCALER (BUILD_YM2203||BUILD_YM2608) + + +/* globals */ +#define TYPE_SSG 0x01 /* SSG support */ +#define TYPE_LFOPAN 0x02 /* OPN type LFO and PAN */ +#define TYPE_6CH 0x04 /* FM 6CH / 3CH */ +#define TYPE_DAC 0x08 /* YM2612's DAC device */ +#define TYPE_ADPCM 0x10 /* two ADPCM units */ + + +#define TYPE_YM2203 (TYPE_SSG) +#define TYPE_YM2608 (TYPE_SSG |TYPE_LFOPAN |TYPE_6CH |TYPE_ADPCM) +#define TYPE_YM2610 (TYPE_SSG |TYPE_LFOPAN |TYPE_6CH |TYPE_ADPCM) +#define TYPE_YM2612 (TYPE_DAC |TYPE_LFOPAN |TYPE_6CH) + + + +#define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */ +#define EG_SH 16 /* 16.16 fixed point (envelope generator timing) */ +#define LFO_SH 24 /* 8.24 fixed point (LFO calculations) */ +#define TIMER_SH 16 /* 16.16 fixed point (timers calculations) */ + +#define FREQ_MASK ((1<>3) + +/* sin waveform table in 'decibel' scale */ +static unsigned int sin_tab[SIN_LEN]; + +/* sustain level table (3dB per step) */ +/* bit0, bit1, bit2, bit3, bit4, bit5, bit6 */ +/* 1, 2, 4, 8, 16, 32, 64 (value)*/ +/* 0.75, 1.5, 3, 6, 12, 24, 48 (dB)*/ + +/* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,93 (dB)*/ +#define SC(db) (UINT32) ( db * (4.0/ENV_STEP) ) +static const UINT32 sl_table[16]={ + SC( 0),SC( 1),SC( 2),SC(3 ),SC(4 ),SC(5 ),SC(6 ),SC( 7), + SC( 8),SC( 9),SC(10),SC(11),SC(12),SC(13),SC(14),SC(31) +}; +#undef SC + + +#define RATE_STEPS (8) +static const UINT8 eg_inc[19*RATE_STEPS]={ + +/*cycle:0 1 2 3 4 5 6 7*/ + +/* 0 */ 0,1, 0,1, 0,1, 0,1, /* rates 00..11 0 (increment by 0 or 1) */ +/* 1 */ 0,1, 0,1, 1,1, 0,1, /* rates 00..11 1 */ +/* 2 */ 0,1, 1,1, 0,1, 1,1, /* rates 00..11 2 */ +/* 3 */ 0,1, 1,1, 1,1, 1,1, /* rates 00..11 3 */ + +/* 4 */ 1,1, 1,1, 1,1, 1,1, /* rate 12 0 (increment by 1) */ +/* 5 */ 1,1, 1,2, 1,1, 1,2, /* rate 12 1 */ +/* 6 */ 1,2, 1,2, 1,2, 1,2, /* rate 12 2 */ +/* 7 */ 1,2, 2,2, 1,2, 2,2, /* rate 12 3 */ + +/* 8 */ 2,2, 2,2, 2,2, 2,2, /* rate 13 0 (increment by 2) */ +/* 9 */ 2,2, 2,4, 2,2, 2,4, /* rate 13 1 */ +/*10 */ 2,4, 2,4, 2,4, 2,4, /* rate 13 2 */ +/*11 */ 2,4, 4,4, 2,4, 4,4, /* rate 13 3 */ + +/*12 */ 4,4, 4,4, 4,4, 4,4, /* rate 14 0 (increment by 4) */ +/*13 */ 4,4, 4,8, 4,4, 4,8, /* rate 14 1 */ +/*14 */ 4,8, 4,8, 4,8, 4,8, /* rate 14 2 */ +/*15 */ 4,8, 8,8, 4,8, 8,8, /* rate 14 3 */ + +/*16 */ 8,8, 8,8, 8,8, 8,8, /* rates 15 0, 15 1, 15 2, 15 3 (increment by 8) */ +/*17 */ 16,16,16,16,16,16,16,16, /* rates 15 2, 15 3 for attack */ +/*18 */ 0,0, 0,0, 0,0, 0,0, /* infinity rates for attack and decay(s) */ +}; + + +#define O(a) (a*RATE_STEPS) + +/*note that there is no O(17) in this table - it's directly in the code */ +static const UINT8 eg_rate_select[32+64+32]={ /* Envelope Generator rates (32 + 64 rates + 32 RKS) */ +/* 32 infinite time rates */ +O(18),O(18),O(18),O(18),O(18),O(18),O(18),O(18), +O(18),O(18),O(18),O(18),O(18),O(18),O(18),O(18), +O(18),O(18),O(18),O(18),O(18),O(18),O(18),O(18), +O(18),O(18),O(18),O(18),O(18),O(18),O(18),O(18), + +/* rates 00-11 */ +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), +O( 0),O( 1),O( 2),O( 3), + +/* rate 12 */ +O( 4),O( 5),O( 6),O( 7), + +/* rate 13 */ +O( 8),O( 9),O(10),O(11), + +/* rate 14 */ +O(12),O(13),O(14),O(15), + +/* rate 15 */ +O(16),O(16),O(16),O(16), + +/* 32 dummy rates (same as 15 3) */ +O(16),O(16),O(16),O(16),O(16),O(16),O(16),O(16), +O(16),O(16),O(16),O(16),O(16),O(16),O(16),O(16), +O(16),O(16),O(16),O(16),O(16),O(16),O(16),O(16), +O(16),O(16),O(16),O(16),O(16),O(16),O(16),O(16) + +}; +#undef O + +/*rate 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15*/ +/*shift 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0 */ +/*mask 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0, 0, 0, 0, 0 */ + +#define O(a) (a*1) +static const UINT8 eg_rate_shift[32+64+32]={ /* Envelope Generator counter shifts (32 + 64 rates + 32 RKS) */ +/* 32 infinite time rates */ +O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), +O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), +O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), +O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), + +/* rates 00-11 */ +O(11),O(11),O(11),O(11), +O(10),O(10),O(10),O(10), +O( 9),O( 9),O( 9),O( 9), +O( 8),O( 8),O( 8),O( 8), +O( 7),O( 7),O( 7),O( 7), +O( 6),O( 6),O( 6),O( 6), +O( 5),O( 5),O( 5),O( 5), +O( 4),O( 4),O( 4),O( 4), +O( 3),O( 3),O( 3),O( 3), +O( 2),O( 2),O( 2),O( 2), +O( 1),O( 1),O( 1),O( 1), +O( 0),O( 0),O( 0),O( 0), + +/* rate 12 */ +O( 0),O( 0),O( 0),O( 0), + +/* rate 13 */ +O( 0),O( 0),O( 0),O( 0), + +/* rate 14 */ +O( 0),O( 0),O( 0),O( 0), + +/* rate 15 */ +O( 0),O( 0),O( 0),O( 0), + +/* 32 dummy rates (same as 15 3) */ +O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0), +O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0), +O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0), +O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0) + +}; +#undef O + +static const UINT8 dt_tab[4 * 32]={ +/* this is YM2151 and YM2612 phase increment data (in 10.10 fixed point format)*/ +/* FD=0 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* FD=1 */ + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 8, 8, 8, 8, +/* FD=2 */ + 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, + 5, 6, 6, 7, 8, 8, 9,10,11,12,13,14,16,16,16,16, +/* FD=3 */ + 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, + 8 , 8, 9,10,11,12,13,14,16,17,19,20,22,22,22,22 +}; + + +/* OPN key frequency number -> key code follow table */ +/* fnum higher 4bit -> keycode lower 2bit */ +static const UINT8 opn_fktable[16] = {0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3}; + + +/* 8 LFO speed parameters */ +/* each value represents number of samples that one LFO level will last for */ +static const UINT32 lfo_samples_per_step[8] = {108, 77, 71, 67, 62, 44, 8, 5}; + + + +/*There are 4 different LFO AM depths available, they are: + 0 dB, 1.4 dB, 5.9 dB, 11.8 dB + Here is how it is generated (in EG steps): + + 11.8 dB = 0, 2, 4, 6, 8, 10,12,14,16...126,126,124,122,120,118,....4,2,0 + 5.9 dB = 0, 1, 2, 3, 4, 5, 6, 7, 8....63, 63, 62, 61, 60, 59,.....2,1,0 + 1.4 dB = 0, 0, 0, 0, 1, 1, 1, 1, 2,...15, 15, 15, 15, 14, 14,.....0,0,0 + + (1.4 dB is loosing precision as you can see) + + It's implemented as generator from 0..126 with step 2 then a shift + right N times, where N is: + 8 for 0 dB + 3 for 1.4 dB + 1 for 5.9 dB + 0 for 11.8 dB +*/ +static const UINT8 lfo_ams_depth_shift[4] = {8, 3, 1, 0}; + + + +/*There are 8 different LFO PM depths available, they are: + 0, 3.4, 6.7, 10, 14, 20, 40, 80 (cents) + + Modulation level at each depth depends on F-NUMBER bits: 4,5,6,7,8,9,10 + (bits 8,9,10 = FNUM MSB from OCT/FNUM register) + + Here we store only first quarter (positive one) of full waveform. + Full table (lfo_pm_table) containing all 128 waveforms is build + at run (init) time. + + One value in table below represents 4 (four) basic LFO steps + (1 PM step = 4 AM steps). + + For example: + at LFO SPEED=0 (which is 108 samples per basic LFO step) + one value from "lfo_pm_output" table lasts for 432 consecutive + samples (4*108=432) and one full LFO waveform cycle lasts for 13824 + samples (32*432=13824; 32 because we store only a quarter of whole + waveform in the table below) +*/ +static const UINT8 lfo_pm_output[7*8][8]={ /* 7 bits meaningful (of F-NUMBER), 8 LFO output levels per one depth (out of 32), 8 LFO depths */ +/* FNUM BIT 4: 000 0001xxxx */ +/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 1 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 2 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 3 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 4 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 5 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 6 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 7 */ {0, 0, 0, 0, 1, 1, 1, 1}, + +/* FNUM BIT 5: 000 0010xxxx */ +/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 1 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 2 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 3 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 4 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 5 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 6 */ {0, 0, 0, 0, 1, 1, 1, 1}, +/* DEPTH 7 */ {0, 0, 1, 1, 2, 2, 2, 3}, + +/* FNUM BIT 6: 000 0100xxxx */ +/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 1 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 2 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 3 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 4 */ {0, 0, 0, 0, 0, 0, 0, 1}, +/* DEPTH 5 */ {0, 0, 0, 0, 1, 1, 1, 1}, +/* DEPTH 6 */ {0, 0, 1, 1, 2, 2, 2, 3}, +/* DEPTH 7 */ {0, 0, 2, 3, 4, 4, 5, 6}, + +/* FNUM BIT 7: 000 1000xxxx */ +/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 1 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 2 */ {0, 0, 0, 0, 0, 0, 1, 1}, +/* DEPTH 3 */ {0, 0, 0, 0, 1, 1, 1, 1}, +/* DEPTH 4 */ {0, 0, 0, 1, 1, 1, 1, 2}, +/* DEPTH 5 */ {0, 0, 1, 1, 2, 2, 2, 3}, +/* DEPTH 6 */ {0, 0, 2, 3, 4, 4, 5, 6}, +/* DEPTH 7 */ {0, 0, 4, 6, 8, 8, 0xa, 0xc}, + +/* FNUM BIT 8: 001 0000xxxx */ +/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 1 */ {0, 0, 0, 0, 1, 1, 1, 1}, +/* DEPTH 2 */ {0, 0, 0, 1, 1, 1, 2, 2}, +/* DEPTH 3 */ {0, 0, 1, 1, 2, 2, 3, 3}, +/* DEPTH 4 */ {0, 0, 1, 2, 2, 2, 3, 4}, +/* DEPTH 5 */ {0, 0, 2, 3, 4, 4, 5, 6}, +/* DEPTH 6 */ {0, 0, 4, 6, 8, 8, 0xa, 0xc}, +/* DEPTH 7 */ {0, 0, 8, 0xc,0x10,0x10,0x14,0x18}, + +/* FNUM BIT 9: 010 0000xxxx */ +/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 1 */ {0, 0, 0, 0, 2, 2, 2, 2}, +/* DEPTH 2 */ {0, 0, 0, 2, 2, 2, 4, 4}, +/* DEPTH 3 */ {0, 0, 2, 2, 4, 4, 6, 6}, +/* DEPTH 4 */ {0, 0, 2, 4, 4, 4, 6, 8}, +/* DEPTH 5 */ {0, 0, 4, 6, 8, 8, 0xa, 0xc}, +/* DEPTH 6 */ {0, 0, 8, 0xc,0x10,0x10,0x14,0x18}, +/* DEPTH 7 */ {0, 0,0x10,0x18,0x20,0x20,0x28,0x30}, + +/* FNUM BIT10: 100 0000xxxx */ +/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, +/* DEPTH 1 */ {0, 0, 0, 0, 4, 4, 4, 4}, +/* DEPTH 2 */ {0, 0, 0, 4, 4, 4, 8, 8}, +/* DEPTH 3 */ {0, 0, 4, 4, 8, 8, 0xc, 0xc}, +/* DEPTH 4 */ {0, 0, 4, 8, 8, 8, 0xc,0x10}, +/* DEPTH 5 */ {0, 0, 8, 0xc,0x10,0x10,0x14,0x18}, +/* DEPTH 6 */ {0, 0,0x10,0x18,0x20,0x20,0x28,0x30}, +/* DEPTH 7 */ {0, 0,0x20,0x30,0x40,0x40,0x50,0x60}, + +}; + +/* all 128 LFO PM waveforms */ +static INT32 lfo_pm_table[128*8*32]; /* 128 combinations of 7 bits meaningful (of F-NUMBER), 8 LFO depths, 32 LFO output levels per one depth */ + + + + + +/* register number to channel number , slot offset */ +#define OPN_CHAN(N) (N&3) +#define OPN_SLOT(N) ((N>>2)&3) + +/* slot number */ +#define SLOT1 0 +#define SLOT2 2 +#define SLOT3 1 +#define SLOT4 3 + +/* bit0 = Right enable , bit1 = Left enable */ +#define OUTD_RIGHT 1 +#define OUTD_LEFT 2 +#define OUTD_CENTER 3 + + +/* save output as raw 16-bit sample */ +/* #define SAVE_SAMPLE */ + +#ifdef SAVE_SAMPLE +static FILE *sample[1]; + #if 1 /*save to MONO file */ + #define SAVE_ALL_CHANNELS \ + { signed int pom = lt; \ + fputc((unsigned short)pom&0xff,sample[0]); \ + fputc(((unsigned short)pom>>8)&0xff,sample[0]); \ + } + #else /*save to STEREO file */ + #define SAVE_ALL_CHANNELS \ + { signed int pom = lt; \ + fputc((unsigned short)pom&0xff,sample[0]); \ + fputc(((unsigned short)pom>>8)&0xff,sample[0]); \ + pom = rt; \ + fputc((unsigned short)pom&0xff,sample[0]); \ + fputc(((unsigned short)pom>>8)&0xff,sample[0]); \ + } + #endif +#endif + + +/* struct describing a single operator (SLOT) */ +typedef struct +{ + INT32 *DT; /* detune :dt_tab[DT] */ + UINT8 KSR; /* key scale rate :3-KSR */ + UINT32 ar; /* attack rate */ + UINT32 d1r; /* decay rate */ + UINT32 d2r; /* sustain rate */ + UINT32 rr; /* release rate */ + UINT8 ksr; /* key scale rate :kcode>>(3-KSR) */ + UINT32 mul; /* multiple :ML_TABLE[ML] */ + + /* Phase Generator */ + UINT32 phase; /* phase counter */ + UINT32 Incr; /* phase step */ + + /* Envelope Generator */ + UINT8 state; /* phase type */ + UINT32 tl; /* total level: TL << 3 */ + INT32 volume; /* envelope counter */ + UINT32 sl; /* sustain level:sl_table[SL] */ + UINT32 vol_out; /* current output from EG circuit (without AM from LFO) */ + + UINT8 eg_sh_ar; /* (attack state) */ + UINT8 eg_sel_ar; /* (attack state) */ + UINT8 eg_sh_d1r; /* (decay state) */ + UINT8 eg_sel_d1r; /* (decay state) */ + UINT8 eg_sh_d2r; /* (sustain state) */ + UINT8 eg_sel_d2r; /* (sustain state) */ + UINT8 eg_sh_rr; /* (release state) */ + UINT8 eg_sel_rr; /* (release state) */ + + UINT8 ssg; /* SSG-EG waveform */ + UINT8 ssgn; /* SSG-EG negated output */ + + UINT32 key; /* 0=last key was KEY OFF, 1=KEY ON */ + + /* LFO */ + UINT32 AMmask; /* AM enable flag */ + +} FM_SLOT; + +typedef struct +{ + FM_SLOT SLOT[4]; /* four SLOTs (operators) */ + + UINT8 ALGO; /* algorithm */ + UINT8 FB; /* feedback shift */ + INT32 op1_out[2]; /* op1 output for feedback */ + + INT32 *connect1; /* SLOT1 output pointer */ + INT32 *connect3; /* SLOT3 output pointer */ + INT32 *connect2; /* SLOT2 output pointer */ + INT32 *connect4; /* SLOT4 output pointer */ + + INT32 *mem_connect;/* where to put the delayed sample (MEM) */ + INT32 mem_value; /* delayed sample (MEM) value */ + + INT32 pms; /* channel PMS */ + UINT8 ams; /* channel AMS */ + + UINT32 fc; /* fnum,blk:adjusted to sample rate */ + UINT8 kcode; /* key code: */ + UINT32 block_fnum; /* current blk/fnum value for this slot (can be different betweeen slots of one channel in 3slot mode) */ +} FM_CH; + + +typedef struct +{ + void * param; /* this chip parameter */ + int clock; /* master clock (Hz) */ + int rate; /* sampling rate (Hz) */ + double freqbase; /* frequency base */ + double TimerBase; /* Timer base time */ +#if FM_BUSY_FLAG_SUPPORT + double BusyExpire; /* ExpireTime of Busy clear */ +#endif + UINT8 address; /* address register */ + UINT8 irq; /* interrupt level */ + UINT8 irqmask; /* irq mask */ + UINT8 status; /* status flag */ + UINT32 mode; /* mode CSM / 3SLOT */ + UINT8 prescaler_sel;/* prescaler selector */ + UINT8 fn_h; /* freq latch */ + INT32 TA; /* timer a */ + INT32 TAC; /* timer a counter */ + UINT8 TB; /* timer b */ + INT32 TBC; /* timer b counter */ + /* local time tables */ + INT32 dt_tab[8][32];/* DeTune table */ + /* Extention Timer and IRQ handler */ + FM_TIMERHANDLER Timer_Handler; + FM_IRQHANDLER IRQ_Handler; + const struct ssg_callbacks *SSG; +} FM_ST; + + + +/***********************************************************/ +/* OPN unit */ +/***********************************************************/ + +/* OPN 3slot struct */ +typedef struct +{ + UINT32 fc[3]; /* fnum3,blk3: calculated */ + UINT8 fn_h; /* freq3 latch */ + UINT8 kcode[3]; /* key code */ + UINT32 block_fnum[3]; /* current fnum value for this slot (can be different betweeen slots of one channel in 3slot mode) */ +} FM_3SLOT; + +/* OPN/A/B common state */ +typedef struct +{ + UINT8 type; /* chip type */ + FM_ST ST; /* general state */ + FM_3SLOT SL3; /* 3 slot mode state */ + FM_CH *P_CH; /* pointer of CH */ + unsigned int pan[6*2]; /* fm channels output masks (0xffffffff = enable) */ + + UINT32 eg_cnt; /* global envelope generator counter */ + UINT32 eg_timer; /* global envelope generator counter works at frequency = chipclock/64/3 */ + UINT32 eg_timer_add; /* step of eg_timer */ + UINT32 eg_timer_overflow;/* envelope generator timer overlfows every 3 samples (on real chip) */ + + + /* there are 2048 FNUMs that can be generated using FNUM/BLK registers + but LFO works with one more bit of a precision so we really need 4096 elements */ + + UINT32 fn_table[4096]; /* fnumber->increment counter */ + + + /* LFO */ + UINT32 lfo_cnt; + UINT32 lfo_inc; + + UINT32 lfo_freq[8]; /* LFO FREQ table */ +} FM_OPN; + + + +/* current chip state */ +static INT32 m2,c1,c2; /* Phase Modulation input for operators 2,3,4 */ +static INT32 mem; /* one sample delay memory */ + +static INT32 out_fm[8]; /* outputs of working channels */ + +#if (BUILD_YM2608||BUILD_YM2610||BUILD_YM2610B) +static INT32 out_adpcm[4]; /* channel output NONE,LEFT,RIGHT or CENTER for YM2608/YM2610 ADPCM */ +static INT32 out_delta[4]; /* channel output NONE,LEFT,RIGHT or CENTER for YM2608/YM2610 DELTAT*/ +#endif + +static UINT32 LFO_AM; /* runtime LFO calculations helper */ +static INT32 LFO_PM; /* runtime LFO calculations helper */ + + +/* log output level */ +#define LOG_ERR 3 /* ERROR */ +#define LOG_WAR 2 /* WARNING */ +#define LOG_INF 1 /* INFORMATION */ +#define LOG_LEVEL LOG_INF + +#ifndef __RAINE__ +#define LOG(n,x) if( (n)>=LOG_LEVEL ) logerror x +#endif + +/* limitter */ +#define Limit(val, max,min) { \ + if ( val > max ) val = max; \ + else if ( val < min ) val = min; \ +} + + +/* status set and IRQ handling */ +INLINE void FM_STATUS_SET(FM_ST *ST,int flag) +{ + /* set status flag */ + ST->status |= flag; + if ( !(ST->irq) && (ST->status & ST->irqmask) ) + { + ST->irq = 1; + /* callback user interrupt handler (IRQ is OFF to ON) */ + if(ST->IRQ_Handler) (ST->IRQ_Handler)(ST->param,1); + } +} + +/* status reset and IRQ handling */ +INLINE void FM_STATUS_RESET(FM_ST *ST,int flag) +{ + /* reset status flag */ + ST->status &=~flag; + if ( (ST->irq) && !(ST->status & ST->irqmask) ) + { + ST->irq = 0; + /* callback user interrupt handler (IRQ is ON to OFF) */ + if(ST->IRQ_Handler) (ST->IRQ_Handler)(ST->param,0); + } +} + +/* IRQ mask set */ +INLINE void FM_IRQMASK_SET(FM_ST *ST,int flag) +{ + ST->irqmask = flag; + /* IRQ handling check */ + FM_STATUS_SET(ST,0); + FM_STATUS_RESET(ST,0); +} + +/* OPN Mode Register Write */ +INLINE void set_timers( FM_ST *ST, void *n, int v ) +{ + /* b7 = CSM MODE */ + /* b6 = 3 slot mode */ + /* b5 = reset b */ + /* b4 = reset a */ + /* b3 = timer enable b */ + /* b2 = timer enable a */ + /* b1 = load b */ + /* b0 = load a */ + ST->mode = v; + + /* reset Timer b flag */ + if( v & 0x20 ) + FM_STATUS_RESET(ST,0x02); + /* reset Timer a flag */ + if( v & 0x10 ) + FM_STATUS_RESET(ST,0x01); + /* load b */ + if( v & 0x02 ) + { + if( ST->TBC == 0 ) + { + ST->TBC = ( 256-ST->TB)<<4; + /* External timer handler */ + if (ST->Timer_Handler) (ST->Timer_Handler)(n,1,ST->TBC,ST->TimerBase); + } + } + else + { /* stop timer b */ + if( ST->TBC != 0 ) + { + ST->TBC = 0; + if (ST->Timer_Handler) (ST->Timer_Handler)(n,1,0,ST->TimerBase); + } + } + /* load a */ + if( v & 0x01 ) + { + if( ST->TAC == 0 ) + { + ST->TAC = (1024-ST->TA); + /* External timer handler */ + if (ST->Timer_Handler) (ST->Timer_Handler)(n,0,ST->TAC,ST->TimerBase); + } + } + else + { /* stop timer a */ + if( ST->TAC != 0 ) + { + ST->TAC = 0; + if (ST->Timer_Handler) (ST->Timer_Handler)(n,0,0,ST->TimerBase); + } + } +} + + +/* Timer A Overflow */ +INLINE void TimerAOver(FM_ST *ST) +{ + /* set status (if enabled) */ + if(ST->mode & 0x04) FM_STATUS_SET(ST,0x01); + /* clear or reload the counter */ + ST->TAC = (1024-ST->TA); + if (ST->Timer_Handler) (ST->Timer_Handler)(ST->param,0,ST->TAC,ST->TimerBase); +} +/* Timer B Overflow */ +INLINE void TimerBOver(FM_ST *ST) +{ + /* set status (if enabled) */ + if(ST->mode & 0x08) FM_STATUS_SET(ST,0x02); + /* clear or reload the counter */ + ST->TBC = ( 256-ST->TB)<<4; + if (ST->Timer_Handler) (ST->Timer_Handler)(ST->param,1,ST->TBC,ST->TimerBase); +} + + +#if FM_INTERNAL_TIMER +/* ----- internal timer mode , update timer */ + +/* ---------- calculate timer A ---------- */ + #define INTERNAL_TIMER_A(ST,CSM_CH) \ + { \ + if( ST->TAC && (ST->Timer_Handler==0) ) \ + if( (ST->TAC -= (int)(ST->freqbase*4096)) <= 0 ) \ + { \ + TimerAOver( ST ); \ + /* CSM mode total level latch and auto key on */ \ + if( ST->mode & 0x80 ) \ + CSMKeyControll( CSM_CH ); \ + } \ + } +/* ---------- calculate timer B ---------- */ + #define INTERNAL_TIMER_B(ST,step) \ + { \ + if( ST->TBC && (ST->Timer_Handler==0) ) \ + if( (ST->TBC -= (int)(ST->freqbase*4096*step)) <= 0 ) \ + TimerBOver( ST ); \ + } +#else /* FM_INTERNAL_TIMER */ +/* external timer mode */ +#define INTERNAL_TIMER_A(ST,CSM_CH) +#define INTERNAL_TIMER_B(ST,step) +#endif /* FM_INTERNAL_TIMER */ + + + +#if FM_BUSY_FLAG_SUPPORT +INLINE UINT8 FM_STATUS_FLAG(FM_ST *ST) +{ + if( ST->BusyExpire ) + { + if( (ST->BusyExpire - FM_GET_TIME_NOW()) > 0) + return ST->status | 0x80; /* with busy */ + /* expire */ + ST->BusyExpire = 0; + } + return ST->status; +} +INLINE void FM_BUSY_SET(FM_ST *ST,int busyclock ) +{ + ST->BusyExpire = FM_GET_TIME_NOW() + (ST->TimerBase * busyclock); +} +#define FM_BUSY_CLEAR(ST) ((ST)->BusyExpire = 0) +#else +#define FM_STATUS_FLAG(ST) ((ST)->status) +#define FM_BUSY_SET(ST,bclock) {} +#define FM_BUSY_CLEAR(ST) {} +#endif + + + + +INLINE void FM_KEYON(FM_CH *CH , int s ) +{ + FM_SLOT *SLOT = &CH->SLOT[s]; + if( !SLOT->key ) + { + SLOT->key = 1; + SLOT->phase = 0; /* restart Phase Generator */ + SLOT->state = EG_ATT; /* phase -> Attack */ + } +} + +INLINE void FM_KEYOFF(FM_CH *CH , int s ) +{ + FM_SLOT *SLOT = &CH->SLOT[s]; + if( SLOT->key ) + { + SLOT->key = 0; + if (SLOT->state>EG_REL) + SLOT->state = EG_REL;/* phase -> Release */ + } +} + +/* set algorithm connection */ +static void setup_connection( FM_CH *CH, int ch ) +{ + INT32 *carrier = &out_fm[ch]; + + INT32 **om1 = &CH->connect1; + INT32 **om2 = &CH->connect3; + INT32 **oc1 = &CH->connect2; + + INT32 **memc = &CH->mem_connect; + + switch( CH->ALGO ){ + case 0: + /* M1---C1---MEM---M2---C2---OUT */ + *om1 = &c1; + *oc1 = &mem; + *om2 = &c2; + *memc= &m2; + break; + case 1: + /* M1------+-MEM---M2---C2---OUT */ + /* C1-+ */ + *om1 = &mem; + *oc1 = &mem; + *om2 = &c2; + *memc= &m2; + break; + case 2: + /* M1-----------------+-C2---OUT */ + /* C1---MEM---M2-+ */ + *om1 = &c2; + *oc1 = &mem; + *om2 = &c2; + *memc= &m2; + break; + case 3: + /* M1---C1---MEM------+-C2---OUT */ + /* M2-+ */ + *om1 = &c1; + *oc1 = &mem; + *om2 = &c2; + *memc= &c2; + break; + case 4: + /* M1---C1-+-OUT */ + /* M2---C2-+ */ + /* MEM: not used */ + *om1 = &c1; + *oc1 = carrier; + *om2 = &c2; + *memc= &mem; /* store it anywhere where it will not be used */ + break; + case 5: + /* +----C1----+ */ + /* M1-+-MEM---M2-+-OUT */ + /* +----C2----+ */ + *om1 = 0; /* special mark */ + *oc1 = carrier; + *om2 = carrier; + *memc= &m2; + break; + case 6: + /* M1---C1-+ */ + /* M2-+-OUT */ + /* C2-+ */ + /* MEM: not used */ + *om1 = &c1; + *oc1 = carrier; + *om2 = carrier; + *memc= &mem; /* store it anywhere where it will not be used */ + break; + case 7: + /* M1-+ */ + /* C1-+-OUT */ + /* M2-+ */ + /* C2-+ */ + /* MEM: not used*/ + *om1 = carrier; + *oc1 = carrier; + *om2 = carrier; + *memc= &mem; /* store it anywhere where it will not be used */ + break; + } + + CH->connect4 = carrier; +} + +/* set detune & multiple */ +INLINE void set_det_mul(FM_ST *ST,FM_CH *CH,FM_SLOT *SLOT,int v) +{ + SLOT->mul = (v&0x0f)? (v&0x0f)*2 : 1; + SLOT->DT = ST->dt_tab[(v>>4)&7]; + CH->SLOT[SLOT1].Incr=-1; +} + +/* set total level */ +INLINE void set_tl(FM_CH *CH,FM_SLOT *SLOT , int v) +{ + SLOT->tl = (v&0x7f)<<(ENV_BITS-7); /* 7bit TL */ +} + +/* set attack rate & key scale */ +INLINE void set_ar_ksr(FM_CH *CH,FM_SLOT *SLOT,int v) +{ + UINT8 old_KSR = SLOT->KSR; + + SLOT->ar = (v&0x1f) ? 32 + ((v&0x1f)<<1) : 0; + + SLOT->KSR = 3-(v>>6); + if (SLOT->KSR != old_KSR) + { + CH->SLOT[SLOT1].Incr=-1; + } + else + { + /* refresh Attack rate */ + if ((SLOT->ar + SLOT->ksr) < 32+62) + { + SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ]; + SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ]; + } + else + { + SLOT->eg_sh_ar = 0; + SLOT->eg_sel_ar = 17*RATE_STEPS; + } + } +} + +/* set decay rate */ +INLINE void set_dr(FM_SLOT *SLOT,int v) +{ + SLOT->d1r = (v&0x1f) ? 32 + ((v&0x1f)<<1) : 0; + + SLOT->eg_sh_d1r = eg_rate_shift [SLOT->d1r + SLOT->ksr]; + SLOT->eg_sel_d1r= eg_rate_select[SLOT->d1r + SLOT->ksr]; + +} + +/* set sustain rate */ +INLINE void set_sr(FM_SLOT *SLOT,int v) +{ + SLOT->d2r = (v&0x1f) ? 32 + ((v&0x1f)<<1) : 0; + + SLOT->eg_sh_d2r = eg_rate_shift [SLOT->d2r + SLOT->ksr]; + SLOT->eg_sel_d2r= eg_rate_select[SLOT->d2r + SLOT->ksr]; +} + +/* set release rate */ +INLINE void set_sl_rr(FM_SLOT *SLOT,int v) +{ + SLOT->sl = sl_table[ v>>4 ]; + + SLOT->rr = 34 + ((v&0x0f)<<2); + + SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr]; + SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr]; +} + + + +INLINE signed int op_calc(UINT32 phase, unsigned int env, signed int pm) +{ + UINT32 p; + + p = (env<<3) + sin_tab[ ( ((signed int)((phase & ~FREQ_MASK) + (pm<<15))) >> FREQ_SH ) & SIN_MASK ]; + + if (p >= TL_TAB_LEN) + return 0; + return tl_tab[p]; +} + +INLINE signed int op_calc1(UINT32 phase, unsigned int env, signed int pm) +{ + UINT32 p; + + p = (env<<3) + sin_tab[ ( ((signed int)((phase & ~FREQ_MASK) + pm )) >> FREQ_SH ) & SIN_MASK ]; + + if (p >= TL_TAB_LEN) + return 0; + return tl_tab[p]; +} + +/* advance LFO to next sample */ +INLINE void advance_lfo(FM_OPN *OPN) +{ + UINT8 pos; + UINT8 prev_pos; + + if (OPN->lfo_inc) /* LFO enabled ? */ + { + prev_pos = OPN->lfo_cnt>>LFO_SH & 127; + + OPN->lfo_cnt += OPN->lfo_inc; + + pos = (OPN->lfo_cnt >> LFO_SH) & 127; + + + /* update AM when LFO output changes */ + + /*if (prev_pos != pos)*/ + /* actually I can't optimize is this way without rewritting chan_calc() + to use chip->lfo_am instead of global lfo_am */ + { + + /* triangle */ + /* AM: 0 to 126 step +2, 126 to 0 step -2 */ + if (pos<64) + LFO_AM = (pos&63) * 2; + else + LFO_AM = 126 - ((pos&63) * 2); + } + + /* PM works with 4 times slower clock */ + prev_pos >>= 2; + pos >>= 2; + /* update PM when LFO output changes */ + /*if (prev_pos != pos)*/ /* can't use global lfo_pm for this optimization, must be chip->lfo_pm instead*/ + { + LFO_PM = pos; + } + + } + else + { + LFO_AM = 0; + LFO_PM = 0; + } +} + +INLINE void advance_eg_channel(FM_OPN *OPN, FM_SLOT *SLOT) +{ + unsigned int out; + unsigned int swap_flag = 0; + unsigned int i; + + + i = 4; /* four operators per channel */ + do + { + switch(SLOT->state) + { + case EG_ATT: /* attack phase */ + if ( !(OPN->eg_cnt & ((1<eg_sh_ar)-1) ) ) + { + SLOT->volume += (~SLOT->volume * + (eg_inc[SLOT->eg_sel_ar + ((OPN->eg_cnt>>SLOT->eg_sh_ar)&7)]) + ) >>4; + + if (SLOT->volume <= MIN_ATT_INDEX) + { + SLOT->volume = MIN_ATT_INDEX; + SLOT->state = EG_DEC; + } + } + break; + + case EG_DEC: /* decay phase */ + if (SLOT->ssg&0x08) /* SSG EG type envelope selected */ + { + if ( !(OPN->eg_cnt & ((1<eg_sh_d1r)-1) ) ) + { + SLOT->volume += 4 * eg_inc[SLOT->eg_sel_d1r + ((OPN->eg_cnt>>SLOT->eg_sh_d1r)&7)]; + + if ( SLOT->volume >= SLOT->sl ) + SLOT->state = EG_SUS; + } + } + else + { + if ( !(OPN->eg_cnt & ((1<eg_sh_d1r)-1) ) ) + { + SLOT->volume += eg_inc[SLOT->eg_sel_d1r + ((OPN->eg_cnt>>SLOT->eg_sh_d1r)&7)]; + + if ( SLOT->volume >= SLOT->sl ) + SLOT->state = EG_SUS; + } + } + break; + + case EG_SUS: /* sustain phase */ + if (SLOT->ssg&0x08) /* SSG EG type envelope selected */ + { + if ( !(OPN->eg_cnt & ((1<eg_sh_d2r)-1) ) ) + { + SLOT->volume += 4 * eg_inc[SLOT->eg_sel_d2r + ((OPN->eg_cnt>>SLOT->eg_sh_d2r)&7)]; + + if ( SLOT->volume >= MAX_ATT_INDEX ) + { + SLOT->volume = MAX_ATT_INDEX; + + if (SLOT->ssg&0x01) /* bit 0 = hold */ + { + if (SLOT->ssgn&1) /* have we swapped once ??? */ + { + /* yes, so do nothing, just hold current level */ + } + else + swap_flag = (SLOT->ssg&0x02) | 1 ; /* bit 1 = alternate */ + + } + else + { + /* same as KEY-ON operation */ + + /* restart of the Phase Generator should be here, + only if AR is not maximum ??? */ + /*SLOT->phase = 0;*/ + + /* phase -> Attack */ + SLOT->state = EG_ATT; + + swap_flag = (SLOT->ssg&0x02); /* bit 1 = alternate */ + } + } + } + } + else + { + if ( !(OPN->eg_cnt & ((1<eg_sh_d2r)-1) ) ) + { + SLOT->volume += eg_inc[SLOT->eg_sel_d2r + ((OPN->eg_cnt>>SLOT->eg_sh_d2r)&7)]; + + if ( SLOT->volume >= MAX_ATT_INDEX ) + { + SLOT->volume = MAX_ATT_INDEX; + /* do not change SLOT->state (verified on real chip) */ + } + } + + } + break; + + case EG_REL: /* release phase */ + if ( !(OPN->eg_cnt & ((1<eg_sh_rr)-1) ) ) + { + SLOT->volume += eg_inc[SLOT->eg_sel_rr + ((OPN->eg_cnt>>SLOT->eg_sh_rr)&7)]; + + if ( SLOT->volume >= MAX_ATT_INDEX ) + { + SLOT->volume = MAX_ATT_INDEX; + SLOT->state = EG_OFF; + } + } + break; + + } + + out = SLOT->tl + ((UINT32)SLOT->volume); + + if ((SLOT->ssg&0x08) && (SLOT->ssgn&2)) /* negate output (changes come from alternate bit, init comes from attack bit) */ + out ^= ((1<vol_out = out; + + SLOT->ssgn ^= swap_flag; + + SLOT++; + i--; + }while (i); + +} + + + +#define volume_calc(OP) ((OP)->vol_out + (AM & (OP)->AMmask)) + +INLINE void chan_calc(FM_OPN *OPN, FM_CH *CH) +{ + unsigned int eg_out; + + UINT32 AM = LFO_AM >> CH->ams; + + + m2 = c1 = c2 = mem = 0; + + *CH->mem_connect = CH->mem_value; /* restore delayed sample (MEM) value to m2 or c2 */ + + eg_out = volume_calc(&CH->SLOT[SLOT1]); + { + INT32 out = CH->op1_out[0] + CH->op1_out[1]; + CH->op1_out[0] = CH->op1_out[1]; + + if( !CH->connect1 ){ + /* algorithm 5 */ + mem = c1 = c2 = CH->op1_out[0]; + }else{ + /* other algorithms */ + *CH->connect1 += CH->op1_out[0]; + } + + CH->op1_out[1] = 0; + if( eg_out < ENV_QUIET ) /* SLOT 1 */ + { + if (!CH->FB) + out=0; + + CH->op1_out[1] = op_calc1(CH->SLOT[SLOT1].phase, eg_out, (out<FB) ); + } + } + + eg_out = volume_calc(&CH->SLOT[SLOT3]); + if( eg_out < ENV_QUIET ) /* SLOT 3 */ + *CH->connect3 += op_calc(CH->SLOT[SLOT3].phase, eg_out, m2); + + eg_out = volume_calc(&CH->SLOT[SLOT2]); + if( eg_out < ENV_QUIET ) /* SLOT 2 */ + *CH->connect2 += op_calc(CH->SLOT[SLOT2].phase, eg_out, c1); + + eg_out = volume_calc(&CH->SLOT[SLOT4]); + if( eg_out < ENV_QUIET ) /* SLOT 4 */ + *CH->connect4 += op_calc(CH->SLOT[SLOT4].phase, eg_out, c2); + + + /* store current MEM */ + CH->mem_value = mem; + + /* update phase counters AFTER output calculations */ + if(CH->pms) + { + + + /* add support for 3 slot mode */ + + + UINT32 block_fnum = CH->block_fnum; + + UINT32 fnum_lfo = ((block_fnum & 0x7f0) >> 4) * 32 * 8; + INT32 lfo_fn_table_index_offset = lfo_pm_table[ fnum_lfo + CH->pms + LFO_PM ]; + + if (lfo_fn_table_index_offset) /* LFO phase modulation active */ + { + UINT8 blk; + UINT32 fn; + int kc,fc; + + block_fnum = block_fnum*2 + lfo_fn_table_index_offset; + + blk = (block_fnum&0x7000) >> 12; + fn = block_fnum & 0xfff; + + /* keyscale code */ + kc = (blk<<2) | opn_fktable[fn >> 8]; + /* phase increment counter */ + fc = OPN->fn_table[fn]>>(7-blk); + + CH->SLOT[SLOT1].phase += ((fc+CH->SLOT[SLOT1].DT[kc])*CH->SLOT[SLOT1].mul) >> 1; + CH->SLOT[SLOT2].phase += ((fc+CH->SLOT[SLOT2].DT[kc])*CH->SLOT[SLOT2].mul) >> 1; + CH->SLOT[SLOT3].phase += ((fc+CH->SLOT[SLOT3].DT[kc])*CH->SLOT[SLOT3].mul) >> 1; + CH->SLOT[SLOT4].phase += ((fc+CH->SLOT[SLOT4].DT[kc])*CH->SLOT[SLOT4].mul) >> 1; + } + else /* LFO phase modulation = zero */ + { + CH->SLOT[SLOT1].phase += CH->SLOT[SLOT1].Incr; + CH->SLOT[SLOT2].phase += CH->SLOT[SLOT2].Incr; + CH->SLOT[SLOT3].phase += CH->SLOT[SLOT3].Incr; + CH->SLOT[SLOT4].phase += CH->SLOT[SLOT4].Incr; + } + } + else /* no LFO phase modulation */ + { + CH->SLOT[SLOT1].phase += CH->SLOT[SLOT1].Incr; + CH->SLOT[SLOT2].phase += CH->SLOT[SLOT2].Incr; + CH->SLOT[SLOT3].phase += CH->SLOT[SLOT3].Incr; + CH->SLOT[SLOT4].phase += CH->SLOT[SLOT4].Incr; + } +} + +/* update phase increment and envelope generator */ +INLINE void refresh_fc_eg_slot(FM_SLOT *SLOT , int fc , int kc ) +{ + int ksr; + + /* (frequency) phase increment counter */ + SLOT->Incr = ((fc+SLOT->DT[kc])*SLOT->mul) >> 1; + + ksr = kc >> SLOT->KSR; + if( SLOT->ksr != ksr ) + { + SLOT->ksr = ksr; + + /* calculate envelope generator rates */ + if ((SLOT->ar + SLOT->ksr) < 32+62) + { + SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ]; + SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ]; + } + else + { + SLOT->eg_sh_ar = 0; + SLOT->eg_sel_ar = 17*RATE_STEPS; + } + + SLOT->eg_sh_d1r = eg_rate_shift [SLOT->d1r + SLOT->ksr]; + SLOT->eg_sel_d1r= eg_rate_select[SLOT->d1r + SLOT->ksr]; + + SLOT->eg_sh_d2r = eg_rate_shift [SLOT->d2r + SLOT->ksr]; + SLOT->eg_sel_d2r= eg_rate_select[SLOT->d2r + SLOT->ksr]; + + SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr]; + SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr]; + } +} + +/* update phase increment counters */ +INLINE void refresh_fc_eg_chan(FM_CH *CH ) +{ + if( CH->SLOT[SLOT1].Incr==-1){ + int fc = CH->fc; + int kc = CH->kcode; + refresh_fc_eg_slot(&CH->SLOT[SLOT1] , fc , kc ); + refresh_fc_eg_slot(&CH->SLOT[SLOT2] , fc , kc ); + refresh_fc_eg_slot(&CH->SLOT[SLOT3] , fc , kc ); + refresh_fc_eg_slot(&CH->SLOT[SLOT4] , fc , kc ); + } +} + +/* initialize time tables */ +static void init_timetables( FM_ST *ST , const UINT8 *dttable ) +{ + int i,d; + double rate; + +#if 0 + logerror("FM.C: samplerate=%8i chip clock=%8i freqbase=%f \n", + ST->rate, ST->clock, ST->freqbase ); +#endif + + /* DeTune table */ + for (d = 0;d <= 3;d++){ + for (i = 0;i <= 31;i++){ + rate = ((double)dttable[d*32 + i]) * SIN_LEN * ST->freqbase * (1<dt_tab[d][i] = (INT32) rate; + ST->dt_tab[d+4][i] = -ST->dt_tab[d][i]; +#if 0 + logerror("FM.C: DT [%2i %2i] = %8x \n", d, i, ST->dt_tab[d][i] ); +#endif + } + } + +} + + +static void reset_channels( FM_ST *ST , FM_CH *CH , int num ) +{ + int c,s; + + ST->mode = 0; /* normal mode */ + ST->TA = 0; + ST->TAC = 0; + ST->TB = 0; + ST->TBC = 0; + + for( c = 0 ; c < num ; c++ ) + { + CH[c].fc = 0; + for(s = 0 ; s < 4 ; s++ ) + { + CH[c].SLOT[s].ssg = 0; + CH[c].SLOT[s].ssgn = 0; + CH[c].SLOT[s].state= EG_OFF; + CH[c].SLOT[s].volume = MAX_ATT_INDEX; + CH[c].SLOT[s].vol_out= MAX_ATT_INDEX; + } + } +} + +/* initialize generic tables */ +static int init_tables(void) +{ + signed int i,x; + signed int n; + double o,m; + + for (x=0; x>= 4; /* 12 bits here */ + if (n&1) /* round to nearest */ + n = (n>>1)+1; + else + n = n>>1; + /* 11 bits here (rounded) */ + n <<= 2; /* 13 bits here (as in real chip) */ + tl_tab[ x*2 + 0 ] = n; + tl_tab[ x*2 + 1 ] = -tl_tab[ x*2 + 0 ]; + + for (i=1; i<13; i++) + { + tl_tab[ x*2+0 + i*2*TL_RES_LEN ] = tl_tab[ x*2+0 ]>>i; + tl_tab[ x*2+1 + i*2*TL_RES_LEN ] = -tl_tab[ x*2+0 + i*2*TL_RES_LEN ]; + } + #if 0 + logerror("tl %04i", x); + for (i=0; i<13; i++) + logerror(", [%02i] %4x", i*2, tl_tab[ x*2 /*+1*/ + i*2*TL_RES_LEN ]); + logerror("\n"); + } + #endif + } + /*logerror("FM.C: TL_TAB_LEN = %i elements (%i bytes)\n",TL_TAB_LEN, (int)sizeof(tl_tab));*/ + + + for (i=0; i0.0) + o = 8*log(1.0/m)/log(2); /* convert to 'decibels' */ + else + o = 8*log(-1.0/m)/log(2); /* convert to 'decibels' */ + + o = o / (ENV_STEP/4); + + n = (int)(2.0*o); + if (n&1) /* round to nearest */ + n = (n>>1)+1; + else + n = n>>1; + + sin_tab[ i ] = n*2 + (m>=0.0? 0: 1 ); + /*logerror("FM.C: sin [%4i]= %4i (tl_tab value=%5i)\n", i, sin_tab[i],tl_tab[sin_tab[i]]);*/ + } + + /*logerror("FM.C: ENV_QUIET= %08x\n",ENV_QUIET );*/ + + + /* build LFO PM modulation table */ + for(i = 0; i < 8; i++) /* 8 PM depths */ + { + UINT8 fnum; + for (fnum=0; fnum<128; fnum++) /* 7 bits meaningful of F-NUMBER */ + { + UINT8 value; + UINT8 step; + UINT32 offset_depth = i; + UINT32 offset_fnum_bit; + UINT32 bit_tmp; + + for (step=0; step<8; step++) + { + value = 0; + for (bit_tmp=0; bit_tmp<7; bit_tmp++) /* 7 bits */ + { + if (fnum & (1<op1_out); + state_save_register_item(state_name, num, CH->fc); + /* slots */ + for(slot=0;slot<4;slot++) + { + FM_SLOT *SLOT = &CH->SLOT[slot]; + + sprintf(state_name,"%s.CH%d.SLOT%d",name,ch,slot_array[slot]); + state_save_register_item(state_name, num, SLOT->phase); + state_save_register_item(state_name, num, SLOT->state); + state_save_register_item(state_name, num, SLOT->volume); + } + } +} + +static void FMsave_state_st(const char *state_name,int num,FM_ST *ST) +{ +#if FM_BUSY_FLAG_SUPPORT + state_save_register_item(state_name, num, ST->BusyExpire ); +#endif + state_save_register_item(state_name, num, ST->address ); + state_save_register_item(state_name, num, ST->irq ); + state_save_register_item(state_name, num, ST->irqmask ); + state_save_register_item(state_name, num, ST->status ); + state_save_register_item(state_name, num, ST->mode ); + state_save_register_item(state_name, num, ST->prescaler_sel ); + state_save_register_item(state_name, num, ST->fn_h ); + state_save_register_item(state_name, num, ST->TA ); + state_save_register_item(state_name, num, ST->TAC ); + state_save_register_item(state_name, num, ST->TB ); + state_save_register_item(state_name, num, ST->TBC ); +} +#endif /* _STATE_H */ + +#if BUILD_OPN + + + +/* prescaler set (and make time tables) */ +static void OPNSetPres(FM_OPN *OPN , int pres , int TimerPres, int SSGpres) +{ + int i; + + /* frequency base */ + OPN->ST.freqbase = (OPN->ST.rate) ? ((double)OPN->ST.clock / OPN->ST.rate) / pres : 0; + +#if 0 + OPN->ST.rate = (double)OPN->ST.clock / pres; + OPN->ST.freqbase = 1.0; +#endif + + OPN->eg_timer_add = (1<ST.freqbase; + OPN->eg_timer_overflow = ( 3 ) * (1<ST.TimerBase = 1.0/((double)OPN->ST.clock / (double)TimerPres); + + /* SSG part prescaler set */ + if( SSGpres ) (*OPN->ST.SSG->set_clock)( OPN->ST.param, OPN->ST.clock * 2 / SSGpres ); + + /* make time tables */ + init_timetables( &OPN->ST, dt_tab ); + + /* there are 2048 FNUMs that can be generated using FNUM/BLK registers + but LFO works with one more bit of a precision so we really need 4096 elements */ + /* calculate fnumber -> increment counter table */ + for(i = 0; i < 4096; i++) + { + /* freq table for octave 7 */ + /* OPN phase increment counter = 20bit */ + OPN->fn_table[i] = (UINT32)( (double)i * 32 * OPN->ST.freqbase * (1<<(FREQ_SH-10)) ); /* -10 because chip works with 10.10 fixed point, while we use 16.16 */ +#if 0 + logerror("FM.C: fn_table[%4i] = %08x (dec=%8i)\n", + i, OPN->fn_table[i]>>6,OPN->fn_table[i]>>6 ); +#endif + } + + /* LFO freq. table */ + for(i = 0; i < 8; i++) + { + /* Amplitude modulation: 64 output levels (triangle waveform); 1 level lasts for one of "lfo_samples_per_step" samples */ + /* Phase modulation: one entry from lfo_pm_output lasts for one of 4 * "lfo_samples_per_step" samples */ + OPN->lfo_freq[i] = (1.0 / lfo_samples_per_step[i]) * (1<ST.freqbase; +#if 0 + logerror("FM.C: lfo_freq[%i] = %08x (dec=%8i)\n", + i, OPN->lfo_freq[i],OPN->lfo_freq[i] ); +#endif + } +} + + + +/* write a OPN mode register 0x20-0x2f */ +static void OPNWriteMode(FM_OPN *OPN, int r, int v) +{ + UINT8 c; + FM_CH *CH; + + switch(r){ + case 0x21: /* Test */ + break; + case 0x22: /* LFO FREQ (YM2608/YM2610/YM2610B/YM2612) */ + if( OPN->type & TYPE_LFOPAN ) + { + if (v&0x08) /* LFO enabled ? */ + { + OPN->lfo_inc = OPN->lfo_freq[v&7]; + } + else + { + OPN->lfo_inc = 0; + } + } + break; + case 0x24: /* timer A High 8*/ + OPN->ST.TA = (OPN->ST.TA & 0x03)|(((int)v)<<2); + break; + case 0x25: /* timer A Low 2*/ + OPN->ST.TA = (OPN->ST.TA & 0x3fc)|(v&3); + break; + case 0x26: /* timer B */ + OPN->ST.TB = v; + break; + case 0x27: /* mode, timer control */ + set_timers( &(OPN->ST),OPN->ST.param,v ); + break; + case 0x28: /* key on / off */ + c = v & 0x03; + if( c == 3 ) break; + if( (v&0x04) && (OPN->type & TYPE_6CH) ) c+=3; + CH = OPN->P_CH; + CH = &CH[c]; + if(v&0x10) FM_KEYON(CH,SLOT1); else FM_KEYOFF(CH,SLOT1); + if(v&0x20) FM_KEYON(CH,SLOT2); else FM_KEYOFF(CH,SLOT2); + if(v&0x40) FM_KEYON(CH,SLOT3); else FM_KEYOFF(CH,SLOT3); + if(v&0x80) FM_KEYON(CH,SLOT4); else FM_KEYOFF(CH,SLOT4); + break; + } +} + +/* write a OPN register (0x30-0xff) */ +static void OPNWriteReg(FM_OPN *OPN, int r, int v) +{ + FM_CH *CH; + FM_SLOT *SLOT; + + UINT8 c = OPN_CHAN(r); + + if (c == 3) return; /* 0xX3,0xX7,0xXB,0xXF */ + + if (r >= 0x100) c+=3; + + CH = OPN->P_CH; + CH = &CH[c]; + + SLOT = &(CH->SLOT[OPN_SLOT(r)]); + + switch( r & 0xf0 ) { + case 0x30: /* DET , MUL */ + set_det_mul(&OPN->ST,CH,SLOT,v); + break; + + case 0x40: /* TL */ + set_tl(CH,SLOT,v); + break; + + case 0x50: /* KS, AR */ + set_ar_ksr(CH,SLOT,v); + break; + + case 0x60: /* bit7 = AM ENABLE, DR */ + set_dr(SLOT,v); + + if(OPN->type & TYPE_LFOPAN) /* YM2608/2610/2610B/2612 */ + { + SLOT->AMmask = (v&0x80) ? ~0 : 0; + } + break; + + case 0x70: /* SR */ + set_sr(SLOT,v); + break; + + case 0x80: /* SL, RR */ + set_sl_rr(SLOT,v); + break; + + case 0x90: /* SSG-EG */ + + SLOT->ssg = v&0x0f; + SLOT->ssgn = (v&0x04)>>1; /* bit 1 in ssgn = attack */ + + /* SSG-EG envelope shapes : + + E AtAlH + 1 0 0 0 \\\\ + + 1 0 0 1 \___ + + 1 0 1 0 \/\/ + ___ + 1 0 1 1 \ + + 1 1 0 0 //// + ___ + 1 1 0 1 / + + 1 1 1 0 /\/\ + + 1 1 1 1 /___ + + + E = SSG-EG enable + + + The shapes are generated using Attack, Decay and Sustain phases. + + Each single character in the diagrams above represents this whole + sequence: + + - when KEY-ON = 1, normal Attack phase is generated (*without* any + difference when compared to normal mode), + + - later, when envelope level reaches minimum level (max volume), + the EG switches to Decay phase (which works with bigger steps + when compared to normal mode - see below), + + - later when envelope level passes the SL level, + the EG swithes to Sustain phase (which works with bigger steps + when compared to normal mode - see below), + + - finally when envelope level reaches maximum level (min volume), + the EG switches to Attack phase again (depends on actual waveform). + + Important is that when switch to Attack phase occurs, the phase counter + of that operator will be zeroed-out (as in normal KEY-ON) but not always. + (I havent found the rule for that - perhaps only when the output level is low) + + The difference (when compared to normal Envelope Generator mode) is + that the resolution in Decay and Sustain phases is 4 times lower; + this results in only 256 steps instead of normal 1024. + In other words: + when SSG-EG is disabled, the step inside of the EG is one, + when SSG-EG is enabled, the step is four (in Decay and Sustain phases). + + Times between the level changes are the same in both modes. + + + Important: + Decay 1 Level (so called SL) is compared to actual SSG-EG output, so + it is the same in both SSG and no-SSG modes, with this exception: + + when the SSG-EG is enabled and is generating raising levels + (when the EG output is inverted) the SL will be found at wrong level !!! + For example, when SL=02: + 0 -6 = -6dB in non-inverted EG output + 96-6 = -90dB in inverted EG output + Which means that EG compares its level to SL as usual, and that the + output is simply inverted afterall. + + + The Yamaha's manuals say that AR should be set to 0x1f (max speed). + That is not necessary, but then EG will be generating Attack phase. + + */ + + + break; + + case 0xa0: + switch( OPN_SLOT(r) ){ + case 0: /* 0xa0-0xa2 : FNUM1 */ + { + UINT32 fn = (((UINT32)( (OPN->ST.fn_h)&7))<<8) + v; + UINT8 blk = OPN->ST.fn_h>>3; + /* keyscale code */ + CH->kcode = (blk<<2) | opn_fktable[fn >> 7]; + /* phase increment counter */ + CH->fc = OPN->fn_table[fn*2]>>(7-blk); + + /* store fnum in clear form for LFO PM calculations */ + CH->block_fnum = (blk<<11) | fn; + + CH->SLOT[SLOT1].Incr=-1; + } + break; + case 1: /* 0xa4-0xa6 : FNUM2,BLK */ + OPN->ST.fn_h = v&0x3f; + break; + case 2: /* 0xa8-0xaa : 3CH FNUM1 */ + if(r < 0x100) + { + UINT32 fn = (((UINT32)(OPN->SL3.fn_h&7))<<8) + v; + UINT8 blk = OPN->SL3.fn_h>>3; + /* keyscale code */ + OPN->SL3.kcode[c]= (blk<<2) | opn_fktable[fn >> 7]; + /* phase increment counter */ + OPN->SL3.fc[c] = OPN->fn_table[fn*2]>>(7-blk); + OPN->SL3.block_fnum[c] = fn; + (OPN->P_CH)[2].SLOT[SLOT1].Incr=-1; + } + break; + case 3: /* 0xac-0xae : 3CH FNUM2,BLK */ + if(r < 0x100) + OPN->SL3.fn_h = v&0x3f; + break; + } + break; + + case 0xb0: + switch( OPN_SLOT(r) ){ + case 0: /* 0xb0-0xb2 : FB,ALGO */ + { + int feedback = (v>>3)&7; + CH->ALGO = v&7; + CH->FB = feedback ? feedback+6 : 0; + setup_connection( CH, c ); + } + break; + case 1: /* 0xb4-0xb6 : L , R , AMS , PMS (YM2612/YM2610B/YM2610/YM2608) */ + if( OPN->type & TYPE_LFOPAN) + { + /* b0-2 PMS */ + CH->pms = (v & 7) * 32; /* CH->pms = PM depth * 32 (index in lfo_pm_table) */ + + /* b4-5 AMS */ + CH->ams = lfo_ams_depth_shift[(v>>4) & 0x03]; + + /* PAN : b7 = L, b6 = R */ + OPN->pan[ c*2 ] = (v & 0x80) ? ~0 : 0; + OPN->pan[ c*2+1 ] = (v & 0x40) ? ~0 : 0; + + } + break; + } + break; + } +} + +#endif /* BUILD_OPN */ + +#if BUILD_OPN_PRESCALER +/* + prescaler circuit (best guess to verified chip behaviour) + + +--------------+ +-sel2-+ + | +--|in20 | + +---+ | +-sel1-+ | | +M-CLK -+-|1/2|-+--|in10 | +---+ | out|--INT_CLOCK + | +---+ | out|-|1/3|-|in21 | + +----------|in11 | +---+ +------+ + +------+ + +reg.2d : sel2 = in21 (select sel2) +reg.2e : sel1 = in11 (select sel1) +reg.2f : sel1 = in10 , sel2 = in20 (clear selector) +reset : sel1 = in11 , sel2 = in21 (clear both) + +*/ +void OPNPrescaler_w(FM_OPN *OPN , int addr, int pre_divider) +{ + static const int opn_pres[4] = { 2*12 , 2*12 , 6*12 , 3*12 }; + static const int ssg_pres[4] = { 1 , 1 , 4 , 2 }; + int sel; + + switch(addr) + { + case 0: /* when reset */ + OPN->ST.prescaler_sel = 2; + break; + case 1: /* when postload */ + break; + case 0x2d: /* divider sel : select 1/1 for 1/3line */ + OPN->ST.prescaler_sel |= 0x02; + break; + case 0x2e: /* divider sel , select 1/3line for output */ + OPN->ST.prescaler_sel |= 0x01; + break; + case 0x2f: /* divider sel , clear both selector to 1/2,1/2 */ + OPN->ST.prescaler_sel = 0; + break; + } + sel = OPN->ST.prescaler_sel & 3; + /* update prescaler */ + OPNSetPres( OPN, opn_pres[sel]*pre_divider, + opn_pres[sel]*pre_divider, + ssg_pres[sel]*pre_divider ); +} +#endif /* BUILD_OPN_PRESCALER */ + +#if BUILD_YM2203 +/*****************************************************************************/ +/* YM2203 local section */ +/*****************************************************************************/ + +/* here's the virtual YM2203(OPN) */ +typedef struct +{ + UINT8 REGS[256]; /* registers */ + FM_OPN OPN; /* OPN state */ + FM_CH CH[3]; /* channel state */ +} YM2203; + +/* Generate samples for one of the YM2203s */ +void YM2203UpdateOne(void *chip, FMSAMPLE *buffer, int length) +{ + YM2203 *F2203 = chip; + FM_OPN *OPN = &F2203->OPN; + int i; + FMSAMPLE *buf = buffer; + FM_CH *cch[3]; + + cch[0] = &F2203->CH[0]; + cch[1] = &F2203->CH[1]; + cch[2] = &F2203->CH[2]; + + + /* refresh PG and EG */ + refresh_fc_eg_chan( cch[0] ); + refresh_fc_eg_chan( cch[1] ); + if( (F2203->OPN.ST.mode & 0xc0) ) + { + /* 3SLOT MODE */ + if( cch[2]->SLOT[SLOT1].Incr==-1) + { + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT1] , OPN->SL3.fc[1] , OPN->SL3.kcode[1] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT2] , OPN->SL3.fc[2] , OPN->SL3.kcode[2] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT3] , OPN->SL3.fc[0] , OPN->SL3.kcode[0] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT4] , cch[2]->fc , cch[2]->kcode ); + } + }else refresh_fc_eg_chan( cch[2] ); + + + /* YM2203 doesn't have LFO so we must keep these globals at 0 level */ + LFO_AM = 0; + LFO_PM = 0; + + /* buffering */ + for (i=0; i < length ; i++) + { + /* clear outputs */ + out_fm[0] = 0; + out_fm[1] = 0; + out_fm[2] = 0; + + /* advance envelope generator */ + OPN->eg_timer += OPN->eg_timer_add; + while (OPN->eg_timer >= OPN->eg_timer_overflow) + { + OPN->eg_timer -= OPN->eg_timer_overflow; + OPN->eg_cnt++; + + advance_eg_channel(OPN, &cch[0]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[1]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[2]->SLOT[SLOT1]); + } + + /* calculate FM */ + chan_calc(OPN, cch[0] ); + chan_calc(OPN, cch[1] ); + chan_calc(OPN, cch[2] ); + + /* buffering */ + { + int lt; + + lt = out_fm[0] + out_fm[1] + out_fm[2]; + + lt >>= FINAL_SH; + + Limit( lt , MAXOUT, MINOUT ); + + #ifdef SAVE_SAMPLE + SAVE_ALL_CHANNELS + #endif + + /* buffering */ + buf[i] = lt; + } + + /* timer A control */ + INTERNAL_TIMER_A( &F2203->OPN.ST , cch[2] ) + } + INTERNAL_TIMER_B(&F2203->OPN.ST,length) +} + +/* ---------- reset one of chip ---------- */ +void YM2203ResetChip(void *chip) +{ + int i; + YM2203 *F2203 = chip; + FM_OPN *OPN = &F2203->OPN; + + /* Reset Prescaler */ + OPNPrescaler_w(OPN, 0 , 1 ); + /* reset SSG section */ + (*OPN->ST.SSG->reset)(OPN->ST.param); + /* status clear */ + FM_IRQMASK_SET(&OPN->ST,0x03); + FM_BUSY_CLEAR(&OPN->ST); + OPNWriteMode(OPN,0x27,0x30); /* mode 0 , timer reset */ + + OPN->eg_timer = 0; + OPN->eg_cnt = 0; + + FM_STATUS_RESET(&OPN->ST, 0xff); + + reset_channels( &OPN->ST , F2203->CH , 3 ); + /* reset OPerator paramater */ + for(i = 0xb2 ; i >= 0x30 ; i-- ) OPNWriteReg(OPN,i,0); + for(i = 0x26 ; i >= 0x20 ; i-- ) OPNWriteReg(OPN,i,0); +} + +#ifdef __STATE_H__ +void YM2203Postload(void *chip) +{ + if (chip) + { + YM2203 *F2203 = (YM2203 *)chip; + int r; + + /* prescaler */ + OPNPrescaler_w(&F2203->OPN,1,1); + + /* SSG registers */ + for(r=0;r<16;r++) + { + (*F2203->OPN.ST.SSG->write)(F2203->OPN.ST.param,0,r); + (*F2203->OPN.ST.SSG->write)(F2203->OPN.ST.param,1,F2203->REGS[r]); + } + + /* OPN registers */ + /* DT / MULTI , TL , KS / AR , AMON / DR , SR , SL / RR , SSG-EG */ + for(r=0x30;r<0x9e;r++) + if((r&3) != 3) + OPNWriteReg(&F2203->OPN,r,F2203->REGS[r]); + /* FB / CONNECT , L / R / AMS / PMS */ + for(r=0xb0;r<0xb6;r++) + if((r&3) != 3) + OPNWriteReg(&F2203->OPN,r,F2203->REGS[r]); + + /* channels */ + /*FM_channel_postload(F2203->CH,3);*/ + } +} + +static void YM2203_save_state(YM2203 *F2203, int index) +{ + static const char statename[] = "YM2203"; + + state_save_register_item_array(statename, index, F2203->REGS); + FMsave_state_st(statename,index,&F2203->OPN.ST); + FMsave_state_channel(statename,index,F2203->CH,3); + /* 3slots */ + state_save_register_item_array (statename, index, F2203->OPN.SL3.fc); + state_save_register_item (statename, index, F2203->OPN.SL3.fn_h); + state_save_register_item_array (statename, index, F2203->OPN.SL3.kcode); +} +#endif /* _STATE_H */ + +/* ---------- Initialize YM2203 emulator(s) ---------- + 'num' is the number of virtual YM2203s to allocate + 'clock' is the chip clock in Hz + 'rate' is sampling rate +*/ +void * YM2203Init(void *param, int index, int clock, int rate, + FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler, const struct ssg_callbacks *ssg) +{ + YM2203 *F2203; + + /* allocate ym2203 state space */ + if( (F2203 = (YM2203 *)malloc(sizeof(YM2203)))==NULL) + return NULL; + /* clear */ + memset(F2203,0,sizeof(YM2203)); + + if( !init_tables() ) + { + free( F2203 ); + return NULL; + } + + F2203->OPN.ST.param = param; + F2203->OPN.type = TYPE_YM2203; + F2203->OPN.P_CH = F2203->CH; + F2203->OPN.ST.clock = clock; + F2203->OPN.ST.rate = rate; + + F2203->OPN.ST.Timer_Handler = TimerHandler; + F2203->OPN.ST.IRQ_Handler = IRQHandler; + F2203->OPN.ST.SSG = ssg; + YM2203ResetChip(F2203); + +#ifdef __STATE_H__ + YM2203_save_state(F2203, index); +#endif + return F2203; +} + +/* shut down emulator */ +void YM2203Shutdown(void *chip) +{ + YM2203 *FM2203 = chip; + + FMCloseTable(); + free(FM2203); +} + +/* YM2203 I/O interface */ +int YM2203Write(void *chip,int a,UINT8 v) +{ + YM2203 *F2203 = chip; + FM_OPN *OPN = &F2203->OPN; + + if( !(a&1) ) + { /* address port */ + OPN->ST.address = (v &= 0xff); + + /* Write register to SSG emulator */ + if( v < 16 ) (*OPN->ST.SSG->write)(OPN->ST.param,0,v); + + /* prescaler select : 2d,2e,2f */ + if( v >= 0x2d && v <= 0x2f ) + OPNPrescaler_w(OPN , v , 1); + } + else + { /* data port */ + int addr = OPN->ST.address; + F2203->REGS[addr] = v; + switch( addr & 0xf0 ) + { + case 0x00: /* 0x00-0x0f : SSG section */ + /* Write data to SSG emulator */ + (*OPN->ST.SSG->write)(OPN->ST.param,a,v); + break; + case 0x20: /* 0x20-0x2f : Mode section */ + YM2203UpdateReq(OPN->ST.param); + /* write register */ + OPNWriteMode(OPN,addr,v); + break; + default: /* 0x30-0xff : OPN section */ + YM2203UpdateReq(OPN->ST.param); + /* write register */ + OPNWriteReg(OPN,addr,v); + } + FM_BUSY_SET(&OPN->ST,1); + } + return OPN->ST.irq; +} + +UINT8 YM2203Read(void *chip,int a) +{ + YM2203 *F2203 = chip; + int addr = F2203->OPN.ST.address; + UINT8 ret = 0; + + if( !(a&1) ) + { /* status port */ + ret = FM_STATUS_FLAG(&F2203->OPN.ST); + } + else + { /* data port (only SSG) */ + if( addr < 16 ) ret = (*F2203->OPN.ST.SSG->read)(F2203->OPN.ST.param); + } + return ret; +} + +int YM2203TimerOver(void *chip,int c) +{ + YM2203 *F2203 = chip; + + if( c ) + { /* Timer B */ + TimerBOver( &(F2203->OPN.ST) ); + } + else + { /* Timer A */ + YM2203UpdateReq(F2203->OPN.ST.param); + /* timer update */ + TimerAOver( &(F2203->OPN.ST) ); + /* CSM mode key,TL control */ + if( F2203->OPN.ST.mode & 0x80 ) + { /* CSM mode auto key on */ + CSMKeyControll( &(F2203->CH[2]) ); + } + } + return F2203->OPN.ST.irq; +} +#endif /* BUILD_YM2203 */ + + + +#if (BUILD_YM2608||BUILD_YM2610||BUILD_YM2610B) + +/* ADPCM type A channel struct */ +typedef struct +{ + UINT8 flag; /* port state */ + UINT8 flagMask; /* arrived flag mask */ + UINT8 now_data; /* current ROM data */ + UINT32 now_addr; /* current ROM address */ + UINT32 now_step; + UINT32 step; + UINT32 start; /* sample data start address*/ + UINT32 end; /* sample data end address */ + UINT8 IL; /* Instrument Level */ + INT32 adpcm_acc; /* accumulator */ + INT32 adpcm_step; /* step */ + INT32 adpcm_out; /* (speedup) hiro-shi!! */ + INT8 vol_mul; /* volume in "0.75dB" steps */ + UINT8 vol_shift; /* volume in "-6dB" steps */ + INT32 *pan; /* &out_adpcm[OPN_xxxx] */ +} ADPCM_CH; + +/* here's the virtual YM2610 */ +typedef struct +{ + UINT8 REGS[512]; /* registers */ + FM_OPN OPN; /* OPN state */ + FM_CH CH[6]; /* channel state */ + UINT8 addr_A1; /* address line A1 */ + + /* ADPCM-A unit */ + UINT8 *pcmbuf; /* pcm rom buffer */ + UINT32 pcm_size; /* size of pcm rom */ + UINT8 adpcmTL; /* adpcmA total level */ + ADPCM_CH adpcm[6]; /* adpcm channels */ + UINT32 adpcmreg[0x30]; /* registers */ + UINT8 adpcm_arrivedEndAddress; + YM_DELTAT deltaT; /* Delta-T ADPCM unit */ + + UINT8 flagmask; /* YM2608 only */ + UINT8 irqmask; /* YM2608 only */ +} YM2610; + +/* here is the virtual YM2608 */ +typedef YM2610 YM2608; + + +/**** YM2610 ADPCM defines ****/ +#define ADPCM_SHIFT (16) /* frequency step rate */ +#define ADPCMA_ADDRESS_SHIFT 8 /* adpcm A address shift */ + +static UINT8 *pcmbufA; +static UINT32 pcmsizeA; + + +/* Algorithm and tables verified on real YM2608 and YM2610 */ + +/* usual ADPCM table (16 * 1.1^N) */ +static int steps[49] = +{ + 16, 17, 19, 21, 23, 25, 28, + 31, 34, 37, 41, 45, 50, 55, + 60, 66, 73, 80, 88, 97, 107, + 118, 130, 143, 157, 173, 190, 209, + 230, 253, 279, 307, 337, 371, 408, + 449, 494, 544, 598, 658, 724, 796, + 876, 963, 1060, 1166, 1282, 1411, 1552 +}; + +/* different from the usual ADPCM table */ +static int step_inc[8] = { -1*16, -1*16, -1*16, -1*16, 2*16, 5*16, 7*16, 9*16 }; + +/* speedup purposes only */ +static int jedi_table[ 49*16 ]; + + +static void Init_ADPCMATable(void){ + + int step, nib; + + for (step = 0; step < 49; step++) + { + /* loop over all nibbles and compute the difference */ + for (nib = 0; nib < 16; nib++) + { + int value = (2*(nib & 0x07) + 1) * steps[step] / 8; + jedi_table[step*16 + nib] = (nib&0x08) ? -value : value; + } + } +} + +/* ADPCM A (Non control type) : calculate one channel output */ +INLINE void ADPCMA_calc_chan( YM2610 *F2610, ADPCM_CH *ch ) +{ + UINT32 step; + UINT8 data; + + + ch->now_step += ch->step; + if ( ch->now_step >= (1<now_step >> ADPCM_SHIFT; + ch->now_step &= (1< instead of == */ + /* YM2610 checks lower 20 bits only, the 4 MSB bits are sample bank */ + /* Here we use 1<<21 to compensate for nibble calculations */ + + if ( (ch->now_addr & ((1<<21)-1)) == ((ch->end<<1) & ((1<<21)-1)) ) + { + ch->flag = 0; + F2610->adpcm_arrivedEndAddress |= ch->flagMask; + return; + } +#if 0 + if ( ch->now_addr > (pcmsizeA<<1) ) { + LOG(LOG_WAR,("YM2610: Attempting to play past adpcm rom size!\n" )); + return; + } +#endif + if ( ch->now_addr&1 ) + data = ch->now_data & 0x0f; + else + { + ch->now_data = *(pcmbufA+(ch->now_addr>>1)); + data = (ch->now_data >> 4) & 0x0f; + } + + ch->now_addr++; + + ch->adpcm_acc += jedi_table[ch->adpcm_step + data]; + + /* extend 12-bit signed int */ + if (ch->adpcm_acc & 0x800) + ch->adpcm_acc |= ~0xfff; + else + ch->adpcm_acc &= 0xfff; + + ch->adpcm_step += step_inc[data & 7]; + Limit( ch->adpcm_step, 48*16, 0*16 ); + + }while(--step); + + /* calc pcm * volume data */ + ch->adpcm_out = ((ch->adpcm_acc * ch->vol_mul) >> ch->vol_shift) & ~3; /* multiply, shift and mask out 2 LSB bits */ + } + + /* output for work of output channels (out_adpcm[OPNxxxx])*/ + *(ch->pan) += ch->adpcm_out; +} + +/* ADPCM type A Write */ +static void FM_ADPCMAWrite(YM2610 *F2610,int r,int v) +{ + ADPCM_CH *adpcm = F2610->adpcm; + UINT8 c = r&0x07; + + F2610->adpcmreg[r] = v&0xff; /* stock data */ + switch( r ){ + case 0x00: /* DM,--,C5,C4,C3,C2,C1,C0 */ + if( !(v&0x80) ) + { + /* KEY ON */ + for( c = 0; c < 6; c++ ) + { + if( (v>>c)&1 ) + { + /**** start adpcm ****/ + adpcm[c].step = (UINT32)((float)(1<OPN.ST.freqbase)/3.0); + adpcm[c].now_addr = adpcm[c].start<<1; + adpcm[c].now_step = 0; + adpcm[c].adpcm_acc = 0; + adpcm[c].adpcm_step= 0; + adpcm[c].adpcm_out = 0; + adpcm[c].flag = 1; + + if(F2610->pcmbuf==NULL){ /* Check ROM Mapped */ + logerror("YM2608-YM2610: ADPCM-A rom not mapped\n"); + adpcm[c].flag = 0; + } else{ + if(adpcm[c].end >= F2610->pcm_size){ /* Check End in Range */ + logerror("YM2610: ADPCM-A end out of range: $%08x\n",adpcm[c].end); + /*adpcm[c].end = F2610->pcm_size-1;*/ /* JB: DO NOT uncomment this, otherwise you will break the comparison in the ADPCM_CALC_CHA() */ + } + if(adpcm[c].start >= F2610->pcm_size) /* Check Start in Range */ + { + logerror("YM2608-YM2610: ADPCM-A start out of range: $%08x\n",adpcm[c].start); + adpcm[c].flag = 0; + } + } + } + } + } + else + { + /* KEY OFF */ + for( c = 0; c < 6; c++ ) + if( (v>>c)&1 ) + adpcm[c].flag = 0; + } + break; + case 0x01: /* B0-5 = TL */ + F2610->adpcmTL = (v & 0x3f) ^ 0x3f; + for( c = 0; c < 6; c++ ) + { + int volume = F2610->adpcmTL + adpcm[c].IL; + + if ( volume >= 63 ) /* This is correct, 63 = quiet */ + { + adpcm[c].vol_mul = 0; + adpcm[c].vol_shift = 0; + } + else + { + adpcm[c].vol_mul = 15 - (volume & 7); /* so called 0.75 dB */ + adpcm[c].vol_shift = 1 + (volume >> 3); /* Yamaha engineers used the approximation: each -6 dB is close to divide by two (shift right) */ + } + + /* calc pcm * volume data */ + adpcm[c].adpcm_out = ((adpcm[c].adpcm_acc * adpcm[c].vol_mul) >> adpcm[c].vol_shift) & ~3; /* multiply, shift and mask out low 2 bits */ + } + break; + default: + c = r&0x07; + if( c >= 0x06 ) return; + switch( r&0x38 ){ + case 0x08: /* B7=L,B6=R, B4-0=IL */ + { + int volume; + + adpcm[c].IL = (v & 0x1f) ^ 0x1f; + + volume = F2610->adpcmTL + adpcm[c].IL; + + if ( volume >= 63 ) /* This is correct, 63 = quiet */ + { + adpcm[c].vol_mul = 0; + adpcm[c].vol_shift = 0; + } + else + { + adpcm[c].vol_mul = 15 - (volume & 7); /* so called 0.75 dB */ + adpcm[c].vol_shift = 1 + (volume >> 3); /* Yamaha engineers used the approximation: each -6 dB is close to divide by two (shift right) */ + } + + adpcm[c].pan = &out_adpcm[(v>>6)&0x03]; + + /* calc pcm * volume data */ + adpcm[c].adpcm_out = ((adpcm[c].adpcm_acc * adpcm[c].vol_mul) >> adpcm[c].vol_shift) & ~3; /* multiply, shift and mask out low 2 bits */ + } + break; + case 0x10: + case 0x18: + adpcm[c].start = ( (F2610->adpcmreg[0x18 + c]*0x0100 | F2610->adpcmreg[0x10 + c]) << ADPCMA_ADDRESS_SHIFT); + break; + case 0x20: + case 0x28: + adpcm[c].end = ( (F2610->adpcmreg[0x28 + c]*0x0100 | F2610->adpcmreg[0x20 + c]) << ADPCMA_ADDRESS_SHIFT); + adpcm[c].end += (1<flag); + state_save_register_item(state_name, num, adpcm->now_data); + state_save_register_item(state_name, num, adpcm->now_addr); + state_save_register_item(state_name, num, adpcm->now_step); + state_save_register_item(state_name, num, adpcm->adpcm_acc); + state_save_register_item(state_name, num, adpcm->adpcm_step); + state_save_register_item(state_name, num, adpcm->adpcm_out); + } +} +#endif /* _STATE_H */ + +#endif /* (BUILD_YM2608||BUILD_YM2610||BUILD_YM2610B) */ + + +#if BUILD_YM2608 +/*****************************************************************************/ +/* YM2608 local section */ +/*****************************************************************************/ + + + +static unsigned int YM2608_ADPCM_ROM_addr[2*6] = { +0x0000, 0x01bf, /* bass drum */ +0x01c0, 0x043f, /* snare drum */ +0x0440, 0x1b7f, /* top cymbal */ +0x1b80, 0x1cff, /* high hat */ +0x1d00, 0x1f7f, /* tom tom */ +0x1f80, 0x1fff /* rim shot */ +}; + + +/* + This data is derived from the chip's output - internal ROM can't be read. + It was verified, using real YM2608, that this ADPCM stream produces 100% correct output signal. +*/ + +static unsigned char YM2608_ADPCM_ROM[0x2000] = { + +/* Source: 01BD.ROM */ +/* Length: 448 / 0x000001C0 */ + +0x88,0x08,0x08,0x08,0x00,0x88,0x16,0x76,0x99,0xB8,0x22,0x3A,0x84,0x3C,0xB1,0x54, +0x10,0xA9,0x98,0x32,0x80,0x33,0x9A,0xA7,0x4A,0xB4,0x58,0xBC,0x15,0x29,0x8A,0x97, +0x9B,0x44,0xAC,0x80,0x12,0xDE,0x13,0x1B,0xC0,0x58,0xC8,0x11,0x0A,0xA2,0x1A,0xA0, +0x00,0x98,0x0B,0x93,0x9E,0x92,0x0A,0x88,0xBE,0x14,0x1B,0x98,0x08,0xA1,0x4A,0xC1, +0x30,0xD9,0x33,0x98,0x10,0x89,0x17,0x1A,0x82,0x29,0x37,0x0C,0x83,0x50,0x9A,0x24, +0x1A,0x83,0x10,0x23,0x19,0xB3,0x72,0x8A,0x16,0x10,0x0A,0x93,0x70,0x99,0x23,0x99, +0x02,0x20,0x91,0x18,0x02,0x41,0xAB,0x24,0x18,0x81,0x99,0x4A,0xE8,0x28,0x9A,0x99, +0xA1,0x2F,0xA8,0x9D,0x90,0x08,0xCC,0xA3,0x1D,0xCA,0x82,0x0B,0xD8,0x08,0xB9,0x09, +0xBC,0xB8,0x00,0xBE,0x90,0x1B,0xCA,0x00,0x9B,0x8A,0xA8,0x91,0x0F,0xB3,0x3D,0xB8, +0x31,0x0B,0xA5,0x0A,0x11,0xA1,0x48,0x92,0x10,0x50,0x91,0x30,0x23,0x09,0x37,0x39, +0xA2,0x72,0x89,0x92,0x30,0x83,0x1C,0x96,0x28,0xB9,0x24,0x8C,0xA1,0x31,0xAD,0xA9, +0x13,0x9C,0xBA,0xA8,0x0B,0xBF,0xB8,0x9B,0xCA,0x88,0xDB,0xB8,0x19,0xFC,0x92,0x0A, +0xBA,0x89,0xAB,0xB8,0xAB,0xD8,0x08,0xAD,0xBA,0x33,0x9D,0xAA,0x83,0x3A,0xC0,0x40, +0xB9,0x15,0x39,0xA2,0x52,0x89,0x02,0x63,0x88,0x13,0x23,0x03,0x52,0x02,0x54,0x00, +0x11,0x23,0x23,0x35,0x20,0x01,0x44,0x41,0x80,0x24,0x40,0xA9,0x45,0x19,0x81,0x12, +0x81,0x02,0x11,0x21,0x19,0x02,0x61,0x8A,0x13,0x3A,0x10,0x12,0x23,0x8B,0x37,0x18, +0x91,0x24,0x10,0x81,0x34,0x20,0x05,0x32,0x82,0x53,0x20,0x14,0x33,0x31,0x34,0x52, +0x00,0x43,0x32,0x13,0x52,0x22,0x13,0x52,0x11,0x43,0x11,0x32,0x32,0x32,0x22,0x02, +0x13,0x12,0x89,0x22,0x19,0x81,0x81,0x08,0xA8,0x08,0x8B,0x90,0x1B,0xBA,0x8A,0x9B, +0xB9,0x89,0xCA,0xB9,0xAB,0xCA,0x9B,0xCA,0xB9,0xAB,0xDA,0x99,0xAC,0xBB,0x9B,0xAC, +0xAA,0xBA,0xAC,0xAB,0x9A,0xAA,0xAA,0xBA,0xB8,0xA9,0xBA,0x99,0xA9,0x9A,0xA0,0x8A, +0xA9,0x08,0x8A,0xA9,0x00,0x99,0x89,0x88,0x98,0x08,0x99,0x00,0x89,0x80,0x08,0x98, +0x00,0x88,0x88,0x80,0x90,0x80,0x90,0x80,0x81,0x99,0x08,0x88,0x99,0x09,0x00,0x1A, +0xA8,0x10,0x9A,0x88,0x08,0x0A,0x8A,0x89,0x99,0xA8,0x98,0xA9,0x99,0x99,0xA9,0x99, +0xAA,0x8A,0xAA,0x9B,0x8A,0x9A,0xA9,0x9A,0xBA,0x99,0x9A,0xAA,0x99,0x89,0xA9,0x99, +0x98,0x9A,0x98,0x88,0x09,0x89,0x09,0x08,0x08,0x09,0x18,0x18,0x00,0x12,0x00,0x11, +0x11,0x11,0x12,0x12,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x32,0x31,0x32,0x31, +0x32,0x32,0x21,0x31,0x21,0x32,0x21,0x12,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + +/* Source: 02SD.ROM */ +/* Length: 640 / 0x00000280 */ + +0x0A,0xDC,0x14,0x0B,0xBA,0xBC,0x01,0x0F,0xF5,0x2F,0x87,0x19,0xC9,0x24,0x1B,0xA1, +0x31,0x99,0x90,0x32,0x32,0xFE,0x83,0x48,0xA8,0xA9,0x23,0x19,0xBC,0x91,0x02,0x41, +0xDE,0x81,0x28,0xA8,0x0A,0xB1,0x72,0xDA,0x23,0xBC,0x04,0x19,0xB8,0x21,0x8A,0x03, +0x29,0xBA,0x14,0x21,0x0B,0xC0,0x43,0x08,0x91,0x50,0x93,0x0F,0x86,0x1A,0x91,0x18, +0x21,0xCB,0x27,0x0A,0xA1,0x42,0x8C,0xA9,0x21,0x10,0x08,0xAB,0x94,0x2A,0xDA,0x02, +0x8B,0x91,0x09,0x98,0xAE,0x80,0xA9,0x02,0x0A,0xE9,0x21,0xBB,0x15,0x20,0xBE,0x92, +0x42,0x09,0xA9,0x11,0x34,0x08,0x12,0x0A,0x27,0x29,0xA1,0x52,0x12,0x8E,0x92,0x28, +0x92,0x2B,0xD1,0x23,0xBF,0x81,0x10,0x99,0xA8,0x0A,0xC4,0x3B,0xB9,0xB0,0x00,0x62, +0xCF,0x92,0x29,0x92,0x2B,0xB1,0x1C,0xB2,0x72,0xAA,0x88,0x11,0x18,0x80,0x13,0x9E, +0x03,0x18,0xB0,0x60,0xA1,0x28,0x88,0x08,0x04,0x10,0x8F,0x96,0x19,0x90,0x01,0x09, +0xC8,0x50,0x91,0x8A,0x01,0xAB,0x03,0x50,0xBA,0x9D,0x93,0x68,0xBA,0x80,0x22,0xCB, +0x41,0xBC,0x92,0x60,0xB9,0x1A,0x95,0x4A,0xC8,0x20,0x88,0x33,0xAC,0x92,0x38,0x83, +0x09,0x80,0x16,0x09,0x29,0xD0,0x54,0x8C,0xA2,0x28,0x91,0x89,0x93,0x60,0xCD,0x85, +0x1B,0xA1,0x49,0x90,0x8A,0x80,0x34,0x0C,0xC9,0x14,0x19,0x98,0xA0,0x40,0xA9,0x21, +0xD9,0x34,0x0A,0xA9,0x10,0x23,0xCB,0x25,0xAA,0x25,0x9B,0x13,0xCD,0x16,0x09,0xA0, +0x80,0x01,0x19,0x90,0x88,0x21,0xAC,0x33,0x8B,0xD8,0x27,0x3B,0xB8,0x81,0x31,0x80, +0xAF,0x97,0x0A,0x82,0x0A,0xA0,0x21,0x89,0x8A,0xA2,0x32,0x8D,0xBB,0x87,0x19,0x21, +0xC9,0xBC,0x45,0x09,0x90,0x09,0xA1,0x24,0x1A,0xD0,0x10,0x08,0x11,0xA9,0x21,0xE8, +0x60,0xA9,0x14,0x0C,0xD1,0x32,0xAB,0x04,0x0C,0x81,0x90,0x29,0x83,0x9B,0x01,0x8F, +0x97,0x0B,0x82,0x18,0x88,0xBA,0x06,0x39,0xC8,0x23,0xBC,0x04,0x09,0x92,0x08,0x1A, +0xBB,0x74,0x8C,0x81,0x18,0x81,0x9D,0x83,0x41,0xCD,0x81,0x40,0x9A,0x90,0x10,0x12, +0x9C,0xA1,0x68,0xD8,0x33,0x9C,0x91,0x01,0x12,0xBE,0x02,0x09,0x12,0x99,0x9A,0x36, +0x0A,0xB0,0x30,0x88,0xA3,0x2D,0x12,0xBC,0x03,0x3A,0x11,0xBD,0x08,0xC8,0x62,0x80, +0x8B,0xD8,0x23,0x38,0xF9,0x12,0x08,0x99,0x91,0x21,0x99,0x85,0x2F,0xB2,0x30,0x90, +0x88,0xD9,0x53,0xAC,0x82,0x19,0x91,0x20,0xCC,0x96,0x29,0xC9,0x24,0x89,0x80,0x99, +0x12,0x08,0x18,0x88,0x99,0x23,0xAB,0x73,0xCB,0x33,0x9F,0x04,0x2B,0xB1,0x08,0x03, +0x1B,0xC9,0x21,0x32,0xFA,0x33,0xDB,0x02,0x33,0xAE,0xB9,0x54,0x8B,0xA1,0x20,0x89, +0x90,0x11,0x88,0x09,0x98,0x23,0xBE,0x37,0x8D,0x81,0x20,0xAA,0x34,0xBB,0x13,0x18, +0xB9,0x40,0xB1,0x18,0x83,0x8E,0xB2,0x72,0xBC,0x82,0x30,0xA9,0x9A,0x24,0x8B,0x27, +0x0E,0x91,0x20,0x90,0x08,0xB0,0x32,0xB9,0x21,0xB0,0xAC,0x45,0x9A,0xA1,0x50,0xA9, +0x80,0x0A,0x26,0x9B,0x11,0xBB,0x23,0x71,0xCB,0x12,0x10,0xB8,0x40,0xA9,0xA5,0x39, +0xC0,0x30,0xB2,0x20,0xAA,0xBA,0x76,0x1C,0xC1,0x48,0x98,0x80,0x18,0x81,0xAA,0x23, +0x9C,0xA2,0x32,0xAC,0x9A,0x43,0x9C,0x12,0xAD,0x82,0x72,0xBC,0x00,0x82,0x39,0xD1, +0x3A,0xB8,0x35,0x9B,0x10,0x40,0xF9,0x22,0x0A,0xC0,0x51,0xB9,0x82,0x18,0x98,0xA3, +0x79,0xD0,0x20,0x88,0x09,0x01,0x99,0x82,0x11,0x38,0xFC,0x33,0x09,0xC8,0x40,0xA9, +0x11,0x29,0xAA,0x94,0x3A,0xC2,0x4A,0xC0,0x89,0x52,0xBC,0x11,0x08,0x09,0xB8,0x71, +0xA9,0x08,0xA8,0x62,0x8D,0x92,0x10,0x00,0x9E,0x94,0x38,0xBA,0x13,0x88,0x90,0x4A, +0xE2,0x30,0xBA,0x02,0x00,0x19,0xD9,0x62,0xBB,0x04,0x0B,0xA3,0x68,0xB9,0x21,0x88, +0x9D,0x04,0x10,0x8C,0xC8,0x62,0x99,0xAA,0x24,0x1A,0x80,0x9A,0x14,0x9B,0x26,0x8C, +0x92,0x30,0xB9,0x09,0xA3,0x71,0xBB,0x10,0x19,0x82,0x39,0xDB,0x02,0x44,0x9F,0x10, + +/* Source: 04TOP.ROM */ +/* Length: 5952 / 0x00001740 */ + +0x07,0xFF,0x7C,0x3C,0x31,0xC6,0xC4,0xBB,0x7F,0x7F,0x7B,0x82,0x8A,0x4D,0x5F,0x7C, +0x3E,0x44,0xD2,0xB3,0xA0,0x19,0x1B,0x6C,0x81,0x28,0xC4,0xA1,0x1C,0x4B,0x18,0x00, +0x2A,0xA2,0x0A,0x7C,0x2A,0x00,0x01,0x89,0x98,0x48,0x8A,0x3C,0x28,0x2A,0x5B,0x3E, +0x3A,0x1A,0x3B,0x3D,0x4B,0x3B,0x4A,0x08,0x2A,0x1A,0x2C,0x4A,0x3B,0x82,0x99,0x3C, +0x5D,0x29,0x2B,0x39,0x0B,0x23,0xAB,0x1A,0x4C,0x79,0xA3,0x01,0xC1,0x2A,0x0A,0x38, +0xA7,0xB9,0x12,0x1F,0x29,0x08,0x82,0xA1,0x08,0xA9,0x42,0xAA,0x95,0xB3,0x90,0x81, +0x09,0xD4,0x1A,0x80,0x1B,0x07,0xB8,0x12,0x8E,0x49,0x81,0x92,0xD3,0x90,0xA1,0x2A, +0x02,0xE1,0xA3,0x99,0x02,0xB3,0x94,0xB3,0xB0,0xF4,0x98,0x93,0x90,0x13,0xE1,0x81, +0x99,0x38,0x91,0xA6,0xD3,0x99,0x94,0xC1,0x83,0xB1,0x92,0x98,0x49,0xC4,0xB2,0xA4, +0xA3,0xD0,0x1A,0x30,0xBA,0x59,0x02,0xD4,0xA0,0xA4,0xA2,0x8A,0x01,0x00,0xB7,0xA8, +0x18,0x2A,0x2B,0x1E,0x23,0xC8,0x1A,0x00,0x39,0xA0,0x18,0x92,0x4F,0x2D,0x5A,0x10, +0x89,0x81,0x2A,0x8B,0x6A,0x02,0x09,0xB3,0x8D,0x48,0x1B,0x80,0x19,0x34,0xF8,0x29, +0x0A,0x7B,0x2A,0x28,0x81,0x0C,0x02,0x1E,0x29,0x09,0x12,0xC2,0x94,0xE1,0x18,0x98, +0x02,0xC4,0x89,0x91,0x1A,0x20,0xA9,0x02,0x1B,0x48,0x8E,0x20,0x88,0x2D,0x08,0x59, +0x1B,0x02,0xA3,0xB1,0x8A,0x1E,0x58,0x80,0xC2,0xB6,0x88,0x91,0x88,0x11,0xA1,0xA3, +0xE2,0x01,0xB0,0x19,0x11,0x09,0xF4,0x88,0x09,0x88,0x19,0x89,0x12,0xF1,0x2A,0x28, +0x8C,0x25,0x99,0xA4,0x98,0x39,0xA1,0x00,0xD0,0x58,0xAA,0x59,0x01,0x0C,0x00,0x2B, +0x00,0x08,0x89,0x6B,0x69,0x90,0x01,0x90,0x98,0x12,0xB3,0xF3,0xA0,0x89,0x02,0x3B, +0x0C,0x50,0xA9,0x4E,0x6B,0x19,0x28,0x09,0xA2,0x08,0x2F,0x20,0x88,0x92,0x8A,0x11, +0xC4,0x93,0xF1,0x18,0x88,0x11,0xF2,0x80,0x92,0xA8,0x02,0xA8,0xB7,0xB3,0xA3,0xA0, +0x88,0x1A,0x40,0xE2,0x91,0x19,0x88,0x18,0x91,0x83,0xC1,0xB5,0x92,0xA9,0xC6,0x90, +0x01,0xC2,0x81,0x98,0x03,0xF0,0x00,0x2C,0x2A,0x92,0x2C,0x83,0x1F,0x3A,0x29,0x00, +0xB8,0x70,0xAB,0x69,0x18,0x89,0x10,0x0D,0x12,0x0B,0x88,0x4A,0x3A,0x9B,0x70,0xA8, +0x28,0x2F,0x2A,0x3A,0x1B,0x85,0x88,0x8B,0x6A,0x29,0x00,0x91,0x91,0x1B,0x7C,0x29, +0x01,0x88,0x90,0x19,0x2B,0x2B,0x00,0x39,0xA8,0x5E,0x21,0x89,0x91,0x09,0x3A,0x6F, +0x2A,0x18,0x18,0x8B,0x50,0x89,0x2B,0x19,0x49,0x88,0x29,0xF5,0x89,0x08,0x09,0x12, +0xAA,0x15,0xB0,0x82,0xAC,0x38,0x00,0x3F,0x81,0x10,0xB0,0x49,0xA2,0x81,0x3A,0xC8, +0x87,0x90,0xC4,0xA3,0x99,0x19,0x83,0xE1,0x84,0xE2,0xA2,0x90,0x80,0x93,0xB5,0xC4, +0xB3,0xA1,0x0A,0x18,0x92,0xC4,0xA0,0x93,0x0C,0x3A,0x18,0x01,0x1E,0x20,0xB1,0x82, +0x8C,0x03,0xB5,0x2E,0x82,0x19,0xB2,0x1B,0x1B,0x6B,0x4C,0x19,0x12,0x8B,0x5A,0x11, +0x0C,0x3A,0x2C,0x18,0x3D,0x08,0x2A,0x5C,0x18,0x00,0x88,0x3D,0x29,0x80,0x2A,0x09, +0x00,0x7A,0x0A,0x10,0x0B,0x69,0x98,0x10,0x81,0x3F,0x00,0x18,0x19,0x91,0xB7,0x9A, +0x28,0x8A,0x48,0x92,0xF3,0xA2,0x88,0x98,0x87,0xA1,0x88,0x80,0x81,0x95,0xD1,0xA3, +0x1B,0x1C,0x39,0x10,0xA1,0x2A,0x0B,0x7A,0x4B,0x80,0x13,0xC1,0xD1,0x2B,0x2A,0x85, +0xB2,0xA2,0x93,0xB2,0xD3,0x80,0xD1,0x18,0x08,0x08,0xB7,0x98,0x81,0x3F,0x01,0x88, +0x01,0xE2,0x00,0x9A,0x59,0x08,0x10,0xC3,0x99,0x84,0xA9,0xA5,0x91,0x91,0x91,0x80, +0xB5,0x94,0xC0,0x01,0x98,0x09,0x84,0xB0,0x80,0x7A,0x08,0x18,0x90,0xA8,0x6A,0x1C, +0x39,0x2A,0xB7,0x98,0x19,0x10,0x2A,0xA1,0x10,0xBD,0x39,0x18,0x2D,0x39,0x3F,0x10, +0x3F,0x01,0x09,0x19,0x0A,0x38,0x8C,0x40,0xB3,0xB4,0x93,0xAD,0x20,0x2B,0xD4,0x81, +0xC3,0xB0,0x39,0xA0,0x23,0xD8,0x04,0xB1,0x9B,0xA7,0x1A,0x92,0x08,0xA5,0x88,0x81, +0xE2,0x01,0xB8,0x01,0x81,0xC1,0xC7,0x90,0x92,0x80,0xA1,0x97,0xA0,0xA2,0x82,0xB8, +0x18,0x00,0x9C,0x78,0x98,0x83,0x0B,0x0B,0x32,0x7D,0x19,0x10,0xA1,0x19,0x09,0x0A, +0x78,0xA8,0x10,0x1B,0x29,0x29,0x1A,0x14,0x2F,0x88,0x4A,0x1B,0x10,0x10,0xAB,0x79, +0x0D,0x49,0x18,0xA0,0x02,0x1F,0x19,0x3A,0x2B,0x11,0x8A,0x88,0x79,0x8A,0x20,0x49, +0x9B,0x58,0x0B,0x28,0x18,0xA9,0x3A,0x7D,0x00,0x29,0x88,0x82,0x3D,0x1A,0x38,0xBA, +0x15,0x09,0xAA,0x51,0x8B,0x83,0x3C,0x8A,0x58,0x1B,0xB5,0x01,0xBB,0x50,0x19,0x99, +0x24,0xCA,0x21,0x1B,0xA2,0x87,0xA8,0xB1,0x68,0xA1,0xA6,0xA2,0xA8,0x29,0x8B,0x24, +0xB4,0xE2,0x92,0x8A,0x00,0x19,0x93,0xB5,0xB4,0xB1,0x81,0xB1,0x03,0x9A,0x82,0xA7, +0x90,0xD6,0xA0,0x80,0x1B,0x29,0x01,0xA4,0xE1,0x18,0x0A,0x2A,0x29,0x92,0xC7,0xA8, +0x81,0x19,0x89,0x30,0x10,0xE0,0x30,0xB8,0x10,0x0C,0x1A,0x79,0x1B,0xA7,0x80,0xA0, +0x00,0x0B,0x28,0x18,0xB1,0x85,0x1E,0x00,0x20,0xA9,0x18,0x18,0x1C,0x13,0xBC,0x15, +0x99,0x2E,0x12,0x00,0xE1,0x00,0x0B,0x3B,0x21,0x90,0x06,0xC9,0x2A,0x49,0x0A,0x18, +0x20,0xD1,0x3C,0x08,0x00,0x83,0xC9,0x41,0x8E,0x18,0x08,0x02,0xA0,0x09,0xA4,0x7B, +0x90,0x19,0x2A,0x10,0x2A,0xA8,0x71,0xBA,0x10,0x4A,0x0E,0x22,0xB2,0xB2,0x1B,0x8C, +0x78,0x1A,0xB5,0x93,0xA9,0x1B,0x49,0x19,0x29,0xA3,0xC6,0x88,0xAA,0x32,0x0D,0x1B, +0x22,0x08,0xC2,0x18,0xB9,0x79,0x3F,0x01,0x10,0xA9,0x84,0x1C,0x09,0x21,0xB0,0xA7, +0x0A,0x99,0x50,0x0C,0x81,0x28,0x8B,0x48,0x2E,0x00,0x08,0x99,0x38,0x5B,0x88,0x14, +0xA9,0x08,0x11,0xAA,0x72,0xC1,0xB3,0x09,0x8A,0x05,0x91,0xF2,0x81,0xA1,0x09,0x02, +0xF2,0x92,0x99,0x1A,0x49,0x80,0xC5,0x90,0x90,0x18,0x09,0x12,0xA1,0xF2,0x81,0x98, +0xC6,0x91,0xA0,0x11,0xA0,0x94,0xB4,0xF2,0x81,0x8B,0x03,0x80,0xD2,0x93,0xA8,0x88, +0x69,0xA0,0x03,0xB8,0x88,0x32,0xBC,0x97,0x80,0xB1,0x3B,0x1A,0xA6,0x00,0xD1,0x01, +0x0B,0x3B,0x30,0x9B,0x31,0x3E,0x92,0x19,0x8A,0xD3,0x5C,0x1B,0x41,0xA0,0x93,0xA2, +0xAF,0x39,0x4C,0x01,0x92,0xA8,0x81,0x3C,0x0D,0x78,0x98,0x00,0x19,0x0A,0x20,0x2D, +0x29,0x3C,0x1B,0x48,0x88,0x99,0x7A,0x2D,0x29,0x2A,0x82,0x80,0xA8,0x49,0x3E,0x19, +0x11,0x98,0x82,0x9A,0x3B,0x28,0x2F,0x20,0x4C,0x90,0x29,0x19,0x9A,0x7A,0x29,0x28, +0x98,0x88,0x33,0xCD,0x11,0x3A,0xC1,0xA4,0xA0,0xC4,0x82,0xC8,0x50,0x98,0xB2,0x21, +0xC0,0xB6,0x98,0x82,0x80,0x9C,0x23,0x00,0xF8,0x30,0xA8,0x1A,0x68,0xA8,0x86,0x9A, +0x01,0x2A,0x0A,0x97,0x91,0xC1,0x18,0x89,0x02,0x83,0xE0,0x01,0x8B,0x29,0x30,0xE2, +0x91,0x0B,0x18,0x3B,0x1C,0x11,0x28,0xAC,0x78,0x80,0x93,0x91,0xA9,0x49,0x8B,0x87, +0x90,0x99,0x3D,0x5A,0x81,0x08,0xA1,0x11,0x2F,0x1A,0x21,0x9B,0x15,0xA2,0xB0,0x11, +0xC0,0x91,0x5B,0x98,0x24,0xA2,0xF2,0x92,0x8B,0x6A,0x18,0x81,0xB5,0xB1,0x88,0x4C, +0x00,0x00,0xA4,0xC1,0x2B,0x1A,0x59,0x0A,0x02,0x80,0x1E,0x02,0x08,0xB3,0x80,0x9A, +0x23,0xB8,0xF2,0x84,0xAB,0x01,0x48,0x90,0xA7,0x90,0x0A,0x29,0x09,0x95,0x99,0xA0, +0x59,0x2B,0x00,0x97,0xB0,0x29,0x89,0x2A,0x03,0xD0,0xB7,0x1B,0x81,0x00,0xA6,0xB1, +0x90,0x09,0x48,0xC0,0x11,0x00,0x8A,0x00,0x5B,0x83,0x9A,0x18,0x2F,0x3C,0x18,0x11, +0xA9,0x04,0x1A,0x4F,0x01,0x98,0x81,0x09,0x09,0x4A,0x18,0xB4,0xA2,0x0B,0x59,0x90, +0x3B,0x49,0xBC,0x40,0x6A,0x88,0x3A,0x08,0x3E,0x3A,0x80,0x93,0xB0,0xE1,0x5A,0x00, +0xA4,0xB3,0xE3,0x90,0x0D,0x38,0x09,0x82,0xC4,0xA1,0xB1,0x4C,0x18,0x10,0x91,0xB2, +0x13,0xEA,0x34,0x99,0x88,0xA6,0x89,0x92,0x91,0xC1,0x20,0xB2,0xC2,0x86,0xD2,0xB3, +0x80,0xB2,0x08,0x09,0x87,0x91,0xC0,0x11,0x89,0x90,0x28,0xB9,0x79,0x19,0xA4,0x82, +0xD0,0x03,0x0C,0xA3,0xA5,0xB2,0xB2,0x1B,0x29,0x13,0xF1,0xB4,0x81,0x9D,0x38,0x00, +0xC4,0xA1,0x89,0x59,0x1A,0x81,0xA4,0xA9,0x1C,0x6A,0x19,0x02,0xB1,0x1A,0x4A,0x0B, +0x78,0x89,0x81,0x1C,0x2A,0x29,0x4A,0xA3,0x3E,0x1C,0x49,0x1A,0x08,0x21,0xAE,0x28, +0x4B,0x19,0x20,0x8C,0x10,0x3A,0xAB,0x26,0x8B,0x18,0x59,0x99,0x13,0xA2,0xAB,0x79, +0x2F,0x18,0x10,0xB2,0x80,0x1B,0x4D,0x5A,0x80,0x82,0x98,0x81,0x80,0x09,0xA5,0x90, +0x91,0x03,0xC2,0xE2,0x81,0xA8,0x82,0x09,0xC6,0xA3,0xB1,0x08,0x5B,0x08,0x05,0xD1, +0xA2,0x89,0x2A,0x28,0x91,0xA6,0x88,0xB0,0x49,0x80,0x09,0x08,0x88,0x07,0xB8,0x05, +0x99,0x81,0x88,0x18,0xE2,0x00,0xC3,0x18,0x0D,0x10,0x30,0xD0,0x93,0x8A,0x09,0x10, +0x2F,0x11,0x90,0xA1,0x20,0x9B,0xB1,0x73,0xC8,0x94,0x98,0x3B,0x01,0x0C,0x30,0x19, +0xF8,0x12,0x90,0xBA,0x78,0x0A,0x11,0x98,0xA0,0x79,0x8A,0x30,0x2B,0xC2,0x11,0x0D, +0x09,0x7A,0x00,0x82,0xB9,0x01,0x7A,0x89,0x21,0x09,0xA1,0x0A,0x7C,0x10,0x88,0xB5, +0x88,0x0A,0x2B,0x69,0x1A,0x10,0xA0,0x5B,0x19,0x1A,0x10,0x19,0x1A,0x6C,0x20,0x90, +0xA5,0x98,0x1B,0x0A,0x69,0x82,0xD1,0x18,0x09,0x19,0x2A,0x93,0xD4,0x9A,0x01,0x49, +0xA2,0xA2,0x82,0xD8,0x22,0xAA,0x97,0xA9,0x2D,0x38,0x2A,0xB6,0x80,0x90,0x0A,0x3C, +0x82,0x94,0xB8,0x21,0x0E,0x2A,0x22,0xB8,0x00,0x4F,0x2B,0x3A,0x81,0xA1,0x29,0x2C, +0x6A,0x13,0xD1,0xA2,0x98,0x28,0x0C,0x01,0xD5,0x08,0xA9,0x31,0xB3,0xB0,0xA7,0xB0, +0x29,0x1B,0x87,0xA2,0xA1,0xB2,0x4A,0x89,0x11,0xC3,0xF3,0x98,0x08,0x03,0xA0,0xA3, +0xC5,0x90,0xB3,0xB5,0xB4,0xB8,0x02,0x91,0x91,0xD3,0xA4,0xC1,0x1B,0x82,0x28,0xA4, +0xD1,0x94,0x8A,0x28,0x08,0x03,0xE0,0x80,0xD4,0x90,0x91,0xA1,0x3B,0x3D,0x02,0xE4, +0xA1,0x92,0x89,0x1A,0x4B,0x95,0xB3,0x90,0x99,0x6A,0x0A,0x30,0xA1,0x93,0xA6,0xA9, +0x85,0x8B,0x82,0x10,0xB1,0xA3,0x94,0xF8,0x38,0x9A,0x30,0x1A,0x8B,0xA7,0x89,0x01, +0x5B,0x19,0x18,0x11,0xF0,0x18,0x1C,0x39,0x19,0x0C,0x12,0x1C,0x2A,0x7B,0x3A,0x88, +0x2B,0x18,0x2B,0x5C,0x20,0x92,0x8D,0x38,0x8A,0x3A,0x5B,0x2E,0x3A,0x2B,0x10,0x12, +0xBB,0x6A,0x4D,0x18,0x10,0xB1,0x81,0x2A,0x8B,0x79,0x80,0x01,0x0A,0x09,0x5B,0x2D, +0x84,0x8A,0x08,0x02,0xA2,0x91,0x82,0xE8,0x50,0x9B,0x85,0xA3,0xB0,0xA3,0x1B,0x02, +0x18,0xF3,0xA2,0x88,0xAB,0x53,0xD1,0xB4,0xA3,0x09,0x09,0x18,0xD4,0x08,0xB0,0x09, +0x58,0xD1,0x82,0x89,0x81,0x1A,0x18,0x05,0xB9,0xC3,0x30,0xC0,0x95,0x80,0xC3,0x89, +0x89,0x13,0x88,0xF2,0x93,0x0E,0x18,0x01,0x92,0xA5,0xB8,0x2A,0x39,0xAA,0x33,0x9A, +0xB1,0x11,0xF5,0xA1,0xA1,0x0A,0x50,0xB8,0x03,0xC4,0xA0,0x4E,0x29,0x10,0x88,0xC2, +0x1A,0x39,0x1D,0x28,0x98,0x94,0x0E,0x10,0x2A,0x3C,0x02,0x2D,0x1B,0x4B,0x3B,0x49, +0x19,0xA9,0x48,0x2F,0x29,0x10,0x89,0x02,0x0C,0x10,0x09,0xB9,0x70,0x1B,0x8A,0x50, +0xA8,0x2B,0x49,0x89,0x69,0x88,0x95,0x89,0x90,0x92,0x4C,0x19,0x82,0xC1,0x01,0x80, +0xA0,0x2B,0x7A,0x81,0x10,0xC2,0xB7,0x98,0x88,0x19,0x2C,0x03,0xB1,0xA4,0xA1,0x0C, +0x3B,0x78,0x88,0x85,0xB1,0xA0,0x1B,0x3A,0x4A,0x08,0x94,0x81,0xF1,0x80,0x00,0x0C, +0x59,0x09,0x18,0x90,0xA6,0x92,0x8C,0x1A,0x79,0x92,0xA8,0x00,0x81,0x2E,0x2A,0x13, +0xA2,0xB0,0xA5,0x88,0x88,0x89,0x11,0x19,0xA0,0xF3,0x82,0xB0,0x83,0x5F,0x2A,0x01, +0xA1,0x94,0xB0,0x09,0x78,0x98,0xA3,0xA6,0xA0,0x91,0x80,0x93,0x98,0xC1,0x12,0x18, +0xC9,0x17,0xA0,0xA0,0x1A,0x21,0x80,0x99,0xD4,0x30,0x9D,0x00,0x10,0x2F,0x08,0x1C, +0x21,0x08,0xB4,0xC3,0x2B,0xA9,0x52,0xD2,0xA3,0xD1,0x09,0x10,0x8B,0x24,0x92,0xD1, +0x80,0x19,0xA0,0x2C,0x12,0x49,0xAA,0xB6,0x95,0xB8,0x08,0x3A,0x2B,0x01,0xF3,0xB3, +0x0B,0x09,0x79,0x18,0xA2,0xA4,0xA0,0x18,0x0C,0x20,0x08,0xA9,0x16,0x0C,0x00,0x1B, +0x08,0x2B,0x7B,0x01,0x01,0xB9,0x59,0x19,0x8B,0x45,0xA8,0x80,0x0C,0x1A,0x41,0x1E, +0x00,0x28,0xA8,0x5A,0x00,0xC1,0x49,0x99,0x21,0x1D,0x08,0x85,0x99,0x95,0x89,0x90, +0x11,0x90,0xD1,0x28,0xB2,0xA7,0x99,0x81,0x02,0xAC,0x13,0x81,0xB2,0xA6,0xA9,0x28, +0x1C,0xB1,0x33,0xD1,0xC1,0x58,0xA8,0x14,0xB0,0xB7,0x91,0xA0,0x82,0x89,0xC2,0x28, +0xA1,0xB2,0x49,0xD2,0x94,0xC8,0x12,0x80,0x99,0x85,0x08,0xD3,0x09,0xA2,0xB3,0x1E, +0x08,0x21,0xB9,0x23,0xB4,0xAB,0x41,0xAC,0x87,0x09,0xA2,0xC5,0x0B,0x2A,0x5A,0x91, +0x20,0x9A,0x89,0x78,0x9B,0x31,0x89,0x80,0x29,0x0A,0xB7,0x3C,0x98,0x48,0x1D,0x00, +0x01,0xB0,0x20,0x2F,0x29,0x4A,0x89,0x94,0x1C,0x88,0x28,0x2B,0x10,0x88,0x9A,0x71, +0x9A,0x08,0x4A,0x2F,0x18,0x2B,0x18,0x02,0xA8,0x4B,0x7A,0x99,0x48,0x80,0xA8,0x20, +0x1D,0x40,0xA8,0x10,0x08,0xA8,0xC5,0x88,0xC2,0x18,0x88,0x2A,0x12,0xF3,0x82,0xD8, +0x20,0x0A,0x09,0xA6,0x98,0x04,0xB9,0x11,0x18,0xC3,0xE1,0x29,0xA1,0x11,0xC1,0x03, +0xE2,0x9A,0x33,0xA9,0xB5,0x98,0x92,0xA1,0x02,0xF8,0x21,0xA8,0x10,0x02,0xC1,0xB7, +0x1B,0x90,0x5B,0x3C,0x83,0x93,0xE0,0x19,0x1A,0x11,0x11,0xF1,0x92,0x89,0x19,0x2C, +0x2C,0x41,0x99,0x92,0x90,0x3F,0x18,0x4B,0x00,0x08,0xD2,0x01,0xB2,0xAA,0x78,0x09, +0x01,0x91,0xA2,0x98,0x2F,0x3A,0x2C,0x01,0x00,0x93,0xE0,0x28,0x2C,0x2B,0x01,0x12, +0xE1,0x80,0xB3,0x3D,0x3A,0x0A,0x50,0x98,0xC2,0xA0,0x11,0xAA,0x30,0x87,0x90,0xC2, +0x29,0x88,0x38,0xC8,0xB5,0x90,0xBA,0x70,0x1A,0x02,0x94,0xD0,0x80,0x1A,0x82,0xA6, +0xB0,0x91,0x18,0xB3,0x00,0x13,0xF1,0xA2,0xC1,0x82,0xB0,0x00,0x15,0x0B,0xD3,0x02, +0xA8,0x91,0x2B,0x1F,0x49,0x88,0xA6,0x80,0x88,0x08,0x1B,0xA5,0x80,0xB9,0x06,0x0B, +0x90,0x21,0x9D,0x48,0x18,0xA0,0x15,0xC9,0x82,0x2B,0x1A,0x42,0x9A,0xC4,0x39,0xBC, +0x69,0x00,0xA0,0x29,0x8C,0x39,0x59,0x08,0x09,0x49,0xA9,0x6B,0x81,0x00,0x98,0xB0, +0x68,0x3D,0x81,0x88,0x18,0x19,0x1D,0x12,0x80,0xB2,0x3A,0x3F,0x85,0x92,0xD0,0x00, +0x0A,0x19,0x12,0xF1,0x02,0x9B,0x19,0x40,0xB9,0x11,0x02,0xF2,0x1A,0x08,0x94,0x0A, +0xC2,0x83,0x0B,0xB4,0xA4,0xC0,0x32,0xD8,0x86,0x98,0x90,0x95,0x89,0xA3,0x83,0xC2, +0x92,0xE1,0x92,0x82,0xD9,0x03,0x08,0xA9,0x85,0x92,0xA2,0x80,0xE0,0x30,0x8B,0xB3, +0x87,0x89,0x90,0x83,0xA0,0x08,0x92,0x93,0x3E,0xAB,0x43,0x89,0xE3,0x80,0x83,0x2F, +0x00,0xA3,0x80,0xC9,0x22,0x3F,0x08,0x81,0x0B,0x33,0x9A,0xA3,0x7B,0x0C,0x29,0x4A, +0x1B,0x21,0xAA,0x70,0x1B,0x0D,0x48,0x1A,0x81,0x88,0xB1,0x39,0x3F,0x08,0x58,0xA0, +0x81,0x1A,0x1A,0x2B,0x6D,0x11,0x0A,0x91,0x01,0x1A,0x98,0x5A,0x0C,0x03,0xB1,0x84, +0xA3,0xAD,0x58,0x2A,0xA1,0x84,0xB1,0xA0,0x5C,0x2B,0x13,0xA8,0x95,0x83,0xE8,0x10, +0x81,0xB0,0x00,0xC2,0x96,0xA0,0x91,0x00,0x2C,0x90,0x30,0xF2,0x80,0xA8,0x39,0x21, +0xC1,0x03,0xAC,0x39,0x7C,0x29,0x91,0x1A,0x00,0x19,0x2C,0x3A,0x93,0xB0,0x29,0x8F, +0x28,0x02,0x93,0xF3,0xA9,0x01,0x03,0xE0,0x08,0x09,0x1D,0x58,0xA1,0x83,0xA9,0x6B, +0x2A,0x3C,0x21,0x89,0xC2,0x2C,0x4B,0x8A,0x50,0x81,0x98,0xA8,0x32,0x0C,0x8E,0x24, +0x0B,0x1A,0x81,0x92,0xA1,0x4F,0x18,0x3A,0x0A,0xB4,0x18,0x2E,0x39,0x82,0x19,0xD3, +0xD0,0x28,0x1B,0x11,0x98,0x07,0xAA,0x28,0x00,0x88,0xB4,0x89,0x1B,0x1F,0x22,0x00, +0xB3,0xC9,0x33,0xAB,0x2B,0xB5,0x48,0x98,0x98,0xA7,0x10,0xD2,0xC1,0x23,0xCA,0x93, +0xC6,0x80,0xA1,0x88,0x02,0x89,0xE2,0x09,0x38,0xBA,0x40,0x89,0x21,0xD8,0x49,0x10, +0x8D,0x02,0x90,0xC3,0x9A,0x24,0x89,0x08,0x84,0xA5,0x9C,0x10,0x11,0x9C,0x88,0x30, +0x3C,0xA1,0x94,0x58,0x8C,0x0B,0x69,0x29,0x9A,0x81,0x12,0x2B,0x8B,0x79,0x94,0xB0, +0xC1,0x84,0xC2,0x99,0x25,0x99,0x11,0xA2,0x93,0xE4,0x99,0x80,0x0A,0x00,0x10,0xB7, +0xB0,0x31,0xBA,0x3C,0x21,0xB3,0xF1,0x18,0xA0,0x2A,0x20,0xA3,0x06,0xE8,0x28,0xA1, +0xB4,0x08,0x0B,0x11,0x4B,0xB7,0x90,0xA5,0x98,0x3D,0x19,0x02,0xA1,0xC4,0xB2,0x19, +0x28,0xC0,0xA5,0x92,0xB1,0xA3,0x0A,0x0A,0x08,0x2B,0x70,0xC4,0xB3,0x00,0xBC,0x4B, +0x39,0x12,0xE3,0xA0,0x00,0x3F,0x18,0x29,0x94,0xD1,0x19,0x09,0x00,0xA1,0x83,0x99, +0x9B,0x35,0x80,0xC4,0xB1,0x6A,0x1A,0x1C,0x29,0x38,0x0E,0x19,0x5A,0x1A,0x82,0x8A, +0x59,0x2A,0x2E,0x20,0x88,0xA8,0x3A,0x38,0x3D,0x00,0xB3,0x29,0xAD,0x49,0x10,0x0C, +0x01,0x01,0xA3,0x8F,0x85,0x09,0x1B,0x88,0x10,0xA3,0xD2,0x90,0x3C,0x5C,0x39,0x03, +0xD1,0xA0,0x00,0x2A,0x0B,0x04,0xA7,0x90,0xA0,0x11,0x90,0x99,0x83,0xB4,0xB1,0xF1, +0x84,0x88,0x90,0x18,0x18,0xD3,0xD2,0xB3,0xA0,0x1A,0x21,0xA7,0xB2,0xB3,0x92,0x9A, +0x22,0xB9,0x28,0x38,0xBD,0x87,0x2A,0xB1,0x13,0x0D,0x0A,0x38,0xC9,0x24,0xC0,0x19, +0x23,0x0F,0x01,0x88,0xC0,0x2A,0x82,0x18,0x28,0xF0,0x18,0x2A,0x29,0x4B,0x35,0xB8, +0xA3,0x9D,0x18,0x1B,0x40,0x00,0x9A,0x5C,0x3A,0x09,0x2F,0x38,0x8A,0x3B,0x3B,0x11, +0x5C,0x19,0x2B,0x4A,0x08,0x0A,0x3D,0x20,0x4F,0x3A,0x19,0x2A,0x18,0x4D,0x1B,0x3A, +0x11,0x0D,0x3A,0x3C,0x4B,0x93,0x81,0xAA,0x6B,0x4A,0x18,0x00,0xC3,0xC3,0x9A,0x59, +0x2A,0x1B,0xA7,0xA1,0x81,0x88,0x88,0x58,0xB2,0xB1,0x2B,0x83,0xD4,0x81,0x08,0x0F, +0x00,0x20,0xC2,0xE2,0x80,0x08,0x1C,0x29,0x04,0xB1,0xA2,0x01,0x1C,0x91,0x00,0x0C, +0x49,0xB0,0x43,0xF2,0x99,0x39,0x3F,0x00,0x81,0x94,0xC1,0x09,0x1A,0x69,0x90,0x80, +0x94,0xAA,0x20,0x2A,0x91,0xB1,0x39,0x7A,0x38,0xD1,0x10,0x8A,0x8C,0x5A,0x01,0xB5, +0x98,0x80,0x2A,0x0B,0x32,0x92,0xF1,0x81,0x9A,0x23,0x8A,0xA3,0xB7,0x09,0x03,0x08, +0xD0,0x94,0x9A,0x09,0x01,0x93,0xB7,0xC2,0x8C,0x3A,0x83,0x99,0x05,0xA0,0x0B,0x29, +0x93,0xE5,0x80,0x89,0x38,0x90,0x8A,0xD7,0xA1,0x19,0x1B,0x48,0x98,0x92,0xC3,0xA1, +0x09,0x3F,0x02,0x0C,0x22,0xC3,0xB2,0xA1,0x01,0x9F,0x4A,0x01,0xA3,0xD3,0xB0,0x28, +0x3F,0x29,0x20,0xA2,0xC2,0xB1,0x08,0x5A,0x98,0x13,0xD2,0xC1,0x01,0xB2,0x80,0x3D, +0x03,0xC1,0x89,0x96,0x90,0x90,0x3A,0x1A,0x9A,0x32,0xB6,0xA2,0x8E,0x4A,0x28,0x8A, +0x84,0xA2,0x8A,0x2D,0x49,0x09,0x88,0x18,0x30,0x9D,0x2C,0x23,0xB1,0x0C,0x92,0x2D, +0x39,0x82,0xC4,0x2E,0x10,0x1A,0x10,0xB9,0x48,0x19,0x39,0xBA,0x34,0xDA,0x2D,0x48, +0x1A,0xA6,0x98,0x83,0x9A,0x1D,0x38,0x04,0xD0,0x18,0x90,0x2C,0x11,0x93,0xD3,0x9A, +0x11,0x08,0x82,0xF1,0x01,0xA0,0x2A,0x93,0xD3,0xB4,0xB8,0x82,0x2F,0x11,0xA3,0xB3, +0xA8,0x3B,0x09,0x23,0x96,0xC8,0x3B,0x3F,0x93,0x82,0xA1,0x90,0x3F,0x28,0x81,0xD1, +0x93,0x08,0x2D,0x18,0x91,0xB3,0xB5,0x98,0x2A,0x2B,0x84,0xB1,0x5B,0x8A,0x31,0x18, +0x80,0x8B,0x7E,0x39,0x2B,0x02,0xC1,0x8B,0x6C,0x49,0x09,0x10,0xA1,0x08,0x01,0x0C, +0x20,0xA1,0x09,0x4F,0x18,0x00,0x01,0xA0,0x5C,0x1B,0x5B,0x10,0x92,0x90,0x2B,0x5A, +0x3D,0x18,0x91,0x19,0x98,0x2D,0x39,0x89,0x2D,0x3A,0x48,0x2C,0x11,0xB5,0x9A,0x19, +0x5B,0x28,0x90,0x95,0x98,0x89,0x2B,0x40,0x08,0x90,0xF3,0x0A,0x08,0xA6,0x80,0x91, +0xB2,0xA0,0x02,0xF2,0xA1,0xB7,0x89,0x81,0x82,0x91,0xB1,0x21,0xAB,0x32,0xE9,0x04, +0xA2,0x8D,0x12,0x91,0xA3,0xA3,0xD2,0x8B,0x39,0xD1,0x84,0xE2,0x90,0x00,0x2B,0x29, +0xA3,0xD4,0xA1,0x91,0x1D,0x5A,0x08,0x19,0x11,0x99,0x08,0x18,0x49,0x0F,0x18,0x10, +0x82,0xF1,0x00,0x89,0x2F,0x3A,0x01,0xB3,0xC2,0x81,0x3F,0x29,0x08,0x10,0xA1,0xA1, +0x3B,0x5D,0x19,0x28,0x0B,0x38,0x82,0x91,0x19,0xBD,0x3B,0x7A,0x80,0x12,0xB3,0xE0, +0x0B,0x6A,0x01,0x88,0xA4,0x08,0x0B,0x08,0x59,0x80,0x80,0x1D,0x49,0x89,0x00,0x84, +0x99,0x1A,0x2B,0x32,0xE3,0xB4,0xA9,0x3A,0x99,0x31,0xE3,0xAA,0x58,0x3B,0x88,0x95, +0xC0,0x18,0x4A,0x09,0x30,0xF2,0xA3,0x1C,0x1B,0x49,0x00,0xD3,0xB2,0xA0,0x18,0x11, +0x92,0xD3,0xB2,0x91,0x80,0xE7,0xA1,0x91,0x98,0x19,0x22,0xC2,0xD2,0x18,0x8D,0x3B, +0x10,0xA5,0x91,0x98,0x02,0x3E,0x80,0x01,0x90,0xAA,0x13,0xF1,0x02,0xD1,0x08,0x19, +0x49,0xB4,0x91,0xB4,0x99,0x2A,0x0C,0x32,0xC0,0x05,0x88,0x0B,0x80,0x2C,0x81,0x10, +0x0B,0x51,0xA9,0x19,0x05,0xBF,0x28,0x20,0xE1,0x90,0x80,0x28,0x19,0x08,0x26,0xB1, +0xA1,0x18,0x88,0x2A,0xF0,0x12,0x8A,0xB3,0x14,0x1B,0xD4,0xD8,0x10,0x08,0x8A,0x17, +0xA0,0x98,0x2B,0x3A,0x29,0x48,0xA4,0x99,0x0E,0x4A,0x12,0x8B,0x31,0x8B,0x4E,0x1A, +0x11,0xB5,0x89,0x91,0x29,0x89,0xC2,0x97,0x90,0x0A,0x19,0x11,0x91,0xC1,0xD5,0x08, +0x89,0x20,0x91,0xB1,0x1A,0x2D,0x18,0x29,0xD2,0x3B,0x3E,0x3A,0x2A,0x90,0x82,0x1C, +0x49,0x3B,0x93,0xB6,0xC8,0x4C,0x02,0x91,0x93,0xF2,0x88,0x2D,0x28,0x81,0x82,0xC1, +0x89,0x2D,0x6B,0x19,0x82,0x80,0x18,0x8B,0x39,0x39,0xC8,0x3A,0x6A,0x0A,0x22,0xD2, +0x09,0x2C,0x1A,0x68,0x92,0xE2,0x89,0x2A,0x2A,0x30,0xC2,0xA3,0xB4,0x1D,0x2A,0x09, +0x93,0x18,0xF2,0x89,0x28,0xB3,0x01,0x8F,0x18,0x11,0xA1,0x93,0x90,0xD1,0x7A,0x20, +0xC3,0xA2,0xA8,0x88,0x1D,0x28,0xA5,0xA2,0xA2,0x0B,0x29,0x2B,0x87,0xC1,0x80,0x0A, +0x19,0x01,0x12,0xF1,0x10,0x80,0x0A,0x18,0x08,0x2F,0x4A,0x02,0x89,0x1B,0x29,0x5D, +0x4C,0x08,0x82,0xA1,0x0A,0x3A,0x4B,0x29,0xC6,0xC3,0x09,0x09,0x88,0x39,0x98,0x82, +0xA5,0x1A,0x30,0x11,0xBD,0x3F,0x12,0x8B,0x28,0xC3,0x88,0x3F,0x2B,0x3B,0x48,0xA1, +0x80,0x8A,0x4D,0x39,0x01,0x93,0xA2,0xF1,0x19,0x19,0x0A,0x02,0xB2,0x8B,0x24,0xD2, +0x4B,0x12,0xC8,0x2E,0x10,0xB5,0x89,0x01,0x09,0x1C,0x2A,0x03,0xD4,0x91,0x98,0x99, +0x11,0x2B,0xE4,0x00,0x00,0x01,0xE0,0xA5,0x89,0x99,0x31,0x18,0xD0,0xB7,0x98,0x18, +0x0A,0x10,0x94,0xC2,0x90,0x18,0x00,0x99,0x87,0xA0,0x90,0x2A,0x3C,0x02,0xB8,0xC1, +0x79,0x1A,0x20,0x08,0xA1,0xD2,0x1C,0x29,0x03,0xD1,0x29,0x99,0x2C,0x50,0xB3,0xD1, +0x08,0x09,0x3C,0x10,0x04,0xB2,0x0D,0x2B,0x59,0x80,0x90,0x01,0x0F,0x3A,0x18,0x01, +0xA2,0x9B,0x5B,0x3D,0x81,0x03,0xD2,0x98,0x59,0x90,0x81,0x92,0xB4,0x8B,0x1B,0x40, +0xB2,0xB5,0x08,0x4B,0x01,0x09,0xD1,0x91,0x8B,0x7A,0x10,0xB3,0xC3,0x99,0x49,0x1A, +0x29,0xB5,0xA2,0xAB,0x40,0x81,0x19,0xB7,0xB0,0x20,0x2B,0xD4,0x88,0xA1,0x91,0x3C, +0x82,0x37,0xD3,0xB1,0x8A,0x1B,0x30,0xB3,0xF4,0xA1,0x91,0x09,0x10,0x03,0xD0,0x83, +0xA9,0x8F,0x10,0x01,0x90,0x18,0x80,0x20,0x2B,0xF1,0x28,0x99,0x2A,0x41,0xF0,0x12, +0xAA,0x83,0x82,0xD1,0xC1,0x08,0x89,0x59,0x09,0x83,0x87,0xB0,0x2A,0x4D,0x18,0x09, +0x19,0xB3,0x4B,0x3F,0x39,0x19,0x09,0x01,0x89,0x03,0x1F,0x00,0x1A,0x0B,0x10,0x68, +0xA0,0x18,0x8C,0x6A,0x09,0x08,0x97,0xA1,0x81,0x1B,0x2B,0x4C,0x03,0xB4,0xA8,0x92, +0x4B,0x3C,0xA1,0x81,0x95,0xA8,0x81,0x12,0xBB,0x92,0x45,0xB9,0x93,0xF4,0x88,0x0A, +0x2D,0x28,0x00,0xA3,0xA3,0x8A,0x3F,0x48,0xB1,0x92,0xB4,0xA8,0x30,0x80,0xD3,0x80, +0xD1,0x19,0x3B,0xC4,0x81,0xC1,0x29,0x0D,0x20,0x13,0xC8,0xB4,0x4C,0x09,0x00,0x82, +0xC2,0x3B,0x0D,0x30,0x0B,0x12,0xF0,0x1B,0x20,0x0A,0xA6,0x80,0x0A,0x4A,0x4A,0x80, +0x94,0xB1,0x2E,0x3B,0x1A,0x10,0x93,0x10,0x4C,0x3D,0x08,0x82,0xC9,0x19,0x6A,0x2B, +0x38,0xD1,0x08,0x19,0x2A,0x5A,0x82,0xB1,0x8D,0x29,0x78,0x09,0x82,0x0A,0x2C,0x1B, +0x19,0x41,0xB8,0x8C,0x79,0x2B,0x11,0x88,0x82,0x91,0xDC,0x28,0x11,0xB0,0x11,0x18, +0xC9,0x62,0xA1,0x91,0x98,0x3B,0x3A,0xB0,0xF4,0x01,0xC0,0x29,0x39,0xF8,0x95,0x91, +0x88,0x88,0x91,0x03,0xA1,0xE2,0x18,0x82,0xD1,0xA2,0xD1,0x80,0x19,0x20,0x83,0xB1, +0xE3,0x80,0x91,0x4D,0x1A,0x03,0xB2,0x09,0x18,0xD1,0x19,0x09,0x92,0xA6,0xA0,0xB6, +0xB2,0x8B,0x38,0x10,0x42,0xD3,0xD0,0xA8,0x20,0x2C,0x10,0x01,0xB1,0xB4,0xAB,0x5B, +0x79,0x80,0x10,0x1A,0xA8,0x3D,0x18,0x20,0xB3,0x8F,0x18,0x01,0x00,0x09,0xF3,0x89, +0x69,0x88,0x81,0x91,0x08,0xE1,0x1A,0x08,0x11,0x81,0x1E,0x29,0xA0,0x01,0x00,0x90, +0x3E,0x7B,0x18,0x82,0xC3,0xA1,0x2A,0x2C,0x5B,0x81,0xA5,0x90,0x81,0x00,0x0B,0x1A, +0x1C,0x2C,0x32,0xC0,0xF3,0x80,0x2D,0x2A,0x10,0x02,0xE4,0xC1,0x89,0x4A,0x09,0x01, +0x03,0xD2,0x98,0x2A,0x39,0x8A,0x89,0x26,0xB1,0xB2,0x12,0xC0,0x0A,0x5A,0x18,0x98, +0xF3,0x92,0x99,0x99,0x79,0x01,0xB5,0xA1,0x80,0x80,0x90,0x83,0xA0,0xE2,0x81,0x29, +0x93,0x8A,0x0A,0x6A,0x1F,0x18,0x02,0xC8,0x01,0x19,0x3B,0x4A,0x98,0x17,0xA8,0x0D, +0x38,0xA1,0x91,0x10,0xA2,0x2B,0x4C,0xA6,0x81,0xBA,0x21,0x4C,0x80,0x21,0xD1,0x92, +0x2C,0x08,0x30,0x9F,0x93,0x2A,0x89,0x03,0x8B,0x87,0x0A,0x0D,0x12,0x98,0xA4,0x93, +0xBB,0x59,0x18,0xA1,0x32,0xE9,0x84,0x08,0x8A,0x02,0xA1,0x91,0x4B,0xB4,0x20,0x88, +0xF0,0x3A,0x1A,0x88,0x87,0xB1,0x92,0x0A,0x08,0x6B,0x83,0xC3,0x91,0xC0,0x2B,0x79, +0x08,0x8A,0x84,0xA0,0x89,0x40,0x1B,0xA1,0x39,0x98,0x17,0xC2,0xA2,0x12,0xCD,0x20, +0x89,0x92,0x25,0xB0,0x2D,0x3A,0x8B,0x58,0x2A,0xA0,0x4C,0x08,0x30,0xAE,0x82,0x59, +0x89,0x1A,0x10,0xC2,0x18,0x2C,0x40,0x1E,0x01,0xA3,0x8A,0x81,0x2C,0x29,0x29,0xA9, +0x13,0x51,0xAD,0x12,0x89,0x8F,0x18,0x2C,0x39,0x00,0xC1,0x10,0x3C,0x2A,0x41,0xC8, +0xA2,0x91,0x0A,0x6C,0x10,0x12,0x88,0xE8,0x30,0x91,0x81,0xD8,0x01,0x1B,0x0D,0x07, +0x00,0xA8,0x92,0x0A,0x28,0xD2,0xC3,0x02,0xAA,0x94,0x81,0xB4,0xB3,0x1A,0x0B,0x13, +0xF9,0x16,0xA1,0x8A,0x59,0x19,0x02,0xC1,0x91,0x8B,0x3D,0x18,0x3B,0xA4,0x94,0x80, +0x99,0x88,0x1C,0x79,0x0A,0x02,0x03,0xF8,0x90,0x39,0x5B,0x19,0x02,0xC3,0x90,0xBB, +0x58,0x6A,0x09,0x02,0x89,0x91,0x88,0x1A,0x69,0x8A,0x19,0x15,0xA0,0xA2,0x00,0x9A, +0x6B,0x49,0x88,0xA3,0x92,0xBB,0x6B,0x3D,0x38,0x01,0x98,0x91,0x3F,0x09,0x18,0x20, +0x90,0x80,0xAC,0x70,0x91,0x9B,0x51,0x09,0x88,0x99,0x14,0x8B,0x98,0x83,0x79,0xA0, +0x99,0x13,0x01,0x19,0xE0,0x83,0x0B,0xB0,0x0C,0x31,0x95,0xB5,0xC2,0x8A,0x39,0x20, +0x80,0x39,0xF3,0xB1,0x10,0x88,0x5E,0x18,0x94,0xA1,0x88,0xA1,0x98,0x15,0xAA,0x39, +0xD4,0x84,0xC0,0xA2,0xA2,0x0C,0x81,0x86,0xB5,0xA1,0xB1,0x14,0x1B,0xB1,0x02,0x92, +0xC3,0xE0,0x88,0x11,0xAA,0x69,0x18,0x81,0xA3,0xB0,0x01,0xBF,0x2A,0x31,0x93,0xF1, +0x00,0x89,0x18,0x19,0x11,0xD3,0xE0,0x10,0x18,0xB1,0x18,0x24,0x9A,0x2B,0xA4,0xC0, +0xB0,0x31,0x6C,0x19,0xB4,0x12,0xA8,0xEA,0x58,0x10,0x8B,0x93,0x82,0x88,0x9A,0x41, +0x10,0xC3,0xEA,0x41,0xA9,0x9C,0x34,0xA1,0x2A,0x79,0xA2,0x01,0xA8,0xB3,0x28,0xCC, +0x41,0x9A,0xB3,0x4B,0xB3,0x27,0x8B,0x83,0x2B,0x2F,0x08,0x28,0xB2,0x80,0x2C,0x30, +0x5E,0x09,0x12,0x9B,0x09,0x22,0x5B,0x19,0x8A,0x11,0x59,0x99,0xA4,0x32,0xCD,0x18, +0x08,0x10,0x85,0xB3,0xB4,0x1E,0x88,0x28,0x8A,0x11,0x09,0xC0,0x79,0x80,0x91,0x3B, +0x80,0x10,0x0F,0x01,0x80,0x91,0x19,0x3D,0x92,0x28,0xA8,0x37,0x9A,0x0A,0x3A,0x8A, +0x45,0xA9,0xA4,0x00,0xAA,0x09,0x3D,0x59,0x20,0xE1,0x08,0x98,0x90,0x59,0x10,0x09, +0xA3,0xC3,0x93,0x99,0x2B,0x69,0x11,0xD1,0xB1,0xA4,0x91,0x3C,0x89,0x83,0xF0,0x10, +0x91,0xA1,0x89,0x59,0x05,0x99,0x93,0x94,0xC8,0x08,0x0A,0x09,0x17,0xB1,0x83,0xC1, +0x91,0x40,0xA2,0xC2,0x98,0xC3,0xBA,0x28,0x23,0x0F,0x80,0x50,0xB8,0x19,0x10,0x96, +0x98,0x8C,0x05,0x98,0x19,0x29,0x2B,0x3B,0x0A,0xE2,0x01,0x0F,0x3C,0x38,0x08,0x09, +0x81,0x4A,0x6C,0x08,0x00,0x88,0x98,0x38,0x2C,0x5A,0x1B,0x20,0x1A,0x39,0xB0,0x09, +0xCB,0x5B,0x49,0x09,0x71,0x00,0xC1,0x0E,0x08,0x38,0x0C,0x02,0x10,0x0E,0x10,0x8A, +0x48,0x19,0x90,0x92,0x0D,0xA3,0x98,0x3B,0x79,0x19,0x01,0x10,0xE1,0x80,0x19,0x2B, +0x10,0xF2,0x02,0xAB,0x84,0x9A,0x29,0xB4,0x80,0x92,0x03,0x88,0x95,0xD0,0x03,0x90, +0xA0,0xC7,0xA1,0xB0,0xA2,0x02,0x18,0xB5,0xD4,0x01,0xC0,0x08,0xA2,0x93,0xA8,0xA0, +0xC3,0x20,0xF3,0x90,0x00,0xD5,0x08,0x89,0xA5,0x80,0xA0,0x81,0x82,0xC2,0x09,0xD1, +0x13,0xCB,0x03,0x84,0x91,0xE1,0x1B,0x12,0x08,0xAB,0x87,0x18,0xAB,0x58,0x89,0x28, +0x81,0xC9,0x33,0xA9,0x80,0x2E,0x20,0x83,0xB9,0x20,0x3B,0x9E,0x7A,0x08,0x81,0x18, +0x0B,0x88,0x79,0x80,0x8B,0x00,0x12,0x0E,0x89,0x51,0x1B,0x81,0xA0,0x3A,0x01,0xAF, +0x11,0x28,0xBA,0x35,0x98,0x88,0x52,0xC0,0x83,0x2F,0xA9,0x11,0x0A,0x19,0x25,0xD0, +0x30,0x9C,0x08,0x21,0x98,0x81,0x2A,0xF3,0x2A,0x80,0xB6,0x2B,0x08,0x93,0xE9,0x02, +0x81,0x8C,0x21,0x00,0xA6,0xA9,0x94,0x01,0x8F,0x80,0x94,0x98,0x93,0xB4,0x00,0x08, +0xC0,0x14,0x98,0xB3,0xB4,0xC1,0x09,0x18,0xA7,0x00,0xA3,0xC8,0x0A,0x3C,0x19,0x96, +0x83,0xC1,0x99,0x19,0x4A,0x85,0x80,0xC1,0x91,0x99,0x90,0x2A,0x17,0x95,0x99,0x88, +0x12,0xAE,0x39,0x08,0x92,0x84,0xB0,0xA8,0x79,0x09,0x19,0x01,0xB2,0xA3,0x8F,0x28, +0x2B,0xA2,0x40,0x82,0xA0,0x4C,0xA9,0x39,0x8D,0x81,0x70,0x88,0xA0,0x1A,0x49,0x2D, +0x1A,0x26,0xA8,0x98,0x08,0x29,0x0B,0x12,0x96,0xB1,0xB2,0x3A,0x13,0x9B,0x60,0xA0, +0x88,0xB2,0x34,0xEA,0x1A,0x2A,0x79,0x98,0x10,0x04,0x8C,0x1C,0x81,0x04,0x8C,0x83, +0x19,0x2F,0x81,0x93,0x98,0x10,0x08,0x30,0x2A,0xFA,0x05,0x08,0x2A,0x89,0x91,0xA3, +0xFA,0x11,0x11,0x00,0x8C,0x04,0x8A,0x2A,0xB5,0x10,0xA9,0xC2,0x3D,0x1B,0x32,0x04, +0x0A,0x1A,0x09,0x40,0x1F,0x92,0x1D,0x2A,0x91,0x10,0x30,0x2F,0x0B,0x68,0x99,0xA2, +0x92,0x88,0x78,0xA9,0x20,0x28,0xE2,0x92,0x1A,0x99,0x4B,0x19,0x22,0xA1,0xE2,0x21, +0x2F,0x98,0x29,0x18,0x91,0x08,0xB0,0x79,0x1A,0x82,0x3B,0xB1,0xA7,0x8A,0xB3,0x98, +0x5B,0x23,0xCA,0x42,0x83,0xF0,0x90,0x18,0x98,0x08,0xB4,0x20,0xA3,0xC0,0x43,0xD8, +0x80,0x81,0xA3,0x99,0xD9,0xA7,0x19,0x90,0x10,0x05,0xB1,0x8B,0x02,0xA4,0xBD,0x23, +0x93,0x8A,0x99,0x4B,0x03,0xC1,0xF8,0x38,0x09,0x2B,0x14,0xD0,0x03,0x8A,0x2A,0x39, +0xB9,0x97,0x90,0xAA,0x50,0x01,0x99,0x51,0xD1,0x09,0x1A,0xB5,0x00,0x8B,0x93,0x08, +0x98,0x11,0xF9,0x85,0x2B,0x08,0x96,0x89,0x90,0x2A,0x12,0x4A,0xD8,0x85,0x2B,0x0E, +0x10,0x00,0x01,0xB1,0x9B,0x69,0x1A,0x90,0x40,0xB8,0x01,0x08,0x0A,0x2C,0x09,0x14, +0x4B,0xE2,0x82,0x88,0xB1,0x78,0x0A,0x01,0xC2,0x93,0x19,0xCE,0x20,0x3C,0x82,0xB4, +0x1B,0x20,0x8C,0x3B,0x29,0xAB,0x86,0x23,0xD8,0x81,0x9A,0x5A,0x49,0xB0,0x16,0xA0, +0xB0,0x28,0x1B,0x13,0x93,0xE4,0xA2,0xA9,0x08,0x5A,0xB3,0x12,0xC1,0xE1,0x10,0x88, +0x01,0x0C,0x92,0x08,0x89,0xB7,0x88,0x81,0x10,0x9A,0x17,0xA0,0xB0,0x13,0x99,0xE0, +0x39,0x31,0xD2,0xB2,0x80,0x0B,0x2D,0x49,0x80,0x01,0xB0,0x06,0x09,0x0C,0x3A,0x69, +0xA0,0x08,0xB2,0xA1,0x69,0x2B,0x5A,0x81,0x92,0xBA,0x21,0xB1,0x7D,0x10,0x80,0x08, +0x88,0x82,0x32,0x0D,0xB0,0x1A,0x1C,0x21,0x94,0xA9,0x58,0xB9,0x5A,0x4A,0xA0,0x13, +0xA9,0x80,0x7C,0x00,0x20,0x8A,0x04,0x0C,0x00,0x82,0x2A,0xB2,0xAC,0x4B,0x69,0xA0, +0xA6,0x81,0x9B,0x19,0x38,0x8B,0x17,0xB2,0x81,0x2A,0xBB,0x94,0x29,0xA2,0x15,0xBA, +0x97,0xA3,0xB9,0x79,0x01,0xB2,0x02,0xF1,0x90,0x0A,0x29,0x11,0x88,0xE5,0xA0,0x81, +0x19,0x91,0x90,0x28,0xB3,0x14,0xD0,0xB5,0x91,0x9A,0x29,0x0B,0x07,0xA2,0xB3,0x01, +0x9D,0x28,0x41,0xD0,0x91,0x90,0x82,0x1A,0xA8,0x44,0x9A,0xA9,0x21,0xE3,0xA9,0x4B, +0x19,0x78,0x89,0x83,0xA3,0xB9,0x5A,0x3D,0x80,0x82,0xA2,0xA0,0x6C,0x10,0x20,0x8B, +0x93,0x8B,0x0E,0x33,0xA9,0xB1,0x68,0x8A,0x31,0xAC,0x94,0xB4,0x8B,0x32,0x0B,0xB4, +0x81,0x91,0x1D,0x33,0xD9,0x31,0xE1,0x8B,0x3B,0x30,0x12,0x49,0xD2,0x8E,0x29,0x18, +0x8A,0x92,0x02,0xAA,0x59,0x1C,0x32,0x88,0x01,0x23,0xFB,0x83,0x29,0xDA,0x59,0x01, +0x81,0x92,0xE1,0x18,0x8A,0x1D,0x30,0x93,0xF1,0x00,0x01,0x0B,0x39,0x92,0x89,0xA0, +0x11,0x5B,0xE0,0x82,0x09,0x13,0xAA,0xB4,0x16,0xD8,0x91,0x2A,0x29,0x84,0x1B,0xC5, +0x98,0x98,0x31,0x98,0x99,0x17,0xA9,0x20,0x92,0xC3,0x18,0x9D,0x20,0x3D,0x89,0x94, +0xA2,0x1C,0x5C,0x29,0x39,0xA0,0xB3,0x00,0x0C,0x4C,0x48,0x92,0x0A,0x91,0x85,0x9A, +0x01,0x82,0x1F,0x10,0x99,0x15,0xC1,0xA0,0x39,0x1A,0x1D,0x85,0xB4,0x90,0x1A,0x2A, +0x4B,0x01,0xB2,0x93,0xBE,0x12,0x83,0xC9,0x18,0x09,0x20,0x78,0xF1,0x08,0x19,0x88, +0x3A,0x83,0xB3,0xA9,0x93,0x7A,0x0A,0x96,0x98,0x00,0xA8,0x3A,0x30,0x92,0xF2,0x9B, +0x3D,0x38,0x92,0x92,0xC3,0xB8,0x6B,0x29,0x01,0x01,0xB2,0x2F,0x09,0x19,0x18,0x01, +0x3B,0x7B,0x10,0xA1,0x90,0x39,0x0F,0x38,0x0A,0xB5,0xA4,0x89,0x8B,0x6A,0x2B,0x12, +0xC8,0x90,0x40,0x2A,0x9E,0x22,0x88,0x18,0x09,0x3A,0xC3,0xE8,0x09,0x59,0x08,0x12, +0x94,0xD0,0x1A,0x2C,0x38,0x00,0xA1,0x83,0xE8,0x08,0x3A,0x08,0x10,0x9E,0x83,0x1D, +0x92,0x19,0x2C,0x39,0x3B,0x59,0x04,0xE1,0x80,0x08,0x8D,0x21,0x81,0xB2,0xB2,0x02, +0x99,0x91,0xA4,0xD6,0x98,0x99,0x03,0x80,0x98,0xA7,0x91,0x09,0xA1,0xB2,0xB3,0xE1, +0x12,0x92,0xB1,0x81,0x06,0x99,0x0A,0x23,0xC4,0xB1,0xF2,0x89,0x19,0x3A,0x94,0x82, +0xE0,0x89,0x38,0x0B,0xA4,0xA5,0x80,0x80,0x8C,0x34,0xB9,0xA9,0x23,0x13,0xB9,0xC1, +0xC7,0x1B,0x89,0x10,0x20,0x11,0xE3,0xA8,0x4B,0x0B,0x40,0x91,0x90,0x1B,0x5F,0x2A, +0x18,0x82,0x91,0x0B,0x4A,0x28,0xCA,0x40,0x80,0x5B,0x2C,0x13,0xB0,0x8A,0xA9,0x5A, +0x58,0x89,0x82,0x88,0x2E,0x3B,0x31,0xA1,0x9B,0x01,0x7A,0x2C,0x01,0x91,0x93,0x3F, +0x88,0x39,0x10,0xF1,0x91,0x8B,0x48,0x0A,0x12,0xE3,0xA8,0x18,0x28,0x92,0x97,0x98, +0x99,0x19,0xA1,0x11,0xB6,0x88,0x3B,0x10,0xD3,0xC3,0xA1,0x2A,0x8A,0x49,0x04,0xF1, +0x91,0x02,0x8A,0x89,0x04,0xF1,0x98,0x80,0x18,0x12,0xE3,0x81,0x98,0x80,0x01,0xB3, +0xF2,0x99,0x12,0x2A,0xB5,0xB3,0x92,0xAA,0x19,0x50,0xB2,0xC3,0x92,0xD0,0x2B,0x68, +0x93,0x99,0xC0,0x2C,0x3E,0x80,0x20,0x08,0x93,0x0D,0x2A,0x31,0x8D,0x02,0x2B,0x91, +0x08,0x0A,0x03,0x2C,0x3C,0x52,0xB9,0xA0,0x12,0xBF,0x3A,0x29,0x01,0x88,0xC0,0x6A, +0x3C,0x0A,0x49,0x18,0x0B,0x39,0x2B,0x69,0x0A,0x84,0x2A,0x2A,0x1C,0x2A,0xC3,0x8C, +0x19,0x50,0x09,0x91,0xA7,0x8D,0x18,0x1A,0x28,0x00,0xA0,0x94,0x10,0x1F,0x20,0x90, +0x8A,0x12,0xD0,0x1A,0x5A,0x81,0x04,0xBC,0x23,0x10,0xE0,0x90,0x90,0x18,0x1A,0xA6, +0x12,0xB1,0xD0,0x4A,0x08,0x82,0x92,0xB6,0x9A,0x0A,0x12,0x88,0xC3,0xC5,0x8A,0x89, +0x20,0xB5,0x93,0x0B,0x18,0x00,0x09,0xF2,0x88,0x2A,0x4A,0x08,0x05,0xB2,0xA9,0x3B, +0x5D,0x28,0xA4,0xB1,0x00,0x19,0x19,0x7A,0xA3,0xB3,0x0A,0x90,0xA1,0xC4,0x80,0xBA, +0x50,0x13,0xC1,0xC2,0x9A,0x2A,0x7B,0x28,0x84,0xC1,0x09,0x3B,0x4E,0x20,0x91,0xA1, +0x18,0xAB,0x79,0x10,0xB4,0x08,0x9A,0x11,0x2B,0xF0,0x93,0xAA,0x01,0x6A,0x01,0x93, +0x80,0xB8,0x2A,0x5B,0x10,0x80,0x89,0x4A,0x5B,0x92,0x15,0xB2,0xA0,0x2F,0x19,0x93, +0xB8,0x95,0x80,0x1C,0x21,0xA9,0x02,0x0B,0xA0,0x5A,0x18,0x98,0x39,0x1B,0x68,0x00, +0x91,0x91,0x9C,0x39,0x3E,0x18,0x84,0xB3,0x9B,0x7A,0x08,0x18,0x0A,0xB5,0x91,0x0B, +0x28,0x39,0x19,0x90,0x0A,0x50,0xAC,0x11,0x01,0xAB,0x88,0x52,0x1B,0x83,0xC4,0xA2, +0x9A,0xAB,0x03,0x90,0x19,0x93,0x81,0x08,0x92,0x9A,0x68,0x98,0x19,0x39,0xC1,0x92, +0x8A,0x38,0x4E,0x02,0xB1,0x90,0xC3,0x18,0x2B,0x04,0xC3,0xD2,0x91,0x90,0x81,0x89, +0x13,0xF1,0x88,0x93,0xA2,0x00,0x91,0xC0,0x5B,0x21,0x99,0x93,0x06,0x9A,0x1B,0x48, +0x99,0xB7,0x90,0x89,0x18,0x1B,0x11,0xA4,0xB2,0x81,0x9A,0x08,0x97,0x98,0x91,0x10, +0xB8,0x06,0xA2,0xA0,0x29,0x2B,0x21,0xC2,0xD1,0x10,0x1A,0x4A,0x29,0xF1,0x98,0x29, +0x1B,0x31,0x10,0xA0,0xA1,0x1D,0x5A,0x29,0xB2,0x82,0xA8,0x0F,0x28,0x21,0x09,0x91, +0x82,0x4D,0x10,0xA3,0xB0,0x89,0x4C,0x39,0xA0,0xA4,0xA1,0x89,0x1E,0x28,0x29,0xA3, +0xC3,0x2D,0x19,0x01,0x49,0x01,0x9B,0x0C,0x21,0xC2,0xA2,0x93,0x7C,0x2A,0x10,0x90, + +/* Source: 08HH.ROM */ +/* Length: 384 / 0x00000180 */ + +0x75,0xF2,0xAB,0x7D,0x7E,0x5C,0x3B,0x4B,0x3C,0x4D,0x4A,0x02,0xB3,0xC5,0xE7,0xE3, +0x92,0xB3,0xC4,0xB3,0xC3,0x8A,0x3B,0x5D,0x5C,0x3A,0x84,0xC2,0x91,0xA4,0xE7,0xF7, +0xF7,0xF4,0xA1,0x1B,0x49,0xA5,0xB1,0x1E,0x7F,0x5A,0x00,0x89,0x39,0xB7,0xA8,0x3D, +0x4A,0x84,0xE7,0xF7,0xE2,0x2D,0x4C,0x3A,0x4E,0x7D,0x04,0xB0,0x2D,0x4B,0x10,0x80, +0xA3,0x99,0x10,0x0E,0x59,0x93,0xC4,0xB1,0x81,0xC4,0xA2,0xB2,0x88,0x08,0x3F,0x3B, +0x28,0xA6,0xC3,0xA2,0xA2,0xC5,0xC1,0x3F,0x7E,0x39,0x81,0x93,0xC2,0xA3,0xE5,0xD2, +0x80,0x93,0xB8,0x6D,0x49,0x82,0xD4,0xA1,0x90,0x01,0xA0,0x09,0x04,0xE3,0xB2,0x91, +0xB7,0xB3,0xA8,0x2A,0x03,0xF3,0xA1,0x92,0xC5,0xC3,0xB2,0x0B,0x30,0xB3,0x8E,0x6D, +0x4A,0x01,0xB4,0xB4,0xC4,0xC3,0x99,0x3B,0x12,0xE3,0xA1,0x88,0x82,0xB4,0x9A,0x5C, +0x3A,0x18,0x93,0xC3,0xB3,0xB4,0xA8,0x19,0x04,0xF3,0xA8,0x3B,0x10,0xA2,0x88,0xA5, +0xB2,0x0B,0x6D,0x4B,0x10,0x91,0x89,0x3C,0x18,0x18,0xA6,0xC4,0xC3,0x98,0x19,0x2B, +0x20,0x91,0xA0,0x4E,0x28,0x93,0xB3,0xC2,0x92,0xA9,0x5A,0x96,0xC4,0xC2,0x09,0x01, +0xC4,0xA1,0x92,0xC4,0xA1,0x89,0x10,0xA3,0xA1,0x90,0x1C,0x5A,0x01,0xC5,0xA1,0x92, +0xD4,0xB3,0xC4,0xC4,0xC3,0xA1,0x88,0x1A,0x28,0x89,0x3C,0x3A,0x3D,0x29,0x00,0x93, +0xB0,0x3D,0x28,0x80,0x91,0x82,0xE3,0x99,0x2A,0x11,0xD6,0xC3,0x99,0x29,0x82,0xC4, +0xC3,0xA1,0x0A,0x3B,0x3D,0x3A,0x02,0xC3,0xA2,0x99,0x3B,0x2C,0x7C,0x28,0x81,0xA3, +0xB2,0xA3,0xB1,0x08,0x1A,0x3C,0x18,0x2E,0x4C,0x39,0xA5,0xB3,0xB4,0xC2,0x88,0x08, +0x19,0x0A,0x49,0xB7,0xB3,0xA2,0xA1,0x92,0xA1,0x93,0xB1,0x0C,0x7D,0x39,0x93,0xB3, +0xB1,0x1A,0x19,0x5D,0x28,0xA6,0xC4,0xB2,0x90,0x09,0x2A,0x18,0x1B,0x5B,0x28,0x88, +0x2C,0x29,0x82,0xA0,0x18,0x91,0x2D,0x29,0x2B,0x5C,0x4C,0x3B,0x4C,0x28,0x80,0x92, +0x90,0x09,0x2B,0x28,0x1D,0x6B,0x11,0xC5,0xB2,0x0B,0x39,0x09,0x4D,0x28,0x88,0x00, +0x1B,0x28,0x94,0xE3,0xA0,0x1A,0x28,0xB5,0xB4,0xB3,0xB2,0x93,0xE2,0x91,0x92,0xD4, +0xA0,0x1B,0x4A,0x01,0xA1,0x88,0x2D,0x5C,0x3B,0x28,0x08,0x93,0xD4,0xB2,0x91,0xB4, +0xA0,0x3E,0x3B,0x4B,0x3B,0x29,0x08,0x93,0x9B,0x7B,0x3A,0x19,0x00,0x80,0x80,0xA0, + +/* Source: 10TOM.ROM */ +/* Length: 640 / 0x00000280 */ + +0x77,0x27,0x87,0x01,0x2D,0x4F,0xC3,0xC1,0x92,0x91,0x89,0x59,0x83,0x1A,0x32,0xC2, +0x95,0xB1,0x81,0x88,0x81,0x4A,0x3D,0x11,0x9E,0x0B,0x88,0x0C,0x18,0x3B,0x11,0x11, +0x91,0x00,0xA0,0xE2,0x0A,0x48,0x13,0x24,0x81,0x48,0x1B,0x39,0x1C,0x83,0x84,0xA1, +0xD1,0x8E,0x8A,0x0B,0xC0,0x98,0x92,0xB8,0x39,0x90,0x10,0x92,0xF0,0xB5,0x88,0x32, +0x49,0x51,0x21,0x03,0x82,0x10,0x8A,0x7A,0x09,0x00,0xA2,0xCA,0x1B,0xCC,0x1C,0xB9, +0x8E,0x89,0x89,0xA1,0x89,0x92,0x29,0x11,0x60,0x40,0x14,0x22,0x32,0x78,0x40,0x01, +0x02,0x90,0x81,0xAB,0x0B,0x00,0xAF,0x99,0xCC,0xAB,0xDA,0xA9,0x99,0x1B,0x30,0x14, +0x92,0x22,0x19,0x68,0x32,0x14,0x26,0x13,0x23,0x23,0x20,0x12,0x9A,0xA8,0xB9,0xFA, +0xAA,0xCA,0xCC,0x0C,0xA8,0xAE,0x88,0xB9,0x88,0xA0,0x02,0x21,0x50,0x43,0x03,0x81, +0x2A,0x11,0x34,0x63,0x24,0x33,0x22,0x38,0x8B,0xEA,0xAE,0x99,0xA0,0x90,0x82,0x00, +0x89,0xBF,0x8A,0xE8,0xA9,0x90,0x01,0x12,0x13,0x12,0x08,0xA9,0xAA,0xC9,0x22,0x63, +0x63,0x12,0x44,0x00,0x10,0x88,0x9C,0x98,0xA1,0x85,0x03,0x32,0x36,0x80,0x89,0xDB, +0xDB,0xBB,0xB9,0xBA,0x01,0x81,0x28,0x19,0xCB,0xFA,0xBC,0x09,0x13,0x37,0x34,0x34, +0x23,0x31,0x20,0x10,0x00,0x00,0x28,0x38,0x10,0x88,0xEC,0x8D,0xCB,0xBC,0xCC,0xBB, +0xBB,0xC9,0x99,0x00,0x00,0x33,0x11,0x22,0x81,0x07,0x41,0x54,0x34,0x34,0x22,0x31, +0x00,0x88,0x9A,0x9B,0x98,0xAB,0x8E,0x9B,0xBD,0x9C,0xBC,0xBB,0xDA,0xAA,0xA9,0x99, +0x18,0x38,0x60,0x20,0x31,0x13,0x13,0x51,0x14,0x31,0x53,0x33,0x35,0x22,0x01,0x8A, +0x9C,0xA9,0xCA,0xC9,0xA8,0x00,0x10,0x81,0x9C,0x9E,0xAB,0xCC,0xAB,0xBA,0x98,0x30, +0x52,0x03,0x81,0x08,0x9C,0xAC,0xAC,0x18,0x11,0x03,0x51,0x61,0x41,0x31,0x31,0x02, +0x01,0x20,0x24,0x43,0x44,0x40,0x30,0x10,0xBC,0xBE,0xCB,0xDB,0xAB,0xBA,0x99,0x98, +0x99,0xAA,0xBD,0xAA,0xC8,0x90,0x11,0x53,0x37,0x23,0x43,0x34,0x33,0x33,0x33,0x11, +0x28,0x00,0x19,0xA9,0x9A,0xCB,0xCE,0xBB,0xEB,0xBC,0xBB,0xCA,0xBA,0xA8,0x88,0x11, +0x12,0x21,0x20,0x22,0x26,0x26,0x23,0x23,0x43,0x24,0x22,0x32,0x20,0x31,0x81,0x9A, +0xBC,0xBC,0xCB,0xBD,0x9A,0xA9,0x90,0x98,0xBA,0xCC,0xCB,0xBC,0x8B,0x88,0x22,0x35, +0x23,0x12,0x99,0x8B,0xAA,0xAA,0x89,0x82,0x93,0x31,0x42,0x23,0x23,0x21,0x32,0x11, +0x20,0x13,0x13,0x24,0x24,0x24,0x22,0x11,0x8A,0x9E,0xAC,0xAC,0xAA,0xBA,0xAA,0xAB, +0xBD,0xBC,0xCB,0xCB,0xA9,0xA8,0x91,0x12,0x44,0x43,0x44,0x34,0x34,0x42,0x33,0x42, +0x21,0x11,0x11,0x88,0x80,0xAA,0x0B,0xAC,0xCB,0xEC,0xAC,0xBA,0xCA,0xAB,0x9A,0x99, +0x80,0x91,0x09,0x08,0x10,0x22,0x44,0x43,0x44,0x33,0x43,0x22,0x13,0x21,0x22,0x20, +0x09,0x88,0xB9,0xC8,0xBB,0xAB,0xAB,0xA9,0xA9,0x9B,0x9B,0x99,0x90,0x90,0x00,0x81, +0x00,0x08,0x09,0x8A,0x9A,0xAA,0xA9,0xA9,0x99,0x90,0x80,0x01,0x80,0x00,0x09,0x31, +0x32,0x44,0x33,0x43,0x34,0x33,0x24,0x22,0x23,0x12,0x10,0x09,0x9B,0xAB,0xCA,0xCC, +0xBB,0xCB,0xDA,0xCA,0xAB,0xCA,0xAB,0xA9,0xA8,0x92,0x12,0x43,0x53,0x35,0x23,0x33, +0x43,0x43,0x52,0x22,0x22,0x21,0x01,0x09,0x89,0xA9,0xBB,0xBD,0xBC,0xCB,0xDA,0xAB, +0xAB,0xAB,0xAA,0xA9,0x99,0xA8,0x09,0x01,0x11,0x34,0x25,0x23,0x33,0x51,0x22,0x31, +0x12,0x20,0x21,0x12,0x10,0x80,0x99,0x9A,0x99,0x99,0x88,0x08,0x00,0x88,0xA9,0x99, +0x99,0x80,0x80,0x10,0x01,0x00,0x9A,0xAA,0xBB,0xBA,0xBA,0xA9,0x99,0x99,0x89,0x99, +0x99,0x00,0x01,0x33,0x35,0x24,0x23,0x34,0x23,0x33,0x34,0x33,0x43,0x32,0x21,0x88, +0xAB,0xBD,0xBB,0xDB,0xAB,0xBA,0xBB,0xDA,0xBB,0xCB,0xBB,0xBC,0xA8,0x90,0x01,0x12, +0x23,0x43,0x53,0x34,0x34,0x39,0x80,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00, + +/* Source: 20RIM.ROM */ +/* Length: 128 / 0x00000080 */ + +0x0F,0xFF,0x73,0x8E,0x71,0xCD,0x00,0x49,0x10,0x90,0x21,0x49,0xA0,0xDB,0x02,0x3A, +0xE3,0x0A,0x50,0x98,0xC0,0x59,0xA2,0x99,0x09,0x22,0xA2,0x80,0x10,0xA8,0x5B,0xD2, +0x88,0x21,0x09,0x96,0xA8,0x10,0x0A,0xE0,0x08,0x48,0x19,0xAB,0x52,0xA8,0x92,0x0C, +0x03,0x19,0xE2,0x0A,0x12,0xC2,0x81,0x1E,0x01,0xD0,0x48,0x88,0x98,0x01,0x49,0x91, +0xAA,0x2C,0x25,0x89,0x88,0xB5,0x81,0xA2,0x9A,0x12,0x9E,0x38,0x3B,0x81,0x9B,0x59, +0x01,0x93,0xCA,0x4A,0x21,0xA0,0x3D,0x0A,0x39,0x3D,0x12,0xA8,0x3F,0x18,0x01,0x92, +0x1C,0x00,0xB2,0x48,0xB9,0x94,0xA3,0x19,0x4F,0x19,0xB2,0x32,0x90,0xBA,0x01,0xE6, +0x91,0x80,0xC1,0xA4,0x2A,0x08,0xA1,0xB1,0x25,0xD2,0x88,0x99,0x21,0x80,0x88,0x80, +}; + + + +/* flag enable control 0x110 */ +INLINE void YM2608IRQFlagWrite(FM_OPN *OPN, YM2608 *F2608, int v) +{ + if( v & 0x80 ) + { /* Reset IRQ flag */ + FM_STATUS_RESET(&OPN->ST, 0xf7); /* don't touch BUFRDY flag otherwise we'd have to call ymdeltat module to set the flag back */ + } + else + { /* Set status flag mask */ + F2608->flagmask = (~(v&0x1f)); + FM_IRQMASK_SET(&OPN->ST, (F2608->irqmask & F2608->flagmask) ); + } +} + +/* compatible mode & IRQ enable control 0x29 */ +INLINE void YM2608IRQMaskWrite(FM_OPN *OPN, YM2608 *F2608, int v) +{ + /* SCH,xx,xxx,EN_ZERO,EN_BRDY,EN_EOS,EN_TB,EN_TA */ + + /* extend 3ch. enable/disable */ + if(v&0x80) + OPN->type |= TYPE_6CH; /* OPNA mode - 6 FM channels */ + else + OPN->type &= ~TYPE_6CH; /* OPN mode - 3 FM channels */ + + /* IRQ MASK store and set */ + F2608->irqmask = v&0x1f; + FM_IRQMASK_SET(&OPN->ST, (F2608->irqmask & F2608->flagmask) ); +} + +/* Generate samples for one of the YM2608s */ +void YM2608UpdateOne(void *chip, FMSAMPLE **buffer, int length) +{ + YM2608 *F2608 = chip; + FM_OPN *OPN = &F2608->OPN; + YM_DELTAT *DELTAT = &F2608->deltaT; + int i,j; + FMSAMPLE *bufL,*bufR; + FM_CH *cch[6]; + + /* set bufer */ + bufL = buffer[0]; + bufR = buffer[1]; + + cch[0] = &F2608->CH[0]; + cch[1] = &F2608->CH[1]; + cch[2] = &F2608->CH[2]; + cch[3] = &F2608->CH[3]; + cch[4] = &F2608->CH[4]; + cch[5] = &F2608->CH[5]; + /* setup adpcm rom address */ + pcmbufA = F2608->pcmbuf; + pcmsizeA = F2608->pcm_size; + + /* refresh PG and EG */ + refresh_fc_eg_chan( cch[0] ); + refresh_fc_eg_chan( cch[1] ); + if( (OPN->ST.mode & 0xc0) ) + { + /* 3SLOT MODE */ + if( cch[2]->SLOT[SLOT1].Incr==-1) + { + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT1] , OPN->SL3.fc[1] , OPN->SL3.kcode[1] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT2] , OPN->SL3.fc[2] , OPN->SL3.kcode[2] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT3] , OPN->SL3.fc[0] , OPN->SL3.kcode[0] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT4] , cch[2]->fc , cch[2]->kcode ); + } + }else refresh_fc_eg_chan( cch[2] ); + refresh_fc_eg_chan( cch[3] ); + refresh_fc_eg_chan( cch[4] ); + refresh_fc_eg_chan( cch[5] ); + + + /* buffering */ + for(i=0; i < length ; i++) + { + + advance_lfo(OPN); + + /* clear output acc. */ + out_adpcm[OUTD_LEFT] = out_adpcm[OUTD_RIGHT]= out_adpcm[OUTD_CENTER] = 0; + out_delta[OUTD_LEFT] = out_delta[OUTD_RIGHT]= out_delta[OUTD_CENTER] = 0; + /* clear outputs */ + out_fm[0] = 0; + out_fm[1] = 0; + out_fm[2] = 0; + out_fm[3] = 0; + out_fm[4] = 0; + out_fm[5] = 0; + + /* advance envelope generator */ + OPN->eg_timer += OPN->eg_timer_add; + while (OPN->eg_timer >= OPN->eg_timer_overflow) + { + OPN->eg_timer -= OPN->eg_timer_overflow; + OPN->eg_cnt++; + + advance_eg_channel(OPN, &cch[0]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[1]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[2]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[3]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[4]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[5]->SLOT[SLOT1]); + } + + /* calculate FM */ + chan_calc(OPN, cch[0] ); + chan_calc(OPN, cch[1] ); + chan_calc(OPN, cch[2] ); + chan_calc(OPN, cch[3] ); + chan_calc(OPN, cch[4] ); + chan_calc(OPN, cch[5] ); + + /* deltaT ADPCM */ + if( DELTAT->portstate&0x80 ) + YM_DELTAT_ADPCM_CALC(DELTAT); + + /* ADPCMA */ + for( j = 0; j < 6; j++ ) + { + if( F2608->adpcm[j].flag ) + ADPCMA_calc_chan( F2608, &F2608->adpcm[j]); + } + + /* buffering */ + { + int lt,rt; + + lt = out_adpcm[OUTD_LEFT] + out_adpcm[OUTD_CENTER]; + rt = out_adpcm[OUTD_RIGHT] + out_adpcm[OUTD_CENTER]; + lt += (out_delta[OUTD_LEFT] + out_delta[OUTD_CENTER])>>9; + rt += (out_delta[OUTD_RIGHT] + out_delta[OUTD_CENTER])>>9; + lt += ((out_fm[0]>>1) & OPN->pan[0]); /* shift right verified on real YM2608 */ + rt += ((out_fm[0]>>1) & OPN->pan[1]); + lt += ((out_fm[1]>>1) & OPN->pan[2]); + rt += ((out_fm[1]>>1) & OPN->pan[3]); + lt += ((out_fm[2]>>1) & OPN->pan[4]); + rt += ((out_fm[2]>>1) & OPN->pan[5]); + lt += ((out_fm[3]>>1) & OPN->pan[6]); + rt += ((out_fm[3]>>1) & OPN->pan[7]); + lt += ((out_fm[4]>>1) & OPN->pan[8]); + rt += ((out_fm[4]>>1) & OPN->pan[9]); + lt += ((out_fm[5]>>1) & OPN->pan[10]); + rt += ((out_fm[5]>>1) & OPN->pan[11]); + + lt >>= FINAL_SH; + rt >>= FINAL_SH; + + Limit( lt, MAXOUT, MINOUT ); + Limit( rt, MAXOUT, MINOUT ); + /* buffering */ + bufL[i] = lt; + bufR[i] = rt; + + #ifdef SAVE_SAMPLE + SAVE_ALL_CHANNELS + #endif + + } + + /* timer A control */ + INTERNAL_TIMER_A( &OPN->ST , cch[2] ) + } + INTERNAL_TIMER_B(&OPN->ST,length) + + + /* check IRQ for DELTA-T EOS */ + FM_STATUS_SET(&OPN->ST, 0); + +} +#ifdef __STATE_H__ +void YM2608Postload(void *chip) +{ + if (chip) + { + YM2608 *F2608 = (YM2608 *)chip; + int r; + + /* prescaler */ + OPNPrescaler_w(&F2608->OPN,1,2); + F2608->deltaT.freqbase = F2608->OPN.ST.freqbase; + /* IRQ mask / mode */ + YM2608IRQMaskWrite(&F2608->OPN, F2608, F2608->REGS[0x29]); + /* SSG registers */ + for(r=0;r<16;r++) + { + (*F2608->OPN.ST.SSG->write)(F2608->OPN.ST.param,0,r); + (*F2608->OPN.ST.SSG->write)(F2608->OPN.ST.param,1,F2608->REGS[r]); + } + + /* OPN registers */ + /* DT / MULTI , TL , KS / AR , AMON / DR , SR , SL / RR , SSG-EG */ + for(r=0x30;r<0x9e;r++) + if((r&3) != 3) + { + OPNWriteReg(&F2608->OPN,r,F2608->REGS[r]); + OPNWriteReg(&F2608->OPN,r|0x100,F2608->REGS[r|0x100]); + } + /* FB / CONNECT , L / R / AMS / PMS */ + for(r=0xb0;r<0xb6;r++) + if((r&3) != 3) + { + OPNWriteReg(&F2608->OPN,r,F2608->REGS[r]); + OPNWriteReg(&F2608->OPN,r|0x100,F2608->REGS[r|0x100]); + } + /* FM channels */ + /*FM_channel_postload(F2608->CH,6);*/ + /* rhythm(ADPCMA) */ + FM_ADPCMAWrite(F2608,1,F2608->REGS[0x111]); + for( r=0x08 ; r<0x0c ; r++) + FM_ADPCMAWrite(F2608,r,F2608->REGS[r+0x110]); + /* Delta-T ADPCM unit */ + YM_DELTAT_postload(&F2608->deltaT , &F2608->REGS[0x100] ); + } +} + +static void YM2608_save_state(YM2608 *F2608, int index) +{ + static const char statename[] = "YM2608"; + + state_save_register_item_array(statename, index, F2608->REGS); + FMsave_state_st(statename,index,&F2608->OPN.ST); + FMsave_state_channel(statename,index,F2608->CH,6); + /* 3slots */ + state_save_register_item_array(statename, index, F2608->OPN.SL3.fc); + state_save_register_item(statename, index, F2608->OPN.SL3.fn_h); + state_save_register_item_array(statename, index, F2608->OPN.SL3.kcode); + /* address register1 */ + state_save_register_item(statename, index, F2608->addr_A1); + /* rythm(ADPCMA) */ + FMsave_state_adpcma(statename,index,F2608->adpcm); + /* Delta-T ADPCM unit */ + YM_DELTAT_savestate(statename,index,&F2608->deltaT); +} +#endif /* _STATE_H */ + +static void YM2608_deltat_status_set(void *chip, UINT8 changebits) +{ + YM2608 *F2608 = chip; + FM_STATUS_SET(&(F2608->OPN.ST), changebits); +} +static void YM2608_deltat_status_reset(void *chip, UINT8 changebits) +{ + YM2608 *F2608 = chip; + FM_STATUS_RESET(&(F2608->OPN.ST), changebits); +} +/* YM2608(OPNA) */ +void * YM2608Init(void *param, int index, int clock, int rate, + void *pcmrom,int pcmsize, + FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler, const struct ssg_callbacks *ssg) +{ + YM2608 *F2608; + + /* allocate extend state space */ + if( (F2608 = (YM2608 *)malloc(sizeof(YM2608)))==NULL) + return NULL; + /* clear */ + memset(F2608,0,sizeof(YM2608)); + /* allocate total level table (128kb space) */ + if( !init_tables() ) + { + free( F2608 ); + return NULL; + } + + F2608->OPN.ST.param = param; + F2608->OPN.type = TYPE_YM2608; + F2608->OPN.P_CH = F2608->CH; + F2608->OPN.ST.clock = clock; + F2608->OPN.ST.rate = rate; + + /* External handlers */ + F2608->OPN.ST.Timer_Handler = TimerHandler; + F2608->OPN.ST.IRQ_Handler = IRQHandler; + F2608->OPN.ST.SSG = ssg; + + /* DELTA-T */ + F2608->deltaT.memory = (UINT8 *)pcmrom; + F2608->deltaT.memory_size = pcmsize; + + /*F2608->deltaT.write_time = 20.0 / clock;*/ /* a single byte write takes 20 cycles of main clock */ + /*F2608->deltaT.read_time = 18.0 / clock;*/ /* a single byte read takes 18 cycles of main clock */ + + F2608->deltaT.status_set_handler = YM2608_deltat_status_set; + F2608->deltaT.status_reset_handler = YM2608_deltat_status_reset; + F2608->deltaT.status_change_which_chip = F2608; + F2608->deltaT.status_change_EOS_bit = 0x04; /* status flag: set bit2 on End Of Sample */ + F2608->deltaT.status_change_BRDY_bit = 0x08; /* status flag: set bit3 on BRDY */ + F2608->deltaT.status_change_ZERO_bit = 0x10; /* status flag: set bit4 if silence continues for more than 290 miliseconds while recording the ADPCM */ + + /* ADPCM Rhythm */ + F2608->pcmbuf = YM2608_ADPCM_ROM; + F2608->pcm_size = 0x2000; + + YM2608ResetChip(F2608); + + Init_ADPCMATable(); + +#ifdef __STATE_H__ + YM2608_save_state(F2608, index); +#endif + return F2608; +} + +/* shut down emulator */ +void YM2608Shutdown(void *chip) +{ + YM2608 *F2608 = chip; + + FMCloseTable(); + free(F2608); +} + +/* reset one of chips */ +void YM2608ResetChip(void *chip) +{ + int i; + YM2608 *F2608 = chip; + FM_OPN *OPN = &F2608->OPN; + YM_DELTAT *DELTAT = &F2608->deltaT; + + /* Reset Prescaler */ + OPNPrescaler_w(OPN , 0 , 2); + F2608->deltaT.freqbase = OPN->ST.freqbase; + /* reset SSG section */ + (*OPN->ST.SSG->reset)(OPN->ST.param); + + /* status clear */ + FM_BUSY_CLEAR(&OPN->ST); + + /* register 0x29 - default value after reset is: + enable only 3 FM channels and enable all the status flags */ + YM2608IRQMaskWrite(OPN, F2608, 0x1f ); /* default value for D4-D0 is 1 */ + + /* register 0x10, A1=1 - default value is 1 for D4, D3, D2, 0 for the rest */ + YM2608IRQFlagWrite(OPN, F2608, 0x1c ); /* default: enable timer A and B, disable EOS, BRDY and ZERO */ + + OPNWriteMode(OPN,0x27,0x30); /* mode 0 , timer reset */ + + OPN->eg_timer = 0; + OPN->eg_cnt = 0; + + FM_STATUS_RESET(&OPN->ST, 0xff); + + reset_channels( &OPN->ST , F2608->CH , 6 ); + /* reset OPerator paramater */ + for(i = 0xb6 ; i >= 0xb4 ; i-- ) + { + OPNWriteReg(OPN,i ,0xc0); + OPNWriteReg(OPN,i|0x100,0xc0); + } + for(i = 0xb2 ; i >= 0x30 ; i-- ) + { + OPNWriteReg(OPN,i ,0); + OPNWriteReg(OPN,i|0x100,0); + } + for(i = 0x26 ; i >= 0x20 ; i-- ) OPNWriteReg(OPN,i,0); + + /* ADPCM - percussion sounds */ + for( i = 0; i < 6; i++ ) + { + if (i<=3) /* channels 0,1,2,3 */ + F2608->adpcm[i].step = (UINT32)((float)(1<OPN.ST.freqbase)/3.0); + else /* channels 4 and 5 work with slower clock */ + F2608->adpcm[i].step = (UINT32)((float)(1<OPN.ST.freqbase)/6.0); + + F2608->adpcm[i].start = YM2608_ADPCM_ROM_addr[i*2]; + F2608->adpcm[i].end = YM2608_ADPCM_ROM_addr[i*2+1]; + + F2608->adpcm[i].now_addr = 0; + F2608->adpcm[i].now_step = 0; + /* F2608->adpcm[i].delta = 21866; */ + F2608->adpcm[i].vol_mul = 0; + F2608->adpcm[i].pan = &out_adpcm[OUTD_CENTER]; /* default center */ + F2608->adpcm[i].flagMask = 0; + F2608->adpcm[i].flag = 0; + F2608->adpcm[i].adpcm_acc = 0; + F2608->adpcm[i].adpcm_step= 0; + F2608->adpcm[i].adpcm_out = 0; + } + F2608->adpcmTL = 0x3f; + + F2608->adpcm_arrivedEndAddress = 0; /* not used */ + + /* DELTA-T unit */ + DELTAT->freqbase = OPN->ST.freqbase; + DELTAT->output_pointer = out_delta; + DELTAT->portshift = 5; /* always 5bits shift */ /* ASG */ + DELTAT->output_range = 1<<23; + YM_DELTAT_ADPCM_Reset(DELTAT,OUTD_CENTER,YM_DELTAT_EMULATION_MODE_NORMAL); +} + +/* YM2608 write */ +/* n = number */ +/* a = address */ +/* v = value */ +int YM2608Write(void *chip, int a,UINT8 v) +{ + YM2608 *F2608 = chip; + FM_OPN *OPN = &F2608->OPN; + int addr; + + v &= 0xff; /*adjust to 8 bit bus */ + + + switch(a&3) + { + case 0: /* address port 0 */ + OPN->ST.address = v; + F2608->addr_A1 = 0; + + /* Write register to SSG emulator */ + if( v < 16 ) (*OPN->ST.SSG->write)(OPN->ST.param,0,v); + /* prescaler selecter : 2d,2e,2f */ + if( v >= 0x2d && v <= 0x2f ) + { + OPNPrescaler_w(OPN , v , 2); + F2608->deltaT.freqbase = OPN->ST.freqbase; + } + break; + + case 1: /* data port 0 */ + if (F2608->addr_A1 != 0) + break; /* verified on real YM2608 */ + + addr = OPN->ST.address; + F2608->REGS[addr] = v; + switch(addr & 0xf0) + { + case 0x00: /* SSG section */ + /* Write data to SSG emulator */ + (*OPN->ST.SSG->write)(OPN->ST.param,a,v); + break; + case 0x10: /* 0x10-0x1f : Rhythm section */ + YM2608UpdateReq(OPN->ST.param); + FM_ADPCMAWrite(F2608,addr-0x10,v); + break; + case 0x20: /* Mode Register */ + switch(addr) + { + case 0x29: /* SCH,xx,xxx,EN_ZERO,EN_BRDY,EN_EOS,EN_TB,EN_TA */ + YM2608IRQMaskWrite(OPN, F2608, v); + break; + default: + YM2608UpdateReq(OPN->ST.param); + OPNWriteMode(OPN,addr,v); + } + break; + default: /* OPN section */ + YM2608UpdateReq(OPN->ST.param); + OPNWriteReg(OPN,addr,v); + } + break; + + case 2: /* address port 1 */ + OPN->ST.address = v; + F2608->addr_A1 = 1; + break; + + case 3: /* data port 1 */ + if (F2608->addr_A1 != 1) + break; /* verified on real YM2608 */ + + addr = OPN->ST.address; + F2608->REGS[addr | 0x100] = v; + YM2608UpdateReq(OPN->ST.param); + switch( addr & 0xf0 ) + { + case 0x00: /* DELTAT PORT */ + switch( addr ) + { + case 0x0e: /* DAC data */ + logerror("YM2608: write to DAC data (unimplemented) value=%02x\n",v); + break; + default: + /* 0x00-0x0d */ + YM_DELTAT_ADPCM_Write(&F2608->deltaT,addr,v); + } + break; + case 0x10: /* IRQ Flag control */ + if( addr == 0x10 ) + { + YM2608IRQFlagWrite(OPN, F2608, v); + } + break; + default: + OPNWriteReg(OPN,addr | 0x100,v); + } + } + return OPN->ST.irq; +} + +UINT8 YM2608Read(void *chip,int a) +{ + YM2608 *F2608 = chip; + int addr = F2608->OPN.ST.address; + UINT8 ret = 0; + + switch( a&3 ){ + case 0: /* status 0 : YM2203 compatible */ + /* BUSY:x:x:x:x:x:FLAGB:FLAGA */ + ret = FM_STATUS_FLAG(&F2608->OPN.ST) & 0x83; + break; + + case 1: /* status 0, ID */ + if( addr < 16 ) ret = (*F2608->OPN.ST.SSG->read)(F2608->OPN.ST.param); + else if(addr == 0xff) ret = 0x01; /* ID code */ + break; + + case 2: /* status 1 : status 0 + ADPCM status */ + /* BUSY : x : PCMBUSY : ZERO : BRDY : EOS : FLAGB : FLAGA */ + ret = (FM_STATUS_FLAG(&F2608->OPN.ST) & (F2608->flagmask|0x80)) | ((F2608->deltaT.PCM_BSY & 1)<<5) ; + break; + + case 3: + if(addr == 0x08) + { + ret = YM_DELTAT_ADPCM_Read(&F2608->deltaT); + } + else + { + if(addr == 0x0f) + { + logerror("YM2608 A/D convertion is accessed but not implemented !\n"); + ret = 0x80; /* 2's complement PCM data - result from A/D convertion */ + } + } + break; + } + return ret; +} + +int YM2608TimerOver(void *chip,int c) +{ + YM2608 *F2608 = chip; + + switch(c) + { +#if 0 + case 2: + { /* BUFRDY flag */ + YM_DELTAT_BRDY_callback( &F2608->deltaT ); + } + break; +#endif + case 1: + { /* Timer B */ + TimerBOver( &(F2608->OPN.ST) ); + } + break; + case 0: + { /* Timer A */ + YM2608UpdateReq(F2608->OPN.ST.param); + /* timer update */ + TimerAOver( &(F2608->OPN.ST) ); + /* CSM mode key,TL controll */ + if( F2608->OPN.ST.mode & 0x80 ) + { /* CSM mode total level latch and auto key on */ + CSMKeyControll( &(F2608->CH[2]) ); + } + } + break; + default: + break; + } + + return F2608->OPN.ST.irq; +} + +#endif /* BUILD_YM2608 */ + + + +#if (BUILD_YM2610||BUILD_YM2610B) +/* YM2610(OPNB) */ + +/* Generate samples for one of the YM2610s */ +void YM2610UpdateOne(void *chip, FMSAMPLE **buffer, int length) +{ + YM2610 *F2610 = chip; + FM_OPN *OPN = &F2610->OPN; + YM_DELTAT *DELTAT = &F2610->deltaT; + int i,j; + FMSAMPLE *bufL,*bufR; + FM_CH *cch[4]; + + /* buffer setup */ + bufL = buffer[0]; + bufR = buffer[1]; + + cch[0] = &F2610->CH[1]; + cch[1] = &F2610->CH[2]; + cch[2] = &F2610->CH[4]; + cch[3] = &F2610->CH[5]; + /* setup adpcm rom address */ + pcmbufA = F2610->pcmbuf; + pcmsizeA = F2610->pcm_size; + +#ifdef YM2610B_WARNING +#define FM_KEY_IS(SLOT) ((SLOT)->key) +#define FM_MSG_YM2610B "YM2610-%p.CH%d is playing,Check whether the type of the chip is YM2610B\n" + /* Check YM2610B warning message */ + if( FM_KEY_IS(&F2610->CH[0].SLOT[3]) ) + LOG(LOG_WAR,(FM_MSG_YM2610B,F2610->OPN.ST.param,0)); + if( FM_KEY_IS(&F2610->CH[3].SLOT[3]) ) + LOG(LOG_WAR,(FM_MSG_YM2610B,F2610->OPN.ST.param,3)); +#endif + + /* refresh PG and EG */ + refresh_fc_eg_chan( cch[0] ); + if( (OPN->ST.mode & 0xc0) ) + { + /* 3SLOT MODE */ + if( cch[1]->SLOT[SLOT1].Incr==-1) + { + refresh_fc_eg_slot(&cch[1]->SLOT[SLOT1] , OPN->SL3.fc[1] , OPN->SL3.kcode[1] ); + refresh_fc_eg_slot(&cch[1]->SLOT[SLOT2] , OPN->SL3.fc[2] , OPN->SL3.kcode[2] ); + refresh_fc_eg_slot(&cch[1]->SLOT[SLOT3] , OPN->SL3.fc[0] , OPN->SL3.kcode[0] ); + refresh_fc_eg_slot(&cch[1]->SLOT[SLOT4] , cch[1]->fc , cch[1]->kcode ); + } + }else refresh_fc_eg_chan( cch[1] ); + refresh_fc_eg_chan( cch[2] ); + refresh_fc_eg_chan( cch[3] ); + + /* buffering */ + for(i=0; i < length ; i++) + { + + advance_lfo(OPN); + + /* clear output acc. */ + out_adpcm[OUTD_LEFT] = out_adpcm[OUTD_RIGHT]= out_adpcm[OUTD_CENTER] = 0; + out_delta[OUTD_LEFT] = out_delta[OUTD_RIGHT]= out_delta[OUTD_CENTER] = 0; + /* clear outputs */ + out_fm[1] = 0; + out_fm[2] = 0; + out_fm[4] = 0; + out_fm[5] = 0; + + /* advance envelope generator */ + OPN->eg_timer += OPN->eg_timer_add; + while (OPN->eg_timer >= OPN->eg_timer_overflow) + { + OPN->eg_timer -= OPN->eg_timer_overflow; + OPN->eg_cnt++; + + advance_eg_channel(OPN, &cch[0]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[1]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[2]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[3]->SLOT[SLOT1]); + } + + /* calculate FM */ + chan_calc(OPN, cch[0] ); /*remapped to 1*/ + chan_calc(OPN, cch[1] ); /*remapped to 2*/ + chan_calc(OPN, cch[2] ); /*remapped to 4*/ + chan_calc(OPN, cch[3] ); /*remapped to 5*/ + + /* deltaT ADPCM */ + if( DELTAT->portstate&0x80 ) + YM_DELTAT_ADPCM_CALC(DELTAT); + + /* ADPCMA */ + for( j = 0; j < 6; j++ ) + { + if( F2610->adpcm[j].flag ) + ADPCMA_calc_chan( F2610, &F2610->adpcm[j]); + } + + /* buffering */ + { + int lt,rt; + + lt = out_adpcm[OUTD_LEFT] + out_adpcm[OUTD_CENTER]; + rt = out_adpcm[OUTD_RIGHT] + out_adpcm[OUTD_CENTER]; + lt += (out_delta[OUTD_LEFT] + out_delta[OUTD_CENTER])>>9; + rt += (out_delta[OUTD_RIGHT] + out_delta[OUTD_CENTER])>>9; + + + lt += ((out_fm[1]>>1) & OPN->pan[2]); /* the shift right was verified on real chip */ + rt += ((out_fm[1]>>1) & OPN->pan[3]); + lt += ((out_fm[2]>>1) & OPN->pan[4]); + rt += ((out_fm[2]>>1) & OPN->pan[5]); + + lt += ((out_fm[4]>>1) & OPN->pan[8]); + rt += ((out_fm[4]>>1) & OPN->pan[9]); + lt += ((out_fm[5]>>1) & OPN->pan[10]); + rt += ((out_fm[5]>>1) & OPN->pan[11]); + + + lt >>= FINAL_SH; + rt >>= FINAL_SH; + + Limit( lt, MAXOUT, MINOUT ); + Limit( rt, MAXOUT, MINOUT ); + + #ifdef SAVE_SAMPLE + SAVE_ALL_CHANNELS + #endif + + /* buffering */ + bufL[i] = lt; + bufR[i] = rt; + } + + /* timer A control */ + INTERNAL_TIMER_A( &OPN->ST , cch[1] ) + } + INTERNAL_TIMER_B(&OPN->ST,length) + +} + +#if BUILD_YM2610B +/* Generate samples for one of the YM2610Bs */ +void YM2610BUpdateOne(void *chip, FMSAMPLE **buffer, int length) +{ + YM2610 *F2610 = chip; + FM_OPN *OPN = &F2610->OPN; + YM_DELTAT *DELTAT = &F2610->deltaT; + int i,j; + FMSAMPLE *bufL,*bufR; + FM_CH *cch[6]; + + /* buffer setup */ + bufL = buffer[0]; + bufR = buffer[1]; + + cch[0] = &F2610->CH[0]; + cch[1] = &F2610->CH[1]; + cch[2] = &F2610->CH[2]; + cch[3] = &F2610->CH[3]; + cch[4] = &F2610->CH[4]; + cch[5] = &F2610->CH[5]; + /* setup adpcm rom address */ + pcmbufA = F2610->pcmbuf; + pcmsizeA = F2610->pcm_size; + + /* refresh PG and EG */ + refresh_fc_eg_chan( cch[0] ); + refresh_fc_eg_chan( cch[1] ); + if( (OPN->ST.mode & 0xc0) ) + { + /* 3SLOT MODE */ + if( cch[2]->SLOT[SLOT1].Incr==-1) + { + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT1] , OPN->SL3.fc[1] , OPN->SL3.kcode[1] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT2] , OPN->SL3.fc[2] , OPN->SL3.kcode[2] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT3] , OPN->SL3.fc[0] , OPN->SL3.kcode[0] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT4] , cch[2]->fc , cch[2]->kcode ); + } + }else refresh_fc_eg_chan( cch[2] ); + refresh_fc_eg_chan( cch[3] ); + refresh_fc_eg_chan( cch[4] ); + refresh_fc_eg_chan( cch[5] ); + + /* buffering */ + for(i=0; i < length ; i++) + { + + advance_lfo(OPN); + + /* clear output acc. */ + out_adpcm[OUTD_LEFT] = out_adpcm[OUTD_RIGHT]= out_adpcm[OUTD_CENTER] = 0; + out_delta[OUTD_LEFT] = out_delta[OUTD_RIGHT]= out_delta[OUTD_CENTER] = 0; + /* clear outputs */ + out_fm[0] = 0; + out_fm[1] = 0; + out_fm[2] = 0; + out_fm[3] = 0; + out_fm[4] = 0; + out_fm[5] = 0; + + /* advance envelope generator */ + OPN->eg_timer += OPN->eg_timer_add; + while (OPN->eg_timer >= OPN->eg_timer_overflow) + { + OPN->eg_timer -= OPN->eg_timer_overflow; + OPN->eg_cnt++; + + advance_eg_channel(OPN, &cch[0]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[1]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[2]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[3]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[4]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[5]->SLOT[SLOT1]); + } + + /* calculate FM */ + chan_calc(OPN, cch[0] ); + chan_calc(OPN, cch[1] ); + chan_calc(OPN, cch[2] ); + chan_calc(OPN, cch[3] ); + chan_calc(OPN, cch[4] ); + chan_calc(OPN, cch[5] ); + + /* deltaT ADPCM */ + if( DELTAT->portstate&0x80 ) + YM_DELTAT_ADPCM_CALC(DELTAT); + + /* ADPCMA */ + for( j = 0; j < 6; j++ ) + { + if( F2610->adpcm[j].flag ) + ADPCMA_calc_chan( F2610, &F2610->adpcm[j]); + } + + /* buffering */ + { + int lt,rt; + + lt = out_adpcm[OUTD_LEFT] + out_adpcm[OUTD_CENTER]; + rt = out_adpcm[OUTD_RIGHT] + out_adpcm[OUTD_CENTER]; + lt += (out_delta[OUTD_LEFT] + out_delta[OUTD_CENTER])>>9; + rt += (out_delta[OUTD_RIGHT] + out_delta[OUTD_CENTER])>>9; + + lt += ((out_fm[0]>>1) & OPN->pan[0]); /* the shift right is verified on YM2610 */ + rt += ((out_fm[0]>>1) & OPN->pan[1]); + lt += ((out_fm[1]>>1) & OPN->pan[2]); + rt += ((out_fm[1]>>1) & OPN->pan[3]); + lt += ((out_fm[2]>>1) & OPN->pan[4]); + rt += ((out_fm[2]>>1) & OPN->pan[5]); + lt += ((out_fm[3]>>1) & OPN->pan[6]); + rt += ((out_fm[3]>>1) & OPN->pan[7]); + lt += ((out_fm[4]>>1) & OPN->pan[8]); + rt += ((out_fm[4]>>1) & OPN->pan[9]); + lt += ((out_fm[5]>>1) & OPN->pan[10]); + rt += ((out_fm[5]>>1) & OPN->pan[11]); + + + lt >>= FINAL_SH; + rt >>= FINAL_SH; + + Limit( lt, MAXOUT, MINOUT ); + Limit( rt, MAXOUT, MINOUT ); + + #ifdef SAVE_SAMPLE + SAVE_ALL_CHANNELS + #endif + + /* buffering */ + bufL[i] = lt; + bufR[i] = rt; + } + + /* timer A control */ + INTERNAL_TIMER_A( &OPN->ST , cch[2] ) + } + INTERNAL_TIMER_B(&OPN->ST,length) + +} +#endif /* BUILD_YM2610B */ + + +#ifdef __STATE_H__ +void YM2610Postload(void *chip) +{ + if (chip) + { + YM2610 *F2610 = (YM2610 *)chip; + int r; + + /* SSG registers */ + for(r=0;r<16;r++) + { + (*F2610->OPN.ST.SSG->write)(F2610->OPN.ST.param,0,r); + (*F2610->OPN.ST.SSG->write)(F2610->OPN.ST.param,1,F2610->REGS[r]); + } + + /* OPN registers */ + /* DT / MULTI , TL , KS / AR , AMON / DR , SR , SL / RR , SSG-EG */ + for(r=0x30;r<0x9e;r++) + if((r&3) != 3) + { + OPNWriteReg(&F2610->OPN,r,F2610->REGS[r]); + OPNWriteReg(&F2610->OPN,r|0x100,F2610->REGS[r|0x100]); + } + /* FB / CONNECT , L / R / AMS / PMS */ + for(r=0xb0;r<0xb6;r++) + if((r&3) != 3) + { + OPNWriteReg(&F2610->OPN,r,F2610->REGS[r]); + OPNWriteReg(&F2610->OPN,r|0x100,F2610->REGS[r|0x100]); + } + /* FM channels */ + /*FM_channel_postload(F2610->CH,6);*/ + + /* rhythm(ADPCMA) */ + FM_ADPCMAWrite(F2610,1,F2610->REGS[0x101]); + for( r=0 ; r<6 ; r++) + { + FM_ADPCMAWrite(F2610,r+0x08,F2610->REGS[r+0x108]); + FM_ADPCMAWrite(F2610,r+0x10,F2610->REGS[r+0x110]); + FM_ADPCMAWrite(F2610,r+0x18,F2610->REGS[r+0x118]); + FM_ADPCMAWrite(F2610,r+0x20,F2610->REGS[r+0x120]); + FM_ADPCMAWrite(F2610,r+0x28,F2610->REGS[r+0x128]); + } + /* Delta-T ADPCM unit */ + YM_DELTAT_postload(&F2610->deltaT , &F2610->REGS[0x010] ); + } +} + +static void YM2610_save_state(YM2610 *F2610, int index) +{ + static const char statename[] = "YM2610"; + + state_save_register_item_array(statename, index, F2610->REGS); + FMsave_state_st(statename,index,&F2610->OPN.ST); + FMsave_state_channel(statename,index,F2610->CH,6); + /* 3slots */ + state_save_register_item_array(statename, index, F2610->OPN.SL3.fc); + state_save_register_item(statename, index, F2610->OPN.SL3.fn_h); + state_save_register_item_array(statename, index, F2610->OPN.SL3.kcode); + /* address register1 */ + state_save_register_item(statename, index, F2610->addr_A1); + + state_save_register_item(statename, index, F2610->adpcm_arrivedEndAddress); + /* rythm(ADPCMA) */ + FMsave_state_adpcma(statename,index,F2610->adpcm); + /* Delta-T ADPCM unit */ + YM_DELTAT_savestate(statename,index,&F2610->deltaT); +} +#endif /* _STATE_H */ + +static void YM2610_deltat_status_set(void *chip, UINT8 changebits) +{ + YM2610 *F2610 = chip; + F2610->adpcm_arrivedEndAddress |= changebits; +} +static void YM2610_deltat_status_reset(void *chip, UINT8 changebits) +{ + YM2610 *F2610 = chip; + F2610->adpcm_arrivedEndAddress &= (~changebits); +} + +void *YM2610Init(void *param, int index, int clock, int rate, + void *pcmroma,int pcmsizea,void *pcmromb,int pcmsizeb, + FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler, const struct ssg_callbacks *ssg) + +{ + YM2610 *F2610; + + /* allocate extend state space */ + if( (F2610 = (YM2610 *)malloc(sizeof(YM2610)))==NULL) + return NULL; + /* clear */ + memset(F2610,0,sizeof(YM2610)); + /* allocate total level table (128kb space) */ + if( !init_tables() ) + { + free( F2610 ); + return NULL; + } + + /* FM */ + F2610->OPN.ST.param = param; + F2610->OPN.type = TYPE_YM2610; + F2610->OPN.P_CH = F2610->CH; + F2610->OPN.ST.clock = clock; + F2610->OPN.ST.rate = rate; + /* Extend handler */ + F2610->OPN.ST.Timer_Handler = TimerHandler; + F2610->OPN.ST.IRQ_Handler = IRQHandler; + F2610->OPN.ST.SSG = ssg; + /* ADPCM */ + F2610->pcmbuf = (UINT8 *)pcmroma; + F2610->pcm_size = pcmsizea; + /* DELTA-T */ + F2610->deltaT.memory = (UINT8 *)pcmromb; + F2610->deltaT.memory_size = pcmsizeb; + + F2610->deltaT.status_set_handler = YM2610_deltat_status_set; + F2610->deltaT.status_reset_handler = YM2610_deltat_status_reset; + F2610->deltaT.status_change_which_chip = F2610; + F2610->deltaT.status_change_EOS_bit = 0x80; /* status flag: set bit7 on End Of Sample */ + + YM2610ResetChip(F2610); + + Init_ADPCMATable(); +#ifdef __STATE_H__ + YM2610_save_state(F2610, index); +#endif + return F2610; +} + +/* shut down emulator */ +void YM2610Shutdown(void *chip) +{ + YM2610 *F2610 = chip; + + FMCloseTable(); + free(F2610); +} + +/* reset one of chip */ +void YM2610ResetChip(void *chip) +{ + int i; + YM2610 *F2610 = chip; + FM_OPN *OPN = &F2610->OPN; + YM_DELTAT *DELTAT = &F2610->deltaT; + + /* Reset Prescaler */ + OPNSetPres( OPN, 6*24, 6*24, 4*2); /* OPN 1/6 , SSG 1/4 */ + /* reset SSG section */ + (*OPN->ST.SSG->reset)(OPN->ST.param); + /* status clear */ + FM_IRQMASK_SET(&OPN->ST,0x03); + FM_BUSY_CLEAR(&OPN->ST); + OPNWriteMode(OPN,0x27,0x30); /* mode 0 , timer reset */ + + OPN->eg_timer = 0; + OPN->eg_cnt = 0; + + FM_STATUS_RESET(&OPN->ST, 0xff); + + reset_channels( &OPN->ST , F2610->CH , 6 ); + /* reset OPerator paramater */ + for(i = 0xb6 ; i >= 0xb4 ; i-- ) + { + OPNWriteReg(OPN,i ,0xc0); + OPNWriteReg(OPN,i|0x100,0xc0); + } + for(i = 0xb2 ; i >= 0x30 ; i-- ) + { + OPNWriteReg(OPN,i ,0); + OPNWriteReg(OPN,i|0x100,0); + } + for(i = 0x26 ; i >= 0x20 ; i-- ) OPNWriteReg(OPN,i,0); + /**** ADPCM work initial ****/ + for( i = 0; i < 6 ; i++ ){ + F2610->adpcm[i].step = (UINT32)((float)(1<OPN.ST.freqbase)/3.0); + F2610->adpcm[i].now_addr = 0; + F2610->adpcm[i].now_step = 0; + F2610->adpcm[i].start = 0; + F2610->adpcm[i].end = 0; + /* F2610->adpcm[i].delta = 21866; */ + F2610->adpcm[i].vol_mul = 0; + F2610->adpcm[i].pan = &out_adpcm[OUTD_CENTER]; /* default center */ + F2610->adpcm[i].flagMask = 1<adpcm[i].flag = 0; + F2610->adpcm[i].adpcm_acc = 0; + F2610->adpcm[i].adpcm_step= 0; + F2610->adpcm[i].adpcm_out = 0; + } + F2610->adpcmTL = 0x3f; + + F2610->adpcm_arrivedEndAddress = 0; + + /* DELTA-T unit */ + DELTAT->freqbase = OPN->ST.freqbase; + DELTAT->output_pointer = out_delta; + DELTAT->portshift = 8; /* allways 8bits shift */ + DELTAT->output_range = 1<<23; + YM_DELTAT_ADPCM_Reset(DELTAT,OUTD_CENTER,YM_DELTAT_EMULATION_MODE_YM2610); +} + +/* YM2610 write */ +/* n = number */ +/* a = address */ +/* v = value */ +int YM2610Write(void *chip, int a, UINT8 v) +{ + YM2610 *F2610 = chip; + FM_OPN *OPN = &F2610->OPN; + int addr; + int ch; + + v &= 0xff; /* adjust to 8 bit bus */ + + switch( a&3 ){ + case 0: /* address port 0 */ + OPN->ST.address = v; + F2610->addr_A1 = 0; + + /* Write register to SSG emulator */ + if( v < 16 ) (*OPN->ST.SSG->write)(OPN->ST.param,0,v); + break; + + case 1: /* data port 0 */ + if (F2610->addr_A1 != 0) + break; /* verified on real YM2608 */ + + addr = OPN->ST.address; + F2610->REGS[addr] = v; + switch(addr & 0xf0) + { + case 0x00: /* SSG section */ + /* Write data to SSG emulator */ + (*OPN->ST.SSG->write)(OPN->ST.param,a,v); + break; + case 0x10: /* DeltaT ADPCM */ + YM2610UpdateReq(OPN->ST.param); + + switch(addr) + { + case 0x10: /* control 1 */ + case 0x11: /* control 2 */ + case 0x12: /* start address L */ + case 0x13: /* start address H */ + case 0x14: /* stop address L */ + case 0x15: /* stop address H */ + + case 0x19: /* delta-n L */ + case 0x1a: /* delta-n H */ + case 0x1b: /* volume */ + { + YM_DELTAT_ADPCM_Write(&F2610->deltaT,addr-0x10,v); + } + break; + + case 0x1c: /* FLAG CONTROL : Extend Status Clear/Mask */ + { + UINT8 statusmask = ~v; + /* set arrived flag mask */ + for(ch=0;ch<6;ch++) + F2610->adpcm[ch].flagMask = statusmask&(1<deltaT.status_change_EOS_bit = statusmask & 0x80; /* status flag: set bit7 on End Of Sample */ + + /* clear arrived flag */ + F2610->adpcm_arrivedEndAddress &= statusmask; + } + break; + + default: + logerror("YM2610: write to unknown deltat register %02x val=%02x\n",addr,v); + break; + } + + break; + case 0x20: /* Mode Register */ + YM2610UpdateReq(OPN->ST.param); + OPNWriteMode(OPN,addr,v); + break; + default: /* OPN section */ + YM2610UpdateReq(OPN->ST.param); + /* write register */ + OPNWriteReg(OPN,addr,v); + } + break; + + case 2: /* address port 1 */ + OPN->ST.address = v; + F2610->addr_A1 = 1; + break; + + case 3: /* data port 1 */ + if (F2610->addr_A1 != 1) + break; /* verified on real YM2608 */ + + YM2610UpdateReq(OPN->ST.param); + addr = OPN->ST.address; + F2610->REGS[addr | 0x100] = v; + if( addr < 0x30 ) + /* 100-12f : ADPCM A section */ + FM_ADPCMAWrite(F2610,addr,v); + else + OPNWriteReg(OPN,addr | 0x100,v); + } + return OPN->ST.irq; +} + +UINT8 YM2610Read(void *chip,int a) +{ + YM2610 *F2610 = chip; + int addr = F2610->OPN.ST.address; + UINT8 ret = 0; + + switch( a&3){ + case 0: /* status 0 : YM2203 compatible */ + ret = FM_STATUS_FLAG(&F2610->OPN.ST) & 0x83; + break; + case 1: /* data 0 */ + if( addr < 16 ) ret = (*F2610->OPN.ST.SSG->read)(F2610->OPN.ST.param); + if( addr == 0xff ) ret = 0x01; + break; + case 2: /* status 1 : ADPCM status */ + /* ADPCM STATUS (arrived End Address) */ + /* B,--,A5,A4,A3,A2,A1,A0 */ + /* B = ADPCM-B(DELTA-T) arrived end address */ + /* A0-A5 = ADPCM-A arrived end address */ + ret = F2610->adpcm_arrivedEndAddress; + break; + case 3: + ret = 0; + break; + } + return ret; +} + +int YM2610TimerOver(void *chip,int c) +{ + YM2610 *F2610 = chip; + + if( c ) + { /* Timer B */ + TimerBOver( &(F2610->OPN.ST) ); + } + else + { /* Timer A */ + YM2610UpdateReq(F2610->OPN.ST.param); + /* timer update */ + TimerAOver( &(F2610->OPN.ST) ); + /* CSM mode key,TL controll */ + if( F2610->OPN.ST.mode & 0x80 ) + { /* CSM mode total level latch and auto key on */ + CSMKeyControll( &(F2610->CH[2]) ); + } + } + return F2610->OPN.ST.irq; +} + +#endif /* (BUILD_YM2610||BUILD_YM2610B) */ + + + +#if BUILD_YM2612 +/*******************************************************************************/ +/* YM2612 local section */ +/*******************************************************************************/ +/* here's the virtual YM2612 */ +typedef struct +{ + UINT8 REGS[512]; /* registers */ + FM_OPN OPN; /* OPN state */ + FM_CH CH[6]; /* channel state */ + UINT8 addr_A1; /* address line A1 */ + + /* dac output (YM2612) */ + int dacen; + INT32 dacout; +} YM2612; + +static int dacen; +static long dac_highpass; +/* Generate samples for one of the YM2612s */ +void YM2612UpdateOne(void *chip, FMSAMPLE **buffer, int length) +{ + YM2612 *F2612 = chip; + FM_OPN *OPN = &F2612->OPN; + int i; + FMSAMPLE *bufL,*bufR; + INT32 dacout = F2612->dacout; + FM_CH *cch[6]; + + /* set buffer */ + bufL = buffer[0]; + bufR = buffer[1]; + + cch[0] = &F2612->CH[0]; + cch[1] = &F2612->CH[1]; + cch[2] = &F2612->CH[2]; + cch[3] = &F2612->CH[3]; + cch[4] = &F2612->CH[4]; + cch[5] = &F2612->CH[5]; + /* DAC mode */ + dacen = F2612->dacen; + + /* refresh PG and EG */ + refresh_fc_eg_chan( cch[0] ); + refresh_fc_eg_chan( cch[1] ); + if( (OPN->ST.mode & 0xc0) ) + { + /* 3SLOT MODE */ + if( cch[2]->SLOT[SLOT1].Incr==-1) + { + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT1] , OPN->SL3.fc[1] , OPN->SL3.kcode[1] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT2] , OPN->SL3.fc[2] , OPN->SL3.kcode[2] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT3] , OPN->SL3.fc[0] , OPN->SL3.kcode[0] ); + refresh_fc_eg_slot(&cch[2]->SLOT[SLOT4] , cch[2]->fc , cch[2]->kcode ); + } + }else refresh_fc_eg_chan( cch[2] ); + refresh_fc_eg_chan( cch[3] ); + refresh_fc_eg_chan( cch[4] ); + refresh_fc_eg_chan( cch[5] ); + + /* buffering */ + for(i=0; i < length ; i++) + { + + advance_lfo(OPN); + + /* clear outputs */ + out_fm[0] = 0; + out_fm[1] = 0; + out_fm[2] = 0; + out_fm[3] = 0; + out_fm[4] = 0; + out_fm[5] = 0; + + /* advance envelope generator */ + OPN->eg_timer += OPN->eg_timer_add; + while (OPN->eg_timer >= OPN->eg_timer_overflow) + { + OPN->eg_timer -= OPN->eg_timer_overflow; + OPN->eg_cnt++; + + advance_eg_channel(OPN, &cch[0]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[1]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[2]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[3]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[4]->SLOT[SLOT1]); + advance_eg_channel(OPN, &cch[5]->SLOT[SLOT1]); + } + + /* calculate FM */ + chan_calc(OPN, cch[0] ); + chan_calc(OPN, cch[1] ); + chan_calc(OPN, cch[2] ); + chan_calc(OPN, cch[3] ); + chan_calc(OPN, cch[4] ); + if (dacen) + { + long dac = (dacout << 15) - dac_highpass; + dac_highpass += dac >> 9; + dac >>= 15; + *cch[5]->connect4 += dac; + } + else chan_calc(OPN, cch[5] ); + + { + int lt,rt; + + lt = ((out_fm[0]>>0) & OPN->pan[0]); + rt = ((out_fm[0]>>0) & OPN->pan[1]); + lt += ((out_fm[1]>>0) & OPN->pan[2]); + rt += ((out_fm[1]>>0) & OPN->pan[3]); + lt += ((out_fm[2]>>0) & OPN->pan[4]); + rt += ((out_fm[2]>>0) & OPN->pan[5]); + lt += ((out_fm[3]>>0) & OPN->pan[6]); + rt += ((out_fm[3]>>0) & OPN->pan[7]); + lt += ((out_fm[4]>>0) & OPN->pan[8]); + rt += ((out_fm[4]>>0) & OPN->pan[9]); + lt += ((out_fm[5]>>0) & OPN->pan[10]); + rt += ((out_fm[5]>>0) & OPN->pan[11]); + + + lt >>= FINAL_SH; + rt >>= FINAL_SH; + + Limit( lt, MAXOUT, MINOUT ); + Limit( rt, MAXOUT, MINOUT ); + + #ifdef SAVE_SAMPLE + SAVE_ALL_CHANNELS + #endif + + /* buffering */ + bufL[i] = lt; + bufR[i] = rt; + } + + /* timer A control */ + INTERNAL_TIMER_A( &OPN->ST , cch[2] ) + } + INTERNAL_TIMER_B(&OPN->ST,length) + +} + +#ifdef __STATE_H__ +void YM2612Postload(void *chip) +{ + if (chip) + { + YM2612 *F2612 = (YM2612 *)chip; + int r; + + /* DAC data & port */ + F2612->dacout = ((int)F2612->REGS[0x2a] - 0x80) << 0; /* level unknown */ + F2612->dacen = F2612->REGS[0x2d] & 0x80; + /* OPN registers */ + /* DT / MULTI , TL , KS / AR , AMON / DR , SR , SL / RR , SSG-EG */ + for(r=0x30;r<0x9e;r++) + if((r&3) != 3) + { + OPNWriteReg(&F2612->OPN,r,F2612->REGS[r]); + OPNWriteReg(&F2612->OPN,r|0x100,F2612->REGS[r|0x100]); + } + /* FB / CONNECT , L / R / AMS / PMS */ + for(r=0xb0;r<0xb6;r++) + if((r&3) != 3) + { + OPNWriteReg(&F2612->OPN,r,F2612->REGS[r]); + OPNWriteReg(&F2612->OPN,r|0x100,F2612->REGS[r|0x100]); + } + /* channels */ + /*FM_channel_postload(F2612->CH,6);*/ + } +} + +static void YM2612_save_state(YM2612 *F2612, int index) +{ + static const char statename[] = "YM2612"; + + state_save_register_item_array(statename, index, F2612->REGS); + FMsave_state_st(statename,index,&F2612->OPN.ST); + FMsave_state_channel(statename,index,F2612->CH,6); + /* 3slots */ + state_save_register_item_array(statename, index, F2612->OPN.SL3.fc); + state_save_register_item(statename, index, F2612->OPN.SL3.fn_h); + state_save_register_item_array(statename, index, F2612->OPN.SL3.kcode); + /* address register1 */ + state_save_register_item(statename, index, F2612->addr_A1); +} +#endif /* _STATE_H */ + +/* initialize YM2612 emulator(s) */ +void * YM2612Init(void *param, int index, int clock, int rate, + FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler) +{ + YM2612 *F2612; + + /* allocate extend state space */ + if( (F2612 = (YM2612 *)malloc(sizeof(YM2612)))==NULL) + return NULL; + /* clear */ + memset(F2612,0,sizeof(YM2612)); + /* allocate total level table (128kb space) */ + if( !init_tables() ) + { + free( F2612 ); + return NULL; + } + + F2612->OPN.ST.param = param; + F2612->OPN.type = TYPE_YM2612; + F2612->OPN.P_CH = F2612->CH; + F2612->OPN.ST.clock = clock; + F2612->OPN.ST.rate = rate; + /* F2612->OPN.ST.irq = 0; */ + /* F2612->OPN.ST.status = 0; */ + /* Extend handler */ + F2612->OPN.ST.Timer_Handler = TimerHandler; + F2612->OPN.ST.IRQ_Handler = IRQHandler; + YM2612ResetChip(F2612); + +#ifdef __STATE_H__ + YM2612_save_state(F2612, index); +#endif + return F2612; +} + +/* shut down emulator */ +void YM2612Shutdown(void *chip) +{ + YM2612 *F2612 = chip; + + FMCloseTable(); + free(F2612); +} + +/* reset one of chip */ +void YM2612ResetChip(void *chip) +{ + int i; + YM2612 *F2612 = chip; + FM_OPN *OPN = &F2612->OPN; + + OPNSetPres( OPN, 6*24, 6*24, 0); + /* status clear */ + FM_IRQMASK_SET(&OPN->ST,0x03); + FM_BUSY_CLEAR(&OPN->ST); + OPNWriteMode(OPN,0x27,0x30); /* mode 0 , timer reset */ + + OPN->eg_timer = 0; + OPN->eg_cnt = 0; + + FM_STATUS_RESET(&OPN->ST, 0xff); + + reset_channels( &OPN->ST , &F2612->CH[0] , 6 ); + for(i = 0xb6 ; i >= 0xb4 ; i-- ) + { + OPNWriteReg(OPN,i ,0xc0); + OPNWriteReg(OPN,i|0x100,0xc0); + } + for(i = 0xb2 ; i >= 0x30 ; i-- ) + { + OPNWriteReg(OPN,i ,0); + OPNWriteReg(OPN,i|0x100,0); + } + for(i = 0x26 ; i >= 0x20 ; i-- ) OPNWriteReg(OPN,i,0); + /* DAC mode clear */ + F2612->dacen = 0; + dac_highpass = 0; +} + +/* YM2612 write */ +/* n = number */ +/* a = address */ +/* v = value */ +int YM2612Write(void *chip, int a, UINT8 v) +{ + YM2612 *F2612 = chip; + int addr; + + v &= 0xff; /* adjust to 8 bit bus */ + + switch( a&3){ + case 0: /* address port 0 */ + F2612->OPN.ST.address = v; + F2612->addr_A1 = 0; + break; + + case 1: /* data port 0 */ + addr = F2612->OPN.ST.address; + F2612->REGS[addr] = v; + switch( addr & 0xf0 ) + { + case 0x20: /* 0x20-0x2f Mode */ + switch( addr ) + { + case 0x2a: /* DAC data (YM2612) */ + YM2612UpdateReq(F2612->OPN.ST.param); + F2612->dacout = ((int)v - 0x80) << 6; /* level unknown */ + break; + case 0x2b: /* DAC Sel (YM2612) */ + /* b7 = dac enable */ + F2612->dacen = v & 0x80; + break; + default: /* OPN section */ + YM2612UpdateReq(F2612->OPN.ST.param); + /* write register */ + OPNWriteMode(&(F2612->OPN),addr,v); + } + break; + default: /* 0x30-0xff OPN section */ + YM2612UpdateReq(F2612->OPN.ST.param); + /* write register */ + OPNWriteReg(&(F2612->OPN),addr,v); + } + break; + + case 2: /* address port 1 */ + F2612->OPN.ST.address = v; + F2612->addr_A1 = 1; + break; + + case 3: /* data port 1 */ + addr = F2612->OPN.ST.address; + F2612->REGS[addr | 0x100] = v; + YM2612UpdateReq(F2612->OPN.ST.param); + OPNWriteReg(&(F2612->OPN),addr | 0x100,v); + break; + } + return F2612->OPN.ST.irq; +} + +UINT8 YM2612Read(void *chip,int a) +{ + YM2612 *F2612 = chip; + + switch( a&3){ + case 0: /* status 0 */ + return FM_STATUS_FLAG(&F2612->OPN.ST); + case 1: + case 2: + case 3: +#if 0 + LOG(LOG_WAR,("YM2612 #%p:A=%d read unmapped area\n",F2612->OPN.ST.param,a)); +#endif + return FM_STATUS_FLAG(&F2612->OPN.ST); + } + return 0; +} + +int YM2612TimerOver(void *chip,int c) +{ + YM2612 *F2612 = chip; + + if( c ) + { /* Timer B */ + TimerBOver( &(F2612->OPN.ST) ); + } + else + { /* Timer A */ + YM2612UpdateReq(F2612->OPN.ST.param); + /* timer update */ + TimerAOver( &(F2612->OPN.ST) ); + /* CSM mode key,TL controll */ + if( F2612->OPN.ST.mode & 0x80 ) + { /* CSM mode total level latch and auto key on */ + CSMKeyControll( &(F2612->CH[2]) ); + } + } + return F2612->OPN.ST.irq; +} + +void YM2612UpdateRequest(void *param) +{ +} + +#endif /* BUILD_YM2612 */ diff --git a/ genplus-gx/source/sound/fm.h b/ genplus-gx/source/sound/fm.h new file mode 100644 index 0000000..16ab0ec --- /dev/null +++ b/ genplus-gx/source/sound/fm.h @@ -0,0 +1,205 @@ +/* + File: fm.h -- header file for software emulation for FM sound generator + +*/ +#ifndef _H_FM_FM_ +#define _H_FM_FM_ +#define HAS_YM2612 1 +#include "shared.h" +/* --- select emulation chips --- */ +#define BUILD_YM2203 (HAS_YM2203) /* build YM2203(OPN) emulator */ +#define BUILD_YM2608 (HAS_YM2608) /* build YM2608(OPNA) emulator */ +#define BUILD_YM2610 (HAS_YM2610) /* build YM2610(OPNB) emulator */ +#define BUILD_YM2610B (HAS_YM2610B) /* build YM2610B(OPNB?)emulator */ +#define BUILD_YM2612 (HAS_YM2612 || HAS_YM3438) /* build YM2612(OPN2) emulator */ + +/* select bit size of output : 8 or 16 */ +#define FM_SAMPLE_BITS 16 + +/* select timer system internal or external */ +#define FM_INTERNAL_TIMER 0 + +/* --- speedup optimize --- */ +/* busy flag enulation , The definition of FM_GET_TIME_NOW() is necessary. */ +#define FM_BUSY_FLAG_SUPPORT 0 + +/* --- external SSG(YM2149/AY-3-8910)emulator interface port */ +/* used by YM2203,YM2608,and YM2610 */ +struct ssg_callbacks +{ + void (*set_clock)(void *param, int clock); + void (*write)(void *param, int address, int data); + int (*read)(void *param); + void (*reset)(void *param); +}; + +/* --- external callback funstions for realtime update --- */ + +/* for busy flag emulation , function FM_GET_TIME_NOW() should */ +/* return present time in seconds with "double" precision */ +/* in timer.c */ +#define FM_GET_TIME_NOW() timer_get_time() + +#if BUILD_YM2203 + /* in 2203intf.c */ + void YM2203UpdateRequest(void *param); + #define YM2203UpdateReq(chip) YM2203UpdateRequest(chip) +#endif +#if BUILD_YM2608 + /* in 2608intf.c */ + void YM2608UpdateRequest(void *param); + #define YM2608UpdateReq(chip) YM2608UpdateRequest(chip); +#endif +#if BUILD_YM2610 + /* in 2610intf.c */ + void YM2610UpdateRequest(void *param); + #define YM2610UpdateReq(chip) YM2610UpdateRequest(chip); +#endif +#if BUILD_YM2612 + /* in 2612intf.c */ + void YM2612UpdateRequest(void *param); + #define YM2612UpdateReq(chip) YM2612UpdateRequest(chip); +#endif + +/* compiler dependence */ +#if 0 +#ifndef OSD_CPU_H +#define OSD_CPU_H +typedef unsigned char UINT8; /* unsigned 8bit */ +typedef unsigned short UINT16; /* unsigned 16bit */ +typedef unsigned int UINT32; /* unsigned 32bit */ +typedef signed char INT8; /* signed 8bit */ +typedef signed short INT16; /* signed 16bit */ +typedef signed int INT32; /* signed 32bit */ +#endif +#endif + +#ifndef INLINE +#define INLINE static __inline__ +#endif + + +typedef INT16 FMSAMPLE; +/* +#if (FM_SAMPLE_BITS==16) +typedef INT16 FMSAMPLE; +#endif +#if (FM_SAMPLE_BITS==8) +typedef unsigned char FMSAMPLE; +#endif +*/ + +typedef void (*FM_TIMERHANDLER)(void *param,int c,int cnt,double stepTime); +typedef void (*FM_IRQHANDLER)(void *param,int irq); +/* FM_TIMERHANDLER : Stop or Start timer */ +/* int n = chip number */ +/* int c = Channel 0=TimerA,1=TimerB */ +/* int count = timer count (0=stop) */ +/* doube stepTime = step time of one count (sec.)*/ + +/* FM_IRQHHANDLER : IRQ level changing sense */ +/* int n = chip number */ +/* int irq = IRQ level 0=OFF,1=ON */ + +#if BUILD_YM2203 +/* -------------------- YM2203(OPN) Interface -------------------- */ + +/* +** Initialize YM2203 emulator(s). +** +** 'num' is the number of virtual YM2203's to allocate +** 'baseclock' +** 'rate' is sampling rate +** 'TimerHandler' timer callback handler when timer start and clear +** 'IRQHandler' IRQ callback handler when changed IRQ level +** return 0 = success +*/ +void * YM2203Init(void *param, int index, int baseclock, int rate, + FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler, const struct ssg_callbacks *ssg); + +/* +** shutdown the YM2203 emulators +*/ +void YM2203Shutdown(void *chip); + +/* +** reset all chip registers for YM2203 number 'num' +*/ +void YM2203ResetChip(void *chip); + +/* +** update one of chip +*/ +void YM2203UpdateOne(void *chip, FMSAMPLE *buffer, int length); + +/* +** Write +** return : InterruptLevel +*/ +int YM2203Write(void *chip,int a,unsigned char v); + +/* +** Read +** return : InterruptLevel +*/ +unsigned char YM2203Read(void *chip,int a); + +/* +** Timer OverFlow +*/ +int YM2203TimerOver(void *chip, int c); + +/* +** State Save +*/ +void YM2203Postload(void *chip); +#endif /* BUILD_YM2203 */ + +#if BUILD_YM2608 +/* -------------------- YM2608(OPNA) Interface -------------------- */ +void * YM2608Init(void *param, int index, int baseclock, int rate, + void *pcmroma,int pcmsizea, + FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler, const struct ssg_callbacks *ssg); +void YM2608Shutdown(void *chip); +void YM2608ResetChip(void *chip); +void YM2608UpdateOne(void *chip, FMSAMPLE **buffer, int length); + +int YM2608Write(void *chip, int a,unsigned char v); +unsigned char YM2608Read(void *chip,int a); +int YM2608TimerOver(void *chip, int c ); +void YM2608Postload(void *chip); +#endif /* BUILD_YM2608 */ + +#if (BUILD_YM2610||BUILD_YM2610B) +/* -------------------- YM2610(OPNB) Interface -------------------- */ +void * YM2610Init(void *param, int index, int baseclock, int rate, + void *pcmroma,int pcmasize,void *pcmromb,int pcmbsize, + FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler, const struct ssg_callbacks *ssg); +void YM2610Shutdown(void *chip); +void YM2610ResetChip(void *chip); +void YM2610UpdateOne(void *chip, FMSAMPLE **buffer, int length); +#if BUILD_YM2610B +void YM2610BUpdateOne(void *chip, FMSAMPLE **buffer, int length); +#endif + +int YM2610Write(void *chip, int a,unsigned char v); +unsigned char YM2610Read(void *chip,int a); +int YM2610TimerOver(void *chip, int c ); +void YM2610Postload(void *chip); +#endif /* BUILD_YM2610 */ + +#if BUILD_YM2612 +void * YM2612Init(void *param, int index, int baseclock, int rate, + FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); +void YM2612Shutdown(void *chip); +void YM2612ResetChip(void *chip); +void YM2612UpdateOne(void *chip, FMSAMPLE **buffer, int length); + +int YM2612Write(void *chip, int a,unsigned char v); +unsigned char YM2612Read(void *chip,int a); +int YM2612TimerOver(void *chip, int c ); +void YM2612Postload(void *chip); +#endif /* BUILD_YM2612 */ + + +#endif /* _H_FM_FM_ */ diff --git a/ genplus-gx/source/sound/sn76489.c b/ genplus-gx/source/sound/sn76489.c new file mode 100644 index 0000000..4ea0850 --- /dev/null +++ b/ genplus-gx/source/sound/sn76489.c @@ -0,0 +1,290 @@ +/* + SN76489 emulation + by Maxim in 2001 and 2002 + converted from my original Delphi implementation + + I'm a C newbie so I'm sure there are loads of stupid things + in here which I'll come back to some day and redo + + Includes: + - Super-high quality tone channel "oversampling" by calculating fractional positions on transitions + - Noise output pattern reverse engineered from actual SMS output + - Volume levels taken from actual SMS output + + 07/08/04 Charles MacDonald + Modified for use with SMS Plus: + - Added support for multiple PSG chips. + - Added reset/config/update routines. + - Added context management routines. + - Removed SN76489_GetValues(). + - Removed some unused variables. + + 25/04/07 Eke-Eke + Modified for use with GenesisPlus Gamecube's port: + - made SN76489_Update outputs 16bits mono samples + - replaced volume table with VGM plugin's one +*/ + +#include "sn76489.h" +#include // for FLT_MIN +#include // for memcpy + +#define NoiseInitialState 0x8000 /* Initial state of shift register */ +#define PSG_CUTOFF 0x6 /* Value below which PSG does not output */ + +static const int PSGVolumeValues[2][16] = { + /* These values are taken from a real SMS2's output */ + {892,892,892,760,623,497,404,323,257,198,159,123,96,75,60,0}, /* I can't remember why 892... :P some scaling I did at some point */ + /* these values are true volumes for 2dB drops at each step (multiply previous by 10^-0.1), normalised at 760 */ + {1516,1205,957,760,603,479,381,303,240,191,152,120,96,76,60,0} +}; + +static SN76489_Context SN76489[MAX_SN76489]; + +void SN76489_Init(int which, int PSGClockValue, int SamplingRate) +{ + SN76489_Context *p = &SN76489[which]; + p->dClock=(float)PSGClockValue/16/SamplingRate; + SN76489_Config(which, MUTE_ALLON, VOL_FULL, FB_SEGAVDP, SRW_SEGAVDP, 1); + SN76489_Reset(which); +} + +void SN76489_Reset(int which) +{ + SN76489_Context *p = &SN76489[which]; + int i; + + p->PSGStereo = 0xFF; + + for(i = 0; i <= 3; i++) + { + /* Initialise PSG state */ + p->Registers[2*i] = 1; /* tone freq=1 */ + p->Registers[2*i+1] = 0xf; /* vol=off */ + p->NoiseFreq = 0x10; + + /* Set counters to 0 */ + p->ToneFreqVals[i] = 0; + + /* Set flip-flops to 1 */ + p->ToneFreqPos[i] = 1; + + /* Set intermediate positions to do-not-use value */ + p->IntermediatePos[i] = FLT_MIN; + + /* Set panning to centre */ + p->panning[0]=127; + } + + p->LatchedRegister=0; + + /* Initialise noise generator */ + p->NoiseShiftRegister=NoiseInitialState; + + /* Zero clock */ + p->Clock=0; + +} + +void SN76489_Shutdown(void) +{ +} + +void SN76489_Config(int which, int mute, int volume, int feedback, int sr_width, int boost_noise) +{ + SN76489_Context *p = &SN76489[which]; + + p->Mute = mute; + p->VolumeArray = volume; + p->WhiteNoiseFeedback = feedback; + p->SRWidth = sr_width; + p->BoostNoise = boost_noise; +} + +void SN76489_SetContext(int which, uint8 *data) +{ + memcpy(&SN76489[which], data, sizeof(SN76489_Context)); +} + +void SN76489_GetContext(int which, uint8 *data) +{ + memcpy(data, &SN76489[which], sizeof(SN76489_Context)); +} + +uint8 *SN76489_GetContextPtr(int which) +{ + return (uint8 *)&SN76489[which]; +} + +int SN76489_GetContextSize(void) +{ + return sizeof(SN76489_Context); +} + +void SN76489_Write(int which, int data) +{ + SN76489_Context *p = &SN76489[which]; + + if (data&0x80) { + /* Latch/data byte %1 cc t dddd */ + p->LatchedRegister=((data>>4)&0x07); + p->Registers[p->LatchedRegister]= + (p->Registers[p->LatchedRegister] & 0x3f0) /* zero low 4 bits */ + | (data&0xf); /* and replace with data */ + } else { + /* Data byte %0 - dddddd */ + if (!(p->LatchedRegister%2)&&(p->LatchedRegister<5)) + /* Tone register */ + p->Registers[p->LatchedRegister]= + (p->Registers[p->LatchedRegister] & 0x00f) /* zero high 6 bits */ + | ((data&0x3f)<<4); /* and replace with data */ + else + /* Other register */ + p->Registers[p->LatchedRegister]=data&0x0f; /* Replace with data */ + } + switch (p->LatchedRegister) { + case 0: + case 2: + case 4: /* Tone channels */ + if (p->Registers[p->LatchedRegister]==0) p->Registers[p->LatchedRegister]=1; /* Zero frequency changed to 1 to avoid div/0 */ + break; + case 6: /* Noise */ + p->NoiseShiftRegister=NoiseInitialState; /* reset shift register */ + p->NoiseFreq=0x10<<(p->Registers[6]&0x3); /* set noise signal generator frequency */ + break; + } +} + +void SN76489_GGStereoWrite(int which, int data) +{ + SN76489_Context *p = &SN76489[which]; + p->PSGStereo=data; +} + +void SN76489_Update(int which, INT16 *buffer, int length) +{ + SN76489_Context *p = &SN76489[which]; + int i, j; + + for(j = 0; j < length; j++) + { + for (i=0;i<=2;++i) + if (p->IntermediatePos[i]!=FLT_MIN) + p->Channels[i]=(short)((p->Mute >> i & 0x1)*PSGVolumeValues[p->VolumeArray][p->Registers[2*i+1]]*p->IntermediatePos[i]); + else + p->Channels[i]=(p->Mute >> i & 0x1)*PSGVolumeValues[p->VolumeArray][p->Registers[2*i+1]]*p->ToneFreqPos[i]; + + p->Channels[3]=(short)((p->Mute >> 3 & 0x1)*PSGVolumeValues[p->VolumeArray][p->Registers[7]]*(p->NoiseShiftRegister & 0x1)); + + if (p->BoostNoise) p->Channels[3]<<=1; /* double noise volume */ + + buffer[j] =0; + for (i=0;i<=3;++i) buffer[j] += p->Channels[i]; + + p->Clock+=p->dClock; + p->NumClocksForSample=(int)p->Clock; /* truncates */ + p->Clock-=p->NumClocksForSample; /* remove integer part */ + /* Looks nicer in Delphi... */ + /* Clock:=Clock+p->dClock; */ + /* NumClocksForSample:=Trunc(Clock); */ + /* Clock:=Frac(Clock); */ + + /* Decrement tone channel counters */ + for (i=0;i<=2;++i) + p->ToneFreqVals[i]-=p->NumClocksForSample; + + /* Noise channel: match to tone2 or decrement its counter */ + if (p->NoiseFreq==0x80) p->ToneFreqVals[3]=p->ToneFreqVals[2]; + else p->ToneFreqVals[3]-=p->NumClocksForSample; + + /* Tone channels: */ + for (i=0;i<=2;++i) { + if (p->ToneFreqVals[i]<=0) { /* If it gets below 0... */ + if (p->Registers[i*2]>PSG_CUTOFF) { + /* Calculate how much of the sample is + and how much is - */ + /* Go to floating point and include the clock fraction for extreme accuracy :D */ + /* Store as long int, maybe it's faster? I'm not very good at this */ + p->IntermediatePos[i]=(p->NumClocksForSample-p->Clock+2*p->ToneFreqVals[i])*p->ToneFreqPos[i]/(p->NumClocksForSample+p->Clock); + p->ToneFreqPos[i]=-p->ToneFreqPos[i]; /* Flip the flip-flop */ + } else { + p->ToneFreqPos[i]=1; /* stuck value */ + p->IntermediatePos[i]=FLT_MIN; + } + p->ToneFreqVals[i]+=p->Registers[i*2]*(p->NumClocksForSample/p->Registers[i*2]+1); + } else p->IntermediatePos[i]=FLT_MIN; + } + + /* Noise channel */ + if (p->ToneFreqVals[3]<=0) { /* If it gets below 0... */ + p->ToneFreqPos[3]=-p->ToneFreqPos[3]; /* Flip the flip-flop */ + if (p->NoiseFreq!=0x80) /* If not matching tone2, decrement counter */ + p->ToneFreqVals[3]+=p->NoiseFreq*(p->NumClocksForSample/p->NoiseFreq+1); + if (p->ToneFreqPos[3]==1) { /* Only once per cycle... */ + int Feedback; + if (p->Registers[6]&0x4) { /* White noise */ + /* Calculate parity of fed-back bits for feedback */ + switch (p->WhiteNoiseFeedback) { + /* Do some optimised calculations for common (known) feedback values */ + case 0x0003: /* SC-3000, BBC %00000011 */ + case 0x0009: /* SMS, GG, MD %00001001 */ + /* If two bits fed back, I can do Feedback=(nsr & fb) && (nsr & fb ^ fb) */ + /* since that's (one or more bits set) && (not all bits set) */ + Feedback=((p->NoiseShiftRegister&p->WhiteNoiseFeedback) && ((p->NoiseShiftRegister&p->WhiteNoiseFeedback)^p->WhiteNoiseFeedback)); + break; + default: /* Default handler for all other feedback values */ + Feedback=p->NoiseShiftRegister&p->WhiteNoiseFeedback; + Feedback^=Feedback>>8; + Feedback^=Feedback>>4; + Feedback^=Feedback>>2; + Feedback^=Feedback>>1; + Feedback&=1; + break; + } + } else /* Periodic noise */ + Feedback=p->NoiseShiftRegister&1; + + p->NoiseShiftRegister=(p->NoiseShiftRegister>>1) | (Feedback << (p->SRWidth-1)); + + /* Original code: */ + /* p->NoiseShiftRegister=(p->NoiseShiftRegister>>1) | ((p->Registers[6]&0x4?((p->NoiseShiftRegister&0x9) && (p->NoiseShiftRegister&0x9^0x9)):p->NoiseShiftRegister&1)<<15); */ + } + } + } +} + +/*void SN76489_UpdateOne(int which, int *l, int *r) +{ + INT16 tl,tr; + INT16 *buff[2]={&tl,&tr}; + SN76489_Update(which,buff,1); + *l=tl; + *r=tr; +}*/ + +int SN76489_GetMute(int which) +{ + return SN76489[which].Mute; +} + +void SN76489_SetMute(int which, int val) +{ + SN76489[which].Mute=val; +} + +int SN76489_GetVolType(int which) +{ + return SN76489[which].VolumeArray; +} + +void SN76489_SetVolType(int which, int val) +{ + SN76489[which].VolumeArray=val; +} + +void SN76489_SetPanning(int which, int ch0, int ch1, int ch2, int ch3) +{ + SN76489[which].panning[0]=ch0; + SN76489[which].panning[1]=ch1; + SN76489[which].panning[2]=ch2; + SN76489[which].panning[3]=ch3; +} diff --git a/ genplus-gx/source/sound/sn76489.h b/ genplus-gx/source/sound/sn76489.h new file mode 100644 index 0000000..517b800 --- /dev/null +++ b/ genplus-gx/source/sound/sn76489.h @@ -0,0 +1,91 @@ + +#ifndef _SN76489_H_ +#define _SN76489_H_ + +#define MAX_SN76489 4 +#include "shared.h" +/* + More testing is needed to find and confirm feedback patterns for + SN76489 variants and compatible chips. +*/ +enum feedback_patterns { + FB_BBCMICRO = 0x8005, /* Texas Instruments TMS SN76489N (original) from BBC Micro computer */ + FB_SC3000 = 0x0006, /* Texas Instruments TMS SN76489AN (rev. A) from SC-3000H computer */ + FB_SEGAVDP = 0x0009, /* SN76489 clone in Sega's VDP chips (315-5124, 315-5246, 315-5313, Game Gear) */ +}; + +enum sr_widths { + SRW_SC3000BBCMICRO = 15, + SRW_SEGAVDP = 16 +}; + +enum volume_modes { + VOL_TRUNC = 0, /* Volume levels 13-15 are identical */ + VOL_FULL = 1, /* Volume levels 13-15 are unique */ +}; + +enum mute_values { + MUTE_ALLOFF = 0, /* All channels muted */ + MUTE_TONE1 = 1, /* Tone 1 mute control */ + MUTE_TONE2 = 2, /* Tone 2 mute control */ + MUTE_TONE3 = 4, /* Tone 3 mute control */ + MUTE_NOISE = 8, /* Noise mute control */ + MUTE_ALLON = 15, /* All channels enabled */ +}; + +typedef struct +{ + int Mute; // per-channel muting + int VolumeArray; + int BoostNoise; // double noise volume when non-zero + + /* Variables */ + float Clock; + float dClock; + int PSGStereo; + int NumClocksForSample; + int WhiteNoiseFeedback; + int SRWidth; + + /* PSG registers: */ + int Registers[8]; /* Tone, vol x4 */ + int LatchedRegister; + int NoiseShiftRegister; + int NoiseFreq; /* Noise channel signal generator frequency */ + + /* Output calculation variables */ + int ToneFreqVals[4]; /* Frequency register values (counters) */ + int ToneFreqPos[4]; /* Frequency channel flip-flops */ + int Channels[4]; /* Value of each channel, before stereo is applied */ + float IntermediatePos[4]; /* intermediate values used at boundaries between + and - (does not need double accuracy)*/ + + int panning[4]; /* fake stereo - 0..127..254 */ + +} SN76489_Context; + +/* Function prototypes */ +void SN76489_Init(int which, int PSGClockValue, int SamplingRate); +void SN76489_Reset(int which); +void SN76489_Shutdown(void); +void SN76489_Config(int which, int mute, int volume, int feedback, int sw_width, int boost_noise); +void SN76489_SetContext(int which, uint8 *data); +void SN76489_GetContext(int which, uint8 *data); +uint8 *SN76489_GetContextPtr(int which); +int SN76489_GetContextSize(void); +void SN76489_Write(int which, int data); +/*void SN76489_GGStereoWrite(int which, int data);*/ +void SN76489_Update(int which, INT16 *buffer, int length); + +/* Non-standard getters and setters */ +int SN76489_GetMute(int which); +void SN76489_SetMute(int which, int val); +int SN76489_GetVolType(int which); +void SN76489_SetVolType(int which, int val); + +void SN76489_SetPanning(int which, int ch0, int ch1, int ch2, int ch3); + +/* and a non-standard data getter */ +/*void SN76489_UpdateOne(int which, int *l, int *r);*/ + +#endif /* _SN76489_H_ */ + diff --git a/ genplus-gx/source/sound/sn76496.c b/ genplus-gx/source/sound/sn76496.c new file mode 100644 index 0000000..2dc3a16 --- /dev/null +++ b/ genplus-gx/source/sound/sn76496.c @@ -0,0 +1,311 @@ + +#include "shared.h" + +#define MAX_OUTPUT 0x7fff +#define STEP 0x10000 +#define FB_WNOISE 0x14002 +#define FB_PNOISE 0x08000 +#define NG_PRESET 0x0F35 + + + +struct SN76496 sn[MAX_76496]; + +void SN76496Write (int chip, int data) +{ + struct SN76496 *R = &sn[chip]; + int n; + + if (data & 0x80) + { + int r = (data & 0x70) >> 4; + int c = r / 2; + + R->LastRegister = r; + R->Register[r] = (R->Register[r] & 0x3f0) | (data & 0x0f); + switch (r) + { + case 0: /* tone 0 : frequency */ + case 2: /* tone 1 : frequency */ + case 4: /* tone 2 : frequency */ + R->Period[c] = R->UpdateStep * R->Register[r]; + if (R->Period[c] == 0) + R->Period[c] = R->UpdateStep; + if (r == 4) + { + /* update noise shift frequency */ + if ((R->Register[6] & 0x03) == 0x03) + R->Period[3] = 2 * R->Period[2]; + } + break; + case 1: /* tone 0 : volume */ + case 3: /* tone 1 : volume */ + case 5: /* tone 2 : volume */ + case 7: /* noise : volume */ + R->Volume[c] = R->VolTable[data & 0x0f]; + break; + case 6: /* noise : frequency, mode */ + { + n = R->Register[6]; + R->NoiseFB = (n & 4) ? FB_WNOISE : FB_PNOISE; + n &= 3; + /* N/512,N/1024,N/2048,Tone #3 output */ + + /* + * Amended from Mame 1.04s + * + * R->Period[3] = (n == 3) ? 2 * R->Period[2] : (R->UpdateStep << (5+n)); + */ + R->Period[3] = + ((n & 3) == + 3) ? 2 * R->Period[2] : (R->UpdateStep << (5 + (n & 3))); + + /* reset noise shifter */ + R->RNG = NG_PRESET; + R->Output[3] = R->RNG & 1; + } + break; + } + } + else + { + int r = R->LastRegister; + int c = r / 2; + + switch (r) + { + case 0: /* tone 0 : frequency */ + case 2: /* tone 1 : frequency */ + case 4: /* tone 2 : frequency */ + R->Register[r] = (R->Register[r] & 0x0f) | ((data & 0x3f) << 4); + R->Period[c] = R->UpdateStep * R->Register[r]; + if (R->Period[c] == 0) + R->Period[c] = R->UpdateStep; + if (r == 4) + { + /* update noise shift frequency */ + if ((R->Register[6] & 0x03) == 0x03) + R->Period[3] = 2 * R->Period[2]; + } + break; + + /* + * Additions from Mame 1.04 + * Start Here + */ + + case 1: /* tone 0 : volume */ + case 3: /* tone 1 : volume */ + case 5: /* tone 2 : volume */ + case 7: /* noise : volume */ + R->Volume[c] = R->VolTable[data & 0x0f]; + R->Register[r] = (R->Register[r] & 0x3f0) | (data & 0x0f); + break; + case 6: /* noise : frequency, mode */ + { + R->Register[r] = (R->Register[r] & 0x3f0) | (data & 0x0f); + n = R->Register[6]; + R->NoiseFB = (n & 4) ? FB_WNOISE : FB_PNOISE; + n &= 3; + /* N/512,N/1024,N/2048,Tone #3 output */ + R->Period[3] = + ((n & 3) == + 3) ? 2 * R->Period[2] : (R->UpdateStep << (5 + (n & 3))); + /* reset noise shifter */ + R->RNG = NG_PRESET; + R->Output[3] = R->RNG & 1; + } + break; + } + } +} + + +void SN76496Update (int chip, signed short int *buffer, int length) +{ + int i; + struct SN76496 *R = &sn[chip]; + + + /* If the volume is 0, increase the counter */ + for (i = 0; i < 4; i++) + { + if (R->Volume[i] == 0) + { + /* note that I do count += length, NOT count = length + 1. You might think */ + /* it's the same since the volume is 0, but doing the latter could cause */ + /* interferencies when the program is rapidly modulating the volume. */ + if (R->Count[i] <= length * STEP) + R->Count[i] += length * STEP; + } + } + + while (length > 0) + { + int vol[4]; + unsigned int out; + int left; + + + /* vol[] keeps track of how long each square wave stays */ + /* in the 1 position during the sample period. */ + vol[0] = vol[1] = vol[2] = vol[3] = 0; + + for (i = 0; i < 3; i++) + { + if (R->Output[i]) + vol[i] += R->Count[i]; + R->Count[i] -= STEP; + /* Period[i] is the half period of the square wave. Here, in each */ + /* loop I add Period[i] twice, so that at the end of the loop the */ + /* square wave is in the same status (0 or 1) it was at the start. */ + /* vol[i] is also incremented by Period[i], since the wave has been 1 */ + /* exactly half of the time, regardless of the initial position. */ + /* If we exit the loop in the middle, Output[i] has to be inverted */ + /* and vol[i] incremented only if the exit status of the square */ + /* wave is 1. */ + while (R->Count[i] <= 0) + { + R->Count[i] += R->Period[i]; + if (R->Count[i] > 0) + { + R->Output[i] ^= 1; + if (R->Output[i]) + vol[i] += R->Period[i]; + break; + } + R->Count[i] += R->Period[i]; + vol[i] += R->Period[i]; + } + if (R->Output[i]) + vol[i] -= R->Count[i]; + } + + left = STEP; + do + { + int nextevent; + + + if (R->Count[3] < left) + nextevent = R->Count[3]; + else + nextevent = left; + + if (R->Output[3]) + vol[3] += R->Count[3]; + R->Count[3] -= nextevent; + if (R->Count[3] <= 0) + { + if (R->RNG & 1) + R->RNG ^= R->NoiseFB; + R->RNG >>= 1; + R->Output[3] = R->RNG & 1; + R->Count[3] += R->Period[3]; + if (R->Output[3]) + vol[3] += R->Period[3]; + } + if (R->Output[3]) + vol[3] -= R->Count[3]; + + left -= nextevent; + } + while (left > 0); + + out = vol[0] * R->Volume[0] + vol[1] * R->Volume[1] + + vol[2] * R->Volume[2] + vol[3] * R->Volume[3]; + + if (out > MAX_OUTPUT * STEP) + out = MAX_OUTPUT * STEP; + + *(buffer++) = out / STEP; + + length--; + } +} + + + +void SN76496_set_clock (int chip, int clock) +{ + struct SN76496 *R = &sn[chip]; + + + /* the base clock for the tone generators is the chip clock divided by 16; */ + /* for the noise generator, it is clock / 256. */ + /* Here we calculate the number of steps which happen during one sample */ + /* at the given sample rate. No. of events = sample rate / (clock/16). */ + /* STEP is a multiplier used to turn the fraction into a fixed point */ + /* number. */ + R->UpdateStep = ((double) STEP * R->SampleRate * 16) / clock; +} + + + +void SN76496_set_gain (int chip, int gain) +{ + struct SN76496 *R = &sn[chip]; + int i; + double out; + + + gain &= 0xff; + + /* increase max output basing on gain (0.2 dB per step) */ + out = MAX_OUTPUT / 3; + while (gain-- > 0) + out *= 1.023292992; /* = (10 ^ (0.2/20)) */ + + /* build volume table (2dB per step) */ + for (i = 0; i < 15; i++) + { + /* limit volume to avoid clipping */ + if (out > MAX_OUTPUT / 3) + R->VolTable[i] = MAX_OUTPUT / 3; + else + R->VolTable[i] = out; + + out /= 1.258925412; /* = 10 ^ (2/20) = 2dB */ + } + R->VolTable[15] = 0; +} + + + +int SN76496_init (int chip, int clock, int volume, int sample_rate) +{ + int i; + struct SN76496 *R = &sn[chip]; + + R->SampleRate = sample_rate; + SN76496_set_clock (chip, clock); + + for (i = 0; i < 4; i++) + R->Volume[i] = 0; + + R->LastRegister = 0; + for (i = 0; i < 8; i += 2) + { + R->Register[i] = 0; + R->Register[i + 1] = 0x0f; /* volume = 0 */ + } + + for (i = 0; i < 4; i++) + { + R->Output[i] = 0; + R->Period[i] = R->Count[i] = R->UpdateStep; + } + R->RNG = NG_PRESET; + R->Output[3] = R->RNG & 1; + + return 0; +} + + + +int SN76496_sh_start (int clock, int volume, int rate) +{ + SN76496_init (0, clock, volume & 0xff, rate); + SN76496_set_gain (0, (volume >> 8) & 0xff); + return 0; +} diff --git a/ genplus-gx/source/sound/sn76496.h b/ genplus-gx/source/sound/sn76496.h new file mode 100644 index 0000000..66dde58 --- /dev/null +++ b/ genplus-gx/source/sound/sn76496.h @@ -0,0 +1,38 @@ +#ifndef SN76496_H +#define SN76496_H + +#define MAX_76496 1 + +struct SN76496interface +{ + int num; + int baseclock[MAX_76496]; + int volume[MAX_76496]; +}; + +struct SN76496 +{ + int SampleRate; + unsigned int UpdateStep; + int VolTable[16]; + int Register[8]; + int LastRegister; + int Volume[4]; + unsigned int RNG; + int NoiseFB; + int Period[4]; + int Count[4]; + int Output[4]; +}; + +extern struct SN76496 sn[MAX_76496]; + +/* Function prototypes */ +void SN76496Write (int chip, int data); +void SN76496Update (int chip, signed short int *buffer, int length); +void SN76496_set_clock (int chip, int clock); +void SN76496_set_gain (int chip, int gain); +int SN76496_init (int chip, int clock, int volume, int sample_rate); +int SN76496_sh_start (int clock, int volume, int rate); + +#endif diff --git a/ genplus-gx/source/sound/sound.c b/ genplus-gx/source/sound/sound.c new file mode 100644 index 0000000..b77af89 --- /dev/null +++ b/ genplus-gx/source/sound/sound.c @@ -0,0 +1,224 @@ +/* + sound.c + YM2612 and SN76489 emulation +*/ + +#include "shared.h" + +/* YM2612 data */ +int fm_timera_tab[0x400]; /* Precalculated timer A values */ +int fm_timerb_tab[0x100]; /* Precalculated timer B values */ +uint8 fm_reg[2][0x100]; /* Register arrays (2x256) */ +uint8 fm_latch[2]; /* Register latches */ +uint8 fm_status; /* Read-only status flags */ +t_timer timer[2]; /* Timers A and B */ +extern void *myFM; + +/* Initialize the YM2612 and SN76489 emulation */ +void sound_init(void) +{ + /* Timers run at half the YM2612 input clock */ + float clock = ((CPU_Clock / 1000000.0) / 7.0) / 2.0; + int i; + + /* Make Timer A table */ + for(i = 0; i < 1024; i += 1) + { + /* Formula is "time(us) = 72 * (1024 - A) / clock" */ + fm_timera_tab[i] = (int)((double)(72 * (1024 - i)) / clock); + } + + /* Make Timer B table */ + for(i = 0; i < 256; i += 1) + { + /* Formula is "time(us) = 1152 * (256 - B) / clock" */ + fm_timerb_tab[i] = (int)((double)(1152 * (256 - i)) / clock); + } +} + +void fm_restore(void) +{ + int i; + + if (FM_GENS) YM2612_Reset(); + else YM2612ResetChip(myFM); + + /* feed all the registers and update internal state */ + for(i = 0; i < 0x100; i++) + { + if (FM_GENS) + { + YM2612_Write(0, i); + YM2612_Write(1, fm_reg[0][i]); + YM2612_Write(2, i); + YM2612_Write(3, fm_reg[1][i]); + } + else + { + YM2612Write(myFM, 0, i); + YM2612Write(myFM, 1, fm_reg[0][i]); + YM2612Write(myFM, 2, i); + YM2612Write(myFM, 3, fm_reg[1][i]); + } + } +} + +void fm_reset(void) +{ + if (FM_GENS) YM2612_Reset(); + else YM2612ResetChip(myFM); + + /* reset timers status */ + timer[0].running = 0; + timer[1].running = 0; + timer[0].enable = 0; + timer[1].enable = 0; + timer[0].count = 0; + timer[1].count = 0; + timer[0].base = 0; + timer[1].base = 0; + timer[0].index = 0; + timer[1].index = 0; + + /* reset FM status */ + fm_status = 0; +} + +void fm_write(int address, int data) +{ + int a0 = (address & 1); + int a1 = (address >> 1) & 1; + + if(a0) + { + /* Register data */ + fm_reg[a1][fm_latch[a1]] = data; + + /* Timer control only in set A */ + if(a1 == 0) + switch(fm_latch[a1]) + { + case 0x24: /* Timer A (LSB) */ + timer[0].index = ((timer[0].index & 0x0003) | (data << 2)) & 0x03FF; + if (timer[0].base != fm_timera_tab[timer[0].index]) + { + timer[0].base = fm_timera_tab[timer[0].index]; + timer[0].count = 0; + } + break; + case 0x25: /* Timer A (MSB) */ + timer[0].index = ((timer[0].index & 0x03FC) | (data & 3)) & 0x03FF; + if (timer[0].base != fm_timera_tab[timer[0].index]) + { + timer[0].base = fm_timera_tab[timer[0].index]; + timer[0].count = 0; + } + break; + case 0x26: /* Timer B */ + timer[1].index = data; + if (timer[1].base != fm_timerb_tab[timer[1].index]) + { + timer[1].base = fm_timerb_tab[timer[1].index]; + timer[1].count = 0; + } + break; + case 0x27: /* Timer Control */ + /* LOAD */ + timer[0].running = (data & 1); + timer[1].running = (data & 2); + /* ENABLE */ + timer[0].enable = (data >> 2) & 1; + timer[1].enable = (data >> 3) & 1; + /* RESET */ + if(data & 0x10) fm_status &= ~1; + if(data & 0x20) fm_status &= ~2; + break; + } + } + else + { + /* Register latch */ + fm_latch[a1] = data; + } + + if(snd.enabled) + { + if(snd.fm.curStage - snd.fm.lastStage > 0) + { + if (FM_GENS) + { + int *tempBuffer[2]; + tempBuffer[0] = snd.fm.gens_buffer[0] + snd.fm.lastStage; + tempBuffer[1] = snd.fm.gens_buffer[1] + snd.fm.lastStage; + YM2612_Update(tempBuffer, snd.fm.curStage - snd.fm.lastStage); + } + else + { + int16 *tempBuffer[2]; + tempBuffer[0] = snd.fm.buffer[0] + snd.fm.lastStage; + tempBuffer[1] = snd.fm.buffer[1] + snd.fm.lastStage; + YM2612UpdateOne(myFM, tempBuffer, snd.fm.curStage - snd.fm.lastStage); + } + snd.fm.lastStage = snd.fm.curStage; + } + + if (FM_GENS) YM2612_Write(address & 3, data); + else YM2612Write(myFM, address & 3, data); + } +} + +int fm_read(int address) +{ + return (fm_status); +} + +void fm_update_timers(int inc) +{ + int i; + + /* Process YM2612 timers */ + for(i = 0; i < 2; i += 1) + { + /* Is the timer running? */ + if(timer[i].running) + { + /* Each scanline takes up roughly 64 microseconds */ + timer[i].count += inc; + + /* Check if the counter overflowed */ + if(timer[i].count >= timer[i].base) + { + /* Reload counter */ + timer[i].count -= timer[i].base; + + /* Set overflow flag (if flag setting is enabled) */ + if(timer[i].enable) fm_status |= (1 << i); + + /* Notice FM core (some CH operation on TimerA) */ + if(i==0) + { + if (FM_GENS) YM2612TimerAOver(); + else YM2612TimerOver(myFM,0); + } + } + } + } +} + +void psg_write(int data) +{ + if(snd.enabled) + { + if(snd.psg.curStage - snd.psg.lastStage > 0) + { + int16 *tempBuffer; + tempBuffer = snd.psg.buffer + snd.psg.lastStage; + if (PSG_MAME) SN76496Update (0, tempBuffer, snd.psg.curStage - snd.psg.lastStage); + else SN76489_Update(0, tempBuffer, snd.psg.curStage - snd.psg.lastStage); + snd.psg.lastStage = snd.psg.curStage; + } + + if (PSG_MAME) SN76496Write(0, data); + else SN76489_Write(0, data); + } +} diff --git a/ genplus-gx/source/sound/sound.h b/ genplus-gx/source/sound/sound.h new file mode 100644 index 0000000..7128ecf --- /dev/null +++ b/ genplus-gx/source/sound/sound.h @@ -0,0 +1,29 @@ + +#ifndef _SOUND_H_ +#define _SOUND_H_ + +typedef struct +{ + int running; + int enable; + int count; + int base; + int index; +} t_timer; + +/* Global variables */ +extern uint8 fm_reg[2][0x100]; +extern uint8 fm_latch[2]; +extern uint8 fm_status; +extern t_timer timer[2]; + +/* Function prototypes */ +void sound_init (void); +void fm_reset (void); +void fm_restore(void); +void fm_write (int address, int data); +int fm_read (int address); +void fm_update_timers (int inc); +void psg_write (int data); + +#endif /* _SOUND_H_ */ diff --git a/ genplus-gx/source/sound/ym2612.c b/ genplus-gx/source/sound/ym2612.c new file mode 100644 index 0000000..620bb5a --- /dev/null +++ b/ genplus-gx/source/sound/ym2612.c @@ -0,0 +1,2365 @@ +/*********************************************************** + * * + * YM2612.C : YM2612 emulator * + * * + * Almost constantes are taken from the MAME core * + * * + * This source is a part of Gens project * + * Written by Stéphane Dallongeville (gens@consolemul.com) * + * Copyright (c) 2002 by Stéphane Dallongeville * + * * + ***********************************************************/ + +#include +#include +#include "shared.h" + +/******************************************** + * Partie définition * + ********************************************/ + +#define YM_DEBUG_LEVEL 0 + +#ifndef PI +#define PI 3.14159265358979323846 +#endif + +#define ATTACK 0 +#define DECAY 1 +#define SUBSTAIN 2 +#define RELEASE 3 + +// SIN_LBITS <= 16 +// LFO_HBITS <= 16 +// (SIN_LBITS + SIN_HBITS) <= 26 +// (ENV_LBITS + ENV_HBITS) <= 28 +// (LFO_LBITS + LFO_HBITS) <= 28 + +#define SIN_HBITS 12 // Sinus phase counter int part +#define SIN_LBITS (26 - SIN_HBITS) // Sinus phase counter float part (best setting) + +#if (SIN_LBITS > 16) +#define SIN_LBITS 16 // Can't be greater than 16 bits +#endif + +#define ENV_HBITS 12 // Env phase counter int part +#define ENV_LBITS (28 - ENV_HBITS) // Env phase counter float part (best setting) + +#define LFO_HBITS 10 // LFO phase counter int part +#define LFO_LBITS (28 - LFO_HBITS) // LFO phase counter float part (best setting) + +#define SIN_LENGHT (1 << SIN_HBITS) +#define ENV_LENGHT (1 << ENV_HBITS) +#define LFO_LENGHT (1 << LFO_HBITS) + +#define TL_LENGHT (ENV_LENGHT * 3) // Env + TL scaling + LFO + +#define SIN_MASK (SIN_LENGHT - 1) +#define ENV_MASK (ENV_LENGHT - 1) +#define LFO_MASK (LFO_LENGHT - 1) + +#define ENV_STEP (96.0 / ENV_LENGHT) // ENV_MAX = 96 dB + +#define ENV_ATTACK ((ENV_LENGHT * 0) << ENV_LBITS) +#define ENV_DECAY ((ENV_LENGHT * 1) << ENV_LBITS) +#define ENV_END ((ENV_LENGHT * 2) << ENV_LBITS) + +#define MAX_OUT_BITS (SIN_HBITS + SIN_LBITS + 2) // Modulation = -4 <--> +4 +#define MAX_OUT ((1 << MAX_OUT_BITS) - 1) + +//Just for tests stuff... +// +//#define COEF_MOD 0.5 +//#define MAX_OUT ((int) (((1 << MAX_OUT_BITS) - 1) * COEF_MOD)) + +#define OUT_BITS (OUTPUT_BITS - 2) +#define OUT_SHIFT (MAX_OUT_BITS - OUT_BITS) +#define LIMIT_CH_OUT ((int) (((1 << OUT_BITS) * 1.5) - 1)) + +#define PG_CUT_OFF ((int) (78.0 / ENV_STEP)) +#define ENV_CUT_OFF ((int) (68.0 / ENV_STEP)) + +#define AR_RATE 399128 +#define DR_RATE 5514396 + +//#define AR_RATE 426136 +//#define DR_RATE (AR_RATE * 12) + +#define LFO_FMS_LBITS 9 // FIXED (LFO_FMS_BASE gives somethink as 1) +#define LFO_FMS_BASE ((int) (0.05946309436 * 0.0338 * (double) (1 << LFO_FMS_LBITS))) + +#define S0 0 // Stupid typo of the YM2612 +#define S1 2 +#define S2 1 +#define S3 3 + + +/******************************************** + * Partie variables * + ********************************************/ + + +struct ym2612__ YM2612; + +int *SIN_TAB[SIN_LENGHT]; // SINUS TABLE (pointer on TL TABLE) +int TL_TAB[TL_LENGHT * 2]; // TOTAL LEVEL TABLE (positif and minus) +unsigned int ENV_TAB[2 * ENV_LENGHT + 8]; // ENV CURVE TABLE (attack & decay) + +//unsigned int ATTACK_TO_DECAY[ENV_LENGHT]; // Conversion from attack to decay phase +unsigned int DECAY_TO_ATTACK[ENV_LENGHT]; // Conversion from decay to attack phase + +unsigned int FINC_TAB[2048]; // Frequency step table + +unsigned int AR_TAB[128]; // Attack rate table +unsigned int DR_TAB[96]; // Decay rate table +unsigned int DT_TAB[8][32]; // Detune table +unsigned int SL_TAB[16]; // Substain level table +unsigned int NULL_RATE[32]; // Table for NULL rate + +int LFO_ENV_TAB[LFO_LENGHT]; // LFO AMS TABLE (adjusted for 11.8 dB) +int LFO_FREQ_TAB[LFO_LENGHT]; // LFO FMS TABLE +int LFO_ENV_UP[MAX_UPDATE_LENGHT]; // Temporary calculated LFO AMS (adjusted for 11.8 dB) +int LFO_FREQ_UP[MAX_UPDATE_LENGHT]; // Temporary calculated LFO FMS + +int INTER_TAB[MAX_UPDATE_LENGHT]; // Interpolation table + +int LFO_INC_TAB[8]; // LFO step table + +int in0, in1, in2, in3; // current phase calculation +int en0, en1, en2, en3; // current enveloppe calculation + +const void (*UPDATE_CHAN[8 * 8])(channel_ *CH, int **buf, int lenght) = // Update Channel functions pointer table +{ + (void *)Update_Chan_Algo0, + (void *)Update_Chan_Algo1, + (void *)Update_Chan_Algo2, + (void *)Update_Chan_Algo3, + (void *)Update_Chan_Algo4, + (void *)Update_Chan_Algo5, + (void *)Update_Chan_Algo6, + (void *)Update_Chan_Algo7, + (void *)Update_Chan_Algo0_LFO, + (void *)Update_Chan_Algo1_LFO, + (void *)Update_Chan_Algo2_LFO, + (void *)Update_Chan_Algo3_LFO, + (void *)Update_Chan_Algo4_LFO, + (void *)Update_Chan_Algo5_LFO, + (void *)Update_Chan_Algo6_LFO, + (void *)Update_Chan_Algo7_LFO, + (void *)Update_Chan_Algo0_Int, + (void *)Update_Chan_Algo1_Int, + (void *)Update_Chan_Algo2_Int, + (void *)Update_Chan_Algo3_Int, + (void *)Update_Chan_Algo4_Int, + (void *)Update_Chan_Algo5_Int, + (void *)Update_Chan_Algo6_Int, + (void *)Update_Chan_Algo7_Int, + (void *)Update_Chan_Algo0_LFO_Int, + (void *)Update_Chan_Algo1_LFO_Int, + (void *)Update_Chan_Algo2_LFO_Int, + (void *)Update_Chan_Algo3_LFO_Int, + (void *)Update_Chan_Algo4_LFO_Int, + (void *)Update_Chan_Algo5_LFO_Int, + (void *)Update_Chan_Algo6_LFO_Int, + (void *)Update_Chan_Algo7_LFO_Int +}; + +const void (*ENV_NEXT_EVENT[8])(slot_ *SL) = // Next Enveloppe phase functions pointer table +{ + (void *)Env_Attack_Next, + (void *)Env_Decay_Next, + (void *)Env_Substain_Next, + (void *)Env_Release_Next, + (void *)Env_NULL_Next, + (void *)Env_NULL_Next, + (void *)Env_NULL_Next, + (void *)Env_NULL_Next +}; + +const unsigned int DT_DEF_TAB[4 * 32] = +{ +// FD = 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +// FD = 1 + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 8, 8, 8, 8, + +// FD = 2 + 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, + 5, 6, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 16, 16, 16, 16, + +// FD = 3 + 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, + 8 , 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 22, 22, 22, 22 +}; + +const unsigned int FKEY_TAB[16] = +{ + 0, 0, 0, 0, + 0, 0, 0, 1, + 2, 3, 3, 3, + 3, 3, 3, 3 +}; + +const unsigned int LFO_AMS_TAB[4] = +{ + 31, 4, 1, 0 +}; + +const unsigned int LFO_FMS_TAB[8] = +{ + LFO_FMS_BASE * 0, LFO_FMS_BASE * 1, + LFO_FMS_BASE * 2, LFO_FMS_BASE * 3, + LFO_FMS_BASE * 4, LFO_FMS_BASE * 6, + LFO_FMS_BASE * 12, LFO_FMS_BASE * 24 +}; + +int int_cnt; // Interpolation calculation + + +#if YM_DEBUG_LEVEL > 0 // Debug +FILE *debug_file = NULL; +#endif + + +/*********************************************** + * fonctions calcul param * + ***********************************************/ + + +INLINE void CALC_FINC_SL(slot_ *SL, int finc, int kc) +{ + int ksr; + + SL->Finc = (finc + SL->DT[kc]) * SL->MUL; + + ksr = kc >> SL->KSR_S; // keycode atténuation + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "FINC = %d SL->Finc = %d\n", finc, SL->Finc); +#endif + + if (SL->KSR != ksr) // si le KSR a changé alors + { // les différents taux pour l'enveloppe sont mis à jour + SL->KSR = ksr; + + SL->EincA = SL->AR[ksr]; + SL->EincD = SL->DR[ksr]; + SL->EincS = SL->SR[ksr]; + SL->EincR = SL->RR[ksr]; + + if (SL->Ecurp == ATTACK) SL->Einc = SL->EincA; + else if (SL->Ecurp == DECAY) SL->Einc = SL->EincD; + else if (SL->Ecnt < ENV_END) + { + if (SL->Ecurp == SUBSTAIN) SL->Einc = SL->EincS; + else if (SL->Ecurp == RELEASE) SL->Einc = SL->EincR; + } + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "KSR = %.4X EincA = %.8X EincD = %.8X EincS = %.8X EincR = %.8X\n", ksr, SL->EincA, SL->EincD, SL->EincS, SL->EincR); +#endif + } +} + + +INLINE void CALC_FINC_CH(channel_ *CH) +{ + int finc, kc; + + finc = FINC_TAB[CH->FNUM[0]] >> (7 - CH->FOCT[0]); + kc = CH->KC[0]; + + CALC_FINC_SL(&CH->SLOT[0], finc, kc); + CALC_FINC_SL(&CH->SLOT[1], finc, kc); + CALC_FINC_SL(&CH->SLOT[2], finc, kc); + CALC_FINC_SL(&CH->SLOT[3], finc, kc); +} + + + +/*********************************************** + * fonctions setting * + ***********************************************/ + + +INLINE void KEY_ON(channel_ *CH, int nsl) +{ + slot_ *SL = &(CH->SLOT[nsl]); // on recupère le bon pointeur de slot + + if (SL->Ecurp == RELEASE) // la touche est-elle relâchée ? + { + SL->Fcnt = 0; + + // Fix Ecco 2 splash sound + + SL->Ecnt = (DECAY_TO_ATTACK[ENV_TAB[SL->Ecnt >> ENV_LBITS]] + ENV_ATTACK) & SL->ChgEnM; + SL->ChgEnM = 0xFFFFFFFF; + +// SL->Ecnt = DECAY_TO_ATTACK[ENV_TAB[SL->Ecnt >> ENV_LBITS]] + ENV_ATTACK; +// SL->Ecnt = 0; + + SL->Einc = SL->EincA; + SL->Ecmp = ENV_DECAY; + SL->Ecurp = ATTACK; + } +} + + +INLINE void KEY_OFF(channel_ *CH, int nsl) +{ + slot_ *SL = &(CH->SLOT[nsl]); // on recupère le bon pointeur de slot + + if (SL->Ecurp != RELEASE) // la touche est-elle appuyée ? + { + if (SL->Ecnt < ENV_DECAY) // attack phase ? + { + SL->Ecnt = (ENV_TAB[SL->Ecnt >> ENV_LBITS] << ENV_LBITS) + ENV_DECAY; + } + + SL->Einc = SL->EincR; + SL->Ecmp = ENV_END; + SL->Ecurp = RELEASE; + } +} + + +INLINE void CSM_Key_Control() +{ + KEY_ON(&YM2612.CHANNEL[2], 0); + KEY_ON(&YM2612.CHANNEL[2], 1); + KEY_ON(&YM2612.CHANNEL[2], 2); + KEY_ON(&YM2612.CHANNEL[2], 3); +} + + +int SLOT_SET(int Adr, unsigned char data) +{ + channel_ *CH; + slot_ *SL; + int nch, nsl; + + if ((nch = Adr & 3) == 3) return 1; + nsl = (Adr >> 2) & 3; + + if (Adr & 0x100) nch += 3; + + CH = &(YM2612.CHANNEL[nch]); + SL = &(CH->SLOT[nsl]); + + switch(Adr & 0xF0) + { + case 0x30: + if ((SL->MUL = (data & 0x0F))) SL->MUL <<= 1; + else SL->MUL = 1; + + SL->DT = DT_TAB[(data >> 4) & 7]; + + CH->SLOT[0].Finc = -1; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d], SLOT[%d] DTMUL = %.2X\n", nch, nsl, data & 0x7F); +#endif + break; + + case 0x40: + SL->TL = data & 0x7F; + + // SOR2 do a lot of TL adjustement and this fix R.Shinobi jump sound... + YM2612_Special_Update(); + +#if ((ENV_HBITS - 7) < 0) + SL->TLL = SL->TL >> (7 - ENV_HBITS); +#else + SL->TLL = SL->TL << (ENV_HBITS - 7); +#endif + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d], SLOT[%d] TL = %.2X\n", nch, nsl, SL->TL); +#endif + break; + + case 0x50: + SL->KSR_S = 3 - (data >> 6); + + CH->SLOT[0].Finc = -1; + + if (data &= 0x1F) SL->AR = &AR_TAB[data << 1]; + else SL->AR = &NULL_RATE[0]; + + SL->EincA = SL->AR[SL->KSR]; + if (SL->Ecurp == ATTACK) SL->Einc = SL->EincA; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d], SLOT[%d] AR = %.2X EincA = %.6X\n", nch, nsl, data, SL->EincA); +#endif + break; + + case 0x60: + if ((SL->AMSon = (data & 0x80))) SL->AMS = CH->AMS; + else SL->AMS = 31; + + if (data &= 0x1F) SL->DR = &DR_TAB[data << 1]; + else SL->DR = &NULL_RATE[0]; + + SL->EincD = SL->DR[SL->KSR]; + if (SL->Ecurp == DECAY) SL->Einc = SL->EincD; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d], SLOT[%d] AMS = %d DR = %.2X EincD = %.6X\n", nch, nsl, SL->AMSon, data, SL->EincD); +#endif + break; + + case 0x70: + if (data &= 0x1F) SL->SR = &DR_TAB[data << 1]; + else SL->SR = &NULL_RATE[0]; + + SL->EincS = SL->SR[SL->KSR]; + if ((SL->Ecurp == SUBSTAIN) && (SL->Ecnt < ENV_END)) SL->Einc = SL->EincS; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d], SLOT[%d] SR = %.2X EincS = %.6X\n", nch, nsl, data, SL->EincS); +#endif + break; + + case 0x80: + SL->SLL = SL_TAB[data >> 4]; + + SL->RR = &DR_TAB[((data & 0xF) << 2) + 2]; + + SL->EincR = SL->RR[SL->KSR]; + if ((SL->Ecurp == RELEASE) && (SL->Ecnt < ENV_END)) SL->Einc = SL->EincR; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d], SLOT[%d] SL = %.8X\n", nch, nsl, SL->SLL); + fprintf(debug_file, "CHANNEL[%d], SLOT[%d] RR = %.2X EincR = %.2X\n", nch, nsl, ((data & 0xF) << 1) | 2, SL->EincR); +#endif + break; + + case 0x90: +/* // SSG-EG envelope shapes : + // + // E At Al H + // + // 1 0 0 0 \\\\ + // + // 1 0 0 1 \___ + // + // 1 0 1 0 \/\/ + // ___ + // 1 0 1 1 \ + // + // 1 1 0 0 //// + // ___ + // 1 1 0 1 / + // + // 1 1 1 0 /\/\ + // + // 1 1 1 1 /___ + // + // E = SSG-EG enable + // At = Start negate + // Al = Altern + // H = Hold +*/ + if (data & 0x08) SL->SEG = data & 0x0F; + else SL->SEG = 0; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d], SLOT[%d] SSG-EG = %.2X\n", nch, nsl, data); +#endif + break; + } + + return 0; +} + + +int CHANNEL_SET(int Adr, unsigned char data) +{ + channel_ *CH; + int num; + + if ((num = Adr & 3) == 3) return 1; + + switch(Adr & 0xFC) + { + case 0xA0: + if (Adr & 0x100) num += 3; + CH = &(YM2612.CHANNEL[num]); + + YM2612_Special_Update(); + + CH->FNUM[0] = (CH->FNUM[0] & 0x700) + data; + CH->KC[0] = (CH->FOCT[0] << 2) | FKEY_TAB[CH->FNUM[0] >> 7]; + + CH->SLOT[0].Finc = -1; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d] part1 FNUM = %d KC = %d\n", num, CH->FNUM[0], CH->KC[0]); +#endif + break; + + case 0xA4: + if (Adr & 0x100) num += 3; + CH = &(YM2612.CHANNEL[num]); + + YM2612_Special_Update(); + + CH->FNUM[0] = (CH->FNUM[0] & 0x0FF) + ((int) (data & 0x07) << 8); + CH->FOCT[0] = (data & 0x38) >> 3; + CH->KC[0] = (CH->FOCT[0] << 2) | FKEY_TAB[CH->FNUM[0] >> 7]; + + CH->SLOT[0].Finc = -1; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d] part2 FNUM = %d FOCT = %d KC = %d\n", num, CH->FNUM[0], CH->FOCT[0], CH->KC[0]); +#endif + break; + + case 0xA8: + if (Adr < 0x100) + { + num++; + + YM2612_Special_Update(); + + YM2612.CHANNEL[2].FNUM[num] = (YM2612.CHANNEL[2].FNUM[num] & 0x700) + data; + YM2612.CHANNEL[2].KC[num] = (YM2612.CHANNEL[2].FOCT[num] << 2) | FKEY_TAB[YM2612.CHANNEL[2].FNUM[num] >> 7]; + + YM2612.CHANNEL[2].SLOT[0].Finc = -1; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[2] part1 FNUM[%d] = %d KC[%d] = %d\n", num, YM2612.CHANNEL[2].FNUM[num], num, YM2612.CHANNEL[2].KC[num]); +#endif + } + break; + + case 0xAC: + if (Adr < 0x100) + { + num++; + + YM2612_Special_Update(); + + YM2612.CHANNEL[2].FNUM[num] = (YM2612.CHANNEL[2].FNUM[num] & 0x0FF) + ((int) (data & 0x07) << 8); + YM2612.CHANNEL[2].FOCT[num] = (data & 0x38) >> 3; + YM2612.CHANNEL[2].KC[num] = (YM2612.CHANNEL[2].FOCT[num] << 2) | FKEY_TAB[YM2612.CHANNEL[2].FNUM[num] >> 7]; + + YM2612.CHANNEL[2].SLOT[0].Finc = -1; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[2] part2 FNUM[%d] = %d FOCT[%d] = %d KC[%d] = %d\n", num, YM2612.CHANNEL[2].FNUM[num], num, YM2612.CHANNEL[2].FOCT[num], num, YM2612.CHANNEL[2].KC[num]); +#endif + } + break; + + case 0xB0: + if (Adr & 0x100) num += 3; + CH = &(YM2612.CHANNEL[num]); + + if (CH->ALGO != (data & 7)) + { + // Fix VectorMan 2 heli sound (level 1) + YM2612_Special_Update(); + + CH->ALGO = data & 7; + + CH->SLOT[0].ChgEnM = 0; + CH->SLOT[1].ChgEnM = 0; + CH->SLOT[2].ChgEnM = 0; + CH->SLOT[3].ChgEnM = 0; + } + + CH->FB = 9 - ((data >> 3) & 7); // Real thing ? + +// if (CH->FB = ((data >> 3) & 7)) CH->FB = 9 - CH->FB; // Thunder force 4 (music stage 8), Gynoug, Aladdin bug sound... +// else CH->FB = 31; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "CHANNEL[%d] ALGO = %d FB = %d\n", num, CH->ALGO, CH->FB); +#endif + break; + + case 0xB4: + if (Adr & 0x100) num += 3; + CH = &(YM2612.CHANNEL[num]); + + YM2612_Special_Update(); + + if (data & 0x80) CH->LEFT = 0xFFFFFFFF; + else CH->LEFT = 0; + + if (data & 0x40) CH->RIGHT = 0xFFFFFFFF; + else CH->RIGHT = 0; + + CH->AMS = LFO_AMS_TAB[(data >> 4) & 3]; + CH->FMS = LFO_FMS_TAB[data & 7]; + + if (CH->SLOT[0].AMSon) CH->SLOT[0].AMS = CH->AMS; + else CH->SLOT[0].AMS = 31; + if (CH->SLOT[1].AMSon) CH->SLOT[1].AMS = CH->AMS; + else CH->SLOT[1].AMS = 31; + if (CH->SLOT[2].AMSon) CH->SLOT[2].AMS = CH->AMS; + else CH->SLOT[2].AMS = 31; + if (CH->SLOT[3].AMSon) CH->SLOT[3].AMS = CH->AMS; + else CH->SLOT[3].AMS = 31; + +#if YM_DEBUG_LEVEL > 0 + fprintf(debug_file, "CHANNEL[%d] AMS = %d FMS = %d\n", num, CH->AMS, CH->FMS); +#endif + break; + } + + return 0; +} + + +int YM_SET(int Adr, unsigned char data) +{ + channel_ *CH; + int nch; + + switch(Adr) + { + case 0x22: + if (data & 8) + { + // Cool Spot music 1, LFO modified severals time which + // distord the sound, have to check that on a real genesis... + + YM2612.LFOinc = LFO_INC_TAB[data & 7]; + +#if YM_DEBUG_LEVEL > 0 + fprintf(debug_file, "\nLFO Enable, LFOinc = %.8X %d\n", YM2612.LFOinc, data & 7); +#endif + } + else + { + YM2612.LFOinc = YM2612.LFOcnt = 0; + +#if YM_DEBUG_LEVEL > 0 + fprintf(debug_file, "\nLFO Disable\n"); +#endif + } + break; + + case 0x24: + YM2612.TimerA = (YM2612.TimerA & 0x003) | (((int) data) << 2); + + if (YM2612.TimerAL != (1024 - YM2612.TimerA) << 12) + { + YM2612.TimerAcnt = YM2612.TimerAL = (1024 - YM2612.TimerA) << 12; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "Timer A Set = %.8X\n", YM2612.TimerAcnt); +#endif + } + break; + + case 0x25: + YM2612.TimerA = (YM2612.TimerA & 0x3fc) | (data & 3); + + if (YM2612.TimerAL != (1024 - YM2612.TimerA) << 12) + { + YM2612.TimerAcnt = YM2612.TimerAL = (1024 - YM2612.TimerA) << 12; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "Timer A Set = %.8X\n", YM2612.TimerAcnt); +#endif + } + break; + + case 0x26: + YM2612.TimerB = data; + + if (YM2612.TimerBL != (256 - YM2612.TimerB) << (4 + 12)) + { + YM2612.TimerBcnt = YM2612.TimerBL = (256 - YM2612.TimerB) << (4 + 12); + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "Timer B Set = %.8X\n", YM2612.TimerBcnt); +#endif + } + break; + + case 0x27: + // Paramètre divers + // b7 = CSM MODE + // b6 = 3 slot mode + // b5 = reset b + // b4 = reset a + // b3 = timer enable b + // b2 = timer enable a + // b1 = load b + // b0 = load a + + if ((data ^ YM2612.Mode) & 0x40) + { + // We changed the channel 2 mode, so recalculate phase step + // This fix the punch sound in Street of Rage 2 + + YM2612_Special_Update(); + + YM2612.CHANNEL[2].SLOT[0].Finc = -1; // recalculate phase step + } + +// if ((data & 2) && (YM2612.Status & 2)) YM2612.TimerBcnt = YM2612.TimerBL; +// if ((data & 1) && (YM2612.Status & 1)) YM2612.TimerAcnt = YM2612.TimerAL; + +// YM2612.Status &= (~data >> 4); // Reset du Status au cas ou c'est demandé + YM2612.Status &= (~data >> 4) & (data >> 2); // Reset Status + + YM2612.Mode = data; + +#if YM_DEBUG_LEVEL > 0 + fprintf(debug_file, "Mode reg = %.2X\n", data); +#endif + break; + + case 0x28: + if ((nch = data & 3) == 3) return 1; + + if (data & 4) nch += 3; + CH = &(YM2612.CHANNEL[nch]); + + YM2612_Special_Update(); + + if (data & 0x10) KEY_ON(CH, S0); // On appuie sur la touche pour le slot 1 + else KEY_OFF(CH, S0); // On relâche la touche pour le slot 1 + if (data & 0x20) KEY_ON(CH, S1); // On appuie sur la touche pour le slot 3 + else KEY_OFF(CH, S1); // On relâche la touche pour le slot 3 + if (data & 0x40) KEY_ON(CH, S2); // On appuie sur la touche pour le slot 2 + else KEY_OFF(CH, S2); // On relâche la touche pour le slot 2 + if (data & 0x80) KEY_ON(CH, S3); // On appuie sur la touche pour le slot 4 + else KEY_OFF(CH, S3); // On relâche la touche pour le slot 4 + +#if YM_DEBUG_LEVEL > 0 + fprintf(debug_file, "CHANNEL[%d] KEY %.1X\n", nch, ((data & 0xf0) >> 4)); +#endif + break; + + case 0x2A: + YM2612.DACdata = ((int) data - 0x80) << 7; // donnée du DAC + break; + + case 0x2B: + if (YM2612.DAC ^ (data & 0x80)) YM2612_Special_Update(); + + YM2612.DAC = data & 0x80; // activation/désactivation du DAC + break; + } + + return 0; +} + + + +/*********************************************** + * fonctions de génération * + ***********************************************/ + + +void Env_NULL_Next(slot_ *SL) +{ +} + + +void Env_Attack_Next(slot_ *SL) +{ + // Verified with Gynoug even in HQ (explode SFX) + SL->Ecnt = ENV_DECAY; + + SL->Einc = SL->EincD; + SL->Ecmp = SL->SLL; + SL->Ecurp = DECAY; +} + + +void Env_Decay_Next(slot_ *SL) +{ + // Verified with Gynoug even in HQ (explode SFX) + SL->Ecnt = SL->SLL; + + SL->Einc = SL->EincS; + SL->Ecmp = ENV_END; + SL->Ecurp = SUBSTAIN; +} + + +void Env_Substain_Next(slot_ *SL) +{ + if (SL->SEG & 8) // SSG envelope type + { + if (SL->SEG & 1) + { + SL->Ecnt = ENV_END; + SL->Einc = 0; + SL->Ecmp = ENV_END + 1; + } + else + { + // re KEY ON + + // SL->Fcnt = 0; + // SL->ChgEnM = 0xFFFFFFFF; + + SL->Ecnt = 0; + SL->Einc = SL->EincA; + SL->Ecmp = ENV_DECAY; + SL->Ecurp = ATTACK; + } + + SL->SEG ^= (SL->SEG & 2) << 1; + } + else + { + SL->Ecnt = ENV_END; + SL->Einc = 0; + SL->Ecmp = ENV_END + 1; + } +} + + +void Env_Release_Next(slot_ *SL) +{ + SL->Ecnt = ENV_END; + SL->Einc = 0; + SL->Ecmp = ENV_END + 1; +} + + +#define GET_CURRENT_PHASE \ +in0 = CH->SLOT[S0].Fcnt; \ +in1 = CH->SLOT[S1].Fcnt; \ +in2 = CH->SLOT[S2].Fcnt; \ +in3 = CH->SLOT[S3].Fcnt; + + +#define UPDATE_PHASE \ +CH->SLOT[S0].Fcnt += CH->SLOT[S0].Finc; \ +CH->SLOT[S1].Fcnt += CH->SLOT[S1].Finc; \ +CH->SLOT[S2].Fcnt += CH->SLOT[S2].Finc; \ +CH->SLOT[S3].Fcnt += CH->SLOT[S3].Finc; + + +#define UPDATE_PHASE_LFO \ +if ((freq_LFO = (CH->FMS * LFO_FREQ_UP[i]) >> (LFO_HBITS - 1))) \ +{ \ + CH->SLOT[S0].Fcnt += CH->SLOT[S0].Finc + ((CH->SLOT[S0].Finc * freq_LFO) >> LFO_FMS_LBITS); \ + CH->SLOT[S1].Fcnt += CH->SLOT[S1].Finc + ((CH->SLOT[S1].Finc * freq_LFO) >> LFO_FMS_LBITS); \ + CH->SLOT[S2].Fcnt += CH->SLOT[S2].Finc + ((CH->SLOT[S2].Finc * freq_LFO) >> LFO_FMS_LBITS); \ + CH->SLOT[S3].Fcnt += CH->SLOT[S3].Finc + ((CH->SLOT[S3].Finc * freq_LFO) >> LFO_FMS_LBITS); \ +} \ +else \ +{ \ + CH->SLOT[S0].Fcnt += CH->SLOT[S0].Finc; \ + CH->SLOT[S1].Fcnt += CH->SLOT[S1].Finc; \ + CH->SLOT[S2].Fcnt += CH->SLOT[S2].Finc; \ + CH->SLOT[S3].Fcnt += CH->SLOT[S3].Finc; \ +} + + +#define GET_CURRENT_ENV \ +if (CH->SLOT[S0].SEG & 4) \ +{ \ + if ((en0 = ENV_TAB[(CH->SLOT[S0].Ecnt >> ENV_LBITS)] + CH->SLOT[S0].TLL) > ENV_MASK) en0 = 0; \ + else en0 ^= ENV_MASK; \ +} \ +else en0 = ENV_TAB[(CH->SLOT[S0].Ecnt >> ENV_LBITS)] + CH->SLOT[S0].TLL; \ +if (CH->SLOT[S1].SEG & 4) \ +{ \ + if ((en1 = ENV_TAB[(CH->SLOT[S1].Ecnt >> ENV_LBITS)] + CH->SLOT[S1].TLL) > ENV_MASK) en1 = 0; \ + else en1 ^= ENV_MASK; \ +} \ +else en1 = ENV_TAB[(CH->SLOT[S1].Ecnt >> ENV_LBITS)] + CH->SLOT[S1].TLL; \ +if (CH->SLOT[S2].SEG & 4) \ +{ \ + if ((en2 = ENV_TAB[(CH->SLOT[S2].Ecnt >> ENV_LBITS)] + CH->SLOT[S2].TLL) > ENV_MASK) en2 = 0; \ + else en2 ^= ENV_MASK; \ +} \ +else en2 = ENV_TAB[(CH->SLOT[S2].Ecnt >> ENV_LBITS)] + CH->SLOT[S2].TLL; \ +if (CH->SLOT[S3].SEG & 4) \ +{ \ + if ((en3 = ENV_TAB[(CH->SLOT[S3].Ecnt >> ENV_LBITS)] + CH->SLOT[S3].TLL) > ENV_MASK) en3 = 0; \ + else en3 ^= ENV_MASK; \ +} \ +else en3 = ENV_TAB[(CH->SLOT[S3].Ecnt >> ENV_LBITS)] + CH->SLOT[S3].TLL; + + +#define GET_CURRENT_ENV_LFO \ +env_LFO = LFO_ENV_UP[i]; \ + \ +if (CH->SLOT[S0].SEG & 4) \ +{ \ + if ((en0 = ENV_TAB[(CH->SLOT[S0].Ecnt >> ENV_LBITS)] + CH->SLOT[S0].TLL) > ENV_MASK) en0 = 0; \ + else en0 = (en0 ^ ENV_MASK) + (env_LFO >> CH->SLOT[S0].AMS); \ +} \ +else en0 = ENV_TAB[(CH->SLOT[S0].Ecnt >> ENV_LBITS)] + CH->SLOT[S0].TLL + (env_LFO >> CH->SLOT[S0].AMS); \ +if (CH->SLOT[S1].SEG & 4) \ +{ \ + if ((en1 = ENV_TAB[(CH->SLOT[S1].Ecnt >> ENV_LBITS)] + CH->SLOT[S1].TLL) > ENV_MASK) en1 = 0; \ + else en1 = (en1 ^ ENV_MASK) + (env_LFO >> CH->SLOT[S1].AMS); \ +} \ +else en1 = ENV_TAB[(CH->SLOT[S1].Ecnt >> ENV_LBITS)] + CH->SLOT[S1].TLL + (env_LFO >> CH->SLOT[S1].AMS); \ +if (CH->SLOT[S2].SEG & 4) \ +{ \ + if ((en2 = ENV_TAB[(CH->SLOT[S2].Ecnt >> ENV_LBITS)] + CH->SLOT[S2].TLL) > ENV_MASK) en2 = 0; \ + else en2 = (en2 ^ ENV_MASK) + (env_LFO >> CH->SLOT[S2].AMS); \ +} \ +else en2 = ENV_TAB[(CH->SLOT[S2].Ecnt >> ENV_LBITS)] + CH->SLOT[S2].TLL + (env_LFO >> CH->SLOT[S2].AMS); \ +if (CH->SLOT[S3].SEG & 4) \ +{ \ + if ((en3 = ENV_TAB[(CH->SLOT[S3].Ecnt >> ENV_LBITS)] + CH->SLOT[S3].TLL) > ENV_MASK) en3 = 0; \ + else en3 = (en3 ^ ENV_MASK) + (env_LFO >> CH->SLOT[S3].AMS); \ +} \ +else en3 = ENV_TAB[(CH->SLOT[S3].Ecnt >> ENV_LBITS)] + CH->SLOT[S3].TLL + (env_LFO >> CH->SLOT[S3].AMS); + + +#define UPDATE_ENV \ +if ((CH->SLOT[S0].Ecnt += CH->SLOT[S0].Einc) >= CH->SLOT[S0].Ecmp) \ + ENV_NEXT_EVENT[CH->SLOT[S0].Ecurp](&(CH->SLOT[S0])); \ +if ((CH->SLOT[S1].Ecnt += CH->SLOT[S1].Einc) >= CH->SLOT[S1].Ecmp) \ + ENV_NEXT_EVENT[CH->SLOT[S1].Ecurp](&(CH->SLOT[S1])); \ +if ((CH->SLOT[S2].Ecnt += CH->SLOT[S2].Einc) >= CH->SLOT[S2].Ecmp) \ + ENV_NEXT_EVENT[CH->SLOT[S2].Ecurp](&(CH->SLOT[S2])); \ +if ((CH->SLOT[S3].Ecnt += CH->SLOT[S3].Einc) >= CH->SLOT[S3].Ecmp) \ + ENV_NEXT_EVENT[CH->SLOT[S3].Ecurp](&(CH->SLOT[S3])); + + +#define DO_LIMIT \ +if (CH->OUTd > LIMIT_CH_OUT) CH->OUTd = LIMIT_CH_OUT; \ +else if (CH->OUTd < -LIMIT_CH_OUT) CH->OUTd = -LIMIT_CH_OUT; + + +#define DO_FEEDBACK0 \ +in0 += CH->S0_OUT[0] >> CH->FB; \ +CH->S0_OUT[0] = SIN_TAB[(in0 >> SIN_LBITS) & SIN_MASK][en0]; + + +#define DO_FEEDBACK \ +in0 += (CH->S0_OUT[0] + CH->S0_OUT[1]) >> CH->FB; \ +CH->S0_OUT[1] = CH->S0_OUT[0]; \ +CH->S0_OUT[0] = SIN_TAB[(in0 >> SIN_LBITS) & SIN_MASK][en0]; + + +#define DO_FEEDBACK2 \ +in0 += (CH->S0_OUT[0] + (CH->S0_OUT[0] >> 2) + CH->S0_OUT[1]) >> CH->FB; \ +CH->S0_OUT[1] = CH->S0_OUT[0] >> 2; \ +CH->S0_OUT[0] = SIN_TAB[(in0 >> SIN_LBITS) & SIN_MASK][en0]; + + +#define DO_FEEDBACK3 \ +in0 += (CH->S0_OUT[0] + CH->S0_OUT[1] + CH->S0_OUT[2] + CH->S0_OUT[3]) >> CH->FB; \ +CH->S0_OUT[3] = CH->S0_OUT[2] >> 1; \ +CH->S0_OUT[2] = CH->S0_OUT[1] >> 1; \ +CH->S0_OUT[1] = CH->S0_OUT[0] >> 1; \ +CH->S0_OUT[0] = SIN_TAB[(in0 >> SIN_LBITS) & SIN_MASK][en0]; + + +#define DO_ALGO_0 \ +DO_FEEDBACK \ +in1 += CH->S0_OUT[1]; \ +in2 += SIN_TAB[(in1 >> SIN_LBITS) & SIN_MASK][en1]; \ +in3 += SIN_TAB[(in2 >> SIN_LBITS) & SIN_MASK][en2]; \ +CH->OUTd = (SIN_TAB[(in3 >> SIN_LBITS) & SIN_MASK][en3]) >> OUT_SHIFT; + +#define DO_ALGO_1 \ +DO_FEEDBACK \ +in2 += CH->S0_OUT[1] + SIN_TAB[(in1 >> SIN_LBITS) & SIN_MASK][en1]; \ +in3 += SIN_TAB[(in2 >> SIN_LBITS) & SIN_MASK][en2]; \ +CH->OUTd = (SIN_TAB[(in3 >> SIN_LBITS) & SIN_MASK][en3]) >> OUT_SHIFT; + +#define DO_ALGO_2 \ +DO_FEEDBACK \ +in2 += SIN_TAB[(in1 >> SIN_LBITS) & SIN_MASK][en1]; \ +in3 += CH->S0_OUT[1] + SIN_TAB[(in2 >> SIN_LBITS) & SIN_MASK][en2]; \ +CH->OUTd = (SIN_TAB[(in3 >> SIN_LBITS) & SIN_MASK][en3]) >> OUT_SHIFT; + +#define DO_ALGO_3 \ +DO_FEEDBACK \ +in1 += CH->S0_OUT[1]; \ +in3 += SIN_TAB[(in1 >> SIN_LBITS) & SIN_MASK][en1] + SIN_TAB[(in2 >> SIN_LBITS) & SIN_MASK][en2]; \ +CH->OUTd = (SIN_TAB[(in3 >> SIN_LBITS) & SIN_MASK][en3]) >> OUT_SHIFT; + +#define DO_ALGO_4 \ +DO_FEEDBACK \ +in1 += CH->S0_OUT[1]; \ +in3 += SIN_TAB[(in2 >> SIN_LBITS) & SIN_MASK][en2]; \ +CH->OUTd = ((int) SIN_TAB[(in3 >> SIN_LBITS) & SIN_MASK][en3] + (int) SIN_TAB[(in1 >> SIN_LBITS) & SIN_MASK][en1]) >> OUT_SHIFT; \ +DO_LIMIT + +#define DO_ALGO_5 \ +DO_FEEDBACK \ +in1 += CH->S0_OUT[1]; \ +in2 += CH->S0_OUT[1]; \ +in3 += CH->S0_OUT[1]; \ +CH->OUTd = ((int) SIN_TAB[(in3 >> SIN_LBITS) & SIN_MASK][en3] + (int) SIN_TAB[(in1 >> SIN_LBITS) & SIN_MASK][en1] + (int) SIN_TAB[(in2 >> SIN_LBITS) & SIN_MASK][en2]) >> OUT_SHIFT; \ +DO_LIMIT + +#define DO_ALGO_6 \ +DO_FEEDBACK \ +in1 += CH->S0_OUT[1]; \ +CH->OUTd = ((int) SIN_TAB[(in3 >> SIN_LBITS) & SIN_MASK][en3] + (int) SIN_TAB[(in1 >> SIN_LBITS) & SIN_MASK][en1] + (int) SIN_TAB[(in2 >> SIN_LBITS) & SIN_MASK][en2]) >> OUT_SHIFT; \ +DO_LIMIT + +#define DO_ALGO_7 \ +DO_FEEDBACK \ +CH->OUTd = ((int) SIN_TAB[(in3 >> SIN_LBITS) & SIN_MASK][en3] + (int) SIN_TAB[(in1 >> SIN_LBITS) & SIN_MASK][en1] + (int) SIN_TAB[(in2 >> SIN_LBITS) & SIN_MASK][en2] + CH->S0_OUT[1]) >> OUT_SHIFT; \ +DO_LIMIT + + +#define DO_OUTPUT \ +buf[0][i] += CH->OUTd & CH->LEFT; \ +buf[1][i] += CH->OUTd & CH->RIGHT; + + +#define DO_OUTPUT_INT0 \ +if ((int_cnt += YM2612.Inter_Step) & 0x04000) \ +{ \ + int_cnt &= 0x3FFF; \ + buf[0][i] += CH->OUTd & CH->LEFT; \ + buf[1][i] += CH->OUTd & CH->RIGHT; \ +} \ +else i--; + + +#define DO_OUTPUT_INT1 \ +CH->Old_OUTd = (CH->OUTd + CH->Old_OUTd) >> 1; \ +if ((int_cnt += YM2612.Inter_Step) & 0x04000) \ +{ \ + int_cnt &= 0x3FFF; \ + buf[0][i] += CH->Old_OUTd & CH->LEFT; \ + buf[1][i] += CH->Old_OUTd & CH->RIGHT; \ +} \ +else i--; + + +#define DO_OUTPUT_INT2 \ +if ((int_cnt += YM2612.Inter_Step) & 0x04000) \ +{ \ + int_cnt &= 0x3FFF; \ + CH->Old_OUTd = (CH->OUTd + CH->Old_OUTd) >> 1; \ + buf[0][i] += CH->Old_OUTd & CH->LEFT; \ + buf[1][i] += CH->Old_OUTd & CH->RIGHT; \ +} \ +else i--; \ +CH->Old_OUTd = CH->OUTd; + + +#define DO_OUTPUT_INT \ +if ((int_cnt += YM2612.Inter_Step) & 0x04000) \ +{ \ + int_cnt &= 0x3FFF; \ + CH->Old_OUTd = (((int_cnt ^ 0x3FFF) * CH->OUTd) + (int_cnt * CH->Old_OUTd)) >> 14; \ + buf[0][i] += CH->Old_OUTd & CH->LEFT; \ + buf[1][i] += CH->Old_OUTd & CH->RIGHT; \ +} \ +else i--; \ +CH->Old_OUTd = CH->OUTd; + + +void Update_Chan_Algo0(channel_ *CH, int **buf, int lenght) +{ + int i; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 0 len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_0 + DO_OUTPUT + } +} + + +void Update_Chan_Algo1(channel_ *CH, int **buf, int lenght) +{ + int i; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 1 len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_1 + DO_OUTPUT + } +} + + +void Update_Chan_Algo2(channel_ *CH, int **buf, int lenght) +{ + int i; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 2 len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_2 + DO_OUTPUT + } +} + + +void Update_Chan_Algo3(channel_ *CH, int **buf, int lenght) +{ + int i; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 3 len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_3 + DO_OUTPUT + } +} + + +void Update_Chan_Algo4(channel_ *CH, int **buf, int lenght) +{ + int i; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 4 len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_4 + DO_OUTPUT + } +} + + +void Update_Chan_Algo5(channel_ *CH, int **buf, int lenght) +{ + int i; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 5 len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_5 + DO_OUTPUT + } +} + + +void Update_Chan_Algo6(channel_ *CH, int **buf, int lenght) +{ + int i; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 6 len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_6 + DO_OUTPUT + } +} + + +void Update_Chan_Algo7(channel_ *CH, int **buf, int lenght) +{ + int i; + + if ((CH->SLOT[S0].Ecnt == ENV_END) && (CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 7 len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_7 + DO_OUTPUT + } +} + + +void Update_Chan_Algo0_LFO(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 0 LFO len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_0 + DO_OUTPUT + } +} + + +void Update_Chan_Algo1_LFO(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 1 LFO len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_1 + DO_OUTPUT + } +} + + +void Update_Chan_Algo2_LFO(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 2 LFO len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_2 + DO_OUTPUT + } +} + + +void Update_Chan_Algo3_LFO(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 3 LFO len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_3 + DO_OUTPUT + } +} + + +void Update_Chan_Algo4_LFO(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 4 LFO len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_4 + DO_OUTPUT + } +} + + +void Update_Chan_Algo5_LFO(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 5 LFO len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_5 + DO_OUTPUT + } +} + + +void Update_Chan_Algo6_LFO(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 6 LFO len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_6 + DO_OUTPUT + } +} + + +void Update_Chan_Algo7_LFO(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if ((CH->SLOT[S0].Ecnt == ENV_END) && (CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 7 LFO len = %d\n\n", lenght); +#endif + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_7 + DO_OUTPUT + } +} + + +/****************************************************** + * Interpolated output * + *****************************************************/ + + +void Update_Chan_Algo0_Int(channel_ *CH, int **buf, int lenght) +{ + int i; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 0 len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_0 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo1_Int(channel_ *CH, int **buf, int lenght) +{ + int i; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 1 len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_1 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo2_Int(channel_ *CH, int **buf, int lenght) +{ + int i; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 2 len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_2 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo3_Int(channel_ *CH, int **buf, int lenght) +{ + int i; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 3 len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_3 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo4_Int(channel_ *CH, int **buf, int lenght) +{ + int i; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 4 len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_4 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo5_Int(channel_ *CH, int **buf, int lenght) +{ + int i; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 5 len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_5 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo6_Int(channel_ *CH, int **buf, int lenght) +{ + int i; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 6 len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_6 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo7_Int(channel_ *CH, int **buf, int lenght) +{ + int i; + + if ((CH->SLOT[S0].Ecnt == ENV_END) && (CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 7 len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE + GET_CURRENT_ENV + UPDATE_ENV + DO_ALGO_7 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo0_LFO_Int(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 0 LFO len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_0 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo1_LFO_Int(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 1 LFO len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_1 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo2_LFO_Int(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 2 LFO len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_2 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo3_LFO_Int(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if (CH->SLOT[S3].Ecnt == ENV_END) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 3 LFO len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_3 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo4_LFO_Int(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 4 LFO len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_4 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo5_LFO_Int(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 5 LFO len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_5 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo6_LFO_Int(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if ((CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 6 LFO len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_6 + DO_OUTPUT_INT + } +} + + +void Update_Chan_Algo7_LFO_Int(channel_ *CH, int **buf, int lenght) +{ + int i, env_LFO, freq_LFO; + + if ((CH->SLOT[S0].Ecnt == ENV_END) && (CH->SLOT[S1].Ecnt == ENV_END) && (CH->SLOT[S2].Ecnt == ENV_END) && (CH->SLOT[S3].Ecnt == ENV_END)) return; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nAlgo 7 LFO len = %d\n\n", lenght); +#endif + + int_cnt = YM2612.Inter_Cnt; + + for(i = 0; i < lenght; i++) + { + GET_CURRENT_PHASE + UPDATE_PHASE_LFO + GET_CURRENT_ENV_LFO + UPDATE_ENV + DO_ALGO_7 + DO_OUTPUT_INT + } +} + + + +/*********************************************** + * fonctions publiques * + ***********************************************/ + +static long dac_highpass; + +// Initialisation de l'émulateur YM2612 +int YM2612_Init(int Clock, int Rate, int Interpolation) +{ + int i, j; + double x; + + if ((Rate == 0) || (Clock == 0)) return 1; + + memset(&YM2612, 0, sizeof(YM2612)); + +#if YM_DEBUG_LEVEL > 0 + if (debug_file == NULL) + { + debug_file = fopen("ym2612.log", "w"); + fprintf(debug_file, "YM2612 logging :\n\n"); + } +#endif + + YM2612.Clock = Clock; + YM2612.Rate = Rate; + + // 144 = 12 * (prescale * 2) = 12 * 6 * 2 + // prescale set to 6 by default + + YM2612.Frequence = ((double) YM2612.Clock / (double) YM2612.Rate) / 144.0; + YM2612.TimerBase = (int) (YM2612.Frequence * 4096.0); + + if ((Interpolation) && (YM2612.Frequence > 1.0)) + { + YM2612.Inter_Step = (unsigned int) ((1.0 / YM2612.Frequence) * (double) (0x4000)); + YM2612.Inter_Cnt = 0; + + // We recalculate rate and frequence after interpolation + + YM2612.Rate = YM2612.Clock / 144; + YM2612.Frequence = 1.0; + } + else + { + YM2612.Inter_Step = 0x4000; + YM2612.Inter_Cnt = 0; + } + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "YM2612 frequence = %g rate = %d interp step = %.8X\n\n", YM2612.Frequence, YM2612.Rate, YM2612.Inter_Step); +#endif + + // Tableau TL : + // [0 - 4095] = +output [4095 - ...] = +output overflow (fill with 0) + // [12288 - 16383] = -output [16384 - ...] = -output overflow (fill with 0) + + for(i = 0; i < TL_LENGHT; i++) + { + if (i >= PG_CUT_OFF) // YM2612 cut off sound after 78 dB (14 bits output ?) + { + TL_TAB[TL_LENGHT + i] = TL_TAB[i] = 0; + } + else + { + x = MAX_OUT; // Max output + x /= pow(10, (ENV_STEP * i) / 20); // Decibel -> Voltage + + TL_TAB[i] = (int) x; + TL_TAB[TL_LENGHT + i] = -TL_TAB[i]; + } + +#if YM_DEBUG_LEVEL > 2 + fprintf(debug_file, "TL_TAB[%d] = %.8X TL_TAB[%d] = %.8X\n", i, TL_TAB[i], TL_LENGHT + i, TL_TAB[TL_LENGHT + i]); +#endif + } + +#if YM_DEBUG_LEVEL > 2 + fprintf(debug_file, "\n\n\n\n"); +#endif + + // Tableau SIN : + // SIN_TAB[x][y] = sin(x) * y; + // x = phase and y = volume + + SIN_TAB[0] = SIN_TAB[SIN_LENGHT / 2] = &TL_TAB[(int)PG_CUT_OFF]; + + for(i = 1; i <= SIN_LENGHT / 4; i++) + { + x = sin(2.0 * PI * (double) (i) / (double) (SIN_LENGHT)); // Sinus + x = 20 * log10(1 / x); // convert to dB + + j = (int) (x / ENV_STEP); // Get TL range + + if (j > PG_CUT_OFF) j = (int) PG_CUT_OFF; + + SIN_TAB[i] = SIN_TAB[(SIN_LENGHT / 2) - i] = &TL_TAB[j]; + SIN_TAB[(SIN_LENGHT / 2) + i] = SIN_TAB[SIN_LENGHT - i] = &TL_TAB[TL_LENGHT + j]; + +#if YM_DEBUG_LEVEL > 2 + fprintf(debug_file, "SIN[%d][0] = %.8X SIN[%d][0] = %.8X SIN[%d][0] = %.8X SIN[%d][0] = %.8X\n", i, SIN_TAB[i][0], (SIN_LENGHT / 2) - i, SIN_TAB[(SIN_LENGHT / 2) - i][0], (SIN_LENGHT / 2) + i, SIN_TAB[(SIN_LENGHT / 2) + i][0], SIN_LENGHT - i, SIN_TAB[SIN_LENGHT - i][0]); +#endif + } + +#if YM_DEBUG_LEVEL > 2 + fprintf(debug_file, "\n\n\n\n"); +#endif + + // Tableau LFO (LFO wav) : + + for(i = 0; i < LFO_LENGHT; i++) + { + x = sin(2.0 * PI * (double) (i) / (double) (LFO_LENGHT)); // Sinus + x += 1.0; + x /= 2.0; // positive only + x *= 11.8 / ENV_STEP; // ajusted to MAX enveloppe modulation + + LFO_ENV_TAB[i] = (int) x; + + x = sin(2.0 * PI * (double) (i) / (double) (LFO_LENGHT)); // Sinus + x *= (double) ((1 << (LFO_HBITS - 1)) - 1); + + LFO_FREQ_TAB[i] = (int) x; + +#if YM_DEBUG_LEVEL > 2 + fprintf(debug_file, "LFO[%d] = %.8X\n", i, LFO_ENV_TAB[i]); +#endif + } + +#if YM_DEBUG_LEVEL > 2 + fprintf(debug_file, "\n\n\n\n"); +#endif + + // Tableau Enveloppe : + // ENV_TAB[0] -> ENV_TAB[ENV_LENGHT - 1] = attack curve + // ENV_TAB[ENV_LENGHT] -> ENV_TAB[2 * ENV_LENGHT - 1] = decay curve + + for(i = 0; i < ENV_LENGHT; i++) + { + // Attack curve (x^8 - music level 2 Vectorman 2) + x = pow(((double) ((ENV_LENGHT - 1) - i) / (double) (ENV_LENGHT)), 8); + x *= ENV_LENGHT; + + ENV_TAB[i] = (int) x; + + // Decay curve (just linear) + x = pow(((double) (i) / (double) (ENV_LENGHT)), 1); + x *= ENV_LENGHT; + + ENV_TAB[ENV_LENGHT + i] = (int) x; + +#if YM_DEBUG_LEVEL > 2 + fprintf(debug_file, "ATTACK[%d] = %d DECAY[%d] = %d\n", i, ENV_TAB[i], i, ENV_TAB[ENV_LENGHT + i]); +#endif + } + + ENV_TAB[ENV_END >> ENV_LBITS] = ENV_LENGHT - 1; // for the stopped state + + // Tableau pour la conversion Attack -> Decay and Decay -> Attack + + for(i = 0, j = ENV_LENGHT - 1; i < ENV_LENGHT; i++) + { + while (j && (ENV_TAB[j] < (unsigned) i)) j--; + + DECAY_TO_ATTACK[i] = j << ENV_LBITS; + } + + // Tableau pour le Substain Level + + for(i = 0; i < 15; i++) + { + x = i * 3; // 3 and not 6 (Mickey Mania first music for test) + x /= ENV_STEP; + + j = (int) x; + j <<= ENV_LBITS; + + SL_TAB[i] = j + ENV_DECAY; + } + + j = ENV_LENGHT - 1; // special case : volume off + j <<= ENV_LBITS; + SL_TAB[15] = j + ENV_DECAY; + + // Tableau Frequency Step + + for(i = 0; i < 2048; i++) + { + x = (double) (i) * YM2612.Frequence; + +#if ((SIN_LBITS + SIN_HBITS - (21 - 7)) < 0) + x /= (double) (1 << ((21 - 7) - SIN_LBITS - SIN_HBITS)); +#else + x *= (double) (1 << (SIN_LBITS + SIN_HBITS - (21 - 7))); +#endif + + x /= 2.0; // because MUL = value * 2 + + FINC_TAB[i] = (unsigned int) x; + } + + // Tableaux Attack & Decay Rate + + for(i = 0; i < 4; i++) + { + AR_TAB[i] = 0; + DR_TAB[i] = 0; + } + + for(i = 0; i < 60; i++) + { + x = YM2612.Frequence; + + x *= 1.0 + ((i & 3) * 0.25); // bits 0-1 : x1.00, x1.25, x1.50, x1.75 + x *= (double) (1 << ((i >> 2))); // bits 2-5 : shift bits (x2^0 - x2^15) + x *= (double) (ENV_LENGHT << ENV_LBITS); // on ajuste pour le tableau ENV_TAB + + AR_TAB[i + 4] = (unsigned int) (x / AR_RATE); + DR_TAB[i + 4] = (unsigned int) (x / DR_RATE); + } + + for(i = 64; i < 96; i++) + { + AR_TAB[i] = AR_TAB[63]; + DR_TAB[i] = DR_TAB[63]; + + NULL_RATE[i - 64] = 0; + } + + // Tableau Detune + + for(i = 0; i < 4; i++) + { + for (j = 0; j < 32; j++) + { +#if ((SIN_LBITS + SIN_HBITS - 21) < 0) + x = (double) DT_DEF_TAB[(i << 5) + j] * YM2612.Frequence / (double) (1 << (21 - SIN_LBITS - SIN_HBITS)); +#else + x = (double) DT_DEF_TAB[(i << 5) + j] * YM2612.Frequence * (double) (1 << (SIN_LBITS + SIN_HBITS - 21)); +#endif + + DT_TAB[i + 0][j] = (int) x; + DT_TAB[i + 4][j] = (int) -x; + } + } + + // Tableau LFO + + j = (YM2612.Rate * YM2612.Inter_Step) / 0x4000; + + LFO_INC_TAB[0] = (unsigned int) (3.98 * (double) (1 << (LFO_HBITS + LFO_LBITS)) / j); + LFO_INC_TAB[1] = (unsigned int) (5.56 * (double) (1 << (LFO_HBITS + LFO_LBITS)) / j); + LFO_INC_TAB[2] = (unsigned int) (6.02 * (double) (1 << (LFO_HBITS + LFO_LBITS)) / j); + LFO_INC_TAB[3] = (unsigned int) (6.37 * (double) (1 << (LFO_HBITS + LFO_LBITS)) / j); + LFO_INC_TAB[4] = (unsigned int) (6.88 * (double) (1 << (LFO_HBITS + LFO_LBITS)) / j); + LFO_INC_TAB[5] = (unsigned int) (9.63 * (double) (1 << (LFO_HBITS + LFO_LBITS)) / j); + LFO_INC_TAB[6] = (unsigned int) (48.1 * (double) (1 << (LFO_HBITS + LFO_LBITS)) / j); + LFO_INC_TAB[7] = (unsigned int) (72.2 * (double) (1 << (LFO_HBITS + LFO_LBITS)) / j); + + YM2612_Reset(); + + return 0; +} + + +int YM2612_End(void) +{ + +#if YM_DEBUG_LEVEL > 0 + if (debug_file) fclose(debug_file); + debug_file = NULL; +#endif + + return 0; +} + + +int YM2612_Reset(void) +{ + int i, j; + +#if YM_DEBUG_LEVEL > 0 + fprintf(debug_file, "\n\nStarting reseting YM2612 ...\n\n"); +#endif + + YM2612.LFOcnt = 0; + YM2612.TimerA = 0; + YM2612.TimerAL = 0; + YM2612.TimerAcnt = 0; + YM2612.TimerB = 0; + YM2612.TimerBL = 0; + YM2612.TimerBcnt = 0; + YM2612.DAC = 0; + YM2612.DACdata = 0; + dac_highpass = 0; + + YM2612.Status = 0; + + YM2612.OPNAadr = 0; + YM2612.OPNBadr = 0; + YM2612.Inter_Cnt = 0; + + for(i = 0; i < 6; i++) + { + YM2612.CHANNEL[i].Old_OUTd = 0; + YM2612.CHANNEL[i].OUTd = 0; + YM2612.CHANNEL[i].LEFT = 0xFFFFFFFF; + YM2612.CHANNEL[i].RIGHT = 0xFFFFFFFF; + YM2612.CHANNEL[i].ALGO = 0;; + YM2612.CHANNEL[i].FB = 31; + YM2612.CHANNEL[i].FMS = 0; + YM2612.CHANNEL[i].AMS = 0; + + for(j = 0 ;j < 4 ; j++) + { + YM2612.CHANNEL[i].S0_OUT[j] = 0; + YM2612.CHANNEL[i].FNUM[j] = 0; + YM2612.CHANNEL[i].FOCT[j] = 0; + YM2612.CHANNEL[i].KC[j] = 0; + + YM2612.CHANNEL[i].SLOT[j].Fcnt = 0; + YM2612.CHANNEL[i].SLOT[j].Finc = 0; + YM2612.CHANNEL[i].SLOT[j].Ecnt = ENV_END; // Put it at the end of Decay phase... + YM2612.CHANNEL[i].SLOT[j].Einc = 0; + YM2612.CHANNEL[i].SLOT[j].Ecmp = 0; + YM2612.CHANNEL[i].SLOT[j].Ecurp = RELEASE; + + YM2612.CHANNEL[i].SLOT[j].ChgEnM = 0; + } + } + + for(i = 0; i < 0x100; i++) + { + YM2612.REG[0][i] = -1; + YM2612.REG[1][i] = -1; + } + + for(i = 0xB6; i >= 0xB4; i--) + { + YM2612_Write(0, (unsigned char) i); + YM2612_Write(2, (unsigned char) i); + YM2612_Write(1, 0xC0); + YM2612_Write(3, 0xC0); + } + + for(i = 0xB2; i >= 0x22; i--) + { + YM2612_Write(0, (unsigned char) i); + YM2612_Write(2, (unsigned char) i); + YM2612_Write(1, 0); + YM2612_Write(3, 0); + } + + YM2612_Write(0, 0x2A); + YM2612_Write(1, 0x80); + +#if YM_DEBUG_LEVEL > 0 + fprintf(debug_file, "\n\nFinishing reseting YM2612 ...\n\n"); +#endif + + return 0; +} + + +int YM2612_Read(void) +{ +/* static int cnt = 0; + + if (cnt++ == 50) + { + cnt = 0; + return YM2612.Status; + } + else return YM2612.Status | 0x80; +*/ + return YM2612.Status; +} + +extern uint8 dacshift; + +int YM2612_Write(unsigned char adr, unsigned char data) +{ + int d; + + data &= 0xFF; + adr &= 0x3; + + switch(adr) + { + case 0: + YM2612.OPNAadr = data; + break; + + case 1: + // Trivial optimisation + + if (YM2612.OPNAadr == 0x2A) + { + YM2612.DACdata = ((int) data - 0x80) << 7; + return 0; + } + + d = YM2612.OPNAadr & 0xF0; + + if (d >= 0x30) + { + if (YM2612.REG[0][YM2612.OPNAadr] == data) return 2; + YM2612.REG[0][YM2612.OPNAadr] = data; + + if (d < 0xA0) // SLOT + { + SLOT_SET(YM2612.OPNAadr, data); + } + else // CHANNEL + { + CHANNEL_SET(YM2612.OPNAadr, data); + } + } + else // YM2612 + { + YM2612.REG[0][YM2612.OPNAadr] = data; + YM_SET(YM2612.OPNAadr, data); + } + break; + + case 2: + YM2612.OPNBadr = data; + break; + + case 3: + d = YM2612.OPNBadr & 0xF0; + + if (d >= 0x30) + { + if (YM2612.REG[1][YM2612.OPNBadr] == data) return 2; + YM2612.REG[1][YM2612.OPNBadr] = data; + + if (d < 0xA0) // SLOT + { + SLOT_SET(YM2612.OPNBadr + 0x100, data); + } + else // CHANNEL + { + CHANNEL_SET(YM2612.OPNBadr + 0x100, data); + } + } + else return 1; + break; + } + + return 0; +} + + +void YM2612_Update(int **buf, int length) +{ + int i, j, algo_type; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nStarting generating sound...\n\n"); +#endif + + // Mise à jour des pas des compteurs-fréquences s'ils ont été modifiés + + if (YM2612.CHANNEL[0].SLOT[0].Finc == -1) CALC_FINC_CH(&YM2612.CHANNEL[0]); + if (YM2612.CHANNEL[1].SLOT[0].Finc == -1) CALC_FINC_CH(&YM2612.CHANNEL[1]); + if (YM2612.CHANNEL[2].SLOT[0].Finc == -1) + { + if (YM2612.Mode & 0x40) + { + CALC_FINC_SL(&(YM2612.CHANNEL[2].SLOT[S0]), FINC_TAB[YM2612.CHANNEL[2].FNUM[2]] >> (7 - YM2612.CHANNEL[2].FOCT[2]), YM2612.CHANNEL[2].KC[2]); + CALC_FINC_SL(&(YM2612.CHANNEL[2].SLOT[S1]), FINC_TAB[YM2612.CHANNEL[2].FNUM[3]] >> (7 - YM2612.CHANNEL[2].FOCT[3]), YM2612.CHANNEL[2].KC[3]); + CALC_FINC_SL(&(YM2612.CHANNEL[2].SLOT[S2]), FINC_TAB[YM2612.CHANNEL[2].FNUM[1]] >> (7 - YM2612.CHANNEL[2].FOCT[1]), YM2612.CHANNEL[2].KC[1]); + CALC_FINC_SL(&(YM2612.CHANNEL[2].SLOT[S3]), FINC_TAB[YM2612.CHANNEL[2].FNUM[0]] >> (7 - YM2612.CHANNEL[2].FOCT[0]), YM2612.CHANNEL[2].KC[0]); + } + else + { + CALC_FINC_CH(&YM2612.CHANNEL[2]); + } + } + if (YM2612.CHANNEL[3].SLOT[0].Finc == -1) CALC_FINC_CH(&YM2612.CHANNEL[3]); + if (YM2612.CHANNEL[4].SLOT[0].Finc == -1) CALC_FINC_CH(&YM2612.CHANNEL[4]); + if (YM2612.CHANNEL[5].SLOT[0].Finc == -1) CALC_FINC_CH(&YM2612.CHANNEL[5]); + +/* + CALC_FINC_CH(&YM2612.CHANNEL[0]); + CALC_FINC_CH(&YM2612.CHANNEL[1]); + if (YM2612.Mode & 0x40) + { + CALC_FINC_SL(&(YM2612.CHANNEL[2].SLOT[0]), FINC_TAB[YM2612.CHANNEL[2].FNUM[2]] >> (7 - YM2612.CHANNEL[2].FOCT[2]), YM2612.CHANNEL[2].KC[2]); + CALC_FINC_SL(&(YM2612.CHANNEL[2].SLOT[1]), FINC_TAB[YM2612.CHANNEL[2].FNUM[3]] >> (7 - YM2612.CHANNEL[2].FOCT[3]), YM2612.CHANNEL[2].KC[3]); + CALC_FINC_SL(&(YM2612.CHANNEL[2].SLOT[2]), FINC_TAB[YM2612.CHANNEL[2].FNUM[1]] >> (7 - YM2612.CHANNEL[2].FOCT[1]), YM2612.CHANNEL[2].KC[1]); + CALC_FINC_SL(&(YM2612.CHANNEL[2].SLOT[3]), FINC_TAB[YM2612.CHANNEL[2].FNUM[0]] >> (7 - YM2612.CHANNEL[2].FOCT[0]), YM2612.CHANNEL[2].KC[0]); + } + else + { + CALC_FINC_CH(&YM2612.CHANNEL[2]); + } + CALC_FINC_CH(&YM2612.CHANNEL[3]); + CALC_FINC_CH(&YM2612.CHANNEL[4]); + CALC_FINC_CH(&YM2612.CHANNEL[5]); +*/ + + if (YM2612.Inter_Step & 0x04000) algo_type = 0; + else algo_type = 16; + + if (YM2612.LFOinc) + { + // Precalcul LFO wav + + for(i = 0; i < length; i++) + { + j = ((YM2612.LFOcnt += YM2612.LFOinc) >> LFO_LBITS) & LFO_MASK; + + LFO_ENV_UP[i] = LFO_ENV_TAB[j]; + LFO_FREQ_UP[i] = LFO_FREQ_TAB[j]; + +#if YM_DEBUG_LEVEL > 3 + fprintf(debug_file, "LFO_ENV_UP[%d] = %d LFO_FREQ_UP[%d] = %d\n", i, LFO_ENV_UP[i], i, LFO_FREQ_UP[i]); +#endif + } + + algo_type |= 8; + } + + UPDATE_CHAN[YM2612.CHANNEL[0].ALGO + algo_type](&(YM2612.CHANNEL[0]), buf, length); + UPDATE_CHAN[YM2612.CHANNEL[1].ALGO + algo_type](&(YM2612.CHANNEL[1]), buf, length); + UPDATE_CHAN[YM2612.CHANNEL[2].ALGO + algo_type](&(YM2612.CHANNEL[2]), buf, length); + UPDATE_CHAN[YM2612.CHANNEL[3].ALGO + algo_type](&(YM2612.CHANNEL[3]), buf, length); + UPDATE_CHAN[YM2612.CHANNEL[4].ALGO + algo_type](&(YM2612.CHANNEL[4]), buf, length); + if (!(YM2612.DAC)) UPDATE_CHAN[YM2612.CHANNEL[5].ALGO + algo_type](&(YM2612.CHANNEL[5]), buf, length); + else + { + for(i = 0; i < length; i++) + { + long dac = (YM2612.DACdata << 15) - dac_highpass; + dac_highpass += dac >> 9; + dac >>= 15; + buf[0][i] += dac & YM2612.CHANNEL[5].LEFT; + buf[1][i] += dac & YM2612.CHANNEL[5].RIGHT; + } + } + + YM2612.Inter_Cnt = int_cnt; + +#if YM_DEBUG_LEVEL > 1 + fprintf(debug_file, "\n\nFinishing generating sound...\n\n"); +#endif + +} + +void YM2612_Special_Update(void) +{} + +void YM2612TimerAOver() +{ + if (YM2612.Mode & 0x80) CSM_Key_Control(); +} + + diff --git a/ genplus-gx/source/sound/ym2612.h b/ genplus-gx/source/sound/ym2612.h new file mode 100644 index 0000000..ecf9d8d --- /dev/null +++ b/ genplus-gx/source/sound/ym2612.h @@ -0,0 +1,171 @@ +#ifndef _YM2612_H_ +#define _YM2612_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +// Change it if you need to do long update +#define MAX_UPDATE_LENGHT 2000 + +// Gens always uses 16 bits sound (in 32 bits buffer) and do the convertion later if needed. +#define OUTPUT_BITS 16 + +typedef struct slot__ { + int *DT; // paramètre detune + int MUL; // paramètre "multiple de fréquence" + int TL; // Total Level = volume lorsque l'enveloppe est au plus haut + int TLL; // Total Level ajusted + int SLL; // Sustin Level (ajusted) = volume où l'enveloppe termine sa première phase de régression + int KSR_S; // Key Scale Rate Shift = facteur de prise en compte du KSL dans la variations de l'enveloppe + int KSR; // Key Scale Rate = cette valeur est calculée par rapport à la fréquence actuelle, elle va influer + // sur les différents paramètres de l'enveloppe comme l'attaque, le decay ... comme dans la réalité ! + int SEG; // Type enveloppe SSG + int *AR; // Attack Rate (table pointeur) = Taux d'attaque (AR[KSR]) + int *DR; // Decay Rate (table pointeur) = Taux pour la régression (DR[KSR]) + int *SR; // Sustin Rate (table pointeur) = Taux pour le maintien (SR[KSR]) + int *RR; // Release Rate (table pointeur) = Taux pour le relâchement (RR[KSR]) + int Fcnt; // Frequency Count = compteur-fréquence pour déterminer l'amplitude actuelle (SIN[Finc >> 16]) + int Finc; // frequency step = pas d'incrémentation du compteur-fréquence + // plus le pas est grand, plus la fréquence est aïgu (ou haute) + int Ecurp; // Envelope current phase = cette variable permet de savoir dans quelle phase + // de l'enveloppe on se trouve, par exemple phase d'attaque ou phase de maintenue ... + // en fonction de la valeur de cette variable, on va appeler une fonction permettant + // de mettre à jour l'enveloppe courante. + int Ecnt; // Envelope counter = le compteur-enveloppe permet de savoir où l'on se trouve dans l'enveloppe + int Einc; // Envelope step courant + int Ecmp; // Envelope counter limite pour la prochaine phase + int EincA; // Envelope step for Attack = pas d'incrémentation du compteur durant la phase d'attaque + // cette valeur est égal à AR[KSR] + int EincD; // Envelope step for Decay = pas d'incrémentation du compteur durant la phase de regression + // cette valeur est égal à DR[KSR] + int EincS; // Envelope step for Sustain = pas d'incrémentation du compteur durant la phase de maintenue + // cette valeur est égal à SR[KSR] + int EincR; // Envelope step for Release = pas d'incrémentation du compteur durant la phase de relâchement + // cette valeur est égal à RR[KSR] + int *OUTp; // pointeur of SLOT output = pointeur permettant de connecter la sortie de ce slot à l'entrée + // d'un autre ou carrement à la sortie de la voie + int INd; // input data of the slot = données en entrée du slot + int ChgEnM; // Change envelop mask. + int AMS; // AMS depth level of this SLOT = degré de modulation de l'amplitude par le LFO + int AMSon; // AMS enable flag = drapeau d'activation de l'AMS +} slot_; + +typedef struct channel__ { + int S0_OUT[4]; // anciennes sorties slot 0 (pour le feed back) + int Old_OUTd; // ancienne sortie de la voie (son brut) + int OUTd; // sortie de la voie (son brut) + int LEFT; // LEFT enable flag + int RIGHT; // RIGHT enable flag + int ALGO; // Algorythm = détermine les connections entre les opérateurs + int FB; // shift count of self feed back = degré de "Feed-Back" du SLOT 1 (il est son unique entrée) + int FMS; // Fréquency Modulation Sensitivity of channel = degré de modulation de la fréquence sur la voie par le LFO + int AMS; // Amplitude Modulation Sensitivity of channel = degré de modulation de l'amplitude sur la voie par le LFO + int FNUM[4]; // hauteur fréquence de la voie (+ 3 pour le mode spécial) + int FOCT[4]; // octave de la voie (+ 3 pour le mode spécial) + int KC[4]; // Key Code = valeur fonction de la fréquence (voir KSR pour les slots, KSR = KC >> KSR_S) + struct slot__ SLOT[4]; // four slot.operators = les 4 slots de la voie + int FFlag; // Frequency step recalculation flag +} channel_; + +typedef struct ym2612__ { + int Clock; // Horloge YM2612 + int Rate; // Sample Rate (11025/22050/44100) + int TimerBase; // TimerBase calculation + int Status; // YM2612 Status (timer overflow) + int OPNAadr; // addresse pour l'écriture dans l'OPN A (propre à l'émulateur) + int OPNBadr; // addresse pour l'écriture dans l'OPN B (propre à l'émulateur) + int LFOcnt; // LFO counter = compteur-fréquence pour le LFO + int LFOinc; // LFO step counter = pas d'incrémentation du compteur-fréquence du LFO + // plus le pas est grand, plus la fréquence est grande + int TimerA; // timerA limit = valeur jusqu'à laquelle le timer A doit compter + int TimerAL; + int TimerAcnt; // timerA counter = valeur courante du Timer A + int TimerB; // timerB limit = valeur jusqu'à laquelle le timer B doit compter + int TimerBL; + int TimerBcnt; // timerB counter = valeur courante du Timer B + int Mode; // Mode actuel des voie 3 et 6 (normal / spécial) + int DAC; // DAC enabled flag + int DACdata; // DAC data + double Frequence; // Fréquence de base, se calcul par rapport à l'horlage et au sample rate + unsigned int Inter_Cnt; // Interpolation Counter + unsigned int Inter_Step; // Interpolation Step + struct channel__ CHANNEL[6]; // Les 6 voies du YM2612 + int REG[2][0x100]; // Sauvegardes des valeurs de tout les registres, c'est facultatif + // cela nous rend le débuggage plus facile +} ym2612_; + +/* Gens */ + +extern int YM2612_Enable; +extern int YM2612_Improv; +extern int DAC_Enable; +extern int *YM_Buf[2]; +extern int YM_Len; + +/* end */ + +int YM2612_Init(int clock, int rate, int interpolation); +int YM2612_End(void); +int YM2612_Reset(void); +int YM2612_Read(void); +int YM2612_Write(unsigned char adr, unsigned char data); +void YM2612_Update(int **buf, int length); +int YM2612_Save(unsigned char SAVE[0x200]); +int YM2612_Restore(unsigned char SAVE[0x200]); + + +void YM2612_Special_Update(void); +void YM2612TimerAOver(void); + +/* end */ + +// used for foward... +void Update_Chan_Algo0(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo1(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo2(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo3(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo4(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo5(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo6(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo7(channel_ *CH, int **buf, int lenght); + +void Update_Chan_Algo0_LFO(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo1_LFO(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo2_LFO(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo3_LFO(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo4_LFO(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo5_LFO(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo6_LFO(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo7_LFO(channel_ *CH, int **buf, int lenght); + +void Update_Chan_Algo0_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo1_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo2_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo3_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo4_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo5_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo6_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo7_Int(channel_ *CH, int **buf, int lenght); + +void Update_Chan_Algo0_LFO_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo1_LFO_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo2_LFO_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo3_LFO_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo4_LFO_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo5_LFO_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo6_LFO_Int(channel_ *CH, int **buf, int lenght); +void Update_Chan_Algo7_LFO_Int(channel_ *CH, int **buf, int lenght); + +// used for foward... +void Env_Attack_Next(slot_ *SL); +void Env_Decay_Next(slot_ *SL); +void Env_Substain_Next(slot_ *SL); +void Env_Release_Next(slot_ *SL); +void Env_NULL_Next(slot_ *SL); + +#ifdef __cplusplus +}; +#endif + +#endif diff --git a/ genplus-gx/source/sram.c b/ genplus-gx/source/sram.c new file mode 100644 index 0000000..e9e2f78 --- /dev/null +++ b/ genplus-gx/source/sram.c @@ -0,0 +1,77 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * SRAM MANAGER + ***************************************************************************/ + +#include "shared.h" + +T_SRAM sram; + +/**************************************************************************** + * A quick guide to SRAM on the Genesis + * + * This is based on observations only - it may be completely wrong! + * + * The SRAM definition is held at offset 0x1b0 of the ROM header. + * From looking at several ROMS, an ID appears: + * + * 0x1b0 : 0x52 0x41 0xF8 0x20 0x00200001 0x0020ffff + * + * Assuming 64k SRAM / Battery RAM throughout + ****************************************************************************/ +void SRAM_Init () +{ + memset (&sram, 0, sizeof (T_SRAM)); + sram.crc = crc32 (0, &sram.sram[0], 0x10000); + + if ((cart_rom[0x1b0] == 0x52) && (cart_rom[0x1b1] == 0x41)) + { + sram.on = 1; + sram.write = 1; + sram.detected = 1; + sram.start = READ_WORD_LONG(cart_rom, 0x1b4); + sram.end = READ_WORD_LONG(cart_rom, 0x1b8); + + /* some games have incorrect header informations */ + if ((sram.start > sram.end) || ((sram.end - sram.start) >= 0x10000)) + sram.end = sram.start + 0xffff; + sram.start &= 0xfffffffe; + sram.end |= 1; + + /* game using serial EEPROM as external RAM */ + if (sram.end - sram.start < 2) EEPROM_Init(); + } + else + { + /* set SRAM memory region by default */ + sram.start = 0x200000; + sram.end = 0x20ffff; + + /* set SRAM ON by default if game is smaller than 2M */ + if (genromsize <= 0x200000) + { + sram.on = 1; + sram.write = 1; + } + + /* some games using EEPROM don't have the correct header */ + EEPROM_Init(); + } +} diff --git a/ genplus-gx/source/sram.h b/ genplus-gx/source/sram.h new file mode 100644 index 0000000..b554f11 --- /dev/null +++ b/ genplus-gx/source/sram.h @@ -0,0 +1,40 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * NGC MANAGER + ***************************************************************************/ + +typedef struct +{ + uint8 detected; + uint8 on; + uint8 write; + uint8 custom; + uint32 start; + uint32 end; + int crc; + uint8 sram[0x10000]; +} T_SRAM; + +/* Function prototypes */ +extern void SRAM_Init (); + +/* global variables */ +extern T_SRAM sram; + diff --git a/ genplus-gx/source/ssf2tnc.c b/ genplus-gx/source/ssf2tnc.c new file mode 100644 index 0000000..896815d --- /dev/null +++ b/ genplus-gx/source/ssf2tnc.c @@ -0,0 +1,98 @@ +/**************************************************************************** + * Super Street Fighter 2 - The New Challengers + * + * This is the ROM mapper for this game. + * Called from mem68k.c + ***************************************************************************/ +#include "shared.h" + +#ifdef NGC +char *shadow_rom = (char *) 0x8000; +#else +char shadow_rom[0x500000]; +#endif + +int SSF2TNC = 0; +static int oldaddr = 0; +static uint8 olddata = 0; + +void ssf2bankrom (int address, unsigned char data) +{ + /* Banking performed on odd addresses only */ + if (!(address & 1)) return; + + /* + * Whilst debugging the ARAM stuff, I noticed that this ROM + * requested the same address/data on subsequent calls. + * This is just a little speedup, which seems to make the + * sound etc in the intro much less choppy. + * + * Happy dance anyone? + */ + if ((oldaddr == address) && (olddata == data)) return; + + if ((address > 0xa130f2) && (address < 0xa13100)) + { + switch (address & 0xf) + { + case 0x3: /* 080000-0FFFFF */ +#ifdef NGC + ARAMFetch (cart_rom + 0x080000, shadow_rom + (data * 0x80000), 0x80000); +#else + memcpy (cart_rom + 0x080000, shadow_rom + (data * 0x80000), 0x80000); +#endif + break; + + case 0x5: /* 100000 - 17FFFF */ +#ifdef NGC + ARAMFetch (cart_rom + 0x100000, shadow_rom + (data * 0x80000), 0x80000); +#else + memcpy (cart_rom + 0x100000, shadow_rom + (data * 0x80000), 0x80000); +#endif + break; + + case 0x7: /* 180000 - 1FFFFF */ +#ifdef NGC + ARAMFetch (cart_rom + 0x180000, shadow_rom + ( data * 0x80000), 0x80000); +#else + memcpy (cart_rom + 0x180000, shadow_rom + ( data * 0x80000), 0x80000); +#endif + break; + + case 0x9: /* 200000 - 27FFFF */ +#ifdef NGC + ARAMFetch (cart_rom + 0x200000, shadow_rom + ( data * 0x80000), 0x80000); +#else + memcpy (cart_rom + 0x200000, shadow_rom + ( data * 0x80000), 0x80000); +#endif + break; + + case 0xb: /* 280000 - 2FFFFF */ +#ifdef NGC + ARAMFetch (cart_rom + 0x280000, shadow_rom + ( data * 0x80000), 0x80000); +#else + memcpy (cart_rom + 0x280000, shadow_rom + ( data * 0x80000), 0x80000); +#endif + break; + + case 0xd: /* 300000 - 37FFFF */ +#ifdef NGC + ARAMFetch (cart_rom + 0x300000, shadow_rom + ( data * 0x80000), 0x80000); +#else + memcpy (cart_rom + 0x300000, shadow_rom + ( data * 0x80000), 0x80000); +#endif + break; + + case 0xf: /* 380000 - 3FFFFF */ +#ifdef NGC + ARAMFetch (cart_rom + 0x380000, shadow_rom + ( data * 0x80000), 0x80000); +#else + memcpy (cart_rom + 0x380000, shadow_rom + ( data * 0x80000), 0x80000); +#endif + break; + } + } + + oldaddr = address; + olddata = data; +} diff --git a/ genplus-gx/source/ssf2tnc.h b/ genplus-gx/source/ssf2tnc.h new file mode 100644 index 0000000..22a756b --- /dev/null +++ b/ genplus-gx/source/ssf2tnc.h @@ -0,0 +1,17 @@ +/**************************************************************************** + * Super Street Fighter 2 - The New Challengers + * + * This is the ROM mapper for this game. + * Called from mem68k.c + ***************************************************************************/ + +/* Function prototypes */ +extern void ssf2bankrom (int address, unsigned char data); + +/* global variables */ +extern int SSF2TNC; +#ifdef NGC +extern char *shadow_rom; +#else +extern char shadow_rom[0x500000]; +#endif diff --git a/ genplus-gx/source/state.c b/ genplus-gx/source/state.c new file mode 100644 index 0000000..4eed415 --- /dev/null +++ b/ genplus-gx/source/state.c @@ -0,0 +1,358 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * STATE MANAGER + ***************************************************************************/ +#include "shared.h" + +unsigned char state[0x23000]; +unsigned int bufferptr; + +void load_param(void *param, unsigned int size) +{ + memcpy(param, &state[bufferptr], size); + bufferptr+= size; +} + +void save_param(void *param, unsigned int size) +{ + memcpy(&state[bufferptr], param, size); + bufferptr+= size; +} + +void state_load(unsigned char *buffer) +{ + uint32 tmp32; + uint16 tmp16; + int i; + int height, width; + unsigned long inbytes, outbytes; + + /* get compressed state size & uncompress state file */ + memcpy(&inbytes,&buffer[0],sizeof(inbytes)); + +#ifdef NGC + outbytes = 0x23000; + uncompress ((char *) &state[0], &outbytes, (char *) &buffer[sizeof(inbytes)], inbytes); +#else + outbytes = inbytes; + memcpy(&state[0], &buffer[sizeof(inbytes)], outbytes); +#endif + + /* load state */ + system_reset(); + bufferptr = 0; + + // gen.c stuff + load_param(work_ram, sizeof(work_ram)); + load_param(zram, sizeof(zram)); + load_param(&zbusreq, sizeof(zbusreq)); + load_param(&zreset, sizeof(zreset)); + load_param(&zbusack, sizeof(zbusack)); + load_param(&zirq, sizeof(zirq)); + load_param(&zbank, sizeof(zbank)); + load_param(&lastbusreqcnt, sizeof(lastbusreqcnt)); + load_param(&lastbusack, sizeof(lastbusack)); + + // io.c stuff + load_param(io_reg, sizeof(io_reg)); + + // render.c stuff + load_param(&object_index_count,sizeof(object_index_count)); + + // vdp.c stuff + load_param(sat, sizeof(sat)); + load_param(vram, sizeof(vram)); + load_param(cram, sizeof(cram)); + load_param(vsram, sizeof(vsram)); + load_param(reg, sizeof(reg)); + load_param(&addr, sizeof(addr)); + load_param(&addr_latch, sizeof(addr_latch)); + load_param(&code, sizeof(code)); + load_param(&pending, sizeof(pending)); + load_param(&status, sizeof(status)); + load_param(&ntab, sizeof(ntab)); + load_param(&ntbb, sizeof(ntbb)); + load_param(&ntwb, sizeof(ntwb)); + load_param(&satb, sizeof(satb)); + load_param(&hscb, sizeof(hscb)); + load_param(&sat_base_mask, sizeof(sat_base_mask)); + load_param(&sat_addr_mask, sizeof(sat_addr_mask)); + load_param(&border, sizeof(border)); + load_param(&playfield_shift, sizeof(playfield_shift)); + load_param(&playfield_col_mask, sizeof(playfield_col_mask)); + load_param(&playfield_row_mask, sizeof(playfield_row_mask)); + load_param(&y_mask, sizeof(y_mask)); + load_param(&hint_pending, sizeof(hint_pending)); + load_param(&vint_pending, sizeof(vint_pending)); + load_param(&h_counter, sizeof(h_counter)); + load_param(&hc_latch, sizeof(hc_latch)); + load_param(&v_counter, sizeof(v_counter)); + load_param(&dmafill, sizeof(dmafill)); + load_param(&im2_flag, sizeof(im2_flag)); + load_param(&frame_end, sizeof(frame_end)); + load_param(&dma_endCycles, sizeof(dma_endCycles)); + + // system.c stuff + load_param(&aim_m68k,sizeof(aim_m68k)); + load_param(&count_m68k,sizeof(count_m68k)); + load_param(&dma_m68k,sizeof(dma_m68k)); + load_param(&aim_z80,sizeof(aim_z80)); + load_param(&count_z80,sizeof(count_z80)); + + // FM stuff + load_param(fm_reg,sizeof(fm_reg)); + load_param(&fm_status,sizeof(fm_status)); + load_param(timer,sizeof(timer)); + fm_restore(); + + // psg stuff + load_param(&PSG_MAME,1); + if (PSG_MAME) + { + struct SN76496 *R = &sn[0]; + load_param(R->Register,27*4); + } + else load_param(SN76489_GetContextPtr (0),SN76489_GetContextSize ()); + + // Window size + load_param(&height, sizeof(int)); + load_param(&width, sizeof(int)); + if (height != bitmap.viewport.h) + { + bitmap.viewport.oh = bitmap.viewport.h; + bitmap.viewport.h = height; + bitmap.viewport.changed = 1; + } + if (width != bitmap.viewport.w) + { + bitmap.viewport.ow = bitmap.viewport.w; + bitmap.viewport.w = width; + bitmap.viewport.changed = 1; + } + + // 68000 CPU + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D0, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D1, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D2, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D3, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D4, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D5, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D6, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_D7, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A0, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A1, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A2, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A3, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A4, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A5, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A6, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_A7, tmp32); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_PC, tmp32); + load_param(&tmp16, 2); m68k_set_reg(M68K_REG_SR, tmp16); + load_param(&tmp32, 4); m68k_set_reg(M68K_REG_USP,tmp32); + + // MAME Z80 CPU + load_param(&tmp32, 4); z80_set_reg(Z80_PC, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_SP, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_AF, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_BC, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_DE, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_HL, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_IX, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_IY, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_R, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_I, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_AF2, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_BC2, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_DE2, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_HL2, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_IM, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_IFF1,tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_IFF2,tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_HALT,tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_NMI_STATE,tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_IRQ_STATE,tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_DC0, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_DC1, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_DC2, tmp32); + load_param(&tmp32, 4); z80_set_reg(Z80_DC3, tmp32); + + // Remake cache + for (i=0;i<0x800;i++) + { + bg_name_list[i]=i; + bg_name_dirty[i]=0xFF; + } + bg_list_index=0x800; + color_update = color_update_16; + for(i = 0; i < 0x40; i += 1) color_update(i, *(uint16 *)&cram[i << 1]); + color_update(0x00, *(uint16 *)&cram[border << 1]); + color_update (0x40, *(uint16 *)&cram[border << 1]); + color_update (0x80, *(uint16 *)&cram[border << 1]); +} + +int state_save(unsigned char *buffer) +{ + uint32 tmp32; + uint16 tmp16; + unsigned long inbytes, outbytes; + + /* save state */ + bufferptr = 0; + + // gen.c stuff + save_param(work_ram, sizeof(work_ram)); + save_param(zram, sizeof(zram)); + save_param(&zbusreq, sizeof(zbusreq)); + save_param(&zreset, sizeof(zreset)); + save_param(&zbusack, sizeof(zbusack)); + save_param(&zirq, sizeof(zirq)); + save_param(&zbank, sizeof(zbank)); + save_param(&lastbusreqcnt, sizeof(lastbusreqcnt)); + save_param(&lastbusack, sizeof(lastbusack)); + + // io.c stuff + save_param(io_reg, sizeof(io_reg)); + + // render.c stuff + save_param(&object_index_count,sizeof(object_index_count)); + + // vdp.c stuff + save_param(sat, sizeof(sat)); + save_param(vram, sizeof(vram)); + save_param(cram, sizeof(cram)); + save_param(vsram, sizeof(vsram)); + save_param(reg, sizeof(reg)); + save_param(&addr, sizeof(addr)); + save_param(&addr_latch, sizeof(addr_latch)); + save_param(&code, sizeof(code)); + save_param(&pending, sizeof(pending)); + save_param(&status, sizeof(status)); + save_param(&ntab, sizeof(ntab)); + save_param(&ntbb, sizeof(ntbb)); + save_param(&ntwb, sizeof(ntwb)); + save_param(&satb, sizeof(satb)); + save_param(&hscb, sizeof(hscb)); + save_param(&sat_base_mask, sizeof(sat_base_mask)); + save_param(&sat_addr_mask, sizeof(sat_addr_mask)); + save_param(&border, sizeof(border)); + save_param(&playfield_shift, sizeof(playfield_shift)); + save_param(&playfield_col_mask, sizeof(playfield_col_mask)); + save_param(&playfield_row_mask, sizeof(playfield_row_mask)); + save_param(&y_mask, sizeof(y_mask)); + save_param(&hint_pending, sizeof(hint_pending)); + save_param(&vint_pending, sizeof(vint_pending)); + save_param(&h_counter, sizeof(h_counter)); + save_param(&hc_latch, sizeof(hc_latch)); + save_param(&v_counter, sizeof(v_counter)); + save_param(&dmafill, sizeof(dmafill)); + save_param(&im2_flag, sizeof(im2_flag)); + save_param(&frame_end, sizeof(frame_end)); + save_param(&dma_endCycles, sizeof(dma_endCycles)); + + // system.c stuff + save_param(&aim_m68k,sizeof(aim_m68k)); + save_param(&count_m68k,sizeof(count_m68k)); + save_param(&dma_m68k,sizeof(dma_m68k)); + save_param(&aim_z80,sizeof(aim_z80)); + save_param(&count_z80,sizeof(count_z80)); + + // FM stuff + save_param(fm_reg,sizeof(fm_reg)); + save_param(&fm_status,sizeof(fm_status)); + save_param(timer,sizeof(timer)); + + // PSG stuff + save_param(&PSG_MAME,1); + if (PSG_MAME) + { + struct SN76496 *R = &sn[0]; + save_param(R->Register,27*4); + } + else save_param(SN76489_GetContextPtr (0),SN76489_GetContextSize ()); + + // Window size + save_param(&bitmap.viewport.h, sizeof(int)); + save_param(&bitmap.viewport.w, sizeof(int)); + + // 68000 CPU + tmp32 = m68k_get_reg(NULL, M68K_REG_D0); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_D1); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_D2); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_D3); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_D4); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_D5); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_D6); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_D7); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_A0); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_A1); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_A2); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_A3); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_A4); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_A5); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_A6); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_A7); save_param(&tmp32, 4); + tmp32 = m68k_get_reg(NULL, M68K_REG_PC); save_param(&tmp32, 4); + tmp16 = m68k_get_reg(NULL, M68K_REG_SR); save_param(&tmp16, 2); + tmp32 = m68k_get_reg(NULL, M68K_REG_USP); save_param(&tmp32, 4); + + // Z80 CPU + tmp32 = z80_get_reg(Z80_PC); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_SP); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_AF); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_BC); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_DE); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_HL); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_IX); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_IY); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_R); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_I); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_AF2); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_BC2); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_DE2); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_HL2); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_IM); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_IFF1); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_IFF2); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_HALT); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_NMI_STATE); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_IRQ_STATE); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_DC0); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_DC1); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_DC2); save_param(&tmp32, 4); + tmp32 = z80_get_reg(Z80_DC3); save_param(&tmp32, 4); + + inbytes = bufferptr; + +#ifdef NGC + /* compress state file */ + outbytes = 0x24000; + compress2 ((char *) &buffer[sizeof(outbytes)], &outbytes, (char *) &state[0], inbytes, 9); +#else + outbytes = inbytes; + memcpy(&buffer[sizeof(outbytes)], &state[0], outbytes); +#endif + + /* write compressed size in the first 32 bits for decompression */ + memcpy(&buffer[0], &outbytes, sizeof(outbytes)); + + /* return total size */ + return (sizeof(outbytes) + outbytes); +} diff --git a/ genplus-gx/source/state.h b/ genplus-gx/source/state.h new file mode 100644 index 0000000..c3bad4d --- /dev/null +++ b/ genplus-gx/source/state.h @@ -0,0 +1,29 @@ +/**************************************************************************** + * Genesis Plus 1.2a + * + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * STATE MANAGER + ***************************************************************************/ +#ifndef _STATE_H_ +#define _STATE_H_ + +/* Function prototypes */ +void state_load(unsigned char *buffer); +int state_save(unsigned char *buffer); + +#endif diff --git a/ genplus-gx/source/system.c b/ genplus-gx/source/system.c new file mode 100644 index 0000000..2109202 --- /dev/null +++ b/ genplus-gx/source/system.c @@ -0,0 +1,432 @@ +/* + Copyright (C) 1999, 2000, 2001, 2002, 2003 Charles MacDonald + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "shared.h" + +#define CLOCK_NTSC 53693175 +#define CLOCK_PAL 53203424 +#define SND_SIZE (snd.buffer_size * sizeof(int16)) + +t_bitmap bitmap; +t_snd snd; +uint32 aim_m68k = 0; +uint32 count_m68k = 0; +uint32 dma_m68k = 0; +uint32 aim_z80 = 0; +uint32 count_z80 = 0; +uint16 misc68Kcycles = 488; +uint16 miscZ80cycles = 228; +uint16 lines_per_frame = 262; +double CPU_Clock = (double)CLOCK_NTSC; +void *myFM = NULL; +static int sound_tbl[312]; +static int sound_inc[312]; +uint8 alttiming = 0; + +void m68k_run (int cyc) +{ + int cyc_do = cyc - count_m68k; /* cycles remaining to run for the line */ + if (cyc_do > 0) + { + m68k_execute(cyc_do); + count_m68k += cyc_do; + } +} + +void z80_run (int cyc) +{ + int cyc_do = cyc - count_z80; + if (cyc_do > 0) count_z80 += z80_execute(cyc_do); +} + +void m68k_freeze(int cycles) +{ + extern int m68ki_remaining_cycles; + int extra_cycles = cycles - m68k_cycles_remaining(); + + if (extra_cycles > 0) + { + /* end of 68k execution */ + m68ki_remaining_cycles = 0; + + /* extra cycles are burned at next execution */ + count_m68k += extra_cycles; + } + else m68ki_remaining_cycles -= cycles; /* we burn some 68k cycles */ +} + +extern uint8 hq_fm; +int audio_init (int rate) +{ + int i; + int vclk = (int)(CPU_Clock / 7.0); /* 68000 and YM2612 clock */ + int zclk = (int)(CPU_Clock / 15.0); /* Z80 and SN76489 clock */ + + /* Clear the sound data context */ + memset (&snd, 0, sizeof (snd)); + + /* Make sure the requested sample rate is valid */ + if (!rate || ((rate < 8000) | (rate > 48000))) return (0); + + /* Calculate the sound buffer size */ + snd.buffer_size = (rate / vdp_rate); + snd.sample_rate = rate; + + /* Allocate sound buffers */ + if (FM_GENS) + { + snd.fm.gens_buffer[0] = realloc (snd.fm.gens_buffer[0], snd.buffer_size * sizeof (int)); + snd.fm.gens_buffer[1] = realloc (snd.fm.gens_buffer[1], snd.buffer_size * sizeof (int)); + if (!snd.fm.gens_buffer[0] || !snd.fm.gens_buffer[1]) return (-1); + memset (snd.fm.gens_buffer[0], 0, SND_SIZE*2); + memset (snd.fm.gens_buffer[1], 0, SND_SIZE*2); + } + else + { + snd.fm.buffer[0] = realloc (snd.fm.buffer[0], snd.buffer_size * sizeof (int16)); + snd.fm.buffer[1] = realloc (snd.fm.buffer[1], snd.buffer_size * sizeof (int16)); + if (!snd.fm.buffer[0] || !snd.fm.buffer[1]) return (-1); + memset (snd.fm.buffer[0], 0, SND_SIZE); + memset (snd.fm.buffer[1], 0, SND_SIZE); + } + + snd.psg.buffer = realloc (snd.psg.buffer, snd.buffer_size * sizeof (int16)); + if (!snd.psg.buffer) return (-1); + memset (snd.psg.buffer, 0, SND_SIZE); + + /* Set audio enable flag */ + snd.enabled = 1; + + /* Initialize sound chip emulation */ + if (PSG_MAME) SN76496_sh_start(zclk, 0, rate); + else + { + SN76489_Init(0, zclk, rate); + SN76489_Config(0, MUTE_ALLON, VOL_FULL, FB_SEGAVDP, SRW_SEGAVDP, 0); + } + + if (FM_GENS) YM2612_Init(vclk, rate, hq_fm); + else if (!myFM) myFM = YM2612Init (0, 0, vclk, rate, 0, 0); + + /* Make sound table */ + for (i = 0; i < lines_per_frame; i++) + { + float p = (snd.buffer_size * i) / lines_per_frame; + float q = (snd.buffer_size * (i+1)) / lines_per_frame; + sound_tbl[i] = p; + sound_inc[i] = ((q - p) * 1000000) / snd.sample_rate; + } + return (0); +} + +void system_init (void) +{ + /* PAL or NTSC timings */ + vdp_rate = (vdp_pal) ? 50 : 60; + lines_per_frame = (vdp_pal) ? 313 : 262; + CPU_Clock = (vdp_pal) ? (double)CLOCK_PAL : (double)CLOCK_NTSC; + miscZ80cycles = (vdp_pal) ? 227 : 228; + misc68Kcycles = (vdp_pal) ? 487 : 488; + + gen_init (); + vdp_init (); + render_init (); + sound_init(); +} + +void system_reset (void) +{ + aim_m68k = 0; + count_m68k = 0; + dma_m68k = 0; + aim_z80 = 0; + count_z80 = 0; + + gen_reset (); + io_reset(); + vdp_reset (); + render_reset (); + + if (snd.enabled) + { + fm_reset(); + if (FM_GENS) + { + memset (snd.fm.gens_buffer[0], 0, SND_SIZE*2); + memset (snd.fm.gens_buffer[1], 0, SND_SIZE*2); + } + else + { + memset (snd.fm.buffer[0], 0, SND_SIZE); + memset (snd.fm.buffer[1], 0, SND_SIZE); + } + + if (!PSG_MAME) SN76489_Reset(0); + memset (snd.psg.buffer, 0, SND_SIZE); + } +} + +void system_shutdown (void) +{ + gen_shutdown (); + vdp_shutdown (); + render_shutdown (); +} + +int system_frame (int do_skip) +{ + /* update total cycles count */ + dma_m68k += count_m68k; + + /* reset line cycles counts */ + aim_m68k = 0; + count_m68k = 0; + aim_z80 = 0; + count_z80 = 0; + lastbusreqcnt = -1000; + + if (!gen_running) return 0; + + /* Clear V-Blank flag */ + status &= 0xFFF7; + + /* Toggle even/odd flag (IM2 only) */ + if (im2_flag) status ^= 0x0010; + + /* Reset HCounter */ + h_counter = reg[10]; + + /* Point to start of sound buffer */ + snd.fm.lastStage = snd.fm.curStage = 0; + snd.psg.lastStage = snd.psg.curStage = 0; + + /* Parse sprites for line 0 (done on line 261 or 312) */ + parse_satb (0x80); + + /* Line processing */ + for (v_counter = 0; v_counter < lines_per_frame; v_counter ++) + { + /* update cpu cycles goal for the line */ + aim_z80 += miscZ80cycles; + aim_m68k += misc68Kcycles; + + /* 6-Buttons or Menacer update */ + input_update(); + + /* If a Z80 interrupt is still pending after a scanline, cancel it */ + if (zirq) + { + zirq = 0; + z80_set_irq_line(0, CLEAR_LINE); + } + + /* H Int */ + if (v_counter <= frame_end) + { + if(--h_counter < 0) + { + h_counter = reg[10]; + hint_pending = 1; + if(reg[0] & 0x10) m68k_set_irq(4); + } + } + + /* Render a line of the display if needed */ + if (do_skip == 0 && !alttiming) + { + if (v_counter < frame_end) render_line(v_counter); + if (v_counter < (frame_end-1)) parse_satb(0x81 + v_counter); + } + + /* H retrace */ + status |= 0x0004; // HBlank = 1 + m68k_run(aim_m68k - 404); + status &= 0xFFFB; // HBlank = 0 + + if (do_skip == 0 && alttiming) /* hack for Legend of Galahad and Road Rash serie (one-line glitch)*/ + { + if (v_counter < frame_end) render_line(v_counter); + if (v_counter < (frame_end-1)) parse_satb(0x81 + v_counter); + } + + if (v_counter == frame_end) + { + /* V Retrace */ + status |= 0x0008; // VBlank = 1 + m68k_run(aim_m68k - 360); + if (zreset == 1 && zbusreq == 0) z80_run(aim_z80 - 168); + else count_z80 = aim_z80 - 168; + + /* V Int */ + status |= 0x0080; + vint_pending = 1; + if (reg[1] & 0x20) m68k_set_irq(6); + + /* Z Int */ + if (zreset == 1 && zbusreq == 0) + { + zirq = 1; + z80_set_irq_line(0, ASSERT_LINE); + } + } + + /* Process end of line */ + m68k_run(aim_m68k); + if (zreset == 1 && zbusreq == 0) z80_run(aim_z80); + else count_z80 = aim_z80; + + /* Update sound buffers and timers */ + fm_update_timers (sound_inc[v_counter]); + snd.fm.curStage = sound_tbl[v_counter]; + snd.psg.curStage = sound_tbl[v_counter]; + } + + if (snd.enabled) audio_update (); + return gen_running; +} + +#ifdef NGC +/**************************************************************************** + * softdev - 09 Mar 2006 + * + * + * Nintendo Gamecube Specific Mixer from here on in ... + ****************************************************************************/ +extern unsigned char soundbuffer[16][3840]; +extern int mixbuffer; +extern double psg_preamp; +extern double fm_preamp; +extern u8 boost; +static int ll, rr; + +void audio_update (void) +{ + int i; + int l, r; + int16 *tempBuffer[2]; + int16 *sb = (int16 *) soundbuffer[mixbuffer]; + + /* get remaining samples */ + /* YM2612 */ + if (FM_GENS) + { + int *fmBuffer[2]; + fmBuffer[0] = snd.fm.gens_buffer[0] + snd.fm.lastStage; + fmBuffer[1] = snd.fm.gens_buffer[1] + snd.fm.lastStage; + YM2612_Update(fmBuffer, snd.buffer_size - snd.fm.lastStage); + } + else + { + tempBuffer[0] = snd.fm.buffer[0] + snd.fm.lastStage; + tempBuffer[1] = snd.fm.buffer[1] + snd.fm.lastStage; + YM2612UpdateOne (myFM, tempBuffer, snd.buffer_size - snd.fm.lastStage); + } + + /* PSG */ + tempBuffer[0] = snd.psg.buffer + snd.psg.lastStage; + if (PSG_MAME) SN76496Update (0, tempBuffer[0], snd.buffer_size - snd.psg.lastStage); + else SN76489_Update(0, tempBuffer[0], snd.buffer_size - snd.psg.lastStage); + + /* mix samples */ + for (i = 0; i < snd.buffer_size; i ++) + { + /* PSG */ + l = r = (int) ((double)snd.psg.buffer[i] * psg_preamp); + + if (FM_GENS) + { + l += (int) ((double)snd.fm.gens_buffer[0][i] * fm_preamp); + r += (int) ((double)snd.fm.gens_buffer[1][i] * fm_preamp); + snd.fm.gens_buffer[0][i] = 0; + snd.fm.gens_buffer[1][i] = 0; + } + else + { + l += (int) ((double)snd.fm.buffer[0][i] * fm_preamp); + r += (int) ((double)snd.fm.buffer[1][i] * fm_preamp); + } + + /* single-pole low-pass filter (6 dB/octave) */ + ll = (ll + l) >> 1; + rr = (rr + r) >> 1; + + l = ll * boost; + r = rr * boost; + + /* clipping */ + if (l > 32767) l = 32767; + else if (l < -32768) l = -32768; + if (r > 32767) r = 32767; + else if (r < -32768) r = -32768; + + *sb++ = l; + *sb++ = r; + } + + mixbuffer++; + mixbuffer &= 0xf; +} +#else +void audio_update (void) +{ + int i; + int16 acc; + int16 *tempBuffer[2]; + + if (FM_GENS) + { + int *fmBuffer[2]; + fmBuffer[0] = snd.fm.gens_buffer[0] + snd.fm.lastStage; + fmBuffer[1] = snd.fm.gens_buffer[1] + snd.fm.lastStage; + YM2612_Update(fmBuffer, snd.buffer_size - snd.fm.lastStage); + } + else + { + tempBuffer[0] = snd.fm.buffer[0] + snd.fm.lastStage; + tempBuffer[1] = snd.fm.buffer[1] + snd.fm.lastStage; + YM2612UpdateOne (myFM, tempBuffer, snd.buffer_size - snd.fm.lastStage); + } + + tempBuffer[0] = snd.psg.buffer + snd.psg.lastStage; + if (PSG_MAME) SN76496Update (0, tempBuffer[0], snd.buffer_size - snd.psg.lastStage); + else SN76489_Update(0, tempBuffer[0], snd.buffer_size - snd.psg.lastStage); + + for (i = 0; i < snd.buffer_size; i += 1) + { + int16 psg = snd.psg.buffer[i] / 2; + + acc = 0; + acc += FM_GENS ? snd.fm.gens_buffer[0][i] : snd.fm.buffer[0][i]; + acc += psg; + snd.buffer[0][i] = acc; + + acc = 0; + acc += FM_GENS ? snd.fm.gens_buffer[1][i] : snd.fm.buffer[1][i]; + acc += psg; + snd.buffer[1][i] = acc; + + if (FM_GENS) + { + snd.fm.gens_buffer[0][i] = 0; + snd.fm.gens_buffer[1][i] = 0; + } + + } +} +#endif + diff --git a/ genplus-gx/source/system.h b/ genplus-gx/source/system.h new file mode 100644 index 0000000..3bfb2ba --- /dev/null +++ b/ genplus-gx/source/system.h @@ -0,0 +1,74 @@ + +#ifndef _SYSTEM_H_ +#define _SYSTEM_H_ + +typedef struct +{ + uint8 *data; /* Bitmap data */ + int width; /* Bitmap width (32+512+32) */ + int height; /* Bitmap height (256) */ + int depth; /* Color depth (8 bits) */ + int pitch; /* Width of bitmap in bytes */ + int granularity; /* Size of each pixel in bytes */ + int remap; /* 1= Translate pixel data */ + struct + { + int x; /* X offset of viewport within bitmap */ + int y; /* Y offset of viewport within bitmap */ + int w; /* Width of viewport */ + int h; /* Height of viewport */ + int ow; /* Previous width of viewport */ + int oh; /* Previous height of viewport */ + int changed; /* 1= Viewport width or height have changed */ + } viewport; +} t_bitmap; + + +typedef struct +{ + int sample_rate; /* Sample rate (8000-44100) */ + int enabled; /* 1= sound emulation is enabled */ + int buffer_size; /* Size of sound buffer (in bytes) */ + int16 *buffer[2]; /* Signed 16-bit stereo sound data */ + struct + { + int curStage; + int lastStage; + int *gens_buffer[2]; + int16 *buffer[2]; + } fm; + struct + { + int curStage; + int lastStage; + int16 *buffer; + } psg; +} t_snd; + +/* Global variables */ +extern t_bitmap bitmap; +extern t_snd snd; +extern uint8 initialized; +extern uint32 aim_m68k; +extern uint32 count_m68k; +extern uint32 dma_m68k; +extern uint32 aim_z80; +extern uint32 count_z80; +extern uint16 misc68Kcycles; +extern uint16 miscZ80cycles; +extern uint16 lines_per_frame; +extern double CPU_Clock; + +/* Function prototypes */ +void system_init (void); +void system_reset (void); +void system_shutdown (void); +int system_frame(int skip); +void m68k_run (int cyc); +void z80_run (int cyc); +void m68k_freeze(int cycles); +int audio_init (int rate); +void audio_update (void); + +#endif /* _SYSTEM_H_ */ + diff --git a/ genplus-gx/source/types.h b/ genplus-gx/source/types.h new file mode 100644 index 0000000..8436c5e --- /dev/null +++ b/ genplus-gx/source/types.h @@ -0,0 +1,13 @@ + +#ifndef _TYPES_H_ +#define _TYPES_H_ + +typedef unsigned char uint8; +typedef unsigned short int uint16; +typedef unsigned long int uint32; + +typedef signed char int8; +typedef signed short int int16; +typedef signed long int int32; + +#endif /* _TYPES_H_ */ diff --git a/ genplus-gx/source/unused/dos/SEALINTF.C b/ genplus-gx/source/unused/dos/SEALINTF.C new file mode 100644 index 0000000..3be0dbc --- /dev/null +++ b/ genplus-gx/source/unused/dos/SEALINTF.C @@ -0,0 +1,288 @@ + +#include "osd.h" + +int seal_sample_rate = 44100; +int seal_sound_card = -1; + +HAC hVoice[NUMVOICES]; +LPAUDIOWAVE lpWave[NUMVOICES]; +AUDIOINFO info; +AUDIOCAPS caps; +int c[MAX_STREAM_CHANNELS]; +int nominal_sample_rate; +static int attenuation = 0; +static int master_volume = 256; + + +void osd_update_audio(void) +{ + if (seal_sample_rate == 0) return; + AUpdateAudio(); +} + + +/* attenuation in dB */ +void osd_set_mastervolume(int _attenuation) +{ + float volume; + + attenuation = _attenuation; + + volume = 256.0; /* range is 0-256 */ + while (_attenuation++ < 0) + volume /= 1.122018454; /* = (10 ^ (1/20)) = 1dB */ + + master_volume = volume; + + ASetAudioMixerValue(AUDIO_MIXER_MASTER_VOLUME,master_volume); +} + + +int msdos_init_sound(int *rate, int card) +{ + int i; + + seal_sample_rate = *rate; + seal_sound_card = card; + + if (AInitialize() != AUDIO_ERROR_NONE) + return 1; + + /* Ask the user if no sound card was chosen */ + if (seal_sound_card == -1) + { + unsigned int k; + + printf("\n SELECT YOUR AUDIO DEVICE :\n\n" + " AWE32/64 playback requires onboard DRAM,\n" + " Sound Blaster playback is the most compatible & better for emulation\n\n"); + + for (k = 0;k < AGetAudioNumDevs();k++) + { + if (AGetAudioDevCaps(k,&caps) == AUDIO_ERROR_NONE) + printf(" %2d. %s\n",k,caps.szProductName); + } + printf("\n"); + + if (k < 10) + { + i = getch(); + seal_sound_card = i - '0'; + } + else + scanf("%d",&seal_sound_card); + } + + /* initialize SEAL audio library */ + if (seal_sound_card == 0) /* silence */ + { + /* update the Machine structure to show that sound is disabled */ + seal_sample_rate = 0; + exit(0); + return 0; + } + + /* open audio device */ + /* info.nDeviceId = AUDIO_DEVICE_MAPPER;*/ + info.nDeviceId = seal_sound_card; + /* always use 16 bit mixing if possible - better quality and same speed of 8 bit */ + info.wFormat = AUDIO_FORMAT_16BITS | AUDIO_FORMAT_STEREO | AUDIO_FORMAT_RAW_SAMPLE; + + info.nSampleRate = seal_sample_rate; + if (AOpenAudio(&info) != AUDIO_ERROR_NONE) + { + return (1); + } + + AGetAudioDevCaps(info.nDeviceId,&caps); + printf("Using `%s' at %d-bit %s %u Hz\n", + caps.szProductName, + info.wFormat & AUDIO_FORMAT_16BITS ? 16 : 8, + info.wFormat & AUDIO_FORMAT_STEREO ? "stereo" : "mono", + info.nSampleRate); + + /* open and allocate voices, allocate waveforms */ + if (AOpenVoices(NUMVOICES) != AUDIO_ERROR_NONE) + { + printf("voices initialization failed\n"); + return 1; + } + + for (i = 0; i < NUMVOICES; i++) + { + if (ACreateAudioVoice(&hVoice[i]) != AUDIO_ERROR_NONE) + { + printf("voice #%d creation failed\n",i); + return 1; + } + + ASetVoicePanning(hVoice[i],128); + + lpWave[i] = 0; + } + + /* update the Machine structure to reflect the actual sample rate */ + *rate = seal_sample_rate = info.nSampleRate; + + { + uclock_t a,b; + LONG start,end; + + + if ((lpWave[0] = (LPAUDIOWAVE)malloc(sizeof(AUDIOWAVE))) == 0) + return 1; + + lpWave[0]->wFormat = AUDIO_FORMAT_8BITS | AUDIO_FORMAT_MONO; + lpWave[0]->nSampleRate = seal_sample_rate; + lpWave[0]->dwLength = 3*seal_sample_rate; + lpWave[0]->dwLoopStart = 0; + lpWave[0]->dwLoopEnd = 3*seal_sample_rate; + if (ACreateAudioData(lpWave[0]) != AUDIO_ERROR_NONE) + { + free(lpWave[0]); + lpWave[0] = 0; + + return 1; + } + + memset(lpWave[0]->lpData,0,3*seal_sample_rate); + /* upload the data to the audio DRAM local memory */ + AWriteAudioData(lpWave[0],0,3*seal_sample_rate); + APrimeVoice(hVoice[0],lpWave[0]); + ASetVoiceFrequency(hVoice[0],seal_sample_rate); + ASetVoiceVolume(hVoice[0],0); + AStartVoice(hVoice[0]); + + a = uclock(); + /* wait some time to let everything stabilize */ + do + { + osd_update_audio(); + b = uclock(); + } while (b-a < UCLOCKS_PER_SEC/10); + + a = uclock(); + AGetVoicePosition(hVoice[0],&start); + do + { + osd_update_audio(); + b = uclock(); + } while (b-a < UCLOCKS_PER_SEC); + AGetVoicePosition(hVoice[0],&end); + + nominal_sample_rate = seal_sample_rate; + seal_sample_rate = end - start; + + AStopVoice(hVoice[0]); + ADestroyAudioData(lpWave[0]); + free(lpWave[0]); + lpWave[0] = 0; + } + + osd_set_mastervolume(0); /* start at maximum volume */ + + return 0; +} + + +void msdos_shutdown_sound(void) +{ + if (seal_sample_rate != 0) + { + int n; + + /* stop and release voices */ + for (n = 0; n < NUMVOICES; n++) + { + AStopVoice(hVoice[n]); + ADestroyAudioVoice(hVoice[n]); + if (lpWave[n]) + { + ADestroyAudioData(lpWave[n]); + free(lpWave[n]); + lpWave[n] = 0; + } + } + ACloseVoices(); + ACloseAudio(); + } +} + + +void playstreamedsample(int channel,signed char *data,int len,int freq,int volume,int pan,int bits) +{ + static int playing[NUMVOICES]; + static int c[NUMVOICES]; + + /* backwards compatibility with old 0-255 volume range */ + if (volume > 100) volume = volume * 25 / 255; + + if (seal_sample_rate == 0 || channel >= NUMVOICES) return; + + if (!playing[channel]) + { + if (lpWave[channel]) + { + AStopVoice(hVoice[channel]); + ADestroyAudioData(lpWave[channel]); + free(lpWave[channel]); + lpWave[channel] = 0; + } + + if ((lpWave[channel] = (LPAUDIOWAVE)malloc(sizeof(AUDIOWAVE))) == 0) + return; + + lpWave[channel]->wFormat = (bits == 8 ? AUDIO_FORMAT_8BITS : AUDIO_FORMAT_16BITS) + | AUDIO_FORMAT_MONO | AUDIO_FORMAT_LOOP; + lpWave[channel]->nSampleRate = nominal_sample_rate; + lpWave[channel]->dwLength = 3*len; + lpWave[channel]->dwLoopStart = 0; + lpWave[channel]->dwLoopEnd = 3*len; + if (ACreateAudioData(lpWave[channel]) != AUDIO_ERROR_NONE) + { + free(lpWave[channel]); + lpWave[channel] = 0; + + return; + } + + memset(lpWave[channel]->lpData,0,3*len); + memcpy(lpWave[channel]->lpData,data,len); + /* upload the data to the audio DRAM local memory */ + AWriteAudioData(lpWave[channel],0,3*len); + APrimeVoice(hVoice[channel],lpWave[channel]); + /* need to cast to double because freq*nominal_sample_rate can exceed the size of an int */ + ASetVoiceFrequency(hVoice[channel],(double)freq*nominal_sample_rate/seal_sample_rate); + AStartVoice(hVoice[channel]); + playing[channel] = 1; + c[channel] = 1; + } + else + { + LONG pos; + + for(;;) + { + AGetVoicePosition(hVoice[channel],&pos); + if (c[channel] == 0 && pos >= len) break; + if (c[channel] == 1 && (pos < len || pos >= 2*len)) break; + if (c[channel] == 2 && pos < 2*len) break; + osd_update_audio(); + } + + memcpy(&lpWave[channel]->lpData[len * c[channel]],data,len); + AWriteAudioData(lpWave[channel],len*c[channel],len); + c[channel]++; + if (c[channel] == 3) c[channel] = 0; + } + + + ASetVoiceVolume(hVoice[channel],volume * 64 / 100); + ASetVoicePanning(hVoice[channel],(pan + 100) * 255 / 200); +} + +void osd_play_streamed_sample_16(int channel,signed short *data,int len,int freq,int volume,int pan) +{ + playstreamedsample(channel,(signed char *)data,len,freq,volume,pan,16); +} + diff --git a/ genplus-gx/source/unused/dos/SEALINTF.H b/ genplus-gx/source/unused/dos/SEALINTF.H new file mode 100644 index 0000000..368ab71 --- /dev/null +++ b/ genplus-gx/source/unused/dos/SEALINTF.H @@ -0,0 +1,17 @@ + +#ifndef _SEALINTF_H_ +#define _SEALINTF_H_ + +#define MAX_SOUND 4 +#define NUMVOICES 16 +#define MAX_STREAM_CHANNELS 6 + +/* Function prototypes */ +void osd_update_audio(void); +void osd_set_mastervolume(int _attenuation); +int msdos_init_sound(int *rate, int card); +void msdos_shutdown_sound(void); +void playstreamedsample(int channel,signed char *data,int len,int freq,int volume,int pan,int bits); +void osd_play_streamed_sample_16(int channel,signed short *data,int len,int freq,int volume,int pan); + +#endif /* _SEALINTF_H_ */ diff --git a/ genplus-gx/source/unused/dos/config.c b/ genplus-gx/source/unused/dos/config.c new file mode 100644 index 0000000..06c1fb7 --- /dev/null +++ b/ genplus-gx/source/unused/dos/config.c @@ -0,0 +1,256 @@ + +#include "osd.h" + +t_option option; + +void do_config(char *file) +{ + extern int __crt0_argc; + extern char **__crt0_argv; + + /* Our token list */ + int i, argc; + char *argv[TOKEN_LIST_SIZE]; + + set_option_defaults(); + for(i = 0; i < TOKEN_LIST_SIZE; i += 1) argv[i] = NULL; + + /* Check configuration file */ + if(file) parse_file(file, &argc, argv); + + /* Check extracted tokens */ + parse_args(argc, argv); + + /* Free token list */ + for(i = 0; i < argc; i += 1) if(argv[argc]) free (argv[argc]); + + /* Check command line */ + parse_args(__crt0_argc, __crt0_argv); +} + + +/* Parse configuration file */ +int parse_file(char *filename, int *argc, char **argv) +{ + char token[0x100]; + FILE *handle = NULL; + + *argc = 0; + handle = fopen(filename, "r"); + if(!handle) return (0); + + fscanf(handle, "%s", &token[0]); + while(!(feof(handle))) + { + int size = strlen(token) + 1; + argv[*argc] = malloc(size); + if(!argv[*argc]) return (0); + strcpy(argv[*argc], token); + *argc += 1; + fscanf(handle, "%s", &token[0]); + } + + if(handle) fclose(handle); + return (1); +} + + +int check_bool(char *token) +{ + int result = 1; + if(stricmp("off", token) == 0) + result = 0; + if(stricmp("no", token) == 0) + result = 0; + return (result); +} + + +void set_option_defaults(void) +{ + option.video_driver = GFX_AUTODETECT; + option.video_width = 320; + option.video_height = 240; + option.video_depth = 8; + + option.remap = 0; + option.scanlines = 0; + option.scale = 0; + + option.vsync = 0; + option.throttle = 0; + option.skip = 1; + + option.sound = 0; + option.sndcard = -1; + option.sndrate = 44100; + option.swap = 0; + + option.joy_driver = JOY_TYPE_AUTODETECT; +} + + +void print_options(void) +{ + printf(" -vdriver \t Select video driver (auto)\n"); + printf(" -res \t Specify display resolution (320x240)\n"); + printf(" -depth \t Specify display depth (8)\n"); + printf(" -remap \t Enable raster-based palette effects (8-bit color only)\n"); + printf(" -scanlines \t Enable scanlines effect\n"); + printf(" -scale \t Scale display to width of screen\n"); + printf(" -vsync \t Enable vsync polling\n"); + printf(" -throttle \t Enable speed throttling\n"); + printf(" -skip \t Specify frame skip level (1=no frames skipped)\n"); + printf(" -sound \t Enable sound output\n"); + printf(" -sndcard \t Select sound card\n"); + printf(" -sndrate \t Specify sound sample rate (8000-44100)\n"); + printf(" -swap \t Swap left and right channels\n"); + printf(" -joy \t Select joystick driver (auto)\n"); +} + + +void parse_args(int argc, char **argv) +{ + int i, j; + + for(i = 0; i < argc; i += 1) + { + if(stricmp("-vdriver", argv[i]) == 0) + { + for(j = 0; video_driver_table[j].token != NULL; j += 1) + { + if(stricmp(argv[i+1], video_driver_table[j].token) == 0) + { + option.video_driver = video_driver_table[j].value; + } + } + } + + if(stricmp("-res", argv[i]) == 0) + { + option.video_width = atoi(argv[i+1]); + option.video_height = atoi(argv[i+2]); + } + + if(stricmp("-depth", argv[i]) == 0) + { + option.video_depth = atoi(argv[i+1]); + } + + if(stricmp("-remap", argv[i]) == 0) + { + option.remap = check_bool(argv[i+1]); + } + + if(stricmp("-scanlines", argv[i]) == 0) + { + option.scanlines = check_bool(argv[i+1]); + } + + if(stricmp("-scale", argv[i]) == 0) + { + option.scale = check_bool(argv[i+1]); + } + + if(stricmp("-vsync", argv[i]) == 0) + { + option.vsync = check_bool(argv[i+1]); + } + + if(stricmp("-throttle", argv[i]) == 0) + { + option.throttle = check_bool(argv[i+1]); + } + + if(stricmp("-skip", argv[i]) == 0) + { + option.skip = atoi(argv[i+1]); + if(!option.skip) option.skip = 1; + } + + if(stricmp("-sound", argv[i]) == 0) + { + option.sound = check_bool(argv[i+1]); + } + + if(stricmp("-sndcard", argv[i]) == 0) + { + option.sndcard = atoi(argv[i+1]); + } + + if(stricmp("-sndrate", argv[i]) == 0) + { + option.sndrate = atoi(argv[i+1]); + } + + if(stricmp("-swap", argv[i]) == 0) + { + option.swap = check_bool(argv[i+1]); + } + + if(stricmp("-joy", argv[i]) == 0) + { + for(j = 0; joy_driver_table[j].token != NULL; j += 1) + { + if(stricmp(argv[i+1], joy_driver_table[j].token) == 0) + { + option.joy_driver = joy_driver_table[j].value; + } + } + } + } + + if(option.remap) option.video_depth = 8; +} + + +t_strint video_driver_table[] = +{ + { "auto", GFX_AUTODETECT }, + { "safe", GFX_SAFE }, + { "vga", GFX_VGA }, + { "modex", GFX_MODEX }, + { "vesa2l", GFX_VESA2L }, + { "vesa3", GFX_VESA3 }, + { "vbeaf", GFX_VBEAF }, + { NULL, 0 } +}; + + +t_strint joy_driver_table[] = +{ + { "auto", JOY_TYPE_AUTODETECT }, + { "none", JOY_TYPE_NONE }, + { "standard", JOY_TYPE_STANDARD }, + { "2pads", JOY_TYPE_2PADS }, + { "4button", JOY_TYPE_4BUTTON }, + { "6button", JOY_TYPE_6BUTTON }, + { "8button", JOY_TYPE_8BUTTON }, + { "fspro", JOY_TYPE_FSPRO }, + { "wingex", JOY_TYPE_WINGEX }, + { "sidewinder", JOY_TYPE_SIDEWINDER }, + { "gamepadpro", JOY_TYPE_GAMEPAD_PRO }, + { "grip", JOY_TYPE_GRIP }, + { "grip4", JOY_TYPE_GRIP4 }, + { "sneslpt1", JOY_TYPE_SNESPAD_LPT1 }, + { "sneslpt2", JOY_TYPE_SNESPAD_LPT2 }, + { "sneslpt3", JOY_TYPE_SNESPAD_LPT3 }, + { "psxlpt1", JOY_TYPE_PSXPAD_LPT1 }, + { "psxlpt2", JOY_TYPE_PSXPAD_LPT2 }, + { "psxlpt3", JOY_TYPE_PSXPAD_LPT3 }, + { "n64lpt1", JOY_TYPE_N64PAD_LPT1 }, + { "n64lpt2", JOY_TYPE_N64PAD_LPT2 }, + { "n64lpt3", JOY_TYPE_N64PAD_LPT3 }, + { "db9lpt1", JOY_TYPE_DB9_LPT1 }, + { "db9lpt2", JOY_TYPE_DB9_LPT2 }, + { "db9lpt3", JOY_TYPE_DB9_LPT3 }, + { "tglpt1", JOY_TYPE_TURBOGRAFX_LPT1 }, + { "tglpt2", JOY_TYPE_TURBOGRAFX_LPT2 }, + { "tglpt3", JOY_TYPE_TURBOGRAFX_LPT3 }, + { "wingwar", JOY_TYPE_WINGWARRIOR }, + { "segaisa", JOY_TYPE_IFSEGA_ISA}, + { "segapci", JOY_TYPE_IFSEGA_PCI}, + { "segapci2", JOY_TYPE_IFSEGA_PCI_FAST}, + { NULL, 0 } +}; + diff --git a/ genplus-gx/source/unused/dos/config.h b/ genplus-gx/source/unused/dos/config.h new file mode 100644 index 0000000..a8d4118 --- /dev/null +++ b/ genplus-gx/source/unused/dos/config.h @@ -0,0 +1,65 @@ + +#ifndef _CONFIG_H_ +#define _CONFIG_H_ + +#define PATH_SIZE (0x100) +#define TOKEN_LIST_SIZE (0x20) + +typedef struct +{ + char *token; + int value; +}t_strint; + +typedef struct +{ + int video_width; + int video_height; + int video_depth; + int video_driver; + + int autores; + int autores_w; + int autores_h; + + int remap; + int blur; + int scanlines; + int scale; + + int vsync; + int throttle; + int fps; + int skip; + + int sound; + int sndcard; + int sndrate; + int swap; + + int wave; + char wavpath[PATH_SIZE]; + + int joy_driver; + + int split; /* 1= Split image at 2 megabit boundary */ + int flip; /* 1= Bit-flip image */ + int usa; /* 1= Set D6 of $1000 to indicate US machine */ + int softres; /* 1= Allow RUN+SELECT */ +} t_option; + +/* Global variables */ +extern t_option option; +extern t_strint video_driver_table[]; +extern t_strint joy_driver_table[]; + +/* Function prototypes */ +void do_config(char *file); +int parse_file(char *filename, int *argc, char **argv); +void parse_args(int argc, char **argv); +void print_options(void); +int check_bool(char *token); +void set_option_defaults(void); + +#endif /* _CONFIG_H_ */ + diff --git a/ genplus-gx/source/unused/dos/dos.c b/ genplus-gx/source/unused/dos/dos.c new file mode 100644 index 0000000..d85c087 --- /dev/null +++ b/ genplus-gx/source/unused/dos/dos.c @@ -0,0 +1,466 @@ +/* + dos.c -- + DOS interface code for the emulator +*/ + +#include "osd.h" + +#define FRAMES_PER_SECOND 60 + +RGB vdp_palette[3][0x200]; +PALETTE gen_pal; +BITMAP *gen_bmp; + +volatile int frame_skip = 1; +volatile int frame_count = 0; +volatile int frames_rendered = 0; +volatile int frame_rate = 0; +volatile int tick_count = 0; +volatile int old_tick_count = 0; +volatile int skip = 0; + +int quit = 0; + +int main (int argc, char *argv[]) +{ + if(argc < 2) { + printf("Genesis Plus - Sega Mega Drive emulator (v1.0)\n"); + printf("(C) 1999, 2000, 2001, 2002, 2003 Charles MacDonald\n"); + printf("Usage %s file.[bin|smd|zip] [-options]\n", argv[0]); + printf("Type `%s -help' for a list of options.\n", argv[0]); + exit(1); + }; + + if(stricmp(argv[1], "-help") == 0) + { + print_options(); + return (0); + } + + if(!load_rom(argv[1])) + { + printf("File `%s' not found.\n", argv[1]); + return (0); + } + + init_machine(); + + error_init(); + system_init(); + + if(option.sound) + { + audio_init(option.sndrate); + } + + system_reset(); + + + for(;;) + { + frame_count += 1; + if(quit) break; + dos_update_input(); + if(frame_count % frame_skip == 0) + { + system_frame(0); + dos_update_video(); + } + else + { + system_frame(1); + } + if(option.sound) dos_update_audio(); + } + + trash_machine(); + system_shutdown(); + error_shutdown(); + return (0); +} + +/* Timer handler */ +void tick_handler(void) +{ + tick_count += 1; + if(tick_count % FRAMES_PER_SECOND == 0) + { + frame_rate = frames_rendered; + frames_rendered = 0; + } +} +END_OF_FUNCTION(tick_handler); + + +int load_file(char *filename, char *buf, int size) +{ + FILE *fd = fopen(filename, "rb"); + if(!fd) return (0); + fread(buf, size, 1, fd); + fclose(fd); + return (1); +} + +int save_file(char *filename, char *buf, int size) +{ + FILE *fd = NULL; + if(!(fd = fopen(filename, "wb"))) return (0); + fwrite(buf, size, 1, fd); + fclose(fd); + return (1); +} + + +void dos_update_input(void) +{ + if(key[KEY_ESC] || key[KEY_END]) + { + quit = 1; + } + + input.pad[0] = 0; + + /* Is the joystick being used ? */ + if(option.joy_driver != JOY_TYPE_NONE) + { + poll_joystick(); + + /* Check player 1 joystick */ + if(joy[0].stick[0].axis[1].d1) input.pad[0] |= INPUT_UP; + else + if(joy[0].stick[0].axis[1].d2) input.pad[0] |= INPUT_DOWN; + + if(joy[0].stick[0].axis[0].d1) input.pad[0] |= INPUT_LEFT; + else + if(joy[0].stick[0].axis[0].d2) input.pad[0] |= INPUT_RIGHT; + + if(joy[0].button[0].b) input.pad[0] |= INPUT_A; + if(joy[0].button[1].b) input.pad[0] |= INPUT_B; + if(joy[0].button[2].b) input.pad[0] |= INPUT_C; + if(joy[0].button[3].b) input.pad[0] |= INPUT_START; + if(joy[0].button[4].b) input.pad[0] |= INPUT_X; + if(joy[0].button[5].b) input.pad[0] |= INPUT_Y; + if(joy[0].button[6].b) input.pad[0] |= INPUT_Z; + if(joy[0].button[7].b) input.pad[0] |= INPUT_MODE; + + /* More than one joystick supported ? */ + if(num_joysticks > 2) + { + /* Check player 2 joystick */ + if(joy[1].stick[0].axis[1].d1) input.pad[1] |= INPUT_UP; + else + if(joy[1].stick[0].axis[1].d2) input.pad[1] |= INPUT_DOWN; + + if(joy[1].stick[0].axis[0].d1) input.pad[1] |= INPUT_LEFT; + else + if(joy[1].stick[0].axis[0].d1) input.pad[1] |= INPUT_RIGHT; + + if(joy[1].button[0].b) input.pad[1] |= INPUT_A; + if(joy[1].button[1].b) input.pad[1] |= INPUT_B; + if(joy[1].button[2].b) input.pad[1] |= INPUT_C; + if(joy[1].button[3].b) input.pad[1] |= INPUT_START; + if(joy[1].button[4].b) input.pad[1] |= INPUT_X; + if(joy[1].button[5].b) input.pad[1] |= INPUT_Y; + if(joy[1].button[6].b) input.pad[1] |= INPUT_Z; + if(joy[1].button[7].b) input.pad[1] |= INPUT_MODE; + } + } + + if(key[KEY_UP]) input.pad[0] |= INPUT_UP; + else + if(key[KEY_DOWN]) input.pad[0] |= INPUT_DOWN; + if(key[KEY_LEFT]) input.pad[0] |= INPUT_LEFT; + else + if(key[KEY_RIGHT]) input.pad[0] |= INPUT_RIGHT; + + if(key[KEY_A]) input.pad[0] |= INPUT_A; + if(key[KEY_S]) input.pad[0] |= INPUT_B; + if(key[KEY_D]) input.pad[0] |= INPUT_C; + if(key[KEY_F]) input.pad[0] |= INPUT_START; + if(key[KEY_Z]) input.pad[0] |= INPUT_X; + if(key[KEY_X]) input.pad[0] |= INPUT_Y; + if(key[KEY_C]) input.pad[0] |= INPUT_Z; + if(key[KEY_V]) input.pad[0] |= INPUT_MODE; + + if(check_key(KEY_TAB)) + system_reset(); + + if(check_key(KEY_F1)) frame_skip = 1; + if(check_key(KEY_F2)) frame_skip = 2; + if(check_key(KEY_F3)) frame_skip = 3; + if(check_key(KEY_F4)) frame_skip = 4; +} + +void dos_update_audio(void) +{ + osd_play_streamed_sample_16(option.swap ^ 0, snd.buffer[0], snd.buffer_size * 2, option.sndrate, FRAMES_PER_SECOND, -100); + osd_play_streamed_sample_16(option.swap ^ 1, snd.buffer[1], snd.buffer_size * 2, option.sndrate, FRAMES_PER_SECOND, 100); +} + +void dos_update_palette(void) +{ + if(is_border_dirty) + { + uint16 data = *(uint16 *)&cram[(border << 1)]; + RGB *color; + + is_border_dirty = 0; + + if(reg[12] & 8) + { + int j; + for(j = 0; j < 3; j += 1) + { + color = &vdp_palette[j][data]; + set_color((j << 6), color); + } + } + else + { + color = &vdp_palette[1][data]; + set_color(0x00, color); + set_color(0x40, color); + set_color(0x80, color); + } + } + + if(is_color_dirty) + { + int i; + uint16 *p = (uint16 *)&cram[0]; + is_color_dirty = 0; + + for(i = 0; i < 64; i += 1) + { + if((color_dirty[i]) && ((i & 0x0F) != 0x00)) + { + RGB *color; + color_dirty[i] = 0; + if(reg[12] & 8) + { + int j; + for(j = 0; j < 3; j += 1) + { + color = &vdp_palette[j][p[i]]; + set_color((j << 6) | i, color); + } + } + else + { + color = &vdp_palette[1][p[i]]; + set_color(0x00 | i, color); + set_color(0x40 | i, color); + set_color(0x80 | i, color); + } + } + } + } +} + +void dos_update_video(void) +{ + int width = (reg[12] & 1) ? 320 : 256; + int height = (reg[1] & 8) ? 240 : 224; + int center_x = (SCREEN_W - width) / 2; + int center_y = (SCREEN_H / (option.scanlines ? 4 : 2)) - (height / 2); + + /* Wait for VSync */ + if(option.vsync) vsync(); + + if(bitmap.viewport.changed) + { + bitmap.viewport.changed = 0; + if(bitmap.remap) + { + clear(screen); + } + else + { + clear_to_color(screen, 0xFF); + } + } + + if(bitmap.remap == 0) + { + dos_update_palette(); + } + + + if(option.scanlines) + { + int y; + for(y = 0; y < height; y += 1) + { + blit(gen_bmp, screen, 0x20, y, center_x, (center_y + y) << 1, width, 1); + } + } + else + { + + blit(gen_bmp, screen, 0x20, 0, center_x, center_y, width, height); + } +} + +void init_machine(void) +{ + do_config("gen.cfg"); + + if(option.sound) + { + msdos_init_sound(&option.sndrate, option.sndcard); + } + + allegro_init(); + install_keyboard(); + install_joystick(option.joy_driver); + + install_timer(); + LOCK_FUNCTION(tick_handler); + LOCK_VARIABLE(tick_count); + LOCK_VARIABLE(frame_rate); + install_int_ex(tick_handler, BPS_TO_TIMER(FRAMES_PER_SECOND)); + + set_color_depth(option.video_depth); + gen_bmp = create_bitmap(512, 512); + clear(gen_bmp); + + memset(&bitmap, 0, sizeof(bitmap)); + bitmap.data = (uint8 *)&gen_bmp->line[0][0]; + bitmap.width = gen_bmp->w; + bitmap.height = gen_bmp->h; + bitmap.depth = option.video_depth; + switch(option.video_depth) + { + case 8: + bitmap.granularity = 1; + break; + case 15: + bitmap.granularity = 2; + break; + case 16: + bitmap.granularity = 2; + break; + case 32: + bitmap.granularity = 4; + break; + } + bitmap.pitch = (bitmap.width * bitmap.granularity); + bitmap.viewport.w = 256; + bitmap.viewport.h = 224; + bitmap.viewport.x = 0x20; + bitmap.viewport.y = 0x00; + bitmap.remap = 0; + if(option.remap) bitmap.remap = 1; + else + if(bitmap.depth > 8) bitmap.remap = 1; + + make_vdp_palette(); + + memcpy(gen_pal, black_palette, sizeof(PALETTE)); + gen_pal[0xFE].r = \ + gen_pal[0xFE].g = \ + gen_pal[0xFE].b = 0x3F; + + dos_change_mode(); +} + +void trash_machine(void) +{ + if(option.sound) + { + msdos_shutdown_sound(); + } + clear(screen); + destroy_bitmap(gen_bmp); + set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); +} + +void make_vdp_palette(void) +{ + uint8 lut[3][8] = + { + {0x00, 0x04, 0x08, 0x0C, 0x10, 0x14, 0x18, 0x1C}, + {0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38}, + {0x20, 0x24, 0x28, 0x2C, 0x30, 0x34, 0x38, 0x3C}, + }; + + int j; + for(j = 0; j < 0x600; j += 1) + { + + int r = (j >> 6) & 7; + int g = (j >> 3) & 7; + int b = (j >> 0) & 7; + int i = (j >> 9) & 3; + + vdp_palette[i][j & 0x1FF].r = lut[i][r]; + vdp_palette[i][j & 0x1FF].g = lut[i][g]; + vdp_palette[i][j & 0x1FF].b = lut[i][b]; + } +} + +void dos_change_mode(void) +{ + int ret; + int width = option.video_width; + int height = option.video_height; + + if(option.scanlines) height *= 2; + ret = set_gfx_mode(option.video_driver, width, height, 0, 0); + if(ret != 0) + { + set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); + printf("Error setting graphics mode (%dx%d %dbpp).\nAllegro says: `%s'\n", width, height, option.video_depth, allegro_error); + exit(1); + } + + if(bitmap.depth == 8) + { + if(bitmap.remap) + { + int i; + for(i = 0; i < 0x100; i += 1) + { + gen_pal[i].r = ((i >> 5) & 7) << 3; + gen_pal[i].g = ((i >> 2) & 7) << 3; + gen_pal[i].b = ((i >> 0) & 3) << 4; + } + set_palette(gen_pal); + } + else + { + clear_to_color(screen, 0xFF); + gen_pal[0xfe].r = 0xff; + gen_pal[0xfe].g = 0xff; + gen_pal[0xfe].b = 0xff; + set_palette(gen_pal); + inp(0x3DA); + outp(0x3C0, 0x31); + outp(0x3C0, 0xFF); + } + } + else + { + clear(screen); + } +} + + + +/* Check if a key is pressed */ +int check_key(int code) +{ + static char lastbuf[0x100] = {0}; + + if((!key[code]) && (lastbuf[code] == 1)) + lastbuf[code] = 0; + + if((key[code]) && (lastbuf[code] == 0)) + { + lastbuf[code] = 1; + return (1); + } + + return (0); +} + diff --git a/ genplus-gx/source/unused/dos/dos.h b/ genplus-gx/source/unused/dos/dos.h new file mode 100644 index 0000000..e32d62c --- /dev/null +++ b/ genplus-gx/source/unused/dos/dos.h @@ -0,0 +1,19 @@ + +#ifndef _DOS_H_ +#define _DOS_H_ + +/* Function prototypes */ +int load_file(char *filename, char *buf, int size); +int save_file(char *filename, char *buf, int size); +void dos_update_input(void); +void dos_update_audio(void); +void dos_update_palette(void); +void dos_update_video(void); +void init_machine(void); +void trash_machine(void); +void make_vdp_palette(void); +void dos_change_mode(void); +int check_key(int code); + +#endif /* _DOS_H_ */ + diff --git a/ genplus-gx/source/unused/dos/error.c b/ genplus-gx/source/unused/dos/error.c new file mode 100644 index 0000000..7032ae9 --- /dev/null +++ b/ genplus-gx/source/unused/dos/error.c @@ -0,0 +1,29 @@ + +#include "osd.h" + +FILE *error_log; + +struct { + int enabled; + int verbose; + FILE *log; +} t_error; + +void error_init(void) +{ + error_log = fopen("error.log","w"); +} + +void error_shutdown(void) +{ + if(error_log) fclose(error_log); +} + +void error(char *format, ...) +{ + va_list ap; + va_start(ap, format); + if(error_log) vfprintf(error_log, format, ap); + va_end(ap); +} + diff --git a/ genplus-gx/source/unused/dos/error.h b/ genplus-gx/source/unused/dos/error.h new file mode 100644 index 0000000..14dc8e6 --- /dev/null +++ b/ genplus-gx/source/unused/dos/error.h @@ -0,0 +1,13 @@ + +#ifndef _ERROR_H_ +#define _ERROR_H_ + +/* Global variables */ +FILE *error_log; + +/* Function prototypes */ +void error_init(void); +void error_shutdown(void); +void error(char *format, ...); + +#endif /* _ERROR_H_ */ diff --git a/ genplus-gx/source/unused/dos/osd.h b/ genplus-gx/source/unused/dos/osd.h new file mode 100644 index 0000000..2b1c6d0 --- /dev/null +++ b/ genplus-gx/source/unused/dos/osd.h @@ -0,0 +1,18 @@ + +#ifndef _OSD_H_ +#define _OSD_H_ + +#include +#include +#include +#include +#include +#include + +#include "shared.h" +#include "dos.h" +#include "config.h" +#include "sealintf.h" +#include "error.h" + +#endif /* _OSD_H_ */ diff --git a/ genplus-gx/source/unused/fileio.c b/ genplus-gx/source/unused/fileio.c new file mode 100644 index 0000000..b7f57b8 --- /dev/null +++ b/ genplus-gx/source/unused/fileio.c @@ -0,0 +1,153 @@ + +#include "shared.h" + + +/* + Load a normal file, or ZIP/GZ archive. + Returns NULL if an error occured. +*/ +uint8 *load_archive(char *filename, int *file_size) +{ + int size = 0; + uint8 *buf = NULL; + + if(check_zip(filename)) + { + unzFile *fd = NULL; + unz_file_info info; + int ret = 0; + + /* Attempt to open the archive */ + fd = unzOpen(filename); + if(!fd) return (NULL); + + /* Go to first file in archive */ + ret = unzGoToFirstFile(fd); + if(ret != UNZ_OK) + { + unzClose(fd); + return (NULL); + } + + ret = unzGetCurrentFileInfo(fd, &info, NULL, 0, NULL, 0, NULL, 0); + if(ret != UNZ_OK) + { + unzClose(fd); + return (NULL); + } + + /* Open the file for reading */ + ret = unzOpenCurrentFile(fd); + if(ret != UNZ_OK) + { + unzClose(fd); + return (NULL); + } + + /* Allocate file data buffer */ + size = info.uncompressed_size; + buf = malloc(size); + if(!buf) + { + unzClose(fd); + return (NULL); + } + + /* Read (decompress) the file */ + ret = unzReadCurrentFile(fd, buf, info.uncompressed_size); + if(ret != info.uncompressed_size) + { + free(buf); + unzCloseCurrentFile(fd); + unzClose(fd); + return (NULL); + } + + /* Close the current file */ + ret = unzCloseCurrentFile(fd); + if(ret != UNZ_OK) + { + free(buf); + unzClose(fd); + return (NULL); + } + + /* Close the archive */ + ret = unzClose(fd); + if(ret != UNZ_OK) + { + free(buf); + return (NULL); + } + + /* Update file size and return pointer to file data */ + *file_size = size; + return (buf); + } + else + { + gzFile *gd = NULL; + + /* Open file */ + gd = gzopen(filename, "rb"); + if(!gd) return (0); + + /* Get file size */ + size = gzsize(gd); + + /* Allocate file data buffer */ + buf = malloc(size); + if(!buf) + { + gzclose(gd); + return (0); + } + + /* Read file data */ + gzread(gd, buf, size); + + /* Close file */ + gzclose(gd); + + /* Update file size and return pointer to file data */ + *file_size = size; + return (buf); + } +} + + +/* + Verifies if a file is a ZIP archive or not. + Returns: 1= ZIP archive, 0= not a ZIP archive +*/ +int check_zip(char *filename) +{ + uint8 buf[2]; + FILE *fd = NULL; + fd = fopen(filename, "rb"); + if(!fd) return (0); + fread(buf, 2, 1, fd); + fclose(fd); + if(memcmp(buf, "PK", 2) == 0) return (1); + return (0); +} + + +/* + Returns the size of a GZ compressed file. +*/ +int gzsize(gzFile *gd) +{ + #define CHUNKSIZE (0x10000) + int size = 0, length = 0; + unsigned char buffer[CHUNKSIZE]; + gzrewind(gd); + do { + size = gzread(gd, buffer, CHUNKSIZE); + if(size <= 0) break; + length += size; + } while (!gzeof(gd)); + gzrewind(gd); + return (length); + #undef CHUNKSIZE +} diff --git a/ genplus-gx/source/unused/fileio.h b/ genplus-gx/source/unused/fileio.h new file mode 100644 index 0000000..09b0ab7 --- /dev/null +++ b/ genplus-gx/source/unused/fileio.h @@ -0,0 +1,15 @@ + +#ifndef _FILEIO_H_ +#define _FILEIO_H_ + +/* Global variables */ +extern int cart_size; +extern char cart_name[0x100]; + +/* Function prototypes */ +uint8 *load_archive(char *filename, int *file_size); +int load_cart(char *filename); +int check_zip(char *filename); +int gzsize(gzFile *gd); + +#endif /* _FILEIO_H_ */ diff --git a/ genplus-gx/source/unused/loadrom.c b/ genplus-gx/source/unused/loadrom.c new file mode 100644 index 0000000..e0a4381 --- /dev/null +++ b/ genplus-gx/source/unused/loadrom.c @@ -0,0 +1,52 @@ + +#include "shared.h" + +static uint8 block[0x4000]; + +void deinterleave_block(uint8 *src) +{ + int i; + memcpy(block, src, 0x4000); + for(i = 0; i < 0x2000; i += 1) + { + src[i*2+0] = block[0x2000 + (i)]; + src[i*2+1] = block[0x0000 + (i)]; + } +} + +int load_rom(char *filename) +{ + int size, offset = 0; + uint8 header[0x200]; + uint8 *ptr; + + ptr = load_archive(filename, &size); + if(!ptr) return (0); + + if((size / 512) & 1) + { + int i; + + size -= 512; + offset += 512; + + memcpy(header, ptr, 512); + + for(i = 0; i < (size / 0x4000); i += 1) + { + deinterleave_block(ptr + offset + (i * 0x4000)); + } + } + + memset(cart_rom, 0, 0x400000); + if(size > 0x400000) size = 0x400000; + memcpy(cart_rom, ptr + offset, size); + + /* Free allocated file data */ + free(ptr); + + return (1); +} + + + diff --git a/ genplus-gx/source/unused/loadrom.h b/ genplus-gx/source/unused/loadrom.h new file mode 100644 index 0000000..5c654d2 --- /dev/null +++ b/ genplus-gx/source/unused/loadrom.h @@ -0,0 +1,10 @@ + +#ifndef _LOADROM_H_ +#define _LOADROM_H_ + +/* Function prototypes */ +void deinterleave_block(uint8 *src); +int load_rom(char *filename); + +#endif /* _LOADROM_H_ */ + diff --git a/ genplus-gx/source/unused/unzip.c b/ genplus-gx/source/unused/unzip.c new file mode 100644 index 0000000..e56c55f --- /dev/null +++ b/ genplus-gx/source/unused/unzip.c @@ -0,0 +1,1301 @@ +/* unzip.c -- IO on .zip files using zlib + Version 0.15 beta, Mar 19th, 1998, + + Read unzip.h for more info +*/ + + +#include +#include +#include +#include "zlib.h" +#include "unzip.h" + +#ifdef STDC +# include +# include +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + + + +#if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \ + !defined(CASESENSITIVITYDEFAULT_NO) +#define CASESENSITIVITYDEFAULT_NO +#endif + + +#ifndef UNZ_BUFSIZE +#define UNZ_BUFSIZE (16384) +#endif + +#ifndef UNZ_MAXFILENAMEINZIP +#define UNZ_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (malloc(size)) +#endif +#ifndef TRYFREE +# define TRYFREE(p) {if (p) free(p);} +#endif + +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) + +/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ + +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif + +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +const char unz_copyright[] = + " unzip 0.15 Copyright 1998 Gilles Vollant "; + +/* unz_file_info_interntal contain internal info about a file in zipfile*/ +typedef struct unz_file_info_internal_s +{ + uLong offset_curfile;/* relative offset of local header 4 bytes */ +} unz_file_info_internal; + + +/* file_in_zip_read_info_s contain internal information about a file in zipfile, + when reading and decompress it */ +typedef struct +{ + char *read_buffer; /* internal buffer for compressed data */ + z_stream stream; /* zLib stream structure for inflate */ + + uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ + uLong stream_initialised; /* flag set if stream structure is initialised*/ + + uLong offset_local_extrafield;/* offset of the local extra field */ + uInt size_local_extrafield;/* size of the local extra field */ + uLong pos_local_extrafield; /* position in the local extra field in read*/ + + uLong crc32; /* crc32 of all data uncompressed */ + uLong crc32_wait; /* crc32 we must obtain after decompress all */ + uLong rest_read_compressed; /* number of byte to be decompressed */ + uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ + FILE* file; /* io structore of the zipfile */ + uLong compression_method; /* compression method (0==store) */ + uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ +} file_in_zip_read_info_s; + + +/* unz_s contain internal information about the zipfile +*/ +typedef struct +{ + FILE* file; /* io structore of the zipfile */ + unz_global_info gi; /* public global information */ + uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + uLong num_file; /* number of the current file in the zipfile*/ + uLong pos_in_central_dir; /* pos of the current file in the central dir*/ + uLong current_file_ok; /* flag about the usability of the current file*/ + uLong central_pos; /* position of the beginning of the central dir*/ + + uLong size_central_dir; /* size of the central directory */ + uLong offset_central_dir; /* offset of start of central directory with + respect to the starting disk number */ + + unz_file_info cur_file_info; /* public info about the current file in zip*/ + unz_file_info_internal cur_file_info_internal; /* private info about it*/ + file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current + file if we are decompressing it */ +} unz_s; + + +/* =========================================================================== + Read a byte from a gz_stream; update next_in and avail_in. Return EOF + for end of file. + IN assertion: the stream s has been sucessfully opened for reading. +*/ + + +local int unzlocal_getByte(fin,pi) + FILE *fin; + int *pi; +{ + unsigned char c; + int err = fread(&c, 1, 1, fin); + if (err==1) + { + *pi = (int)c; + return UNZ_OK; + } + else + { + if (ferror(fin)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets +*/ +local int unzlocal_getShort (fin,pX) + FILE* fin; + uLong *pX; +{ + uLong x ; + int i; + int err; + + err = unzlocal_getByte(fin,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unzlocal_getByte(fin,&i); + x += ((uLong)i)<<8; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int unzlocal_getLong (fin,pX) + FILE* fin; + uLong *pX; +{ + uLong x ; + int i; + int err; + + err = unzlocal_getByte(fin,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unzlocal_getByte(fin,&i); + x += ((uLong)i)<<8; + + if (err==UNZ_OK) + err = unzlocal_getByte(fin,&i); + x += ((uLong)i)<<16; + + if (err==UNZ_OK) + err = unzlocal_getByte(fin,&i); + x += ((uLong)i)<<24; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + + +/* My own strcmpi / strcasecmp */ +local int strcmpcasenosensitive_internal (fileName1,fileName2) + const char* fileName1; + const char* fileName2; +{ + for (;;) + { + char c1=*(fileName1++); + char c2=*(fileName2++); + if ((c1>='a') && (c1<='z')) + c1 -= 0x20; + if ((c2>='a') && (c2<='z')) + c2 -= 0x20; + if (c1=='\0') + return ((c2=='\0') ? 0 : -1); + if (c2=='\0') + return 1; + if (c1c2) + return 1; + } +} + + +#ifdef CASESENSITIVITYDEFAULT_NO +#define CASESENSITIVITYDEFAULTVALUE 2 +#else +#define CASESENSITIVITYDEFAULTVALUE 1 +#endif + +#ifndef STRCMPCASENOSENTIVEFUNCTION +#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal +#endif + +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) + +*/ +extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity) + const char* fileName1; + const char* fileName2; + int iCaseSensitivity; +{ + if (iCaseSensitivity==0) + iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; + + if (iCaseSensitivity==1) + return strcmp(fileName1,fileName2); + + return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); +} + +#define BUFREADCOMMENT (0x400) + +/* + Locate the Central directory of a zipfile (at the end, just before + the global comment) +*/ +local uLong unzlocal_SearchCentralDir(fin) + FILE *fin; +{ + unsigned char* buf; + uLong uSizeFile; + uLong uBackRead; + uLong uMaxBack=0xffff; /* maximum size of global comment */ + uLong uPosFound=0; + + if (fseek(fin,0,SEEK_END) != 0) + return 0; + + + uSizeFile = ftell( fin ); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); + if (fseek(fin,uReadPos,SEEK_SET)!=0) + break; + + if (fread(buf,(uInt)uReadSize,1,fin)!=1) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + return uPosFound; +} + +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer + "zlib/zlib109.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ +extern unzFile ZEXPORT unzOpen (path) + const char *path; +{ + unz_s us; + unz_s *s; + uLong central_pos,uL; + FILE * fin ; + + uLong number_disk; /* number of the current dist, used for + spaning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number the the disk with central dir, used + for spaning ZIP, unsupported, always 0*/ + uLong number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + + int err=UNZ_OK; + + if (unz_copyright[0]!=' ') + return NULL; + + fin=fopen(path,"rb"); + if (fin==NULL) + return NULL; + + central_pos = unzlocal_SearchCentralDir(fin); + if (central_pos==0) + err=UNZ_ERRNO; + + if (fseek(fin,central_pos,SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unzlocal_getLong(fin,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir on this disk */ + if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir */ + if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* zipfile comment length */ + if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((central_pospfile_in_zip_read!=NULL) + unzCloseCurrentFile(file); + + fclose(s->file); + TRYFREE(s); + return UNZ_OK; +} + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ +extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info) + unzFile file; + unz_global_info *pglobal_info; +{ + unz_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + *pglobal_info=s->gi; + return UNZ_OK; +} + + +/* + Translate date/time from Dos format to tm_unz (readable more easilty) +*/ +local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) + uLong ulDosDate; + tm_unz* ptm; +{ + uLong uDate; + uDate = (uLong)(ulDosDate>>16); + ptm->tm_mday = (uInt)(uDate&0x1f) ; + ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; + ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; + + ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); + ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; + ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; +} + +/* + Get Info about the current file in the zipfile, with internal only info +*/ +local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, + unz_file_info *pfile_info, + unz_file_info_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + +local int unzlocal_GetCurrentFileInfoInternal (file, + pfile_info, + pfile_info_internal, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) + unzFile file; + unz_file_info *pfile_info; + unz_file_info_internal *pfile_info_internal; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; +{ + unz_s* s; + unz_file_info file_info; + unz_file_info_internal file_info_internal; + int err=UNZ_OK; + uLong uMagic; + long lSeek=0; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0) + err=UNZ_ERRNO; + + + /* we check the magic */ + if (err==UNZ_OK) + { + if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x02014b50) + err=UNZ_BADZIPFILE; + } + + if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK) + err=UNZ_ERRNO; + + unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + + if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.size_filename) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.size_file_extra) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.size_file_comment) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.disk_num_start) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.internal_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info.external_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK) + err=UNZ_ERRNO; + + lSeek+=file_info.size_filename; + if ((err==UNZ_OK) && (szFileName!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_filename0) && (fileNameBufferSize>0)) + if (fread(szFileName,(uInt)uSizeRead,1,s->file)!=1) + err=UNZ_ERRNO; + lSeek -= uSizeRead; + } + + + if ((err==UNZ_OK) && (extraField!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_extrafile,lSeek,SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) + if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1) + err=UNZ_ERRNO; + lSeek += file_info.size_file_extra - uSizeRead; + } + else + lSeek+=file_info.size_file_extra; + + + if ((err==UNZ_OK) && (szComment!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_commentfile,lSeek,SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) + if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1) + err=UNZ_ERRNO; + lSeek+=file_info.size_file_comment - uSizeRead; + } + else + lSeek+=file_info.size_file_comment; + + if ((err==UNZ_OK) && (pfile_info!=NULL)) + *pfile_info=file_info; + + if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) + *pfile_info_internal=file_info_internal; + + return err; +} + + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. +*/ +extern int ZEXPORT unzGetCurrentFileInfo (file, + pfile_info, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) + unzFile file; + unz_file_info *pfile_info; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; +{ + return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); +} + +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ +extern int ZEXPORT unzGoToFirstFile (file) + unzFile file; +{ + int err=UNZ_OK; + unz_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + s->pos_in_central_dir=s->offset_central_dir; + s->num_file=0; + err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + + +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ +extern int ZEXPORT unzGoToNextFile (file) + unzFile file; +{ + unz_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + if (s->num_file+1==s->gi.number_entry) + return UNZ_END_OF_LIST_OF_FILE; + + s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + s->num_file++; + err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + + +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzipStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ +extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) + unzFile file; + const char *szFileName; + int iCaseSensitivity; +{ + unz_s* s; + int err; + + + uLong num_fileSaved; + uLong pos_in_central_dirSaved; + + + if (file==NULL) + return UNZ_PARAMERROR; + + if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) + return UNZ_PARAMERROR; + + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + num_fileSaved = s->num_file; + pos_in_central_dirSaved = s->pos_in_central_dir; + + err = unzGoToFirstFile(file); + + while (err == UNZ_OK) + { + char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; + unzGetCurrentFileInfo(file,NULL, + szCurrentFileName,sizeof(szCurrentFileName)-1, + NULL,0,NULL,0); + if (unzStringFileNameCompare(szCurrentFileName, + szFileName,iCaseSensitivity)==0) + return UNZ_OK; + err = unzGoToNextFile(file); + } + + s->num_file = num_fileSaved ; + s->pos_in_central_dir = pos_in_central_dirSaved ; + return err; +} + + +/* + Read the local header of the current zipfile + Check the coherency of the local header and info in the end of central + directory about this file + store in *piSizeVar the size of extra info in local header + (filename and size of extra field data) +*/ +local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, + poffset_local_extrafield, + psize_local_extrafield) + unz_s* s; + uInt* piSizeVar; + uLong *poffset_local_extrafield; + uInt *psize_local_extrafield; +{ + uLong uMagic,uData,uFlags; + uLong size_filename; + uLong size_extra_field; + int err=UNZ_OK; + + *piSizeVar = 0; + *poffset_local_extrafield = 0; + *psize_local_extrafield = 0; + + if (fseek(s->file,s->cur_file_info_internal.offset_curfile + + s->byte_before_the_zipfile,SEEK_SET)!=0) + return UNZ_ERRNO; + + + if (err==UNZ_OK) + { + if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x04034b50) + err=UNZ_BADZIPFILE; + } + + if (unzlocal_getShort(s->file,&uData) != UNZ_OK) + err=UNZ_ERRNO; +/* + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) + err=UNZ_BADZIPFILE; +*/ + if (unzlocal_getShort(s->file,&uFlags) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&uData) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) + err=UNZ_BADZIPFILE; + + if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* date/time */ + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* crc */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size compr */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size uncompr */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + + if (unzlocal_getShort(s->file,&size_filename) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) + err=UNZ_BADZIPFILE; + + *piSizeVar += (uInt)size_filename; + + if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK) + err=UNZ_ERRNO; + *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; + *psize_local_extrafield = (uInt)size_extra_field; + + *piSizeVar += (uInt)size_extra_field; + + return err; +} + +/* + Open for reading data the current file in the zipfile. + If there is no error and the file is opened, the return value is UNZ_OK. +*/ +extern int ZEXPORT unzOpenCurrentFile (file) + unzFile file; +{ + int err=UNZ_OK; + int Store; + uInt iSizeVar; + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + uLong offset_local_extrafield; /* offset of the local extra field */ + uInt size_local_extrafield; /* size of the local extra field */ + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_PARAMERROR; + + if (s->pfile_in_zip_read != NULL) + unzCloseCurrentFile(file); + + if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, + &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + return UNZ_BADZIPFILE; + + pfile_in_zip_read_info = (file_in_zip_read_info_s*) + ALLOC(sizeof(file_in_zip_read_info_s)); + if (pfile_in_zip_read_info==NULL) + return UNZ_INTERNALERROR; + + pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); + pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; + pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; + pfile_in_zip_read_info->pos_local_extrafield=0; + + if (pfile_in_zip_read_info->read_buffer==NULL) + { + TRYFREE(pfile_in_zip_read_info); + return UNZ_INTERNALERROR; + } + + pfile_in_zip_read_info->stream_initialised=0; + + if ((s->cur_file_info.compression_method!=0) && + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + Store = s->cur_file_info.compression_method==0; + + pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; + pfile_in_zip_read_info->crc32=0; + pfile_in_zip_read_info->compression_method = + s->cur_file_info.compression_method; + pfile_in_zip_read_info->file=s->file; + pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; + + pfile_in_zip_read_info->stream.total_out = 0; + + if (!Store) + { + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + + err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=1; + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. + * In unzip, i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ + } + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size ; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size ; + + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; + + pfile_in_zip_read_info->stream.avail_in = (uInt)0; + + + s->pfile_in_zip_read = pfile_in_zip_read_info; + return UNZ_OK; +} + + +/* + Read bytes from the current file. + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ +extern int ZEXPORT unzReadCurrentFile (file, buf, len) + unzFile file; + voidp buf; + unsigned len; +{ + int err=UNZ_OK; + uInt iRead = 0; + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if ((pfile_in_zip_read_info->read_buffer == NULL)) + return UNZ_END_OF_LIST_OF_FILE; + if (len==0) + return 0; + + pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; + + pfile_in_zip_read_info->stream.avail_out = (uInt)len; + + if (len>pfile_in_zip_read_info->rest_read_uncompressed) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_uncompressed; + + while (pfile_in_zip_read_info->stream.avail_out>0) + { + if ((pfile_in_zip_read_info->stream.avail_in==0) && + (pfile_in_zip_read_info->rest_read_compressed>0)) + { + uInt uReadThis = UNZ_BUFSIZE; + if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; + if (uReadThis == 0) + return UNZ_EOF; + if (fseek(pfile_in_zip_read_info->file, + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0) + return UNZ_ERRNO; + if (fread(pfile_in_zip_read_info->read_buffer,uReadThis,1, + pfile_in_zip_read_info->file)!=1) + return UNZ_ERRNO; + pfile_in_zip_read_info->pos_in_zipfile += uReadThis; + + pfile_in_zip_read_info->rest_read_compressed-=uReadThis; + + pfile_in_zip_read_info->stream.next_in = + (Bytef*)pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; + } + + if (pfile_in_zip_read_info->compression_method==0) + { + uInt uDoCopy,i ; + if (pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in) + uDoCopy = pfile_in_zip_read_info->stream.avail_out ; + else + uDoCopy = pfile_in_zip_read_info->stream.avail_in ; + + for (i=0;istream.next_out+i) = + *(pfile_in_zip_read_info->stream.next_in+i); + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, + pfile_in_zip_read_info->stream.next_out, + uDoCopy); + pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + pfile_in_zip_read_info->stream.avail_in -= uDoCopy; + pfile_in_zip_read_info->stream.avail_out -= uDoCopy; + pfile_in_zip_read_info->stream.next_out += uDoCopy; + pfile_in_zip_read_info->stream.next_in += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; + iRead += uDoCopy; + } + else + { + uLong uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + uLong uOutThis; + int flush=Z_SYNC_FLUSH; + + uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; + bufBefore = pfile_in_zip_read_info->stream.next_out; + + /* + if ((pfile_in_zip_read_info->rest_read_uncompressed == + pfile_in_zip_read_info->stream.avail_out) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + flush = Z_FINISH; + */ + err=inflate(&pfile_in_zip_read_info->stream,flush); + + uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; + uOutThis = uTotalOutAfter-uTotalOutBefore; + + pfile_in_zip_read_info->crc32 = + crc32(pfile_in_zip_read_info->crc32,bufBefore, + (uInt)(uOutThis)); + + pfile_in_zip_read_info->rest_read_uncompressed -= + uOutThis; + + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + if (err==Z_STREAM_END) + return (iRead==0) ? UNZ_EOF : iRead; + if (err!=Z_OK) + break; + } + } + + if (err==Z_OK) + return iRead; + return err; +} + + +/* + Give the current position in uncompressed data +*/ +extern z_off_t ZEXPORT unztell (file) + unzFile file; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + return (z_off_t)pfile_in_zip_read_info->stream.total_out; +} + + +/* + return 1 if the end of file was reached, 0 elsewhere +*/ +extern int ZEXPORT unzeof (file) + unzFile file; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + return 1; + else + return 0; +} + + + +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field that can be read + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ +extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) + unzFile file; + voidp buf; + unsigned len; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + uInt read_now; + uLong size_to_read; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + size_to_read = (pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield); + + if (buf==NULL) + return (int)size_to_read; + + if (len>size_to_read) + read_now = (uInt)size_to_read; + else + read_now = (uInt)len ; + + if (read_now==0) + return 0; + + if (fseek(pfile_in_zip_read_info->file, + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0) + return UNZ_ERRNO; + + if (fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1) + return UNZ_ERRNO; + + return (int)read_now; +} + +/* + Close the file in zip opened with unzipOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ +extern int ZEXPORT unzCloseCurrentFile (file) + unzFile file; +{ + int err=UNZ_OK; + + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + { + if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) + err=UNZ_CRCERROR; + } + + + TRYFREE(pfile_in_zip_read_info->read_buffer); + pfile_in_zip_read_info->read_buffer = NULL; + if (pfile_in_zip_read_info->stream_initialised) + inflateEnd(&pfile_in_zip_read_info->stream); + + pfile_in_zip_read_info->stream_initialised = 0; + TRYFREE(pfile_in_zip_read_info); + + s->pfile_in_zip_read=NULL; + + return err; +} + + +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ +extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) + unzFile file; + char *szComment; + uLong uSizeBuf; +{ +/* int err=UNZ_OK; */ + unz_s* s; + uLong uReadThis ; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + + uReadThis = uSizeBuf; + if (uReadThis>s->gi.size_comment) + uReadThis = s->gi.size_comment; + + if (fseek(s->file,s->central_pos+22,SEEK_SET)!=0) + return UNZ_ERRNO; + + if (uReadThis>0) + { + *szComment='\0'; + if (fread(szComment,(uInt)uReadThis,1,s->file)!=1) + return UNZ_ERRNO; + } + + if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) + *(szComment+s->gi.size_comment)='\0'; + return (int)uReadThis; +} diff --git a/ genplus-gx/source/unused/unzip.h b/ genplus-gx/source/unused/unzip.h new file mode 100644 index 0000000..b8b02c0 --- /dev/null +++ b/ genplus-gx/source/unused/unzip.h @@ -0,0 +1,274 @@ +/* unzip.h -- IO for uncompress .zip files using zlib + Version 0.15 beta, Mar 19th, 1998, + + Copyright (C) 1998 Gilles Vollant + + This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g + WinZip, InfoZip tools and compatible. + Encryption and multi volume ZipFile (span) are not supported. + Old compressions used by old PKZip 1.x are not supported + + THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE + CAN CHANGE IN FUTURE VERSION !! + I WAIT FEEDBACK at mail info@winimage.com + Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* for more info about .ZIP format, see + ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip + PkWare has also a specification at : + ftp://ftp.pkware.com/probdesc.zip */ + +#ifndef _unz_H +#define _unz_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagunzFile__ { int unused; } unzFile__; +typedef unzFile__ *unzFile; +#else +typedef voidp unzFile; +#endif + + +#define UNZ_OK (0) +#define UNZ_END_OF_LIST_OF_FILE (-100) +#define UNZ_ERRNO (Z_ERRNO) +#define UNZ_EOF (0) +#define UNZ_PARAMERROR (-102) +#define UNZ_BADZIPFILE (-103) +#define UNZ_INTERNALERROR (-104) +#define UNZ_CRCERROR (-105) + +/* tm_unz contain date/time info */ +typedef struct tm_unz_s +{ + uInt tm_sec; /* seconds after the minute - [0,59] */ + uInt tm_min; /* minutes after the hour - [0,59] */ + uInt tm_hour; /* hours since midnight - [0,23] */ + uInt tm_mday; /* day of the month - [1,31] */ + uInt tm_mon; /* months since January - [0,11] */ + uInt tm_year; /* years - [1980..2044] */ +} tm_unz; + +/* unz_global_info structure contain global data about the ZIPfile + These data comes from the end of central dir */ +typedef struct unz_global_info_s +{ + uLong number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info; + + +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_info_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + uLong compressed_size; /* compressed size 4 bytes */ + uLong uncompressed_size; /* uncompressed size 4 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info; + +extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, + const char* fileName2, + int iCaseSensitivity)); +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) +*/ + + +extern unzFile ZEXPORT unzOpen OF((const char *path)); +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows NT computer "c:\\zlib\\zlib111.zip" or on an Unix computer + "zlib/zlib111.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ + +extern int ZEXPORT unzClose OF((unzFile file)); +/* + Close a ZipFile opened with unzipOpen. + If there is files inside the .Zip opened with unzOpenCurrentFile (see later), + these files MUST be closed with unzipCloseCurrentFile before call unzipClose. + return UNZ_OK if there is no problem. */ + +extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, + unz_global_info *pglobal_info)); +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ + + +extern int ZEXPORT unzGetGlobalComment OF((unzFile file, + char *szComment, + uLong uSizeBuf)); +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ + + +/***************************************************************************/ +/* Unzip package allow you browse the directory of the zipfile */ + +extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ + +extern int ZEXPORT unzGoToNextFile OF((unzFile file)); +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ + +extern int ZEXPORT unzLocateFile OF((unzFile file, + const char *szFileName, + int iCaseSensitivity)); +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ + + +extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, + unz_file_info *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); +/* + Get Info about the current file + if pfile_info!=NULL, the *pfile_info structure will contain somes info about + the current file + if szFileName!=NULL, the filemane string will be copied in szFileName + (fileNameBufferSize is the size of the buffer) + if extraField!=NULL, the extra field information will be copied in extraField + (extraFieldBufferSize is the size of the buffer). + This is the Central-header version of the extra field + if szComment!=NULL, the comment string of the file will be copied in szComment + (commentBufferSize is the size of the buffer) +*/ + +/***************************************************************************/ +/* for reading the content of the current zipfile, you can open it, read data + from it, and close it (you can close it before reading all the file) + */ + +extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); +/* + Open for reading data the current file in the zipfile. + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); +/* + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ + + +extern int ZEXPORT unzReadCurrentFile OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read bytes from the current file (opened by unzOpenCurrentFile) + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ + +extern z_off_t ZEXPORT unztell OF((unzFile file)); +/* + Give the current position in uncompressed data +*/ + +extern int ZEXPORT unzeof OF((unzFile file)); +/* + return 1 if the end of file was reached, 0 elsewhere +*/ + +extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _unz_H */ diff --git a/ genplus-gx/source/unused/win/error.c b/ genplus-gx/source/unused/win/error.c new file mode 100644 index 0000000..9bfa15d --- /dev/null +++ b/ genplus-gx/source/unused/win/error.c @@ -0,0 +1,39 @@ +/* + error.c -- + Error logging +*/ + +#include "shared.h" + +FILE *error_log; + +struct { + int enabled; + int verbose; + FILE *log; +} t_error; + +void error_init(void) +{ +#ifdef DEBUG + error_log = fopen("error.log","w"); +#endif +} + +void error_shutdown(void) +{ +#ifdef DEBUG + if(error_log) fclose(error_log); +#endif +} + +void error(char *format, ...) +{ +#ifdef DEBUG + va_list ap; + va_start(ap, format); + if(error_log) vfprintf(error_log, format, ap); + va_end(ap); +#endif +} + diff --git a/ genplus-gx/source/unused/win/error.h b/ genplus-gx/source/unused/win/error.h new file mode 100644 index 0000000..14dc8e6 --- /dev/null +++ b/ genplus-gx/source/unused/win/error.h @@ -0,0 +1,13 @@ + +#ifndef _ERROR_H_ +#define _ERROR_H_ + +/* Global variables */ +FILE *error_log; + +/* Function prototypes */ +void error_init(void); +void error_shutdown(void); +void error(char *format, ...); + +#endif /* _ERROR_H_ */ diff --git a/ genplus-gx/source/unused/win/main.c b/ genplus-gx/source/unused/win/main.c new file mode 100644 index 0000000..7ba316b --- /dev/null +++ b/ genplus-gx/source/unused/win/main.c @@ -0,0 +1,203 @@ + +#include +#include +#include "shared.h" + +int timer_count = 0; +int old_timer_count = 0; +int paused = 0; +int frame_count = 0; + +int update_input(void); +unsigned char *keystate; + + +Uint32 fps_callback(Uint32 interval) +{ + if(paused) return 1000/60; + timer_count++; + if(timer_count % 60 == 0) + { + int fps = frame_count; + char caption[32]; + sprintf(caption, "Genesis Plus/SDL FPS=%d", fps); + SDL_WM_SetCaption(caption, NULL); + frame_count = 0; + } + return 1000/60; +} + + +int main (int argc, char **argv) +{ + int running = 1; + + SDL_Rect viewport, src; + SDL_Surface *bmp, *screen; + SDL_Event event; + + error_init(); + + /* Print help if no game specified */ + if(argc < 2) + { + char caption[256]; + sprintf(caption, "Genesis Plus\nby Charles MacDonald\nWWW: http://cgfm2.emuviews.com\nusage: %s gamename\n", argv[0]); + MessageBox(NULL, caption, "Information", 0); + exit(1); + } + + /* Load game */ + if(!load_rom(argv[1])) + { + char caption[256]; + sprintf(caption, "Error loading file `%s'.", argv[1]); + MessageBox(NULL, caption, "Error", 0); + exit(1); + } + + viewport.x = 0; + viewport.y = 0; + viewport.w = 256; + viewport.h = 224; + + src.x = 32; + src.y = 0; + src.w = viewport.w; + src.h = viewport.h; + + if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) + { + exit(1); + } + SDL_WM_SetCaption("Genesis Plus/SDL", NULL); + + screen = SDL_SetVideoMode(viewport.w, viewport.h, 16, SDL_SWSURFACE); + viewport.x = 0; + viewport.y = 0; + + bmp = SDL_CreateRGBSurface(SDL_SWSURFACE, 1024, 512, 16, 0xF800, 0x07E0, 0x001F, 0x0000); + + + + memset(&bitmap, 0, sizeof(t_bitmap)); + bitmap.width = 1024; + bitmap.height = 512; + bitmap.depth = 16; + bitmap.granularity = 2; + bitmap.pitch = (bitmap.width * bitmap.granularity); + bitmap.data = (unsigned char *)bmp->pixels; + bitmap.viewport.w = 256; + bitmap.viewport.h = 224; + bitmap.viewport.x = 0x20; + bitmap.viewport.y = 0x00; + bitmap.remap = 1; + + system_init(); + system_reset(); + + SDL_SetTimer(1000/60, fps_callback); + + while(running) + { + running = update_input(); + + while (SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_QUIT: /* Windows was closed */ + running = 0; + break; + + case SDL_ACTIVEEVENT: /* Window focus changed or was minimized */ + if(event.active.state & (SDL_APPINPUTFOCUS | SDL_APPACTIVE)) + { + paused = !event.active.gain; + } + break; + + default: + break; + } + } + + if(!paused) + { + frame_count++; + + update_input(); + + if(!system_frame(0)) + system_reset(); + + if(bitmap.viewport.changed) + { + bitmap.viewport.changed = 0; + src.w = bitmap.viewport.w; + src.h = bitmap.viewport.h; + viewport.w = bitmap.viewport.w; + viewport.h = bitmap.viewport.h; + screen = SDL_SetVideoMode(bitmap.viewport.w, bitmap.viewport.h, 16, SDL_SWSURFACE); + } + + SDL_BlitSurface(bmp, &src, screen, &viewport); + SDL_UpdateRect(screen, viewport.x, viewport.y, viewport.w, viewport.h); + } + } + + system_shutdown(); + SDL_Quit(); + error_shutdown(); + + return 0; +} + + +/* Check if a key is pressed */ +int check_key(int code) +{ + static char lastbuf[0x100] = {0}; + + if((!keystate[code]) && (lastbuf[code] == 1)) + lastbuf[code] = 0; + + if((keystate[code]) && (lastbuf[code] == 0)) + { + lastbuf[code] = 1; + return (1); + } + + return (0); +} + +int update_input(void) +{ + int running = 1; + + keystate = SDL_GetKeyState(NULL); + + memset(&input, 0, sizeof(t_input)); + if(keystate[SDLK_UP]) input.pad[0] |= INPUT_UP; + else + if(keystate[SDLK_DOWN]) input.pad[0] |= INPUT_DOWN; + if(keystate[SDLK_LEFT]) input.pad[0] |= INPUT_LEFT; + else + if(keystate[SDLK_RIGHT]) input.pad[0] |= INPUT_RIGHT; + + if(keystate[SDLK_a]) input.pad[0] |= INPUT_A; + if(keystate[SDLK_s]) input.pad[0] |= INPUT_B; + if(keystate[SDLK_d]) input.pad[0] |= INPUT_C; + if(keystate[SDLK_f]) input.pad[0] |= INPUT_START; + if(keystate[SDLK_z]) input.pad[0] |= INPUT_X; + if(keystate[SDLK_x]) input.pad[0] |= INPUT_Y; + if(keystate[SDLK_c]) input.pad[0] |= INPUT_Z; + if(keystate[SDLK_v]) input.pad[0] |= INPUT_MODE; + + if(keystate[SDLK_TAB]) system_reset(); + + if(keystate[SDLK_ESCAPE]) running = 0; + return (running); +} + + diff --git a/ genplus-gx/source/unused/win/main.h b/ genplus-gx/source/unused/win/main.h new file mode 100644 index 0000000..b369df6 --- /dev/null +++ b/ genplus-gx/source/unused/win/main.h @@ -0,0 +1,7 @@ + +#ifndef _MAIN_H_ +#define _MAIN_H_ + + + +#endif /* _MAIN_H_ */ diff --git a/ genplus-gx/source/unused/win/osd.h b/ genplus-gx/source/unused/win/osd.h new file mode 100644 index 0000000..46f6e7e --- /dev/null +++ b/ genplus-gx/source/unused/win/osd.h @@ -0,0 +1,18 @@ + +#ifndef _OSD_H_ +#define _OSD_H_ + +#include +#include +#include +#include +#include + +#include "SDL.h" +#include + +#include "error.h" +#include "shared.h" +#include "main.h" + +#endif /* _OSD_H_ */ diff --git a/ genplus-gx/source/vdp.c b/ genplus-gx/source/vdp.c new file mode 100644 index 0000000..0f7d021 --- /dev/null +++ b/ genplus-gx/source/vdp.c @@ -0,0 +1,608 @@ + +#include "shared.h" +#include "hvc.h" + +/* Pack and unpack CRAM data */ +#define PACK_CRAM(d) ((((d)&0xE00)>>9)|(((d)&0x0E0)>>2)|(((d)&0x00E)<<5)) +#define UNPACK_CRAM(d) ((((d)&0x1C0)>>5)|((d)&0x038)<<2|(((d)&0x007)<<9)) + +/* Mark a pattern as dirty */ +#define MARK_BG_DIRTY(addr) \ +{ \ + int name = (addr >> 5) & 0x7FF; \ + if(bg_name_dirty[name] == 0) bg_name_list[bg_list_index++] = name; \ + bg_name_dirty[name] |= (1 << ((addr >> 2) & 0x07)); \ +} + +/* Tables that define the playfield layout */ +uint8 shift_table[] = { 6, 7, 0, 8 }; +uint8 col_mask_table[] = { 0x0F, 0x1F, 0x0F, 0x3F }; +uint16 row_mask_table[] = { 0x0FF, 0x1FF, 0x2FF, 0x3FF }; +uint32 y_mask_table[] = { 0x1FC0, 0x1F80, 0x1FC0, 0x1F00 }; + +/* DMA Timings Table + + + DMA Mode Width Display Transfer Count + ----------------------------------------------------- + 68K > VDP 32-cell Active 16 + Blanking 167 + 40-cell Active 18 + Blanking 205 + VRAM Fill 32-cell Active 15 + Blanking 166 + 40-cell Active 17 + Blanking 204 + VRAM Copy 32-cell Active 8 + Blanking 83 + 40-cell Active 9 + Blanking 102 + +*/ + +uint8 dmarate_table[16] = { + 83 , 102, 8, 9, // M68k to VRAM + 167, 205, 16, 18, // M68k to VSRAM or CRAM + 166, 204, 15, 17, // DMA fill + 83 , 102, 8, 9 // DMA Copy +}; + +uint8 sat[0x400]; /* Internal copy of sprite attribute table */ +uint8 vram[0x10000]; /* Video RAM (64Kx8) */ +uint8 cram[0x80]; /* On-chip color RAM (64x9) */ +uint8 vsram[0x80]; /* On-chip vertical scroll RAM (40x11) */ +uint8 reg[0x20]; /* Internal VDP registers (23x8) */ +uint16 addr; /* Address register */ +uint16 addr_latch; /* Latched A15, A14 of address */ +uint8 code; /* Code register */ +uint8 pending; /* Pending write flag */ +uint16 status; /* VDP status flags */ +uint16 ntab; /* Name table A base address */ +uint16 ntbb; /* Name table B base address */ +uint16 ntwb; /* Name table W base address */ +uint16 satb; /* Sprite attribute table base address */ +uint16 hscb; /* Horizontal scroll table base address */ +uint16 sat_base_mask; /* Base bits of SAT */ +uint16 sat_addr_mask; /* Index bits of SAT */ +uint8 border; /* Border color index */ +uint8 bg_name_dirty[0x800]; /* 1= This pattern is dirty */ +uint16 bg_name_list[0x800]; /* List of modified pattern indices */ +uint16 bg_list_index; /* # of modified patterns in list */ +uint8 bg_pattern_cache[0x80000]; /* Cached and flipped patterns */ +uint8 playfield_shift; /* Width of planes A, B (in bits) */ +uint8 playfield_col_mask; /* Vertical scroll mask */ +uint16 playfield_row_mask; /* Horizontal scroll mask */ +uint32 y_mask; /* Name table Y-index bits mask */ +uint8 hint_pending; /* 0= Line interrupt is pending */ +uint8 vint_pending; /* 1= Frame interrupt is pending */ +int16 h_counter; /* Raster counter */ +int16 hc_latch; /* latched HCounter (INT2) */ +uint16 v_counter; /* VDP scan line counter */ +uint8 im2_flag; /* 1= Interlace mode 2 is being used */ +uint16 frame_end; /* End-of-frame (IRQ line) */ +uint8 dmafill; /* 1= DMA fill has been requested */ +uint32 dma_endCycles; /* DMA ending cycles count */ +uint8 vdp_pal = 0 ; /* CPU mode (NTSC by default) */ +uint8 vdp_rate = 60; /* CPU speed (60Hz by default)*/ +void (*color_update) (int index, uint16 data); + +uint8 dmatiming = 1; +uint8 vdptiming = 0; +uint8 irqtiming = 0; + +/*--------------------------------------------------------------------------*/ +/* Init, reset, shutdown functions */ +/*--------------------------------------------------------------------------*/ +void vdp_init (void) +{} + +void vdp_reset (void) +{ + memset ((char *) sat, 0, sizeof (sat)); + memset ((char *) vram, 0, sizeof (vram)); + memset ((char *) cram, 0, sizeof (cram)); + memset ((char *) vsram, 0, sizeof (vsram)); + memset ((char *) reg, 0, sizeof (reg)); + + addr = addr_latch = code = pending = 0; + ntab = ntbb = ntwb = satb = hscb = 0; + sat_base_mask = 0xFE00; + sat_addr_mask = 0x01FF; + + /* Mark all colors as dirty to force a palette update */ + border = 0x00; + + memset ((char *) bg_name_dirty, 0, sizeof (bg_name_dirty)); + memset ((char *) bg_name_list, 0, sizeof (bg_name_list)); + bg_list_index = 0; + memset ((char *) bg_pattern_cache, 0, sizeof (bg_pattern_cache)); + + playfield_shift = 6; + playfield_col_mask = 0x0F; + playfield_row_mask = 0x0FF; + y_mask = 0x1FC0; + + hint_pending = vint_pending = 0; + h_counter = 0; + hc_latch = -1; + v_counter = 0; + dmafill = 0; + im2_flag = 0; + frame_end = 0xE0; + dma_endCycles = 0; + + status = 0x200; /* fifo empty - all other flags clear */ + + /* Initialize viewport */ + bitmap.viewport.x = 0x20; + bitmap.viewport.y = 0x20; + bitmap.viewport.w = 256; + bitmap.viewport.h = 224; + bitmap.viewport.oh = 256; + bitmap.viewport.ow = 224; + bitmap.viewport.changed = 1; +} + +void vdp_shutdown (void) +{} + +/*--------------------------------------------------------------------------*/ +/* DMA Operations */ +/*--------------------------------------------------------------------------*/ + +/* DMA Timings */ +/* timing type = 0 (Copy to VRAM), 1 (Copy to VSRAM or CRAM), 2 (VRAM Fill), 3 (VRAM Copy) */ +void dma_update(int type, int length) +{ + uint32 dma_cycles; + uint8 index = 4 * type; /* DMA timing type */ + + if (!dmatiming) return; + + /* get the appropriate tranfer rate (bytes/line) for this DMA operation */ + if (!(status&8) && (reg[1]&0x40)) index += 2; /* not in VBLANK and Display ON */ + index += (reg[12] & 1); /* 32 or 40 Horizontal Cells */ + + /* determinate associated 68kcycles number */ + dma_cycles = (misc68Kcycles * length ) / dmarate_table[index]; + + if (type < 2) + { + /* 68K COPY to V-RAM */ + /* 68K is frozen during DMA operation */ + m68k_freeze(dma_cycles); + } + else + { + /* VRAM Fill or VRAM Copy */ + /* we keep the number of cycles executed so far */ + /* used for DMA Busy flag update on status read */ + dma_endCycles = count_m68k + m68k_cycles_run() + dma_cycles; + dma_m68k = 0; + + /* set DMA Busy flag */ + status |= 0x0002; + } +} + +/* VRAM to VRAM copy + Read byte from VRAM (source), write to VRAM (addr), + bump source and add r15 to addr. + + - see how source addr is affected + (can it make high source byte inc?) */ +void dma_copy (void) +{ + int length = (reg[20] << 8 | reg[19]) & 0xFFFF; + int source = (reg[22] << 8 | reg[21]) & 0xFFFF; + if (!length) length = 0x10000; + + dma_update(3,length); + + do + { + vram[addr] = vram[source]; + MARK_BG_DIRTY (addr); + source = (source + 1) & 0xFFFF; + addr += reg[15]; + } + while (--length); + + reg[19] = length & 0xFF; + reg[20] = (length >> 8) & 0xFF; + reg[21] = source & 0xFF; /* not sure */ + reg[22] = (source >> 8) & 0xFF; +} + + +/* 68K Copy to VRAM, VSRAM or CRAM */ +void dma_vbus (void) +{ + uint32 base, source = ((reg[23] & 0x7F) << 17 | reg[22] << 9 | reg[21] << 1) & 0xFFFFFE; + uint32 length = (reg[20] << 8 | reg[19]) & 0xFFFF; + uint8 old_vdptiming = vdptiming; + + if (!length) length = 0x10000; + base = source; + + /* DMA timings */ + if ((code & 0x0F) == 0x01) dma_update(0,length); /* VRAM */ + else dma_update(1,length); /* CRAM & VSRAM */ + vdptiming = 0; + + do + { + uint16 temp = vdp_dma_r (source); + source += 2; + source = ((base & 0xFE0000) | (source & 0x1FFFF)); + vdp_data_w (temp); + } + while (--length); + + vdptiming = old_vdptiming; + reg[19] = length & 0xFF; + reg[20] = (length >> 8) & 0xFF; + reg[21] = (source >> 1) & 0xFF; + reg[22] = (source >> 9) & 0xFF; + reg[23] = (reg[23] & 0x80) | ((source >> 17) & 0x7F); +} + +/* VRAM FILL */ +void dma_fill(uint16 data) +{ + int length = (reg[20] << 8 | reg[19]) & 0xFFFF; + + if (!length) length = 0x10000; + + dma_update(2, length); + WRITE_BYTE(vram, addr, data & 0xFF); + + do + { + WRITE_BYTE(vram, addr^1, (data >> 8) & 0xFF); + MARK_BG_DIRTY (addr); + addr += reg[15]; + } + while (--length); + + reg[19] = length & 0xFF; + reg[20] = (length >> 8) & 0xFF; + dmafill = 0; +} + + +/*--------------------------------------------------------------------------*/ +/* Memory access functions */ +/*--------------------------------------------------------------------------*/ + +void vdp_ctrl_w (uint16 data) +{ + if (pending == 0) + { + if ((data & 0xC000) == 0x8000) + { + uint8 r = (data >> 8) & 0x1F; + uint8 d = data & 0xFF; + vdp_reg_w (r, d); + } + else pending = 1; + + addr = ((addr_latch & 0xC000) | (data & 0x3FFF)) & 0xFFFF; + code = ((code & 0x3C) | ((data >> 14) & 0x03)) & 0x3F; + } + else + { + /* Clear pending flag */ + pending = 0; + + /* Update address and code registers */ + addr = ((addr & 0x3FFF) | ((data & 3) << 14)) & 0xFFFF; + code = ((code & 0x03) | ((data >> 2) & 0x3C)) & 0x3F; + + /* Save address bits A15 and A14 */ + addr_latch = (addr & 0xC000); + + if ((code & 0x20) && (reg[1] & 0x10)) + { + switch (reg[23] & 0xC0) + { + case 0x00: /* V bus to VDP DMA */ + case 0x40: /* V bus to VDP DMA */ + dma_vbus (); + break; + + case 0x80: /* VRAM fill */ + dmafill = 1; + break; + + case 0xC0: /* VRAM copy */ + dma_copy (); + break; + } + } + } +} + +uint16 vdp_ctrl_r (void) +{ + /** + * Return vdp status + * + * Bits are + * 0 0:1 ntsc:pal + * 1 DMA Busy + * 2 During HBlank + * 3 During VBlank + * 4 Frame Interlace 0:even 1:odd + * 5 Sprite collision + * 6 Too many sprites per line + * 7 v interrupt occurred + * 8 Write FIFO full + * 9 Write FIFO empty + * 10 - 15 Next word on bus + */ + + uint16 temp; + int dma_lastCycles = dma_endCycles - (dma_m68k + count_m68k + m68k_cycles_run()); + + /* reset DMA status flag if needed */ + if ((status & 0x0002) && (dma_lastCycles <= 0)) status &= 0xFFFD; + + temp = status | vdp_pal; + pending = 0; + + /* reset status */ + status ^= 0xFF00; /* toggle FIFO status & new word on bus */ + status &= 0xFF9F; /* clear sprite overflow & sprite collision */ + if (!(status & 8)) status &= ~0x0080; /* not in VBLANK: clear vint flag */ + + if (!(reg[1] & 0x40)) temp |= 0x8; /* no display => in VBLANK*/ + + return (temp); +} + + +void vdp_data_w (uint16 data) +{ + /* Clear pending flag */ + pending = 0; + + if (dmafill) + { + dma_fill(data); + return; + } + + /* delays VDP RAM access */ + /* hack for Chaos Engine / Soldiers of Fortune */ + if (vdptiming && !(status&8) && (reg[1]&0x40)) + { + if (reg[12] & 1) m68k_freeze(30); // 40 cell + else m68k_freeze(27); // 32 cell + } + + switch (code & 0x0F) + { + case 0x01: /* VRAM */ + + /* Byte-swap data if A0 is set */ + if (addr & 1) data = (data >> 8) | (data << 8); + + /* Copy SAT data to the internal SAT */ + if ((addr & sat_base_mask) == satb) + { + *(uint16 *) & sat[addr & sat_addr_mask] = data; + } + + /* Only write unique data to VRAM */ + if (data != *(uint16 *) & vram[addr & 0xFFFE]) + { + /* Write data to VRAM */ + *(uint16 *) & vram[addr & 0xFFFE] = data; + + /* Update the pattern cache */ + MARK_BG_DIRTY (addr); + } + break; + + case 0x03: /* CRAM */ + { + uint16 *p = (uint16 *) & cram[(addr & 0x7E)]; + data = PACK_CRAM (data & 0x0EEE); + if (data != *p) + { + int index = (addr >> 1) & 0x3F; + *p = data; + color_update (index, *p); + color_update (0x00, *(uint16 *)&cram[border << 1]); + /*color_update (0x40, *(uint16 *)&cram[border << 1]); + color_update (0x80, *(uint16 *)&cram[border << 1]);*/ + } + } + break; + + case 0x05: /* VSRAM */ + *(uint16 *) & vsram[(addr & 0x7E)] = data; + break; + } + + /* Bump address register */ + addr += reg[15]; + +} + + +uint16 vdp_data_r (void) +{ + uint16 temp = 0; + + /* Clear pending flag */ + pending = 0; + + switch (code & 0x0F) + { + case 0x00: /* VRAM */ + temp = *(uint16 *) & vram[(addr & 0xFFFE)]; + break; + + case 0x08: /* CRAM */ + temp = *(uint16 *) & cram[(addr & 0x7E)]; + temp = UNPACK_CRAM (temp); + break; + + case 0x04: /* VSRAM */ + temp = *(uint16 *) & vsram[(addr & 0x7E)]; + break; + } + + /* Bump address register */ + addr += reg[15]; + + /* return data */ + return (temp); +} + + +/* + The reg[] array is updated at the *end* of this function, so the new + register data can be compared with the previous data. +*/ +void vdp_reg_w (uint8 r, uint8 d) +{ + switch (r) + { + case 0x00: /* CTRL #1 */ + if (vint_pending && (reg[1] & 0x20)) m68k_set_irq (6); + else if (hint_pending && (d & 0x10)) m68k_set_irq (4); + else m68k_set_irq (0); + if (!(d & 0x02)) hc_latch = -1; + + break; + + case 0x01: /* CTRL #2 */ + if (vint_pending && (d & 0x20)) + { + if (irqtiming) m68k_run(count_m68k + 24); /* hack for Sesame's Street */ + m68k_set_irq (6); + } + else if (hint_pending && (reg[0] & 0x10)) m68k_set_irq (4); /* fix Lemmings status bar */ + else m68k_set_irq (0); + + /* Change the frame timing */ + frame_end = (d & 8) ? 0xF0 : 0xE0; + + /* Check if the viewport height has actually been changed */ + if ((reg[1] & 8) != (d & 8)) + { + /* Update the height of the viewport */ + bitmap.viewport.oh = bitmap.viewport.h; + bitmap.viewport.h = (d & 8) ? 240 : 224; + bitmap.viewport.changed = 1; + } + break; + + case 0x02: /* NTAB */ + ntab = (d << 10) & 0xE000; + break; + + case 0x03: /* NTWB */ + ntwb = (d << 10) & ((reg[12] & 1) ? 0xF000 : 0xF800); + break; + + case 0x04: /* NTBB */ + ntbb = (d << 13) & 0xE000; + break; + + case 0x05: /* SATB */ + sat_base_mask = (reg[12] & 1) ? 0xFC00 : 0xFE00; + sat_addr_mask = (reg[12] & 1) ? 0x03FF : 0x01FF; + satb = (d << 9) & sat_base_mask; + break; + + case 0x07: + d &= 0x3F; + + /* Check if the border color has actually changed */ + if (border != d) + { + /* Mark the border color as modified */ + border = d; + color_update (0x00, *(uint16 *) & cram[(border << 1)]); + /*color_update (0x40, *(uint16 *) & cram[(border << 1)]); + color_update (0x80, *(uint16 *) & cram[(border << 1)]);*/ + } + break; + + case 0x0C: + /* Check if the viewport width has actually been changed */ + if ((reg[0x0C] & 1) != (d & 1)) + { + /* Update the width of the viewport */ + bitmap.viewport.ow = bitmap.viewport.w; + bitmap.viewport.w = (d & 1) ? 320 : 256; + bitmap.viewport.changed = 1; + } + + /* See if the S/TE mode bit has changed */ + if ((reg[0x0C] & 8) != (d & 8)) + { + int i; + reg[0x0C] = d; + + /* Update colors */ + for (i = 0; i < 0x40; i += 1) color_update (i, *(uint16 *) & cram[i << 1]); + color_update (0x00, *(uint16 *) & cram[border << 1]); + /*color_update (0x40, *(uint16 *) & cram[border << 1]); + color_update (0x80, *(uint16 *) & cram[border << 1]);*/ + + /* Flush palette */ + } + + /* Check interlace mode 2 setting */ + im2_flag = ((d & 0x06) == 0x06) ? 1 : 0; + + /* The following register updates check this value */ + reg[0x0C] = d; + + /* Update display-dependant registers */ + vdp_reg_w (0x03, reg[0x03]); + vdp_reg_w (0x05, reg[0x05]); + break; + + case 0x0D: /* HSCB */ + hscb = (d << 10) & 0xFC00; + break; + + case 0x10: /* Playfield size */ + playfield_shift = shift_table[(d & 3)]; + playfield_col_mask = col_mask_table[(d & 3)]; + playfield_row_mask = row_mask_table[(d >> 4) & 3]; + y_mask = y_mask_table[(d & 3)]; + break; + } + + /* Write new register value */ + reg[r] = d; +} + + +uint16 vdp_hvc_r (void) +{ + int cycles = (count_m68k + m68k_cycles_run ()) % misc68Kcycles; + uint8 *hctab = (reg[12] & 1) ? cycle2hc40 : cycle2hc32; + uint16 *vctab = (vdp_pal) ? vc_pal_224 : vc_ntsc_224; + if ((reg[1] & 8) && vdp_pal) vctab = vc_pal_240; + + uint8 hc = (hc_latch == -1) ? hctab[cycles] : (hc_latch&0xFF); + + uint16 vc = vctab[v_counter]; + + /* interlace mode 2 */ + if (im2_flag) vc = (vc & 0xFE) | ((vc >> 8) & 0x01); + + return (((vc << 8)&0xFF00) | hc); +} + + +void vdp_test_w (uint16 value) +{} diff --git a/ genplus-gx/source/vdp.h b/ genplus-gx/source/vdp.h new file mode 100644 index 0000000..7bf6c64 --- /dev/null +++ b/ genplus-gx/source/vdp.h @@ -0,0 +1,62 @@ + +#ifndef _VDP_H_ +#define _VDP_H_ + +/* Global variables */ +extern uint8 sat[0x400]; +extern uint8 vram[0x10000]; +extern uint8 cram[0x80]; +extern uint8 vsram[0x80]; +extern uint8 reg[0x20]; +extern uint16 addr; +extern uint16 addr_latch; +extern uint8 code; +extern uint8 pending; +extern uint16 status; +extern uint16 ntab; +extern uint16 ntbb; +extern uint16 ntwb; +extern uint16 satb; +extern uint16 hscb; +extern uint16 sat_base_mask; +extern uint16 sat_addr_mask; +extern uint8 border; +extern uint8 bg_name_dirty[0x800]; +extern uint16 bg_name_list[0x800]; +extern uint16 bg_list_index; +extern uint8 bg_pattern_cache[0x80000]; +extern uint8 playfield_shift; +extern uint8 playfield_col_mask; +extern uint16 playfield_row_mask; +extern uint32 y_mask; +extern uint8 hint_pending; +extern uint8 vint_pending; +extern int16 h_counter; +extern int16 hc_latch; +extern uint16 v_counter; +extern uint8 im2_flag; +extern uint16 frame_end; +extern uint8 dmafill; +extern uint8 vdp_pal; +extern uint8 vdp_rate; +extern uint32 dma_endCycles; +extern void (*color_update)(int index, uint16 data); + + +/* Function prototypes */ +void vdp_init(void); +void vdp_reset(void); +void vdp_shutdown(void); +void vdp_ctrl_w(uint16 data); +uint16 vdp_ctrl_r(void); +void vdp_data_w(uint16 data); +uint16 vdp_data_r(void); +void vdp_reg_w(uint8 r, uint8 d); +uint16 vdp_hvc_r(void); +void dma_copy(void); +void dma_vbus(void); +void dma_update(int type, int length); +void dma_fill(uint16 data); +void vdp_test_w(uint16 value); + +#endif /* _VDP_H_ */