mirror of
https://github.com/robmcmullen/apple2.git
synced 2024-06-18 08:29:29 +00:00
Set eol-style to sane default.
This commit is contained in:
parent
eeb2935c12
commit
ce9f314942
330
Makefile
330
Makefile
|
@ -1,165 +1,165 @@
|
|||
#
|
||||
# Unified Makefile for Apple 2 SDL
|
||||
#
|
||||
# by James L. Hammons
|
||||
# (C) 2005 Underground Software
|
||||
# This software is licensed under the GPL v2
|
||||
#
|
||||
|
||||
# Figure out which system we're compiling for, and set the appropriate variables
|
||||
|
||||
ifeq "$(OSTYPE)" "msys" # Win32
|
||||
|
||||
SYSTYPE = __GCCWIN32__
|
||||
EXESUFFIX = .exe
|
||||
GLLIB = -lopengl32
|
||||
ICON = obj/icon.o
|
||||
SDLLIBTYPE = --libs
|
||||
MSG = Win32 on MinGW
|
||||
|
||||
else
|
||||
#ifeq "$(OSTYPE)" "darwin"
|
||||
ifeq "darwin" "$(findstring darwin,$(OSTYPE))" # Should catch both 'darwin' and 'darwin7.0'
|
||||
|
||||
SYSTYPE = __GCCUNIX__ -D_OSX_
|
||||
EXESUFFIX =
|
||||
GLLIB =
|
||||
ICON =
|
||||
SDLLIBTYPE = --static-libs
|
||||
MSG = Mac OS X
|
||||
|
||||
else # *nix
|
||||
|
||||
SYSTYPE = __GCCUNIX__
|
||||
EXESUFFIX =
|
||||
GLLIB = -lGL
|
||||
ICON =
|
||||
SDLLIBTYPE = --libs
|
||||
MSG = generic Unix/Linux
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
CC = gcc
|
||||
LD = gcc
|
||||
TARGET = apple2
|
||||
|
||||
# Note that we use optimization level 2 instead of 3--3 doesn't seem to gain much over 2
|
||||
#CFLAGS = -MMD -Wall -Wno-switch -O2 -D$(SYSTYPE) -ffast-math -fomit-frame-pointer `sdl-config --cflags`
|
||||
#CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -O2 -D$(SYSTYPE) \
|
||||
# No optimization and w/gcov flags, so that we get an accurate picture from gcov
|
||||
#CFLAGS = -MMD -Wall -Wno-switch -D$(SYSTYPE) \
|
||||
# -ffast-math -fomit-frame-pointer `sdl-config --cflags` -fprofile-arcs -ftest-coverage
|
||||
#CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -D$(SYSTYPE) \
|
||||
# -ffast-math -fomit-frame-pointer `sdl-config --cflags` -fprofile-arcs -ftest-coverage
|
||||
# No optimization for profiling with gprof...
|
||||
CFLAGS = -MMD -Wall -Wno-switch -D$(SYSTYPE) \
|
||||
-ffast-math `sdl-config --cflags` -pg -g
|
||||
CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -D$(SYSTYPE) \
|
||||
-ffast-math `sdl-config --cflags` -pg -g
|
||||
# -fomit-frame-pointer `sdl-config --cflags` -g
|
||||
# -fomit-frame-pointer `sdl-config --cflags` -DLOG_UNMAPPED_MEMORY_ACCESSES
|
||||
|
||||
LDFLAGS =
|
||||
|
||||
#LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB)
|
||||
# Link in the gcov library (for profiling purposes)
|
||||
#LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) -lgcov
|
||||
# Link in the gprof lib
|
||||
LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) -pg
|
||||
|
||||
INCS = -I. -I./src -I/usr/local/include -I/usr/include
|
||||
|
||||
OBJS = \
|
||||
obj/button.o \
|
||||
obj/draggablewindow.o \
|
||||
obj/draggablewindow2.o \
|
||||
obj/element.o \
|
||||
obj/gui.o \
|
||||
obj/guimisc.o \
|
||||
obj/menu.o \
|
||||
obj/textedit.o \
|
||||
obj/window.o \
|
||||
\
|
||||
obj/applevideo.o \
|
||||
obj/ay8910.o \
|
||||
obj/dis65c02.o \
|
||||
obj/floppy.o \
|
||||
obj/log.o \
|
||||
obj/sdlemu_config.o \
|
||||
obj/sdlemu_opengl.o \
|
||||
obj/settings.o \
|
||||
obj/sound.o \
|
||||
obj/timing.o \
|
||||
obj/v65c02.o \
|
||||
obj/video.o \
|
||||
obj/apple2.o \
|
||||
$(ICON)
|
||||
|
||||
all: checkenv message obj $(TARGET)$(EXESUFFIX)
|
||||
@echo
|
||||
@echo "*** Looks like it compiled OK... Give it a whirl!"
|
||||
|
||||
# Check the compilation environment, barf if not appropriate
|
||||
|
||||
checkenv:
|
||||
@echo
|
||||
@echo -n "*** Checking compilation environment... "
|
||||
ifeq "" "$(shell which sdl-config)"
|
||||
@echo
|
||||
@echo
|
||||
@echo "It seems that you don't have the SDL development libraries installed. If you"
|
||||
@echo "have installed them, make sure that the sdl-config file is somewhere in your"
|
||||
@echo "path and is executable."
|
||||
@echo
|
||||
#Is there a better way to break out of the makefile?
|
||||
@break
|
||||
else
|
||||
@echo "OK"
|
||||
endif
|
||||
|
||||
message:
|
||||
@echo
|
||||
@echo "*** Building Apple 2 SDL for $(MSG)..."
|
||||
@echo
|
||||
|
||||
clean:
|
||||
@echo -n "*** Cleaning out the garbage..."
|
||||
@rm -rf obj
|
||||
@rm -f ./$(TARGET)$(EXESUFFIX)
|
||||
@echo "done!"
|
||||
|
||||
obj:
|
||||
@mkdir obj
|
||||
|
||||
# This is only done for Win32 at the moment...
|
||||
|
||||
ifneq "" "$(ICON)"
|
||||
$(ICON): res/$(TARGET).rc res/$(TARGET).ico
|
||||
@echo "*** Processing icon..."
|
||||
@windres -i res/$(TARGET).rc -o $(ICON) --include-dir=./res
|
||||
endif
|
||||
|
||||
obj/%.o: src/%.c
|
||||
@echo "*** Compiling $<..."
|
||||
@$(CC) $(CFLAGS) $(INCS) -c $< -o $@
|
||||
|
||||
obj/%.o: src/%.cpp
|
||||
@echo "*** Compiling $<..."
|
||||
@$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@
|
||||
|
||||
#GUI compilation...
|
||||
obj/%.o: src/gui/%.cpp
|
||||
@echo "*** Compiling $<..."
|
||||
@$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@
|
||||
|
||||
$(TARGET)$(EXESUFFIX): $(OBJS)
|
||||
@echo "*** Linking it all together..."
|
||||
@$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
|
||||
# strip --strip-all vj$(EXESUFFIX)
|
||||
# upx -9 vj$(EXESUFFIX)
|
||||
|
||||
# Pull in dependencies autogenerated by gcc's -MMD switch
|
||||
# The "-" in front in there just in case they haven't been created yet
|
||||
|
||||
-include obj/*.d
|
||||
#
|
||||
# Unified Makefile for Apple 2 SDL
|
||||
#
|
||||
# by James L. Hammons
|
||||
# (C) 2005 Underground Software
|
||||
# This software is licensed under the GPL v2
|
||||
#
|
||||
|
||||
# Figure out which system we're compiling for, and set the appropriate variables
|
||||
|
||||
ifeq "$(OSTYPE)" "msys" # Win32
|
||||
|
||||
SYSTYPE = __GCCWIN32__
|
||||
EXESUFFIX = .exe
|
||||
GLLIB = -lopengl32
|
||||
ICON = obj/icon.o
|
||||
SDLLIBTYPE = --libs
|
||||
MSG = Win32 on MinGW
|
||||
|
||||
else
|
||||
#ifeq "$(OSTYPE)" "darwin"
|
||||
ifeq "darwin" "$(findstring darwin,$(OSTYPE))" # Should catch both 'darwin' and 'darwin7.0'
|
||||
|
||||
SYSTYPE = __GCCUNIX__ -D_OSX_
|
||||
EXESUFFIX =
|
||||
GLLIB =
|
||||
ICON =
|
||||
SDLLIBTYPE = --static-libs
|
||||
MSG = Mac OS X
|
||||
|
||||
else # *nix
|
||||
|
||||
SYSTYPE = __GCCUNIX__
|
||||
EXESUFFIX =
|
||||
GLLIB = -lGL
|
||||
ICON =
|
||||
SDLLIBTYPE = --libs
|
||||
MSG = generic Unix/Linux
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
CC = gcc
|
||||
LD = gcc
|
||||
TARGET = apple2
|
||||
|
||||
# Note that we use optimization level 2 instead of 3--3 doesn't seem to gain much over 2
|
||||
#CFLAGS = -MMD -Wall -Wno-switch -O2 -D$(SYSTYPE) -ffast-math -fomit-frame-pointer `sdl-config --cflags`
|
||||
#CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -O2 -D$(SYSTYPE) \
|
||||
# No optimization and w/gcov flags, so that we get an accurate picture from gcov
|
||||
#CFLAGS = -MMD -Wall -Wno-switch -D$(SYSTYPE) \
|
||||
# -ffast-math -fomit-frame-pointer `sdl-config --cflags` -fprofile-arcs -ftest-coverage
|
||||
#CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -D$(SYSTYPE) \
|
||||
# -ffast-math -fomit-frame-pointer `sdl-config --cflags` -fprofile-arcs -ftest-coverage
|
||||
# No optimization for profiling with gprof...
|
||||
CFLAGS = -MMD -Wall -Wno-switch -D$(SYSTYPE) \
|
||||
-ffast-math `sdl-config --cflags` -pg -g
|
||||
CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -D$(SYSTYPE) \
|
||||
-ffast-math `sdl-config --cflags` -pg -g
|
||||
# -fomit-frame-pointer `sdl-config --cflags` -g
|
||||
# -fomit-frame-pointer `sdl-config --cflags` -DLOG_UNMAPPED_MEMORY_ACCESSES
|
||||
|
||||
LDFLAGS =
|
||||
|
||||
#LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB)
|
||||
# Link in the gcov library (for profiling purposes)
|
||||
#LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) -lgcov
|
||||
# Link in the gprof lib
|
||||
LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) -pg
|
||||
|
||||
INCS = -I. -I./src -I/usr/local/include -I/usr/include
|
||||
|
||||
OBJS = \
|
||||
obj/button.o \
|
||||
obj/draggablewindow.o \
|
||||
obj/draggablewindow2.o \
|
||||
obj/element.o \
|
||||
obj/gui.o \
|
||||
obj/guimisc.o \
|
||||
obj/menu.o \
|
||||
obj/textedit.o \
|
||||
obj/window.o \
|
||||
\
|
||||
obj/applevideo.o \
|
||||
obj/ay8910.o \
|
||||
obj/dis65c02.o \
|
||||
obj/floppy.o \
|
||||
obj/log.o \
|
||||
obj/sdlemu_config.o \
|
||||
obj/sdlemu_opengl.o \
|
||||
obj/settings.o \
|
||||
obj/sound.o \
|
||||
obj/timing.o \
|
||||
obj/v65c02.o \
|
||||
obj/video.o \
|
||||
obj/apple2.o \
|
||||
$(ICON)
|
||||
|
||||
all: checkenv message obj $(TARGET)$(EXESUFFIX)
|
||||
@echo
|
||||
@echo "*** Looks like it compiled OK... Give it a whirl!"
|
||||
|
||||
# Check the compilation environment, barf if not appropriate
|
||||
|
||||
checkenv:
|
||||
@echo
|
||||
@echo -n "*** Checking compilation environment... "
|
||||
ifeq "" "$(shell which sdl-config)"
|
||||
@echo
|
||||
@echo
|
||||
@echo "It seems that you don't have the SDL development libraries installed. If you"
|
||||
@echo "have installed them, make sure that the sdl-config file is somewhere in your"
|
||||
@echo "path and is executable."
|
||||
@echo
|
||||
#Is there a better way to break out of the makefile?
|
||||
@break
|
||||
else
|
||||
@echo "OK"
|
||||
endif
|
||||
|
||||
message:
|
||||
@echo
|
||||
@echo "*** Building Apple 2 SDL for $(MSG)..."
|
||||
@echo
|
||||
|
||||
clean:
|
||||
@echo -n "*** Cleaning out the garbage..."
|
||||
@rm -rf obj
|
||||
@rm -f ./$(TARGET)$(EXESUFFIX)
|
||||
@echo "done!"
|
||||
|
||||
obj:
|
||||
@mkdir obj
|
||||
|
||||
# This is only done for Win32 at the moment...
|
||||
|
||||
ifneq "" "$(ICON)"
|
||||
$(ICON): res/$(TARGET).rc res/$(TARGET).ico
|
||||
@echo "*** Processing icon..."
|
||||
@windres -i res/$(TARGET).rc -o $(ICON) --include-dir=./res
|
||||
endif
|
||||
|
||||
obj/%.o: src/%.c
|
||||
@echo "*** Compiling $<..."
|
||||
@$(CC) $(CFLAGS) $(INCS) -c $< -o $@
|
||||
|
||||
obj/%.o: src/%.cpp
|
||||
@echo "*** Compiling $<..."
|
||||
@$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@
|
||||
|
||||
#GUI compilation...
|
||||
obj/%.o: src/gui/%.cpp
|
||||
@echo "*** Compiling $<..."
|
||||
@$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@
|
||||
|
||||
$(TARGET)$(EXESUFFIX): $(OBJS)
|
||||
@echo "*** Linking it all together..."
|
||||
@$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
|
||||
# strip --strip-all vj$(EXESUFFIX)
|
||||
# upx -9 vj$(EXESUFFIX)
|
||||
|
||||
# Pull in dependencies autogenerated by gcc's -MMD switch
|
||||
# The "-" in front in there just in case they haven't been created yet
|
||||
|
||||
-include obj/*.d
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#include "winresrc.h"
|
||||
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON1 ICON DISCARDABLE "apple2.ico"
|
||||
#include "winresrc.h"
|
||||
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON1 ICON DISCARDABLE "apple2.ico"
|
||||
|
|
1628
src/apple2.cpp
1628
src/apple2.cpp
File diff suppressed because it is too large
Load Diff
24
src/apple2.h
24
src/apple2.h
|
@ -1,12 +1,12 @@
|
|||
//
|
||||
// Apple 2 SDL Portable Apple Emulator
|
||||
//
|
||||
|
||||
#include "types.h"
|
||||
|
||||
enum { APPLE_TYPE_II, APPLE_TYPE_IIE, APPLE_TYPE_IIC };
|
||||
|
||||
// Global variables (exported)
|
||||
|
||||
extern uint8 ram[0x10000], rom[0x10000]; // RAM & ROM pointers
|
||||
extern uint8 appleType;
|
||||
//
|
||||
// Apple 2 SDL Portable Apple Emulator
|
||||
//
|
||||
|
||||
#include "types.h"
|
||||
|
||||
enum { APPLE_TYPE_II, APPLE_TYPE_IIE, APPLE_TYPE_IIC };
|
||||
|
||||
// Global variables (exported)
|
||||
|
||||
extern uint8 ram[0x10000], rom[0x10000]; // RAM & ROM pointers
|
||||
extern uint8 appleType;
|
||||
|
|
1430
src/applevideo.cpp
1430
src/applevideo.cpp
File diff suppressed because it is too large
Load Diff
|
@ -1,25 +1,25 @@
|
|||
//
|
||||
// Apple 2 video support
|
||||
//
|
||||
|
||||
#ifndef __APPLEVIDEO_H__
|
||||
#define __APPLEVIDEO_H__
|
||||
|
||||
// Global variables (exported)
|
||||
|
||||
extern bool flash;
|
||||
extern bool textMode;
|
||||
extern bool mixedMode;
|
||||
extern bool displayPage2;
|
||||
extern bool hiRes;
|
||||
extern bool alternateCharset;
|
||||
|
||||
// Functions (exported)
|
||||
|
||||
void SetupBlurTable(void);
|
||||
void TogglePalette(void);
|
||||
void CycleScreenTypes(void);
|
||||
void SpawnMessage(const char * text, ...);
|
||||
void RenderVideoFrame(void);
|
||||
|
||||
#endif // __APPLEVIDEO_H__
|
||||
//
|
||||
// Apple 2 video support
|
||||
//
|
||||
|
||||
#ifndef __APPLEVIDEO_H__
|
||||
#define __APPLEVIDEO_H__
|
||||
|
||||
// Global variables (exported)
|
||||
|
||||
extern bool flash;
|
||||
extern bool textMode;
|
||||
extern bool mixedMode;
|
||||
extern bool displayPage2;
|
||||
extern bool hiRes;
|
||||
extern bool alternateCharset;
|
||||
|
||||
// Functions (exported)
|
||||
|
||||
void SetupBlurTable(void);
|
||||
void TogglePalette(void);
|
||||
void CycleScreenTypes(void);
|
||||
void SpawnMessage(const char * text, ...);
|
||||
void RenderVideoFrame(void);
|
||||
|
||||
#endif // __APPLEVIDEO_H__
|
||||
|
|
1388
src/ay8910.cpp
1388
src/ay8910.cpp
File diff suppressed because it is too large
Load Diff
32
src/ay8910.h
32
src/ay8910.h
|
@ -1,16 +1,16 @@
|
|||
#ifndef AY8910_H
|
||||
#define AY8910_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#define MAX_8910 4
|
||||
|
||||
void _AYWriteReg(int n, int r, int v);
|
||||
void AY8910_reset(int chip);
|
||||
void AY8910Update(int chip, int16 ** buffer, int length);
|
||||
|
||||
void AY8910_InitAll(int nClock, int nSampleRate);
|
||||
void AY8910_InitClock(int nClock);
|
||||
uint8 * AY8910_GetRegsPtr(uint16 nAyNum);
|
||||
|
||||
#endif
|
||||
#ifndef AY8910_H
|
||||
#define AY8910_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#define MAX_8910 4
|
||||
|
||||
void _AYWriteReg(int n, int r, int v);
|
||||
void AY8910_reset(int chip);
|
||||
void AY8910Update(int chip, int16 ** buffer, int length);
|
||||
|
||||
void AY8910_InitAll(int nClock, int nSampleRate);
|
||||
void AY8910_InitClock(int nClock);
|
||||
uint8 * AY8910_GetRegsPtr(uint16 nAyNum);
|
||||
|
||||
#endif
|
||||
|
|
1720
src/charset.h
1720
src/charset.h
File diff suppressed because it is too large
Load Diff
356
src/dis65c02.cpp
356
src/dis65c02.cpp
|
@ -1,178 +1,178 @@
|
|||
//
|
||||
// 65C02 disassembler
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (c) 2005 Underground Software
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include "dis65c02.h"
|
||||
//#include "types.h"
|
||||
#include "v65c02.h"
|
||||
#include "log.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
// External shit
|
||||
|
||||
extern V65C02REGS mainCPU;//Hm. Shouldn't we pass this shit in?
|
||||
|
||||
// Private globals variables
|
||||
|
||||
static uint8 op_mat[256] = {
|
||||
14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 2, 3, 3, 2, 14, 10, 14, 0, 8, 9, 9, 13,
|
||||
8, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 9, 9, 9, 13,
|
||||
14, 6, 0, 0, 0, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13,
|
||||
14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 11, 8, 8, 13,
|
||||
13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 12, 9, 9, 13,
|
||||
13, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 8, 9, 9, 13,
|
||||
1, 6, 1, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 9, 9, 10, 13,
|
||||
1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13,
|
||||
1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13 };
|
||||
|
||||
static uint8 mnemonics[256][6] = {
|
||||
"BRK ","ORA ","??? ","??? ","TSB ","ORA ","ASL ","RMB0 ",
|
||||
"PHP ","ORA ","ASL ","??? ","TSB ","ORA ","ASL ","BBR0 ",
|
||||
"BPL ","ORA ","ORA ","??? ","TRB ","ORA ","ASL ","RMB1 ",
|
||||
"CLC ","ORA ","INC ","??? ","TRB ","ORA ","ASL ","BBR1 ",
|
||||
"JSR ","AND ","??? ","??? ","BIT ","AND ","ROL ","RMB2 ",
|
||||
"PLP ","AND ","ROL ","??? ","BIT ","AND ","ROL ","BBR2 ",
|
||||
"BMI ","AND ","AND ","??? ","BIT ","AND ","ROL ","RMB3 ",
|
||||
"SEC ","AND ","DEC ","??? ","BIT ","AND ","ROL ","BBR3 ",
|
||||
"RTI ","EOR ","??? ","??? ","??? ","EOR ","LSR ","RMB4 ",
|
||||
"PHA ","EOR ","LSR ","??? ","JMP ","EOR ","LSR ","BBR4 ",
|
||||
"BVC ","EOR ","EOR ","??? ","??? ","EOR ","LSR ","RMB5 ",
|
||||
"CLI ","EOR ","PHY ","??? ","??? ","EOR ","LSR ","BBR5 ",
|
||||
"RTS ","ADC ","??? ","??? ","STZ ","ADC ","ROR ","RMB6 ",
|
||||
"PLA ","ADC ","ROR ","??? ","JMP ","ADC ","ROR ","BBR6 ",
|
||||
"BVS ","ADC ","ADC ","??? ","STZ ","ADC ","ROR ","RMB7 ",
|
||||
"SEI ","ADC ","PLY ","??? ","JMP ","ADC ","ROR ","BBR7 ",
|
||||
"BRA ","STA ","??? ","??? ","STY ","STA ","STX ","SMB0 ",
|
||||
"DEY ","BIT ","TXA ","??? ","STY ","STA ","STX ","BBS0 ",
|
||||
"BCC ","STA ","STA ","??? ","STY ","STA ","STX ","SMB1 ",
|
||||
"TYA ","STA ","TXS ","??? ","STZ ","STA ","STZ ","BBS1 ",
|
||||
"LDY ","LDA ","LDX ","??? ","LDY ","LDA ","LDX ","SMB2 ",
|
||||
"TAY ","LDA ","TAX ","??? ","LDY ","LDA ","LDX ","BBS2 ",
|
||||
"BCS ","LDA ","LDA ","??? ","LDY ","LDA ","LDX ","SMB3 ",
|
||||
"CLV ","LDA ","TSX ","??? ","LDY ","LDA ","LDX ","BBS3 ",
|
||||
"CPY ","CMP ","??? ","??? ","CPY ","CMP ","DEC ","SMB4 ",
|
||||
"INY ","CMP ","DEX ","??? ","CPY ","CMP ","DEC ","BBS4 ",
|
||||
"BNE ","CMP ","CMP ","??? ","??? ","CMP ","DEC ","SMB5 ",
|
||||
"CLD ","CMP ","PHX ","??? ","??? ","CMP ","DEC ","BBS5 ",
|
||||
"CPX ","SBC ","??? ","??? ","CPX ","SBC ","INC ","SMB6 ",
|
||||
"INX ","SBC ","NOP ","??? ","CPX ","SBC ","INC ","BBS6 ",
|
||||
"BEQ ","SBC ","SBC ","??? ","??? ","SBC ","INC ","SMB7 ",
|
||||
"SED ","SBC ","PLX ","??? ","??? ","SBC ","INC ","BBS7 " };
|
||||
|
||||
//
|
||||
// Display bytes in mem in hex
|
||||
//
|
||||
static void DisplayBytes(uint16 src, uint32 dst)
|
||||
{
|
||||
WriteLog("%04X: ", src);
|
||||
uint8 cnt = 0; // Init counter...
|
||||
|
||||
if (src > dst)
|
||||
dst += 0x10000; // That should fix the FFFF bug...
|
||||
|
||||
for(uint32 i=src; i<dst; i++)
|
||||
{
|
||||
WriteLog("%02X ", mainCPU.RdMem(i));
|
||||
cnt++; // Bump counter...
|
||||
}
|
||||
|
||||
for(int i=cnt; i<5; i++) // Pad the leftover spaces...
|
||||
WriteLog(" ");
|
||||
}
|
||||
|
||||
//
|
||||
// Decode a 65C02 instruction
|
||||
//
|
||||
int Decode65C02(uint16 pc)
|
||||
{
|
||||
/*
|
||||
0) illegal
|
||||
1) imm = #$00
|
||||
2) zp = $00
|
||||
3) zpx = $00,X
|
||||
4) zpy = $00,Y
|
||||
5) izp = ($00)
|
||||
6) izx = ($00,X)
|
||||
7) izy = ($00),Y
|
||||
8) abs = $0000
|
||||
9) abx = $0000,X
|
||||
10) aby = $0000,Y
|
||||
11) ind = ($0000)
|
||||
12) iax = ($0000,X)
|
||||
13) rel = $0000 (PC-relative)
|
||||
14) inherent
|
||||
*/
|
||||
char outbuf[80];
|
||||
|
||||
uint16 addr = pc;
|
||||
uint8 opcode = mainCPU.RdMem(addr++); // Get the opcode
|
||||
|
||||
switch (op_mat[opcode]) // Decode the addressing mode...
|
||||
{
|
||||
case 0: // Illegal
|
||||
sprintf(outbuf, "???");
|
||||
break;
|
||||
case 1: // Immediate
|
||||
sprintf(outbuf, "%s #$%02X", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 2: // Zero page
|
||||
sprintf(outbuf, "%s $%02X", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 3: // Zero page, X
|
||||
sprintf(outbuf, "%s $%02X,X", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 4: // Zero page, Y
|
||||
sprintf(outbuf, "%s $%02X,Y", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 5: // Zero page indirect
|
||||
sprintf(outbuf, "%s ($%02X)", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 6: // Zero page, X indirect
|
||||
sprintf(outbuf, "%s ($%02X,X)", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 7: // Zero page, Y indirect
|
||||
sprintf(outbuf, "%s ($%02X),Y", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 8: // Absolute
|
||||
sprintf(outbuf, "%s $%04X", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 9: // Absolute, X
|
||||
sprintf(outbuf, "%s $%04X,X", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 10: // Absolute, Y
|
||||
sprintf(outbuf, "%s $%04X,Y", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 11: // Indirect
|
||||
sprintf(outbuf, "%s ($%04X)", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 12: // Indirect, X
|
||||
sprintf(outbuf, "%s ($%04X,X)", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 13: // Relative
|
||||
// sprintf(outbuf, "%s $%04X", mnemonics[opcode], ++addr + (int16)(int8)mainCPU.RdMem(addr));
|
||||
sprintf(outbuf, "%s $%04X", mnemonics[opcode], addr + (int16)((int8)mainCPU.RdMem(addr)) + 1);
|
||||
addr++;
|
||||
break;
|
||||
case 14: // Inherent
|
||||
sprintf(outbuf, "%s ", mnemonics[opcode]);
|
||||
break;
|
||||
}
|
||||
|
||||
DisplayBytes(pc, addr); // Show bytes
|
||||
WriteLog("%-16s", outbuf); // Display opcode & addressing, etc.
|
||||
|
||||
return addr - pc;
|
||||
}
|
||||
//
|
||||
// 65C02 disassembler
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (c) 2005 Underground Software
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include "dis65c02.h"
|
||||
//#include "types.h"
|
||||
#include "v65c02.h"
|
||||
#include "log.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
// External shit
|
||||
|
||||
extern V65C02REGS mainCPU;//Hm. Shouldn't we pass this shit in?
|
||||
|
||||
// Private globals variables
|
||||
|
||||
static uint8 op_mat[256] = {
|
||||
14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 2, 3, 3, 2, 14, 10, 14, 0, 8, 9, 9, 13,
|
||||
8, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 9, 9, 9, 13,
|
||||
14, 6, 0, 0, 0, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13,
|
||||
14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 11, 8, 8, 13,
|
||||
13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 12, 9, 9, 13,
|
||||
13, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 8, 9, 9, 13,
|
||||
1, 6, 1, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 9, 9, 10, 13,
|
||||
1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13,
|
||||
1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13,
|
||||
13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13 };
|
||||
|
||||
static uint8 mnemonics[256][6] = {
|
||||
"BRK ","ORA ","??? ","??? ","TSB ","ORA ","ASL ","RMB0 ",
|
||||
"PHP ","ORA ","ASL ","??? ","TSB ","ORA ","ASL ","BBR0 ",
|
||||
"BPL ","ORA ","ORA ","??? ","TRB ","ORA ","ASL ","RMB1 ",
|
||||
"CLC ","ORA ","INC ","??? ","TRB ","ORA ","ASL ","BBR1 ",
|
||||
"JSR ","AND ","??? ","??? ","BIT ","AND ","ROL ","RMB2 ",
|
||||
"PLP ","AND ","ROL ","??? ","BIT ","AND ","ROL ","BBR2 ",
|
||||
"BMI ","AND ","AND ","??? ","BIT ","AND ","ROL ","RMB3 ",
|
||||
"SEC ","AND ","DEC ","??? ","BIT ","AND ","ROL ","BBR3 ",
|
||||
"RTI ","EOR ","??? ","??? ","??? ","EOR ","LSR ","RMB4 ",
|
||||
"PHA ","EOR ","LSR ","??? ","JMP ","EOR ","LSR ","BBR4 ",
|
||||
"BVC ","EOR ","EOR ","??? ","??? ","EOR ","LSR ","RMB5 ",
|
||||
"CLI ","EOR ","PHY ","??? ","??? ","EOR ","LSR ","BBR5 ",
|
||||
"RTS ","ADC ","??? ","??? ","STZ ","ADC ","ROR ","RMB6 ",
|
||||
"PLA ","ADC ","ROR ","??? ","JMP ","ADC ","ROR ","BBR6 ",
|
||||
"BVS ","ADC ","ADC ","??? ","STZ ","ADC ","ROR ","RMB7 ",
|
||||
"SEI ","ADC ","PLY ","??? ","JMP ","ADC ","ROR ","BBR7 ",
|
||||
"BRA ","STA ","??? ","??? ","STY ","STA ","STX ","SMB0 ",
|
||||
"DEY ","BIT ","TXA ","??? ","STY ","STA ","STX ","BBS0 ",
|
||||
"BCC ","STA ","STA ","??? ","STY ","STA ","STX ","SMB1 ",
|
||||
"TYA ","STA ","TXS ","??? ","STZ ","STA ","STZ ","BBS1 ",
|
||||
"LDY ","LDA ","LDX ","??? ","LDY ","LDA ","LDX ","SMB2 ",
|
||||
"TAY ","LDA ","TAX ","??? ","LDY ","LDA ","LDX ","BBS2 ",
|
||||
"BCS ","LDA ","LDA ","??? ","LDY ","LDA ","LDX ","SMB3 ",
|
||||
"CLV ","LDA ","TSX ","??? ","LDY ","LDA ","LDX ","BBS3 ",
|
||||
"CPY ","CMP ","??? ","??? ","CPY ","CMP ","DEC ","SMB4 ",
|
||||
"INY ","CMP ","DEX ","??? ","CPY ","CMP ","DEC ","BBS4 ",
|
||||
"BNE ","CMP ","CMP ","??? ","??? ","CMP ","DEC ","SMB5 ",
|
||||
"CLD ","CMP ","PHX ","??? ","??? ","CMP ","DEC ","BBS5 ",
|
||||
"CPX ","SBC ","??? ","??? ","CPX ","SBC ","INC ","SMB6 ",
|
||||
"INX ","SBC ","NOP ","??? ","CPX ","SBC ","INC ","BBS6 ",
|
||||
"BEQ ","SBC ","SBC ","??? ","??? ","SBC ","INC ","SMB7 ",
|
||||
"SED ","SBC ","PLX ","??? ","??? ","SBC ","INC ","BBS7 " };
|
||||
|
||||
//
|
||||
// Display bytes in mem in hex
|
||||
//
|
||||
static void DisplayBytes(uint16 src, uint32 dst)
|
||||
{
|
||||
WriteLog("%04X: ", src);
|
||||
uint8 cnt = 0; // Init counter...
|
||||
|
||||
if (src > dst)
|
||||
dst += 0x10000; // That should fix the FFFF bug...
|
||||
|
||||
for(uint32 i=src; i<dst; i++)
|
||||
{
|
||||
WriteLog("%02X ", mainCPU.RdMem(i));
|
||||
cnt++; // Bump counter...
|
||||
}
|
||||
|
||||
for(int i=cnt; i<5; i++) // Pad the leftover spaces...
|
||||
WriteLog(" ");
|
||||
}
|
||||
|
||||
//
|
||||
// Decode a 65C02 instruction
|
||||
//
|
||||
int Decode65C02(uint16 pc)
|
||||
{
|
||||
/*
|
||||
0) illegal
|
||||
1) imm = #$00
|
||||
2) zp = $00
|
||||
3) zpx = $00,X
|
||||
4) zpy = $00,Y
|
||||
5) izp = ($00)
|
||||
6) izx = ($00,X)
|
||||
7) izy = ($00),Y
|
||||
8) abs = $0000
|
||||
9) abx = $0000,X
|
||||
10) aby = $0000,Y
|
||||
11) ind = ($0000)
|
||||
12) iax = ($0000,X)
|
||||
13) rel = $0000 (PC-relative)
|
||||
14) inherent
|
||||
*/
|
||||
char outbuf[80];
|
||||
|
||||
uint16 addr = pc;
|
||||
uint8 opcode = mainCPU.RdMem(addr++); // Get the opcode
|
||||
|
||||
switch (op_mat[opcode]) // Decode the addressing mode...
|
||||
{
|
||||
case 0: // Illegal
|
||||
sprintf(outbuf, "???");
|
||||
break;
|
||||
case 1: // Immediate
|
||||
sprintf(outbuf, "%s #$%02X", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 2: // Zero page
|
||||
sprintf(outbuf, "%s $%02X", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 3: // Zero page, X
|
||||
sprintf(outbuf, "%s $%02X,X", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 4: // Zero page, Y
|
||||
sprintf(outbuf, "%s $%02X,Y", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 5: // Zero page indirect
|
||||
sprintf(outbuf, "%s ($%02X)", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 6: // Zero page, X indirect
|
||||
sprintf(outbuf, "%s ($%02X,X)", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 7: // Zero page, Y indirect
|
||||
sprintf(outbuf, "%s ($%02X),Y", mnemonics[opcode], mainCPU.RdMem(addr++));
|
||||
break;
|
||||
case 8: // Absolute
|
||||
sprintf(outbuf, "%s $%04X", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 9: // Absolute, X
|
||||
sprintf(outbuf, "%s $%04X,X", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 10: // Absolute, Y
|
||||
sprintf(outbuf, "%s $%04X,Y", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 11: // Indirect
|
||||
sprintf(outbuf, "%s ($%04X)", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 12: // Indirect, X
|
||||
sprintf(outbuf, "%s ($%04X,X)", mnemonics[opcode], mainCPU.RdMem(addr++) | (mainCPU.RdMem(addr++) << 8));
|
||||
break;
|
||||
case 13: // Relative
|
||||
// sprintf(outbuf, "%s $%04X", mnemonics[opcode], ++addr + (int16)(int8)mainCPU.RdMem(addr));
|
||||
sprintf(outbuf, "%s $%04X", mnemonics[opcode], addr + (int16)((int8)mainCPU.RdMem(addr)) + 1);
|
||||
addr++;
|
||||
break;
|
||||
case 14: // Inherent
|
||||
sprintf(outbuf, "%s ", mnemonics[opcode]);
|
||||
break;
|
||||
}
|
||||
|
||||
DisplayBytes(pc, addr); // Show bytes
|
||||
WriteLog("%-16s", outbuf); // Display opcode & addressing, etc.
|
||||
|
||||
return addr - pc;
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
//
|
||||
// DIS65C02.H
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (C) 2004 Underground Software
|
||||
//
|
||||
|
||||
#ifndef __DIS65C02_H__
|
||||
#define __DIS65C02_H__
|
||||
|
||||
#include "types.h"
|
||||
|
||||
int Decode65C02(uint16 pc);
|
||||
|
||||
#endif // __DIS65C02_H__
|
||||
//
|
||||
// DIS65C02.H
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (C) 2004 Underground Software
|
||||
//
|
||||
|
||||
#ifndef __DIS65C02_H__
|
||||
#define __DIS65C02_H__
|
||||
|
||||
#include "types.h"
|
||||
|
||||
int Decode65C02(uint16 pc);
|
||||
|
||||
#endif // __DIS65C02_H__
|
||||
|
|
4434
src/fd-img-128x128.c
4434
src/fd-img-128x128.c
File diff suppressed because it is too large
Load Diff
436
src/firmware.h
436
src/firmware.h
|
@ -1,218 +1,218 @@
|
|||
//
|
||||
// This file was automagically generated by bin2c (by James L. Hammons)
|
||||
//
|
||||
|
||||
char diskROM[0x100] = { // Loads at $C600 (slot 6)
|
||||
0xA2, 0x20, 0xA0, 0x00, 0xA2, 0x03, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C,
|
||||
0x49, 0xFF, 0x29, 0x7E, 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10,
|
||||
0xE5, 0x20, 0x58, 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x2B, 0xAA, 0xBD,
|
||||
0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0xBD, 0x8A, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, 0x80, 0xC0,
|
||||
0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8, 0xFC, 0x88,
|
||||
0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0xA9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xBD, 0x8C,
|
||||
0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF7, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3,
|
||||
0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xDF, 0x49, 0xAD, 0xF0,
|
||||
0x25, 0xD0, 0xD9, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD,
|
||||
0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xBE, 0xA5, 0x40,
|
||||
0xC5, 0x41, 0xD0, 0xB8, 0xB0, 0xB7, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59,
|
||||
0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10,
|
||||
0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB,
|
||||
0x59, 0xD6, 0x02, 0xD0, 0x87, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00,
|
||||
0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5,
|
||||
0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x2B, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char hdROM[0x100] = { // Loads at $C700 (slot 7)
|
||||
0xA9, 0x20, 0xA9, 0x00, 0xA9, 0x03, 0xA9, 0x3C, 0xA9, 0x00, 0x8D, 0xF2, 0xC0, 0xA9, 0x70, 0x8D,
|
||||
0xF3, 0xC0, 0xAD, 0xF0, 0xC0, 0x48, 0xAD, 0xF1, 0xC0, 0x18, 0xC9, 0x01, 0xD0, 0x01, 0x38, 0x68,
|
||||
0x90, 0x03, 0x4C, 0x00, 0xC6, 0xA9, 0x70, 0x85, 0x43, 0xA9, 0x00, 0x85, 0x44, 0x85, 0x46, 0x85,
|
||||
0x47, 0xA9, 0x08, 0x85, 0x45, 0xA9, 0x01, 0x85, 0x42, 0x20, 0x46, 0xC7, 0x90, 0x03, 0x4C, 0x00,
|
||||
0xC6, 0xA2, 0x70, 0x4C, 0x01, 0x08, 0x18, 0xA5, 0x42, 0x8D, 0xF2, 0xC0, 0xA5, 0x43, 0x8D, 0xF3,
|
||||
0xC0, 0xA5, 0x44, 0x8D, 0xF4, 0xC0, 0xA5, 0x45, 0x8D, 0xF5, 0xC0, 0xA5, 0x46, 0x8D, 0xF6, 0xC0,
|
||||
0xA5, 0x47, 0x8D, 0xF7, 0xC0, 0xAd, 0xF0, 0xC0, 0x48, 0xA5, 0x42, 0xC9, 0x01, 0xD0, 0x03, 0x20,
|
||||
0x7D, 0xC7, 0xAD, 0xF1, 0xC0, 0x18, 0xC9, 0x01, 0xD0, 0x01, 0x38, 0x68, 0x60, 0x98, 0x48, 0xA0,
|
||||
0x00, 0xAD, 0xF8, 0xC0, 0x91, 0x44, 0xC8, 0xD0, 0xF8, 0xE6, 0x45, 0xA0, 0x00, 0xAD, 0xF8, 0xC0,
|
||||
0x91, 0x44, 0xC8, 0xD0, 0xF8, 0x68, 0xA8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xD7, 0x46
|
||||
};
|
||||
|
||||
// Various firmware from the IIe ROM file...
|
||||
|
||||
//Not sure what the heck this is...
|
||||
char slot2e[0x100] = {
|
||||
0x2C, 0x58, 0xFF, 0x70, 0x0C, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x06, 0x01, 0x31, 0x8E, 0x94, 0x97,
|
||||
0x9A, 0x85, 0x27, 0x86, 0x35, 0x8A, 0x48, 0x98, 0x48, 0x08, 0x78, 0x8D, 0xFF, 0xCF, 0x20, 0x58,
|
||||
0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x8D, 0xF8, 0x07, 0xAA, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x26, 0xA8,
|
||||
0x28, 0x50, 0x29, 0x1E, 0x38, 0x05, 0x5E, 0x38, 0x05, 0xB9, 0x8A, 0xC0, 0x29, 0x1F, 0xD0, 0x05,
|
||||
0xA9, 0xEF, 0x20, 0x05, 0xC8, 0xE4, 0x37, 0xD0, 0x0B, 0xA9, 0x07, 0xC5, 0x36, 0xF0, 0x05, 0x85,
|
||||
0x36, 0x18, 0x90, 0x08, 0xE4, 0x39, 0xD0, 0xF9, 0xA9, 0x05, 0x85, 0x38, 0xBD, 0x38, 0x07, 0x29,
|
||||
0x02, 0x08, 0x90, 0x03, 0x4C, 0xBF, 0xC8, 0xBD, 0xB8, 0x04, 0x48, 0x0A, 0x10, 0x0E, 0xA6, 0x35,
|
||||
0xA5, 0x27, 0x09, 0x20, 0x9D, 0x00, 0x02, 0x85, 0x27, 0xAE, 0xF8, 0x07, 0x68, 0x29, 0xBF, 0x9D,
|
||||
0xB8, 0x04, 0x28, 0xF0, 0x06, 0x20, 0x63, 0xCB, 0x4C, 0xB5, 0xC8, 0x4C, 0xFC, 0xC8, 0x20, 0x00,
|
||||
0xC8, 0xA2, 0x00, 0x60, 0x4C, 0x9B, 0xC8, 0x4C, 0xAA, 0xC9, 0x4A, 0x20, 0x9B, 0xC9, 0xB0, 0x08,
|
||||
0x20, 0xF5, 0xCA, 0xF0, 0x06, 0x18, 0x90, 0x03, 0x20, 0xD2, 0xCA, 0xBD, 0xB8, 0x05, 0xAA, 0x60,
|
||||
0xA2, 0x03, 0xB5, 0x36, 0x48, 0xCA, 0x10, 0xFA, 0xAE, 0xF8, 0x07, 0xBD, 0x38, 0x06, 0x85, 0x36,
|
||||
0xBD, 0xB8, 0x04, 0x29, 0x38, 0x4A, 0x4A, 0x4A, 0x09, 0xC0, 0x85, 0x37, 0x8A, 0x48, 0xA5, 0x27,
|
||||
0x48, 0x09, 0x80, 0x20, 0xED, 0xFD, 0x68, 0x85, 0x27, 0x68, 0x8D, 0xF8, 0x07, 0xAA, 0x0A, 0x0A,
|
||||
0x0A, 0x0A, 0x85, 0x26, 0x8D, 0xFF, 0xCF, 0xA5, 0x36, 0x9D, 0x38, 0x06, 0xA2, 0x00, 0x68, 0x95,
|
||||
0x36, 0xE8, 0xE0, 0x04, 0x90, 0xF8, 0xAE, 0xF8, 0x07, 0x60, 0xC1, 0xD0, 0xD0, 0xCC, 0xC5, 0x08
|
||||
};
|
||||
|
||||
//This looks identical to diskROM
|
||||
char slot6e[0x100] = {
|
||||
0xA2, 0x20, 0xA0, 0x00, 0xA2, 0x03, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C,
|
||||
0x49, 0xFF, 0x29, 0x7E, 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10,
|
||||
0xE5, 0x20, 0x58, 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x2B, 0xAA, 0xBD,
|
||||
0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0xBD, 0x8A, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, 0x80, 0xC0,
|
||||
0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8, 0xFC, 0x88,
|
||||
0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0xA9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xBD, 0x8C,
|
||||
0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF7, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3,
|
||||
0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xDF, 0x49, 0xAD, 0xF0,
|
||||
0x25, 0xD0, 0xD9, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD,
|
||||
0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xBE, 0xA5, 0x40,
|
||||
0xC5, 0x41, 0xD0, 0xB8, 0xB0, 0xB7, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59,
|
||||
0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10,
|
||||
0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB,
|
||||
0x59, 0xD6, 0x02, 0xD0, 0x87, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00,
|
||||
0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5,
|
||||
0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x2B, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// Various firmware from the IIc
|
||||
|
||||
char slot1[0x100] = {
|
||||
0x2C, 0x89, 0xC1, 0x70, 0x0C, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x06, 0x01, 0x31, 0x9E, 0xA8, 0xB4,
|
||||
0xBB, 0xDA, 0xA2, 0xC1, 0x4C, 0x1C, 0xC2, 0x90, 0x03, 0x4C, 0xE5, 0xC7, 0x0A, 0x7A, 0x5A, 0xBD,
|
||||
0xB8, 0x04, 0xF0, 0x42, 0xA5, 0x24, 0xB0, 0x1C, 0xDD, 0xB8, 0x04, 0x90, 0x03, 0xBD, 0x38, 0x07,
|
||||
0xDD, 0x38, 0x07, 0xB0, 0x0B, 0xC9, 0x11, 0xB0, 0x11, 0x09, 0xF0, 0x3D, 0x38, 0x07, 0x65, 0x24,
|
||||
0x85, 0x24, 0x80, 0x06, 0xC5, 0x21, 0x90, 0x02, 0x64, 0x24, 0x7A, 0x5A, 0xBD, 0x38, 0x07, 0xDD,
|
||||
0xB8, 0x04, 0xB0, 0x08, 0xC5, 0x24, 0xB0, 0x0E, 0xA9, 0x40, 0x80, 0x02, 0xA9, 0x1A, 0xC0, 0x80,
|
||||
0x6A, 0x20, 0x9B, 0xC1, 0x80, 0xE4, 0x98, 0x20, 0x8A, 0xC1, 0xBD, 0xB8, 0x04, 0xF0, 0x17, 0x3C,
|
||||
0xB8, 0x06, 0x30, 0x12, 0xBD, 0x38, 0x07, 0xFD, 0xB8, 0x04, 0xC9, 0xF8, 0x90, 0x04, 0x18, 0x65,
|
||||
0x21, 0xAC, 0xA9, 0x00, 0x85, 0x24, 0x68, 0x7A, 0xFA, 0x60, 0x20, 0xA9, 0xC7, 0x90, 0xFA, 0x3C,
|
||||
0xB8, 0x06, 0x10, 0x07, 0xC9, 0x91, 0xF0, 0x03, 0x20, 0xF0, 0xFD, 0x4C, 0xCD, 0xC7, 0x5A, 0x48,
|
||||
0x20, 0xB6, 0xC2, 0x9E, 0xB8, 0x06, 0x80, 0x07, 0x5A, 0x20, 0xD9, 0xC7, 0x90, 0xFA, 0x90, 0x68,
|
||||
0x7A, 0xA2, 0x00, 0x60, 0x5A, 0x48, 0x20, 0x8A, 0xC1, 0x80, 0xF4, 0x5A, 0x48, 0x4A, 0xD0, 0x15,
|
||||
0x08, 0x20, 0xD3, 0xC7, 0x28, 0x90, 0x05, 0x29, 0x28, 0x0A, 0x80, 0x02, 0x29, 0x30, 0xC9, 0x10,
|
||||
0xF0, 0xDD, 0x18, 0x80, 0xDA, 0xA2, 0x40, 0x68, 0x7A, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot2[0x100] = {
|
||||
0x2C, 0x89, 0xC1, 0x70, 0x14, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x0E, 0x01, 0x31, 0x11, 0x13, 0x15,
|
||||
0x17, 0x80, 0x8B, 0x80, 0x93, 0x80, 0x9D, 0x80, 0xA2, 0xDA, 0xA2, 0xC2, 0x5A, 0x48, 0x8E, 0xF8,
|
||||
0x07, 0x50, 0x22, 0xA5, 0x36, 0x45, 0x38, 0xF0, 0x06, 0xA5, 0x37, 0xC5, 0x39, 0xF0, 0x03, 0x20,
|
||||
0xB6, 0xC2, 0x8A, 0x45, 0x39, 0x05, 0x38, 0xD0, 0x07, 0xA9, 0x05, 0x85, 0x38, 0x38, 0x80, 0x05,
|
||||
0xA9, 0x07, 0x85, 0x36, 0x18, 0xBD, 0xB8, 0x06, 0x89, 0x01, 0xD0, 0x03, 0x4C, 0x17, 0xC1, 0x90,
|
||||
0xFB, 0x68, 0x80, 0x28, 0x3C, 0xB8, 0x03, 0x50, 0x1C, 0x20, 0x8F, 0xC1, 0x80, 0x1E, 0x68, 0x20,
|
||||
0x70, 0xCC, 0x10, 0x1B, 0x20, 0xA9, 0xC7, 0xB0, 0xEB, 0x29, 0x5F, 0xC9, 0x51, 0xF0, 0x04, 0xC9,
|
||||
0x52, 0xD0, 0x09, 0xA9, 0x98, 0x7A, 0xFA, 0x60, 0x18, 0x20, 0xA3, 0xC7, 0x20, 0x4C, 0xCC, 0x48,
|
||||
0x20, 0xD9, 0xC7, 0xB0, 0x09, 0xBD, 0xB8, 0x06, 0x29, 0x10, 0xF0, 0xD2, 0x80, 0xF2, 0xA8, 0x68,
|
||||
0x5A, 0x20, 0xB8, 0xC3, 0x68, 0xBC, 0x38, 0x06, 0xF0, 0x12, 0x09, 0x80, 0xC9, 0x91, 0xF0, 0xDC,
|
||||
0xC9, 0xFF, 0xF0, 0xD8, 0xC9, 0x92, 0xF0, 0xD0, 0xC9, 0x94, 0xF0, 0xCD, 0x3C, 0xB8, 0x03, 0x50,
|
||||
0xC4, 0x20, 0xED, 0xFD, 0x80, 0xC6, 0x20, 0x9A, 0xCF, 0xBC, 0x29, 0xC2, 0x20, 0x7C, 0xC3, 0x48,
|
||||
0x88, 0x30, 0x04, 0xC0, 0x03, 0xD0, 0xF5, 0x20, 0x9A, 0xCF, 0x68, 0xBC, 0x2B, 0xC2, 0x99, 0xFB,
|
||||
0xBF, 0x68, 0x99, 0xFA, 0xBF, 0x68, 0x9D, 0xB8, 0x06, 0x29, 0x01, 0xD0, 0x02, 0xA9, 0x09, 0x9D,
|
||||
0x38, 0x06, 0x68, 0x9D, 0xB8, 0x04, 0x9E, 0xB8, 0x03, 0x60, 0x03, 0x07, 0xA0, 0xB0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot3[0x100] = {
|
||||
0x48, 0xDA, 0x5A, 0x80, 0x12, 0x38, 0x90, 0x18, 0x80, 0x1A, 0xEA, 0x01, 0x88, 0x2C, 0x2F, 0x32,
|
||||
0x35, 0x4C, 0xAF, 0xC7, 0x4C, 0xB5, 0xC7, 0x20, 0x20, 0xCE, 0x20, 0xBE, 0xCD, 0x20, 0x58, 0xFC,
|
||||
0x7A, 0xFA, 0x68, 0x18, 0xB0, 0x03, 0x4C, 0xF6, 0xFD, 0x4C, 0x1B, 0xFD, 0x4C, 0x41, 0xCF, 0x4C,
|
||||
0x35, 0xCF, 0x4C, 0xC2, 0xCE, 0x4C, 0xB1, 0xCE, 0xA9, 0x06, 0xCD, 0xB3, 0xFB, 0xF0, 0x3C, 0x20,
|
||||
0x60, 0xC3, 0xA9, 0xF8, 0x85, 0x37, 0x64, 0x36, 0xB2, 0x36, 0x92, 0x36, 0xE6, 0x36, 0xD0, 0xF8,
|
||||
0xE6, 0x37, 0xD0, 0xF4, 0xDA, 0xAE, 0x78, 0x04, 0x3C, 0x81, 0xC0, 0x3C, 0x81, 0xC0, 0xFA, 0x60,
|
||||
0xDA, 0xA2, 0x00, 0x2C, 0x11, 0xC0, 0x30, 0x02, 0xA2, 0x08, 0x2C, 0x12, 0xC0, 0x10, 0x02, 0xE8,
|
||||
0xE8, 0x2C, 0x81, 0xC0, 0x2C, 0x81, 0xC0, 0x8E, 0x78, 0x04, 0xFA, 0x60, 0xAD, 0x13, 0xC0, 0x0A,
|
||||
0xAD, 0x18, 0xC0, 0x08, 0x8D, 0x00, 0xC0, 0x8D, 0x03, 0xC0, 0xB9, 0x78, 0x04, 0x28, 0xB0, 0x03,
|
||||
0x8D, 0x02, 0xC0, 0x10, 0x03, 0x8D, 0x01, 0xC0, 0x60, 0x09, 0x80, 0xC9, 0xFB, 0xB0, 0x06, 0xC9,
|
||||
0xE1, 0x90, 0x02, 0x29, 0xDF, 0x60, 0x48, 0xA9, 0x08, 0x1C, 0xFB, 0x04, 0x68, 0x20, 0xED, 0xFD,
|
||||
0x4C, 0x44, 0xFD, 0x20, 0x9D, 0xCC, 0x80, 0x09, 0x20, 0x9D, 0xCC, 0x24, 0x32, 0x30, 0x02, 0x29,
|
||||
0x7F, 0x5A, 0x09, 0x00, 0x30, 0x15, 0x48, 0xAD, 0xFB, 0x04, 0x6A, 0x68, 0x90, 0x0D, 0x2C, 0x1E,
|
||||
0xC0, 0x10, 0x08, 0x49, 0x40, 0x89, 0x60, 0xF0, 0x02, 0x49, 0x40, 0x2C, 0x1F, 0xC0, 0x10, 0x19,
|
||||
0x48, 0x8D, 0x01, 0xC0, 0x98, 0x45, 0x20, 0x4A, 0xB0, 0x04, 0xAD, 0x55, 0xC0, 0xC8, 0x98, 0x4A,
|
||||
0xA8, 0x68, 0x91, 0x28, 0x2C, 0x54, 0xC0, 0x7A, 0x60, 0x91, 0x28, 0x7A, 0x60, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot4[0x100] = {
|
||||
0x80, 0x05, 0xA2, 0x03, 0x60, 0x38, 0x90, 0x18, 0x4C, 0xCF, 0xC5, 0x01, 0x20, 0x02, 0x02, 0x02,
|
||||
0x02, 0x00, 0x3B, 0xDC, 0x93, 0x82, 0x69, 0xBD, 0x6B, 0x1A, 0x9C, 0x7C, 0x07, 0xA2, 0x80, 0xA0,
|
||||
0x01, 0x9E, 0x7D, 0x04, 0x9E, 0x7D, 0x05, 0xA9, 0xFF, 0x9D, 0x7D, 0x06, 0xA9, 0x03, 0x9D, 0x7D,
|
||||
0x07, 0xA2, 0x00, 0x88, 0x10, 0xEB, 0x20, 0x6B, 0xC4, 0xA9, 0x00, 0xAA, 0x20, 0x9A, 0xCF, 0x8A,
|
||||
0x8D, 0x78, 0x04, 0x4A, 0x0D, 0x78, 0x04, 0xC9, 0x10, 0xB0, 0x1F, 0x29, 0x05, 0xF0, 0x01, 0x58,
|
||||
0x69, 0x55, 0x08, 0x78, 0x8E, 0xFC, 0x07, 0x8D, 0x79, 0xC0, 0xA2, 0x08, 0xCA, 0x0A, 0x90, 0x03,
|
||||
0x9D, 0x58, 0xC0, 0xD0, 0xF7, 0x8D, 0x78, 0xC0, 0x28, 0x18, 0x60, 0xA2, 0x80, 0x80, 0x02, 0xA2,
|
||||
0x00, 0xBD, 0x7D, 0x04, 0x9D, 0x7C, 0x04, 0xBD, 0x7D, 0x05, 0x9D, 0x7C, 0x05, 0xCA, 0x10, 0xEF,
|
||||
0x80, 0x0C, 0x9C, 0x7C, 0x04, 0x9C, 0x7C, 0x05, 0x9C, 0xFC, 0x04, 0x9C, 0xFC, 0x05, 0x9C, 0x7C,
|
||||
0x06, 0x18, 0x60, 0xA9, 0x20, 0x1C, 0x7C, 0x07, 0x2D, 0x7C, 0x06, 0x1C, 0x7C, 0x06, 0x2C, 0xFC,
|
||||
0x07, 0x30, 0x13, 0x2C, 0x63, 0xC0, 0x30, 0x02, 0x09, 0x80, 0x2C, 0x7C, 0x07, 0x10, 0x02, 0x09,
|
||||
0x40, 0x8D, 0x7C, 0x07, 0x18, 0x60, 0x0D, 0x7C, 0x07, 0x29, 0xE0, 0x80, 0xF4, 0x6A, 0x6A, 0x29,
|
||||
0x80, 0xAA, 0xAD, 0x78, 0x04, 0x9D, 0x7D, 0x04, 0xAD, 0x78, 0x05, 0x9D, 0x7D, 0x05, 0xAD, 0xF8,
|
||||
0x04, 0x9D, 0x7D, 0x06, 0xAD, 0xF8, 0x05, 0x9D, 0x7D, 0x07, 0x18, 0x60, 0x48, 0x18, 0xA9, 0x0E,
|
||||
0x2D, 0x7C, 0x07, 0xD0, 0x01, 0x38, 0x68, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot5[0x100] = {
|
||||
0xA2, 0x20, 0xA2, 0x00, 0xA2, 0x03, 0xC9, 0x00, 0xB0, 0x17, 0x38, 0xB0, 0x01, 0x18, 0xA2, 0x05,
|
||||
0x7E, 0x73, 0x04, 0x18, 0xA2, 0xC5, 0x8E, 0xF8, 0x07, 0xA2, 0x05, 0xAD, 0xFF, 0xCF, 0x4C, 0x97,
|
||||
0xC7, 0xA2, 0x05, 0x86, 0x58, 0xA9, 0xC5, 0x8D, 0xF8, 0x07, 0x20, 0x76, 0xC5, 0xA0, 0x05, 0xB9,
|
||||
0x70, 0xC5, 0x99, 0x42, 0x00, 0x88, 0x10, 0xF7, 0x20, 0x0A, 0xC5, 0xB0, 0x15, 0xAE, 0x00, 0x08,
|
||||
0xCA, 0xD0, 0x0F, 0xAE, 0x01, 0x08, 0xF0, 0x0A, 0xA5, 0x58, 0x0A, 0x0A, 0x0A, 0x0A, 0xAA, 0x4C,
|
||||
0x01, 0x08, 0xA2, 0x10, 0xBD, 0x5F, 0xC5, 0x9D, 0xDB, 0x07, 0xCA, 0x10, 0xF7, 0x80, 0xFE, 0xC3,
|
||||
0xE8, 0xE5, 0xE3, 0xEB, 0xA0, 0xC4, 0xE9, 0xF3, 0xEB, 0xA0, 0xC4, 0xF2, 0xE9, 0xF6, 0xE5, 0xAE,
|
||||
0x01, 0x50, 0x00, 0x08, 0x00, 0x00, 0xA2, 0x08, 0xBD, 0x83, 0xC5, 0x95, 0x00, 0xCA, 0x10, 0xF8,
|
||||
0x4C, 0x00, 0x00, 0x20, 0x0D, 0xC5, 0x05, 0x07, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0xA2, 0x03,
|
||||
0xA0, 0x00, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C, 0x49, 0xFF, 0x29, 0x7E,
|
||||
0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10, 0xE5, 0xA9, 0x08, 0x85,
|
||||
0x27, 0xA0, 0x7F, 0x60, 0xB9, 0x00, 0x02, 0xC8, 0x4C, 0x99, 0xC3, 0xC1, 0xF0, 0xF0, 0xEC, 0xE5,
|
||||
0xA0, 0xAF, 0xAF, 0xE3, 0x20, 0xD0, 0xF8, 0x20, 0x53, 0xF9, 0x85, 0x3A, 0x84, 0x3B, 0x60, 0x5A,
|
||||
0xB0, 0x1C, 0xA0, 0xC4, 0xC4, 0x39, 0xD0, 0x04, 0xA4, 0x38, 0xF0, 0x12, 0xDA, 0x48, 0x29, 0x7F,
|
||||
0xC9, 0x02, 0xB0, 0x06, 0x20, 0x3B, 0xC4, 0x20, 0x6B, 0xC4, 0x68, 0xFA, 0x7A, 0x60, 0x4C, 0x9D,
|
||||
0xC7, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x52, 0xC5, 0x4C, 0x76, 0xC5, 0x00, 0x00, 0x00, 0xBF, 0x0A
|
||||
};
|
||||
|
||||
char slot6[0x100] = {
|
||||
0xA2, 0x20, 0xA0, 0x00, 0x64, 0x03, 0x64, 0x3C, 0xA9, 0x60, 0xAA, 0x86, 0x2B, 0x85, 0x4F, 0x5A,
|
||||
0xBD, 0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0x7A, 0xB9, 0xEA, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD,
|
||||
0x80, 0xC0, 0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8,
|
||||
0xFC, 0x88, 0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0x20, 0x8E, 0xC5, 0x64, 0x03, 0x18,
|
||||
0x08, 0x28, 0xA6, 0x2B, 0xC6, 0x03, 0xD0, 0x0E, 0xBD, 0x88, 0xC0, 0xA5, 0x01, 0xC9, 0xC6, 0xD0,
|
||||
0xA4, 0x4C, 0x00, 0xC5, 0x00, 0x00, 0x08, 0x88, 0xD0, 0x04, 0xF0, 0xE5, 0x80, 0xDF, 0xBD, 0x8C,
|
||||
0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF0, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3,
|
||||
0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xC2, 0x49, 0xAD, 0xF0,
|
||||
0x25, 0xD0, 0xBC, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD,
|
||||
0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xA1, 0xA5, 0x40,
|
||||
0xC5, 0x41, 0xD0, 0x9B, 0xB0, 0x9C, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59,
|
||||
0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10,
|
||||
0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB,
|
||||
0x59, 0xD6, 0x02, 0xD0, 0xCD, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00,
|
||||
0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5,
|
||||
0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x4F, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot7[0x100] = {
|
||||
0x2C, 0x03, 0xC7, 0x70, 0x1B, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x15, 0x01, 0x9B, 0x1C, 0x1C, 0x1C,
|
||||
0x1C, 0x88, 0x18, 0x80, 0x2A, 0x38, 0x78, 0xA2, 0xFF, 0x9A, 0x80, 0x26, 0x38, 0xA2, 0x03, 0x60,
|
||||
0x8D, 0x78, 0x04, 0xA9, 0xC7, 0x8D, 0xF8, 0x07, 0x08, 0xC5, 0x39, 0xF0, 0xE8, 0x28, 0x4D, 0x7F,
|
||||
0x04, 0xD0, 0x1A, 0xAD, 0xFF, 0x07, 0x48, 0xAD, 0x7F, 0x07, 0x48, 0xAD, 0x78, 0x04, 0x60, 0x8D,
|
||||
0xF8, 0x07, 0x20, 0xD3, 0xC7, 0x70, 0x01, 0x60, 0xB0, 0x03, 0x6C, 0xCB, 0x00, 0xAD, 0x81, 0xC0,
|
||||
0xAD, 0x81, 0xC0, 0x20, 0x84, 0xFE, 0x20, 0x2F, 0xFB, 0x20, 0x58, 0xFC, 0x20, 0x93, 0xFE, 0x20,
|
||||
0x89, 0xFE, 0xA0, 0x10, 0xB9, 0x6F, 0xC7, 0x99, 0xDB, 0x07, 0x88, 0x10, 0xF7, 0x80, 0xFE, 0xC1,
|
||||
0xF0, 0xF0, 0xEC, 0xE5, 0xD4, 0xE1, 0xEC, 0xEB, 0xA0, 0xCF, 0xE6, 0xE6, 0xEC, 0xE9, 0xEE, 0xE5,
|
||||
0x8D, 0x28, 0xC0, 0x40, 0x8D, 0x28, 0xC0, 0x60, 0x8D, 0x28, 0xC0, 0x4C, 0x62, 0xFA, 0x8D, 0x28,
|
||||
0xC0, 0x2C, 0x87, 0xC7, 0x4C, 0x04, 0xC8, 0x8D, 0x28, 0xC0, 0x4C, 0xF1, 0xC7, 0x8D, 0x28, 0xC0,
|
||||
0x4C, 0xF6, 0xC7, 0x8D, 0x28, 0xC0, 0x4C, 0xF1, 0xC7, 0x8D, 0x28, 0xC0, 0x4C, 0x06, 0xC8, 0x8D,
|
||||
0x28, 0xC0, 0x4C, 0x4E, 0xC3, 0x8D, 0x28, 0xC0, 0x4C, 0x97, 0xC3, 0x8D, 0x28, 0xC0, 0x4C, 0x00,
|
||||
0xC1, 0x8D, 0x28, 0xC0, 0x4C, 0xA9, 0xD4, 0x8D, 0x28, 0xC0, 0x4C, 0x80, 0xC5, 0x8D, 0x28, 0xC0,
|
||||
0x4C, 0x4F, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xAC, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xC3, 0xC2, 0x8D,
|
||||
0x28, 0xC0, 0x4C, 0xF7, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xE0, 0xD4, 0x8D, 0x28, 0xC0, 0x6C, 0xED,
|
||||
0x03, 0x20, 0x23, 0xCE, 0x80, 0x8E, 0x20, 0x4D, 0xCE, 0x80, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
//
|
||||
// This file was automagically generated by bin2c (by James L. Hammons)
|
||||
//
|
||||
|
||||
char diskROM[0x100] = { // Loads at $C600 (slot 6)
|
||||
0xA2, 0x20, 0xA0, 0x00, 0xA2, 0x03, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C,
|
||||
0x49, 0xFF, 0x29, 0x7E, 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10,
|
||||
0xE5, 0x20, 0x58, 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x2B, 0xAA, 0xBD,
|
||||
0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0xBD, 0x8A, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, 0x80, 0xC0,
|
||||
0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8, 0xFC, 0x88,
|
||||
0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0xA9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xBD, 0x8C,
|
||||
0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF7, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3,
|
||||
0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xDF, 0x49, 0xAD, 0xF0,
|
||||
0x25, 0xD0, 0xD9, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD,
|
||||
0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xBE, 0xA5, 0x40,
|
||||
0xC5, 0x41, 0xD0, 0xB8, 0xB0, 0xB7, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59,
|
||||
0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10,
|
||||
0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB,
|
||||
0x59, 0xD6, 0x02, 0xD0, 0x87, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00,
|
||||
0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5,
|
||||
0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x2B, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char hdROM[0x100] = { // Loads at $C700 (slot 7)
|
||||
0xA9, 0x20, 0xA9, 0x00, 0xA9, 0x03, 0xA9, 0x3C, 0xA9, 0x00, 0x8D, 0xF2, 0xC0, 0xA9, 0x70, 0x8D,
|
||||
0xF3, 0xC0, 0xAD, 0xF0, 0xC0, 0x48, 0xAD, 0xF1, 0xC0, 0x18, 0xC9, 0x01, 0xD0, 0x01, 0x38, 0x68,
|
||||
0x90, 0x03, 0x4C, 0x00, 0xC6, 0xA9, 0x70, 0x85, 0x43, 0xA9, 0x00, 0x85, 0x44, 0x85, 0x46, 0x85,
|
||||
0x47, 0xA9, 0x08, 0x85, 0x45, 0xA9, 0x01, 0x85, 0x42, 0x20, 0x46, 0xC7, 0x90, 0x03, 0x4C, 0x00,
|
||||
0xC6, 0xA2, 0x70, 0x4C, 0x01, 0x08, 0x18, 0xA5, 0x42, 0x8D, 0xF2, 0xC0, 0xA5, 0x43, 0x8D, 0xF3,
|
||||
0xC0, 0xA5, 0x44, 0x8D, 0xF4, 0xC0, 0xA5, 0x45, 0x8D, 0xF5, 0xC0, 0xA5, 0x46, 0x8D, 0xF6, 0xC0,
|
||||
0xA5, 0x47, 0x8D, 0xF7, 0xC0, 0xAd, 0xF0, 0xC0, 0x48, 0xA5, 0x42, 0xC9, 0x01, 0xD0, 0x03, 0x20,
|
||||
0x7D, 0xC7, 0xAD, 0xF1, 0xC0, 0x18, 0xC9, 0x01, 0xD0, 0x01, 0x38, 0x68, 0x60, 0x98, 0x48, 0xA0,
|
||||
0x00, 0xAD, 0xF8, 0xC0, 0x91, 0x44, 0xC8, 0xD0, 0xF8, 0xE6, 0x45, 0xA0, 0x00, 0xAD, 0xF8, 0xC0,
|
||||
0x91, 0x44, 0xC8, 0xD0, 0xF8, 0x68, 0xA8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xD7, 0x46
|
||||
};
|
||||
|
||||
// Various firmware from the IIe ROM file...
|
||||
|
||||
//Not sure what the heck this is...
|
||||
char slot2e[0x100] = {
|
||||
0x2C, 0x58, 0xFF, 0x70, 0x0C, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x06, 0x01, 0x31, 0x8E, 0x94, 0x97,
|
||||
0x9A, 0x85, 0x27, 0x86, 0x35, 0x8A, 0x48, 0x98, 0x48, 0x08, 0x78, 0x8D, 0xFF, 0xCF, 0x20, 0x58,
|
||||
0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x8D, 0xF8, 0x07, 0xAA, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x26, 0xA8,
|
||||
0x28, 0x50, 0x29, 0x1E, 0x38, 0x05, 0x5E, 0x38, 0x05, 0xB9, 0x8A, 0xC0, 0x29, 0x1F, 0xD0, 0x05,
|
||||
0xA9, 0xEF, 0x20, 0x05, 0xC8, 0xE4, 0x37, 0xD0, 0x0B, 0xA9, 0x07, 0xC5, 0x36, 0xF0, 0x05, 0x85,
|
||||
0x36, 0x18, 0x90, 0x08, 0xE4, 0x39, 0xD0, 0xF9, 0xA9, 0x05, 0x85, 0x38, 0xBD, 0x38, 0x07, 0x29,
|
||||
0x02, 0x08, 0x90, 0x03, 0x4C, 0xBF, 0xC8, 0xBD, 0xB8, 0x04, 0x48, 0x0A, 0x10, 0x0E, 0xA6, 0x35,
|
||||
0xA5, 0x27, 0x09, 0x20, 0x9D, 0x00, 0x02, 0x85, 0x27, 0xAE, 0xF8, 0x07, 0x68, 0x29, 0xBF, 0x9D,
|
||||
0xB8, 0x04, 0x28, 0xF0, 0x06, 0x20, 0x63, 0xCB, 0x4C, 0xB5, 0xC8, 0x4C, 0xFC, 0xC8, 0x20, 0x00,
|
||||
0xC8, 0xA2, 0x00, 0x60, 0x4C, 0x9B, 0xC8, 0x4C, 0xAA, 0xC9, 0x4A, 0x20, 0x9B, 0xC9, 0xB0, 0x08,
|
||||
0x20, 0xF5, 0xCA, 0xF0, 0x06, 0x18, 0x90, 0x03, 0x20, 0xD2, 0xCA, 0xBD, 0xB8, 0x05, 0xAA, 0x60,
|
||||
0xA2, 0x03, 0xB5, 0x36, 0x48, 0xCA, 0x10, 0xFA, 0xAE, 0xF8, 0x07, 0xBD, 0x38, 0x06, 0x85, 0x36,
|
||||
0xBD, 0xB8, 0x04, 0x29, 0x38, 0x4A, 0x4A, 0x4A, 0x09, 0xC0, 0x85, 0x37, 0x8A, 0x48, 0xA5, 0x27,
|
||||
0x48, 0x09, 0x80, 0x20, 0xED, 0xFD, 0x68, 0x85, 0x27, 0x68, 0x8D, 0xF8, 0x07, 0xAA, 0x0A, 0x0A,
|
||||
0x0A, 0x0A, 0x85, 0x26, 0x8D, 0xFF, 0xCF, 0xA5, 0x36, 0x9D, 0x38, 0x06, 0xA2, 0x00, 0x68, 0x95,
|
||||
0x36, 0xE8, 0xE0, 0x04, 0x90, 0xF8, 0xAE, 0xF8, 0x07, 0x60, 0xC1, 0xD0, 0xD0, 0xCC, 0xC5, 0x08
|
||||
};
|
||||
|
||||
//This looks identical to diskROM
|
||||
char slot6e[0x100] = {
|
||||
0xA2, 0x20, 0xA0, 0x00, 0xA2, 0x03, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C,
|
||||
0x49, 0xFF, 0x29, 0x7E, 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10,
|
||||
0xE5, 0x20, 0x58, 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x2B, 0xAA, 0xBD,
|
||||
0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0xBD, 0x8A, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, 0x80, 0xC0,
|
||||
0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8, 0xFC, 0x88,
|
||||
0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0xA9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xBD, 0x8C,
|
||||
0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF7, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3,
|
||||
0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xDF, 0x49, 0xAD, 0xF0,
|
||||
0x25, 0xD0, 0xD9, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD,
|
||||
0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xBE, 0xA5, 0x40,
|
||||
0xC5, 0x41, 0xD0, 0xB8, 0xB0, 0xB7, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59,
|
||||
0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10,
|
||||
0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB,
|
||||
0x59, 0xD6, 0x02, 0xD0, 0x87, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00,
|
||||
0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5,
|
||||
0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x2B, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// Various firmware from the IIc
|
||||
|
||||
char slot1[0x100] = {
|
||||
0x2C, 0x89, 0xC1, 0x70, 0x0C, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x06, 0x01, 0x31, 0x9E, 0xA8, 0xB4,
|
||||
0xBB, 0xDA, 0xA2, 0xC1, 0x4C, 0x1C, 0xC2, 0x90, 0x03, 0x4C, 0xE5, 0xC7, 0x0A, 0x7A, 0x5A, 0xBD,
|
||||
0xB8, 0x04, 0xF0, 0x42, 0xA5, 0x24, 0xB0, 0x1C, 0xDD, 0xB8, 0x04, 0x90, 0x03, 0xBD, 0x38, 0x07,
|
||||
0xDD, 0x38, 0x07, 0xB0, 0x0B, 0xC9, 0x11, 0xB0, 0x11, 0x09, 0xF0, 0x3D, 0x38, 0x07, 0x65, 0x24,
|
||||
0x85, 0x24, 0x80, 0x06, 0xC5, 0x21, 0x90, 0x02, 0x64, 0x24, 0x7A, 0x5A, 0xBD, 0x38, 0x07, 0xDD,
|
||||
0xB8, 0x04, 0xB0, 0x08, 0xC5, 0x24, 0xB0, 0x0E, 0xA9, 0x40, 0x80, 0x02, 0xA9, 0x1A, 0xC0, 0x80,
|
||||
0x6A, 0x20, 0x9B, 0xC1, 0x80, 0xE4, 0x98, 0x20, 0x8A, 0xC1, 0xBD, 0xB8, 0x04, 0xF0, 0x17, 0x3C,
|
||||
0xB8, 0x06, 0x30, 0x12, 0xBD, 0x38, 0x07, 0xFD, 0xB8, 0x04, 0xC9, 0xF8, 0x90, 0x04, 0x18, 0x65,
|
||||
0x21, 0xAC, 0xA9, 0x00, 0x85, 0x24, 0x68, 0x7A, 0xFA, 0x60, 0x20, 0xA9, 0xC7, 0x90, 0xFA, 0x3C,
|
||||
0xB8, 0x06, 0x10, 0x07, 0xC9, 0x91, 0xF0, 0x03, 0x20, 0xF0, 0xFD, 0x4C, 0xCD, 0xC7, 0x5A, 0x48,
|
||||
0x20, 0xB6, 0xC2, 0x9E, 0xB8, 0x06, 0x80, 0x07, 0x5A, 0x20, 0xD9, 0xC7, 0x90, 0xFA, 0x90, 0x68,
|
||||
0x7A, 0xA2, 0x00, 0x60, 0x5A, 0x48, 0x20, 0x8A, 0xC1, 0x80, 0xF4, 0x5A, 0x48, 0x4A, 0xD0, 0x15,
|
||||
0x08, 0x20, 0xD3, 0xC7, 0x28, 0x90, 0x05, 0x29, 0x28, 0x0A, 0x80, 0x02, 0x29, 0x30, 0xC9, 0x10,
|
||||
0xF0, 0xDD, 0x18, 0x80, 0xDA, 0xA2, 0x40, 0x68, 0x7A, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot2[0x100] = {
|
||||
0x2C, 0x89, 0xC1, 0x70, 0x14, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x0E, 0x01, 0x31, 0x11, 0x13, 0x15,
|
||||
0x17, 0x80, 0x8B, 0x80, 0x93, 0x80, 0x9D, 0x80, 0xA2, 0xDA, 0xA2, 0xC2, 0x5A, 0x48, 0x8E, 0xF8,
|
||||
0x07, 0x50, 0x22, 0xA5, 0x36, 0x45, 0x38, 0xF0, 0x06, 0xA5, 0x37, 0xC5, 0x39, 0xF0, 0x03, 0x20,
|
||||
0xB6, 0xC2, 0x8A, 0x45, 0x39, 0x05, 0x38, 0xD0, 0x07, 0xA9, 0x05, 0x85, 0x38, 0x38, 0x80, 0x05,
|
||||
0xA9, 0x07, 0x85, 0x36, 0x18, 0xBD, 0xB8, 0x06, 0x89, 0x01, 0xD0, 0x03, 0x4C, 0x17, 0xC1, 0x90,
|
||||
0xFB, 0x68, 0x80, 0x28, 0x3C, 0xB8, 0x03, 0x50, 0x1C, 0x20, 0x8F, 0xC1, 0x80, 0x1E, 0x68, 0x20,
|
||||
0x70, 0xCC, 0x10, 0x1B, 0x20, 0xA9, 0xC7, 0xB0, 0xEB, 0x29, 0x5F, 0xC9, 0x51, 0xF0, 0x04, 0xC9,
|
||||
0x52, 0xD0, 0x09, 0xA9, 0x98, 0x7A, 0xFA, 0x60, 0x18, 0x20, 0xA3, 0xC7, 0x20, 0x4C, 0xCC, 0x48,
|
||||
0x20, 0xD9, 0xC7, 0xB0, 0x09, 0xBD, 0xB8, 0x06, 0x29, 0x10, 0xF0, 0xD2, 0x80, 0xF2, 0xA8, 0x68,
|
||||
0x5A, 0x20, 0xB8, 0xC3, 0x68, 0xBC, 0x38, 0x06, 0xF0, 0x12, 0x09, 0x80, 0xC9, 0x91, 0xF0, 0xDC,
|
||||
0xC9, 0xFF, 0xF0, 0xD8, 0xC9, 0x92, 0xF0, 0xD0, 0xC9, 0x94, 0xF0, 0xCD, 0x3C, 0xB8, 0x03, 0x50,
|
||||
0xC4, 0x20, 0xED, 0xFD, 0x80, 0xC6, 0x20, 0x9A, 0xCF, 0xBC, 0x29, 0xC2, 0x20, 0x7C, 0xC3, 0x48,
|
||||
0x88, 0x30, 0x04, 0xC0, 0x03, 0xD0, 0xF5, 0x20, 0x9A, 0xCF, 0x68, 0xBC, 0x2B, 0xC2, 0x99, 0xFB,
|
||||
0xBF, 0x68, 0x99, 0xFA, 0xBF, 0x68, 0x9D, 0xB8, 0x06, 0x29, 0x01, 0xD0, 0x02, 0xA9, 0x09, 0x9D,
|
||||
0x38, 0x06, 0x68, 0x9D, 0xB8, 0x04, 0x9E, 0xB8, 0x03, 0x60, 0x03, 0x07, 0xA0, 0xB0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot3[0x100] = {
|
||||
0x48, 0xDA, 0x5A, 0x80, 0x12, 0x38, 0x90, 0x18, 0x80, 0x1A, 0xEA, 0x01, 0x88, 0x2C, 0x2F, 0x32,
|
||||
0x35, 0x4C, 0xAF, 0xC7, 0x4C, 0xB5, 0xC7, 0x20, 0x20, 0xCE, 0x20, 0xBE, 0xCD, 0x20, 0x58, 0xFC,
|
||||
0x7A, 0xFA, 0x68, 0x18, 0xB0, 0x03, 0x4C, 0xF6, 0xFD, 0x4C, 0x1B, 0xFD, 0x4C, 0x41, 0xCF, 0x4C,
|
||||
0x35, 0xCF, 0x4C, 0xC2, 0xCE, 0x4C, 0xB1, 0xCE, 0xA9, 0x06, 0xCD, 0xB3, 0xFB, 0xF0, 0x3C, 0x20,
|
||||
0x60, 0xC3, 0xA9, 0xF8, 0x85, 0x37, 0x64, 0x36, 0xB2, 0x36, 0x92, 0x36, 0xE6, 0x36, 0xD0, 0xF8,
|
||||
0xE6, 0x37, 0xD0, 0xF4, 0xDA, 0xAE, 0x78, 0x04, 0x3C, 0x81, 0xC0, 0x3C, 0x81, 0xC0, 0xFA, 0x60,
|
||||
0xDA, 0xA2, 0x00, 0x2C, 0x11, 0xC0, 0x30, 0x02, 0xA2, 0x08, 0x2C, 0x12, 0xC0, 0x10, 0x02, 0xE8,
|
||||
0xE8, 0x2C, 0x81, 0xC0, 0x2C, 0x81, 0xC0, 0x8E, 0x78, 0x04, 0xFA, 0x60, 0xAD, 0x13, 0xC0, 0x0A,
|
||||
0xAD, 0x18, 0xC0, 0x08, 0x8D, 0x00, 0xC0, 0x8D, 0x03, 0xC0, 0xB9, 0x78, 0x04, 0x28, 0xB0, 0x03,
|
||||
0x8D, 0x02, 0xC0, 0x10, 0x03, 0x8D, 0x01, 0xC0, 0x60, 0x09, 0x80, 0xC9, 0xFB, 0xB0, 0x06, 0xC9,
|
||||
0xE1, 0x90, 0x02, 0x29, 0xDF, 0x60, 0x48, 0xA9, 0x08, 0x1C, 0xFB, 0x04, 0x68, 0x20, 0xED, 0xFD,
|
||||
0x4C, 0x44, 0xFD, 0x20, 0x9D, 0xCC, 0x80, 0x09, 0x20, 0x9D, 0xCC, 0x24, 0x32, 0x30, 0x02, 0x29,
|
||||
0x7F, 0x5A, 0x09, 0x00, 0x30, 0x15, 0x48, 0xAD, 0xFB, 0x04, 0x6A, 0x68, 0x90, 0x0D, 0x2C, 0x1E,
|
||||
0xC0, 0x10, 0x08, 0x49, 0x40, 0x89, 0x60, 0xF0, 0x02, 0x49, 0x40, 0x2C, 0x1F, 0xC0, 0x10, 0x19,
|
||||
0x48, 0x8D, 0x01, 0xC0, 0x98, 0x45, 0x20, 0x4A, 0xB0, 0x04, 0xAD, 0x55, 0xC0, 0xC8, 0x98, 0x4A,
|
||||
0xA8, 0x68, 0x91, 0x28, 0x2C, 0x54, 0xC0, 0x7A, 0x60, 0x91, 0x28, 0x7A, 0x60, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot4[0x100] = {
|
||||
0x80, 0x05, 0xA2, 0x03, 0x60, 0x38, 0x90, 0x18, 0x4C, 0xCF, 0xC5, 0x01, 0x20, 0x02, 0x02, 0x02,
|
||||
0x02, 0x00, 0x3B, 0xDC, 0x93, 0x82, 0x69, 0xBD, 0x6B, 0x1A, 0x9C, 0x7C, 0x07, 0xA2, 0x80, 0xA0,
|
||||
0x01, 0x9E, 0x7D, 0x04, 0x9E, 0x7D, 0x05, 0xA9, 0xFF, 0x9D, 0x7D, 0x06, 0xA9, 0x03, 0x9D, 0x7D,
|
||||
0x07, 0xA2, 0x00, 0x88, 0x10, 0xEB, 0x20, 0x6B, 0xC4, 0xA9, 0x00, 0xAA, 0x20, 0x9A, 0xCF, 0x8A,
|
||||
0x8D, 0x78, 0x04, 0x4A, 0x0D, 0x78, 0x04, 0xC9, 0x10, 0xB0, 0x1F, 0x29, 0x05, 0xF0, 0x01, 0x58,
|
||||
0x69, 0x55, 0x08, 0x78, 0x8E, 0xFC, 0x07, 0x8D, 0x79, 0xC0, 0xA2, 0x08, 0xCA, 0x0A, 0x90, 0x03,
|
||||
0x9D, 0x58, 0xC0, 0xD0, 0xF7, 0x8D, 0x78, 0xC0, 0x28, 0x18, 0x60, 0xA2, 0x80, 0x80, 0x02, 0xA2,
|
||||
0x00, 0xBD, 0x7D, 0x04, 0x9D, 0x7C, 0x04, 0xBD, 0x7D, 0x05, 0x9D, 0x7C, 0x05, 0xCA, 0x10, 0xEF,
|
||||
0x80, 0x0C, 0x9C, 0x7C, 0x04, 0x9C, 0x7C, 0x05, 0x9C, 0xFC, 0x04, 0x9C, 0xFC, 0x05, 0x9C, 0x7C,
|
||||
0x06, 0x18, 0x60, 0xA9, 0x20, 0x1C, 0x7C, 0x07, 0x2D, 0x7C, 0x06, 0x1C, 0x7C, 0x06, 0x2C, 0xFC,
|
||||
0x07, 0x30, 0x13, 0x2C, 0x63, 0xC0, 0x30, 0x02, 0x09, 0x80, 0x2C, 0x7C, 0x07, 0x10, 0x02, 0x09,
|
||||
0x40, 0x8D, 0x7C, 0x07, 0x18, 0x60, 0x0D, 0x7C, 0x07, 0x29, 0xE0, 0x80, 0xF4, 0x6A, 0x6A, 0x29,
|
||||
0x80, 0xAA, 0xAD, 0x78, 0x04, 0x9D, 0x7D, 0x04, 0xAD, 0x78, 0x05, 0x9D, 0x7D, 0x05, 0xAD, 0xF8,
|
||||
0x04, 0x9D, 0x7D, 0x06, 0xAD, 0xF8, 0x05, 0x9D, 0x7D, 0x07, 0x18, 0x60, 0x48, 0x18, 0xA9, 0x0E,
|
||||
0x2D, 0x7C, 0x07, 0xD0, 0x01, 0x38, 0x68, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot5[0x100] = {
|
||||
0xA2, 0x20, 0xA2, 0x00, 0xA2, 0x03, 0xC9, 0x00, 0xB0, 0x17, 0x38, 0xB0, 0x01, 0x18, 0xA2, 0x05,
|
||||
0x7E, 0x73, 0x04, 0x18, 0xA2, 0xC5, 0x8E, 0xF8, 0x07, 0xA2, 0x05, 0xAD, 0xFF, 0xCF, 0x4C, 0x97,
|
||||
0xC7, 0xA2, 0x05, 0x86, 0x58, 0xA9, 0xC5, 0x8D, 0xF8, 0x07, 0x20, 0x76, 0xC5, 0xA0, 0x05, 0xB9,
|
||||
0x70, 0xC5, 0x99, 0x42, 0x00, 0x88, 0x10, 0xF7, 0x20, 0x0A, 0xC5, 0xB0, 0x15, 0xAE, 0x00, 0x08,
|
||||
0xCA, 0xD0, 0x0F, 0xAE, 0x01, 0x08, 0xF0, 0x0A, 0xA5, 0x58, 0x0A, 0x0A, 0x0A, 0x0A, 0xAA, 0x4C,
|
||||
0x01, 0x08, 0xA2, 0x10, 0xBD, 0x5F, 0xC5, 0x9D, 0xDB, 0x07, 0xCA, 0x10, 0xF7, 0x80, 0xFE, 0xC3,
|
||||
0xE8, 0xE5, 0xE3, 0xEB, 0xA0, 0xC4, 0xE9, 0xF3, 0xEB, 0xA0, 0xC4, 0xF2, 0xE9, 0xF6, 0xE5, 0xAE,
|
||||
0x01, 0x50, 0x00, 0x08, 0x00, 0x00, 0xA2, 0x08, 0xBD, 0x83, 0xC5, 0x95, 0x00, 0xCA, 0x10, 0xF8,
|
||||
0x4C, 0x00, 0x00, 0x20, 0x0D, 0xC5, 0x05, 0x07, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0xA2, 0x03,
|
||||
0xA0, 0x00, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C, 0x49, 0xFF, 0x29, 0x7E,
|
||||
0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10, 0xE5, 0xA9, 0x08, 0x85,
|
||||
0x27, 0xA0, 0x7F, 0x60, 0xB9, 0x00, 0x02, 0xC8, 0x4C, 0x99, 0xC3, 0xC1, 0xF0, 0xF0, 0xEC, 0xE5,
|
||||
0xA0, 0xAF, 0xAF, 0xE3, 0x20, 0xD0, 0xF8, 0x20, 0x53, 0xF9, 0x85, 0x3A, 0x84, 0x3B, 0x60, 0x5A,
|
||||
0xB0, 0x1C, 0xA0, 0xC4, 0xC4, 0x39, 0xD0, 0x04, 0xA4, 0x38, 0xF0, 0x12, 0xDA, 0x48, 0x29, 0x7F,
|
||||
0xC9, 0x02, 0xB0, 0x06, 0x20, 0x3B, 0xC4, 0x20, 0x6B, 0xC4, 0x68, 0xFA, 0x7A, 0x60, 0x4C, 0x9D,
|
||||
0xC7, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x52, 0xC5, 0x4C, 0x76, 0xC5, 0x00, 0x00, 0x00, 0xBF, 0x0A
|
||||
};
|
||||
|
||||
char slot6[0x100] = {
|
||||
0xA2, 0x20, 0xA0, 0x00, 0x64, 0x03, 0x64, 0x3C, 0xA9, 0x60, 0xAA, 0x86, 0x2B, 0x85, 0x4F, 0x5A,
|
||||
0xBD, 0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0x7A, 0xB9, 0xEA, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD,
|
||||
0x80, 0xC0, 0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8,
|
||||
0xFC, 0x88, 0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0x20, 0x8E, 0xC5, 0x64, 0x03, 0x18,
|
||||
0x08, 0x28, 0xA6, 0x2B, 0xC6, 0x03, 0xD0, 0x0E, 0xBD, 0x88, 0xC0, 0xA5, 0x01, 0xC9, 0xC6, 0xD0,
|
||||
0xA4, 0x4C, 0x00, 0xC5, 0x00, 0x00, 0x08, 0x88, 0xD0, 0x04, 0xF0, 0xE5, 0x80, 0xDF, 0xBD, 0x8C,
|
||||
0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF0, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3,
|
||||
0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xC2, 0x49, 0xAD, 0xF0,
|
||||
0x25, 0xD0, 0xBC, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD,
|
||||
0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xA1, 0xA5, 0x40,
|
||||
0xC5, 0x41, 0xD0, 0x9B, 0xB0, 0x9C, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59,
|
||||
0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10,
|
||||
0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB,
|
||||
0x59, 0xD6, 0x02, 0xD0, 0xCD, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00,
|
||||
0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5,
|
||||
0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x4F, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
char slot7[0x100] = {
|
||||
0x2C, 0x03, 0xC7, 0x70, 0x1B, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x15, 0x01, 0x9B, 0x1C, 0x1C, 0x1C,
|
||||
0x1C, 0x88, 0x18, 0x80, 0x2A, 0x38, 0x78, 0xA2, 0xFF, 0x9A, 0x80, 0x26, 0x38, 0xA2, 0x03, 0x60,
|
||||
0x8D, 0x78, 0x04, 0xA9, 0xC7, 0x8D, 0xF8, 0x07, 0x08, 0xC5, 0x39, 0xF0, 0xE8, 0x28, 0x4D, 0x7F,
|
||||
0x04, 0xD0, 0x1A, 0xAD, 0xFF, 0x07, 0x48, 0xAD, 0x7F, 0x07, 0x48, 0xAD, 0x78, 0x04, 0x60, 0x8D,
|
||||
0xF8, 0x07, 0x20, 0xD3, 0xC7, 0x70, 0x01, 0x60, 0xB0, 0x03, 0x6C, 0xCB, 0x00, 0xAD, 0x81, 0xC0,
|
||||
0xAD, 0x81, 0xC0, 0x20, 0x84, 0xFE, 0x20, 0x2F, 0xFB, 0x20, 0x58, 0xFC, 0x20, 0x93, 0xFE, 0x20,
|
||||
0x89, 0xFE, 0xA0, 0x10, 0xB9, 0x6F, 0xC7, 0x99, 0xDB, 0x07, 0x88, 0x10, 0xF7, 0x80, 0xFE, 0xC1,
|
||||
0xF0, 0xF0, 0xEC, 0xE5, 0xD4, 0xE1, 0xEC, 0xEB, 0xA0, 0xCF, 0xE6, 0xE6, 0xEC, 0xE9, 0xEE, 0xE5,
|
||||
0x8D, 0x28, 0xC0, 0x40, 0x8D, 0x28, 0xC0, 0x60, 0x8D, 0x28, 0xC0, 0x4C, 0x62, 0xFA, 0x8D, 0x28,
|
||||
0xC0, 0x2C, 0x87, 0xC7, 0x4C, 0x04, 0xC8, 0x8D, 0x28, 0xC0, 0x4C, 0xF1, 0xC7, 0x8D, 0x28, 0xC0,
|
||||
0x4C, 0xF6, 0xC7, 0x8D, 0x28, 0xC0, 0x4C, 0xF1, 0xC7, 0x8D, 0x28, 0xC0, 0x4C, 0x06, 0xC8, 0x8D,
|
||||
0x28, 0xC0, 0x4C, 0x4E, 0xC3, 0x8D, 0x28, 0xC0, 0x4C, 0x97, 0xC3, 0x8D, 0x28, 0xC0, 0x4C, 0x00,
|
||||
0xC1, 0x8D, 0x28, 0xC0, 0x4C, 0xA9, 0xD4, 0x8D, 0x28, 0xC0, 0x4C, 0x80, 0xC5, 0x8D, 0x28, 0xC0,
|
||||
0x4C, 0x4F, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xAC, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xC3, 0xC2, 0x8D,
|
||||
0x28, 0xC0, 0x4C, 0xF7, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xE0, 0xD4, 0x8D, 0x28, 0xC0, 0x6C, 0xED,
|
||||
0x03, 0x20, 0x23, 0xCE, 0x80, 0x8E, 0x20, 0x4D, 0xCE, 0x80, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
|
1066
src/floppy.cpp
1066
src/floppy.cpp
File diff suppressed because it is too large
Load Diff
138
src/floppy.h
138
src/floppy.h
|
@ -1,69 +1,69 @@
|
|||
//
|
||||
// Apple 2 floppy disk support
|
||||
//
|
||||
|
||||
#ifndef __FLOPPY_H__
|
||||
#define __FLOPPY_H__
|
||||
|
||||
// MAX_PATH isn't defined in stdlib.h on *nix, so we do it here...
|
||||
#ifdef __GCCUNIX__
|
||||
#include <limits.h>
|
||||
#define MAX_PATH _POSIX_PATH_MAX
|
||||
#else
|
||||
#include <stdlib.h> // for MAX_PATH on MinGW/Darwin
|
||||
#endif
|
||||
#include "types.h"
|
||||
|
||||
enum { DT_UNKNOWN, DT_DOS33, DT_PRODOS, DT_NYBBLE };
|
||||
|
||||
class FloppyDrive
|
||||
{
|
||||
public:
|
||||
FloppyDrive();
|
||||
~FloppyDrive();
|
||||
|
||||
bool LoadImage(const char * filename, uint8 driveNum = 0);
|
||||
bool SaveImage(uint8 driveNum = 0);
|
||||
bool SaveImageAs(const char * filename, uint8 driveNum = 0);
|
||||
void CreateBlankImage(uint8 driveNum = 0);
|
||||
void SwapImages(void);
|
||||
|
||||
// I/O functions ($C0Ex accesses)
|
||||
|
||||
void ControlStepper(uint8 addr);
|
||||
void ControlMotor(uint8 addr);
|
||||
void DriveEnable(uint8 addr);
|
||||
uint8 ReadWrite(void);
|
||||
uint8 GetLatchValue(void);
|
||||
void SetLatchValue(uint8 value);
|
||||
void SetReadMode(void);
|
||||
void SetWriteMode(void);
|
||||
|
||||
protected:
|
||||
void DetectImageType(const char * filename, uint8 driveNum);
|
||||
void NybblizeImage(uint8 driveNum);
|
||||
void DenybblizeImage(uint8 driveNum);
|
||||
|
||||
private:
|
||||
char imageName[2][MAX_PATH];
|
||||
uint8 * disk[2];
|
||||
uint32 diskSize[2];
|
||||
uint8 diskType[2];
|
||||
bool imageDirty[2];
|
||||
uint8 motorOn;
|
||||
uint8 activeDrive;
|
||||
uint8 ioMode;
|
||||
uint8 latchValue;
|
||||
uint8 phase;
|
||||
uint8 track;
|
||||
|
||||
uint8 nybblizedImage[2][232960];
|
||||
uint32 currentPos;
|
||||
|
||||
// And here are some private class variables (to reduce function redundancy):
|
||||
static uint8 header[21];
|
||||
static uint8 doSector[16];
|
||||
static uint8 poSector[16];
|
||||
};
|
||||
|
||||
#endif // __FLOPPY_H__
|
||||
//
|
||||
// Apple 2 floppy disk support
|
||||
//
|
||||
|
||||
#ifndef __FLOPPY_H__
|
||||
#define __FLOPPY_H__
|
||||
|
||||
// MAX_PATH isn't defined in stdlib.h on *nix, so we do it here...
|
||||
#ifdef __GCCUNIX__
|
||||
#include <limits.h>
|
||||
#define MAX_PATH _POSIX_PATH_MAX
|
||||
#else
|
||||
#include <stdlib.h> // for MAX_PATH on MinGW/Darwin
|
||||
#endif
|
||||
#include "types.h"
|
||||
|
||||
enum { DT_UNKNOWN, DT_DOS33, DT_PRODOS, DT_NYBBLE };
|
||||
|
||||
class FloppyDrive
|
||||
{
|
||||
public:
|
||||
FloppyDrive();
|
||||
~FloppyDrive();
|
||||
|
||||
bool LoadImage(const char * filename, uint8 driveNum = 0);
|
||||
bool SaveImage(uint8 driveNum = 0);
|
||||
bool SaveImageAs(const char * filename, uint8 driveNum = 0);
|
||||
void CreateBlankImage(uint8 driveNum = 0);
|
||||
void SwapImages(void);
|
||||
|
||||
// I/O functions ($C0Ex accesses)
|
||||
|
||||
void ControlStepper(uint8 addr);
|
||||
void ControlMotor(uint8 addr);
|
||||
void DriveEnable(uint8 addr);
|
||||
uint8 ReadWrite(void);
|
||||
uint8 GetLatchValue(void);
|
||||
void SetLatchValue(uint8 value);
|
||||
void SetReadMode(void);
|
||||
void SetWriteMode(void);
|
||||
|
||||
protected:
|
||||
void DetectImageType(const char * filename, uint8 driveNum);
|
||||
void NybblizeImage(uint8 driveNum);
|
||||
void DenybblizeImage(uint8 driveNum);
|
||||
|
||||
private:
|
||||
char imageName[2][MAX_PATH];
|
||||
uint8 * disk[2];
|
||||
uint32 diskSize[2];
|
||||
uint8 diskType[2];
|
||||
bool imageDirty[2];
|
||||
uint8 motorOn;
|
||||
uint8 activeDrive;
|
||||
uint8 ioMode;
|
||||
uint8 latchValue;
|
||||
uint8 phase;
|
||||
uint8 track;
|
||||
|
||||
uint8 nybblizedImage[2][232960];
|
||||
uint32 currentPos;
|
||||
|
||||
// And here are some private class variables (to reduce function redundancy):
|
||||
static uint8 header[21];
|
||||
static uint8 doSector[16];
|
||||
static uint8 poSector[16];
|
||||
};
|
||||
|
||||
#endif // __FLOPPY_H__
|
||||
|
|
76
src/icon.h
76
src/icon.h
|
@ -1,38 +1,38 @@
|
|||
//
|
||||
// This file was automagically generated by raw2c (by James L. Hammons)
|
||||
//
|
||||
|
||||
char icon[0x1000] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
//
|
||||
// This file was automagically generated by raw2c (by James L. Hammons)
|
||||
//
|
||||
|
||||
char icon[0x1000] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
|
130
src/log.cpp
130
src/log.cpp
|
@ -1,65 +1,65 @@
|
|||
//
|
||||
// Log handler
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (C) 2006 Underground Software
|
||||
//
|
||||
// JLH = James L. Hammons <jlhamm@acm.org>
|
||||
//
|
||||
// WHO WHEN WHAT
|
||||
// --- ---------- ------------------------------------------------------------
|
||||
// JLH 01/03/2006 Moved includes out of header file for faster compilation
|
||||
//
|
||||
|
||||
#include "log.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include "types.h"
|
||||
|
||||
#define MAX_LOG_SIZE 10000000 // Maximum size of log file (10 MB)
|
||||
|
||||
static FILE * log_stream = NULL;
|
||||
static uint32 logSize = 0;
|
||||
|
||||
bool InitLog(char * path)
|
||||
{
|
||||
log_stream = fopen(path, "wrt");
|
||||
|
||||
if (log_stream == NULL)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LogDone(void)
|
||||
{
|
||||
if (log_stream)
|
||||
fclose(log_stream);
|
||||
}
|
||||
|
||||
//
|
||||
// This logger is used mainly to ensure that text gets written to the log file
|
||||
// even if the program crashes. The performance hit is acceptable in this case!
|
||||
//
|
||||
void WriteLog(const char * text, ...)
|
||||
{
|
||||
if (!log_stream)
|
||||
return;
|
||||
|
||||
va_list arg;
|
||||
|
||||
va_start(arg, text);
|
||||
logSize += vfprintf(log_stream, text, arg);
|
||||
|
||||
if (logSize > MAX_LOG_SIZE)
|
||||
{
|
||||
fflush(log_stream);
|
||||
fclose(log_stream);
|
||||
exit(1);
|
||||
}//*/
|
||||
|
||||
va_end(arg);
|
||||
fflush(log_stream); // Make sure that text is written!
|
||||
}
|
||||
//
|
||||
// Log handler
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (C) 2006 Underground Software
|
||||
//
|
||||
// JLH = James L. Hammons <jlhamm@acm.org>
|
||||
//
|
||||
// WHO WHEN WHAT
|
||||
// --- ---------- ------------------------------------------------------------
|
||||
// JLH 01/03/2006 Moved includes out of header file for faster compilation
|
||||
//
|
||||
|
||||
#include "log.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include "types.h"
|
||||
|
||||
#define MAX_LOG_SIZE 10000000 // Maximum size of log file (10 MB)
|
||||
|
||||
static FILE * log_stream = NULL;
|
||||
static uint32 logSize = 0;
|
||||
|
||||
bool InitLog(char * path)
|
||||
{
|
||||
log_stream = fopen(path, "wrt");
|
||||
|
||||
if (log_stream == NULL)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LogDone(void)
|
||||
{
|
||||
if (log_stream)
|
||||
fclose(log_stream);
|
||||
}
|
||||
|
||||
//
|
||||
// This logger is used mainly to ensure that text gets written to the log file
|
||||
// even if the program crashes. The performance hit is acceptable in this case!
|
||||
//
|
||||
void WriteLog(const char * text, ...)
|
||||
{
|
||||
if (!log_stream)
|
||||
return;
|
||||
|
||||
va_list arg;
|
||||
|
||||
va_start(arg, text);
|
||||
logSize += vfprintf(log_stream, text, arg);
|
||||
|
||||
if (logSize > MAX_LOG_SIZE)
|
||||
{
|
||||
fflush(log_stream);
|
||||
fclose(log_stream);
|
||||
exit(1);
|
||||
}//*/
|
||||
|
||||
va_end(arg);
|
||||
fflush(log_stream); // Make sure that text is written!
|
||||
}
|
||||
|
|
44
src/log.h
44
src/log.h
|
@ -1,22 +1,22 @@
|
|||
//
|
||||
// LOG.H
|
||||
//
|
||||
|
||||
#ifndef __LOG_H__
|
||||
#define __LOG_H__
|
||||
|
||||
// Make this header work with either C or C++
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
bool InitLog(char *);
|
||||
void LogDone(void);
|
||||
void WriteLog(const char * text, ...);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __LOG_H__
|
||||
//
|
||||
// LOG.H
|
||||
//
|
||||
|
||||
#ifndef __LOG_H__
|
||||
#define __LOG_H__
|
||||
|
||||
// Make this header work with either C or C++
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
bool InitLog(char *);
|
||||
void LogDone(void);
|
||||
void WriteLog(const char * text, ...);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __LOG_H__
|
||||
|
|
466
src/sound.cpp
466
src/sound.cpp
|
@ -1,233 +1,233 @@
|
|||
//
|
||||
// Sound Interface
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (C) 2005 Underground Software
|
||||
//
|
||||
// JLH = James L. Hammons <jlhamm@acm.org>
|
||||
//
|
||||
// WHO WHEN WHAT
|
||||
// --- ---------- ------------------------------------------------------------
|
||||
// JLH 12/02/2005 Fixed a problem with sound callback thread signaling the
|
||||
// main thread
|
||||
// JLH 12/03/2005 Fixed sound callback dropping samples when the sample buffer
|
||||
// is shorter than the callback sample buffer
|
||||
//
|
||||
|
||||
// STILL TO DO:
|
||||
//
|
||||
// - Figure out why it's losing samples (Bard's Tale) [DONE]
|
||||
//
|
||||
|
||||
#include "sound.h"
|
||||
|
||||
#include <string.h> // For memset, memcpy
|
||||
#include <SDL.h>
|
||||
#include "log.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
// Global variables
|
||||
|
||||
|
||||
// Local variables
|
||||
|
||||
static SDL_AudioSpec desired;
|
||||
static bool soundInitialized = false;
|
||||
static uint8 amplitude = 0x88; // $78 - $88 seems to be plenty loud!
|
||||
//static uint8 lastValue;
|
||||
|
||||
static bool speakerState;
|
||||
static uint8 soundBuffer[4096];
|
||||
static uint32 soundBufferPos;
|
||||
static uint32 sampleBase;
|
||||
static SDL_cond * conditional = NULL;
|
||||
static SDL_mutex * mutex = NULL;
|
||||
|
||||
// Private function prototypes
|
||||
|
||||
static void SDLSoundCallback(void * userdata, Uint8 * buffer, int length);
|
||||
|
||||
//
|
||||
// Initialize the SDL sound system
|
||||
//
|
||||
void SoundInit(void)
|
||||
{
|
||||
// To weed out problems for now...
|
||||
#if 0
|
||||
return;
|
||||
#endif
|
||||
|
||||
desired.freq = 44100; // SDL will do conversion on the fly, if it can't get the exact rate. Nice!
|
||||
desired.format = AUDIO_U8; // This uses the native endian (for portability)...
|
||||
desired.channels = 1;
|
||||
// desired.samples = 4096; // Let's try a 4K buffer (can always go lower)
|
||||
desired.samples = 2048; // Let's try a 2K buffer (can always go lower)
|
||||
desired.callback = SDLSoundCallback;
|
||||
|
||||
if (SDL_OpenAudio(&desired, NULL) < 0) // NULL means SDL guarantees what we want
|
||||
{
|
||||
WriteLog("Sound: Failed to initialize SDL sound.\n");
|
||||
// exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
conditional = SDL_CreateCond();
|
||||
mutex = SDL_CreateMutex();
|
||||
SDL_mutexP(mutex); // Must lock the mutex for the cond to work properly...
|
||||
// lastValue = (speakerState ? amplitude : 0xFF - amplitude);
|
||||
soundBufferPos = 0;
|
||||
sampleBase = 0;
|
||||
|
||||
SDL_PauseAudio(false); // Start playback!
|
||||
soundInitialized = true;
|
||||
WriteLog("Sound: Successfully initialized.\n");
|
||||
}
|
||||
|
||||
//
|
||||
// Close down the SDL sound subsystem
|
||||
//
|
||||
void SoundDone(void)
|
||||
{
|
||||
if (soundInitialized)
|
||||
{
|
||||
SDL_PauseAudio(true);
|
||||
SDL_CloseAudio();
|
||||
SDL_DestroyCond(conditional);
|
||||
SDL_DestroyMutex(mutex);
|
||||
WriteLog("Sound: Done.\n");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Sound card callback handler
|
||||
//
|
||||
static void SDLSoundCallback(void * userdata, Uint8 * buffer, int length)
|
||||
{
|
||||
// The sound buffer should only starve when starting which will cause it to
|
||||
// lag behind the emulation at most by around 1 frame...
|
||||
|
||||
if (soundBufferPos < (uint32)length) // The sound buffer is starved...
|
||||
{
|
||||
//printf("Sound buffer starved!\n");
|
||||
//fflush(stdout);
|
||||
for(uint32 i=0; i<soundBufferPos; i++)
|
||||
buffer[i] = soundBuffer[i];
|
||||
// Fill buffer with last value
|
||||
uint8 lastValue = (speakerState ? amplitude : 0xFF - amplitude);
|
||||
// uint8 lastValue = (speakerState ? amplitude : amplitude ^ 0xFF);
|
||||
// memset(buffer, lastValue, length); // Fill buffer with last value
|
||||
memset(buffer + soundBufferPos, lastValue, length - soundBufferPos);
|
||||
soundBufferPos = 0; // Reset soundBufferPos to start of buffer...
|
||||
sampleBase = 0; // & sampleBase...
|
||||
//Ick. This should never happen!
|
||||
SDL_CondSignal(conditional); // Wake up any threads waiting for the buffer to drain...
|
||||
return; // & bail!
|
||||
}
|
||||
|
||||
memcpy(buffer, soundBuffer, length); // Fill sound buffer with frame buffered sound
|
||||
soundBufferPos -= length;
|
||||
sampleBase -= length;
|
||||
|
||||
// if (soundBufferPos > 0)
|
||||
// memcpy(soundBuffer, soundBuffer + length, soundBufferPos); // Move current buffer down to start
|
||||
// memcpy(soundBuffer, soundBuffer + length, length);
|
||||
// Move current buffer down to start
|
||||
for(uint32 i=0; i<soundBufferPos; i++)
|
||||
soundBuffer[i] = soundBuffer[length + i];
|
||||
|
||||
// lastValue = buffer[length - 1];
|
||||
SDL_CondSignal(conditional); // Wake up any threads waiting for the buffer to drain...
|
||||
}
|
||||
|
||||
// Need some interface functions here to take care of flipping the
|
||||
// waveform at the correct time in the sound stream...
|
||||
|
||||
/*
|
||||
Maybe set up a buffer 1 frame long (44100 / 60 = 735 bytes per frame)
|
||||
|
||||
Hmm. That's smaller than the sound buffer 2048 bytes... (About 2.75 frames needed to fill)
|
||||
|
||||
So... I guess what we could do is this:
|
||||
|
||||
-- Execute V65C02 for one frame. The read/writes at I/O address $C030 fill up the buffer
|
||||
to the current time position.
|
||||
-- The sound callback function copies the pertinent area out of the buffer, resets
|
||||
the time position back (or copies data down from what it took out)
|
||||
*/
|
||||
|
||||
void ToggleSpeaker(uint32 time)
|
||||
{
|
||||
if (!soundInitialized)
|
||||
return;
|
||||
|
||||
#if 0
|
||||
if (time > 95085)//(time & 0x80000000)
|
||||
{
|
||||
WriteLog("ToggleSpeaker() given bad time value: %08X (%u)!\n", time, time);
|
||||
// fflush(stdout);
|
||||
}
|
||||
#endif
|
||||
|
||||
// 1.024 MHz / 60 = 17066.6... cycles (23.2199 cycles per sample)
|
||||
// Need the last frame position in order to calculate correctly...
|
||||
|
||||
SDL_LockAudio();
|
||||
uint8 sample = (speakerState ? amplitude : 0xFF - amplitude);
|
||||
// uint8 sample = (speakerState ? amplitude : amplitude ^ 0xFF);
|
||||
uint32 currentPos = sampleBase + (uint32)((double)time / 23.2199);
|
||||
|
||||
if (currentPos > 4095)
|
||||
{
|
||||
#if 0
|
||||
WriteLog("ToggleSpeaker() about to go into spinlock at time: %08X (%u) (sampleBase=%u)!\n", time, time, sampleBase);
|
||||
#endif
|
||||
// Still hanging on this spinlock...
|
||||
// That could be because the "time" value is too high and so the buffer will NEVER be
|
||||
// empty enough...
|
||||
// Now that we're using a conditional, it seems to be working OK--though not perfectly...
|
||||
/*
|
||||
ToggleSpeaker() about to go into spinlock at time: 00004011 (16401) (sampleBase=3504)!
|
||||
16401 -> 706 samples, 3504 + 706 = 4210
|
||||
|
||||
And it still thrashed the sound even though it didn't run into a spinlock...
|
||||
|
||||
Seems like it's OK now that I've fixed the buffer-less-than-length bug...
|
||||
*/
|
||||
SDL_UnlockAudio();
|
||||
SDL_CondWait(conditional, mutex);
|
||||
|
||||
// while (currentPos > 4095) // Spin until buffer empties a bit...
|
||||
currentPos = sampleBase + (uint32)((double)time / 23.2199);
|
||||
SDL_LockAudio();
|
||||
#if 0
|
||||
WriteLog("--> after spinlock (sampleBase=%u)...\n", sampleBase);
|
||||
#endif
|
||||
}
|
||||
|
||||
while (soundBufferPos < currentPos)
|
||||
soundBuffer[soundBufferPos++] = sample;
|
||||
|
||||
speakerState = !speakerState;
|
||||
SDL_UnlockAudio();
|
||||
}
|
||||
|
||||
void HandleSoundAtFrameEdge(void)
|
||||
{
|
||||
if (!soundInitialized)
|
||||
return;
|
||||
|
||||
SDL_LockAudio();
|
||||
sampleBase += 735;
|
||||
SDL_UnlockAudio();
|
||||
/* uint8 sample = (speakerState ? amplitude : 0xFF - amplitude);
|
||||
|
||||
//This shouldn't happen (buffer overflow), but it seems like it *is* happening...
|
||||
if (sampleBase >= 4096)
|
||||
// sampleBase = 4095;
|
||||
//Kludge, for now... Until I can figure out why it's still stomping on the buffer...
|
||||
sampleBase = 0;
|
||||
|
||||
while (soundBufferPos < sampleBase)
|
||||
soundBuffer[soundBufferPos++] = sample;//*/
|
||||
}
|
||||
//
|
||||
// Sound Interface
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (C) 2005 Underground Software
|
||||
//
|
||||
// JLH = James L. Hammons <jlhamm@acm.org>
|
||||
//
|
||||
// WHO WHEN WHAT
|
||||
// --- ---------- ------------------------------------------------------------
|
||||
// JLH 12/02/2005 Fixed a problem with sound callback thread signaling the
|
||||
// main thread
|
||||
// JLH 12/03/2005 Fixed sound callback dropping samples when the sample buffer
|
||||
// is shorter than the callback sample buffer
|
||||
//
|
||||
|
||||
// STILL TO DO:
|
||||
//
|
||||
// - Figure out why it's losing samples (Bard's Tale) [DONE]
|
||||
//
|
||||
|
||||
#include "sound.h"
|
||||
|
||||
#include <string.h> // For memset, memcpy
|
||||
#include <SDL.h>
|
||||
#include "log.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
// Global variables
|
||||
|
||||
|
||||
// Local variables
|
||||
|
||||
static SDL_AudioSpec desired;
|
||||
static bool soundInitialized = false;
|
||||
static uint8 amplitude = 0x88; // $78 - $88 seems to be plenty loud!
|
||||
//static uint8 lastValue;
|
||||
|
||||
static bool speakerState;
|
||||
static uint8 soundBuffer[4096];
|
||||
static uint32 soundBufferPos;
|
||||
static uint32 sampleBase;
|
||||
static SDL_cond * conditional = NULL;
|
||||
static SDL_mutex * mutex = NULL;
|
||||
|
||||
// Private function prototypes
|
||||
|
||||
static void SDLSoundCallback(void * userdata, Uint8 * buffer, int length);
|
||||
|
||||
//
|
||||
// Initialize the SDL sound system
|
||||
//
|
||||
void SoundInit(void)
|
||||
{
|
||||
// To weed out problems for now...
|
||||
#if 0
|
||||
return;
|
||||
#endif
|
||||
|
||||
desired.freq = 44100; // SDL will do conversion on the fly, if it can't get the exact rate. Nice!
|
||||
desired.format = AUDIO_U8; // This uses the native endian (for portability)...
|
||||
desired.channels = 1;
|
||||
// desired.samples = 4096; // Let's try a 4K buffer (can always go lower)
|
||||
desired.samples = 2048; // Let's try a 2K buffer (can always go lower)
|
||||
desired.callback = SDLSoundCallback;
|
||||
|
||||
if (SDL_OpenAudio(&desired, NULL) < 0) // NULL means SDL guarantees what we want
|
||||
{
|
||||
WriteLog("Sound: Failed to initialize SDL sound.\n");
|
||||
// exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
conditional = SDL_CreateCond();
|
||||
mutex = SDL_CreateMutex();
|
||||
SDL_mutexP(mutex); // Must lock the mutex for the cond to work properly...
|
||||
// lastValue = (speakerState ? amplitude : 0xFF - amplitude);
|
||||
soundBufferPos = 0;
|
||||
sampleBase = 0;
|
||||
|
||||
SDL_PauseAudio(false); // Start playback!
|
||||
soundInitialized = true;
|
||||
WriteLog("Sound: Successfully initialized.\n");
|
||||
}
|
||||
|
||||
//
|
||||
// Close down the SDL sound subsystem
|
||||
//
|
||||
void SoundDone(void)
|
||||
{
|
||||
if (soundInitialized)
|
||||
{
|
||||
SDL_PauseAudio(true);
|
||||
SDL_CloseAudio();
|
||||
SDL_DestroyCond(conditional);
|
||||
SDL_DestroyMutex(mutex);
|
||||
WriteLog("Sound: Done.\n");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Sound card callback handler
|
||||
//
|
||||
static void SDLSoundCallback(void * userdata, Uint8 * buffer, int length)
|
||||
{
|
||||
// The sound buffer should only starve when starting which will cause it to
|
||||
// lag behind the emulation at most by around 1 frame...
|
||||
|
||||
if (soundBufferPos < (uint32)length) // The sound buffer is starved...
|
||||
{
|
||||
//printf("Sound buffer starved!\n");
|
||||
//fflush(stdout);
|
||||
for(uint32 i=0; i<soundBufferPos; i++)
|
||||
buffer[i] = soundBuffer[i];
|
||||
// Fill buffer with last value
|
||||
uint8 lastValue = (speakerState ? amplitude : 0xFF - amplitude);
|
||||
// uint8 lastValue = (speakerState ? amplitude : amplitude ^ 0xFF);
|
||||
// memset(buffer, lastValue, length); // Fill buffer with last value
|
||||
memset(buffer + soundBufferPos, lastValue, length - soundBufferPos);
|
||||
soundBufferPos = 0; // Reset soundBufferPos to start of buffer...
|
||||
sampleBase = 0; // & sampleBase...
|
||||
//Ick. This should never happen!
|
||||
SDL_CondSignal(conditional); // Wake up any threads waiting for the buffer to drain...
|
||||
return; // & bail!
|
||||
}
|
||||
|
||||
memcpy(buffer, soundBuffer, length); // Fill sound buffer with frame buffered sound
|
||||
soundBufferPos -= length;
|
||||
sampleBase -= length;
|
||||
|
||||
// if (soundBufferPos > 0)
|
||||
// memcpy(soundBuffer, soundBuffer + length, soundBufferPos); // Move current buffer down to start
|
||||
// memcpy(soundBuffer, soundBuffer + length, length);
|
||||
// Move current buffer down to start
|
||||
for(uint32 i=0; i<soundBufferPos; i++)
|
||||
soundBuffer[i] = soundBuffer[length + i];
|
||||
|
||||
// lastValue = buffer[length - 1];
|
||||
SDL_CondSignal(conditional); // Wake up any threads waiting for the buffer to drain...
|
||||
}
|
||||
|
||||
// Need some interface functions here to take care of flipping the
|
||||
// waveform at the correct time in the sound stream...
|
||||
|
||||
/*
|
||||
Maybe set up a buffer 1 frame long (44100 / 60 = 735 bytes per frame)
|
||||
|
||||
Hmm. That's smaller than the sound buffer 2048 bytes... (About 2.75 frames needed to fill)
|
||||
|
||||
So... I guess what we could do is this:
|
||||
|
||||
-- Execute V65C02 for one frame. The read/writes at I/O address $C030 fill up the buffer
|
||||
to the current time position.
|
||||
-- The sound callback function copies the pertinent area out of the buffer, resets
|
||||
the time position back (or copies data down from what it took out)
|
||||
*/
|
||||
|
||||
void ToggleSpeaker(uint32 time)
|
||||
{
|
||||
if (!soundInitialized)
|
||||
return;
|
||||
|
||||
#if 0
|
||||
if (time > 95085)//(time & 0x80000000)
|
||||
{
|
||||
WriteLog("ToggleSpeaker() given bad time value: %08X (%u)!\n", time, time);
|
||||
// fflush(stdout);
|
||||
}
|
||||
#endif
|
||||
|
||||
// 1.024 MHz / 60 = 17066.6... cycles (23.2199 cycles per sample)
|
||||
// Need the last frame position in order to calculate correctly...
|
||||
|
||||
SDL_LockAudio();
|
||||
uint8 sample = (speakerState ? amplitude : 0xFF - amplitude);
|
||||
// uint8 sample = (speakerState ? amplitude : amplitude ^ 0xFF);
|
||||
uint32 currentPos = sampleBase + (uint32)((double)time / 23.2199);
|
||||
|
||||
if (currentPos > 4095)
|
||||
{
|
||||
#if 0
|
||||
WriteLog("ToggleSpeaker() about to go into spinlock at time: %08X (%u) (sampleBase=%u)!\n", time, time, sampleBase);
|
||||
#endif
|
||||
// Still hanging on this spinlock...
|
||||
// That could be because the "time" value is too high and so the buffer will NEVER be
|
||||
// empty enough...
|
||||
// Now that we're using a conditional, it seems to be working OK--though not perfectly...
|
||||
/*
|
||||
ToggleSpeaker() about to go into spinlock at time: 00004011 (16401) (sampleBase=3504)!
|
||||
16401 -> 706 samples, 3504 + 706 = 4210
|
||||
|
||||
And it still thrashed the sound even though it didn't run into a spinlock...
|
||||
|
||||
Seems like it's OK now that I've fixed the buffer-less-than-length bug...
|
||||
*/
|
||||
SDL_UnlockAudio();
|
||||
SDL_CondWait(conditional, mutex);
|
||||
|
||||
// while (currentPos > 4095) // Spin until buffer empties a bit...
|
||||
currentPos = sampleBase + (uint32)((double)time / 23.2199);
|
||||
SDL_LockAudio();
|
||||
#if 0
|
||||
WriteLog("--> after spinlock (sampleBase=%u)...\n", sampleBase);
|
||||
#endif
|
||||
}
|
||||
|
||||
while (soundBufferPos < currentPos)
|
||||
soundBuffer[soundBufferPos++] = sample;
|
||||
|
||||
speakerState = !speakerState;
|
||||
SDL_UnlockAudio();
|
||||
}
|
||||
|
||||
void HandleSoundAtFrameEdge(void)
|
||||
{
|
||||
if (!soundInitialized)
|
||||
return;
|
||||
|
||||
SDL_LockAudio();
|
||||
sampleBase += 735;
|
||||
SDL_UnlockAudio();
|
||||
/* uint8 sample = (speakerState ? amplitude : 0xFF - amplitude);
|
||||
|
||||
//This shouldn't happen (buffer overflow), but it seems like it *is* happening...
|
||||
if (sampleBase >= 4096)
|
||||
// sampleBase = 4095;
|
||||
//Kludge, for now... Until I can figure out why it's still stomping on the buffer...
|
||||
sampleBase = 0;
|
||||
|
||||
while (soundBufferPos < sampleBase)
|
||||
soundBuffer[soundBufferPos++] = sample;//*/
|
||||
}
|
||||
|
|
46
src/sound.h
46
src/sound.h
|
@ -1,23 +1,23 @@
|
|||
//
|
||||
// SOUND.H
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (C) 2004 Underground Software
|
||||
//
|
||||
|
||||
#ifndef __SOUND_H__
|
||||
#define __SOUND_H__
|
||||
|
||||
#include "types.h"
|
||||
|
||||
// Global variables (exported)
|
||||
|
||||
|
||||
// Functions
|
||||
|
||||
void SoundInit(void);
|
||||
void SoundDone(void);
|
||||
void ToggleSpeaker(uint32 time);
|
||||
void HandleSoundAtFrameEdge(void);
|
||||
|
||||
#endif // __SOUND_H__
|
||||
//
|
||||
// SOUND.H
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (C) 2004 Underground Software
|
||||
//
|
||||
|
||||
#ifndef __SOUND_H__
|
||||
#define __SOUND_H__
|
||||
|
||||
#include "types.h"
|
||||
|
||||
// Global variables (exported)
|
||||
|
||||
|
||||
// Functions
|
||||
|
||||
void SoundInit(void);
|
||||
void SoundDone(void);
|
||||
void ToggleSpeaker(uint32 time);
|
||||
void HandleSoundAtFrameEdge(void);
|
||||
|
||||
#endif // __SOUND_H__
|
||||
|
|
4744
src/v65c02.cpp
4744
src/v65c02.cpp
File diff suppressed because it is too large
Load Diff
110
src/v65c02.h
110
src/v65c02.h
|
@ -1,55 +1,55 @@
|
|||
//
|
||||
// Virtual 65C02 Header file
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (c) 2005 Underground Software
|
||||
//
|
||||
|
||||
#ifndef __V65C02_H__
|
||||
#define __V65C02_H__
|
||||
|
||||
#include "types.h"
|
||||
|
||||
// Useful defines
|
||||
|
||||
#define FLAG_N 0x80 // Negative
|
||||
#define FLAG_V 0x40 // oVerflow
|
||||
#define FLAG_UNK 0x20 // ??? (always set when read?)
|
||||
#define FLAG_B 0x10 // Break
|
||||
#define FLAG_D 0x08 // Decimal
|
||||
#define FLAG_I 0x04 // Interrupt
|
||||
#define FLAG_Z 0x02 // Zero
|
||||
#define FLAG_C 0x01 // Carry
|
||||
|
||||
#define V65C02_ASSERT_LINE_RESET 0x0001 // v65C02 RESET line
|
||||
#define V65C02_ASSERT_LINE_IRQ 0x0002 // v65C02 IRQ line
|
||||
#define V65C02_ASSERT_LINE_NMI 0x0004 // v65C02 NMI line
|
||||
#define V65C02_STATE_ILLEGAL_INST 0x0008 // Illegal instruction executed flag
|
||||
//#define V65C02_START_DEBUG_LOG 0x0020 // Debug log go (temporary!)
|
||||
|
||||
// Useful structs
|
||||
|
||||
struct V65C02REGS
|
||||
{
|
||||
uint16 pc; // 65C02 PC register
|
||||
uint8 cc; // 65C02 Condition Code register
|
||||
uint8 sp; // 65C02 System stack pointer (bound to $01xx)
|
||||
uint8 a; // 65C02 A register
|
||||
uint8 x; // 65C02 X index register
|
||||
uint8 y; // 65C02 Y register
|
||||
uint32 clock; // 65C02 clock
|
||||
uint8 (* RdMem)(uint16); // Address of BYTE read routine
|
||||
void (* WrMem)(uint16, uint8); // Address of BYTE write routine
|
||||
uint16 cpuFlags; // v65C02 IRQ/RESET flags
|
||||
};
|
||||
|
||||
// Global variables (exported)
|
||||
|
||||
extern bool dumpDis;
|
||||
|
||||
// Function prototypes
|
||||
|
||||
void Execute65C02(V65C02REGS *, uint32); // Function to execute 65C02 instructions
|
||||
uint32 GetCurrentV65C02Clock(void); // Get the clock of the currently executing CPU
|
||||
|
||||
#endif // __V65C02_H__
|
||||
//
|
||||
// Virtual 65C02 Header file
|
||||
//
|
||||
// by James L. Hammons
|
||||
// (c) 2005 Underground Software
|
||||
//
|
||||
|
||||
#ifndef __V65C02_H__
|
||||
#define __V65C02_H__
|
||||
|
||||
#include "types.h"
|
||||
|
||||
// Useful defines
|
||||
|
||||
#define FLAG_N 0x80 // Negative
|
||||
#define FLAG_V 0x40 // oVerflow
|
||||
#define FLAG_UNK 0x20 // ??? (always set when read?)
|
||||
#define FLAG_B 0x10 // Break
|
||||
#define FLAG_D 0x08 // Decimal
|
||||
#define FLAG_I 0x04 // Interrupt
|
||||
#define FLAG_Z 0x02 // Zero
|
||||
#define FLAG_C 0x01 // Carry
|
||||
|
||||
#define V65C02_ASSERT_LINE_RESET 0x0001 // v65C02 RESET line
|
||||
#define V65C02_ASSERT_LINE_IRQ 0x0002 // v65C02 IRQ line
|
||||
#define V65C02_ASSERT_LINE_NMI 0x0004 // v65C02 NMI line
|
||||
#define V65C02_STATE_ILLEGAL_INST 0x0008 // Illegal instruction executed flag
|
||||
//#define V65C02_START_DEBUG_LOG 0x0020 // Debug log go (temporary!)
|
||||
|
||||
// Useful structs
|
||||
|
||||
struct V65C02REGS
|
||||
{
|
||||
uint16 pc; // 65C02 PC register
|
||||
uint8 cc; // 65C02 Condition Code register
|
||||
uint8 sp; // 65C02 System stack pointer (bound to $01xx)
|
||||
uint8 a; // 65C02 A register
|
||||
uint8 x; // 65C02 X index register
|
||||
uint8 y; // 65C02 Y register
|
||||
uint32 clock; // 65C02 clock
|
||||
uint8 (* RdMem)(uint16); // Address of BYTE read routine
|
||||
void (* WrMem)(uint16, uint8); // Address of BYTE write routine
|
||||
uint16 cpuFlags; // v65C02 IRQ/RESET flags
|
||||
};
|
||||
|
||||
// Global variables (exported)
|
||||
|
||||
extern bool dumpDis;
|
||||
|
||||
// Function prototypes
|
||||
|
||||
void Execute65C02(V65C02REGS *, uint32); // Function to execute 65C02 instructions
|
||||
uint32 GetCurrentV65C02Clock(void); // Get the clock of the currently executing CPU
|
||||
|
||||
#endif // __V65C02_H__
|
||||
|
|
604
src/video.cpp
604
src/video.cpp
|
@ -1,302 +1,302 @@
|
|||
//
|
||||
// VIDEO.CPP: SDL/local hardware specific video routines
|
||||
//
|
||||
// by James L. Hammons
|
||||
//
|
||||
// JLH = James L. Hammons <jlhamm@acm.org>
|
||||
//
|
||||
// WHO WHEN WHAT
|
||||
// --- ---------- ------------------------------------------------------------
|
||||
// JLH 01/04/2006 Added changelog ;-)
|
||||
// JLH 01/20/2006 Cut out unnecessary buffering
|
||||
//
|
||||
|
||||
#include "video.h"
|
||||
|
||||
//#include <SDL.h>
|
||||
#include <string.h> // Why??? (for memset, etc... Lazy!) Dunno why, but this just strikes me as wrong...
|
||||
#include <malloc.h>
|
||||
#include "sdlemu_opengl.h"
|
||||
#include "log.h"
|
||||
#include "settings.h"
|
||||
#include "icon.h"
|
||||
|
||||
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
||||
#define MASK_R 0xFF000000
|
||||
#define MASK_G 0x00FF0000
|
||||
#define MASK_B 0x0000FF00
|
||||
#define MASK_A 0x000000FF
|
||||
#else
|
||||
#define MASK_R 0x000000FF
|
||||
#define MASK_G 0x0000FF00
|
||||
#define MASK_B 0x00FF0000
|
||||
#define MASK_A 0xFF000000
|
||||
#endif
|
||||
|
||||
//#define TEST_ALPHA_BLENDING
|
||||
|
||||
// Exported global variables (actually, these are LOCAL global variables, EXPORTED...)
|
||||
|
||||
SDL_Surface * surface, * mainSurface, * someAlphaSurface;
|
||||
Uint32 mainSurfaceFlags;
|
||||
//uint32 scrBuffer[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT];
|
||||
uint32 * scrBuffer = NULL;
|
||||
SDL_Joystick * joystick;
|
||||
|
||||
//
|
||||
// Prime SDL and create surfaces
|
||||
//
|
||||
bool InitVideo(void)
|
||||
{
|
||||
// Set up SDL library
|
||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE) < 0)
|
||||
{
|
||||
WriteLog("Video: Could not initialize the SDL library: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
//Set icon (mainly for Win32 target--though seems to work under KDE as well...!)
|
||||
SDL_Surface * iconSurf = SDL_CreateRGBSurfaceFrom(icon, 32, 32, 32, 128,
|
||||
MASK_R, MASK_G, MASK_B, MASK_A);
|
||||
SDL_WM_SetIcon(iconSurf, NULL);
|
||||
SDL_FreeSurface(iconSurf);
|
||||
|
||||
// Get proper info about the platform we're running on...
|
||||
const SDL_VideoInfo * info = SDL_GetVideoInfo();
|
||||
|
||||
if (!info)
|
||||
{
|
||||
WriteLog("Video: SDL is unable to get the video info: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (settings.useOpenGL)
|
||||
{
|
||||
mainSurfaceFlags = SDL_HWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF | SDL_OPENGL;
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
mainSurfaceFlags = SDL_DOUBLEBUF;
|
||||
|
||||
if (info->hw_available)
|
||||
{
|
||||
mainSurfaceFlags = SDL_HWSURFACE | SDL_HWPALETTE;
|
||||
WriteLog("Video: Hardware available...\n");
|
||||
}
|
||||
|
||||
if (info->blit_hw)
|
||||
{
|
||||
mainSurfaceFlags |= SDL_HWACCEL;
|
||||
WriteLog("Video: Hardware blit available...\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.fullscreen)
|
||||
mainSurfaceFlags |= SDL_FULLSCREEN;
|
||||
|
||||
// Create the primary SDL display (32 BPP)
|
||||
if (!settings.useOpenGL)
|
||||
mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags);
|
||||
else
|
||||
// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH * 2, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags);
|
||||
// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags);
|
||||
mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags);
|
||||
|
||||
if (mainSurface == NULL)
|
||||
{
|
||||
WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
SDL_WM_SetCaption("Apple 2 SDL", "Apple 2 SDL");
|
||||
|
||||
// Create the secondary SDL display (32 BPP) that we use directly
|
||||
surface = SDL_CreateRGBSurface(SDL_SWSURFACE, VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32,
|
||||
MASK_R, MASK_G, MASK_B, MASK_A);
|
||||
/*WriteLog("Video: Created secondary surface with attributes:\n\n");
|
||||
WriteLog("\tWidth, height: %u x %u\n", surface->w, surface->h);
|
||||
WriteLog("\t Pitch: %u\n", surface->pitch);
|
||||
WriteLog("\t Palette: %08X\n", surface->format->palette);
|
||||
WriteLog("\t BPP: %u\n", surface->format->BitsPerPixel);
|
||||
WriteLog("\t BytesPP: %u\n", surface->format->BytesPerPixel);
|
||||
WriteLog("\t RMask: %08X\n", surface->format->Rmask);
|
||||
WriteLog("\t GMask: %08X\n", surface->format->Gmask);
|
||||
WriteLog("\t BMask: %08X\n", surface->format->Bmask);
|
||||
WriteLog("\t AMask: %08X\n", surface->format->Amask);
|
||||
WriteLog("\n");//*/
|
||||
|
||||
if (surface == NULL)
|
||||
{
|
||||
WriteLog("Video: Could not create secondary SDL surface: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (settings.useOpenGL)
|
||||
sdlemu_init_opengl(surface, mainSurface, 1 /*method*/, settings.glFilter /*texture type (linear, nearest)*/,
|
||||
0 /* Automatic bpp selection based upon src */);
|
||||
|
||||
// Initialize Joystick support under SDL
|
||||
/* if (settings.useJoystick)
|
||||
{
|
||||
if (SDL_NumJoysticks() <= 0)
|
||||
{
|
||||
settings.useJoystick = false;
|
||||
WriteLog("Video: No joystick(s) or joypad(s) detected on your system. Using keyboard...\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((joystick = SDL_JoystickOpen(settings.joyport)) == 0)
|
||||
{
|
||||
settings.useJoystick = false;
|
||||
WriteLog("Video: Unable to open a Joystick on port: %d\n", (int)settings.joyport);
|
||||
}
|
||||
else
|
||||
WriteLog("Video: Using: %s\n", SDL_JoystickName(settings.joyport));
|
||||
}
|
||||
}//*/
|
||||
|
||||
// Set up the scrBuffer
|
||||
scrBuffer = (uint32 *)surface->pixels; // Kludge--And shouldn't have to lock since it's a software surface...
|
||||
//needed? Dunno. Mebbe an SDL function instead?
|
||||
// memset(scrBuffer, 0x00, VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT * sizeof(uint32));
|
||||
|
||||
#ifdef TEST_ALPHA_BLENDING
|
||||
//Here's some code to test alpha blending...
|
||||
//Well whaddya know, it works. :-)
|
||||
someAlphaSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, 30, 30, 32,
|
||||
MASK_R, MASK_G, MASK_B, MASK_A);
|
||||
|
||||
for(int i=0; i<30; i++)
|
||||
{
|
||||
for(int j=0; j<30; j++)
|
||||
{
|
||||
uint32 color = (uint32)(((double)(i * j) / (29.0 * 29.0)) * 255.0);
|
||||
color = (color << 24) | 0x00FF00FF;
|
||||
((uint32 *)someAlphaSurface->pixels)[(j * 30) + i] = color;
|
||||
}
|
||||
}
|
||||
//End test code
|
||||
#endif
|
||||
|
||||
WriteLog("Video: Successfully initialized.\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Free various SDL components
|
||||
//
|
||||
void VideoDone(void)
|
||||
{
|
||||
if (settings.useOpenGL)
|
||||
sdlemu_close_opengl();
|
||||
|
||||
SDL_JoystickClose(joystick);
|
||||
SDL_FreeSurface(surface);
|
||||
SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER);
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
//
|
||||
// Render the screen buffer to the primary screen surface
|
||||
//
|
||||
//void RenderBackbuffer(void)
|
||||
void RenderScreenBuffer(void)
|
||||
{
|
||||
//WriteLog("Video: Blitting a %u x %u surface to the main surface...\n", surface->w, surface->h);
|
||||
//Don't need this crapola--why have a separate buffer just to copy it to THIS
|
||||
//buffer in order to copy it to the main screen? That's what *I* thought!
|
||||
/* if (SDL_MUSTLOCK(surface))
|
||||
while (SDL_LockSurface(surface) < 0)
|
||||
SDL_Delay(10);
|
||||
|
||||
memcpy(surface->pixels, scrBuffer, VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT * sizeof(uint32));
|
||||
|
||||
if (SDL_MUSTLOCK(surface))
|
||||
SDL_UnlockSurface(surface);//*/
|
||||
#ifdef TEST_ALPHA_BLENDING
|
||||
SDL_Rect dstRect = { 100, 100, 30, 30 };
|
||||
SDL_BlitSurface(someAlphaSurface, NULL, surface, &dstRect);
|
||||
#endif
|
||||
|
||||
if (settings.useOpenGL)
|
||||
sdlemu_draw_texture(mainSurface, surface, 1/*1=GL_QUADS*/);
|
||||
else
|
||||
{
|
||||
// SDL_Rect rect = { 0, 0, surface->w, surface->h };
|
||||
// SDL_BlitSurface(surface, &rect, mainSurface, &rect);
|
||||
SDL_BlitSurface(surface, NULL, mainSurface, NULL);
|
||||
SDL_Flip(mainSurface);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
//
|
||||
// Resize the main SDL screen & scrBuffer
|
||||
//
|
||||
void ResizeScreen(uint32 width, uint32 height)
|
||||
{
|
||||
char window_title[256];
|
||||
|
||||
SDL_FreeSurface(surface);
|
||||
surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 16,
|
||||
0x7C00, 0x03E0, 0x001F, 0);
|
||||
|
||||
if (surface == NULL)
|
||||
{
|
||||
WriteLog("Video: Could not create primary SDL surface: %s", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (settings.useOpenGL)
|
||||
// This seems to work well for resizing (i.e., changes in the pixel width)...
|
||||
sdlemu_resize_texture(surface, mainSurface, settings.glFilter);
|
||||
else
|
||||
{
|
||||
mainSurface = SDL_SetVideoMode(width, height, 16, mainSurfaceFlags);
|
||||
|
||||
if (mainSurface == NULL)
|
||||
{
|
||||
WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
sWriteLog(window_title, "Virtual Jaguar (%i x %i)", (int)width, (int)height);
|
||||
SDL_WM_SetCaption(window_title, window_title);
|
||||
|
||||
// This seems to work well for resizing (i.e., changes in the pixel width)...
|
||||
// if (settings.useOpenGL)
|
||||
// sdlemu_resize_texture(surface, mainSurface);
|
||||
}*/
|
||||
|
||||
/*
|
||||
//
|
||||
// Fullscreen <-> window switching
|
||||
//
|
||||
//NOTE: This does *NOT* work with OpenGL rendering! !!! FIX !!!
|
||||
void ToggleFullscreen(void)
|
||||
{
|
||||
settings.fullscreen = !settings.fullscreen;
|
||||
mainSurfaceFlags &= ~SDL_FULLSCREEN;
|
||||
|
||||
if (settings.fullscreen)
|
||||
mainSurfaceFlags |= SDL_FULLSCREEN;
|
||||
|
||||
if (!settings.useOpenGL)
|
||||
mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags);
|
||||
else
|
||||
// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH * 2, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags);
|
||||
// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags);
|
||||
mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags);
|
||||
// mainSurface = SDL_SetVideoMode(tom_width, tom_height, 16, mainSurfaceFlags);
|
||||
|
||||
if (mainSurface == NULL)
|
||||
{
|
||||
WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
SDL_WM_SetCaption("Apple 2 SDL", "Apple 2 SDL");
|
||||
}
|
||||
//*/
|
||||
//
|
||||
// VIDEO.CPP: SDL/local hardware specific video routines
|
||||
//
|
||||
// by James L. Hammons
|
||||
//
|
||||
// JLH = James L. Hammons <jlhamm@acm.org>
|
||||
//
|
||||
// WHO WHEN WHAT
|
||||
// --- ---------- ------------------------------------------------------------
|
||||
// JLH 01/04/2006 Added changelog ;-)
|
||||
// JLH 01/20/2006 Cut out unnecessary buffering
|
||||
//
|
||||
|
||||
#include "video.h"
|
||||
|
||||
//#include <SDL.h>
|
||||
#include <string.h> // Why??? (for memset, etc... Lazy!) Dunno why, but this just strikes me as wrong...
|
||||
#include <malloc.h>
|
||||
#include "sdlemu_opengl.h"
|
||||
#include "log.h"
|
||||
#include "settings.h"
|
||||
#include "icon.h"
|
||||
|
||||
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
||||
#define MASK_R 0xFF000000
|
||||
#define MASK_G 0x00FF0000
|
||||
#define MASK_B 0x0000FF00
|
||||
#define MASK_A 0x000000FF
|
||||
#else
|
||||
#define MASK_R 0x000000FF
|
||||
#define MASK_G 0x0000FF00
|
||||
#define MASK_B 0x00FF0000
|
||||
#define MASK_A 0xFF000000
|
||||
#endif
|
||||
|
||||
//#define TEST_ALPHA_BLENDING
|
||||
|
||||
// Exported global variables (actually, these are LOCAL global variables, EXPORTED...)
|
||||
|
||||
SDL_Surface * surface, * mainSurface, * someAlphaSurface;
|
||||
Uint32 mainSurfaceFlags;
|
||||
//uint32 scrBuffer[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT];
|
||||
uint32 * scrBuffer = NULL;
|
||||
SDL_Joystick * joystick;
|
||||
|
||||
//
|
||||
// Prime SDL and create surfaces
|
||||
//
|
||||
bool InitVideo(void)
|
||||
{
|
||||
// Set up SDL library
|
||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE) < 0)
|
||||
{
|
||||
WriteLog("Video: Could not initialize the SDL library: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
//Set icon (mainly for Win32 target--though seems to work under KDE as well...!)
|
||||
SDL_Surface * iconSurf = SDL_CreateRGBSurfaceFrom(icon, 32, 32, 32, 128,
|
||||
MASK_R, MASK_G, MASK_B, MASK_A);
|
||||
SDL_WM_SetIcon(iconSurf, NULL);
|
||||
SDL_FreeSurface(iconSurf);
|
||||
|
||||
// Get proper info about the platform we're running on...
|
||||
const SDL_VideoInfo * info = SDL_GetVideoInfo();
|
||||
|
||||
if (!info)
|
||||
{
|
||||
WriteLog("Video: SDL is unable to get the video info: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (settings.useOpenGL)
|
||||
{
|
||||
mainSurfaceFlags = SDL_HWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF | SDL_OPENGL;
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
mainSurfaceFlags = SDL_DOUBLEBUF;
|
||||
|
||||
if (info->hw_available)
|
||||
{
|
||||
mainSurfaceFlags = SDL_HWSURFACE | SDL_HWPALETTE;
|
||||
WriteLog("Video: Hardware available...\n");
|
||||
}
|
||||
|
||||
if (info->blit_hw)
|
||||
{
|
||||
mainSurfaceFlags |= SDL_HWACCEL;
|
||||
WriteLog("Video: Hardware blit available...\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.fullscreen)
|
||||
mainSurfaceFlags |= SDL_FULLSCREEN;
|
||||
|
||||
// Create the primary SDL display (32 BPP)
|
||||
if (!settings.useOpenGL)
|
||||
mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags);
|
||||
else
|
||||
// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH * 2, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags);
|
||||
// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags);
|
||||
mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags);
|
||||
|
||||
if (mainSurface == NULL)
|
||||
{
|
||||
WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
SDL_WM_SetCaption("Apple 2 SDL", "Apple 2 SDL");
|
||||
|
||||
// Create the secondary SDL display (32 BPP) that we use directly
|
||||
surface = SDL_CreateRGBSurface(SDL_SWSURFACE, VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32,
|
||||
MASK_R, MASK_G, MASK_B, MASK_A);
|
||||
/*WriteLog("Video: Created secondary surface with attributes:\n\n");
|
||||
WriteLog("\tWidth, height: %u x %u\n", surface->w, surface->h);
|
||||
WriteLog("\t Pitch: %u\n", surface->pitch);
|
||||
WriteLog("\t Palette: %08X\n", surface->format->palette);
|
||||
WriteLog("\t BPP: %u\n", surface->format->BitsPerPixel);
|
||||
WriteLog("\t BytesPP: %u\n", surface->format->BytesPerPixel);
|
||||
WriteLog("\t RMask: %08X\n", surface->format->Rmask);
|
||||
WriteLog("\t GMask: %08X\n", surface->format->Gmask);
|
||||
WriteLog("\t BMask: %08X\n", surface->format->Bmask);
|
||||
WriteLog("\t AMask: %08X\n", surface->format->Amask);
|
||||
WriteLog("\n");//*/
|
||||
|
||||
if (surface == NULL)
|
||||
{
|
||||
WriteLog("Video: Could not create secondary SDL surface: %s\n", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (settings.useOpenGL)
|
||||
sdlemu_init_opengl(surface, mainSurface, 1 /*method*/, settings.glFilter /*texture type (linear, nearest)*/,
|
||||
0 /* Automatic bpp selection based upon src */);
|
||||
|
||||
// Initialize Joystick support under SDL
|
||||
/* if (settings.useJoystick)
|
||||
{
|
||||
if (SDL_NumJoysticks() <= 0)
|
||||
{
|
||||
settings.useJoystick = false;
|
||||
WriteLog("Video: No joystick(s) or joypad(s) detected on your system. Using keyboard...\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((joystick = SDL_JoystickOpen(settings.joyport)) == 0)
|
||||
{
|
||||
settings.useJoystick = false;
|
||||
WriteLog("Video: Unable to open a Joystick on port: %d\n", (int)settings.joyport);
|
||||
}
|
||||
else
|
||||
WriteLog("Video: Using: %s\n", SDL_JoystickName(settings.joyport));
|
||||
}
|
||||
}//*/
|
||||
|
||||
// Set up the scrBuffer
|
||||
scrBuffer = (uint32 *)surface->pixels; // Kludge--And shouldn't have to lock since it's a software surface...
|
||||
//needed? Dunno. Mebbe an SDL function instead?
|
||||
// memset(scrBuffer, 0x00, VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT * sizeof(uint32));
|
||||
|
||||
#ifdef TEST_ALPHA_BLENDING
|
||||
//Here's some code to test alpha blending...
|
||||
//Well whaddya know, it works. :-)
|
||||
someAlphaSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, 30, 30, 32,
|
||||
MASK_R, MASK_G, MASK_B, MASK_A);
|
||||
|
||||
for(int i=0; i<30; i++)
|
||||
{
|
||||
for(int j=0; j<30; j++)
|
||||
{
|
||||
uint32 color = (uint32)(((double)(i * j) / (29.0 * 29.0)) * 255.0);
|
||||
color = (color << 24) | 0x00FF00FF;
|
||||
((uint32 *)someAlphaSurface->pixels)[(j * 30) + i] = color;
|
||||
}
|
||||
}
|
||||
//End test code
|
||||
#endif
|
||||
|
||||
WriteLog("Video: Successfully initialized.\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Free various SDL components
|
||||
//
|
||||
void VideoDone(void)
|
||||
{
|
||||
if (settings.useOpenGL)
|
||||
sdlemu_close_opengl();
|
||||
|
||||
SDL_JoystickClose(joystick);
|
||||
SDL_FreeSurface(surface);
|
||||
SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER);
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
//
|
||||
// Render the screen buffer to the primary screen surface
|
||||
//
|
||||
//void RenderBackbuffer(void)
|
||||
void RenderScreenBuffer(void)
|
||||
{
|
||||
//WriteLog("Video: Blitting a %u x %u surface to the main surface...\n", surface->w, surface->h);
|
||||
//Don't need this crapola--why have a separate buffer just to copy it to THIS
|
||||
//buffer in order to copy it to the main screen? That's what *I* thought!
|
||||
/* if (SDL_MUSTLOCK(surface))
|
||||
while (SDL_LockSurface(surface) < 0)
|
||||
SDL_Delay(10);
|
||||
|
||||
memcpy(surface->pixels, scrBuffer, VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT * sizeof(uint32));
|
||||
|
||||
if (SDL_MUSTLOCK(surface))
|
||||
SDL_UnlockSurface(surface);//*/
|
||||
#ifdef TEST_ALPHA_BLENDING
|
||||
SDL_Rect dstRect = { 100, 100, 30, 30 };
|
||||
SDL_BlitSurface(someAlphaSurface, NULL, surface, &dstRect);
|
||||
#endif
|
||||
|
||||
if (settings.useOpenGL)
|
||||
sdlemu_draw_texture(mainSurface, surface, 1/*1=GL_QUADS*/);
|
||||
else
|
||||
{
|
||||
// SDL_Rect rect = { 0, 0, surface->w, surface->h };
|
||||
// SDL_BlitSurface(surface, &rect, mainSurface, &rect);
|
||||
SDL_BlitSurface(surface, NULL, mainSurface, NULL);
|
||||
SDL_Flip(mainSurface);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
//
|
||||
// Resize the main SDL screen & scrBuffer
|
||||
//
|
||||
void ResizeScreen(uint32 width, uint32 height)
|
||||
{
|
||||
char window_title[256];
|
||||
|
||||
SDL_FreeSurface(surface);
|
||||
surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 16,
|
||||
0x7C00, 0x03E0, 0x001F, 0);
|
||||
|
||||
if (surface == NULL)
|
||||
{
|
||||
WriteLog("Video: Could not create primary SDL surface: %s", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (settings.useOpenGL)
|
||||
// This seems to work well for resizing (i.e., changes in the pixel width)...
|
||||
sdlemu_resize_texture(surface, mainSurface, settings.glFilter);
|
||||
else
|
||||
{
|
||||
mainSurface = SDL_SetVideoMode(width, height, 16, mainSurfaceFlags);
|
||||
|
||||
if (mainSurface == NULL)
|
||||
{
|
||||
WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
sWriteLog(window_title, "Virtual Jaguar (%i x %i)", (int)width, (int)height);
|
||||
SDL_WM_SetCaption(window_title, window_title);
|
||||
|
||||
// This seems to work well for resizing (i.e., changes in the pixel width)...
|
||||
// if (settings.useOpenGL)
|
||||
// sdlemu_resize_texture(surface, mainSurface);
|
||||
}*/
|
||||
|
||||
/*
|
||||
//
|
||||
// Fullscreen <-> window switching
|
||||
//
|
||||
//NOTE: This does *NOT* work with OpenGL rendering! !!! FIX !!!
|
||||
void ToggleFullscreen(void)
|
||||
{
|
||||
settings.fullscreen = !settings.fullscreen;
|
||||
mainSurfaceFlags &= ~SDL_FULLSCREEN;
|
||||
|
||||
if (settings.fullscreen)
|
||||
mainSurfaceFlags |= SDL_FULLSCREEN;
|
||||
|
||||
if (!settings.useOpenGL)
|
||||
mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags);
|
||||
else
|
||||
// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH * 2, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags);
|
||||
// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags);
|
||||
mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags);
|
||||
// mainSurface = SDL_SetVideoMode(tom_width, tom_height, 16, mainSurfaceFlags);
|
||||
|
||||
if (mainSurface == NULL)
|
||||
{
|
||||
WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
SDL_WM_SetCaption("Apple 2 SDL", "Apple 2 SDL");
|
||||
}
|
||||
//*/
|
||||
|
|
60
src/video.h
60
src/video.h
|
@ -1,30 +1,30 @@
|
|||
//
|
||||
// VIDEO.H: Header file
|
||||
//
|
||||
|
||||
#ifndef __VIDEO_H__
|
||||
#define __VIDEO_H__
|
||||
|
||||
#include <SDL.h> // For SDL_Surface
|
||||
#include "types.h" // For uint32
|
||||
|
||||
//#define VIRTUAL_SCREEN_WIDTH 280
|
||||
#define VIRTUAL_SCREEN_WIDTH 560
|
||||
//#define VIRTUAL_SCREEN_HEIGHT 192
|
||||
#define VIRTUAL_SCREEN_HEIGHT 384
|
||||
|
||||
bool InitVideo(void);
|
||||
void VideoDone(void);
|
||||
//void RenderBackbuffer(void);
|
||||
void RenderScreenBuffer(void);
|
||||
//void ResizeScreen(uint32 width, uint32 height);
|
||||
//uint32 GetSDLScreenPitch(void);
|
||||
//void ToggleFullscreen(void);
|
||||
|
||||
// Exported crap
|
||||
|
||||
//extern uint32 scrBuffer[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT];
|
||||
extern uint32 * scrBuffer;
|
||||
extern SDL_Surface * surface;
|
||||
|
||||
#endif // __VIDEO_H__
|
||||
//
|
||||
// VIDEO.H: Header file
|
||||
//
|
||||
|
||||
#ifndef __VIDEO_H__
|
||||
#define __VIDEO_H__
|
||||
|
||||
#include <SDL.h> // For SDL_Surface
|
||||
#include "types.h" // For uint32
|
||||
|
||||
//#define VIRTUAL_SCREEN_WIDTH 280
|
||||
#define VIRTUAL_SCREEN_WIDTH 560
|
||||
//#define VIRTUAL_SCREEN_HEIGHT 192
|
||||
#define VIRTUAL_SCREEN_HEIGHT 384
|
||||
|
||||
bool InitVideo(void);
|
||||
void VideoDone(void);
|
||||
//void RenderBackbuffer(void);
|
||||
void RenderScreenBuffer(void);
|
||||
//void ResizeScreen(uint32 width, uint32 height);
|
||||
//uint32 GetSDLScreenPitch(void);
|
||||
//void ToggleFullscreen(void);
|
||||
|
||||
// Exported crap
|
||||
|
||||
//extern uint32 scrBuffer[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT];
|
||||
extern uint32 * scrBuffer;
|
||||
extern SDL_Surface * surface;
|
||||
|
||||
#endif // __VIDEO_H__
|
||||
|
|
Loading…
Reference in New Issue
Block a user