upload pokemini source and binary

git-svn-id: svn://kolibrios.org@6577 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2016-10-07 13:40:46 +00:00
parent 2eb44d9608
commit e1cfde849d
10 changed files with 1304 additions and 0 deletions

BIN
data/common/emul/pokemini Normal file

Binary file not shown.

View File

@ -0,0 +1,15 @@
OUTFILE = pokemini
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) $(OBJS6) $(OBJS7) $(OBJS8) $(OBJS9)
OBJS1 = PokeMini_SDL.o ../../sourcex/KeybMapSDL.o ../../sourcex/ExportBMP.o ../../sourcex/ExportWAV.o ../../source/PMCommon.o ../../source/PokeMini.o
OBJS2 = ../../source/Multicart.o ../../source/Hardware.o ../../source/Video.o ../../source/Video_x1.o ../../source/Video_x2.o ../../source/Video_x3.o
OBJS3 = ../../source/Video_x4.o ../../source/Video_x5.o ../../source/Video_x6.o ../../source/CommandLine.o ../../source/MinxCPU.o
OBJS4 = ../../source/MinxCPU_XX.o ../../source/MinxCPU_CE.o ../../source/MinxCPU_CF.o ../../source/MinxCPU_SP.o ../../source/MinxTimers.o
OBJS5 = ../../source/MinxIO.o ../../source/MinxIRQ.o ../../source/MinxPRC.o ../../source/MinxColorPRC.o ../../source/MinxLCD.o
OBJS6 = ../../source/MinxAudio.o ../../source/UI.o ../../source/Joystick.o ../../source/Keyboard.o
OBJS7 = ../../resource/PokeMini_ColorPal.o ../../resource/PokeMini_Font12.o ../../resource/PokeMini_Icons12.o ../../resource/PokeMini_BG2.o
OBJS8 = ../../resource/PokeMini_BG3.o ../../resource/PokeMini_BG4.o ../../resource/PokeMini_BG5.o ../../resource/PokeMini_BG6.o
OBJS9 = ./freebios/freebios.o
CFLAGS = -Os -fomit-frame-pointer -DPERFORMANCE -DNO_ZIP -DNO_SCANDIRS -I$(MENUETDEV)/include/SDL -I./ -I./../../source -I./../../sourcex -I./../../resource -I../../dependencies/minizip -I../../freebios
LIBS = -lSDL -lm
include $(MENUETDEV)/makefiles/Makefile_for_program

View File

