still WIP

This commit is contained in:
Jeff Epler 2025-03-14 09:36:19 -05:00
parent 0528f6a466
commit e60a4d174b
2 changed files with 19 additions and 15 deletions

View file

@ -88,7 +88,7 @@ set(UMAC_SOURCES
) )
set(MEMSIZE 128 CACHE STRING "Memory size, in KB") set(MEMSIZE 128 CACHE STRING "Memory size, in KB")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -DPICO -DMUSASHI_CNF=\\\"../include/m68kconf.h\\\" -DUMAC_MEMSIZE=${MEMSIZE}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ggdb -g3 -O3 -DPICO -DMUSASHI_CNF=\\\"../include/m68kconf.h\\\" -DUMAC_MEMSIZE=${MEMSIZE}")
if (USE_SD) if (USE_SD)
add_compile_definitions(USE_SD=1) add_compile_definitions(USE_SD=1)

View file

@ -106,7 +106,6 @@ static uint32_t vactive_line[] = {
}; };
typedef struct { typedef struct {
uint32_t *framebuffer;
uint32_t *dma_commands; uint32_t *dma_commands;
size_t dma_commands_len; // in words size_t dma_commands_len; // in words
uint8_t dma_pixel_channel; uint8_t dma_pixel_channel;
@ -151,8 +150,7 @@ void video_init(uint32_t *framebuffer) {
self->dma_pixel_channel = dma_claim_unused_channel(true); self->dma_pixel_channel = dma_claim_unused_channel(true);
self->dma_command_channel = dma_claim_unused_channel(true); self->dma_command_channel = dma_claim_unused_channel(true);
size_t words_per_line; size_t words_per_line = DISP_WIDTH / (8 * sizeof(uint32_t));
words_per_line = DISP_WIDTH / 8 / sizeof(uint32_t);
size_t command_word = 0; size_t command_word = 0;
size_t frontporch_start = MODE_V_TOTAL_LINES - MODE_V_FRONT_PORCH; size_t frontporch_start = MODE_V_TOTAL_LINES - MODE_V_FRONT_PORCH;
@ -169,6 +167,7 @@ void video_init(uint32_t *framebuffer) {
DMA_CH0_CTRL_TRIG_INCR_READ_BITS | DMA_CH0_CTRL_TRIG_INCR_READ_BITS |
DMA_CH0_CTRL_TRIG_EN_BITS; DMA_CH0_CTRL_TRIG_EN_BITS;
uint32_t dma_pixel_ctrl = dma_ctrl | (DMA_SIZE_32 << DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB); uint32_t dma_pixel_ctrl = dma_ctrl | (DMA_SIZE_32 << DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB);
// dma_pixel_ctrl |= DMA_CH0_CTRL_TRIG_BSWAP_BITS;
dma_ctrl |= (DMA_SIZE_32 << DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB); dma_ctrl |= (DMA_SIZE_32 << DMA_CH0_CTRL_TRIG_DATA_SIZE_LSB);
uint32_t dma_write_addr = (uint32_t)&hstx_fifo_hw->fifo; uint32_t dma_write_addr = (uint32_t)&hstx_fifo_hw->fifo;
@ -203,19 +202,24 @@ void video_init(uint32_t *framebuffer) {
self->dma_commands[command_word++] = 0; self->dma_commands[command_word++] = 0;
// B&W // B&W
uint8_t rot = 25; // ??? really ???
hstx_ctrl_hw->expand_tmds =
rot << HSTX_CTRL_EXPAND_TMDS_L2_ROT_LSB |
rot << HSTX_CTRL_EXPAND_TMDS_L1_ROT_LSB |
rot << HSTX_CTRL_EXPAND_TMDS_L0_ROT_LSB;
size_t shifts_before_empty = 32;
size_t color_depth = 1; size_t color_depth = 1;
uint8_t rot = 1; // 24 + color_depth;
hstx_ctrl_hw->expand_tmds =
(color_depth - 1) << HSTX_CTRL_EXPAND_TMDS_L2_NBITS_LSB |
rot << HSTX_CTRL_EXPAND_TMDS_L2_ROT_LSB |
(color_depth - 1) << HSTX_CTRL_EXPAND_TMDS_L1_NBITS_LSB |
rot << HSTX_CTRL_EXPAND_TMDS_L1_ROT_LSB |
(color_depth - 1) << HSTX_CTRL_EXPAND_TMDS_L0_NBITS_LSB |
rot << HSTX_CTRL_EXPAND_TMDS_L0_ROT_LSB;
size_t pixels_per_word = 32;
size_t shifts_before_empty = (pixels_per_word % 32);
size_t shift_amount = color_depth % 32;
// Pixels come in 32 bits at a time. color_depth dictates the number // Pixels come in 32 bits at a time. color_depth dictates the number
// of pixels per word. Control symbols (RAW) are an entire 32-bit word. // of pixels per word. Control symbols (RAW) are an entire 32-bit word.
hstx_ctrl_hw->expand_shift = hstx_ctrl_hw->expand_shift =
shifts_before_empty << HSTX_CTRL_EXPAND_SHIFT_ENC_N_SHIFTS_LSB | (shifts_before_empty << HSTX_CTRL_EXPAND_SHIFT_ENC_N_SHIFTS_LSB) |
color_depth << HSTX_CTRL_EXPAND_SHIFT_ENC_SHIFT_LSB | (shift_amount << HSTX_CTRL_EXPAND_SHIFT_ENC_SHIFT_LSB) |
1 << HSTX_CTRL_EXPAND_SHIFT_RAW_N_SHIFTS_LSB | 1 << HSTX_CTRL_EXPAND_SHIFT_RAW_N_SHIFTS_LSB |
0 << HSTX_CTRL_EXPAND_SHIFT_RAW_SHIFT_LSB; 0 << HSTX_CTRL_EXPAND_SHIFT_RAW_SHIFT_LSB;
@ -224,9 +228,9 @@ void video_init(uint32_t *framebuffer) {
hstx_ctrl_hw->csr = 0; hstx_ctrl_hw->csr = 0;
hstx_ctrl_hw->csr = hstx_ctrl_hw->csr =
HSTX_CTRL_CSR_EXPAND_EN_BITS | HSTX_CTRL_CSR_EXPAND_EN_BITS |
5u << HSTX_CTRL_CSR_CLKDIV_LSB | (5u << HSTX_CTRL_CSR_CLKDIV_LSB) |
5u << HSTX_CTRL_CSR_N_SHIFTS_LSB | (5u << HSTX_CTRL_CSR_N_SHIFTS_LSB) |
2u << HSTX_CTRL_CSR_SHIFT_LSB | (2u << HSTX_CTRL_CSR_SHIFT_LSB) |
HSTX_CTRL_CSR_EN_BITS; HSTX_CTRL_CSR_EN_BITS;
// XXX this may be wrong, because pico-mac is using an overclock (but is it OC'ing HSTX? not sure) // XXX this may be wrong, because pico-mac is using an overclock (but is it OC'ing HSTX? not sure)