Setup Display to standard resolution instead of high res

This commit is contained in:
Jaby
2022-10-04 21:54:40 +02:00
parent 051ae637f1
commit ec4bdac5ec
5 changed files with 60 additions and 20 deletions

View File

@@ -45,14 +45,21 @@ namespace GPU {
static constexpr uint16_t FirstVisiblePixelV = 0xA3;
GP1.write(Command::GP1::DisplayMode(Mode::PAL()));
GPU::Screen::set_offset(78, 43);
GPU::Screen::Range::set_offset(0, 0);
#else
static constexpr uint16_t FirstVisiblePixelV = 0x88;
GP1.write(Command::GP1::DisplayMode(Mode::NTSC()));
GPU::Screen::set_offset(78, 45);
GPU::Screen::set_offset(0, 5); //< Random values
#endif
}
void exchange_buffer_and_display();
}
static void set_draw_area(uint16_t x, uint16_t y) {
GP0.write(Command::GP0::DrawAreaTopLeft(x, y));
GP0.write(Command::GP0::DrawAreaBottomRight((x + Display::Width), (y + Display::Height)));
}
static void quick_fill_fast(const Color24& color, const PositionU16& pos, const SizeU16& size) {

View File

@@ -18,8 +18,8 @@ namespace GPU {
void setup() {
GP1.write(Command::GP1::Reset());
Screen::configurate();
Screen::exchange_buffer_and_display();
quick_fill_fast(Color24::Black(), PositionU16(0, 0), SizeU16(640, 480));
GP1.write(Command::GP1::DisplayArea(0, 0));
quick_fill_fast(Color24::Black(), PositionU16(0, 0), SizeU16(640, 512));
}
}

View File

@@ -1,23 +1,36 @@
#include <PSX/GPU/GPU.hpp>
#include "../include/GPU/GPU.hpp"
namespace GPU {
namespace Screen {
#ifdef JABYENGINE_PAL
static constexpr uint16_t ScanlinesV = 288;
#else
static constexpr uint16_t ScanlinesV = 240;
#endif //JABYENGINE_PAL
uint8_t CurrentDisplayAreaID = 1; //< Setup will call exchange and set it to 0
#ifndef USE_NO$PSX
void set_offset(uint16_t x, uint16_t y) {
GP1.write(Command::GP1::HorizontalDisplayRange((x << 3), (x + Display::Width) << 3));
GP1.write(Command::GP1::VerticalDisplayRange(y, y + Display::Height));
namespace Range {
#ifdef JABYENGINE_PAL
static constexpr uint16_t ScanlinesV = 288;
#else
static constexpr uint16_t ScanlinesV = 240;
#endif //JABYENGINE_PAL
#ifndef USE_NO$PSX
void set_offset(uint16_t x, uint16_t y) {
x += 78;
y += 43;
GP1.write(Command::GP1::HorizontalDisplayRange((x << 3), (x + Display::Width) << 3));
GP1.write(Command::GP1::VerticalDisplayRange(y, y + Display::Height));
}
#else
void set_offset(uint16_t x, uint16_t y) {
GP1.write(Command::GP1::HorizontalDisplayRange(x, (x + Display::Width*8)));
GP1.write(Command::GP1::VerticalDisplayRange(y - (ScanlinesV/2), y + (ScanlinesV/2)));
}
#endif //USE_NO$PSX
}
#else
void set_offset(uint16_t x, uint16_t y) {
GP1.write(Command::GP1::HorizontalDisplayRange(x, (x + Display::Width*8)));
GP1.write(Command::GP1::VerticalDisplayRange(y - (ScanlinesV/2), y + (ScanlinesV/2)));
void exchange_buffer_and_display() {
GPU::set_draw_area(0, (Display::Height*CurrentDisplayAreaID));
CurrentDisplayAreaID ^= 1;
GP1.write(Command::GP1::DisplayArea(0, (Display::Height*CurrentDisplayAreaID)));
}
#endif //USE_NO$PSX
}
}