From db323c85c584301756bd29dc680ba03a520dac82 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Fri, 8 Mar 2024 18:27:12 +0800 Subject: [PATCH] dve: initial description of DVE bits This also implements primitive cable-detection and video output. --- dve.hpp | 35 +++++++++++++++ gdrom/gdrom_bits.hpp | 2 - headers.mk | 5 +++ holly/object_list_data.hpp | 2 - holly/video_output.cpp | 85 +++++++++++++++++++++++++++++++++++++ holly/video_output.hpp | 8 ++++ maple/maple_bus_bits.hpp | 22 +++++----- regs/dve.csv | 15 +++++++ regs/dve.ods | Bin 0 -> 15513 bytes regs/gen/core_bits.py | 10 +++-- sh7091/sh7091_bits.hpp | 2 - 11 files changed, 164 insertions(+), 22 deletions(-) create mode 100644 dve.hpp create mode 100644 holly/video_output.cpp create mode 100644 regs/dve.csv create mode 100644 regs/dve.ods diff --git a/dve.hpp b/dve.hpp new file mode 100644 index 0000000..1ed33be --- /dev/null +++ b/dve.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include + +namespace vreg { + namespace output_mode { + constexpr uint32_t vga = 0b00 << 0; + constexpr uint32_t rgb = 0b10 << 0; + constexpr uint32_t cvbs_yc = 0b11 << 0; + + constexpr uint32_t bit_mask = 0x3 << 0; + } +} + +namespace pdtra { + namespace cable_type { + constexpr uint32_t vga = 0b00 << 8; + constexpr uint32_t rbg = 0b10 << 8; + constexpr uint32_t cvbs_yc = 0b11 << 8; + + constexpr uint32_t bit_mask = 0x3 << 8; + } + + namespace video_mode { + constexpr uint32_t ntsc = 0b000 << 2; + constexpr uint32_t pal = 0b001 << 2; + constexpr uint32_t pal_m = 0b011 << 2; + constexpr uint32_t pal_n = 0b101 << 2; + constexpr uint32_t forced_ntsc_interlacing = 0b110 << 2; + constexpr uint32_t forced_pal_interlacing = 0b111 << 2; + + constexpr uint32_t bit_mask = 0x7 << 2; + } +} + diff --git a/gdrom/gdrom_bits.hpp b/gdrom/gdrom_bits.hpp index 3abb9f1..ee342d7 100644 --- a/gdrom/gdrom_bits.hpp +++ b/gdrom/gdrom_bits.hpp @@ -2,8 +2,6 @@ #include -#include "../float_uint32.hpp" - namespace gdrom { namespace status { constexpr uint32_t bsy(uint32_t reg) { return (reg >> 7) & 0x1; } diff --git a/headers.mk b/headers.mk index 27a82f7..31dfc21 100644 --- a/headers.mk +++ b/headers.mk @@ -14,6 +14,11 @@ sh7091/sh7091_bits.hpp: regs/sh7091_bits.csv regs/gen/core_bits.py systembus_bits.hpp: regs/systembus_bits.csv regs/gen/core_bits.py python regs/gen/core_bits.py $< > $@ +# DVE + +dve.hpp: regs/dve.csv regs/gen/core_bits.py + python regs/gen/core_bits.py $< > $@ + # HOLLY holly/core_bits.hpp: regs/core_bits.csv regs/gen/core_bits.py diff --git a/holly/object_list_data.hpp b/holly/object_list_data.hpp index c6227ab..18682f3 100644 --- a/holly/object_list_data.hpp +++ b/holly/object_list_data.hpp @@ -2,8 +2,6 @@ #include -#include "../float_uint32.hpp" - namespace object_list_data { namespace pointer_type { constexpr uint32_t triangle_strip = 0b000 << 29; diff --git a/holly/video_output.cpp b/holly/video_output.cpp new file mode 100644 index 0000000..be749bb --- /dev/null +++ b/holly/video_output.cpp @@ -0,0 +1,85 @@ +#include + +#include "sh7091/serial.hpp" +#include "dve.hpp" +#include "holly.hpp" +#include "holly_bits.hpp" + +#include "video_output.hpp" + +namespace video_output { + +void set_framebuffer_resolution(const uint32_t x_size, const uint32_t y_size) +{ + holly.Y_COEFF = y_coeff::coefficient_1(0x80) + | y_coeff::coefficient_0_2(0x40); + + // in 6.10 fixed point; 0x0400 is 1x vertical scale + holly.SCALER_CTL = scaler_ctl::vertical_scale_factor(0x0400); + + holly.FB_BURSTCTRL = fb_burstctrl::wr_burst(0x09) + | fb_burstctrl::vid_lat(0x3f) + | fb_burstctrl::vid_burst(0x39); + + holly.FB_X_CLIP = fb_x_clip::fb_x_clip_max(x_size - 1) + | fb_x_clip::fb_x_clip_min(0); + + holly.FB_Y_CLIP = fb_y_clip::fb_y_clip_max(y_size - 1) + | fb_y_clip::fb_y_clip_min(0); + + holly.FB_R_SIZE = fb_r_size::fb_modulus(1) + | fb_r_size::fb_y_size(y_size - 3) + | fb_r_size::fb_x_size((x_size * 16) / 32 - 1); +} + +void set_mode(const struct mode& mode) +{ + holly.FB_R_CTRL = mode.fb_r_ctrl + | fb_r_ctrl::fb_depth::_0565_rgb_16bit + | fb_r_ctrl::fb_enable; + + holly.SPG_LOAD = mode.spg_load; + holly.SPG_HBLANK = mode.spg_hblank; + holly.SPG_VBLANK = mode.spg_vblank; + holly.SPG_WIDTH = mode.spg_width; + holly.SPG_CONTROL = mode.spg_control; + + holly.VO_STARTX = mode.vo_startx; + holly.VO_STARTY = mode.vo_starty; + holly.VO_CONTROL = mode.vo_control; + + holly.SPG_HBLANK_INT = mode.spg_hblank_int; + holly.SPG_VBLANK_INT = mode.spg_vblank_int; +} + +uint32_t get_cable_type() +{ + // set all pins to input + sh7091.BSC.PCTRA = 0; + + // get cable type from pins 9 + 8 + return sh7091.BSC.PDTRA & pdtra::cable_type::bit_mask; +} + +void automatic() +{ + switch (get_cable_type()) { + case pdtra::cable_type::vga: + set_mode(vga); + set_framebuffer_resolution(640, 480); + aica.common.VREG(vreg::output_mode::vga); + break; + case pdtra::cable_type::rgb: + set_mode(ntsc_ni); + set_framebuffer_resolution(320, 240); + aica.common.VREG(vreg::output_mode::rgb); + break; + case pdtra::cable_type::cvbs_yc: + set_mode(pal_ni); + set_framebuffer_resolution(320, 240); + aica.common.VREG(vreg::output_mode::cvbs_yc); + break; + } +} + +} diff --git a/holly/video_output.hpp b/holly/video_output.hpp index 49d7394..64adf0a 100644 --- a/holly/video_output.hpp +++ b/holly/video_output.hpp @@ -1,3 +1,5 @@ +#pragma once + #include namespace video_output { @@ -16,4 +18,10 @@ struct mode { const uint32_t spg_vblank_int; }; +extern const struct mode vga; +extern const struct mode ntsc_ni; +extern const struct mode ntsc_i; +extern const struct mode pal_ni; +extern const struct mode pal_i; + } diff --git a/maple/maple_bus_bits.hpp b/maple/maple_bus_bits.hpp index 20df07d..79b17c0 100644 --- a/maple/maple_bus_bits.hpp +++ b/maple/maple_bus_bits.hpp @@ -2,30 +2,28 @@ #include -#include "../float_uint32.hpp" - namespace host_instruction { constexpr uint32_t end_flag = 1 << 31; - + namespace port_select { constexpr uint32_t a = 0 << 16; constexpr uint32_t b = 1 << 16; constexpr uint32_t c = 2 << 16; constexpr uint32_t d = 3 << 16; - + constexpr uint32_t bit_mask = 0x3 << 16; } - + namespace pattern { constexpr uint32_t normal = 0b000 << 8; constexpr uint32_t light_gun_mode = 0b010 << 8; constexpr uint32_t reset = 0b011 << 8; constexpr uint32_t return_from_light_gun_mode = 0b100 << 8; constexpr uint32_t nop = 0b111 << 8; - + constexpr uint32_t bit_mask = 0x7 << 8; } - + constexpr uint32_t transfer_length(uint32_t num) { return (num & 0xff) << 0; } } @@ -39,25 +37,25 @@ namespace ap { constexpr uint32_t b = 0b01 << 6; constexpr uint32_t c = 0b10 << 6; constexpr uint32_t d = 0b11 << 6; - + constexpr uint32_t bit_mask = 0x3 << 6; } - + namespace de { constexpr uint32_t device = 1 << 5; constexpr uint32_t expansion_device = 0 << 5; constexpr uint32_t port = 0 << 5; - + constexpr uint32_t bit_mask = 0x1 << 5; } - + namespace lm_bus { constexpr uint32_t _4 = 0b10000 << 0; constexpr uint32_t _3 = 0b01000 << 0; constexpr uint32_t _2 = 0b00100 << 0; constexpr uint32_t _1 = 0b00010 << 0; constexpr uint32_t _0 = 0b00001 << 0; - + constexpr uint32_t bit_mask = 0x1f << 0; } } diff --git a/regs/dve.csv b/regs/dve.csv new file mode 100644 index 0000000..f12d65d --- /dev/null +++ b/regs/dve.csv @@ -0,0 +1,15 @@ +"register_name","enum_name","bits","bit_name","value","mask","description" +"VREG","output_mode","1-0","vga","0b00",, +"VREG","output_mode","1-0","rgb","0b10",, +"VREG","output_mode","1-0","cvbs_yc","0b11",, +,,,,,, +"PDTRA","cable_type","9-8","vga","0b00",, +"PDTRA","cable_type","9-8","rbg","0b10",, +"PDTRA","cable_type","9-8","cvbs_yc","0b11",, +,,,,,, +"PDTRA","video_mode","4-2","ntsc","0b000",, +"PDTRA","video_mode","4-2","pal","0b001",, +"PDTRA","video_mode","4-2","pal_m","0b011",, +"PDTRA","video_mode","4-2","pal_n","0b101",, +"PDTRA","video_mode","4-2","forced_ntsc_interlacing","0b110",, +"PDTRA","video_mode","4-2","forced_pal_interlacing","0b111",, diff --git a/regs/dve.ods b/regs/dve.ods new file mode 100644 index 0000000000000000000000000000000000000000..e5e9db07df6cc7e36d6ca2ab6f5527e9060aae37 GIT binary patch literal 15513 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 G-~B)FDp~XZ literal 0 HcmV?d00001 diff --git a/regs/gen/core_bits.py b/regs/gen/core_bits.py index d58d24b..3861916 100644 --- a/regs/gen/core_bits.py +++ b/regs/gen/core_bits.py @@ -261,13 +261,15 @@ def render_registers(registers, file_namespace): if file_namespace is not None: yield '}' # end of file namespace -def header(): +def header(name): yield "#pragma once" yield "" yield "#include " yield "" - yield '#include "../float_uint32.hpp"' - yield "" + if "core_bits" in name: + # hack + yield '#include "../float_uint32.hpp"' + yield "" if __name__ == "__main__": d = read_input(sys.argv[1]) @@ -275,6 +277,6 @@ if __name__ == "__main__": aggregated = aggregate_registers(d) registers = aggregate_all_enums(aggregated) render, out = renderer() - render(header()) + render(header(sys.argv[1])) render(render_registers(registers, file_namespace)) sys.stdout.write(out.getvalue()) diff --git a/sh7091/sh7091_bits.hpp b/sh7091/sh7091_bits.hpp index 13ff73e..cd49338 100644 --- a/sh7091/sh7091_bits.hpp +++ b/sh7091/sh7091_bits.hpp @@ -2,8 +2,6 @@ #include -#include "../float_uint32.hpp" - namespace ccn { namespace pteh { constexpr uint32_t VPN(uint32_t reg) { return (reg >> 10) & 0x3fffff; }