@ -0,0 +1,527 @@
/*
PokeMini - Pokémon-Mini Emulator
Copyright (C) 2009-2015 JustBurn
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "SDL.h"
#include "PokeMini.h"
#include "Hardware.h"
#include "ExportBMP.h"
#include "ExportWAV.h"
#include "Keyboard.h"
#include "KeybMapSDL.h"
#include "Video_x1.h"
#include "Video_x2.h"
#include "Video_x3.h"
#include "Video_x4.h"
#include "Video_x5.h"
#include "Video_x6.h"
#include "PokeMini_BG2.h"
#include "PokeMini_BG3.h"
#include "PokeMini_BG4.h"
#include "PokeMini_BG5.h"
#include "PokeMini_BG6.h"
const char *AppName = "PokeMini " PokeMini_Version " SDL";
int emurunning = 1, emulimiter = 1;
SDL_Surface *screen;
int PMWidth, PMHeight;
int PixPitch, PMOff, UIOff;
FILE *sdump;
void setup_screen();
// Sound buffer size
#define SOUNDBUFFER 512
#define PMSNDBUFFER (SOUNDBUFFER*2)
const char *clc_zoom_txt[] = {
"0x (Illegal)",
"1x ( 96x 64)",
"2x (192x128)",
"3x (288x192)",
"4x (384x256)",
"5x (480x320)",
"6x (576x384)",
};
// Custom command line (NEW IN 0.5.0)
int clc_zoom = 6, clc_bpp = 16, clc_fullscreen = 0;
char clc_dump_sound[PMTMPV] = {0};
int clc_displayfps = 0;
const TCommandLineCustom CustomArgs[] = {
{ "-dumpsound", (int *)&clc_dump_sound, COMMANDLINE_STR, PMTMPV-1 },
{ "-zoom", &clc_zoom, COMMANDLINE_INT, 1, 6 },
{ "-bpp", &clc_bpp, COMMANDLINE_INT, 16, 32 },
{ "-windowed", &clc_fullscreen, COMMANDLINE_INTSET, 0 },
{ "-fullscreen", &clc_fullscreen, COMMANDLINE_INTSET, 1 },
{ "-displayfps", &clc_displayfps, COMMANDLINE_INTSET, 1 },
{ "", NULL, COMMANDLINE_EOL }
};
const TCommandLineCustom CustomConf[] = {
{ "zoom", &clc_zoom, COMMANDLINE_INT, 1, 6 },
{ "bpp", &clc_bpp, COMMANDLINE_INT, 16, 32 },
{ "fullscreen", &clc_fullscreen, COMMANDLINE_BOOL },
{ "displayfps", &clc_displayfps, COMMANDLINE_BOOL },
{ "", NULL, COMMANDLINE_EOL }
};
// Platform menu (REQUIRED >= 0.4.4)
int UIItems_PlatformC(int index, int reason);
TUIMenu_Item UIItems_Platform[] = {
PLATFORMDEF_GOBACK,
{ 0, 1, "Zoom: %s", UIItems_PlatformC },
{ 0, 2, "Depth: %dbpp", UIItems_PlatformC },
/*{ 0, 3, "Fullscreen: %s", UIItems_PlatformC },*/
{ 0, 4, "Display FPS: %s", UIItems_PlatformC },
{ 0, 9, "Define Keyboard...", UIItems_PlatformC },
PLATFORMDEF_SAVEOPTIONS,
PLATFORMDEF_END(UIItems_PlatformC)
};
int UIItems_PlatformC(int index, int reason)
{
int zoomchanged = 0;
if (reason == UIMENU_OK) {
reason = UIMENU_RIGHT;
}
if (reason == UIMENU_CANCEL) {
UIMenu_PrevMenu();
}
if (reason == UIMENU_LEFT) {
switch (index) {
case 1: // Zoom
clc_zoom--;
if (clc_zoom < 1) clc_zoom = 6;
zoomchanged = 1;
break;
case 2: // Bits-Per-Pixel
if (clc_bpp == 32)
clc_bpp = 16;
else
clc_bpp = 32;
zoomchanged = 1;
break;
case 3: // Fullscreen
clc_fullscreen = !clc_fullscreen;
zoomchanged = 1;
break;
case 4: // Display FPS
clc_displayfps = !clc_displayfps;
break;
}
}
if (reason == UIMENU_RIGHT) {
switch (index) {
case 1: // Zoom
clc_zoom++;
if (clc_zoom > 6) clc_zoom = 1;
zoomchanged = 1;
break;
case 2: // Bits-Per-Pixel
if (clc_bpp == 16)
clc_bpp = 32;
else
clc_bpp = 16;
zoomchanged = 1;
break;
case 3: // Fullscreen
clc_fullscreen = !clc_fullscreen;
zoomchanged = 1;
break;
case 4: // Display FPS
clc_displayfps = !clc_displayfps;
break;
break;
case 9: // Define Keyboard...
KeyboardEnterMenu();
break;
}
}
UIMenu_ChangeItem(UIItems_Platform, 1, "Zoom: %s", clc_zoom_txt[clc_zoom]);
UIMenu_ChangeItem(UIItems_Platform, 2, "Depth: %dbpp", clc_bpp);
UIMenu_ChangeItem(UIItems_Platform, 3, "Fullscreen: %s", clc_fullscreen ? "Yes" : "No");
UIMenu_ChangeItem(UIItems_Platform, 4, "Display FPS: %s", clc_displayfps ? "Yes" : "No");
if (zoomchanged) {
SDL_UnlockSurface(screen);
setup_screen();
SDL_LockSurface(screen);
return 0;
}
return 1;
}
// Setup screen
void setup_screen()
{
TPokeMini_VideoSpec *videospec;
int depth, PMOffX, PMOffY, UIOffX, UIOffY;
// Calculate size based of zoom
if (clc_zoom == 1) {
videospec = (TPokeMini_VideoSpec *)&PokeMini_Video1x1;
PMWidth = 192; PMHeight = 128; PMOffX = 48; PMOffY = 32; UIOffX = 0; UIOffY = 0;
UIMenu_SetDisplay(192, 128, PokeMini_BGR16, (uint8_t *)PokeMini_BG2, (uint16_t *)PokeMini_BG2_PalBGR16, (uint32_t *)PokeMini_BG2_PalBGR32);
} else if (clc_zoom == 2) {
videospec = (TPokeMini_VideoSpec *)&PokeMini_Video2x2;
PMWidth = 208; PMHeight = 144; PMOffX = 8; PMOffY = 8; UIOffX = 8; UIOffY = 8;
UIMenu_SetDisplay(192, 128, PokeMini_BGR16, (uint8_t *)PokeMini_BG2, (uint16_t *)PokeMini_BG2_PalBGR16, (uint32_t *)PokeMini_BG2_PalBGR32);
} else if (clc_zoom == 3) {
videospec = (TPokeMini_VideoSpec *)&PokeMini_Video3x3;
PMWidth = 304; PMHeight = 208; PMOffX = 8; PMOffY = 8; UIOffX = 8; UIOffY = 8;
UIMenu_SetDisplay(288, 192, PokeMini_BGR16, (uint8_t *)PokeMini_BG3, (uint16_t *)PokeMini_BG3_PalBGR16, (uint32_t *)PokeMini_BG3_PalBGR32);
} else if (clc_zoom == 4) {
videospec = (TPokeMini_VideoSpec *)&PokeMini_Video4x4;
PMWidth = 400; PMHeight = 272; PMOffX = 8; PMOffY = 8; UIOffX = 8; UIOffY = 8;
UIMenu_SetDisplay(384, 256, PokeMini_BGR16, (uint8_t *)PokeMini_BG4, (uint16_t *)PokeMini_BG4_PalBGR16, (uint32_t *)PokeMini_BG4_PalBGR32);
} else if (clc_zoom == 5) {
videospec = (TPokeMini_VideoSpec *)&PokeMini_Video5x5;
PMWidth = 496; PMHeight = 336; PMOffX = 8; PMOffY = 8; UIOffX = 8; UIOffY = 8;
UIMenu_SetDisplay(480, 320, PokeMini_BGR16, (uint8_t *)PokeMini_BG5, (uint16_t *)PokeMini_BG5_PalBGR16, (uint32_t *)PokeMini_BG5_PalBGR32);
} else {
videospec = (TPokeMini_VideoSpec *)&PokeMini_Video6x6;
PMWidth = 592; PMHeight = 400; PMOffX = 8; PMOffY = 8; UIOffX = 8; UIOffY = 8;
UIMenu_SetDisplay(576, 384, PokeMini_BGR16, (uint8_t *)PokeMini_BG6, (uint16_t *)PokeMini_BG6_PalBGR16, (uint32_t *)PokeMini_BG6_PalBGR32);
}
// Set video spec and check if is supported
depth = PokeMini_SetVideo(videospec, clc_bpp, CommandLine.lcdfilter, CommandLine.lcdmode);
if (!depth) {
fprintf(stderr, "Couldn't set video spec from %i bpp\n", clc_bpp);
exit(1);
}
// Set video mode
screen = SDL_SetVideoMode(PMWidth, PMHeight, depth, SDL_HWSURFACE | SDL_DOUBLEBUF | (clc_fullscreen ? SDL_FULLSCREEN : 0));
if (screen == NULL) {
fprintf(stderr, "Couldn't set video mode: %s\n", SDL_GetError());
exit(1);
}
// Calculate pitch and offset
if (depth == 32) {
PixPitch = screen->pitch / 4;
PMOff = (PMOffY * screen->pitch) + (PMOffX * 4);
UIOff = (UIOffY * screen->pitch) + (UIOffX * 4);
} else {
PixPitch = screen->pitch / 2;
PMOff = (PMOffY * screen->pitch) + (PMOffX * 2);
UIOff = (UIOffY * screen->pitch) + (UIOffX * 2);
}
clc_bpp = depth;
}
// Capture screen
void capture_screen()
{
FILE *capf;
int y, capnum;
unsigned long Video[96*64];
PokeMini_VideoPreview_32((uint32_t *)Video, 96, PokeMini_LCDMode);
capf = OpenUnique_ExportBMP(&capnum, 96, 64);
if (!capf) {
fprintf(stderr, "Error while saving capture\n");
return;
}
for (y=0; y<64; y++) {
WriteArray_ExportBMP(capf, (uint32_t *)&Video[(63-y) * 96], 96);
}
printf("Capture saved at 'snap_%03d.bmp'\n", capnum);
Close_ExportBMP(capf);
}
// Handle keyboard and quit events
void handleevents(SDL_Event *event)
{
switch (event->type) {
case SDL_KEYDOWN:
if (event->key.keysym.sym == SDLK_F9) { // Capture screen
capture_screen();
} else if (event->key.keysym.sym == SDLK_F4) { // Emulator Exit
if (event->key.keysym.mod & KMOD_ALT) {
emurunning = 0;
}
} else if (event->key.keysym.sym == SDLK_F10) { // Fullscreen/Window
clc_fullscreen = !clc_fullscreen;
setup_screen();
UIItems_PlatformC(0, UIMENU_LOAD);
} else if (event->key.keysym.sym == SDLK_F11) { // Disable speed throttling
emulimiter = !emulimiter;
} else if (event->key.keysym.sym == SDLK_TAB) { // Temp disable speed throttling
emulimiter = 0;
} else {
KeyboardPressEvent(event->key.keysym.sym);
}
break;
case SDL_KEYUP:
if (event->key.keysym.sym == SDLK_TAB) { // Speed threhold
emulimiter = 1;
} else {
KeyboardReleaseEvent(event->key.keysym.sym);
}
break;
case SDL_QUIT:
emurunning = 0;
break;
};
}
// Used to fill the sound buffer
void emulatorsound(void *unused, Uint8 *stream, int len)
{
MinxAudio_GetSamplesU8(stream, len);
if (clc_dump_sound[0]) WriteU8A_ExportWAV(sdump, stream, len>>1);
}
// Enable / Disable sound
void enablesound(int sound)
{
MinxAudio_ChangeEngine(sound);
if (AudioEnabled) SDL_PauseAudio(!sound);
}
// Menu loop
void menuloop()
{
SDL_Event event;
// Update window's title and stop sound
SDL_WM_SetCaption(AppName, "PMEWindow");
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
enablesound(0);
// Update EEPROM
PokeMini_SaveFromCommandLines(0);
// Menu's loop
while (emurunning && (UI_Status == UI_STATUS_MENU)) {
// Slowdown to approx. 60fps
SDL_Delay(1);
// Process UI
UIMenu_Process();
// Screen rendering
SDL_FillRect(screen, NULL, 0);
if (SDL_LockSurface(screen) == 0) {
// Render the menu or the game screen
if (PokeMini_VideoDepth == 32)
UIMenu_Display_32((uint32_t *)((uint8_t *)screen->pixels + UIOff), PixPitch);
else
UIMenu_Display_16((uint16_t *)((uint8_t *)screen->pixels + UIOff), PixPitch);
// Unlock surface
SDL_UnlockSurface(screen);
SDL_Flip(screen);
}
// Handle events
while (SDL_PollEvent(&event)) handleevents(&event);
}
// Apply configs
PokeMini_ApplyChanges();
if (UI_Status == UI_STATUS_EXIT) emurunning = 0;
else
{
if (CommandLine.sound == MINX_AUDIO_GENERATED)
enablesound(MINX_AUDIO_GENERATED);
else
enablesound(0);
}
SDL_EnableKeyRepeat(0, 0);
}
// Main function
int main(int argc, char **argv)
{
SDL_Event event;
char title[256];
char fpstxt[16];
// Process arguments
printf("%s\n\n", AppName);
PokeMini_InitDirs(argv[0], NULL);
CommandLineInit();
CommandLineConfFile("/tmp0/1/pokemini.cfg", "/tmp0/1/pokemini_sdl.cfg", CustomConf);
if (!CommandLineArgs(argc, argv, CustomArgs)) {
PrintHelpUsage(stdout);
printf(" -dumpsound sound.wav Dump sound into a WAV file\n");
printf(" -windowed Display in window (default)\n");
printf(" -fullscreen Display in fullscreen\n");
printf(" -displayfps Display FPS counter on screen\n");
printf(" -zoom n Zoom display: 1 to 6 (def 4)\n");
printf(" -bpp n Bits-Per-Pixel: 16 or 32 (def 16)\n");
return 1;
}
// Initialize SDL
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
return 1;
}
atexit(SDL_Quit); // Clean up on exit
// Initialize the display
setup_screen();
// Initialize the sound
SDL_AudioSpec audfmt;
SDL_AudioSpec obtained;
audfmt.freq = 44100;
audfmt.format = AUDIO_U8;
audfmt.channels = 1;
audfmt.samples = SOUNDBUFFER;
audfmt.callback = emulatorsound;
audfmt.userdata = NULL;
// Open the audio device
// Second setting can't be NULL on KolibriOS or else it wont play sound
if (SDL_OpenAudio(&audfmt, &obtained) < 0) {
fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError());
fprintf(stderr, "Audio will be disabled\n");
AudioEnabled = 0;
} else {
AudioEnabled = 1;
}
// Set the window manager title bar
SDL_WM_SetCaption(AppName, "PMEWindow");
SDL_EnableKeyRepeat(0, 0);
// Open WAV capture if was requested
if (clc_dump_sound[0]) {
sdump = Open_ExportWAV(clc_dump_sound, EXPORTWAV_44KHZ | EXPORTWAV_MONO | EXPORTWAV_16BITS);
if (!sdump) {
fprintf(stderr, "Error opening sound export file.\n");
return 1;
}
}
// Initialize the emulator
printf("Starting emulator...\n");
if (!PokeMini_Create(0, PMSNDBUFFER)) {
fprintf(stderr, "Error while initializing emulator\n");
return 1;
}
// Setup palette and LCD mode
PokeMini_VideoPalette_Init(PokeMini_BGR16, 1);
PokeMini_VideoPalette_Index(CommandLine.palette, CommandLine.custompal, CommandLine.lcdcontrast, CommandLine.lcdbright);
PokeMini_ApplyChanges();
// Load stuff
PokeMini_UseDefaultCallbacks();
if (!PokeMini_LoadFromCommandLines("Using FreeBIOS", "EEPROM data will be discarded!")) {
UI_Status = UI_STATUS_MENU;
}
// Enable sound & init UI
printf("Running emulator...\n");
UIMenu_Init();
KeyboardRemap(&KeybMapSDL);
if (CommandLine.sound == MINX_AUDIO_GENERATED)
enablesound(MINX_AUDIO_GENERATED);
else
enablesound(0);
// Emulator's loop
unsigned long time, NewTickFPS = 0, NewTickSync = 0;
int fps = 72, fpscnt = 0;
while (emurunning) {
// Emulate and syncronize
time = SDL_GetTicks();
if (RequireSoundSync) {
PokeMini_EmulateFrame();
// Sleep a little in the hope to free a few samples
if (emulimiter) while (MinxAudio_SyncWithAudio()) SDL_Delay(1);
} else {
PokeMini_EmulateFrame();
if (emulimiter) {
do {
SDL_Delay(1); // This lower CPU usage
time = SDL_GetTicks();
} while (time < NewTickSync);
NewTickSync = time + 13; // Aprox 72 times per sec
}
}
// Screen rendering
SDL_FillRect(screen, NULL, 0);
if (SDL_LockSurface(screen) == 0) {
// Render the menu or the game screen
if (PokeMini_Rumbling) {
PokeMini_VideoBlit((void *)((uint8_t *)screen->pixels + PMOff + PokeMini_GenRumbleOffset(screen->pitch)), PixPitch);
} else {
PokeMini_VideoBlit((void *)((uint8_t *)screen->pixels + PMOff), PixPitch);
}
LCDDirty = 0;
// Display FPS counter
if (clc_displayfps) {
if (PokeMini_VideoDepth == 32)
UIDraw_String_32((uint32_t *)screen->pixels, PixPitch, 4, 4, 10, fpstxt, UI_Font1_Pal32);
else
UIDraw_String_16((uint16_t *)screen->pixels, PixPitch, 4, 4, 10, fpstxt, UI_Font1_Pal16);
}
// Unlock surface
SDL_UnlockSurface(screen);
SDL_Flip(screen);
}
// Handle events
while (SDL_PollEvent(&event)) handleevents(&event);
// Menu
if (UI_Status == UI_STATUS_MENU) menuloop();
// calculate FPS
fpscnt++;
if (time >= NewTickFPS) {
fps = fpscnt;
sprintf(title, "%s - %d%%", AppName, fps * 100 / 72);
sprintf(fpstxt, "%i FPS", fps);
SDL_WM_SetCaption(title, "PMEWindow");
NewTickFPS = time + 1000;
fpscnt = 0;
}
}
// Disable sound & free UI
enablesound(0);
UIMenu_Destroy();
// Close WAV capture if there's one
if (clc_dump_sound[0]) Close_ExportWAV(sdump);
// Save Stuff
PokeMini_SaveFromCommandLines(1);
// Terminate...
printf("Shutdown emulator...\n");
PokeMini_VideoPalette_Free();
PokeMini_Destroy();
return 0;
}

