diff --git a/desmume/src/GPU.cpp b/desmume/src/GPU.cpp index ac7b77713..c113ae4f4 100644 --- a/desmume/src/GPU.cpp +++ b/desmume/src/GPU.cpp @@ -32,8 +32,8 @@ #include "debug.h" #include "render3D.h" #include "gfx3d.h" -#include "GPU_osd.h" #include "debug.h" +#include "GPU_osd.h" #include "NDSSystem.h" #include "readwrite.h" @@ -52,12 +52,10 @@ GPU::MosaicLookup GPU::mosaicLookup; //#define DEBUG_TRI CACHE_ALIGN u8 GPU_screen[4*256*192]; -CACHE_ALIGN u8 GPU_tempScreen[4*256*192]; CACHE_ALIGN u8 *GPU_tempScanline; CACHE_ALIGN u8 sprWin[256]; -OSDCLASS *osd = NULL; u16 gpu_angle = 0; @@ -2193,7 +2191,7 @@ int Screen_Init(int coreid) MainScreen.gpu = GPU_Init(0); SubScreen.gpu = GPU_Init(1); - memset(GPU_tempScreen, 0, sizeof(GPU_tempScreen)); + memset(GPU_screen, 0, sizeof(GPU_screen)); for(int i = 0; i < (256*192*2); i++) ((u16*)GPU_screen)[i] = 0x7FFF; disp_fifo.head = disp_fifo.tail = 0; @@ -2209,7 +2207,7 @@ void Screen_Reset(void) GPU_Reset(MainScreen.gpu, 0); GPU_Reset(SubScreen.gpu, 1); - memset(GPU_tempScreen, 0, sizeof(GPU_tempScreen)); + memset(GPU_screen, 0, sizeof(GPU_screen)); for(int i = 0; i < (256*192*2); i++) ((u16*)GPU_screen)[i] = 0x7FFF; @@ -2673,7 +2671,7 @@ static INLINE void GPU_ligne_MasterBrightness(NDS_Screen * screen, u16 l) { GPU * gpu = screen->gpu; - u8 * dst = GPU_tempScreen + (screen->offset + l) * 512; + u8 * dst = GPU_screen + (screen->offset + l) * 512; u16 i16; //isn't it odd that we can set uselessly high factors here? @@ -2830,7 +2828,7 @@ void GPU_ligne(NDS_Screen * screen, u16 l) //blacken the screen if it is turned off by the user if(!CommonSettings.showGpu.screens[gpu->core]) { - u8 * dst = GPU_tempScreen + (screen->offset + l) * 512; + u8 * dst = GPU_screen + (screen->offset + l) * 512; memset(dst,0,512); return; } @@ -2857,7 +2855,7 @@ void GPU_ligne(NDS_Screen * screen, u16 l) //always generate the 2d+3d, no matter what we're displaying, since we may need to capture it //(if this seems inefficient in some cases, consider that the speed in those cases is not really a problem) - GPU_tempScanline = screen->gpu->currDst = (u8 *)(GPU_tempScreen) + (screen->offset + l) * 512; + GPU_tempScanline = screen->gpu->currDst = (u8 *)(GPU_screen) + (screen->offset + l) * 512; GPU_ligne_layer(screen, l); if (gpu->core == GPU_MAIN) @@ -2870,7 +2868,7 @@ void GPU_ligne(NDS_Screen * screen, u16 l) { case 0: // Display Off(Display white) { - u8 * dst = GPU_tempScreen + (screen->offset + l) * 512; + u8 * dst = GPU_screen + (screen->offset + l) * 512; for (int i=0; i<256; i++) T2WriteWord(dst, i << 1, 0x7FFF); @@ -2883,14 +2881,14 @@ void GPU_ligne(NDS_Screen * screen, u16 l) case 2: // Display framebuffer { - u8 * dst = GPU_tempScreen + (screen->offset + l) * 512; + u8 * dst = GPU_screen + (screen->offset + l) * 512; u8 * src = gpu->VRAMaddr + (l*512); memcpy (dst, src, 512); } break; case 3: // Display memory FIFO { - u8 * dst = GPU_tempScreen + (screen->offset + l) * 512; + u8 * dst = GPU_screen + (screen->offset + l) * 512; for (int i=0; i < 128; i++) T1WriteLong(dst, i << 2, DISP_FIFOrecv() & 0x7FFF7FFF); } @@ -3026,8 +3024,8 @@ template void GPU::modeRender(int layer) void gpu_UpdateRender() { - int x = 0, y = 0; - u16 *src = (u16*)GPU_tempScreen; + /*int x = 0, y = 0; + u16 *src = (u16*)GPU_screen; u16 *dst = (u16*)GPU_screen; switch (gpu_angle) @@ -3064,7 +3062,7 @@ void gpu_UpdateRender() } default: break; - } + }*/ } void gpu_SetRotateScreen(u16 angle) diff --git a/desmume/src/GPU.h b/desmume/src/GPU.h index b535a27c7..e8733d67f 100644 --- a/desmume/src/GPU.h +++ b/desmume/src/GPU.h @@ -32,7 +32,6 @@ #include "registers.h" #include "FIFO.h" #include "MMU.h" -#include "GPU_osd.h" #include //#undef FORCEINLINE @@ -868,7 +867,6 @@ static void REG_DISPx_pack_test(GPU * gpu) #endif CACHE_ALIGN extern u8 GPU_screen[4*256*192]; -CACHE_ALIGN extern u8 GPU_tempScreen[4*256*192]; GPU * GPU_Init(u8 l); @@ -993,7 +991,5 @@ void gpu_SetRotateScreen(u16 angle); //#undef FORCEINLINE //#define FORCEINLINE __forceinline -extern OSDCLASS *osd; - #endif diff --git a/desmume/src/GPU_osd.cpp b/desmume/src/GPU_osd.cpp index 3696e3c1d..7806ebb0b 100644 --- a/desmume/src/GPU_osd.cpp +++ b/desmume/src/GPU_osd.cpp @@ -29,18 +29,12 @@ #include #include "debug.h" -#include "softrender.h" +#include "aggdraw.h" -#include "softrender_v3sysfont.h" -#include "softrender_desmumefont.h" - -using namespace softrender; - -image screenshell; +OSDCLASS *osd = NULL; OSDCLASS::OSDCLASS(u8 core) { - memset(screen, 0, sizeof(screen)); memset(name,0,7); mode=core; @@ -49,7 +43,7 @@ OSDCLASS::OSDCLASS(u8 core) lastLineText=0; lineText_x = 5; lineText_y = 120; - lineText_color = render51.MakeColor(255, 255, 255); + lineText_color = AggColor(255, 255, 255); for (int i=0; i < OSD_MAX_LINES+1; i++) { lineText[i] = new char[1024]; @@ -73,18 +67,7 @@ OSDCLASS::OSDCLASS(u8 core) mode=255; } - screenshell.shell = true; - screenshell.data = screen; - screenshell.bpp = 15; - screenshell.width = 256; - screenshell.height = 384; - screenshell.pitch = 256; - screenshell.cx1 = 0; - screenshell.cx2 = 256-1; - screenshell.cy1 = 0; - screenshell.cy2 = 384-1; - - border(false); + //border(false); LOG("OSD_Init (%s)\n",name); } @@ -109,39 +92,10 @@ void OSDCLASS::setOffset(u16 ofs) void OSDCLASS::setRotate(u16 angle) { rotAngle = angle; - - switch(rotAngle) - { - case 0: - case 180: - { - screenshell.width = 256; - screenshell.height = 384; - screenshell.pitch = 256; - screenshell.cx1 = 0; - screenshell.cx2 = 255; - screenshell.cy1 = 0; - screenshell.cy2 = 383; - } - break; - case 90: - case 270: - { - screenshell.width = 384; - screenshell.height = 256; - screenshell.pitch = 384; - screenshell.cx1 = 0; - screenshell.cx2 = 383; - screenshell.cy1 = 0; - screenshell.cy2 = 255; - } - break; - } } void OSDCLASS::clear() { - memset(screen, 0, sizeof(screen)); needUpdate=false; } @@ -181,7 +135,8 @@ void OSDCLASS::update() { for (int i=0; i < lastLineText; i++) { - render51.PrintString(1,lineText_x,lineText_y+(i*16),lineColor[i],lineText[i],&screenshell); + aggDraw.hud->lineColor(lineColor[i]); + aggDraw.hud->renderTextDropshadowed(lineText_x,lineText_y+(i*16),lineText[i]); } } else @@ -189,17 +144,6 @@ void OSDCLASS::update() if (!needUpdate) return; } } - - u16 *dst = (u16*)GPU_screen; - - if (mode!=255) - dst+=offset*512; - - for (int i=0; i<256*192*2; i++) - { - if(screen[i]&0x8000) - T2WriteWord((u8*)dst,(i << 1), screen[i] ); - } } void OSDCLASS::setListCoord(u16 x, u16 y) @@ -210,7 +154,7 @@ void OSDCLASS::setListCoord(u16 x, u16 y) void OSDCLASS::setLineColor(u8 r=255, u8 b=255, u8 g=255) { - lineText_color = render51.MakeColor(r, g, b); + lineText_color = AggColor(r,g,b); } void OSDCLASS::addLine(const char *fmt, ...) @@ -249,19 +193,17 @@ void OSDCLASS::addFixed(u16 x, u16 y, const char *fmt, ...) char msg[1024]; va_start(list,fmt); -#if defined(_MSC_VER) || defined(__INTEL_COMPILER) - _vsnprintf(msg,1023,fmt,list); -#else - vsnprintf(msg,1023,fmt,list); -#endif + vsnprintf(msg,1023,fmt,list); va_end(list); - render51.PrintString(1,x,y,render51.MakeColor(255,255,255),msg,&screenshell); + aggDraw.hud->lineColor(255,255,255); + aggDraw.hud->renderTextDropshadowed(x,y,msg); needUpdate = true; } void OSDCLASS::border(bool enabled) { - render51.setTextBoxBorder(enabled); + //render51.setTextBoxBorder(enabled); } + diff --git a/desmume/src/GPU_osd.h b/desmume/src/GPU_osd.h index 84e7d7ec5..f92acce17 100644 --- a/desmume/src/GPU_osd.h +++ b/desmume/src/GPU_osd.h @@ -28,13 +28,14 @@ #include #include "types.h" +#include "aggdraw.h" + #define OSD_MAX_LINES 4 #define OSD_TIMER_SECS 2 class OSDCLASS { private: - u16 screen[256*192*2]; u64 offset; u8 mode; @@ -42,11 +43,11 @@ private: u16 lineText_x; u16 lineText_y; - u32 lineText_color; + AggColor lineText_color; u8 lastLineText; char *lineText[OSD_MAX_LINES+1]; time_t lineTimer[OSD_MAX_LINES+1]; - u32 lineColor[OSD_MAX_LINES+1]; + AggColor lineColor[OSD_MAX_LINES+1]; bool needUpdate; diff --git a/desmume/src/Makefile.am b/desmume/src/Makefile.am index 43ae81305..8e9d3da7c 100644 --- a/desmume/src/Makefile.am +++ b/desmume/src/Makefile.am @@ -33,8 +33,6 @@ libdesmume_a_SOURCES = \ rtc.cpp rtc.h \ saves.cpp saves.h \ SPU.cpp SPU.h \ - softrender.cpp softrender.h softrender_config.h \ - softrender_v3sysfont.h softrender_desmumefont.h \ matrix.cpp matrix.h \ gfx3d.cpp gfx3d.h \ texcache.cpp texcache.h \ @@ -50,7 +48,8 @@ libdesmume_a_SOURCES = \ addons/compactFlash.cpp addons/gbagame.cpp addons/none.cpp addons/rumblepak.cpp addons/guitarGrip.cpp fs.h \ cheatSystem.cpp cheatSystem.h \ texcache.cpp texcache.h rasterize.cpp rasterize.h \ - version.h + version.h \ + aggdraw.cpp if HAVE_GLIB libdesmume_a_SOURCES += commandline.h commandline.cpp endif @@ -60,7 +59,7 @@ else libdesmume_a_SOURCES += mic.cpp endif if HAVE_LIBAGG -libdesmume_a_SOURCES += aggdraw.cpp + endif if HAVE_LUA libdesmume_a_SOURCES += lua-engine.cpp diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index 2ac9c0fd7..d2ace4b0e 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -1143,7 +1143,7 @@ int NDS_WritePNG(const char *fname) int x, y; int width=256; int height=192*2; - u16 * bmp = (u16 *)GPU_tempScreen; + u16 * bmp = (u16 *)GPU_screen; FILE *pp=NULL; uint8 *compmem = NULL; uLongf compmemsize = (uLongf)( (height * (width + 1) * 3 * 1.001 + 1) + 12 ); @@ -1269,7 +1269,7 @@ int NDS_WriteBMP(const char *filename) bmpimgheader_struct imageheader; FILE *file; int i,j; - u16 * bmp = (u16 *)GPU_tempScreen; + u16 * bmp = (u16 *)GPU_screen; size_t elems_written = 0; memset(&fileheader, 0, sizeof(fileheader)); diff --git a/desmume/src/agg2d.h b/desmume/src/agg2d.h index 13864bf71..758fc8535 100644 --- a/desmume/src/agg2d.h +++ b/desmume/src/agg2d.h @@ -23,11 +23,14 @@ #ifndef AGG2D_INCLUDED #define AGG2D_INCLUDED -// With this define uncommented you can use FreeType font engine +//we're not using vector fonts right now. +//#define AGG2D_USE_VECTORFONTS +#ifdef AGG2D_USE_VECTORFONTS #if defined(UNDER_CE) || not defined(WIN32) #define AGG2D_USE_FREETYPE #endif +#endif #pragma warning(disable: 4786) @@ -45,7 +48,6 @@ #include "agg_renderer_scanline.h" #include "agg_span_gradient.h" #include "agg_span_image_filter_rgba.h" -//#include "agg_span_image_resample_rgba.h" //+ JME #include "agg_span_allocator.h" @@ -58,6 +60,14 @@ #include "agg_rounded_rect.h" #include "agg_font_cache_manager.h" +#include "agg_glyph_raster_bin.h" +#include "agg_renderer_raster_text.h" +#include "agg_embedded_raster_fonts.h" + + +#include + +#ifdef AGG2D_USE_VECTORFONTS #ifdef AGG2D_USE_FREETYPE #ifndef WIN32 #include "agg_font_freetype.h" @@ -67,6 +77,7 @@ #else #include "../font_win32_tt/agg_font_win32_tt.h" #endif +#endif #include "agg_pixfmt_rgba.h" //+ JME @@ -81,7 +92,7 @@ template -class PixFormatSet +class PixFormatSetDeclaration { public: typedef Main PixFormat; @@ -170,17 +181,18 @@ public: } int width() const { return renBuf.width(); } int height() const { return renBuf.height(); } - AGG2D_TEMPLATE void premultiply() -{ - PixFormat pixf(renBuf); - pixf.premultiply(); -} + + AGG2D_TEMPLATE void premultiply() + { + typename PixFormatSet::PixFormat pixf(renBuf); + pixf.premultiply(); + } AGG2D_TEMPLATE void demultiply() -{ - PixFormat pixf(renBuf); - pixf.demultiply(); -} + { + typename PixFormatSet::PixFormat pixf(renBuf); + pixf.demultiply(); + } }; @@ -249,6 +261,7 @@ public: }; +template class Agg2DRenderer; template class Agg2D : public Agg2DBase { @@ -290,20 +303,22 @@ public: typedef agg::span_gradient, agg::gradient_x, GradientArray> LinearGradientSpan; typedef agg::span_gradient, agg::gradient_circle, GradientArray> RadialGradientSpan; +#ifdef AGG2D_USE_VECTORFONTS #ifdef AGG2D_USE_FREETYPE typedef agg::font_engine_freetype_int32 FontEngine; #else typedef agg::font_engine_win32_tt_int32 FontEngine; #endif + typedef agg::font_cache_manager FontCacheManager; typedef FontCacheManager::gray8_adaptor_type FontRasterizer; typedef FontCacheManager::gray8_scanline_type FontScanline; +#endif typedef agg::conv_curve ConvCurve; typedef agg::conv_stroke ConvStroke; typedef agg::conv_transform PathTransform; typedef agg::conv_transform StrokeTransform; - enum Gradient { Solid, @@ -312,7 +327,7 @@ public: }; public: - AGG2D_TEMPLATE_WITH_IMAGE friend class Agg2DRenderer; + template friend class Agg2DRenderer; typedef ColorType Color; @@ -414,6 +429,7 @@ public: double antiAliasGamma() const; void font(const agg::int8u* font) { m_font = font; } + const agg::int8u* font() { return m_font; } void fillColor(Color c); void fillColor(unsigned r, unsigned g, unsigned b, unsigned a = 255); @@ -493,6 +509,7 @@ public: // Text //----------------------- + #ifdef AGG2D_USE_VECTORFONTS void flipText(bool flip); void font(const char* fileName, double height, bool bold = false, @@ -501,6 +518,7 @@ public: double angle = 0.0); double fontHeight() const; double fontAscent() const; + void textAlignment(TextAlignment alignX, TextAlignment alignY); bool textHints() const; void textHints(bool hints); @@ -511,7 +529,7 @@ public: double textWidth(const char* str); void text(double x, double y, const char* str, bool roundOff=false, double dx=0.0, double dy=0.0); - + #endif // Path commands //----------------------- @@ -592,7 +610,7 @@ public: lineTo(dstX1, dstY2); closePolygon(); double parallelogram[6] = { dstX1, dstY1, dstX2, dstY1, dstX2, dstY2 }; - renderImage (img, imgX1, imgY1, imgX2, imgY2, parallelogram); + renderImage (img, imgX1, imgY1, imgX2, imgY2, parallelogram); } AGG2D_IMAGE_TEMPLATE void transformImage(const TIMAGE& img, @@ -693,49 +711,47 @@ public: void renderText(double dstX, double dstY, const std::string& str) -{ - worldToScreen(dstX, dstY); - PixFormat pixF(m_rbuf); - //Rect r(imgX1, imgY1, imgX2, imgY2); - - typedef agg::glyph_raster_bin glyph_gen; - glyph_gen glyph(0); - - if(m_blendMode == BlendAlpha) { - typedef agg::renderer_base ren_base; - agg::renderer_raster_htext_solid rt(m_renBasePre,glyph); - rt.color(m_lineColor); - glyph.font(m_font); - rt.render_text(dstX, dstY, str.c_str(), true); //flipy - } - else - { - typedef agg::renderer_base ren_base; - agg::renderer_raster_htext_solid rt(m_renBaseCompPre,glyph); - rt.color(m_lineColor); - glyph.font(m_font); - rt.render_text(dstX, dstY, str.c_str(), true); //flipy - } + worldToScreen(dstX, dstY); + PixFormat pixF(m_rbuf); + //Rect r(imgX1, imgY1, imgX2, imgY2); + typedef agg::glyph_raster_bin glyph_gen; + glyph_gen glyph(0); -} + if(m_blendMode == BlendAlpha) + { + typedef agg::renderer_base ren_base; + agg::renderer_raster_htext_solid rt(m_renBasePre,glyph); + rt.color(m_lineColor); + glyph.font(m_font); + rt.render_text(dstX, dstY, str.c_str(), true); //flipy + } + else + { + typedef agg::renderer_base ren_base; + agg::renderer_raster_htext_solid rt(m_renBaseCompPre,glyph); + rt.color(m_lineColor); + glyph.font(m_font); + rt.render_text(dstX, dstY, str.c_str(), true); //flipy + } + } AGG2D_IMAGE_TEMPLATE void blendImage(TIMAGE& img, double dstX, double dstY, unsigned alpha=255) -{ - worldToScreen(dstX, dstY); - PixFormat pixF(img.renBuf); - m_renBasePre.blend_from(pixF, 0, int(dstX), int(dstY), alpha); - if(m_blendMode == BlendAlpha) - { - m_renBasePre.blend_from(pixF, 0, int(dstX), int(dstY), alpha); - } - else - { - m_renBaseCompPre.blend_from(pixF, 0, int(dstX), int(dstY), alpha); - } -} + { + worldToScreen(dstX, dstY); + PixFormat pixF(img.renBuf); + m_renBasePre.blend_from(pixF, 0, int(dstX), int(dstY), alpha); + if(m_blendMode == BlendAlpha) + { + m_renBasePre.blend_from(pixF, 0, int(dstX), int(dstY), alpha); + } + else + { + m_renBaseCompPre.blend_from(pixF, 0, int(dstX), int(dstY), alpha); + } + } @@ -777,38 +793,40 @@ public: private: void render(bool fillColor); +#ifdef AGG2D_USE_VECTORFONTS #if !defined( UNDER_CE ) void render(FontRasterizer& ras, FontScanline& sl); +#endif #endif void addLine(double x1, double y1, double x2, double y2); void updateRasterizerGamma(); AGG2D_IMAGE_TEMPLATE void renderImage(const TIMAGE& img, int x1, int y1, int x2, int y2, const double* parl) -{ - agg::trans_affine mtx((double)x1, - (double)y1, - (double)x2, - (double)y2, - parl); - mtx *= m_transform; - mtx.invert(); + { + agg::trans_affine mtx((double)x1, + (double)y1, + (double)x2, + (double)y2, + parl); + mtx *= m_transform; + mtx.invert(); - m_rasterizer.reset(); - m_rasterizer.add_path(m_pathTransform); + m_rasterizer.reset(); + m_rasterizer.add_path(m_pathTransform); - typedef agg::span_interpolator_linear Interpolator; - Interpolator interpolator(mtx); + typedef agg::span_interpolator_linear Interpolator; + Interpolator interpolator(mtx); - if(m_blendMode == BlendAlpha) - { - // JME audit - - Agg2DRenderer::renderImage(*this, img, m_renBasePre, interpolator); - } - else - { - Agg2DRenderer::renderImage(*this, img, m_renBaseCompPre, interpolator); - } -} + if(m_blendMode == BlendAlpha) + { + // JME audit - + Agg2DRenderer::renderImage(*this, img, m_renBasePre, interpolator); + } + else + { + Agg2DRenderer::renderImage(*this, img, m_renBaseCompPre, interpolator); + } + } void updateTransformations(); @@ -894,12 +912,13 @@ private: PathTransform m_pathTransform; StrokeTransform m_strokeTransform; +#ifdef AGG2D_USE_VECTORFONTS #ifndef AGG2D_USE_FREETYPE HDC m_fontDC; #endif FontEngine m_fontEngine; FontCacheManager m_fontCacheManager; - +#endif }; diff --git a/desmume/src/agg2d.inl b/desmume/src/agg2d.inl index 02b1c77ea..d4b7c51bc 100644 --- a/desmume/src/agg2d.inl +++ b/desmume/src/agg2d.inl @@ -19,7 +19,6 @@ // 11 Jul 2009 - significant refactors for introduction to desmume // //---------------------------------------------------------------------------- -#include "GPU.h" #include "agg2d.h" static const double g_approxScale = 2.0; @@ -39,9 +38,11 @@ static const double g_approxScale = 2.0; AGG2D_TEMPLATE inline TAGG2D::~Agg2D() { +#ifdef AGG2D_USE_VECTORFONTS #ifndef AGG2D_USE_FREETYPE ::ReleaseDC(0, m_fontDC); #endif +#endif } AGG2D_TEMPLATE inline TAGG2D::Agg2D() : @@ -97,7 +98,8 @@ AGG2D_TEMPLATE inline TAGG2D::Agg2D() : m_fontDescent(0.0), m_fontCacheType(RasterFontCache), - m_imageFilter(Bilinear), + m_imageFilter(Bilinear), //less quality more speed + //m_imageFilter(NoFilter), m_imageResample(NoResample), m_imageFilterLut(agg::image_filter_bilinear(), true), @@ -120,16 +122,17 @@ AGG2D_TEMPLATE inline TAGG2D::Agg2D() : m_convStroke(m_convCurve), m_pathTransform(m_convCurve, m_transform), - m_strokeTransform(m_convStroke, m_transform), + m_strokeTransform(m_convStroke, m_transform) +#ifdef AGG2D_USE_VECTORFONTS #ifdef AGG2D_USE_FREETYPE - m_fontEngine(), + , m_fontEngine(), #else m_fontDC(::GetDC(0)), m_fontEngine(m_fontDC), #endif - m_fontCacheManager(m_fontEngine) +#endif { lineCap(m_lineCap); lineJoin(m_lineJoin); @@ -241,16 +244,21 @@ AGG2D_TEMPLATE void Agg2D AGG2D_TEMPLATE_ARG ::attach(unsigned char* buf, unsign m_renBasePre.reset_clipping(true); m_renBaseCompPre.reset_clipping(true); + //why is all this reset here???? seems silly. + resetTransformations(); lineWidth(1.0), lineColor(0,0,0); fillColor(255,255,255); - textAlignment(AlignLeft, AlignBottom); clipBox(0, 0, width, height); lineCap(CAP_ROUND); lineJoin(JOIN_ROUND); + #ifdef AGG2D_USE_VECTORFONTS + textAlignment(AlignLeft, AlignBottom); flipText(false); - imageFilter(Bilinear); + #endif + imageFilter(Bilinear); //less quality more speed + //imageFilter(NoFilter); imageResample(NoResample); m_masterAlpha = 1.0; m_antiAliasGamma = 1.0; @@ -1055,6 +1063,8 @@ AGG2D_TEMPLATE void TAGG2D::polyline(double* xy, int numPoints) //------------------------------------------------------------------------ + +#ifdef AGG2D_USE_VECTORFONTS AGG2D_TEMPLATE void TAGG2D::flipText(bool flip) { m_fontEngine.flip_y(flip); @@ -1118,6 +1128,7 @@ AGG2D_TEMPLATE void TAGG2D::textAlignment(TextAlignment alignX, TextAlignment al } //------------------------------------------------------------------------ + AGG2D_TEMPLATE double TAGG2D::textWidth(const char* str, unsigned int len) { #if defined( UNDER_CE ) @@ -1359,7 +1370,7 @@ AGG2D_TEMPLATE void TAGG2D::text(double x, double y, const wchar_t* str, unsigne } } - +#endif //------------------------------------------------------------------------ AGG2D_TEMPLATE void TAGG2D::resetPath() { m_path.remove_all(); } @@ -1643,18 +1654,18 @@ public: //- typedef agg::renderer_scanline_aa RendererLinearGradient; typedef agg::renderer_scanline_aa RendererLinearGradient; + typename TAGG2D::LinearGradientSpan> RendererLinearGradient; //- typedef agg::renderer_scanline_aa RendererRadialGradient; typedef agg::renderer_scanline_aa RendererRadialGradient; + typename TAGG2D::RadialGradientSpan> RendererRadialGradient; if ((fillColor && gr.m_fillGradientFlag == TAGG2D::Linear) || (!fillColor && gr.m_lineGradientFlag == TAGG2D::Linear)) { if (fillColor) { - TAGG2D::LinearGradientSpan span(/*gr.m_allocator, */ + typename TAGG2D::LinearGradientSpan span(/*gr.m_allocator, */ gr.m_fillGradientInterpolator, gr.m_linearGradientFunction, gr.m_fillGradient, @@ -1666,7 +1677,7 @@ public: } else { - TAGG2D::LinearGradientSpan span(/*gr.m_allocator,*/ + typename TAGG2D::LinearGradientSpan span(/*gr.m_allocator,*/ gr.m_lineGradientInterpolator, gr.m_linearGradientFunction, gr.m_lineGradient, @@ -1684,7 +1695,7 @@ public: { if (fillColor) { - TAGG2D::RadialGradientSpan span(/*gr.m_allocator, */ + typename TAGG2D::RadialGradientSpan span(/*gr.m_allocator, */ gr.m_fillGradientInterpolator, gr.m_radialGradientFunction, gr.m_fillGradient, @@ -1696,7 +1707,7 @@ public: } else { - TAGG2D::RadialGradientSpan span(/*gr.m_allocator,*/ + typename TAGG2D::RadialGradientSpan span(/*gr.m_allocator,*/ gr.m_lineGradientInterpolator, gr.m_radialGradientFunction, gr.m_lineGradient, @@ -1727,20 +1738,20 @@ public: void convert(Color* span, int x, int y, unsigned len) const { unsigned l2; - TAGG2D::Color* s2; + typename TAGG2D::Color* s2; if(m_mode != TAGG2D::BlendDst) { l2 = len; s2 = span; - typedef agg::comp_op_adaptor_clip_to_dst_rgba_pre OpType; + typedef agg::comp_op_adaptor_clip_to_dst_rgba_pre OpType; do { OpType::blend_pix(m_mode, - (TAGG2D::Color::value_type*)s2, + (typename TAGG2D::Color::value_type*)s2, m_color.r, m_color.g, m_color.b, - TAGG2D::Color::base_mask, + TAGG2D::Color::base_mask, agg::cover_full); ++s2; } @@ -1777,12 +1788,12 @@ public: { // JME typedef agg::span_allocator span_allocator_type; - typedef agg::renderer_scanline_aa RendererLinearGradient; - typedef agg::renderer_scanline_aa RendererRadialGradient; + typedef agg::renderer_scanline_aa RendererLinearGradient; + typedef agg::renderer_scanline_aa RendererRadialGradient; if(gr.m_fillGradientFlag == TAGG2D::Linear) { - TAGG2D::LinearGradientSpan span( + typename TAGG2D::LinearGradientSpan span( gr.m_fillGradientInterpolator, gr.m_linearGradientFunction, gr.m_fillGradient, @@ -1795,7 +1806,7 @@ public: { if(gr.m_fillGradientFlag == TAGG2D::Radial) { - TAGG2D::RadialGradientSpan span( + typename TAGG2D::RadialGradientSpan span( gr.m_fillGradientInterpolator, gr.m_radialGradientFunction, gr.m_fillGradient, @@ -1823,20 +1834,23 @@ public: //! JME - have not quite figured which part of this is not const-correct // hence the cast. Image& imgc = const_cast(img); - ImagePixFormatSet::PixFormat img_pixf(imgc.renBuf); - typedef agg::image_accessor_clone img_source_type; + typename ImagePixFormatSet::PixFormat img_pixf(imgc.renBuf); + typedef agg::image_accessor_clone img_source_type; img_source_type source(img_pixf); SpanConvImageBlend blend(gr.m_imageBlendMode, gr.m_imageBlendColor); if(gr.m_imageFilter == TAGG2D::NoFilter) { + //modifications less quality more speed + typedef agg::span_image_filter_rgba_nn SpanGenType; - typedef agg::span_converter SpanConvType; - typedef agg::renderer_scanline_aa RendererType; + //typedef agg::span_converter SpanConvType; + typedef agg::renderer_scanline_aa RendererType; + //typedef agg::renderer_scanline_bin RendererType; SpanGenType sg(source,interpolator); - SpanConvType sc(sg, blend); + //SpanConvType sc(sg, blend); RendererType ri(renBase,gr.m_allocator,sg); agg::render_scanlines(gr.m_rasterizer, gr.m_scanline, ri); } @@ -1857,7 +1871,7 @@ public: { typedef agg::span_image_resample_rgba_affine SpanGenType; typedef agg::span_converter SpanConvType; - typedef agg::renderer_scanline_aa RendererType; + typedef agg::renderer_scanline_aa RendererType; SpanGenType sg(source,interpolator,gr.m_imageFilterLut); SpanConvType sc(sg, blend); @@ -1871,7 +1885,7 @@ public: { typedef agg::span_image_filter_rgba_bilinear SpanGenType; typedef agg::span_converter SpanConvType; - typedef agg::renderer_scanline_aa RendererType; + typedef agg::renderer_scanline_aa RendererType; SpanGenType sg(source,interpolator); SpanConvType sc(sg, blend); @@ -1884,7 +1898,7 @@ public: { typedef agg::span_image_filter_rgba_2x2 SpanGenType; typedef agg::span_converter SpanConvType; - typedef agg::renderer_scanline_aa RendererType; + typedef agg::renderer_scanline_aa RendererType; SpanGenType sg(source,interpolator,gr.m_imageFilterLut); SpanConvType sc(sg, blend); @@ -1895,7 +1909,7 @@ public: { typedef agg::span_image_filter_rgba SpanGenType; typedef agg::span_converter SpanConvType; - typedef agg::renderer_scanline_aa RendererType; + typedef agg::renderer_scanline_aa RendererType; SpanGenType sg(source,interpolator,gr.m_imageFilterLut); SpanConvType sc(sg, blend); RendererType ri(renBase,gr.m_allocator,sg); @@ -1920,6 +1934,8 @@ AGG2D_TEMPLATE void TAGG2D::render(bool fillColor) TAGG2DRENDERER::render(*this, m_renBaseComp, m_renSolidComp, fillColor); } } + +#ifdef AGG2D_USE_VECTORFONTS #if !defined( UNDER_CE ) //------------------------------------------------------------------------ @@ -1936,10 +1952,10 @@ AGG2D_TEMPLATE void TAGG2D::render(FontRasterizer& ras, FontScanline& sl) } #endif - +#endif //------------------------------------------------------------------------ -AGG2D_TEMPLATE struct Agg2DRasterizerGamma +struct Agg2DRasterizerGamma { Agg2DRasterizerGamma(double alpha, double gamma) : diff --git a/desmume/src/aggdraw.cpp b/desmume/src/aggdraw.cpp index c417e8b40..41efd71c9 100644 --- a/desmume/src/aggdraw.cpp +++ b/desmume/src/aggdraw.cpp @@ -63,6 +63,53 @@ #include "agg_span_allocator.h" +namespace agg +{ + //this custom blender does more correct blending math than the default + //which is necessary or else drawing transparent pixels on (31,31,31) will yield (30,30,30) + struct my_blender_rgb555_pre + { + typedef rgba8 color_type; + typedef color_type::value_type value_type; + typedef color_type::calc_type calc_type; + typedef int16u pixel_type; + + static AGG_INLINE void blend_pix(pixel_type* p, + unsigned cr, unsigned cg, unsigned cb, + unsigned alpha, + unsigned cover) + { + //not sure whether this is right... + alpha = color_type::base_mask - alpha; + pixel_type rgb = *p; + calc_type r = (rgb >> 10) & 31; + calc_type g = (rgb >> 5) & 31; + calc_type b = (rgb ) & 31; + r = ((r+1)*(alpha+1) + (cr)*(cover)-1)>>8; + g = ((g+1)*(alpha+1) + (cg)*(cover)-1)>>8; + b = ((b+1)*(alpha+1) + (cb)*(cover)-1)>>8; + *p = (r<<10)|(g<<5)|b; + } + + static AGG_INLINE pixel_type make_pix(unsigned r, unsigned g, unsigned b) + { + return (pixel_type)(((r & 0xF8) << 7) | + ((g & 0xF8) << 2) | + (b >> 3) | 0x8000); + } + + static AGG_INLINE color_type make_color(pixel_type p) + { + return color_type((p >> 7) & 0xF8, + (p >> 2) & 0xF8, + (p << 3) & 0xF8); + } + }; + + typedef pixfmt_alpha_blend_rgb_packed my_pixfmt_rgb555_pre; //----pixfmt_rgb555_pre +} + + typedef std::map TAgg_Font_Table; static TAgg_Font_Table font_table; @@ -125,8 +172,9 @@ static void Agg_init_fonts() AggDraw_Desmume aggDraw; -typedef AggDrawTargetImplementation > T_AGG_RGB555; -typedef AggDrawTargetImplementation > T_AGG_RGBA; + +typedef AggDrawTargetImplementation > T_AGG_RGB555; +typedef AggDrawTargetImplementation > T_AGG_RGBA; T_AGG_RGB555 agg_targetScreen(GPU_screen, 256, 384, 512); @@ -138,7 +186,7 @@ T_AGG_RGBA agg_targetHud((u8*)hudBuffer, 256, 384, 1024); static AggDrawTarget* targets[] = { &agg_targetScreen, - &agg_targetHud, + &agg_targetScreen, //THATS RIGHT! for now, hud maps to screen &agg_targetLua, }; @@ -146,6 +194,11 @@ void Agg_init() { Agg_init_fonts(); aggDraw.target = targets[0]; + aggDraw.screen = targets[0]; + aggDraw.hud = targets[1]; + aggDraw.lua = targets[2]; + + aggDraw.hud->setFont("verdana18_bold"); } void AggDraw_Desmume::setTarget(AggTarget newTarget) @@ -153,120 +206,123 @@ void AggDraw_Desmume::setTarget(AggTarget newTarget) target = targets[newTarget]; } -void AggDraw_Desmume::composite(void* dest) -{ - T_AGG_RGBA target((u8*)dest, 256, 384, 1024); - - //if lua is nonempty, blend it - if(!agg_targetLua.empty) - { - T_AGG_RGBA::MyImage luaImage(agg_targetLua.buf()); - target.transformImage(luaImage, 0,0,256-1,384-1); - } - - //if hud is nonempty, blend it - if(!agg_targetHud.empty) - { - T_AGG_RGBA::MyImage hudImage(agg_targetHud.buf()); - target.transformImage(hudImage, 0,0,256-1,384-1); - } -} +//this code would do compositing.. and maybe it will.. one day. but not for now. +//void AggDraw_Desmume::composite(void* dest) +//{ +// T_AGG_RGB555 target((u8*)dest, 256, 384, 512); +// +// ctr = 0; +// +// //if lua is nonempty, blend it +// if(!agg_targetLua.empty) +// { +// T_AGG_RGBA::MyImage luaImage(agg_targetLua.buf()); +// target.transformImage(luaImage, 0,40,256-1,384-1); +// } +// +// int zzz=9; +// +// //if hud is nonempty, blend it +// if(!agg_targetHud.empty) +// { +// T_AGG_RGBA::MyImage hudImage(agg_targetHud.buf()); +// target.transformImage(hudImage, 0,0,256-1,384-1); +// } +//} //temporary, just for testing the lib -void AGGDraw() { - - aggDraw.setTarget(AggTarget_Hud); - - aggDraw.target->clear(); - m_graphics.clipBox(50, 50, rbuf_window().width() - 50, rbuf_window().height() - 50); - - aggDraw.target->lineColor(0, 255, 0, 128); - aggDraw.target->fillColor(0, 255, 0, 128); - //aggDraw.target->noFill(); - aggDraw.target->lineWidth(1.0); - aggDraw.target->roundedRect(10,10,256-10,192-10,4); - - aggDraw.target->setFont("verdana18_bold"); - aggDraw.target->renderText(60,60, "testing testing testing"); - - // Gradients (Aqua Buttons) - //======================================= -// m_graphics.font("Verdana", 20.0, false, false, TAGG2D::VectorFontCache); - double xb1 = 10; - double yb1 = 80; - double xb2 = xb1 + 150; - double yb2 = yb1 + 36; - - aggDraw.target->fillColor(0,50,180,180); - aggDraw.target->lineColor(0,0,80, 255); - aggDraw.target->lineWidth(1.0); - aggDraw.target->roundedRect(xb1, yb1, xb2, yb2, 12, 18); - - aggDraw.target->lineColor(0,0,0,0); - aggDraw.target->fillLinearGradient(xb1, yb1, xb1, yb1+30, - agg::rgba8(100,200,255,255), - agg::rgba8(255,255,255,0)); - aggDraw.target->roundedRect(xb1+3, yb1+2.5, xb2-3, yb1+30, 9, 18, 1, 1); - - aggDraw.target->fillColor(0,0,50, 200); - aggDraw.target->noLine(); -/* m_graphics.textAlignment(TAGG2D::AlignCenter, TAGG2D::AlignCenter); - m_graphics.text((xb1 + xb2) / 2.0, (yb1 + yb2) / 2.0, "Aqua Button", true, 0.0, 0.0); -*/ - aggDraw.target->fillLinearGradient(xb1, yb2-20, xb1, yb2-3, - agg::rgba8(0, 0, 255,0), - agg::rgba8(100,255,255,255)); - aggDraw.target->roundedRect(xb1+3, yb2-20, xb2-3, yb2-2, 1, 1, 9, 18); - - // Basic Shapes -- Ellipse - //=========================================== - aggDraw.target->lineWidth(3.5); - aggDraw.target->lineColor(20, 80, 80); - aggDraw.target->fillColor(200, 255, 80, 200); - aggDraw.target->ellipse(150, 200, 50, 90); - - // Paths - //=========================================== - aggDraw.target->resetPath(); - aggDraw.target->fillColor(255, 0, 0, 100); - aggDraw.target->lineColor(0, 0, 255, 100); - aggDraw.target->lineWidth(2); - aggDraw.target->moveTo(300/2, 200/2); - aggDraw.target->horLineRel(-150/2); - aggDraw.target->arcRel(150/2, 150/2, 0, 1, 0, 150/2, -150/2); - aggDraw.target->closePolygon(); - aggDraw.target->drawPath(); - - aggDraw.target->resetPath(); - aggDraw.target->fillColor(255, 255, 0, 100); - aggDraw.target->lineColor(0, 0, 255, 100); - aggDraw.target->lineWidth(2); - aggDraw.target->moveTo(275/2, 175/2); - aggDraw.target->verLineRel(-150/2); - aggDraw.target->arcRel(150/2, 150/2, 0, 0, 0, -150/2, 150/2); - aggDraw.target->closePolygon(); - aggDraw.target->drawPath(); - - aggDraw.target->resetPath(); - aggDraw.target->noFill(); - aggDraw.target->lineColor(127, 0, 0); - aggDraw.target->lineWidth(5); - aggDraw.target->moveTo(600/2, 350/2); - aggDraw.target->lineRel(50/2, -25/2); - aggDraw.target->arcRel(25/2, 25/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2); - aggDraw.target->lineRel(50/2, -25/2); - aggDraw.target->arcRel(25/2, 50/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2); - aggDraw.target->lineRel(50/2, -25/2); - aggDraw.target->arcRel(25/2, 75/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2); - aggDraw.target->lineRel(50, -25); - aggDraw.target->arcRel(25/2, 100/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2); - aggDraw.target->lineRel(50/2, -25/2); - aggDraw.target->drawPath(); - - aggDraw.target->line(5, 6, 40, 70); - aggDraw.target->star(60, 70, 4, 5, 4, 6); -} - +//void AGGDraw() { +// +// aggDraw.setTarget(AggTarget_Lua); +// +// aggDraw.target->clear(); +// +// aggDraw.target->clipBox(0,0,255,383); +// +// aggDraw.target->lineColor(0, 255, 0, 128); +// aggDraw.target->fillColor(0, 255, 0, 128); +// //aggDraw.target->noFill(); +// aggDraw.target->lineWidth(1.0); +// aggDraw.target->roundedRect(10,30,256-10,192-10,4); +// +// aggDraw.target->setFont("verdana18_bold"); +// aggDraw.target->renderText(60,60, "testing testing testing"); +// +// // Gradients (Aqua Buttons) +// //======================================= +//// m_graphics.font("Verdana", 20.0, false, false, TAGG2D::VectorFontCache); +// double xb1 = 10; +// double yb1 = 80; +// double xb2 = xb1 + 150; +// double yb2 = yb1 + 36; +// +// aggDraw.target->fillColor(0,50,180,180); +// aggDraw.target->lineColor(0,0,80, 255); +// aggDraw.target->lineWidth(1.0); +// aggDraw.target->roundedRect(xb1, yb1, xb2, yb2, 12, 18); +// +// aggDraw.target->lineColor(0,0,0,0); +// aggDraw.target->fillLinearGradient(xb1, yb1, xb1, yb1+30, +// agg::rgba8(100,200,255,255), +// agg::rgba8(255,255,255,0)); +// aggDraw.target->roundedRect(xb1+3, yb1+2.5, xb2-3, yb1+30, 9, 18, 1, 1); +// +// aggDraw.target->fillColor(0,0,50, 200); +// aggDraw.target->noLine(); +///* m_graphics.textAlignment(TAGG2D::AlignCenter, TAGG2D::AlignCenter); +// m_graphics.text((xb1 + xb2) / 2.0, (yb1 + yb2) / 2.0, "Aqua Button", true, 0.0, 0.0); +//*/ +// aggDraw.target->fillLinearGradient(xb1, yb2-20, xb1, yb2-3, +// agg::rgba8(0, 0, 255,0), +// agg::rgba8(100,255,255,255)); +// aggDraw.target->roundedRect(xb1+3, yb2-20, xb2-3, yb2-2, 1, 1, 9, 18); +// +// // Basic Shapes -- Ellipse +// //=========================================== +// aggDraw.target->lineWidth(3.5); +// aggDraw.target->lineColor(20, 80, 80); +// aggDraw.target->fillColor(200, 255, 80, 200); +// aggDraw.target->ellipse(150, 200, 50, 90); +// +// // Paths +// //=========================================== +// aggDraw.target->resetPath(); +// aggDraw.target->fillColor(255, 0, 0, 100); +// aggDraw.target->lineColor(0, 0, 255, 100); +// aggDraw.target->lineWidth(2); +// aggDraw.target->moveTo(300/2, 200/2); +// aggDraw.target->horLineRel(-150/2); +// aggDraw.target->arcRel(150/2, 150/2, 0, 1, 0, 150/2, -150/2); +// aggDraw.target->closePolygon(); +// aggDraw.target->drawPath(); +// +// aggDraw.target->resetPath(); +// aggDraw.target->fillColor(255, 255, 0, 100); +// aggDraw.target->lineColor(0, 0, 255, 100); +// aggDraw.target->lineWidth(2); +// aggDraw.target->moveTo(275/2, 175/2); +// aggDraw.target->verLineRel(-150/2); +// aggDraw.target->arcRel(150/2, 150/2, 0, 0, 0, -150/2, 150/2); +// aggDraw.target->closePolygon(); +// aggDraw.target->drawPath(); +// +// aggDraw.target->resetPath(); +// aggDraw.target->noFill(); +// aggDraw.target->lineColor(127, 0, 0); +// aggDraw.target->lineWidth(5); +// aggDraw.target->moveTo(600/2, 350/2); +// aggDraw.target->lineRel(50/2, -25/2); +// aggDraw.target->arcRel(25/2, 25/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2); +// aggDraw.target->lineRel(50/2, -25/2); +// aggDraw.target->arcRel(25/2, 50/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2); +// aggDraw.target->lineRel(50/2, -25/2); +// aggDraw.target->arcRel(25/2, 75/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2); +// aggDraw.target->lineRel(50, -25); +// aggDraw.target->arcRel(25/2, 100/2, aggDraw.target->deg2Rad(-30), 0, 1, 50/2, -25/2); +// aggDraw.target->lineRel(50/2, -25/2); +// aggDraw.target->drawPath(); +//} +// // @@ -598,4 +654,4 @@ void AGGDraw() { // m_graphics.ellipse(400, 500, 40, 40); // // } -// \ No newline at end of file +// diff --git a/desmume/src/aggdraw.h b/desmume/src/aggdraw.h index be0837af3..5bc4ff7ab 100644 --- a/desmume/src/aggdraw.h +++ b/desmume/src/aggdraw.h @@ -41,6 +41,8 @@ #include "agg2d.h" +typedef agg::rgba8 AggColor; + class AggDrawTarget { public: @@ -58,9 +60,15 @@ public: bool empty; virtual void clear() = 0; + + virtual void clipBox(double x1, double y1, double x2, double y2) = 0; + virtual Agg2DBase::RectD clipBox() const = 0; virtual void lineColor(unsigned r, unsigned g, unsigned b, unsigned a = 255) = 0; + virtual void lineColor(AggColor color) { lineColor(color.r,color.g,color.b,color.a); } + virtual AggColor lineColor() = 0; virtual void fillColor(unsigned r, unsigned g, unsigned b, unsigned a = 255) = 0; + virtual AggColor fillColor() = 0; virtual void noFill() = 0; virtual void noLine() = 0; virtual void lineWidth(double w) = 0; @@ -122,6 +130,22 @@ public: static const agg::int8u* lookupFont(const std::string& name); virtual void setFont(const std::string& name) = 0; virtual void renderText(double dstX, double dstY, const std::string& str) = 0; + virtual void renderTextDropshadowed(double dstX, double dstY, const std::string& str) + { + AggColor lineColorOld = lineColor(); + lineColor(255-lineColorOld.r,255-lineColorOld.g,255-lineColorOld.b); + renderText(dstX-1,dstY-1,str); + renderText(dstX,dstY-1,str); + renderText(dstX+1,dstY-1,str); + renderText(dstX-1,dstY,str); + renderText(dstX+1,dstY,str); + renderText(dstX-1,dstY+1,str); + renderText(dstX,dstY+1,str); + renderText(dstX+1,dstY+1,str); + lineColor(lineColorOld); + renderText(dstX,dstY,str); + } + // Auxiliary virtual double pi() { return agg::pi; } @@ -140,7 +164,7 @@ public: typedef Agg2D BASE; AggDrawTargetImplementation(agg::int8u* buf, int width, int height, int stride) { - attach(buf,width,height,stride); + BASE::attach(buf,width,height,stride); BASE::viewport(0, 0, width-1, height-1, 0, 0, width-1, height-1, TAGG2D::Anisotropic); } @@ -153,8 +177,14 @@ public: } } + virtual void clipBox(double x1, double y1, double x2, double y2) { BASE::clipBox(x1,y1,x2,y2); } + virtual Agg2DBase::RectD clipBox() const { return BASE::clipBox(); } + virtual void lineColor(unsigned r, unsigned g, unsigned b, unsigned a = 255) { BASE::lineColor(r,g,b,a); } + virtual AggColor lineColor() { return BASE::lineColor(); } virtual void fillColor(unsigned r, unsigned g, unsigned b, unsigned a = 255) { BASE::fillColor(r,g,b,a); } + virtual AggColor fillColor() { return BASE::fillColor(); } + virtual void noFill() { BASE::noFill(); } virtual void noLine() { BASE::noLine(); } virtual void lineWidth(double w) { BASE::lineWidth(w); } @@ -175,10 +205,16 @@ public: virtual void polygon(double* xy, int numPoints) {BASE::polygon(xy, numPoints);}; virtual void polyline(double* xy, int numPoints) {BASE::polyline(xy, numPoints);}; - virtual void fillLinearGradient(double x1, double y1, double x2, double y2, Color c1, Color c2, double profile=1.0) {BASE::fillLinearGradient(x1, y1, x2, y2, c1, c2, profile); } + virtual void fillLinearGradient(double x1, double y1, double x2, double y2, AggColor c1, AggColor c2, double profile=1.0) {BASE::fillLinearGradient(x1, y1, x2, y2, c1, c2, profile); } virtual void setFont(const std::string& name) { BASE::font(lookupFont(name)); } - virtual void renderText(double dstX, double dstY, const std::string& str) { dirty(); BASE::renderText(dstX, dstY, str); } + virtual void renderText(double dstX, double dstY, const std::string& str) { + dirty(); + int height = BASE::font()[0]; + int base = BASE::font()[1]; + int offset = height-base*2; + BASE::renderText(dstX, dstY + offset, str); + } // Path commands virtual void resetPath() {BASE::resetPath();}; @@ -209,10 +245,10 @@ public: virtual void cubicCurveTo(double xCtrl2, double yCtrl2, double xTo, double yTo) {BASE::cubicCurveTo(xCtrl2, yCtrl2, xTo, yTo);}; virtual void cubicCurveRel(double xCtrl2, double yCtrl2, double xTo, double yTo) {BASE::cubicCurveRel(xCtrl2, yCtrl2, xTo, yTo);}; - virtual void addEllipse(double cx, double cy, double rx, double ry, Direction dir) {BASE::addEllipse(cx, cy, rx, ry, dir);}; + virtual void addEllipse(double cx, double cy, double rx, double ry, Agg2DBase::Direction dir) {BASE::addEllipse(cx, cy, rx, ry, dir);}; virtual void closePolygon() {BASE::closePolygon();}; - virtual void drawPath(DrawPathFlag flag = FillAndStroke) {BASE::drawPath(flag);}; + virtual void drawPath(Agg2DBase::DrawPathFlag flag = Agg2DBase::FillAndStroke) {BASE::drawPath(flag);}; // virtual void drawPathNoTransform(DrawPathFlag flag = FillAndStroke) {BASE::drawPathNoTransform(flag);}; // Auxiliary @@ -242,7 +278,9 @@ class AggDraw_Desmume : public AggDraw { public: void setTarget(AggTarget newTarget); - void composite(void* dest); + //void composite(void* dest); + + AggDrawTarget *screen, *hud, *lua; }; extern AggDraw_Desmume aggDraw; diff --git a/desmume/src/lua-engine.cpp b/desmume/src/lua-engine.cpp index 8ca6aab7e..ee2c4acd8 100644 --- a/desmume/src/lua-engine.cpp +++ b/desmume/src/lua-engine.cpp @@ -8,6 +8,7 @@ #include "zlib.h" #include "NDSSystem.h" #include "movie.h" +#include "GPU_osd.h" #ifdef WIN32 #include "main.h" #include "windows.h" diff --git a/desmume/src/movie.cpp b/desmume/src/movie.cpp index 5abee2763..9a923c3ff 100644 --- a/desmume/src/movie.cpp +++ b/desmume/src/movie.cpp @@ -32,6 +32,7 @@ #include "common.h" #include "mic.h" #include "version.h" +#include "GPU_osd.h" #include "memorystream.h" using namespace std; diff --git a/desmume/src/softrender.cpp b/desmume/src/softrender.cpp deleted file mode 100644 index 0929001f5..000000000 --- a/desmume/src/softrender.cpp +++ /dev/null @@ -1,752 +0,0 @@ -/// The VERGE 3 Project is originally by Ben Eirich and is made available via -/// the BSD License. -/// -/// Please see LICENSE in the project's root directory for the text of the -/// licensing agreement. The CREDITS file in the same directory enumerates the -/// folks involved in this public build. -/// -/// If you have altered this source file, please log your name, date, and what -/// changes you made below this line. - - -/**************************************************************** - xerxes engine - vid_manager.cpp - ****************************************************************/ - -#include "softrender.h" -#include -#include - -#include "softrender_v3sysfont.h" - -namespace softrender { - - //instantiations - Trender32 render32; - Trender16 render16; - Trender15 render15; - Trender51 render51; - - - template - T sgn(const T& a) { - if (a<0) - return -1; - else if (a>0) - return +1; - else return 0; - } - - template - T abs(const T& a) { - if (a<0) - return -a; - else return a; - } - - template - void SWAP(T& a, T& b) { - T temp = a; - a = b; - b = temp; - } - - -/***************************** data *****************************/ - -bool vid_initd = false; -bool vid_window = true; -int vid_bpp, vid_xres, vid_yres, vid_bytesperpixel; -int transColor; -image *screen; - -/****************************************************************/ - -image::image() -{ -} - - -image::image(int xres, int yres) -{ - width = pitch = xres; - height = yres; - cx1 = 0; - cy1 = 0; - cx2 = width - 1; - cy2 = height - 1; - bpp = vid_bpp; - shell = 0; - data = new char[width*height*vid_bytesperpixel]; - //switch (vid_bpp) - //{ - // case 15: - // case 16: - // case 61: data = new word[width * height]; - // break; - // case 32: data = new quad[width * height]; - // break; - //} -} - -void image::delete_data() -{ - delete[] (char *)data; -} - -image::~image() -{ - if (data && !shell) - delete_data(); -} - - -void image::SetClip(int x1, int y1, int x2, int y2) -{ - cx1 = x1 >= 0 ? x1 : 0; - cy1 = y1 >= 0 ? y1 : 0; - cx1 = cx1 < width ? cx1 : width-1; - cy1 = cy1 < height ? cy1 : height-1; - cx2 = x2 >= 0 ? x2 : 0; - cy2 = y2 >= 0 ? y2 : 0; - cx2 = cx2 < width ? cx2 : width-1; - cy2 = cy2 < height ? cy2 : height-1; -} - - -void image::GetClip(int &x1, int &y1, int &x2, int &y2) -{ - x1 = cx1; - y1 = cy1; - x2 = cx2; - y2 = cy2; -} - - -//generic render methods - -//template -//void renderbase::print_char(char c, image *dest) -//{ -// int height = FONT::height(c); -//} - -void renderbase::Line(int x, int y, int xe, int ye, int color, image *dest) -{ - int dx = xe - x, dy = ye - y, - xg = sgn(dx), yg = sgn(dy), - i = 0; - float slope = 0; - - if (abs(dx) >= abs(dy)) - { - slope = (float) dy / (float) dx; - for (i=0; i!=dx; i+=xg) - PutPixel(x+i, y+(int)(slope*i), color, dest); - } - else - { - slope = (float) dx / (float) dy; - for (i=0; i!=dy; i+=yg) - PutPixel(x+(int)(slope*i), y+i, color, dest); - } - PutPixel(xe, ye, color, dest); -} - -void renderbase::Box(int x, int y, int x2, int y2, int color, image *dest) -{ - if (x20) - { - if (r<=0) - { - xx-=2; - x++, xe++; - rx-=dy; - r+=rx; - } - if (r>0) - { - y--, ye++; - ry+=dx; - r-=ry; - } - - if (Fill && y != lasty) - { - HLine(x, y, x+xx-1, color, dest); - HLine(xe, ye, xe+xx-1, color, dest); - } - else { - PutPixel(x, y, color, dest); - PutPixel(x+xx, y, color, dest); - PutPixel(xe, ye, color, dest); - PutPixel(xe+xx, ye, color, dest); - } - lasty = y; - } -} - - - -void renderbase::GrabRegion(int sx1, int sy1, int sx2, int sy2, int dx, int dy, image *s, image *d) -{ - int dcx1, dcy1, dcx2, dcy2; - d->GetClip(dcx1, dcy1, dcx2, dcy2); - - if (sx1>sx2) SWAP(sx1, sx2); - if (sy1>sy2) SWAP(sy1, sy2); - int grabwidth = sx2 - sx1; - int grabheight = sy2 - sy1; - d->SetClip(dx, dy, dx+grabwidth, dy+grabheight); - Blit(dx-sx1, dy-sy1, s, d); - - d->SetClip(dcx1, dcy1, dcx2, dcy2); -} - -// Overkill 2006-02-04 -void renderbase::RectVGrad(int x, int y, int x2, int y2, int color, int color2, image *dest) -{ - int r, g, b; - int color_r, color_g, color_b; - int color_r2, color_g2, color_b2; - int i = 0; - - GetColor(color, color_r, color_g, color_b); - GetColor(color2, color_r2, color_g2, color_b2); - - if (y2 < y) SWAP(y,y2); - - for(i = 0; i <= y2 - y; i++) - { - r = ((i * (color_r2 - color_r) / (y2 - y)) + color_r); - g = ((i * (color_g2 - color_g) / (y2 - y)) + color_g); - b = ((i * (color_b2 - color_b) / (y2 - y)) + color_b); - HLine(x, y + i, x2, MakeColor(r, g, b), dest); - } -} - -// Overkill 2006-02-04 -void renderbase::RectHGrad(int x, int y, int x2, int y2, int color, int color2, image *dest) -{ - int r, g, b; - int color_r, color_g, color_b; - int color_r2, color_g2, color_b2; - int i = 0; - - GetColor(color, color_r, color_g, color_b); - GetColor(color2, color_r2, color_g2, color_b2); - - if (x2 < x) SWAP(x,x2); - - for(i = 0; i <= x2 - x; i++) - { - r = ((i * (color_r2 - color_r) / (x2 - x)) + color_r); - g = ((i * (color_g2 - color_g) / (x2 - x)) + color_g); - b = ((i * (color_b2 - color_b) / (x2 - x)) + color_b); - VLine(x + i, y, y2, MakeColor(r, g, b), dest); - } -} - -// janus 2006-07-22 - -// radial gradient: color1 is edge color, color2 is center color -void renderbase::RectRGrad(int x1, int y1, int x2, int y2, int color1, int color2, image *dest) -{ - int r1, r2, g1, g2, b1, b2; - GetColor(color1, r1, g1, b1); - GetColor(color2, r2, g2, b2); - if (x2 < x1) SWAP(x1,x2); - if (y2 < y1) SWAP(y1,y2); - int w = (x2 - x1) + 1; - int h = (y2 - y1) + 1; - int z; - if ((w == 0) || (h == 0)) return; - // lookup table to eliminate the sqrt-per-pixel - static bool tableInitialized = false; - static struct pythagorasTable { byte v[256]; } pythagorasLookup[256]; - if (!tableInitialized) { - // we initialize this table on the fly the first time this function is invoked - // the output of the formula is not in the value range we require for 8bpp so we scale it - // if you want a nonscaled gradient, set this constant to 1.0f - const float pythagorasConstant = 0.707106781186547f; - for (unsigned a = 0; a < 256; a++) { - for (unsigned b = 0; b < 256; b++) { - float value = sqrt((float)(a * a) + (b * b)) * pythagorasConstant; - if (value <= 0) - pythagorasLookup[a].v[b] = 0; - else if (value >= 255) - pythagorasLookup[a].v[b] = 255; - else - pythagorasLookup[a].v[b] = unsigned(value) & 0xFF; - } - } - tableInitialized = true; - } - // color lookup table to reduce per-pixel blending computations - int colorTable[256]; - for (int i = 0; i < 256; i++) { - unsigned r = r2 + ((r1 - r2) * i / 255); - unsigned g = g2 + ((g1 - g2) * i / 255); - unsigned b = b2 + ((b1 - b2) * i / 255); - colorTable[i] = MakeColor(r, g, b); - } - // x and y weight tables which unfortunately must be dynamically allocated due to the fact that their size depends on the size of the rect - byte* xTable = new byte[w]; - byte* yTable = new byte[h]; - { - // the float->int conversions in here are kind of expensive, it might be alright to do this in integer. - // haven't tested the math enough to be sure though, so float it is ('cause i'm lazy) - float xMul = 255.0f / (w / 2), yMul = 255.0f / (h / 2); - int xOffset = (w / 2), yOffset = (h / 2); - // these tables convert x/y coordinates into 0-255 weights which can be used to index the sqrt table - for (int x = 0; x < w; x++) { - xTable[x] = unsigned((float)abs(x - xOffset) * xMul) & 0xFF; - } - for (int y = 0; y < h; y++) { - yTable[y] = unsigned((float)abs(y - yOffset) * yMul) & 0xFF; - } - } - for (int y = 0; y < h; y++) { - for (int x = 0; x < w; x++) { - z = pythagorasLookup[yTable[y]].v[xTable[x]]; - PutPixel(x+x1, y+y1, colorTable[z], dest); - } - } - // cleanup locals - delete[] xTable; - delete[] yTable; -} - -// 4-corner gradient: color1-4 are edges top left, top right, bottom left, bottom right -void renderbase::Rect4Grad(int x1, int y1, int x2, int y2, int color1, int color2, int color3, int color4, image *dest) -{ - int cr[4], cg[4], cb[4]; - GetColor(color1, cr[0], cg[0], cb[0]); - GetColor(color2, cr[1], cg[1], cb[1]); - GetColor(color3, cr[2], cg[2], cb[2]); - GetColor(color4, cr[3], cg[3], cb[3]); - if (x2 < x1) SWAP(x1,x2); - if (y2 < y1) SWAP(y1,y2); - int w = (x2 - x1) + 1; - int h = (y2 - y1) + 1; - if ((w == 0) || (h == 0)) return; - unsigned wDiv = w-1; - unsigned hDiv = h-1; - for (int y = 0; y < h; y++) { - for (int x = 0; x < w; x++) { - // calculate x and y weights - unsigned aX = x * 255 / wDiv; - unsigned aY = y * 255 / hDiv; - // calculate per-color weights - unsigned a[4]; // tl tr bl br - a[0] = (aX^0xFF) * (aY^0xFF) / 255; - a[1] = aX * (aY^0xFF) / 255; - a[2] = (aX^0xFF) * aY / 255; - a[3] = 255 - (a[0] + a[1] + a[2]); - // blend - unsigned r = ((cr[0] * a[0]) + (cr[1] * a[1]) + (cr[2] * a[2]) + (cr[3] * a[3])) / 255; - unsigned g = ((cg[0] * a[0]) + (cg[1] * a[1]) + (cg[2] * a[2]) + (cg[3] * a[3])) / 255; - unsigned b = ((cb[0] * a[0]) + (cb[1] * a[1]) + (cb[2] * a[2]) + (cb[3] * a[3])) / 255; - PutPixel(x+x1, y+y1, MakeColor(r, g, b), dest); - } - } -} - -int Trender32::MakeColor(int r, int g, int b) -{ - return ((r<<16)|(g<<8)|b); -} - - -bool Trender32::GetColor(int c, int &r, int &g, int &b) -{ -// if (c == transColor) return false; - b = c & 0xff; - g = (c >> 8) & 0xff; - r = (c >> 16) & 0xff; - return true; -} - - - -void Trender32::Clear(int color, image *dest) -{ - int *d = (int *)dest->data; - int bytes = dest->pitch * dest->height; - while (bytes--) - *d++ = color; -} - - -int Trender32::ReadPixel(int x, int y, image *source) -{ - quad *ptr = (quad*)source->data; - return ptr[(y * source->pitch) + x]; -} - - -void Trender32::PutPixel(int x, int y, int color, image *dest) -{ - int *ptr = (int *)dest->data; - if (xcx1 || x>dest->cx2 || ycy1 || y>dest->cy2) - return; - ptr[(y * dest->pitch) + x] = color; -} - - -void Trender32::HLine(int x, int y, int xe, int color, image *dest) -{ - int *d = (int *) dest->data; - int cx1=0, cy1=0, cx2=0, cy2=0; - if (xeGetClip(cx1, cy1, cx2, cy2); - if (x>cx2 || y>cy2 || xecx2) xe=cx2; - if (xpitch) + x; - for (; x<=xe; x++) - *d++ = color; -} - -void Trender32::VLine(int x, int y, int ye, int color, image *dest) -{ - int *d = (int *) dest->data; - int cx1=0, cy1=0, cx2=0, cy2=0; - if (yeGetClip(cx1, cy1, cx2, cy2); - if (x>cx2 || y>cy2 || xcy2) ye=cy2; - if (ypitch) + x; - for (; y<=ye; y++, d+=dest->pitch) - *d = color; -} - -void Trender32::Blit(int x, int y, image *src, image *dest) -{ - int *s=(int *)src->data, - *d=(int *)dest->data; - int spitch=src->pitch, - dpitch=dest->pitch; - int xlen=src->width, - ylen=src->height; - int cx1=0, cy1=0, - cx2=0, cy2=0; - - dest->GetClip(cx1, cy1, cx2, cy2); - if (x>cx2 || y>cy2 || x+xlencx2) xlen = cx2-x+1; - if (y+ylen>cy2) ylen = cy2-y+1; - if (xdata,c, - *d=(int *)dest->data; - int spitch=src->pitch, - dpitch=dest->pitch; - int xlen=src->width, - ylen=src->height; - int cx1=0, cy1=0, - cx2=0, cy2=0; - - dest->GetClip(cx1, cy1, cx2, cy2); - if (x>cx2 || y>cy2 || x+xlen cx2) xlen=cx2-x+1; - if (y+ylen > cy2) ylen=cy2-y+1; - if (x>3)<<11)|((g>>2)<<5)|(b>>3)); -} - -bool Trender16::GetColor(int c, int &r, int &g, int &b) -{ -// if (c == transColor) return false; - b = (c & 0x1F) << 3; - g = ((c >> 5) & 0x3f) << 2; - r = ((c >> 11) & 0x1f) << 3; - return true; -} - - -void Trender16::Clear(int color, image *dest) -{ - word *d = (word *)dest->data; - int bytes = dest->pitch * dest->height; - while (bytes--) - *d++ = color; -} - - -int Trender16::ReadPixel(int x, int y, image *source) -{ - word *ptr = (word*)source->data; - return ptr[(y * source->pitch) + x]; -} - - -void Trender16::PutPixel(int x, int y, int color, image *dest) -{ - word *ptr = (word *)dest->data; - if (xcx1 || x>dest->cx2 || ycy1 || y>dest->cy2) - return; - ptr[(y * dest->pitch) + x] = color; -} - -void Trender16::VLine(int x, int y, int ye, int color, image *dest) -{ - word *d = (word *) dest->data; - int cx1=0, cy1=0, cx2=0, cy2=0; - if (yeGetClip(cx1, cy1, cx2, cy2); - if (x>cx2 || y>cy2 || xcy2) ye=cy2; - if (ypitch) + x; - for (; y<=ye; y++, d+=dest->pitch) - *d = color; -} - -void Trender16::HLine(int x, int y, int xe, int color, image *dest) -{ - word *d = (word *) dest->data; - int cx1=0, cy1=0, cx2=0, cy2=0; - if (xeGetClip(cx1, cy1, cx2, cy2); - if (x>cx2 || y>cy2 || xecx2) xe=cx2; - if (xpitch) + x; - for (; x<=xe; x++) - *d++ = color; -} - -void Trender16::Blit(int x, int y, image *src, image *dest) -{ - word *s=(word *)src->data, - *d=(word *)dest->data; - int spitch=src->pitch, - dpitch=dest->pitch; - int xlen=src->width, - ylen=src->height; - int cx1=0, cy1=0, - cx2=0, cy2=0; - - dest->GetClip(cx1, cy1, cx2, cy2); - if (x>cx2 || y>cy2 || x+xlencx2) xlen = cx2-x+1; - if (y+ylen>cy2) ylen = cy2-y+1; - if (xdata,c, - *d=(word *)dest->data; - int spitch=src->pitch, - dpitch=dest->pitch; - int xlen=src->width, - ylen=src->height; - int cx1=0, cy1=0, - cx2=0, cy2=0; - - dest->GetClip(cx1, cy1, cx2, cy2); - if (x>cx2 || y>cy2 || x+xlen cx2) xlen=cx2-x+1; - if (y+ylen > cy2) ylen=cy2-y+1; - if (x>3)<<10)|((g>>3)<<5)|(b>>3))|0x8000; //0x8000 for opaque -} - - -bool Trender15::GetColor(int c, int &r, int &g, int &b) -{ -// if (c == transColor) return false; - b = (c & 0x1F) << 3; - g = ((c >> 5) & 0x1f) << 3; - r = ((c >> 10) & 0x1f) << 3; - return true; -} - -/********************** 51bpp (15bpp with high bit blue) blitter code **********************/ - -int Trender51::MakeColor(int r, int g, int b) -{ - return (((b>>3)<<10)|((g>>3)<<5)|(r>>3))|0x8000; //0x8000 for opaque -} - - -bool Trender51::GetColor(int c, int &r, int &g, int &b) -{ -// if (c == transColor) return false; - r = (c & 0x1F) << 3; - g = ((c >> 5) & 0x1f) << 3; - b = ((c >> 10) & 0x1f) << 3; - return true; -} - - -} //end namespace diff --git a/desmume/src/softrender.h b/desmume/src/softrender.h deleted file mode 100644 index e43020f9c..000000000 --- a/desmume/src/softrender.h +++ /dev/null @@ -1,235 +0,0 @@ -/// The VERGE 3 Project is originally by Ben Eirich and is made available via -/// the BSD License. -/// -/// Please see LICENSE in the project's root directory for the text of the -/// licensing agreement. The CREDITS file in the same directory enumerates the -/// folks involved in this public build. -/// -/// If you have altered this source file, please log your name, date, and what -/// changes you made below this line. - - -#ifndef SOFTRENDER_H -#define SOFTRENDER_H - -#include -#include "softrender_config.h" - -namespace softrender { - - -class image -{ -public: - int width, height, pitch; - int cx1, cy1, cx2, cy2; - int bpp, shell; - void *data; - - image(); - image(int xres, int yres); - ~image(); - void delete_data(); - void SetClip(int x1, int y1, int x2, int y2); - void GetClip(int &x1, int &y1, int &x2, int &y2); -}; - -extern int vid_bpp, vid_xres, vid_yres, vid_bytesperpixel, transColor; -extern bool vid_window; -extern image *screen; -extern int alpha, ialpha; -extern int skewlines[]; - -int SetLucent(int percent); - -//void run2xSAI(image *src, image *dest); - -class renderbase { -private: - - void Oval(int x, int y, int xe, int ye, int color, int Fill, image *dest); -public: - //render methods that do not depend on the pixel format - void Line(int x, int y, int xe, int ye, int color, image *dest); - void Box(int x, int y, int xe, int ye, int color, image *dest); - void Rect(int x, int y, int xe, int ye, int color, image *dest); - void Sphere(int x, int y, int xradius, int yradius, int color, image *dest); - void Circle(int x, int y, int xradius, int yradius, int color, image *dest); - void RectVGrad(int x, int y, int xe, int ye, int color, int color2, image *dest); - void RectHGrad(int x, int y, int xe, int ye, int color, int color2, image *dest); - void RectRGrad(int x1, int y1, int x2, int y2, int color1, int color2, image *dest); - void Rect4Grad(int x1, int y1, int x2, int y2, int color1, int color2, int color3, int color4, image *dest); - - //things that werent originally even blitter-specific - void GrabRegion(int sx1, int sy1, int sx2, int sy2, int dx, int dy, image *s, image *d); - -private: - bool textBoxBorder; - template - void print_char(int scale, int x, int y, int color, char c, image *dest) - { - int height = FONT::height(); - int width = FONT::width(c); - int ofs = FONT::haveContour()?1:0; - - if (FONT::haveContour()) - { - for (int yc=0; yc - void PrintString(int scale, int x, int y, int color, char *str, image *dest) - { - int xc = x; - int yc = y; - - int height = FONT::height(); - int boxSize= 0; - if (FONT::haveContour()) - boxSize = ((FONT::width(*str)*scale+scale+1)*strlen(str)); - else - boxSize = ((FONT::width(*str)*scale+scale)*strlen(str)); - - int x1 = x; // Remember where x where the line should start. -- Overkill 2005-12-28. - for (; *str; ++str) - { - // New lines -- Overkill 2005-12-28. - if (*str == '\n' || *str == '\r') - { - if (*str == '\r') - { - // Checks for \r\n so they aren't parsed as two seperate line breaks. - if (!*++str) return; - if (*str != '\n') - { - *--str; - } - } - xc = x1; - yc += height*scale + scale; - } else { - print_char(scale, xc, yc, color, *str, dest); - xc += FONT::width(*str)*scale + scale; - if (FONT::haveContour()) xc += 1; - } - } - if (textBoxBorder) - Box(x, y, x+boxSize, y+height, MakeColor(0, 0, 0), dest); - } - - -public: - virtual int MakeColor(int r, int g, int b)=0; - virtual bool GetColor(int c, int &r, int &g, int &b)=0; - virtual void Clear(int color, image *dest)=0; - virtual int ReadPixel(int x, int y, image *dest)=0; - virtual void PutPixel(int x, int y, int color, image *dest)=0; - virtual void VLine(int x, int y, int ye, int color, image *dest)=0; - virtual void HLine(int x, int y, int xe, int color, image *dest)=0; - virtual void Blit(int x, int y, image *src, image *dest)=0; - virtual void TBlit(int x, int y, image *src, image *dest)=0; - //virtual void AlphaBlit(int x, int y, image *src, image *alpha, image *dest); - //virtual void AdditiveBlit(int x, int y, image *src, image *dest); - //virtual void TAdditiveBlit(int x, int y, image *src, image *dest); - //virtual void SubtractiveBlit(int x, int y, image *src, image *dest); - //virtual void TSubtractiveBlit(int x, int y, image *src, image *dest); - //virtual void BlitTile(int x, int y, char *src, image *dest); - //virtual void TBlitTile(int x, int y, char *src, image *dest); - //virtual void ScaleBlit(int x, int y, int dw, int dh, image *src, image *dest); - //virtual void TScaleBlit(int x, int y, int dw, int dh, image *src, image *dest); - //virtual void WrapBlit(int x, int y, image *src, image *dst); - //virtual void TWrapBlit(int x, int y, image *src, image *dst); - //virtual void Silhouette(int x, int y, int c, image *src, image *dst); - //virtual void RotScale(int x, int y, float angle, float scale, image *src, image *dest); - //virtual void Mosaic(int xf, int yf, image *src); - //virtual void Timeless(int x, int y1, int y, image *src, image *dest); - //virtual void BlitWrap(int x, int y, image *src, image *dest); - //virtual void ColorFilter(int filter, image *img); - //virtual void Triangle(int x1, int y1, int x2, int y2, int x3, int y3, int c, image *dest); - //virtual void FlipBlit(int x, int y, int fx, int fy, image *src, image *dest); - //virtual image* ImageFrom8bpp(byte *src, int width, int height, byte *pal); - //virtual image* ImageFrom24bpp(byte *src, int width, int height); - //virtual image* ImageFrom32bpp(byte *src, int width, int height); - //// Overkill (2007-05-04) - //virtual int HSVtoColor(int h, int s, int v); - //// Overkill (2007-05-04) - //virtual void GetHSV(int color, int &h, int &s, int &v); - //// Overkill (2007-05-04) - //virtual void HueReplace(int hue_find, int hue_tolerance, int hue_replace, image *img); - //// Overkill (2007-05-04) - //virtual void ColorReplace(int color_find, int color_replace, image *img); -}; - -class Trender16: public renderbase -{ -public: - virtual int MakeColor(int r, int g, int b); - virtual bool GetColor(int c, int &r, int &g, int &b); - virtual void Clear(int color, image *dest); - virtual int ReadPixel(int x, int y, image *dest); - virtual void PutPixel(int x, int y, int color, image *dest); - virtual void VLine(int x, int y, int ye, int color, image *dest); - virtual void HLine(int x, int y, int xe, int color, image *dest); - virtual void Blit(int x, int y, image *src, image *dest); - virtual void TBlit(int x, int y, image *src, image *dest); -}; - -class Trender32: public renderbase -{ -public: - virtual int MakeColor(int r, int g, int b); - virtual bool GetColor(int c, int &r, int &g, int &b); - virtual void Clear(int color, image *dest); - virtual int ReadPixel(int x, int y, image *dest); - virtual void PutPixel(int x, int y, int color, image *dest); - virtual void VLine(int x, int y, int ye, int color, image *dest); - virtual void HLine(int x, int y, int xe, int color, image *dest); - virtual void Blit(int x, int y, image *src, image *dest); - virtual void TBlit(int x, int y, image *src, image *dest); -}; - - -class Trender15 : public Trender16 -{ -public: - virtual int MakeColor(int r, int g, int b); - virtual bool GetColor(int c, int &r, int &g, int &b); -}; - -class Trender51 : public Trender16 -{ -public: - virtual int MakeColor(int r, int g, int b); - virtual bool GetColor(int c, int &r, int &g, int &b); -}; - -extern Trender32 render32; -extern Trender16 render16; -extern Trender15 render15; -extern Trender51 render51; - - -} //end namespace - -#endif diff --git a/desmume/src/softrender_config.h b/desmume/src/softrender_config.h deleted file mode 100644 index cb5b4d97d..000000000 --- a/desmume/src/softrender_config.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef SOFTRENDER_CONFIG_H -#define SOFTRENDER_CONFIG_H - -namespace softrender { - -typedef unsigned char byte; -typedef unsigned short word; -typedef unsigned int quad; - - - -} - -#endif diff --git a/desmume/src/softrender_desmumefont.h b/desmume/src/softrender_desmumefont.h deleted file mode 100644 index a6eb8f2d8..000000000 --- a/desmume/src/softrender_desmumefont.h +++ /dev/null @@ -1,574 +0,0 @@ -/* Copyright (C) 2006 yopyop - yopyop156@ifrance.com - yopyop156.ifrance.com - - Copyright (C) 2006-2008 DeSmuME team - - This file is part of DeSmuME - - DeSmuME 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. - - DeSmuME 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 DeSmuME; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef SYSFONT_DESMUME_H -#define SYSFONT_DESMUME_H - -#define OSD_FONT_WIDTH 8 -#define OSD_FONT_HEIGHT 16 - -namespace softrender { - - class DesmumeFont { - public: - static int height() { return OSD_FONT_HEIGHT; } - static int width(char c) { return OSD_FONT_WIDTH; } - static bool valid(char c) { return true; } - static bool haveContour() { return true; } - - static int pixel(char c, int x, int y) { - - static const unsigned char font_eng[256*OSD_FONT_HEIGHT] = - { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00 */ - 0x00,0x00,0x7E,0x81,0xA5,0x81,0x81,0xBD,0x99,0x81,0x81,0x7E,0x00,0x00,0x00,0x00, /* 01 */ - 0x00,0x00,0x7E,0xFF,0xDB,0xFF,0xFF,0xC3,0xE7,0xFF,0xFF,0x7E,0x00,0x00,0x00,0x00, /* 02 */ - 0x00,0x00,0x00,0x00,0x6C,0xFE,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00,0x00,0x00,0x00, /* 03 */ - 0x00,0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0x7C,0x38,0x10,0x00,0x00,0x00,0x00,0x00, /* 04 */ - 0x00,0x00,0x00,0x18,0x3C,0x3C,0xE7,0xE7,0xE7,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 05 */ - 0x00,0x00,0x00,0x18,0x3C,0x7E,0xFF,0xFF,0x7E,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 06 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 07 */ - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 08 */ - 0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00,0x00,0x00,0x00,0x00, /* 09 */ - 0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x99,0xBD,0xBD,0x99,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF, /* 0A */ - 0x00,0x00,0x1E,0x0E,0x1A,0x32,0x78,0xCC,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00, /* 0B */ - 0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00, /* 0C */ - 0x00,0x00,0x3F,0x33,0x3F,0x30,0x30,0x30,0x30,0x70,0xF0,0xE0,0x00,0x00,0x00,0x00, /* 0D */ - 0x00,0x00,0x7F,0x63,0x7F,0x63,0x63,0x63,0x63,0x67,0xE7,0xE6,0xC0,0x00,0x00,0x00, /* 0E */ - 0x00,0x00,0x00,0x18,0x18,0xDB,0x3C,0xE7,0x3C,0xDB,0x18,0x18,0x00,0x00,0x00,0x00, /* 0F */ - 0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFE,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00, /* 10 */ - 0x00,0x02,0x06,0x0E,0x1E,0x3E,0xFE,0x3E,0x1E,0x0E,0x06,0x02,0x00,0x00,0x00,0x00, /* 11 */ - 0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, /* 12 */ - 0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x66,0x00,0x00,0x00,0x00, /* 13 */ - 0x00,0x00,0x7F,0xDB,0xDB,0xDB,0x7B,0x1B,0x1B,0x1B,0x1B,0x1B,0x00,0x00,0x00,0x00, /* 14 */ - 0x00,0x7C,0xC6,0x60,0x38,0x6C,0xC6,0xC6,0x6C,0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00, /* 15 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00, /* 16 */ - 0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x7E,0x3C,0x18,0x7E,0x00,0x00,0x00,0x00, /* 17 */ - 0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 18 */ - 0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00, /* 19 */ - 0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0xFE,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 1A */ - 0x00,0x00,0x00,0x00,0x00,0x30,0x60,0xFE,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00, /* 1B */ - 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, /* 1C */ - 0x00,0x00,0x00,0x00,0x00,0x24,0x66,0xFF,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00, /* 1D */ - 0x00,0x00,0x00,0x00,0x10,0x38,0x38,0x7C,0x7C,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00, /* 1E */ - 0x00,0x00,0x00,0x00,0xFE,0xFE,0x7C,0x7C,0x38,0x38,0x10,0x00,0x00,0x00,0x00,0x00, /* 1F */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 20 */ - 0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* 21 */ - 0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 22 */ - 0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C,0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00, /* 23 */ - 0x18,0x18,0x7C,0xC6,0xC2,0xC0,0x7C,0x06,0x06,0x86,0xC6,0x7C,0x18,0x18,0x00,0x00, /* 24 */ - 0x00,0x00,0x00,0x00,0xC2,0xC6,0x0C,0x18,0x30,0x60,0xC6,0x86,0x00,0x00,0x00,0x00, /* 25 */ - 0x00,0x00,0x38,0x6C,0x6C,0x38,0x76,0xDC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 26 */ - 0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 27 */ - 0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00, /* 28 */ - 0x00,0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x30,0x00,0x00,0x00,0x00, /* 29 */ - 0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00, /* 2A */ - 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 2B */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00, /* 2C */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 2D */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* 2E */ - 0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00, /* 2F */ - 0x00,0x00,0x3C,0x66,0xC3,0xC3,0xDB,0xDB,0xC3,0xC3,0x66,0x3C,0x00,0x00,0x00,0x00, /* 30 */ - 0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00, /* 31 */ - 0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30,0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00, /* 32 */ - 0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 33 */ - 0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00, /* 34 */ - 0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x06,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 35 */ - 0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 36 */ - 0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00, /* 37 */ - 0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 38 */ - 0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06,0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00, /* 39 */ - 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, /* 3A */ - 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00, /* 3B */ - 0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00, /* 3C */ - 0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 3D */ - 0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00, /* 3E */ - 0x00,0x00,0x7C,0xC6,0xC6,0x0C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* 3F */ - 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xDE,0xDE,0xDE,0xDC,0xC0,0x7C,0x00,0x00,0x00,0x00, /* 40 */ - 0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 41 */ - 0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66,0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00, /* 42 */ - 0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0,0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00, /* 43 */ - 0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66,0x66,0x66,0x6C,0xF8,0x00,0x00,0x00,0x00, /* 44 */ - 0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00, /* 45 */ - 0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, /* 46 */ - 0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xDE,0xC6,0xC6,0x66,0x3A,0x00,0x00,0x00,0x00, /* 47 */ - 0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 48 */ - 0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 49 */ - 0x00,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0x0C,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00, /* 4A */ - 0x00,0x00,0xE6,0x66,0x66,0x6C,0x78,0x78,0x6C,0x66,0x66,0xE6,0x00,0x00,0x00,0x00, /* 4B */ - 0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60,0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00, /* 4C */ - 0x00,0x00,0xC3,0xE7,0xFF,0xFF,0xDB,0xC3,0xC3,0xC3,0xC3,0xC3,0x00,0x00,0x00,0x00, /* 4D */ - 0x00,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 4E */ - 0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 4F */ - 0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, /* 50 */ - 0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xDE,0x7C,0x0C,0x0E,0x00,0x00, /* 51 */ - 0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x6C,0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00, /* 52 */ - 0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x0C,0x06,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 53 */ - 0x00,0x00,0xFF,0xDB,0x99,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 54 */ - 0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 55 */ - 0x00,0x00,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x00,0x00,0x00,0x00, /* 56 */ - 0x00,0x00,0xC3,0xC3,0xC3,0xC3,0xC3,0xDB,0xDB,0xFF,0x66,0x66,0x00,0x00,0x00,0x00, /* 57 */ - 0x00,0x00,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3,0xC3,0x00,0x00,0x00,0x00, /* 58 */ - 0x00,0x00,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 59 */ - 0x00,0x00,0xFF,0xC3,0x86,0x0C,0x18,0x30,0x60,0xC1,0xC3,0xFF,0x00,0x00,0x00,0x00, /* 5A */ - 0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00, /* 5B */ - 0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x06,0x02,0x00,0x00,0x00,0x00, /* 5C */ - 0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00, /* 5D */ - 0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 5E */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00, /* 5F */ - 0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 60 */ - 0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 61 */ - 0x00,0x00,0xE0,0x60,0x60,0x78,0x6C,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00, /* 62 */ - 0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC0,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 63 */ - 0x00,0x00,0x1C,0x0C,0x0C,0x3C,0x6C,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 64 */ - 0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 65 */ - 0x00,0x00,0x38,0x6C,0x64,0x60,0xF0,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, /* 66 */ - 0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00, /* 67 */ - 0x00,0x00,0xE0,0x60,0x60,0x6C,0x76,0x66,0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00, /* 68 */ - 0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 69 */ - 0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, /* 6A */ - 0x00,0x00,0xE0,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0xE6,0x00,0x00,0x00,0x00, /* 6B */ - 0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 6C */ - 0x00,0x00,0x00,0x00,0x00,0xE6,0xFF,0xDB,0xDB,0xDB,0xDB,0xDB,0x00,0x00,0x00,0x00, /* 6D */ - 0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, /* 6E */ - 0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 6F */ - 0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00, /* 70 */ - 0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,0xCC,0xCC,0xCC,0x7C,0x0C,0x0C,0x1E,0x00, /* 71 */ - 0x00,0x00,0x00,0x00,0x00,0xDC,0x76,0x66,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00, /* 72 */ - 0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x60,0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 73 */ - 0x00,0x00,0x10,0x30,0x30,0xFC,0x30,0x30,0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00, /* 74 */ - 0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 75 */ - 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x00,0x00,0x00,0x00, /* 76 */ - 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0xC3,0xDB,0xDB,0xFF,0x66,0x00,0x00,0x00,0x00, /* 77 */ - 0x00,0x00,0x00,0x00,0x00,0xC3,0x66,0x3C,0x18,0x3C,0x66,0xC3,0x00,0x00,0x00,0x00, /* 78 */ - 0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0xF8,0x00, /* 79 */ - 0x00,0x00,0x00,0x00,0x00,0xFE,0xCC,0x18,0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00, /* 7A */ - 0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00, /* 7B */ - 0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 7C */ - 0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00, /* 7D */ - 0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 7E */ - 0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00, /* 7F */ - 0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0,0xC2,0x66,0x3C,0x0C,0x06,0x7C,0x00,0x00, /* 80 */ - 0x00,0x00,0xCC,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 81 */ - 0x00,0x0C,0x18,0x30,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 82 */ - 0x00,0x10,0x38,0x6C,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 83 */ - 0x00,0x00,0xCC,0x00,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 84 */ - 0x00,0x60,0x30,0x18,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 85 */ - 0x00,0x38,0x6C,0x38,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 86 */ - 0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x0C,0x06,0x3C,0x00,0x00,0x00, /* 87 */ - 0x00,0x10,0x38,0x6C,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 88 */ - 0x00,0x00,0xC6,0x00,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 89 */ - 0x00,0x60,0x30,0x18,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 8A */ - 0x00,0x00,0x66,0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 8B */ - 0x00,0x18,0x3C,0x66,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 8C */ - 0x00,0x60,0x30,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* 8D */ - 0x00,0xC6,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 8E */ - 0x38,0x6C,0x38,0x00,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* 8F */ - 0x18,0x30,0x60,0x00,0xFE,0x66,0x60,0x7C,0x60,0x60,0x66,0xFE,0x00,0x00,0x00,0x00, /* 90 */ - 0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x1B,0x7E,0xD8,0xDC,0x77,0x00,0x00,0x00,0x00, /* 91 */ - 0x00,0x00,0x3E,0x6C,0xCC,0xCC,0xFE,0xCC,0xCC,0xCC,0xCC,0xCE,0x00,0x00,0x00,0x00, /* 92 */ - 0x00,0x10,0x38,0x6C,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 93 */ - 0x00,0x00,0xC6,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 94 */ - 0x00,0x60,0x30,0x18,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 95 */ - 0x00,0x30,0x78,0xCC,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 96 */ - 0x00,0x60,0x30,0x18,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* 97 */ - 0x00,0x00,0xC6,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0x78,0x00, /* 98 */ - 0x00,0xC6,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 99 */ - 0x00,0xC6,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* 9A */ - 0x00,0x18,0x18,0x7E,0xC3,0xC0,0xC0,0xC0,0xC3,0x7E,0x18,0x18,0x00,0x00,0x00,0x00, /* 9B */ - 0x00,0x38,0x6C,0x64,0x60,0xF0,0x60,0x60,0x60,0x60,0xE6,0xFC,0x00,0x00,0x00,0x00, /* 9C */ - 0x00,0x00,0xC3,0x66,0x3C,0x18,0xFF,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 9D */ - 0x00,0xFC,0x66,0x66,0x7C,0x62,0x66,0x6F,0x66,0x66,0x66,0xF3,0x00,0x00,0x00,0x00, /* 9E */ - 0x00,0x0E,0x1B,0x18,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0x18,0xD8,0x70,0x00,0x00, /* 9F */ - 0x00,0x18,0x30,0x60,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* A0 */ - 0x00,0x0C,0x18,0x30,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, /* A1 */ - 0x00,0x18,0x30,0x60,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* A2 */ - 0x00,0x18,0x30,0x60,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00, /* A3 */ - 0x00,0x00,0x76,0xDC,0x00,0xDC,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, /* A4 */ - 0x76,0xDC,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* A5 */ - 0x00,0x3C,0x6C,0x6C,0x3E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* A6 */ - 0x00,0x38,0x6C,0x6C,0x38,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* A7 */ - 0x00,0x00,0x30,0x30,0x00,0x30,0x30,0x60,0xC0,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00, /* A8 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, /* A9 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00, /* AA */ - 0x00,0xC0,0xC0,0xC2,0xC6,0xCC,0x18,0x30,0x60,0xCE,0x9B,0x06,0x0C,0x1F,0x00,0x00, /* AB */ - 0x00,0xC0,0xC0,0xC2,0xC6,0xCC,0x18,0x30,0x66,0xCE,0x96,0x3E,0x06,0x06,0x00,0x00, /* AC */ - 0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x18,0x3C,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00, /* AD */ - 0x00,0x00,0x00,0x00,0x00,0x36,0x6C,0xD8,0x6C,0x36,0x00,0x00,0x00,0x00,0x00,0x00, /* AE */ - 0x00,0x00,0x00,0x00,0x00,0xD8,0x6C,0x36,0x6C,0xD8,0x00,0x00,0x00,0x00,0x00,0x00, /* AF */ - 0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44, /* B0 */ - 0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA, /* B1 */ - 0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77, /* B2 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* B3 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* B4 */ - 0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* B5 */ - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* B6 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* B7 */ - 0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* B8 */ - 0x36,0x36,0x36,0x36,0x36,0xF6,0x06,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* B9 */ - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* BA */ - 0x00,0x00,0x00,0x00,0x00,0xFE,0x06,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* BB */ - 0x36,0x36,0x36,0x36,0x36,0xF6,0x06,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* BC */ - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* BD */ - 0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* BE */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* BF */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C0 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C1 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* C2 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* C3 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C4 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* C5 */ - 0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* C6 */ - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* C7 */ - 0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C8 */ - 0x00,0x00,0x00,0x00,0x00,0x3F,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* C9 */ - 0x36,0x36,0x36,0x36,0x36,0xF7,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* CA */ - 0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xF7,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* CB */ - 0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* CC */ - 0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* CD */ - 0x36,0x36,0x36,0x36,0x36,0xF7,0x00,0xF7,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* CE */ - 0x18,0x18,0x18,0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* CF */ - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* D0 */ - 0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* D1 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* D2 */ - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* D3 */ - 0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* D4 */ - 0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* D5 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* D6 */ - 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xFF,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* D7 */ - 0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* D8 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* D9 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* DA */ - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* DB */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* DC */ - 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0, /* DD */ - 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, /* DE */ - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* DF */ - 0x00,0x00,0x00,0x00,0x00,0x76,0xDC,0xD8,0xD8,0xD8,0xDC,0x76,0x00,0x00,0x00,0x00, /* E0 */ - 0x00,0x00,0x78,0xCC,0xCC,0xCC,0xD8,0xCC,0xC6,0xC6,0xC6,0xCC,0x00,0x00,0x00,0x00, /* E1 */ - 0x00,0x00,0xFE,0xC6,0xC6,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00, /* E2 */ - 0x00,0x00,0x00,0x00,0xFE,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00, /* E3 */ - 0x00,0x00,0x00,0xFE,0xC6,0x60,0x30,0x18,0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00, /* E4 */ - 0x00,0x00,0x00,0x00,0x00,0x7E,0xD8,0xD8,0xD8,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00, /* E5 */ - 0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0xC0,0x00,0x00,0x00, /* E6 */ - 0x00,0x00,0x00,0x00,0x76,0xDC,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* E7 */ - 0x00,0x00,0x00,0x7E,0x18,0x3C,0x66,0x66,0x66,0x3C,0x18,0x7E,0x00,0x00,0x00,0x00, /* E8 */ - 0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00,0x00, /* E9 */ - 0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x6C,0x6C,0x6C,0xEE,0x00,0x00,0x00,0x00, /* EA */ - 0x00,0x00,0x1E,0x30,0x18,0x0C,0x3E,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, /* EB */ - 0x00,0x00,0x00,0x00,0x00,0x7E,0xDB,0xDB,0xDB,0x7E,0x00,0x00,0x00,0x00,0x00,0x00, /* EC */ - 0x00,0x00,0x00,0x03,0x06,0x7E,0xDB,0xDB,0xF3,0x7E,0x60,0xC0,0x00,0x00,0x00,0x00, /* ED */ - 0x00,0x00,0x1C,0x30,0x60,0x60,0x7C,0x60,0x60,0x60,0x30,0x1C,0x00,0x00,0x00,0x00, /* EE */ - 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00, /* EF */ - 0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0xFE,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00, /* F0 */ - 0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0xFF,0x00,0x00,0x00,0x00, /* F1 */ - 0x00,0x00,0x00,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00,0x7E,0x00,0x00,0x00,0x00, /* F2 */ - 0x00,0x00,0x00,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00,0x7E,0x00,0x00,0x00,0x00, /* F3 */ - 0x00,0x00,0x0E,0x1B,0x1B,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* F4 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xD8,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00, /* F5 */ - 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x7E,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, /* F6 */ - 0x00,0x00,0x00,0x00,0x00,0x76,0xDC,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00, /* F7 */ - 0x00,0x38,0x6C,0x6C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* F8 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* F9 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* FA */ - 0x00,0x0F,0x0C,0x0C,0x0C,0x0C,0x0C,0xEC,0x6C,0x6C,0x3C,0x1C,0x00,0x00,0x00,0x00, /* FB */ - 0x00,0xD8,0x6C,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* FC */ - 0x00,0x70,0xD8,0x30,0x60,0xC8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* FD */ - 0x00,0x00,0x00,0x00,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00, /* FE */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* FF */ - }; - - return (font_eng[(int)c*OSD_FONT_HEIGHT + y] >> (7-x))&1; - } //pixel() - - static int contour(char c, int x, int y) { - - static const u16 font_eng_contour[256*(OSD_FONT_HEIGHT+2)] = - { -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 00 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 01 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 02 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 03 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 04 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 05 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 06 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 07 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 08 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 09 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0A */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0B */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0C */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0D */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0E */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 0F */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 10 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 11 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 12 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 13 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 14 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 15 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 16 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 17 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 18 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 19 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1A */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1B */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1C */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1D */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1E */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 1F */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 20 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 21 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 22 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 23 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 24 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 25 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 26 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 27 */ -0x000,0x000,0x03C,0x064,0x0CC,0x198,0x198,0x198,0x198,0x198,0x198,0x0CC,0x064,0x03C,0x000,0x000,0x000,0x000, /* 28 */ -0x000,0x000,0x0F0,0x098,0x0CC,0x066,0x066,0x066,0x066,0x066,0x066,0x0CC,0x098,0x0F0,0x000,0x000,0x000,0x000, /* 29 */ -0x000,0x000,0x000,0x000,0x000,0x0CC,0x132,0x186,0x201,0x186,0x132,0x0CC,0x000,0x000,0x000,0x000,0x000,0x000, /* 2A */ -0x000,0x000,0x000,0x000,0x000,0x030,0x048,0x0CC,0x102,0x0CC,0x048,0x030,0x000,0x000,0x000,0x000,0x000,0x000, /* 2B */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x078,0x048,0x048,0x0C8,0x098,0x0F0,0x000,0x000,0x000, /* 2C */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x3FE,0x202,0x3FE,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 2D */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x030,0x048,0x048,0x030,0x000,0x000,0x000,0x000, /* 2E */ -0x000,0x000,0x000,0x000,0x00E,0x01A,0x032,0x066,0x0CC,0x198,0x330,0x260,0x2C0,0x380,0x000,0x000,0x000,0x000, /* 2F */ -0x000,0x000,0x0FC,0x186,0x333,0x249,0x279,0x201,0x201,0x279,0x249,0x333,0x186,0x0FC,0x000,0x000,0x000,0x000, /* 30 */ -0x000,0x000,0x078,0x0C8,0x188,0x308,0x3C8,0x048,0x048,0x048,0x048,0x1CE,0x102,0x1FE,0x000,0x000,0x000,0x000, /* 31 */ -0x000,0x000,0x1FC,0x304,0x272,0x3D2,0x024,0x048,0x090,0x120,0x25E,0x272,0x202,0x3FE,0x000,0x000,0x000,0x000, /* 32 */ -0x000,0x000,0x1FC,0x306,0x272,0x3D2,0x0F2,0x086,0x0F2,0x012,0x3D2,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 33 */ -0x000,0x000,0x03C,0x064,0x0C4,0x184,0x324,0x266,0x202,0x3E6,0x024,0x066,0x042,0x07E,0x000,0x000,0x000,0x000, /* 34 */ -0x000,0x000,0x3FE,0x202,0x27E,0x240,0x27C,0x206,0x3F2,0x012,0x3D2,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 35 */ -0x000,0x000,0x0F8,0x188,0x338,0x260,0x27C,0x206,0x272,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 36 */ -0x000,0x000,0x3FE,0x202,0x272,0x3F2,0x032,0x064,0x0C8,0x090,0x090,0x090,0x090,0x0F0,0x000,0x000,0x000,0x000, /* 37 */ -0x000,0x000,0x1FC,0x306,0x272,0x252,0x272,0x306,0x272,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 38 */ -0x000,0x000,0x1FC,0x306,0x272,0x252,0x272,0x302,0x1F2,0x012,0x012,0x1E6,0x10C,0x1F8,0x000,0x000,0x000,0x000, /* 39 */ -0x000,0x000,0x000,0x000,0x078,0x048,0x048,0x078,0x000,0x078,0x048,0x048,0x078,0x000,0x000,0x000,0x000,0x000, /* 3A */ -0x000,0x000,0x000,0x000,0x078,0x048,0x048,0x078,0x000,0x078,0x048,0x0C8,0x098,0x0F0,0x000,0x000,0x000,0x000, /* 3B */ -0x000,0x000,0x000,0x01E,0x012,0x024,0x048,0x090,0x120,0x090,0x048,0x024,0x012,0x01E,0x000,0x000,0x000,0x000, /* 3C */ -0x000,0x000,0x000,0x000,0x000,0x1FE,0x102,0x1FE,0x1FE,0x102,0x1FE,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 3D */ -0x000,0x000,0x000,0x1E0,0x120,0x090,0x048,0x024,0x012,0x024,0x048,0x090,0x120,0x1E0,0x000,0x000,0x000,0x000, /* 3E */ -0x000,0x000,0x1FC,0x306,0x272,0x272,0x3E6,0x04C,0x048,0x048,0x078,0x048,0x048,0x078,0x000,0x000,0x000,0x000, /* 3F */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 40 */ -0x000,0x000,0x070,0x0D8,0x18C,0x326,0x252,0x272,0x202,0x272,0x252,0x252,0x252,0x3DE,0x000,0x000,0x000,0x000, /* 41 */ -0x000,0x000,0x3FC,0x206,0x332,0x132,0x132,0x106,0x132,0x132,0x132,0x332,0x206,0x3FC,0x000,0x000,0x000,0x000, /* 42 */ -0x000,0x000,0x0FC,0x186,0x332,0x27A,0x24E,0x240,0x240,0x24E,0x27A,0x332,0x186,0x0FC,0x000,0x000,0x000,0x000, /* 43 */ -0x000,0x000,0x3F8,0x20C,0x326,0x132,0x132,0x132,0x132,0x132,0x132,0x326,0x20C,0x3F8,0x000,0x000,0x000,0x000, /* 44 */ -0x000,0x000,0x3FE,0x202,0x332,0x13A,0x12E,0x108,0x128,0x13E,0x13A,0x332,0x202,0x3FE,0x000,0x000,0x000,0x000, /* 45 */ -0x000,0x000,0x3FE,0x202,0x332,0x13A,0x12E,0x108,0x128,0x138,0x120,0x330,0x210,0x3F0,0x000,0x000,0x000,0x000, /* 46 */ -0x000,0x000,0x0FC,0x184,0x332,0x27A,0x24E,0x27E,0x242,0x272,0x252,0x332,0x18A,0x0FE,0x000,0x000,0x000,0x000, /* 47 */ -0x000,0x000,0x3DE,0x252,0x252,0x252,0x272,0x202,0x272,0x252,0x252,0x252,0x252,0x3DE,0x000,0x000,0x000,0x000, /* 48 */ -0x000,0x000,0x0FC,0x084,0x0CC,0x048,0x048,0x048,0x048,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 49 */ -0x000,0x000,0x07E,0x042,0x066,0x024,0x024,0x024,0x3E4,0x264,0x264,0x264,0x30C,0x1F8,0x000,0x000,0x000,0x000, /* 4A */ -0x000,0x000,0x3FE,0x232,0x332,0x132,0x126,0x10C,0x10C,0x126,0x132,0x332,0x232,0x3FE,0x000,0x000,0x000,0x000, /* 4B */ -0x000,0x000,0x3F0,0x210,0x330,0x120,0x120,0x120,0x120,0x12E,0x13A,0x332,0x202,0x3FE,0x000,0x000,0x000,0x000, /* 4C */ -0x000,0x000,0x3CF,0x279,0x231,0x201,0x201,0x249,0x279,0x249,0x249,0x249,0x249,0x3CF,0x000,0x000,0x000,0x000, /* 4D */ -0x000,0x000,0x3DE,0x252,0x232,0x212,0x202,0x242,0x262,0x272,0x252,0x252,0x252,0x3DE,0x000,0x000,0x000,0x000, /* 4E */ -0x000,0x000,0x1FC,0x306,0x272,0x252,0x252,0x252,0x252,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 4F */ -0x000,0x000,0x3FC,0x206,0x332,0x132,0x132,0x106,0x13C,0x120,0x120,0x330,0x210,0x3F0,0x000,0x000,0x000,0x000, /* 50 */ -0x000,0x000,0x1FC,0x306,0x272,0x252,0x252,0x252,0x252,0x272,0x252,0x242,0x306,0x1E6,0x022,0x03E,0x000,0x000, /* 51 */ -0x000,0x000,0x3FC,0x206,0x332,0x132,0x132,0x106,0x126,0x132,0x132,0x332,0x232,0x3FE,0x000,0x000,0x000,0x000, /* 52 */ -0x000,0x000,0x1FC,0x306,0x272,0x272,0x33E,0x18C,0x0E6,0x3F2,0x272,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 53 */ -0x000,0x000,0x3FF,0x201,0x201,0x2CD,0x3CF,0x048,0x048,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 54 */ -0x000,0x000,0x3DE,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 55 */ -0x000,0x000,0x3CF,0x249,0x249,0x249,0x249,0x249,0x249,0x279,0x333,0x186,0x0CC,0x078,0x000,0x000,0x000,0x000, /* 56 */ -0x000,0x000,0x3CF,0x249,0x249,0x249,0x249,0x279,0x249,0x249,0x201,0x333,0x132,0x1FE,0x000,0x000,0x000,0x000, /* 57 */ -0x000,0x000,0x3CF,0x249,0x279,0x333,0x086,0x0CC,0x0CC,0x186,0x333,0x279,0x249,0x3CF,0x000,0x000,0x000,0x000, /* 58 */ -0x000,0x000,0x3CF,0x249,0x249,0x279,0x333,0x186,0x0CC,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 59 */ -0x000,0x000,0x3FF,0x201,0x279,0x2F3,0x3E6,0x0CC,0x198,0x337,0x26D,0x279,0x201,0x3FF,0x000,0x000,0x000,0x000, /* 5A */ -0x000,0x000,0x0FC,0x084,0x09C,0x090,0x090,0x090,0x090,0x090,0x090,0x09C,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 5B */ -0x000,0x000,0x000,0x380,0x2C0,0x260,0x230,0x318,0x18C,0x0C6,0x062,0x032,0x01A,0x00E,0x000,0x000,0x000,0x000, /* 5C */ -0x000,0x000,0x0FC,0x084,0x0E4,0x024,0x024,0x024,0x024,0x024,0x024,0x0E4,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 5D */ -0x070,0x0D8,0x18C,0x326,0x272,0x3DE,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 5E */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x3FF,0x201,0x3FF,0x000,0x000, /* 5F */ -0x0F0,0x090,0x098,0x0C8,0x078,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 60 */ -0x000,0x000,0x000,0x000,0x000,0x1F8,0x10C,0x1E4,0x304,0x264,0x264,0x266,0x312,0x1FE,0x000,0x000,0x000,0x000, /* 61 */ -0x000,0x000,0x3E0,0x220,0x320,0x138,0x10C,0x126,0x132,0x132,0x132,0x132,0x106,0x1FC,0x000,0x000,0x000,0x000, /* 62 */ -0x000,0x000,0x000,0x000,0x000,0x1FC,0x306,0x272,0x25E,0x240,0x25E,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 63 */ -0x000,0x000,0x07C,0x044,0x064,0x0E4,0x184,0x324,0x264,0x264,0x264,0x266,0x312,0x1FE,0x000,0x000,0x000,0x000, /* 64 */ -0x000,0x000,0x000,0x000,0x000,0x1FC,0x306,0x272,0x202,0x27E,0x25E,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 65 */ -0x000,0x000,0x0F8,0x18C,0x124,0x134,0x33C,0x210,0x330,0x120,0x120,0x330,0x210,0x3F0,0x000,0x000,0x000,0x000, /* 66 */ -0x000,0x000,0x000,0x000,0x000,0x1FE,0x312,0x266,0x264,0x264,0x264,0x264,0x304,0x3E4,0x264,0x30C,0x1F8,0x000, /* 67 */ -0x000,0x000,0x3E0,0x220,0x320,0x13C,0x126,0x112,0x132,0x132,0x132,0x332,0x232,0x3FE,0x000,0x000,0x000,0x000, /* 68 */ -0x000,0x000,0x078,0x048,0x048,0x0F8,0x088,0x0C8,0x048,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 69 */ -0x000,0x000,0x01E,0x012,0x012,0x03E,0x022,0x032,0x012,0x012,0x012,0x012,0x1F2,0x132,0x132,0x186,0x0FC,0x000, /* 6A */ -0x000,0x000,0x3E0,0x220,0x320,0x13E,0x132,0x126,0x10C,0x10C,0x126,0x332,0x232,0x3FE,0x000,0x000,0x000,0x000, /* 6B */ -0x000,0x000,0x0F8,0x088,0x0C8,0x048,0x048,0x048,0x048,0x048,0x048,0x0CC,0x084,0x0FC,0x000,0x000,0x000,0x000, /* 6C */ -0x000,0x000,0x000,0x000,0x000,0x3FE,0x233,0x201,0x249,0x249,0x249,0x249,0x249,0x3FF,0x000,0x000,0x000,0x000, /* 6D */ -0x000,0x000,0x000,0x000,0x000,0x3FC,0x246,0x332,0x132,0x132,0x132,0x132,0x132,0x1FE,0x000,0x000,0x000,0x000, /* 6E */ -0x000,0x000,0x000,0x000,0x000,0x1FC,0x306,0x272,0x252,0x252,0x252,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 6F */ -0x000,0x000,0x000,0x000,0x000,0x3FC,0x246,0x332,0x132,0x132,0x132,0x132,0x106,0x13C,0x330,0x210,0x3F0,0x000, /* 70 */ -0x000,0x000,0x000,0x000,0x000,0x1FE,0x312,0x266,0x264,0x264,0x264,0x264,0x304,0x1E4,0x066,0x042,0x07E,0x000, /* 71 */ -0x000,0x000,0x000,0x000,0x000,0x3FC,0x246,0x312,0x132,0x13E,0x120,0x330,0x210,0x3F0,0x000,0x000,0x000,0x000, /* 72 */ -0x000,0x000,0x000,0x000,0x000,0x1FC,0x306,0x272,0x33E,0x088,0x3E6,0x272,0x306,0x1FC,0x000,0x000,0x000,0x000, /* 73 */ -0x000,0x000,0x070,0x0D0,0x090,0x39C,0x204,0x39C,0x090,0x090,0x09E,0x092,0x0C6,0x07C,0x000,0x000,0x000,0x000, /* 74 */ -0x000,0x000,0x000,0x000,0x000,0x3FC,0x264,0x264,0x264,0x264,0x264,0x266,0x312,0x1FE,0x000,0x000,0x000,0x000, /* 75 */ -0x000,0x000,0x000,0x000,0x000,0x3CF,0x249,0x249,0x249,0x279,0x333,0x186,0x0CC,0x078,0x000,0x000,0x000,0x000, /* 76 */ -0x000,0x000,0x000,0x000,0x000,0x3CF,0x249,0x249,0x279,0x249,0x249,0x201,0x333,0x1FE,0x000,0x000,0x000,0x000, /* 77 */ -0x000,0x000,0x000,0x000,0x000,0x3CF,0x279,0x333,0x084,0x0CC,0x084,0x333,0x279,0x3CF,0x000,0x000,0x000,0x000, /* 78 */ -0x000,0x000,0x000,0x000,0x000,0x3DE,0x252,0x252,0x252,0x252,0x252,0x272,0x302,0x1F2,0x3E6,0x20C,0x3F8,0x000, /* 79 */ -0x000,0x000,0x000,0x000,0x000,0x3FE,0x202,0x264,0x3C8,0x090,0x13E,0x272,0x202,0x3FE,0x000,0x000,0x000,0x000, /* 7A */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 7B */ -0x000,0x000,0x078,0x048,0x048,0x048,0x048,0x078,0x048,0x048,0x048,0x048,0x048,0x078,0x000,0x000,0x000,0x000, /* 7C */ -0x000,0x000,0x0E0,0x110,0x0C8,0x048,0x04C,0x022,0x04C,0x048,0x048,0x0C8,0x110,0x0E0,0x000,0x000,0x000,0x000, /* 7D */ -0x000,0x000,0x1EE,0x312,0x246,0x3BC,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 7E */ -0x000,0x000,0x000,0x000,0x020,0x050,0x088,0x124,0x252,0x252,0x272,0x202,0x1FC,0x000,0x000,0x000,0x000,0x000, /* 7F */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 80 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 81 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 82 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 83 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 84 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 85 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 86 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 87 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 88 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 89 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8A */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8B */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8C */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8D */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8E */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 8F */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 90 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 91 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 92 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 93 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 94 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 95 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 96 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 97 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 98 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 99 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9A */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9B */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9C */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9D */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9E */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* 9F */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A0 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A1 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A2 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A3 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A4 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A5 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A6 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A7 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A8 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* A9 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AA */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AB */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AC */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AD */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AE */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* AF */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B0 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B1 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B2 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B3 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B4 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B5 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B6 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B7 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B8 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* B9 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BA */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BB */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BC */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BD */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BE */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* BF */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C0 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C1 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C2 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C3 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C4 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C5 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C6 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C7 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C8 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* C9 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CA */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CB */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CC */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CD */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CE */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* CF */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D0 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D1 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D2 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D3 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D4 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D5 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D6 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D7 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D8 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* D9 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DA */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DB */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DC */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DD */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DE */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* DF */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E0 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E1 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E2 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E3 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E4 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E5 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E6 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E7 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E8 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* E9 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EA */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EB */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EC */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* ED */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EE */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* EF */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F0 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F1 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F2 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F3 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F4 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F5 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F6 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F7 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F8 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x078,0x048,0x048,0x078,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* F9 */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x078,0x048,0x078,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* FA */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* FB */ -0x000,0x3F8,0x20C,0x304,0x104,0x104,0x104,0x104,0x1FC,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* FC */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000, /* FD */ -0x000,0x000,0x000,0x000,0x1FC,0x104,0x104,0x104,0x104,0x104,0x104,0x104,0x1FC,0x000,0x000,0x000,0x000,0x000, /* FE */ -0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000 /* FF */ -}; - - return (font_eng_contour[(int)c*(OSD_FONT_HEIGHT+2) + y] >> (9-x))&1; - } //contour() - - }; //class - -} //namespace - - -#endif diff --git a/desmume/src/softrender_v3sysfont.h b/desmume/src/softrender_v3sysfont.h deleted file mode 100644 index 11f0a654d..000000000 --- a/desmume/src/softrender_v3sysfont.h +++ /dev/null @@ -1,940 +0,0 @@ -#include "softrender.h" - -#define xx 1 -#define zz 0 - -namespace softrender { - - class v3sysfont { - public: - static int height() { return 7; } - static int width(char c) { return charByte(c,0); } - static int pixel(char c, int x, int y) { return charByte(c,width(c)*y+x+1); } - static bool valid(char c) { return c>=32; } - static bool haveContour() { return false; } - - static char charByte(byte c, int i) { - - if (c < 32 || c > 128) - c = 2; - else - c -= 32; - - static const char sbA[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,xx,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx}; - - static const char ssA[]= - {5, - zz,zz,zz,zz,zz, - zz,zz,zz,zz,zz, - zz,xx,xx,zz,zz, - xx,zz,zz,xx,zz, - xx,zz,zz,xx,zz, - xx,zz,zz,xx,zz, - zz,xx,xx,zz,xx}; - - static const char sbB[]= - {4, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,xx,zz}; - - static const char ssB[]= - {4, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,xx,zz}; - - static const char sbC[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,zz,zz,xx, - zz,xx,xx,zz}; - - static const char ssC[]= - {3, - zz,zz,zz, - zz,zz,zz, - zz,xx,xx, - xx,zz,zz, - xx,zz,zz, - xx,zz,zz, - zz,xx,xx}; - - static const char sbD[]= - {4, - xx,xx,zz,zz, - xx,zz,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,xx,zz, - xx,xx,zz,zz}; - - - static const char ssD[]= - {4, - zz,zz,zz,xx, - zz,zz,zz,xx, - zz,xx,xx,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - zz,xx,xx,xx}; - - static const char sbE[]= - {4, - xx,xx,xx,xx, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,xx,xx,zz, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,xx,xx,xx}; - - static const char ssE[]= - {4, - zz,zz,zz,zz, - zz,zz,zz,zz, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,xx,xx,zz, - xx,zz,zz,zz, - zz,xx,xx,zz}; - - static const char sbF[]= - {4, - xx,xx,xx,xx, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,xx,xx,zz, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,zz,zz,zz}; - - static const char ssF[]= - {4, - zz,zz,xx,zz, - zz,xx,zz,xx, - zz,xx,zz,zz, - xx,xx,xx,zz, - zz,xx,zz,zz, - zz,xx,zz,zz, - zz,xx,zz,zz}; - - static const char sbG[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,zz,xx,xx, - xx,zz,zz,xx, - zz,xx,xx,zz}; - - static const char ssG[]= - {4, - zz,zz,zz,zz, - zz,zz,zz,zz, - zz,xx,xx,zz, - xx,zz,zz,zz, - xx,zz,xx,xx, - xx,zz,zz,xx, - zz,xx,xx,zz}; - - - static const char sbH[]= - {4, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,xx,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx}; - - static const char ssH[]= - {4, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx}; - - static const char sbI[]= - {3, - xx,xx,xx, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - xx,xx,xx}; - - static const char ssI[]= - {1, - zz, - xx, - zz, - xx, - xx, - xx, - xx}; - - static const char sbJ[]= - {4, - zz,zz,zz,xx, - zz,zz,zz,xx, - zz,zz,zz,xx, - zz,zz,zz,xx, - zz,zz,zz,xx, - xx,zz,zz,xx, - zz,xx,xx,zz}; - - static const char ssJ[]= - {3, - zz,zz,xx, - zz,zz,zz, - zz,zz,xx, - zz,zz,xx, - zz,zz,xx, - xx,zz,xx, - zz,xx,zz}; - - static const char sbK[]= - {4, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,xx,zz, - xx,xx,zz,zz, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx}; - - static const char ssK[]= - {3, - xx,zz,zz, - xx,zz,zz, - xx,zz,xx, - xx,zz,xx, - xx,xx,zz, - xx,zz,xx, - xx,zz,xx}; - - static const char sbL[]= - {3, - xx,zz,zz, - xx,zz,zz, - xx,zz,zz, - xx,zz,zz, - xx,zz,zz, - xx,zz,zz, - xx,xx,xx}; - - static const char ssL[]= - {3, - zz,zz,zz, - zz,zz,zz, - xx,zz,zz, - xx,zz,zz, - xx,zz,zz, - xx,zz,zz, - xx,xx,xx}; - - static const char sbM[]= - {5, - xx,zz,zz,zz,xx, - xx,xx,zz,xx,xx, - xx,zz,xx,zz,xx, - xx,zz,xx,zz,xx, - xx,zz,zz,zz,xx, - xx,zz,zz,zz,xx, - xx,zz,zz,zz,xx}; - - static const char ssM[]= - {5, - zz,zz,zz,zz,zz, - zz,zz,zz,zz,zz, - zz,xx,zz,xx,zz, - xx,zz,xx,zz,xx, - xx,zz,xx,zz,xx, - xx,zz,xx,zz,xx, - xx,zz,xx,zz,xx}; - - static const char sbN[]= - {4, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,zz,xx, - xx,zz,xx,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx}; - - static const char ssN[]= - {4, - zz,zz,zz,zz, - zz,zz,zz,zz, - xx,zz,xx,zz, - xx,xx,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx}; - - static const char sbO[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - zz,xx,xx,zz}; - - static const char ssO[]= - {4, - zz,zz,zz,zz, - zz,zz,zz,zz, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - zz,xx,xx,zz}; - - static const char sbP[]= - {4, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,xx,zz, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,zz,zz,zz}; - - static const char ssP[]= - {4, - zz,zz,zz,zz, - zz,zz,zz,zz, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,xx,zz, - xx,zz,zz,zz}; - - static const char sbQ[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,xx,zz, - zz,xx,zz,xx}; - - static const char ssQ[]= - {4, - zz,zz,zz,zz, - zz,zz,zz,zz, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,xx,zz, - zz,xx,zz,xx}; - - static const char sbR[]= - {4, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - xx,zz,zz,xx}; - - static const char ssR[]= - {4, - zz,zz,zz,zz, - zz,zz,zz,zz, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,zz,zz,zz}; - - static const char sbS[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,zz, - zz,xx,xx,zz, - zz,zz,zz,xx, - xx,zz,zz,xx, - zz,xx,xx,zz,}; - - static const char ssS[]= - {3, - zz,zz,zz, - zz,zz,zz, - zz,xx,xx, - xx,zz,zz, - zz,xx,zz, - zz,zz,xx, - xx,xx,zz}; - - static const char sbT[]= - {3, - xx,xx,xx, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz}; - - static const char ssT[]= - {3, - zz,xx,zz, - zz,xx,zz, - xx,xx,xx, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,xx}; - - static const char sbU[]= - {3, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,xx,xx}; - - static const char ssU[]= - {3, - zz,zz,zz, - zz,zz,zz, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,xx,xx}; - - static const char sbV[]= - {3, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - zz,xx,zz}; - - static const char ssV[]= - {3, - zz,zz,zz, - zz,zz,zz, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - zz,xx,zz}; - - static const char sbW[]= - {5, - xx,zz,zz,zz,xx, - xx,zz,zz,zz,xx, - xx,zz,zz,zz,xx, - xx,zz,xx,zz,xx, - xx,zz,xx,zz,xx, - xx,xx,zz,xx,xx, - xx,zz,zz,zz,xx}; - - static const char ssW[]= - {5, - zz,zz,zz,zz,zz, - zz,zz,zz,zz,zz, - xx,zz,zz,zz,xx, - xx,zz,xx,zz,xx, - xx,zz,xx,zz,xx, - xx,xx,zz,xx,xx, - xx,zz,zz,zz,xx}; - - static const char sbX[]= - {5, - xx,zz,zz,zz,xx, - xx,zz,zz,zz,xx, - zz,xx,zz,xx,zz, - zz,zz,xx,zz,zz, - zz,xx,zz,xx,zz, - xx,zz,zz,zz,xx, - xx,zz,zz,zz,xx}; - - static const char ssX[]= - {3, - zz,zz,zz, - zz,zz,zz, - xx,zz,xx, - xx,zz,xx, - zz,xx,zz, - xx,zz,xx, - xx,zz,xx}; - - static const char sbY[]= - {3, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz}; - - static const char ssY[]= - {3, - zz,zz,zz, - zz,zz,zz, - xx,zz,xx, - xx,zz,xx, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz}; - - static const char sbZ[]= - {5, - xx,xx,xx,xx,xx, - zz,zz,zz,zz,xx, - zz,zz,zz,xx,zz, - zz,zz,xx,zz,zz, - zz,xx,zz,zz,zz, - xx,zz,zz,zz,zz, - xx,xx,xx,xx,xx}; - - static const char ssZ[]= - {4, - zz,zz,zz,zz, - zz,zz,zz,zz, - xx,xx,xx,xx, - zz,zz,zz,xx, - zz,zz,xx,zz, - zz,xx,zz,zz, - xx,xx,xx,xx}; - - static const char s1[]= - {3, - zz,xx,zz, - xx,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - xx,xx,xx}; - - static const char s2[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - zz,zz,zz,xx, - zz,zz,zz,xx, - zz,zz,xx,zz, - zz,xx,zz,zz, - xx,xx,xx,xx}; - - static const char s3[]= - {4, - xx,xx,xx,xx, - zz,zz,zz,xx, - zz,zz,zz,xx, - zz,xx,xx,xx, - zz,zz,zz,xx, - zz,zz,zz,xx, - xx,xx,xx,xx}; - - static const char s4[]= - {4, - xx,zz,xx,zz, - xx,zz,xx,zz, - xx,zz,xx,zz, - xx,xx,xx,xx, - zz,zz,xx,zz, - zz,zz,xx,zz, - zz,zz,xx,zz}; - - static const char s5[]= - {4, - xx,xx,xx,xx, - xx,zz,zz,zz, - xx,zz,zz,zz, - xx,xx,xx,zz, - zz,zz,zz,xx, - zz,zz,zz,xx, - xx,xx,xx,zz}; - - static const char s6[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,zz, - xx,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - zz,xx,xx,zz}; - - static const char s7[]= - {3, - xx,xx,xx, - zz,zz,xx, - zz,zz,xx, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz, - zz,xx,zz}; - - static const char s8[]= - {4, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - zz,xx,xx,zz, - xx,zz,zz,xx, - xx,zz,zz,xx, - zz,xx,xx,zz}; - - static const char s9[]= - {3, - xx,xx,xx, - xx,zz,xx, - xx,zz,xx, - xx,xx,xx, - zz,zz,xx, - zz,zz,xx, - xx,xx,xx}; - - static const char s0[]= - {3, - xx,xx,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,zz,xx, - xx,xx,xx}; - - static const char sQuote[]={3, - xx,zz,xx, - xx,zz,xx, - zz,zz,zz, - zz,zz,zz, - zz,zz,zz, - zz,zz,zz, - zz,zz,zz}; - - static const char sYow[]={3, - zz,xx,zz, - xx,xx,xx, - xx,xx,xx, - xx,xx,xx, - zz,xx,zz, - zz,zz,zz, - zz,xx,zz}; - - static const char sQuotes[]={1, - xx, - xx, - zz, - zz, - zz, - zz, - zz}; - - - static const char sComma[]={2, - zz,zz, - zz,zz, - zz,zz, - zz,zz, - zz,zz, - zz,xx, - xx,zz}; - - static const char sPeriod[]={1, - zz, - zz, - zz, - zz, - zz, - zz, - xx}; - - static const char sMinus[]={2, - zz,zz, - zz,zz, - zz,zz, - xx,xx, - zz,zz, - zz,zz, - zz,zz}; - - static const char sQuest[]={3, - xx,xx,xx, - zz,zz,xx, - zz,zz,xx, - zz,zz,xx, - zz,xx,xx, - zz,zz,zz, - zz,xx,zz}; - - static const char sColon[]={1, - zz, - zz, - xx, - zz, - xx, - zz, - zz}; - - static const char sch[]={3, - zz,xx,zz, - xx,xx,xx, - xx,xx,xx, - xx,xx,xx, - zz,xx,zz}; - - static const char usc[]={2, - zz,zz, - zz,zz, - zz,zz, - zz,zz, - xx,xx}; - - static const char star[]={5, - zz,zz,zz,zz,zz, - zz,zz,zz,zz,zz, - xx,xx,xx,xx,xx, - xx,xx,xx,xx,xx, - zz,zz,zz,zz,zz, - zz,zz,zz,zz,zz, - zz,zz,zz,zz,zz}; - - static const char ss[]={2, - xx,xx, - xx,xx, - xx,xx, - xx,xx, - xx,xx, - xx,xx, - xx,xx}; - - static const char sra[]={3, - zz,zz,zz, - xx,zz,zz, - xx,xx,zz, - xx,xx,xx, - xx,xx,zz, - xx,zz,zz, - zz,zz,zz}; - - static const char slParen[]={2, - zz,xx, - xx,zz, - xx,zz, - xx,zz, - xx,zz, - xx,zz, - zz,xx}; - - static const char srParen[]={2, - xx,zz, - zz,xx, - zz,xx, - zz,xx, - zz,xx, - zz,xx, - xx,zz}; - - static const char ssemic[]={2, - zz,xx, - zz,zz, - zz,xx, - zz,xx, - zz,xx, - zz,xx, - xx,zz}; - - static const char sSlash[]={3, - zz,zz,zz, - zz,zz,xx, - zz,zz,xx, - zz,xx,zz, - zz,xx,zz, - xx,zz,zz, - xx,zz,zz}; - - static const char sbSlash[]={3, - zz,zz,zz, - xx,zz,zz, - xx,zz,zz, - zz,xx,zz, - zz,xx,zz, - zz,zz,xx, - zz,zz,xx}; - - static const char sBlock[]={3, - zz,zz,zz, - zz,zz,zz, - xx,xx,xx, - xx,xx,xx, - xx,xx,xx, - zz,zz,zz, - zz,zz,zz}; - - static const char sBlank[]={2, - zz,zz, - zz,zz, - zz,zz, - zz,zz, - zz,zz, - zz,zz, - zz,zz}; - - static const char sAT[]= - { 5, - zz,xx,xx,xx,zz, - xx,zz,zz,zz,xx, - xx,zz,xx,xx,xx, - xx,zz,xx,zz,xx, - xx,zz,xx,xx,xx, - xx,zz,zz,zz,zz, - zz,xx,xx,xx,zz}; - - static const char sNum[]= - { 5, - zz,zz,zz,zz,zz, - zz,xx,zz,xx,zz, - xx,xx,xx,xx,xx, - zz,xx,zz,xx,zz, - xx,xx,xx,xx,xx, - zz,xx,zz,xx,zz, - zz,zz,zz,zz,zz}; - - static const char sBuck[]= - {5, - zz,zz,zz,zz,zz, - zz,zz,zz,zz,zz, - zz,zz,xx,zz,zz, - zz,xx,xx,xx,zz, - xx,xx,xx,xx,xx, - zz,zz,zz,zz,zz, - zz,zz,zz,zz,zz}; - - static const char sPercnt[]= - { - 5, - zz,zz,zz,zz,zz, - xx,zz,zz,zz,xx, - zz,zz,zz,xx,zz, - zz,zz,xx,zz,zz, - zz,xx,zz,zz,zz, - xx,zz,zz,zz,xx, - zz,zz,zz,zz,zz}; - - static const char sCarot[]= - { 3, - zz,xx,zz, - xx,zz,xx, - zz,zz,zz, - zz,zz,zz, - zz,zz,zz, - zz,zz,zz, - zz,zz,zz}; - - static const char sCopy[]= - { 7, - zz,xx,xx,xx,xx,xx,zz, - xx,zz,zz,zz,zz,zz,xx, - xx,zz,zz,xx,xx,zz,xx, - xx,zz,xx,zz,zz,zz,xx, - xx,zz,zz,xx,xx,zz,xx, - xx,zz,zz,zz,zz,zz,xx, - zz,xx,xx,xx,xx,xx,zz}; - - static const char sPtr[]= - { 5, - xx,zz,zz,zz,zz, - xx,xx,zz,zz,zz, - xx,xx,xx,zz,zz, - xx,xx,xx,xx,zz, - xx,xx,xx,xx,xx, - zz,zz,xx,zz,zz, - zz,zz,zz,xx,zz}; - - static const char check[]= - { 7, - xx,zz,zz,zz,zz,zz,xx, - zz,xx,zz,zz,zz,xx,zz, - zz,zz,xx,zz,xx,zz,zz, - zz,zz,zz,xx,zz,zz,zz, - zz,zz,xx,zz,xx,zz,zz, - zz,xx,zz,zz,zz,xx,zz, - xx,zz,zz,zz,zz,zz,xx }; - - static const char target[]= - { 7, - zz,zz,zz,xx,zz,zz,zz, - zz,zz,xx,zz,xx,zz,zz, - zz,xx,zz,zz,zz,xx,zz, - xx,zz,zz,xx,zz,zz,xx, - zz,xx,zz,zz,zz,xx,zz, - zz,zz,xx,zz,xx,zz,zz, - zz,zz,zz,xx,zz,zz,zz }; - - static const char *smal_tbl[]= - { sBlank, - sYow, sQuote, sNum, sBuck,sPercnt, sCarot, sQuotes, slParen, - srParen, star, sPtr, sComma, sMinus,sPeriod, sSlash, s0, - s1, s2, s3, s4, s5, s6, s7, s8, - s9, sColon, ssemic, ss, ss, sra, sQuest, sAT, - sbA, sbB, sbC, sbD, sbE, sbF, sbG, sbH, - sbI, sbJ, sbK, sbL, sbM, sbN, sbO, sbP, - sbQ, sbR, sbS, sbT, sbU, sbV, sbW, sbX, - sbY, sbZ, ss, sbSlash, ss, sCarot, usc, sch, - ssA, ssB, ssC, ssD, ssE, ssF, ssG, ssH, - ssI, ssJ, ssK, ssL, ssM, ssN, ssO, ssP, - ssQ, ssR, ssS, ssT, ssU, ssV, ssW, ssX, - ssY, ssZ, ss, target, check, sCopy, sBlock, ss}; - - return smal_tbl[c][i]; - } - - - }; - -} - - - - -#undef xx -#undef zz diff --git a/desmume/src/windows/DeSmuME_2005.sln b/desmume/src/windows/DeSmuME_2005.sln index 1d43d6786..7f670c9f6 100644 --- a/desmume/src/windows/DeSmuME_2005.sln +++ b/desmume/src/windows/DeSmuME_2005.sln @@ -21,6 +21,6 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - AMDCaProjectFile = C:\svn\desmume\trunk\desmume\src\windows\CodeAnalyst\DeSmuME_2005.caw + AMDCaProjectFile = D:\svn\desmume\trunk\desmume\src\windows\CodeAnalyst\DeSmuME_2005.caw EndGlobalSection EndGlobal diff --git a/desmume/src/windows/DeSmuME_2005.vcproj b/desmume/src/windows/DeSmuME_2005.vcproj index 501f6b851..126140241 100644 --- a/desmume/src/windows/DeSmuME_2005.vcproj +++ b/desmume/src/windows/DeSmuME_2005.vcproj @@ -51,7 +51,7 @@ FavorSizeOrSpeed="0" EnableFiberSafeOptimizations="false" WholeProgramOptimization="false" - AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples" + AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples" PreprocessorDefinitions="DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;SPU_INTERPOLATE;HAVE_LIBZ;HAVE_LIBZZIP;NOMINMAX;DEBUG;EXPERIMENTAL_WIFI" ExceptionHandling="1" BasicRuntimeChecks="0" @@ -145,7 +145,7 @@ OmitFramePointers="true" EnableFiberSafeOptimizations="true" WholeProgramOptimization="true" - AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples" + AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples" PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;HAVE_LIBZ;HAVE_LIBZZIP;SPU_INTERPOLATE;NOMINMAX;NDEBUG;RELEASE;EXPERIMENTAL_WIFI" StringPooling="true" ExceptionHandling="1" @@ -174,7 +174,7 @@ Name="VCLinkerTool" AdditionalDependencies="agg-2.5.lib lua-5.1.4-x86.lib glib-2.20.1-x86.lib vfw32.lib winmm.lib opengl32.lib glu32.lib ws2_32.lib user32.lib gdi32.lib directx\dxguid.lib shell32.lib comdlg32.lib directx\dxerr8.lib directx\dsound.lib directx\dinput8.lib directx\ddraw.lib zlib-2005-x32.lib zziplib-2005-x32.lib shlwapi.lib winpcap\wpcap.lib 7zip.lib" OutputFile="$(OutDir)\$(ProjectName)_release.exe" - AdditionalLibraryDirectories=".\zlib123;.\zziplib;glib-2.20.1\lib;.\lua\lib;.\7z" + AdditionalLibraryDirectories=".\zlib123;.\zziplib;glib-2.20.1\lib;.\lua\lib;.\7z;agg" DelayLoadDLLs="wpcap.dll" GenerateDebugInformation="true" GenerateMapFile="true" @@ -243,7 +243,7 @@ OmitFramePointers="true" EnableFiberSafeOptimizations="true" WholeProgramOptimization="false" - AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples" + AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples" PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;HAVE_LIBZ;HAVE_LIBZZIP;SPU_INTERPOLATE;NOMINMAX;NDEBUG;RELEASE;EXPERIMENTAL_WIFI" StringPooling="true" ExceptionHandling="1" @@ -1082,18 +1082,6 @@ RelativePath="..\shaders.h" > - - - - - - diff --git a/desmume/src/windows/DeSmuME_2008.vcproj b/desmume/src/windows/DeSmuME_2008.vcproj index 04e735b64..cc634597a 100644 --- a/desmume/src/windows/DeSmuME_2008.vcproj +++ b/desmume/src/windows/DeSmuME_2008.vcproj @@ -52,7 +52,7 @@ FavorSizeOrSpeed="0" EnableFiberSafeOptimizations="false" WholeProgramOptimization="false" - AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples" + AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples" PreprocessorDefinitions="DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;BETA_VERSION;SPU_INTERPOLATE;NOMINMAX;EXPERIMENTAL_WIFI;HAVE_LIBZ;HAVE_LIBZZIP" ExceptionHandling="1" BasicRuntimeChecks="3" @@ -142,7 +142,7 @@ OmitFramePointers="true" EnableFiberSafeOptimizations="true" WholeProgramOptimization="true" - AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples" + AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples" PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;HAVE_LIBZ;HAVE_LIBZZIP;SSE2;SPU_INTERPOLATE;NOMINMAX;RELEASE;EXPERIMENTAL_WIFI;NDEBUG" StringPooling="true" ExceptionHandling="1" @@ -235,7 +235,7 @@ OmitFramePointers="true" EnableFiberSafeOptimizations="true" WholeProgramOptimization="false" - AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;..\agg\include;..\agg\examples" + AdditionalIncludeDirectories=".;..;"lua\lua-5.1.4\src";"glib-2.20.1\build";"glib-2.20.1\build\glib";.\zlib123;.\zziplib;.\winpcap;userconfig;defaultconfig;.\7z;.\agg\include;.\agg\examples" PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;HAVE_LIBZ;HAVE_LIBZZIP;SSE2;SPU_INTERPOLATE;NOMINMAX;RELEASE;EXPERIMENTAL_WIFI;NDEBUG" StringPooling="true" ExceptionHandling="1" @@ -437,10 +437,6 @@ RelativePath="..\saves.cpp" > - - diff --git a/desmume/src/windows/agg/agg-2.5.lib b/desmume/src/windows/agg/agg-2.5.lib index 82b6bede2..600a2cf5d 100644 Binary files a/desmume/src/windows/agg/agg-2.5.lib and b/desmume/src/windows/agg/agg-2.5.lib differ diff --git a/desmume/src/agg/agg-2.5.sln b/desmume/src/windows/agg/agg-2.5.sln similarity index 100% rename from desmume/src/agg/agg-2.5.sln rename to desmume/src/windows/agg/agg-2.5.sln diff --git a/desmume/src/agg/agg-2.5.vcproj b/desmume/src/windows/agg/agg-2.5.vcproj similarity index 94% rename from desmume/src/agg/agg-2.5.vcproj rename to desmume/src/windows/agg/agg-2.5.vcproj index 44e0ad147..7d0d816fe 100644 --- a/desmume/src/agg/agg-2.5.vcproj +++ b/desmume/src/windows/agg/agg-2.5.vcproj @@ -17,7 +17,7 @@ @@ -79,7 +79,7 @@ Lock(NULL, &ddsd, DDLOCK_WAIT, NULL); - //extern void AGGDraw(); AGGDraw(); - //aggDraw.composite(GPU_screen); - - if (res == DD_OK) + if (res==DDERR_SURFACELOST) { - char* buffer = (char*)ddsd.lpSurface; + LOG("DirectDraw buffers is lost\n"); + if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) + IDirectDrawSurface7_Restore(lpBackSurface); + } else if(res != DD_OK) + return; - int i, j, sz=256*sizeof(u32); - switch(ddsd.ddpfPixelFormat.dwRGBBitCount) + char* buffer = (char*)ddsd.lpSurface; + + int i, j, sz=256*sizeof(u32); + switch(ddsd.ddpfPixelFormat.dwRGBBitCount) + { + case 24: + case 32: { - case 24: - case 32: + switch(GPU_rotation) { - switch(GPU_rotation) + case 0: + case 180: { - case 0: - case 180: + if(ddsd.lPitch == 1024) { - if(ddsd.lPitch == 1024) + for(int i = 0; i < 98304; i++) + ((u32*)buffer)[i] = RGB15TO24_REVERSE(((u16*)GPU_screen)[i]); + } + else + { + for(int y = 0; y < 384; y++) { - for(int i = 0; i < 98304; i++) - ((u32*)buffer)[i] = RGB15TO24_REVERSE(((u16*)GPU_screen)[i]); - } - else - { - for(int y = 0; y < 384; y++) - { - for(int x = 0; x < 256; x++) - ((u32*)buffer)[x] = RGB15TO24_REVERSE(((u16*)GPU_screen)[(y * 384) + x]); + for(int x = 0; x < 256; x++) + ((u32*)buffer)[x] = RGB15TO24_REVERSE(((u16*)GPU_screen)[(y * 384) + x]); - buffer += ddsd.lPitch; - } + buffer += ddsd.lPitch; } } - break; - case 90: - case 270: - { - if(ddsd.lPitch == 1536) - { - for(int i = 0; i < 98304; i++) - ((u32*)buffer)[i] = RGB15TO24_REVERSE(((u16*)GPU_screen)[i]); - } - else - { - for(int y = 0; y < 256; y++) - { - for(int x = 0; x < 384; x++) - ((u32*)buffer)[x] = RGB15TO24_REVERSE(((u16*)GPU_screen)[(y * 256) + x]); - - buffer += ddsd.lPitch; - } - } - } - break; } - } - - //aggDraw.composite(ddsd.lpSurface); - break; - - case 16: - { - switch(GPU_rotation) + break; + case 90: + case 270: { - case 0: - case 180: + if(ddsd.lPitch == 1536) { - if(ddsd.lPitch == 512) + for(int i = 0; i < 98304; i++) + ((u32*)buffer)[i] = RGB15TO24_REVERSE(((u16*)GPU_screen)[i]); + } + else + { + for(int y = 0; y < 256; y++) { - for(int i = 0; i < 98304; i++) - ((u16*)buffer)[i] = RGB15TO16_REVERSE(((u16*)GPU_screen)[i]); - } - else - { - for(int y = 0; y < 384; y++) - { - for(int x = 0; x < 256; x++) - ((u16*)buffer)[x] = RGB15TO16_REVERSE(((u16*)GPU_screen)[(y * 384) + x]); + for(int x = 0; x < 384; x++) + ((u32*)buffer)[x] = RGB15TO24_REVERSE(((u16*)GPU_screen)[(y * 256) + x]); - buffer += ddsd.lPitch; - } + buffer += ddsd.lPitch; } } - break; - case 90: - case 270: - { - if(ddsd.lPitch == 768) - { - for(int i = 0; i < 98304; i++) - ((u16*)buffer)[i] = RGB15TO16_REVERSE(((u16*)GPU_screen)[i]); - } - else - { - for(int y = 0; y < 256; y++) - { - for(int x = 0; x < 384; x++) - ((u16*)buffer)[x] = RGB15TO16_REVERSE(((u16*)GPU_screen)[(y * 256) + x]); - - buffer += ddsd.lPitch; - } - } - } - break; } + break; } - break; + } - default: + break; + + case 16: + { + switch(GPU_rotation) { - INFO("Unsupported color depth: %i bpp\n", ddsd.ddpfPixelFormat.dwRGBBitCount); - emu_halt(); + case 0: + case 180: + { + if(ddsd.lPitch == 512) + { + for(int i = 0; i < 98304; i++) + ((u16*)buffer)[i] = RGB15TO16_REVERSE(((u16*)GPU_screen)[i]); + } + else + { + for(int y = 0; y < 384; y++) + { + for(int x = 0; x < 256; x++) + ((u16*)buffer)[x] = RGB15TO16_REVERSE(((u16*)GPU_screen)[(y * 384) + x]); + + buffer += ddsd.lPitch; + } + } + } + break; + case 90: + case 270: + { + if(ddsd.lPitch == 768) + { + for(int i = 0; i < 98304; i++) + ((u16*)buffer)[i] = RGB15TO16_REVERSE(((u16*)GPU_screen)[i]); + } + else + { + for(int y = 0; y < 256; y++) + { + for(int x = 0; x < 384; x++) + ((u16*)buffer)[x] = RGB15TO16_REVERSE(((u16*)GPU_screen)[(y * 256) + x]); + + buffer += ddsd.lPitch; + } + } + } + break; } - break; } + break; - //extern void AGGDraw(unsigned char * buffer); AGGDraw((unsigned char*) ddsd.lpSurface); - - - lpBackSurface->Unlock((LPRECT)ddsd.lpSurface); - - // Main screen - if(lpPrimarySurface->Blt(&MainScreenRect, lpBackSurface, &MainScreenSrcRect, DDBLT_WAIT, 0) == DDERR_SURFACELOST) + default: { - LOG("DirectDraw buffers is lost\n"); - if(IDirectDrawSurface7_Restore(lpPrimarySurface) == DD_OK) - IDirectDrawSurface7_Restore(lpBackSurface); - } - - // Sub screen - if(lpPrimarySurface->Blt(&SubScreenRect, lpBackSurface, &SubScreenSrcRect, DDBLT_WAIT, 0) == DDERR_SURFACELOST) - { - LOG("DirectDraw buffers is lost\n"); - if(IDirectDrawSurface7_Restore(lpPrimarySurface) == DD_OK) - IDirectDrawSurface7_Restore(lpBackSurface); - } - - // Gap - if(ScreenGap > 0) - { - //u32 color = gapColors[win_fw_config.fav_colour]; - //u32 color_rev = (((color & 0xFF) << 16) | (color & 0xFF00) | ((color & 0xFF0000) >> 16)); - u32 color_rev = 0xFFFFFF; - - HDC dc; - HBRUSH brush; - - dc = GetDC(MainWindow->getHWnd()); - brush = CreateSolidBrush(color_rev); - - FillRect(dc, &GapRect, brush); - - DeleteObject((HGDIOBJ)brush); - ReleaseDC(MainWindow->getHWnd(), dc); + INFO("Unsupported color depth: %i bpp\n", ddsd.ddpfPixelFormat.dwRGBBitCount); + emu_halt(); } + break; } - else + + + lpBackSurface->Unlock((LPRECT)ddsd.lpSurface); + + // Main screen + if(lpPrimarySurface->Blt(&MainScreenRect, lpBackSurface, &MainScreenSrcRect, DDBLT_WAIT, 0) == DDERR_SURFACELOST) { - if (res==DDERR_SURFACELOST) - { - LOG("DirectDraw buffers is lost\n"); - if (IDirectDrawSurface7_Restore(lpPrimarySurface)==DD_OK) - IDirectDrawSurface7_Restore(lpBackSurface); - } + LOG("DirectDraw buffers is lost\n"); + if(IDirectDrawSurface7_Restore(lpPrimarySurface) == DD_OK) + IDirectDrawSurface7_Restore(lpBackSurface); + } + + // Sub screen + if(lpPrimarySurface->Blt(&SubScreenRect, lpBackSurface, &SubScreenSrcRect, DDBLT_WAIT, 0) == DDERR_SURFACELOST) + { + LOG("DirectDraw buffers is lost\n"); + if(IDirectDrawSurface7_Restore(lpPrimarySurface) == DD_OK) + IDirectDrawSurface7_Restore(lpBackSurface); + } + + // Gap + if(ScreenGap > 0) + { + //u32 color = gapColors[win_fw_config.fav_colour]; + //u32 color_rev = (((color & 0xFF) << 16) | (color & 0xFF00) | ((color & 0xFF0000) >> 16)); + u32 color_rev = 0xFFFFFF; + + HDC dc; + HBRUSH brush; + + dc = GetDC(MainWindow->getHWnd()); + brush = CreateSolidBrush(color_rev); + + FillRect(dc, &GapRect, brush); + + DeleteObject((HGDIOBJ)brush); + ReleaseDC(MainWindow->getHWnd(), dc); } }