From 206adff8514edc74c0fe4e3b27cf1f690e786117 Mon Sep 17 00:00:00 2001 From: goyuken Date: Sun, 25 Nov 2012 01:34:58 +0000 Subject: [PATCH] gba: implement mode 3, mode 5 backdrops. slightly todo, as i don't know how mosaic + affine works on hardware --- BizHawk.MultiClient/output/dll/libmeteor.dll | Bin 137216 -> 137216 bytes .../include/ameteor/graphics/bglayer.hpp | 3 ++ libmeteor/source/graphics/bglayer.cpp | 33 +++++++++++++++--- libmeteor/source/graphics/screen.cpp | 21 +++++++++++ 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/BizHawk.MultiClient/output/dll/libmeteor.dll b/BizHawk.MultiClient/output/dll/libmeteor.dll index 18b0624d241c5b78e507271cef0f08f902c478db..9a0bbf4646561c8d4de265ac36c1a30206a12aa0 100644 GIT binary patch delta 28127 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 delta 27718 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 F=zr{Om*)Tg diff --git a/libmeteor/include/ameteor/graphics/bglayer.hpp b/libmeteor/include/ameteor/graphics/bglayer.hpp index 1409929041..48d19ffe67 100644 --- a/libmeteor/include/ameteor/graphics/bglayer.hpp +++ b/libmeteor/include/ameteor/graphics/bglayer.hpp @@ -46,6 +46,9 @@ namespace AMeteor void DrawLine4 (uint8_t line, uint16_t* ptr, int32_t curX, int32_t curY, int16_t dx, int16_t dmx, int16_t dy, int16_t dmy, bool frame1); + void DrawLine5 (uint16_t* ptr, + int32_t refX, int32_t refY, + int16_t dx, int16_t dy, bool frame1); void FillList (); void UpdateCnt (uint16_t cnt); diff --git a/libmeteor/source/graphics/bglayer.cpp b/libmeteor/source/graphics/bglayer.cpp index 3eeb6939f3..9cc193b2fa 100644 --- a/libmeteor/source/graphics/bglayer.cpp +++ b/libmeteor/source/graphics/bglayer.cpp @@ -308,7 +308,7 @@ namespace AMeteor { int32_t intX, intY; - uint8_t* pChar = m_memory.GetRealAddress(0x06000000); + uint16_t* pChar = (uint16_t*) m_memory.GetRealAddress(0x06000000); for (uint8_t x = 0; x < 240; ++x, ++ptr, curX += dx, curY += dy) { @@ -317,6 +317,7 @@ namespace AMeteor // if we are off layer if (intX < 0 || intX >= 240) + /* if (m_cnt & (0x1 << 13)) { // NOTE : in C++, the modulus can be negative @@ -324,19 +325,20 @@ namespace AMeteor if (intX < 0) intX += 240; } - else + else*/ continue; if (intY < 0 || intY >= 160) + /* if (m_cnt & (0x1 << 13)) { intY %= 160; if (intY < 0) intY += 160; } - else + else*/ continue; - *ptr = pChar[intY * 240 * 2 + intX * 2] | 0x8000; + *ptr = pChar[intY * 240 + intX] | 0x8000; } } @@ -412,6 +414,29 @@ namespace AMeteor } } + void BgLayer::DrawLine5 (uint16_t* ptr, + int32_t curX, int32_t curY, + int16_t dx, int16_t dy, bool frame1) + { + int32_t intX, intY; + + uint16_t* pChar = (uint16_t*) m_memory.GetRealAddress(frame1 ? 0x0600A000 : 0x06000000); + + for (uint8_t x = 0; x < 240; ++x, ++ptr, curX += dx, curY += dy) + { + intX = curX >> 8; + intY = curY >> 8; + + // if we are off layer + if (intX < 0 || intX >= 160) + continue; + if (intY < 0 || intY >= 128) + continue; + + *ptr = pChar[intY * 160 + intX] | 0x8000; + } + } + void BgLayer::UpdateCnt (uint16_t cnt) { if (m_cnt == cnt) diff --git a/libmeteor/source/graphics/screen.cpp b/libmeteor/source/graphics/screen.cpp index 4c5628b33a..06a3d86cc0 100644 --- a/libmeteor/source/graphics/screen.cpp +++ b/libmeteor/source/graphics/screen.cpp @@ -121,6 +121,16 @@ namespace AMeteor // if objects are enabled draw them if (layersOn & (0x1 << 4)) m_objs.DrawLine(line, lineObj); break; + case 3: // bg2 only 15 bit direct color 240x160 + layersOn &= 0xF4; + if (layersOn & (0x1 << 2)) + m_bgLayer2.DrawLine3(lineBg+2*WIDTH, + m_refX2, m_refY2, + m_io.DRead16(Io::BG2PA), + m_io.DRead16(Io::BG2PC)); + if (layersOn & (0x1 << 4)) + m_objs.DrawLineHighOnly(line, lineObj); + break; // TODO (remember, HIGH ONLY for objs, don't make shitty copy paste) case 4: // bg2 only in mode 4 (bitmap 256) layersOn &= 0xF4; @@ -141,6 +151,17 @@ namespace AMeteor // all objs with the current priority m_objs.DrawLineHighOnly(line, lineObj); break; + case 5: // bg2 only 15 bit direct color 160x128 2 frames + layersOn &= 0xF4; + if (layersOn & (0x1 << 2)) + m_bgLayer2.DrawLine5(lineBg+2*WIDTH, + m_refX2, m_refY2, + m_io.DRead16(Io::BG2PA), + m_io.DRead16(Io::BG2PC), + m_dispcnt & (0x1 << 4)); + if (layersOn & (0x1 << 4)) + m_objs.DrawLineHighOnly(line, lineObj); + break; default : met_abort("not supported : " << (m_dispcnt & 0x7)); break;