View File

@ -0,0 +1,15 @@
PokeMini - Pokémon-Mini Emulator
Copyright (C) 2014 JustBurn
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

View File

@ -0,0 +1,19 @@
========================
PokeMini 0.60 for KolibriOS
========================
Port for KolibriOS by gameblabla
PokeMini is a Pokémon mini emulator by JustBurn.
It has been ported to the PCs, Sega Dreamcast, PSP, NDS
with unofficial ports for the GCW0, TI Nspire and now the KolibriOS.
This requires at least a Pentium Pro to even work.
Why ? Because the toolchain was compiled for Pentium Pro+ support only... (SERGE!)
Sound is supported too, your soundcard needs to support Mono 44050hz 8bits.
I think that shouldn't be a problem as even a SB16 supports that...
To open a ROM, you need to use the "Open with..." thingy.
Choose a Pokémon Mini ROM for that and choose to open it with PokéMini.
Enjoy !

View File

@ -0,0 +1,204 @@
___ _ _
| _ \ | \_/ |
| _/ | _ |
| | | | | |
|_| OKE |_| |_| INI
-------------------
Version 0.60
Homebrew-emulator for Pokémon-Mini!
Latest version can be found in:
http://pokemini.sourceforge.net/
For hardware documentation, visit:
http://wiki.sublab.net/index.php/Pokemon_Mini
> Keys & Information:
To include real BIOS, place "bios.min" on the emulator's directory.
When no "bios.min" is present, emulator will use Pokémon-Mini FreeBIOS.
Pokémon-Mini PC Keys
----------------------------
D-PAD Left Arrow Left
D-PAD Right Arrow Right
D-PAD Up Arrow Up
D-PAD Down Arrow Down
Key A Keyboard X
Key B Keyboard Z
Key C Keyboard S or C
Power Button Keyboard E
Shock Detector Keyboard A
----------------------------
UI Menu Keyboard Esc
F9 will capture the screen and save as "snap_(sequence number).bmp"
F10 can toggle between Fullscreen and Windowed.
F11 will disable/enable speed throttle
TAB can be hold to temporary disable speed throttle
> Supported multicarts:
Type 0 - Disabled (Commercial, Prototype)
Read only
Type 1 - Normal 512KB Flash (AM29LV040B)
Read, Erase, Write, Banking and Manufacturer ID
Type 2 - Lupin's 512KB Flash (AM29LV040B)
Read, Erase, Write, Banking and Manufacturer ID
> Command-Line:
Usage:
PokeMini [Options] rom.min
Options:
-freebios Force FreeBIOS
-bios otherbios.min Load BIOS
-noeeprom Discard EEPROM data
-eeprom pokemini.eep Load/Save EEPROM file
-eepromshare Share EEPROM to all ROMs (default)
-noeepromshare Each ROM will use individual EEPROM
-nostate Discard State data (default)
-state pokemini.sta Load/Save state file
-nortc No RTC
-statertc RTC time difference in savestates
-hostrtc RTC match the Host clock (def)
-nosound Disable sound
-sound Same as -soundpiezo (def)
-sounddirect Use timer 3 directly for sound (default)
-soundemulate Use sound circuit emulation
-sounddirectpwm Same as direct, can play PWM samples
-nopiezo Disable piezo speaker filter
-piezo Enable piezo speaker filter (def)
-scanline 50% Scanline LCD filter
-dotmatrix LCD dot-matrix filter (def)
-nofilter No LCD filter
-2shades LCD Mode: No mixing
-3shades LCD Mode: Grey emulation
-analog LCD Mode: Pretend real LCD (default)
-fullbattery Emulate with a full battery (default)
-lowbattery Emulate with a weak battery
-palette n Select palette for colors (0 to 15)
-rumblelvl 3 Rumble level (0 to 3)
-nojoystick Disable joystick (def)
-joystick Enable joystick
-joyid 0 Set joystick ID
-custom1light 0xFFFFFF Palette Custom 1 Light
-custom1dark 0x000000 Palette Custom 1 Dark
-custom2light 0xFFFFFF Palette Custom 2 Light
-custom2dark 0x000000 Palette Custom 2 Dark
-synccycles 8 Number of cycles per hardware sync.
-multicart 0 Multicart type (0 to 2)
-lcdcontrast 64 LCD contrast boost in percent
-lcdbright 0 LCD brightness offset in percent
Only on SDL platform:
-dumpsound sound.wav Dump sound into a WAV file
-windowed Display in window (default)
-fullscreen Display in fullscreen
-zoom n Zoom display: 1 to 4 (def 4)
-bpp n Bits-Per-Pixel: 16 or 32 (def 16)
Only on Debugger platform:
-autorun 0 Autorun, 0=Off, 1=Full, 2=Dbg+Snd, 3=Dbg
-windowed Display in window (default)
-fullscreen Display in fullscreen
-zoom n Zoom display: 1 to 4 (def 4)
-bpp n Bits-Per-Pixel: 16 or 32 (def 16)
> System requirements:
No sound:
Pentium III 733 Mhz or better recommended.
With sound:
Pentium IV 1.7 Ghz or better recommended.
Note: Performance tests were based on 0.4.0 version
> History:
-: 0.60 Changes :-
Changed version format to only 2 fields to avoid confusion
Fixed RTC month being reported wrong from host
Adjusted graphics, now it display darker shades to match more closely the real system
Added 2 new options: LCD contrast and LCD bright
Changed the way analog LCD mode works, now it's less blurry and can do up to 5 shades without artifacts
SDL port has been upgraded to SDL 2, this brings Haptic support and other improvements
New Keyboard/Joystick option to allow checking inputs
Applying joystick settings now can (re)enable the device
Share EEPROM is now disabled by default
Emulator can be compiled for 64-bit CPU without issues now
Limited sync-cycles to 64 on 'accurancy' platforms
Win32 Only:
Corrected Direct3D issue in some GPUs
Sound write position is now handled correctly
NDS Only: Added 3-in-1 rumble support
PSP Only:
Analog stick now works
Added FPS display under Platform... (default is off)
Reached 100% emulation by skipping 1 frame, aparently hardware is limited to 60fps max
Dreamcast Only:
Improved sound latency (thanks BlueCrab).
Added FPS display under Platform... (default is off)
Debugger Only:
Minor fixes
Trace history is now 10000 instructions instead of 256
Added copy & paste buttons to timing counters
Older History can be found at:
http://sourceforge.net/p/pokemini/wiki/History/
> License GPLv3 (emulator and tools):
PokeMini - Pokémon-Mini Emulator
Copyright (C) 2015 JustBurn
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
> Greetings & Links:
Thank's to p0p, Dave|X, Onori
goldmomo, asterick, DarkFader, Agilo
MrBlinky, Wa, Lupin and everyone at
#pmdev on IRC EFNET!
Questions and Bugs reports are welcome!
PokeMini webpage:
https://sourceforge.net/projects/pokemini/
Pokemon-Mini Hardware:
http://wiki.sublab.net/index.php/Pokemon_Mini
Pokémon-mini.net:
http://www.pokemon-mini.net/
MEGA - Museum of Electronic Games & Art:
http://m-e-g-a.org/
Minimon (other Pokemon-Mini emulator):
http://www.sublab.net/projects/minimon/
DarkFader Pokemon-Mini webpage:
http://darkfader.net/pm/
Agilo's Weblog:
http://www.agilo.nl/

