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 0000000..1f5bcd3 Binary files /dev/null and b/ genplus-gx/genplus.elf differ 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 0000000..7c428ba Binary files /dev/null and b/ genplus-gx/pcutil/inject.exe differ diff --git a/ genplus-gx/pcutil/injectlnx b/ genplus-gx/pcutil/injectlnx new file mode 100644 index 0000000..fb6d7cc Binary files /dev/null and b/ genplus-gx/pcutil/injectlnx differ 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_ */