33cb13dee5
Co-conspirators: Franklin Wei, Benjamin Brown -------------------------------------------------------------------- This work is based on: - Fabien Sanglard's "Fabother World" based on - Piotr Padkowski's newRaw interpreter which was based on - Gregory Montoir's reverse engineering of - Eric Chahi's assembly code -------------------------------------------------------------------- Progress: * The plugin runs pretty nicely (with sound!) on most color targets * Keymaps for color LCD targets are complete * The manual entry is finished * Grayscale/monochrome support is NOT PLANNED - the game looks horrible in grayscale! :p -------------------------------------------------------------------- Notes: * The original game strings were built-in to the executable, and were copyrighted and could not be used. * This port ships with an alternate set of strings by default, but can load the "official" strings from a file at runtime. -------------------------------------------------------------------- To be done (in descending order of importance): * vertical stride compatibility <30% done> * optimization <10% done> Change-Id: I3155b0d97c2ac470cb8a2040f40d4139ddcebfa5 Reviewed-on: http://gerrit.rockbox.org/1077 Reviewed-by: Michael Giacomelli <giac2000@hotmail.com>
271 lines
11 KiB
C
271 lines
11 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Copyright (C) 2014 Franklin Wei, Benjamin Brown
|
|
* Copyright (C) 2004 Gregory Montoir
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
***************************************************************************/
|
|
|
|
#include "video.h"
|
|
#include "video_data.h"
|
|
#include "stdint.h"
|
|
|
|
/* this font is based off 10-Fixed.bdf with lowercase characters
|
|
from 09-Fixed.bdf and a handcrafted copyright symbol */
|
|
|
|
uint8_t video_font[FONT_SIZE] = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ' ' */
|
|
0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x20, 0x00, /* '!' */
|
|
0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, /* '"' */
|
|
0x50, 0x50, 0xF8, 0x50, 0xF8, 0x50, 0x50, 0x00, /* '#' */
|
|
0x20, 0x70, 0xA0, 0x70, 0x28, 0x70, 0x20, 0x00, /* '$' */
|
|
0x48, 0xA8, 0x50, 0x20, 0x50, 0xA8, 0x90, 0x00, /* '%' */
|
|
0x40, 0xA0, 0xA0, 0x40, 0xA8, 0x90, 0x68, 0x00, /* '&' */
|
|
0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, /* ''' */
|
|
0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, 0x00, /* '(' */
|
|
0x40, 0x20, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00, /* ')' */
|
|
0x00, 0x88, 0x50, 0xF8, 0x50, 0x88, 0x00, 0x00, /* '*' */
|
|
0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00, /* '+' */
|
|
0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x40, 0x00, /* ',' */
|
|
0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, /* '-' */
|
|
0x00, 0x00, 0x00, 0x00, 0x20, 0x50, 0x20, 0x00, /* '.' */
|
|
0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, /* '/' */
|
|
0x20, 0x50, 0x88, 0x88, 0x88, 0x50, 0x20, 0x00, /* '0' */
|
|
0x20, 0x60, 0xA0, 0x20, 0x20, 0x20, 0xF8, 0x00, /* '1' */
|
|
0x70, 0x88, 0x08, 0x30, 0x40, 0x80, 0xF8, 0x00, /* '2' */
|
|
0xF8, 0x08, 0x10, 0x30, 0x08, 0x88, 0x70, 0x00, /* '3' */
|
|
0x10, 0x30, 0x50, 0x90, 0xF8, 0x10, 0x10, 0x00, /* '4' */
|
|
0xF8, 0x80, 0xB0, 0xC8, 0x08, 0x88, 0x70, 0x00, /* '5' */
|
|
0x30, 0x40, 0x80, 0xB0, 0xC8, 0x88, 0x70, 0x00, /* '6' */
|
|
0xF8, 0x08, 0x10, 0x10, 0x20, 0x40, 0x40, 0x00, /* '7' */
|
|
0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00, /* '8' */
|
|
0x70, 0x88, 0x98, 0x68, 0x08, 0x10, 0x60, 0x00, /* '9' */
|
|
0x00, 0x60, 0x60, 0x00, 0x60, 0x60, 0x00, 0x00, /* ':' */
|
|
0x00, 0x30, 0x30, 0x00, 0x30, 0x20, 0x40, 0x00, /* ';' */
|
|
0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00, /* '<' */
|
|
0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0x00, /* '=' */
|
|
0x40, 0x20, 0x10, 0x08, 0x10, 0x20, 0x40, 0x00, /* '>' */
|
|
0x70, 0x88, 0x10, 0x20, 0x20, 0x00, 0x20, 0x00, /* '?' */
|
|
0x40, 0x20, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00, /* ')' */
|
|
0x20, 0x50, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x00, /* 'A' */
|
|
0xF0, 0x88, 0x88, 0xF0, 0x88, 0x88, 0xF0, 0x00, /* 'B' */
|
|
0x70, 0x88, 0x80, 0x80, 0x80, 0x88, 0x70, 0x00, /* 'C' */
|
|
0xF0, 0x88, 0x88, 0x88, 0x88, 0x88, 0xF0, 0x00, /* 'D' */
|
|
0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0xF8, 0x00, /* 'E' */
|
|
0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0x80, 0x00, /* 'F' */
|
|
0x70, 0x88, 0x80, 0x80, 0x98, 0x88, 0x70, 0x00, /* 'G' */
|
|
0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x00, /* 'H' */
|
|
0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, /* 'I' */
|
|
0x38, 0x10, 0x10, 0x10, 0x10, 0x90, 0x60, 0x00, /* 'J' */
|
|
0x88, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x88, 0x00, /* 'K' */
|
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x00, /* 'L' */
|
|
0x88, 0x88, 0xD8, 0xA8, 0x88, 0x88, 0x88, 0x00, /* 'M' */
|
|
0x88, 0x88, 0xC8, 0xA8, 0x98, 0x88, 0x88, 0x00, /* 'N' */
|
|
0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, /* 'O' */
|
|
0xF0, 0x88, 0x88, 0xF0, 0x80, 0x80, 0x80, 0x00, /* 'P' */
|
|
0x70, 0x88, 0x88, 0x88, 0x88, 0xA8, 0x70, 0x00, /* 'Q' */
|
|
0xF0, 0x88, 0x88, 0xF0, 0xA0, 0x90, 0x88, 0x00, /* 'R' */
|
|
0x70, 0x88, 0x80, 0x70, 0x08, 0x88, 0x70, 0x00, /* 'S' */
|
|
0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, /* 'T' */
|
|
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, /* 'U' */
|
|
0x88, 0x88, 0x88, 0x50, 0x50, 0x50, 0x20, 0x00, /* 'V' */
|
|
0x88, 0x88, 0x88, 0xA8, 0xA8, 0xD8, 0x88, 0x00, /* 'W' */
|
|
0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00, /* 'X' */
|
|
0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x20, 0x00, /* 'Y' */
|
|
0xF8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00, /* 'Z' */
|
|
0x70, 0x40, 0x40, 0x40, 0x40, 0x70, 0x00, 0x00, /* '[' */
|
|
0x80, 0x80, 0x40, 0x20, 0x10, 0x10, 0x00, 0x00, /* '\' */
|
|
0x70, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00, 0x00, /* ']' */
|
|
0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* '^' */
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, /* '_' */
|
|
0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* '`' */
|
|
0x00, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00, /* 'a' */
|
|
0x80, 0x80, 0xB0, 0xC8, 0x88, 0xC8, 0xB0, 0x00, /* 'b' */
|
|
0x00, 0x00, 0x70, 0x88, 0x80, 0x88, 0x70, 0x00, /* 'c' */
|
|
0x08, 0x08, 0x68, 0x98, 0x88, 0x98, 0x68, 0x00, /* 'd' */
|
|
0x00, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00, /* 'e' */
|
|
0x30, 0x48, 0x40, 0xF0, 0x40, 0x40, 0x40, 0x00, /* 'f' */
|
|
0x00, 0x00, 0x60, 0x90, 0x90, 0x70, 0x10, 0x60, /* 'g' */
|
|
0x80, 0x80, 0xB0, 0xC8, 0x88, 0x88, 0x88, 0x00, /* 'h' */
|
|
0x20, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00, /* 'i' */
|
|
0x20, 0x00, 0x60, 0x20, 0x20, 0x20, 0xA0, 0x40, /* 'j' */
|
|
0x80, 0x80, 0x88, 0x90, 0xE0, 0x90, 0x88, 0x00, /* 'k' */
|
|
0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, /* 'l' */
|
|
0x00, 0x00, 0xD0, 0xA8, 0xA8, 0xA8, 0x88, 0x00, /* 'm' */
|
|
0x00, 0x00, 0xB0, 0xC8, 0x88, 0x88, 0x88, 0x00, /* 'n' */
|
|
0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00, /* 'o' */
|
|
0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80, /* 'p' */
|
|
0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x10, 0x10, /* 'q' */
|
|
0x00, 0x00, 0xB0, 0xC8, 0x80, 0x80, 0x80, 0x00, /* 'r' */
|
|
0x00, 0x00, 0x70, 0x80, 0x70, 0x08, 0xF0, 0x00, /* 's' */
|
|
0x40, 0x40, 0xF0, 0x40, 0x40, 0x48, 0x30, 0x00, /* 't' */
|
|
0x00, 0x00, 0x88, 0x88, 0x88, 0x98, 0x68, 0x00, /* 'u' */
|
|
0x00, 0x00, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00, /* 'v' */
|
|
0x00, 0x00, 0x88, 0x88, 0xA8, 0xA8, 0x50, 0x00, /* 'w' */
|
|
0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00, /* 'x' */
|
|
0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x90, 0x60, /* 'y' */
|
|
0x00, 0x00, 0xF8, 0x10, 0x20, 0x40, 0xF8, 0x00, /* 'z' */
|
|
0x18, 0x20, 0x10, 0x60, 0x10, 0x20, 0x18, 0x00, /* '{' */
|
|
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, /* cursor */
|
|
0x38, 0x54, 0xAA, 0xA2, 0xAA, 0x54, 0x38, 0x00, /* copyright symbol */
|
|
0x70, 0x88, 0x88, 0x88, 0x88, 0x50, 0xD8, 0x00, /* omega */
|
|
0x00, 0xA0, 0x10, 0x80, 0x10, 0x80, 0x50, 0x00, /* DEL */
|
|
};
|
|
|
|
struct StrEntry video_stringsTableEng[MAX_STRING_TABLE_SIZE] = {
|
|
{ 0x001, "B A N A N A 2000" },
|
|
{ 0x002, "Copyright } 2014 Banana Corporation \nGPLv2\n\nBUNIX Revision 3.14" },
|
|
{ 0x003, "1" },
|
|
{ 0x004, "3" },
|
|
{ 0x005, "." },
|
|
{ 0x006, "a" },
|
|
{ 0x007, "@" },
|
|
{ 0x008, "BANANA 2000" },
|
|
{ 0x00A, "R" },
|
|
{ 0x00B, "U" },
|
|
{ 0x00C, "N" },
|
|
{ 0x00D, "P" },
|
|
{ 0x00E, "R" },
|
|
{ 0x00F, "O" },
|
|
{ 0x010, "J" },
|
|
{ 0x011, "E" },
|
|
{ 0x012, "C" },
|
|
{ 0x013, "T" },
|
|
{ 0x014, "Fields 100.05Mf OK" },
|
|
{ 0x015, "Lines of Flux % 14.077 OK" },
|
|
{ 0x016, "IONS OK" },
|
|
{ 0x017, " %%%ddd OK" },
|
|
{ 0x018, "TEMP ok" },
|
|
{ 0x019, "EXECUTE" },
|
|
{ 0x01A, "V= 24%\nG: 1.05\n\nMG: 177.2l\n\nOPT: G>\n\n Field:\nI: OFF\nII: ON\nIII: ON\n\np~: I\n" },
|
|
{ 0x01B, "on" },
|
|
{ 0x01C, "-" },
|
|
{ 0x021, "|" },
|
|
{ 0x022, "--- Simulation ---" },
|
|
{ 0x023, " TEST WILL START IN SECONDS" },
|
|
{ 0x024, " 20" },
|
|
{ 0x025, " 19" },
|
|
{ 0x026, " 18" },
|
|
{ 0x027, " 4" },
|
|
{ 0x028, " 3" },
|
|
{ 0x029, " 2" },
|
|
{ 0x02A, " 1" },
|
|
{ 0x02B, " 0" },
|
|
{ 0x02C, "C A U T I O N" },
|
|
{ 0x031, "- Test 0:\nGenerate electron beam\n" },
|
|
{ 0x032, "- Test 1:\nCalculating flux coefficient\n" },
|
|
{ 0x033, "- Test 2:\nIncrease magnetic field\n" },
|
|
{ 0x034, "R E S U L T S" },
|
|
{ 0x035, "- NOTE:\nChances of producing:\n Anti-matter: 34 %\n Neutrino 71: 4 %\n Positron 34: 99 %\n" },
|
|
{ 0x036, " Continue Test y/n ?" },
|
|
{ 0x037, "Are You Sure?" },
|
|
{ 0x038, "Setting Configuration\n of accelerator\n'Verified'" },
|
|
{ 0x039, " Continue ?" },
|
|
{ 0x03C, "T___T" },
|
|
{ 0x03D, "OOO ~" },
|
|
{ 0x03E, ".40X13DD" },
|
|
{ 0x03F, "ferfxwre" },
|
|
{ 0x040, "Trfor 25%" },
|
|
{ 0x041, "32% 56% GOOD" },
|
|
{ 0x042, "E=2.7182818289" },
|
|
{ 0x043, "G=330.01" },
|
|
{ 0x044, "+" },
|
|
{ 0x045, "*" },
|
|
{ 0x046, "% 234" },
|
|
{ 0x047, "Gorwle 12" },
|
|
{ 0x048, "[[[[" },
|
|
{ 0x049, "Elephine Soft" },
|
|
{ 0x04A, "By Many talented People" },
|
|
{ 0x04B, " 4" },
|
|
{ 0x04C, " 16" },
|
|
{ 0x12C, "0" },
|
|
{ 0x12D, "1" },
|
|
{ 0x12E, "2" },
|
|
{ 0x12F, "3" },
|
|
{ 0x130, "4" },
|
|
{ 0x131, "5" },
|
|
{ 0x132, "6" },
|
|
{ 0x133, "7" },
|
|
{ 0x134, "8" },
|
|
{ 0x135, "9" },
|
|
{ 0x136, "A" },
|
|
{ 0x137, "B" },
|
|
{ 0x138, "C" },
|
|
{ 0x139, "D" },
|
|
{ 0x13A, "E" },
|
|
{ 0x13B, "F" },
|
|
{ 0x13C, " LEVEL CODE:" },
|
|
{ 0x13D, " PRESS ANY KEY TO CONTINUE" },
|
|
{ 0x13E, " ENTER CODE" },
|
|
{ 0x13F, " CODE NOT VALID!!" },
|
|
{ 0x140, "AN NULER" },
|
|
{ 0x141, " ??????\n\n\n\n\n\n\n\n\nANY KEY TO CONTINUE" },
|
|
{ 0x142, " ENTER THE CODE CORRELATING TO\n POSITION\n ON THE DECODER WHEEL" },
|
|
{ 0x143, " LOAD..." },
|
|
{ 0x144, " ERROR" },
|
|
{ 0x15E, "LDKD" },
|
|
{ 0x15F, "HTDC" },
|
|
{ 0x160, "CLLD" },
|
|
{ 0x161, "FXLC" },
|
|
{ 0x162, "KRFK" },
|
|
{ 0x163, "XDDJ" },
|
|
{ 0x164, "LBKG" },
|
|
{ 0x165, "KLFB" },
|
|
{ 0x166, "TTCT" },
|
|
{ 0x167, "DDRX" },
|
|
{ 0x168, "TBHK" },
|
|
{ 0x169, "BRTD" },
|
|
{ 0x16A, "CKJL" },
|
|
{ 0x16B, "LFCK" },
|
|
{ 0x16C, "BFLX" },
|
|
{ 0x16D, "XJRT" },
|
|
{ 0x16E, "HRTB" },
|
|
{ 0x16F, "HBHK" },
|
|
{ 0x170, "JCGB" },
|
|
{ 0x171, "HHFL" },
|
|
{ 0x172, "TFBB" },
|
|
{ 0x173, "TXHF" },
|
|
{ 0x174, "JHJL" },
|
|
{ 0x181, " " },
|
|
{ 0x182, " " },
|
|
{ 0x183, " " },
|
|
{ 0x184, " " },
|
|
{ 0x185, " " },
|
|
{ 0x186, " " },
|
|
{ 0x187, " " },
|
|
{ 0x188, " " },
|
|
{ 0x18B, " " },
|
|
{ 0x18C, " " },
|
|
{ 0x18D, " " },
|
|
{ 0x18E, " " },
|
|
{ 0x258, " " },
|
|
{ 0x259, " " },
|
|
{ 0x25A, " " },
|
|
{ 0x25B, " " },
|
|
{ 0x25C, " " },
|
|
{ 0x25D, " " },
|
|
{ 0x263, " " },
|
|
{ 0x264, " " },
|
|
{ 0x265, " " },
|
|
{ 0x190, "Hello Master." },
|
|
{ 0x191, "Identifiy confirmed.\nAccess granted." },
|
|
{ 0x192, " ACCESSING" },
|
|
{ 0x193, " " },
|
|
{ 0x194, "y\n" },
|
|
{ 0x193, "!!!\n" },
|
|
{ END_OF_STRING_DICTIONARY, "" }
|
|
};
|