View File

@ -0,0 +1,5 @@
OUTFILE = noout
OBJS = freebios.o
CFLAGS = -Os -DNOTPSP -DFRAMELIMIT -DNODEBUG -DNO_SNPRINTF -DKOLIBRI -I/home/hatsune/menuetos/include/SDL
LIBS = -lm
include $(MENUETDEV)/makefiles/Makefile_for_program

View File

@ -0,0 +1,259 @@
const unsigned char FreeBIOS[] =
{
0x9A,0x00,0xAB,0x00,0xAB,0x00,0x2F,0x02,0x41,0x02,0x53,0x02,0x65,0x02,0x77,0x02,
0x89,0x02,0x9B,0x02,0xAD,0x02,0xBF,0x02,0xD1,0x02,0xE3,0x02,0xF5,0x02,0x07,0x03,
0x19,0x03,0xAB,0x00,0xAB,0x00,0x60,0x04,0x2B,0x03,0xF1,0x03,0x3D,0x03,0x4F,0x03,
0x61,0x03,0x73,0x03,0x85,0x03,0x97,0x03,0xA9,0x03,0xBB,0x03,0xCD,0x03,0xDF,0x03,
0xF1,0xFF,0x9E,0x04,0x60,0x04,0x60,0x04,0xE4,0x04,0x60,0x04,0x0D,0x05,0x24,0x05,
0x45,0x05,0x4C,0x05,0x5D,0x05,0x7C,0x05,0x92,0x05,0x9F,0x05,0xBB,0x05,0x60,0x04,
0x60,0x04,0x60,0x04,0x60,0x04,0x60,0x04,0x60,0x04,0x60,0x04,0x60,0x04,0x60,0x04,
0x60,0x04,0xD6,0x05,0xE3,0x05,0x60,0x04,0x60,0x04,0xF0,0x05,0x00,0x06,0x66,0x06,
0x7A,0x06,0x8A,0x06,0x60,0x04,0x60,0x04,0x60,0x04,0x60,0x04,0x60,0x04,0x60,0x04,
0x60,0x04,0x60,0x04,0x60,0x04,0x00,0x00,0x98,0x06,0xB4,0x20,0x38,0xCE,0xCD,0xDD,
0x08,0x02,0xD9,0x08,0x01,0xDD,0x00,0x7C,0xDD,0x02,0x00,0x9F,0xC0,0xB4,0x20,0x38,
0xCE,0xCD,0xCE,0xCE,0xCE,0xCF,0xCF,0x6E,0x00,0x20,0xDD,0x80,0x00,0xCE,0xC4,0x01,
0xF3,0x01,0x00,0xD9,0x00,0x03,0xD9,0x01,0x30,0xD9,0x02,0xC0,0xF2,0xE1,0x00,0xC6,
0xA0,0x06,0xBE,0x82,0x20,0x79,0x84,0x79,0x85,0x79,0x86,0x79,0x87,0x79,0x88,0x79,
0x89,0x38,0xC6,0x00,0x10,0x60,0x92,0xD6,0x00,0x20,0xEF,0xF9,0xFF,0xF2,0x05,0x01,
0xDD,0xFE,0xAF,0xF2,0x1D,0x01,0xD9,0x80,0x0A,0xD9,0x81,0x01,0xDC,0x10,0x20,0xEF,
0x40,0x00,0xF2,0x2F,0x00,0xEF,0x3A,0x00,0x38,0xDD,0x80,0x00,0xDD,0x81,0x07,0x78,
0x82,0x78,0x83,0xD8,0x01,0xEF,0xC6,0x00,0x10,0x60,0x92,0xD6,0x00,0x20,0xEF,0xF9,
0xFF,0xC4,0x00,0x00,0xCF,0xE4,0xCF,0xE8,0xCF,0xEC,0x4C,0x52,0xB0,0xFF,0x9C,0xC0,
0xF3,0xD0,0x1F,0xCE,0xD0,0x00,0x21,0x32,0x4D,0xF8,0xCE,0xD0,0x01,0x21,0x32,0x4E,
0xF8,0xB1,0x03,0xA0,0xB0,0x01,0xC6,0x7D,0x13,0xB1,0x03,0xF2,0x51,0x00,0xC6,0x88,
0x13,0xB1,0x04,0xF2,0x49,0x00,0xDC,0x10,0x20,0xEE,0x0B,0x00,0xC6,0x94,0x13,0xB0,
0x08,0xB1,0x04,0xF2,0x39,0x00,0xF2,0xCB,0xFF,0xEE,0x0B,0x00,0xC6,0xA0,0x13,0xB0,
0x0C,0xB1,0x04,0xF2,0x29,0x00,0xF2,0x2C,0x00,0xC6,0x94,0x13,0xB0,0x00,0xB1,0x04,
0xF2,0x17,0x00,0xF2,0x1F,0x00,0xA8,0xF5,0xBB,0xC6,0xA0,0x13,0xB0,0x00,0xB1,0x04,
0xF2,0x07,0x00,0xF2,0x0F,0x00,0xF3,0x6A,0xFF,0x60,0x92,0xF5,0xFD,0xF8,0x60,0x92,
0x80,0xF5,0xFC,0xF8,0xB0,0xFF,0xB1,0xFF,0xF5,0xFF,0x88,0xEF,0xF9,0xFF,0xF8,0xB1,
0x00,0xDD,0x10,0x08,0xD8,0x19,0xCF,0x79,0x20,0xDD,0x21,0x30,0xDD,0x22,0x02,0x79,
0x23,0xDD,0x24,0x02,0x79,0x25,0x79,0x26,0x79,0x40,0x79,0x44,0xDD,0x50,0xFF,0x79,
0x51,0x79,0x54,0x79,0x55,0xD9,0x60,0x0C,0xD8,0x61,0xFB,0xD9,0x61,0x08,0xD9,0x61,
0x04,0xDD,0x61,0x20,0xDD,0x60,0x32,0x79,0x62,0x79,0x70,0x79,0x71,0xDD,0xFE,0x81,
0xDD,0xFE,0x1F,0xF8,0xA1,0xC5,0xFE,0x20,0xB5,0xE3,0xB5,0xA4,0xB5,0xAD,0xB5,0x00,
0xB5,0x10,0xB5,0xEE,0xB5,0x40,0xB5,0xA2,0xB5,0xA0,0xB5,0xC0,0xB5,0xA6,0xB5,0x2F,
0xA9,0xF8,0xC5,0xFE,0x20,0xB5,0xE3,0xB3,0xB0,0x6B,0xB5,0x00,0xB5,0x10,0xB1,0x60,
0x91,0xDD,0xFF,0x00,0xF5,0xFC,0x99,0x83,0xCE,0xBE,0xB8,0xEF,0xEC,0xFF,0xF8,0xA5,
0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0x00,0x02,0xAC,0xAD,0xF3,0xC8,
0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0xEE,0x01,0xAC,0xAD,
0xF3,0xBC,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0xDC,0x01,
0xAC,0xAD,0xF3,0xB0,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,
0xCA,0x01,0xAC,0xAD,0xF3,0xA4,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,
0x20,0xEA,0xB8,0x01,0xAC,0xAD,0xF3,0x98,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,
0xDC,0x01,0x20,0xEA,0xA6,0x01,0xAC,0xAD,0xF3,0x8C,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,
0xB4,0x20,0xDC,0x01,0x20,0xEA,0x94,0x01,0xAC,0xAD,0xF3,0x80,0x1E,0xA5,0xA4,0xCE,
0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0x82,0x01,0xAC,0xAD,0xF3,0x74,0x1E,0xA5,
0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0x70,0x01,0xAC,0xAD,0xF3,0x68,
0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0x5E,0x01,0xAC,0xAD,
0xF3,0x5C,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0x4C,0x01,
0xAC,0xAD,0xF3,0x50,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,
0x3A,0x01,0xAC,0xAD,0xF3,0x44,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,
0x20,0xEA,0x28,0x01,0xAC,0xAD,0xF3,0x38,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,
0xDC,0x01,0x20,0xEA,0x16,0x01,0xAC,0xAD,0xF3,0x2C,0x1E,0xA5,0xA4,0xCE,0xC5,0x00,
0xB4,0x20,0xDC,0x01,0x20,0xEA,0x04,0x01,0xAC,0xAD,0xF3,0x62,0x1E,0xA5,0xA4,0xCE,
0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0xF2,0x00,0xAC,0xAD,0xF3,0x14,0x1E,0xA5,
0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0xE0,0x00,0xAC,0xAD,0xF3,0x08,
0x1E,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0xCE,0x00,0xAC,0xAD,
0xF3,0xFC,0x1D,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0xBC,0x00,
0xAC,0xAD,0xF3,0xF0,0x1D,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,
0xAA,0x00,0xAC,0xAD,0xF3,0xE4,0x1D,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,
0x20,0xEA,0x98,0x00,0xAC,0xAD,0xF3,0xD8,0x1D,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,
0xDC,0x01,0x20,0xEA,0x86,0x00,0xAC,0xAD,0xF3,0xCC,0x1D,0xA5,0xA4,0xCE,0xC5,0x00,
0xB4,0x20,0xDC,0x01,0x20,0xEA,0x74,0x00,0xAC,0xAD,0xF3,0xC0,0x1D,0xA5,0xA4,0xCE,
0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0x62,0x00,0xAC,0xAD,0xF3,0xB4,0x1D,0xA5,
0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEA,0x50,0x00,0xAC,0xAD,0xF3,0xA8,
0x1D,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x01,0x20,0xEF,0x2A,0x00,0xDC,0x01,
0x10,0xEF,0xA8,0xFC,0xDC,0x71,0x04,0xEE,0x0D,0x00,0xDC,0x02,0x40,0xEE,0x07,0x00,
0xD8,0x71,0xFB,0xD9,0x02,0x80,0xDC,0x01,0x80,0xEE,0x11,0x00,0xDC,0x02,0x20,0xEF,
0x14,0x00,0xAC,0xAD,0xF3,0xD7,0x1B,0xAC,0xAD,0xF3,0x31,0x1D,0xD9,0x01,0x20,0xDC,
0x02,0x20,0xEF,0xF3,0xFF,0xDD,0x29,0x80,0xAC,0xAD,0xF9,0xDC,0x71,0x04,0xEE,0x0D,
0x00,0xDC,0x02,0x40,0xEE,0x07,0x00,0xD8,0x71,0xFB,0xD9,0x02,0x80,0xDC,0x01,0x80,
0xEE,0x0A,0x00,0xCF,0x68,0x03,0x00,0xAC,0xAD,0xF3,0xA2,0x1B,0xD9,0x01,0x20,0xF8,
0xF9,0xD8,0x80,0xF7,0xDD,0xFE,0xAE,0xDD,0xFE,0xAC,0xDD,0xFE,0x28,0xDD,0xFE,0xA5,
0xD8,0x02,0xE3,0xD8,0x81,0xFE,0xD9,0x02,0x01,0xD9,0x24,0x02,0xD9,0x21,0x30,0xD8,
0x01,0xDF,0xD8,0x02,0xE3,0xA7,0x9F,0x80,0xCE,0xAE,0xAF,0xD9,0x02,0x10,0xD9,0x81,
0x01,0xF2,0x61,0xFD,0xDD,0xFE,0xAF,0xD8,0x02,0xDF,0xD9,0x00,0x03,0xF8,0xA5,0xA4,
0x9F,0xC0,0xCE,0xC5,0x00,0xB4,0x20,0x4C,0x80,0x44,0x21,0x22,0x0C,0xA0,0x4C,0x23,
0x44,0x24,0xA0,0x4C,0x25,0x44,0x26,0xA0,0xDD,0x23,0x00,0xDD,0x24,0x00,0xDD,0x25,
0x80,0xDD,0x26,0x00,0xD9,0x21,0x0C,0xDD,0x29,0x80,0xDD,0x80,0x00,0xF2,0x92,0xFF,
0xA8,0x79,0x25,0x78,0x26,0xA8,0x79,0x23,0x78,0x24,0xA8,0x79,0x80,0x22,0xF3,0x78,
0x21,0xAC,0xAD,0xF9,0x9F,0xC0,0xCF,0x6E,0x00,0x20,0xCE,0xC5,0x00,0xB4,0x20,0xF2,
0xBE,0xFC,0xDD,0x23,0x00,0xDD,0x24,0x00,0xDD,0x25,0x80,0xDD,0x26,0x00,0xDD,0x29,
0x80,0xDD,0x80,0x00,0xDD,0x21,0x0C,0xF2,0x58,0xFF,0xF3,0x9F,0xFB,0xAF,0xA5,0xA1,
0xCE,0xC5,0x00,0xC5,0x00,0x20,0xCE,0x84,0xCE,0x84,0xCE,0x25,0x03,0xCE,0x2C,0xA9,
0xAD,0xF3,0x23,0x00,0xF2,0x27,0x00,0xAF,0xA7,0xEE,0x0A,0x00,0x32,0x3F,0xEE,0x0D,
0x00,0x80,0xF3,0x0C,0x00,0x28,0xEE,0x05,0x00,0x88,0xF3,0x04,0x00,0xB0,0xFF,0xF9,
0xF2,0xCC,0xFF,0x38,0xF9,0xAF,0xF2,0x05,0x00,0xF3,0x13,0x00,0xAF,0xA5,0xA4,0xCE,
0xC5,0x00,0xB4,0x20,0x44,0x00,0xCE,0x8C,0xCE,0x8C,0xAC,0xAD,0xF8,0xAF,0xA5,0xA4,
0xCE,0xC5,0x00,0xB4,0x20,0x48,0xDC,0x80,0x08,0xA7,0xD8,0x80,0xF7,0xDD,0xFE,0x81,
0x79,0xFE,0xAF,0xEE,0x04,0x00,0xD9,0x80,0x08,0xAC,0xAD,0xF8,0xA5,0xA4,0xCE,0xC5,
0x00,0xB4,0x20,0xF2,0x6F,0xFC,0xDD,0xFE,0xAF,0xD9,0x80,0x04,0xD9,0x81,0x01,0xAC,
0xAD,0xF9,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xF2,0x59,0xFC,0xAC,0xAD,0xF9,0xA5,
0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xD8,0x80,0xF7,0xDD,0xFE,0xAE,0xDD,0xFE,0xAC,0xDD,
0xFE,0x28,0xDD,0xFE,0xA5,0xD8,0x81,0xFE,0xAC,0xAD,0xF9,0xA5,0xA4,0xCE,0xC5,0x00,
0xB4,0x20,0x9F,0xC0,0xDC,0x01,0x80,0xEF,0x0A,0x00,0xD9,0x01,0x80,0xD9,0x01,0x40,
0xD8,0x01,0xDF,0xAC,0xAD,0xF9,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xD8,0x00,0xFC,
0xAC,0xAD,0xF9,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xD9,0x00,0x03,0xAC,0xAD,0xF9,
0xAF,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xDC,0x53,0x02,0x9E,0x01,0xAC,0xAD,0xF8,
0xA5,0xA4,0xCE,0xC5,0x00,0xB4,0x20,0xA6,0xA2,0xA3,0xA1,0xCF,0xB1,0x9F,0xC0,0x46,
0x96,0x01,0xCE,0xC1,0xEE,0x0E,0x00,0xC2,0x0A,0x00,0x5E,0x9A,0x56,0x9A,0xA1,0x4E,
0x9A,0xF3,0x04,0x00,0xC2,0x07,0x00,0xA0,0x4E,0x9A,0x46,0x9A,0x5E,0x9A,0x56,0x9A,
0xCE,0xCF,0xCF,0xED,0x46,0x9A,0x5E,0x9A,0x56,0xCE,0xCE,0xCF,0xE9,0xD9,0x02,0x80,
0xB6,0xFF,0xD9,0x02,0x80,0x47,0xD9,0x02,0x80,0x31,0xA8,0xCE,0xC3,0xEE,0x0A,0x00,
0xAF,0x51,0xA8,0x58,0x41,0xA7,0xF2,0x0B,0x00,0xA8,0x22,0x01,0xA9,0xAB,0xAA,0xAE,
0xAC,0xAD,0xF9,0xCE,0xCC,0xF4,0xA5,0xA1,0xCE,0xC5,0x00,0xC5,0x81,0x20,0xCE,0x25,
0xF1,0x22,0x07,0xCE,0x84,0xCE,0x2C,0xA9,0xAD,0xF9,0xA5,0xA4,0xCE,0xC5,0x00,0xB4,
0x20,0x44,0x81,0xCE,0x8C,0x22,0x07,0xAC,0xAD,0xF9,0xAF,0xA5,0xA4,0xCE,0xC5,0x00,
0xB4,0x20,0xDC,0x01,0x08,0xAC,0xAD,0xF8,0xB7,0x02,0xF5,0xFF,0xB7,0x00,0xF9,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x04,0x82,0xE1,0xE1,0x31,0x31,
0x39,0x39,0x39,0x39,0x39,0x39,0x31,0x31,0xE1,0xE1,0x82,0x06,0xFA,0x04,0xF8,0x00,
0xFE,0x82,0xEA,0x3A,0xFE,0x82,0xEA,0x96,0xFC,0xC7,0xAA,0xBB,0xFF,0xC7,0xAA,0xBA,
0xFE,0x82,0xAA,0xD6,0xFE,0x8A,0xFE,0xC6,0xBB,0xC7,0xFD,0xB6,0xAB,0xAB,0xDA,0x7E,
0x7C,0x7C,0x40,0x40,0x00,0x38,0x7C,0x44,0x7C,0x38,0x00,0x3C,0x7C,0x20,0x7C,0x3C,
0x00,0x00,0x7C,0x7C,0x7C,0x74,0x6C,0x54,0x64,0x44,0x44,0x44,0x44,0x6C,0x38,0x00,
0x7C,0x7C,0x08,0x10,0x7C,0x7C,0x00,0x38,0x7C,0x44,0x7C,0x38,0x00,0x00,0x00,0x38,
0x44,0x44,0x00,0x78,0x14,0x14,0x78,0x00,0x7C,0x14,0x14,0x68,0x00,0x04,0x7C,0x04,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x20,0x20,0x20,0x20,0x46,0x72,0x65,0x65,0x77,0x61,0x72,0x65,0x20,0x20,0x20,0x20,
0x50,0x6F,0x6B,0x65,0x6D,0x6F,0x6E,0x4D,0x69,0x6E,0x69,0x20,0x42,0x49,0x4F,0x53,
0x20,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x20,0x20,0x31,0x2E,0x33,0x20,0x20,
0x20,0x62,0x79,0x20,0x54,0x65,0x61,0x6D,0x20,0x50,0x6F,0x6B,0x65,0x6D,0x65,0x20,
};

