diff --git a/src/main.c b/src/main.c index 47c84a8..a8a2bdf 100644 --- a/src/main.c +++ b/src/main.c @@ -122,8 +122,8 @@ int main() vga_hsync_program_init(pio, sm1, offset1); printf("Feeding horizontal sync...\n"); // low pulse is X pixels long, and SM runs at 4x of pixel clock - pio_sm_put_blocking(pio, sm1, 63 * 4); - pio_sm_put_blocking(pio, sm1, 775 * 4); + pio_sm_put_blocking(pio, sm1, 64 * 4); + pio_sm_put_blocking(pio, sm1, 765 * 4); // VGA VSYNC program uint offset2 = pio_add_program(pio, &vga_vsync_program); @@ -131,8 +131,9 @@ int main() printf("Starting VGA vsync machine on %u...\n", sm2); vga_vsync_program_init(pio, sm2, offset2); printf("Feeding vertical sync...\n"); - pio_sm_put_blocking(pio, sm2, 2520 * 4); - pio_sm_put_blocking(pio, sm2, 420000 * 4); + // low pulse assert lasts for 3 horizontal lines, then adjust by one + pio_sm_put_blocking(pio, sm2, 3 - 1); + pio_sm_put_blocking(pio, sm2, 500 - 3 - 1); printf("Start!\n"); diff --git a/src/vga.pio b/src/vga.pio index f3b9b42..bc6b580 100644 --- a/src/vga.pio +++ b/src/vga.pio @@ -13,9 +13,10 @@ entrypoint_vga_hsync: mov isr, osr pull -loope: - set y, 15 loop: + nop + irq set 0 + mov x, isr set pins, 0 hsync_pulse: @@ -25,10 +26,9 @@ hsync_pulse: set pins, 1 hsync_idle: jmp x-- hsync_idle - jmp y-- loop + nop + jmp loop - irq set 0 - jmp loope .program vga_vsync @@ -38,11 +38,17 @@ entrypoint_vga_vsync: pull loop: - wait irq 0 + mov x, isr - set pins, 0 vsync_pulse: + wait irq 0 + set pins, 0 jmp x-- vsync_pulse + mov x, osr +vsync_idle: + wait irq 0 set pins, 1 + jmp x-- vsync_idle + jmp loop