+52
-11
@@ -148,7 +148,7 @@ void core1_lcd_draw_line(const uint_fast8_t line)
|
||||
[pixels_buffer[x] & 3];
|
||||
}
|
||||
|
||||
mk_ili9225_set_address(line + 15, 0xDB - 30);
|
||||
//mk_ili9225_set_address(line + 15, 0xDB - 30);
|
||||
//mk_ili9225_set_x(line + 15);
|
||||
#if USE_DMA
|
||||
mk_ili9225_write_pixels_start();
|
||||
@@ -194,7 +194,8 @@ void main_core1(void)
|
||||
#endif
|
||||
|
||||
/* Set LCD window to DMG size. */
|
||||
//mk_ili9225_set_window(15, LCD_HEIGHT+15, 29, LCD_WIDTH+29);
|
||||
mk_ili9225_set_window(15, LCD_HEIGHT + 15 - 1,
|
||||
30, LCD_WIDTH + 30 - 1);
|
||||
|
||||
while(1)
|
||||
{
|
||||
@@ -232,8 +233,8 @@ void lcd_draw_line(struct gb_s *gb, const uint8_t pixels[LCD_WIDTH],
|
||||
cmd.data = line;
|
||||
|
||||
//__atomic_store_n(&lcd_line_busy, 1, __ATOMIC_SEQ_CST);
|
||||
//__aeabi_memcpy4(pixels_buffer, pixels, LCD_WIDTH / 4);
|
||||
memcpy(pixels_buffer, pixels, LCD_WIDTH);
|
||||
__aeabi_memcpy4(pixels_buffer, pixels, LCD_WIDTH / 4);
|
||||
//memcpy(pixels_buffer, pixels, LCD_WIDTH);
|
||||
multicore_fifo_push_blocking(cmd.full);
|
||||
}
|
||||
|
||||
@@ -314,6 +315,9 @@ int main(void)
|
||||
} while(HEDLEY_LIKELY(gb.gb_frame == 0));
|
||||
|
||||
frames++;
|
||||
|
||||
/* Required since we do not know whether a button remains
|
||||
* pressed over a serial connection. */
|
||||
gb.direct.joypad = 0xFF;
|
||||
input = getchar_timeout_us(0);
|
||||
if(input == PICO_ERROR_TIMEOUT)
|
||||
@@ -341,29 +345,35 @@ int main(void)
|
||||
#endif
|
||||
case 'c':
|
||||
{
|
||||
static ili9225_color_mode_e mode = ILI9225_COLOR_MODE_FULL;
|
||||
union core_cmd cmd;
|
||||
|
||||
mode = !mode;
|
||||
cmd.cmd = CORE_CMD_IDLE_SET;
|
||||
cmd.data = ILI9225_COLOR_MODE_FULL;
|
||||
cmd.data = mode;
|
||||
multicore_fifo_push_blocking(cmd.full);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'i':
|
||||
{
|
||||
union core_cmd cmd;
|
||||
cmd.cmd = CORE_CMD_IDLE_SET;
|
||||
cmd.data = ILI9225_COLOR_MODE_8COLOR;
|
||||
multicore_fifo_push_blocking(cmd.full);
|
||||
gb.direct.interlace = !gb.direct.interlace;
|
||||
break;
|
||||
}
|
||||
|
||||
case 'b':
|
||||
{
|
||||
uint64_t end_time;
|
||||
uint32_t diff;
|
||||
uint32_t fps;
|
||||
|
||||
end_time = time_us_64();
|
||||
diff = end_time-start_time;
|
||||
fps = frames/diff;
|
||||
printf("Frames: %u\n"
|
||||
"Time: %llu us\n",
|
||||
frames, end_time-start_time);
|
||||
"Time: %lu us\n"
|
||||
"FPS: %lu\n",
|
||||
frames, diff, fps);
|
||||
stdio_flush();
|
||||
frames = 0;
|
||||
start_time = time_us_64();
|
||||
@@ -371,11 +381,42 @@ int main(void)
|
||||
}
|
||||
|
||||
case '\n':
|
||||
case '\r':
|
||||
{
|
||||
gb.direct.joypad_bits.start = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case '\b':
|
||||
{
|
||||
gb.direct.joypad_bits.select = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case '8':
|
||||
{
|
||||
gb.direct.joypad_bits.up = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case '2':
|
||||
{
|
||||
gb.direct.joypad_bits.down = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case '4':
|
||||
{
|
||||
gb.direct.joypad_bits.left= 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case '6':
|
||||
{
|
||||
gb.direct.joypad_bits.right = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case 'z':
|
||||
{
|
||||
gb.direct.joypad_bits.a = 0;
|
||||
|
||||
+12
-14
@@ -387,21 +387,19 @@ unsigned mk_ili9225_init(void)
|
||||
{ MK_ILI9225_REG_DRIVER_OUTPUT_CTRL, 0x011C },
|
||||
/* Set LCD inversion to disabled. */
|
||||
{ MK_ILI9225_REG_LCD_AC_DRIVING_CTRL, 0x0100 },
|
||||
/* Use BGR mode (swap blue with red).
|
||||
* Increment vertical and horizontal address.
|
||||
* Use vertical image.
|
||||
* FIXME: Why is BGR enabled? */
|
||||
{ MK_ILI9225_REG_ENTRY_MODE, 0x0008 },
|
||||
/* Increment vertical and horizontal address.
|
||||
* Use vertical image. */
|
||||
{ MK_ILI9225_REG_ENTRY_MODE, 0x0018 },
|
||||
/* Turn off all display outputs. */
|
||||
{ MK_ILI9225_REG_DISPLAY_CTRL, 0x0000 },
|
||||
/* Set porches to 8 lines. */
|
||||
{ MK_ILI9225_REG_BLANK_PERIOD_CTRL, 0x0808 },
|
||||
{ MK_ILI9225_REG_BLANK_PERIOD_CTRL, 0x0808 },
|
||||
/* Use 1-clock delay to gate output and edge. */
|
||||
{ MK_ILI9225_REG_FRAME_CYCLE_CTRL, 0x1100 },
|
||||
{ MK_ILI9225_REG_FRAME_CYCLE_CTRL, 0x1100 },
|
||||
/* Ignore RGB interface settings. */
|
||||
{ MK_ILI9225_REG_INTERFACE_CTRL, 0x0000 },
|
||||
{ MK_ILI9225_REG_INTERFACE_CTRL, 0x0000 },
|
||||
/* Set oscillation frequency to 266.6 kHz. */
|
||||
{ MK_ILI9225_REG_OSC_CTRL, 0x0701 },
|
||||
{ MK_ILI9225_REG_OSC_CTRL, 0x0701 },
|
||||
/* Set VCI recycling to 2 clocks. */
|
||||
{ MK_ILI9225_REG_VCI_RECYCLING, 0x0020 },
|
||||
/* Initialise RAM Address to 0x0 px. */
|
||||
@@ -409,7 +407,7 @@ unsigned mk_ili9225_init(void)
|
||||
{ MK_ILI9225_REG_RAM_ADDR_SET2, 0x0000 },
|
||||
|
||||
/* Set scanning position to full screen. */
|
||||
{ MK_ILI9225_REG_GATE_SCAN_CTRL, 0x0000 },
|
||||
{ MK_ILI9225_REG_GATE_SCAN_CTRL, 0x0000 },
|
||||
/* Set end scan position to 219 + 1 px (0xDB). */
|
||||
{ MK_ILI9225_REG_VERT_SCROLL_CTRL1, 0x00DB },
|
||||
/* Set start scan position to 0 px. */
|
||||
@@ -422,10 +420,10 @@ unsigned mk_ili9225_init(void)
|
||||
/* Set partial screen driving start to 0 px. */
|
||||
{ MK_ILI9225_REG_PART_DRIVING_POS2, 0x0000 },
|
||||
/* Set window to 176 x 220 px (full screen). */
|
||||
{ MK_ILI9225_REG_HORI_WIN_ADDR1, 0x00AF },
|
||||
{ MK_ILI9225_REG_HORI_WIN_ADDR2, 0x0000 },
|
||||
{ MK_ILI9225_REG_VERT_WIN_ADDR1, 0x00DB },
|
||||
{ MK_ILI9225_REG_VERT_WIN_ADDR2, 0x0000 },
|
||||
{ MK_ILI9225_REG_HORI_WIN_ADDR1, 0x00AF },
|
||||
{ MK_ILI9225_REG_HORI_WIN_ADDR2, 0x0000 },
|
||||
{ MK_ILI9225_REG_VERT_WIN_ADDR1, 0x00DB },
|
||||
{ MK_ILI9225_REG_VERT_WIN_ADDR2, 0x0000 },
|
||||
|
||||
/* Gamma curve data. */
|
||||
{ MK_ILI9225_REG_GAMMA_CTRL1, 0x0000 },
|
||||
|
||||
Reference in New Issue
Block a user