View File

@ -0,0 +1,25 @@
/*
PokeMini - Pokémon-Mini Emulator
Copyright (C) 2009 JustBurn
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef FREEBIOS_H
#define FREEBIOS_H
// Free BIOS (4KB)
extern const unsigned char FreeBIOS[];
#endif

View File

@ -0,0 +1,235 @@
Archive member included because of file (symbol)
/home/hatsune/menuetos/lib/libc.a(param.o)
/home/hatsune/menuetos/stub/crt0.o (__menuet__app_path_area)
/home/hatsune/menuetos/lib/libc.a(crt1.o)
/home/hatsune/menuetos/stub/crt0.o (__crt1_startup)
/home/hatsune/menuetos/lib/libc.a(brk.o)
/home/hatsune/menuetos/lib/libc.a(crt1.o) (init_brk)
/home/hatsune/menuetos/lib/libc.a(crt0.o)
/home/hatsune/menuetos/lib/libc.a(crt1.o) (__crt0_setup_arguments)
/home/hatsune/menuetos/lib/libc.a(emu_init.o)
/home/hatsune/menuetos/lib/libc.a(crt1.o) (dosemu_inithandles)
/home/hatsune/menuetos/lib/libc.a(_main.o)
/home/hatsune/menuetos/lib/libc.a(crt1.o) (__main)
/home/hatsune/menuetos/lib/libc.a(exit.o)
/home/hatsune/menuetos/lib/libc.a(crt1.o) (exit)
/home/hatsune/menuetos/lib/libc.a(errno.o)
/home/hatsune/menuetos/lib/libc.a(brk.o) (errno)
/home/hatsune/menuetos/lib/libc.a(malloc.o)
/home/hatsune/menuetos/lib/libc.a(crt0.o) (malloc)
/home/hatsune/menuetos/lib/libc.a(strlen.o)
/home/hatsune/menuetos/lib/libc.a(crt0.o) (strlen)
/home/hatsune/menuetos/lib/libc.a(strcpy.o)
/home/hatsune/menuetos/lib/libc.a(emu_init.o) (strcpy)
/home/hatsune/menuetos/lib/libc.a(strrchr.o)
/home/hatsune/menuetos/lib/libc.a(emu_init.o) (strrchr)
/home/hatsune/menuetos/lib/libc.a(delay.o)
/home/hatsune/menuetos/lib/libc.a(malloc.o) (__menuet__delay100)
/home/hatsune/menuetos/lib/libc.a(memcpy.o)
/home/hatsune/menuetos/lib/libc.a(malloc.o) (memcpy)
Memory Configuration
Name Origin Length Attributes
*default* 0x0000000000000000 0xffffffffffffffff
Linker script and memory map
0x0000000000400000 __image_base__ = 0x400000
0x0000000000000000 __dll__ = 0x0
0x0000000000400000 ___ImageBase = 0x400000
0x0000000000000010 __section_alignment__ = 0x10
0x0000000000000010 __file_alignment__ = 0x10
0x0000000000000004 __major_os_version__ = 0x4
0x0000000000000000 __minor_os_version__ = 0x0
0x0000000000000001 __major_image_version__ = 0x1
0x0000000000000000 __minor_image_version__ = 0x0
0x0000000000000004 __major_subsystem_version__ = 0x4
0x0000000000000000 __minor_subsystem_version__ = 0x0
0x0000000000000003 __subsystem__ = 0x3
0x0000000000200000 __size_of_stack_reserve__ = 0x200000
0x0000000000001000 __size_of_stack_commit__ = 0x1000
0x0000000000100000 __size_of_heap_reserve__ = 0x100000
0x0000000000001000 __size_of_heap_commit__ = 0x1000
0x0000000000000000 __loader_flags__ = 0x0
0x0000000000000000 __dll_characteristics__ = 0x0
.text 0x0000000000000000 0x810
0x0000000000000000 code = .
0x0000000000000000 _code = .
*(.A)
.A 0x0000000000000000 0x24 /home/hatsune/menuetos/stub/crt0.o
0x0000000000000000 __menuet__app_header
0x0000000000000014 __menuet__memsize
*(.text)
.text 0x0000000000000024 0x0 /home/hatsune/menuetos/stub/crt0.o
0x0000000000000024 start
.text 0x0000000000000024 0x0 freebios.o
.text 0x0000000000000024 0x0 /home/hatsune/menuetos/lib/libc.a(param.o)
.text 0x0000000000000024 0x40 /home/hatsune/menuetos/lib/libc.a(crt1.o)
0x0000000000000024 __crt1_startup
.text 0x0000000000000064 0x15c /home/hatsune/menuetos/lib/libc.a(brk.o)
0x0000000000000064 init_brk
0x00000000000000b8 sbrk
.text 0x00000000000001c0 0x140 /home/hatsune/menuetos/lib/libc.a(crt0.o)
0x0000000000000243 _exit
0x000000000000024d __crt0_setup_arguments
.text 0x0000000000000300 0x78 /home/hatsune/menuetos/lib/libc.a(emu_init.o)
0x0000000000000300 dosemu_inithandles
0x0000000000000345 init_dir_stack
.text 0x0000000000000378 0x3c /home/hatsune/menuetos/lib/libc.a(_main.o)
0x0000000000000378 __main
.text 0x00000000000003b4 0x24 /home/hatsune/menuetos/lib/libc.a(exit.o)
0x00000000000003b4 exit
.text 0x00000000000003d8 0xc /home/hatsune/menuetos/lib/libc.a(errno.o)
0x00000000000003d8 __isatty
.text 0x00000000000003e4 0x384 /home/hatsune/menuetos/lib/libc.a(malloc.o)
0x00000000000004b1 malloc
0x0000000000000667 free
0x0000000000000705 realloc
.text 0x0000000000000768 0x18 /home/hatsune/menuetos/lib/libc.a(strlen.o)
0x0000000000000768 strlen
.text 0x0000000000000780 0x1c /home/hatsune/menuetos/lib/libc.a(strcpy.o)
0x0000000000000780 strcpy
.text 0x000000000000079c 0x24 /home/hatsune/menuetos/lib/libc.a(strrchr.o)
0x000000000000079c strrchr
.text 0x00000000000007c0 0x24 /home/hatsune/menuetos/lib/libc.a(delay.o)
0x00000000000007c0 __menuet__delay100
0x00000000000007d1 __menuet(int, double, long,...)
.text 0x00000000000007e4 0x2c /home/hatsune/menuetos/lib/libc.a(memcpy.o)
0x00000000000007e4 memcpy
*(.fixup)
*(.gnu.warning)
*(.gnu.linkonce.t*)
*(.const)
*(.ro*)
*(.gnu.linkonce.r*)
0x0000000000000810 ecode = .
0x0000000000000810 _ecode = .
.rdata 0x0000000000000810 0x1130
.rdata 0x0000000000000810 0x1000 freebios.o
0x0000000000000810 FreeBIOS
.rdata$zzz 0x0000000000001810 0x14 freebios.o
.rdata$zzz 0x0000000000001824 0x14 /home/hatsune/menuetos/lib/libc.a(param.o)
.rdata$zzz 0x0000000000001838 0x14 /home/hatsune/menuetos/lib/libc.a(crt1.o)
.rdata$zzz 0x000000000000184c 0x14 /home/hatsune/menuetos/lib/libc.a(brk.o)
.rdata$zzz 0x0000000000001860 0x14 /home/hatsune/menuetos/lib/libc.a(crt0.o)
.rdata$zzz 0x0000000000001874 0x14 /home/hatsune/menuetos/lib/libc.a(emu_init.o)
.rdata$zzz 0x0000000000001888 0x14 /home/hatsune/menuetos/lib/libc.a(_main.o)
.rdata$zzz 0x000000000000189c 0x14 /home/hatsune/menuetos/lib/libc.a(exit.o)
.rdata$zzz 0x00000000000018b0 0x14 /home/hatsune/menuetos/lib/libc.a(errno.o)
.rdata$zzz 0x00000000000018c4 0x14 /home/hatsune/menuetos/lib/libc.a(malloc.o)
.rdata$zzz 0x00000000000018d8 0x14 /home/hatsune/menuetos/lib/libc.a(strlen.o)
.rdata$zzz 0x00000000000018ec 0x14 /home/hatsune/menuetos/lib/libc.a(strcpy.o)
.rdata$zzz 0x0000000000001900 0x14 /home/hatsune/menuetos/lib/libc.a(strrchr.o)
.rdata$zzz 0x0000000000001914 0x14 /home/hatsune/menuetos/lib/libc.a(delay.o)
.rdata$zzz 0x0000000000001928 0x14 /home/hatsune/menuetos/lib/libc.a(memcpy.o)
.data 0x000000000000193c 0x4e0
0x000000000000193c djgpp_first_ctor = .
*(.ctor)
*(.ctors)
0x000000000000193c djgpp_last_ctor = .
0x000000000000193c djgpp_first_dtor = .
*(.dtor)
*(.dtors)
0x000000000000193c djgpp_last_dtor = .
*(.gcc_exc*)
0x000000000000193c __EH_FRAME_BEGIN__ = .
*(.eh_fram*)
.eh_frame 0x000000000000193c 0x34 /home/hatsune/menuetos/lib/libc.a(crt1.o)
.eh_frame 0x0000000000001970 0x68 /home/hatsune/menuetos/lib/libc.a(brk.o)
.eh_frame 0x00000000000019d8 0x9c /home/hatsune/menuetos/lib/libc.a(crt0.o)
.eh_frame 0x0000000000001a74 0x58 /home/hatsune/menuetos/lib/libc.a(emu_init.o)
.eh_frame 0x0000000000001acc 0x40 /home/hatsune/menuetos/lib/libc.a(_main.o)
.eh_frame 0x0000000000001b0c 0x34 /home/hatsune/menuetos/lib/libc.a(exit.o)
.eh_frame 0x0000000000001b40 0x38 /home/hatsune/menuetos/lib/libc.a(errno.o)
.eh_frame 0x0000000000001b78 0x140 /home/hatsune/menuetos/lib/libc.a(malloc.o)
.eh_frame 0x0000000000001cb8 0x3c /home/hatsune/menuetos/lib/libc.a(strlen.o)
.eh_frame 0x0000000000001cf4 0x40 /home/hatsune/menuetos/lib/libc.a(strcpy.o)
.eh_frame 0x0000000000001d34 0x3c /home/hatsune/menuetos/lib/libc.a(strrchr.o)
.eh_frame 0x0000000000001d70 0x60 /home/hatsune/menuetos/lib/libc.a(delay.o)
.eh_frame 0x0000000000001dd0 0x40 /home/hatsune/menuetos/lib/libc.a(memcpy.o)
0x0000000000001e10 __EH_FRAME_END__ = .
0x0000000000001e10 0x4 LONG 0x0
*(.gnu.linkonce.d*)
*(.rodata)
*(.rodata.*)
*(.data)
.data 0x0000000000001e14 0x0 freebios.o
.data 0x0000000000001e14 0x0 /home/hatsune/menuetos/lib/libc.a(param.o)
.data 0x0000000000001e14 0x4 /home/hatsune/menuetos/lib/libc.a(crt1.o)
0x0000000000001e14 __bss_count
.data 0x0000000000001e18 0x0 /home/hatsune/menuetos/lib/libc.a(brk.o)
.data 0x0000000000001e18 0x0 /home/hatsune/menuetos/lib/libc.a(crt0.o)
.data 0x0000000000001e18 0x0 /home/hatsune/menuetos/lib/libc.a(emu_init.o)
.data 0x0000000000001e18 0x4 /home/hatsune/menuetos/lib/libc.a(_main.o)
.data 0x0000000000001e1c 0x0 /home/hatsune/menuetos/lib/libc.a(exit.o)
.data 0x0000000000001e1c 0x0 /home/hatsune/menuetos/lib/libc.a(errno.o)
.data 0x0000000000001e1c 0x0 /home/hatsune/menuetos/lib/libc.a(malloc.o)
.data 0x0000000000001e1c 0x0 /home/hatsune/menuetos/lib/libc.a(strlen.o)
.data 0x0000000000001e1c 0x0 /home/hatsune/menuetos/lib/libc.a(strcpy.o)
.data 0x0000000000001e1c 0x0 /home/hatsune/menuetos/lib/libc.a(strrchr.o)
.data 0x0000000000001e1c 0x0 /home/hatsune/menuetos/lib/libc.a(delay.o)
.data 0x0000000000001e1c 0x0 /home/hatsune/menuetos/lib/libc.a(memcpy.o)
0x0000000000001e1c edata = .
0x0000000000001e1c _edata = .
0x0000000000001e1c bss = .
.bss 0x0000000000001e1c 0x190bc
*(.bss)
.bss 0x0000000000001e1c 0x10000 /home/hatsune/menuetos/stub/crt0.o
.bss 0x0000000000011e1c 0x0 freebios.o
.bss 0x0000000000011e1c 0x800 /home/hatsune/menuetos/lib/libc.a(param.o)
0x0000000000011e1c __menuet__app_path_area
0x000000000001221c __menuet__app_param_area
.bss 0x000000000001261c 0x14 /home/hatsune/menuetos/lib/libc.a(crt1.o)
0x000000000001261c __dos_argv0
0x0000000000012620 __crt0_argv
0x0000000000012624 __crt0_argc
0x0000000000012628 _crt0_startup_flags
0x000000000001262c environ
.bss 0x0000000000012630 0x18 /home/hatsune/menuetos/lib/libc.a(brk.o)
.bss 0x0000000000012648 0x0 /home/hatsune/menuetos/lib/libc.a(crt0.o)
.bss 0x0000000000012648 0x8800 /home/hatsune/menuetos/lib/libc.a(emu_init.o)
0x0000000000012648 __curdir_buf
0x0000000000012a48 _io_handles
.bss 0x000000000001ae48 0x0 /home/hatsune/menuetos/lib/libc.a(_main.o)
.bss 0x000000000001ae48 0x8 /home/hatsune/menuetos/lib/libc.a(exit.o)
0x000000000001ae48 keypress_at_exit
0x000000000001ae4c __atexit_ptr
.bss 0x000000000001ae50 0x4 /home/hatsune/menuetos/lib/libc.a(errno.o)
0x000000000001ae50 errno
.bss 0x000000000001ae54 0x84 /home/hatsune/menuetos/lib/libc.a(malloc.o)
.bss 0x000000000001aed8 0x0 /home/hatsune/menuetos/lib/libc.a(strlen.o)
.bss 0x000000000001aed8 0x0 /home/hatsune/menuetos/lib/libc.a(strcpy.o)
.bss 0x000000000001aed8 0x0 /home/hatsune/menuetos/lib/libc.a(strrchr.o)
.bss 0x000000000001aed8 0x0 /home/hatsune/menuetos/lib/libc.a(delay.o)
.bss 0x000000000001aed8 0x0 /home/hatsune/menuetos/lib/libc.a(memcpy.o)
0x000000000001aed8 end = .
0x000000000001aed8 _end = .
0x000000000001aed8 ___memsize = .
/DISCARD/
*(.debug$S)
*(.debug$T)
*(.debug$F)
*(.drectve)
*(.note.GNU-stack)
*(.eh_frame)
*(.comment)
*(.debug_abbrev)
*(.debug_info)
*(.debug_line)
*(.debug_frame)
*(.debug_loc)
*(.debug_pubnames)
*(.debug_aranges)
*(.debug_ranges)
LOAD /home/hatsune/menuetos/stub/crt0.o
LOAD freebios.o
LOAD /home/hatsune/menuetos/lib/libm.a
LOAD /home/hatsune/menuetos/lib/libc.a
OUTPUT(noout pei-i386)