From c3581b17033710b3f7dca35c6aa4de57ca3fb7a9 Mon Sep 17 00:00:00 2001 From: Wayne Venables Date: Sat, 25 Feb 2023 23:56:46 -0800 Subject: [PATCH] Update sample projects to cmake --- examples/CMakeLists.txt | 20 ++++ examples/vga_ants/CMakeLists.txt | 49 ++++++++++ examples/vga_ants/img/background.cpp | 2 +- examples/vga_ants/img/blacksreds.cpp | 2 +- examples/vga_ants/img/cards.cpp | 2 +- examples/vga_ants/img/castle.cpp | 3 +- examples/vga_ants/img/castle_shadow.cpp | 2 +- examples/vga_ants/img/cloud.cpp | 2 +- examples/vga_ants/img/cursor.cpp | 2 +- examples/vga_ants/img/fence.cpp | 3 +- examples/vga_ants/img/fence_shadow.cpp | 2 +- examples/vga_ants/img/flags.cpp | 2 +- examples/vga_ants/img/grass.cpp | 2 +- examples/vga_ants/img/open.cpp | 2 +- examples/vga_ants/img/open_sel.cpp | 2 +- examples/vga_ants/img/open_sel2.cpp | 2 +- examples/vga_ants/img/select.cpp | 2 +- examples/vga_ants/img/state.cpp | 2 +- examples/vga_ants/img/title.cpp | 2 +- examples/vga_ants/img/title2.cpp | 2 +- examples/vga_ants/img/trumpet.cpp | 2 +- examples/vga_ants/img/win.cpp | 2 +- examples/vga_ants/snd/applause.cpp | 2 +- examples/vga_ants/snd/birds.cpp | 2 +- examples/vga_ants/snd/build_castle.cpp | 2 +- examples/vga_ants/snd/build_fence.cpp | 2 +- examples/vga_ants/snd/card.cpp | 2 +- examples/vga_ants/snd/curse.cpp | 2 +- examples/vga_ants/snd/decrease_stocks.cpp | 2 +- examples/vga_ants/snd/fanfares.cpp | 2 +- examples/vga_ants/snd/increase_power.cpp | 2 +- examples/vga_ants/snd/increase_stocks.cpp | 2 +- examples/vga_ants/snd/ruin_castle.cpp | 2 +- examples/vga_ants/snd/ruin_fence.cpp | 2 +- examples/vga_ants/src/game.cpp | 4 +- examples/vga_ants/src/include.h | 16 --- examples/vga_ants/src/main.cpp | 7 +- examples/vga_ants/src/main.h | 2 + examples/vga_balloons/CMakeLists.txt | 22 +++++ examples/vga_balloons/Makefile | 71 -------------- examples/vga_balloons/img/blue.cpp | 2 +- examples/vga_balloons/img/clouds.cpp | 2 +- examples/vga_balloons/img/green.cpp | 2 +- examples/vga_balloons/img/hotair.cpp | 2 +- examples/vga_balloons/img/red.cpp | 2 +- examples/vga_balloons/img/yellow.cpp | 2 +- examples/vga_balloons/src/include.h | 16 --- examples/vga_balloons/src/main.cpp | 5 +- examples/vga_balloons/src/main.h | 2 + examples/vga_draw/CMakeLists.txt | 25 +++++ examples/vga_draw/img/peter1.cpp | 2 +- examples/vga_draw/img/peter2.cpp | 2 +- examples/vga_draw/img/peter4.cpp | 2 +- examples/vga_draw/img/peter8.cpp | 2 +- examples/vga_draw/img/rpi1.cpp | 2 +- examples/vga_draw/img/rpi2.cpp | 2 +- examples/vga_draw/img/rpi4.cpp | 2 +- examples/vga_draw/img/rpi8.cpp | 2 +- examples/vga_draw/src/include.h | 66 ------------- examples/vga_draw/src/main.cpp | 5 +- examples/vga_draw/src/main.h | 51 ++++++++++ examples/vga_earth/CMakeLists.txt | 18 ++++ examples/vga_earth/Makefile | 67 ------------- examples/vga_earth/img/earth1.cpp | 2 +- examples/vga_earth/img/earth2.cpp | 2 +- examples/vga_earth/src/include.h | 16 --- examples/vga_earth/src/main.cpp | 3 +- examples/vga_earth/src/main.h | 2 + examples/vga_eggs/CMakeLists.txt | 25 +++++ examples/vga_eggs/img/computer.cpp | 2 +- examples/vga_eggs/img/frame.cpp | 2 +- examples/vga_eggs/img/open.cpp | 2 +- examples/vga_eggs/img/select.cpp | 2 +- examples/vga_eggs/img/tiles.cpp | 2 +- examples/vga_eggs/snd/beep.cpp | 2 +- examples/vga_eggs/snd/beep2.cpp | 2 +- examples/vga_eggs/snd/fanfare.cpp | 2 +- examples/vga_eggs/snd/mapple.cpp | 2 +- examples/vga_eggs/src/include.h | 16 --- examples/vga_eggs/src/main.cpp | 6 +- examples/vga_eggs/src/main.h | 2 + examples/vga_fifteen/CMakeLists.txt | 21 ++++ examples/vga_fifteen/Makefile | 70 ------------- examples/vga_fifteen/img/tiles.cpp | 2 +- examples/vga_fifteen/snd/bump.cpp | 2 +- examples/vga_fifteen/snd/fanfare.cpp | 2 +- examples/vga_fifteen/snd/move.cpp | 2 +- examples/vga_fifteen/snd/shuffling.cpp | 2 +- examples/vga_fifteen/src/include.h | 16 --- examples/vga_fifteen/src/main.cpp | 4 +- examples/vga_fifteen/src/main.h | 2 + examples/vga_flag/CMakeLists.txt | 19 ++++ examples/vga_flag/Makefile | 68 ------------- examples/vga_flag/img/clouds.cpp | 2 +- examples/vga_flag/img/flag.cpp | 2 +- examples/vga_flag/img/mast.cpp | 2 +- examples/vga_flag/src/include.h | 16 --- examples/vga_flag/src/main.cpp | 3 +- examples/vga_flag/src/main.h | 2 + examples/vga_ghostracing/CMakeLists.txt | 27 +++++ examples/vga_ghostracing/img/car1.cpp | 2 +- examples/vga_ghostracing/img/car2.cpp | 2 +- examples/vga_ghostracing/img/car3.cpp | 3 +- examples/vga_ghostracing/img/ghost1.cpp | 2 +- examples/vga_ghostracing/img/ghost2.cpp | 2 +- examples/vga_ghostracing/img/ghost3.cpp | 2 +- examples/vga_ghostracing/img/ghost4.cpp | 2 +- examples/vga_ghostracing/img/skyline.cpp | 2 +- examples/vga_ghostracing/img/tiles.cpp | 2 +- examples/vga_ghostracing/snd/engine.cpp | 2 +- examples/vga_ghostracing/src/include.h | 16 --- examples/vga_ghostracing/src/main.cpp | 6 +- examples/vga_ghostracing/src/main.h | 2 + examples/vga_gingerhouse/CMakeLists.txt | 38 ++++++++ examples/vga_gingerhouse/img/01.cpp | 2 +- examples/vga_gingerhouse/img/02.cpp | 2 +- examples/vga_gingerhouse/img/03.cpp | 2 +- examples/vga_gingerhouse/img/04.cpp | 2 +- examples/vga_gingerhouse/img/05.cpp | 2 +- examples/vga_gingerhouse/img/06.cpp | 2 +- examples/vga_gingerhouse/img/07.cpp | 2 +- examples/vga_gingerhouse/img/08.cpp | 2 +- examples/vga_gingerhouse/img/09.cpp | 2 +- examples/vga_gingerhouse/img/10.cpp | 2 +- examples/vga_gingerhouse/img/11.cpp | 2 +- examples/vga_gingerhouse/img/12.cpp | 2 +- examples/vga_gingerhouse/img/13.cpp | 2 +- examples/vga_gingerhouse/img/14.cpp | 2 +- examples/vga_gingerhouse/img/15.cpp | 2 +- examples/vga_gingerhouse/img/16.cpp | 2 +- examples/vga_gingerhouse/img/17.cpp | 2 +- examples/vga_gingerhouse/img/18.cpp | 3 +- examples/vga_gingerhouse/img/19.cpp | 2 +- examples/vga_gingerhouse/img/20.cpp | 2 +- examples/vga_gingerhouse/img/22.cpp | 2 +- examples/vga_gingerhouse/img/RaspPicoRle.exe | Bin 90112 -> 0 bytes examples/vga_gingerhouse/src/include.h | 16 --- examples/vga_gingerhouse/src/main.cpp | 7 +- examples/vga_gingerhouse/src/main.h | 2 + examples/vga_hypno/CMakeLists.txt | 16 +++ examples/vga_hypno/Makefile | 65 ------------- examples/vga_hypno/src/include.h | 16 --- examples/vga_hypno/src/main.cpp | 4 +- examples/vga_hypno/src/main.h | 2 + examples/vga_levelmeter/CMakeLists.txt | 20 ++++ examples/vga_levelmeter/img/repro1.cpp | 2 +- examples/vga_levelmeter/img/repro2.cpp | 2 +- examples/vga_levelmeter/img/repro3.cpp | 2 +- examples/vga_levelmeter/snd/test.cpp | 2 +- examples/vga_levelmeter/src/include.h | 16 --- examples/vga_levelmeter/src/main.cpp | 5 +- examples/vga_levelmeter/src/main.h | 2 + examples/vga_life/CMakeLists.txt | 18 ++++ examples/vga_life/Makefile | 67 ------------- examples/vga_life/img/tiles16.cpp | 2 +- examples/vga_life/src/include.h | 16 --- examples/vga_life/src/main.cpp | 6 +- examples/vga_life/src/main.h | 2 + examples/vga_lines/CMakeLists.txt | 16 +++ examples/vga_lines/src/include.h | 16 --- examples/vga_lines/src/main.cpp | 5 +- examples/vga_lines/src/main.h | 2 + examples/vga_mandelbrot/CMakeLists.txt | 17 ++++ examples/vga_mandelbrot/Makefile | 65 ------------- examples/vga_mandelbrot/src/fixed.h | 2 + examples/vga_mandelbrot/src/include.h | 17 ---- examples/vga_mandelbrot/src/main.cpp | 7 +- examples/vga_mandelbrot/src/main.h | 2 + examples/vga_matrixrain/CMakeLists.txt | 16 +++ examples/vga_matrixrain/Makefile | 65 ------------- examples/vga_matrixrain/src/include.h | 16 --- examples/vga_matrixrain/src/main.cpp | 5 +- examples/vga_matrixrain/src/main.h | 2 + examples/vga_maze/CMakeLists.txt | 17 ++++ examples/vga_maze/Makefile | 66 ------------- examples/vga_maze/img/tiles.cpp | 2 +- examples/vga_maze/src/include.h | 16 --- examples/vga_maze/src/main.cpp | 4 +- examples/vga_maze/src/main.h | 2 + examples/vga_monoscope/CMakeLists.txt | 43 ++++++++ examples/vga_monoscope/Makefile | 92 ------------------ examples/vga_monoscope/img/RaspPicoRle.exe | Bin 90112 -> 0 bytes .../vga_monoscope/img/monoscope_1024x576.cpp | 2 +- .../vga_monoscope/img/monoscope_1024x768.cpp | 2 +- .../vga_monoscope/img/monoscope_1064x600.cpp | 2 +- .../vga_monoscope/img/monoscope_1152x864.cpp | 2 +- .../vga_monoscope/img/monoscope_1280x960.cpp | 2 +- .../vga_monoscope/img/monoscope_1360x768.cpp | 2 +- .../vga_monoscope/img/monoscope_256x192.cpp | 2 +- .../vga_monoscope/img/monoscope_300x240.cpp | 2 +- .../vga_monoscope/img/monoscope_320x200.cpp | 2 +- .../vga_monoscope/img/monoscope_320x240.cpp | 2 +- .../vga_monoscope/img/monoscope_360x288.cpp | 2 +- .../vga_monoscope/img/monoscope_384x288.cpp | 2 +- .../vga_monoscope/img/monoscope_400x300.cpp | 2 +- .../vga_monoscope/img/monoscope_424x240.cpp | 2 +- .../vga_monoscope/img/monoscope_500x400.cpp | 2 +- .../vga_monoscope/img/monoscope_512x288.cpp | 2 +- .../vga_monoscope/img/monoscope_528x400.cpp | 2 +- .../vga_monoscope/img/monoscope_600x480.cpp | 2 +- .../vga_monoscope/img/monoscope_640x400.cpp | 2 +- .../vga_monoscope/img/monoscope_640x480.cpp | 2 +- .../vga_monoscope/img/monoscope_704x400.cpp | 2 +- .../vga_monoscope/img/monoscope_720x576.cpp | 2 +- .../vga_monoscope/img/monoscope_768x576.cpp | 2 +- .../vga_monoscope/img/monoscope_800x600.cpp | 2 +- .../vga_monoscope/img/monoscope_848x480.cpp | 2 +- examples/vga_monoscope/img/pi-monoscope.cpp | 2 +- examples/vga_monoscope/src/include.h | 16 --- examples/vga_monoscope/src/main.cpp | 8 +- examples/vga_monoscope/src/main.h | 2 + examples/vga_oscilloscope/CMakeLists.txt | 23 +++++ examples/vga_oscilloscope/Makefile | 72 -------------- examples/vga_oscilloscope/img/grid.cpp | 2 +- examples/vga_oscilloscope/img/oscilA.cpp | 2 +- examples/vga_oscilloscope/img/oscilB1.cpp | 2 +- examples/vga_oscilloscope/img/oscilB2.cpp | 2 +- examples/vga_oscilloscope/img/oscilC1.cpp | 2 +- examples/vga_oscilloscope/img/oscilC2.cpp | 2 +- examples/vga_oscilloscope/img/oscilD.cpp | 2 +- examples/vga_oscilloscope/src/include.h | 16 --- examples/vga_oscilloscope/src/main.cpp | 6 +- examples/vga_oscilloscope/src/main.h | 2 + examples/vga_pacman/CMakeLists.txt | 34 +++++++ examples/vga_pacman/Makefile | 83 ---------------- examples/vga_pacman/img/logo.cpp | 2 +- examples/vga_pacman/img/sprites.cpp | 2 +- examples/vga_pacman/img/status.cpp | 2 +- examples/vga_pacman/img/tiles.cpp | 2 +- examples/vga_pacman/snd/death.cpp | 2 +- examples/vga_pacman/snd/eatfruit.cpp | 2 +- examples/vga_pacman/snd/eatghost.cpp | 2 +- examples/vga_pacman/snd/extrapac.cpp | 2 +- examples/vga_pacman/snd/frighten.cpp | 2 +- examples/vga_pacman/snd/intermission.cpp | 2 +- examples/vga_pacman/snd/siren.cpp | 2 +- examples/vga_pacman/snd/startsnd.cpp | 2 +- examples/vga_pacman/snd/wakka.cpp | 2 +- examples/vga_pacman/src/data.cpp | 2 +- examples/vga_pacman/src/data.h | 3 + examples/vga_pacman/src/game.cpp | 6 +- examples/vga_pacman/src/game.h | 2 + examples/vga_pacman/src/include.h | 20 ---- examples/vga_pacman/src/main.cpp | 11 ++- examples/vga_pacman/src/main.h | 2 + examples/vga_pacman/src/open.cpp | 7 +- examples/vga_pi/CMakeLists.txt | 16 +++ examples/vga_pi/Makefile | 65 ------------- examples/vga_pi/src/include.h | 16 --- examples/vga_pi/src/main.cpp | 5 +- examples/vga_pixels/CMakeLists.txt | 22 +++++ examples/vga_pixels/src/main.cpp | 2 +- examples/vga_raytrace/CMakeLists.txt | 22 +++++ examples/vga_raytrace/src/main.cpp | 4 +- examples/vga_raytrace/src/render.cpp | 2 +- examples/vga_sokoban/CMakeLists.txt | 22 +++++ examples/vga_sokoban/img/tiles12.cpp | 2 +- examples/vga_sokoban/img/tiles16.cpp | 2 +- examples/vga_sokoban/img/tiles20.cpp | 2 +- examples/vga_sokoban/img/tiles24.cpp | 2 +- examples/vga_sokoban/img/tiles28.cpp | 2 +- examples/vga_sokoban/img/tiles32.cpp | 2 +- examples/vga_sokoban/img/tiles8.cpp | 2 +- examples/vga_sokoban/snd/yippee.cpp | 2 +- examples/vga_sokoban/src/game.cpp | 2 +- examples/vga_sokoban/src/levels.cpp | 2 +- examples/vga_sokoban/src/levels_damgaard.cpp | 2 +- examples/vga_sokoban/src/levels_domenech.cpp | 2 +- examples/vga_sokoban/src/levels_dzekic.cpp | 2 +- examples/vga_sokoban/src/levels_grigor.cpp | 2 +- examples/vga_sokoban/src/levels_haywood.cpp | 2 +- examples/vga_sokoban/src/levels_holland.cpp | 4 +- examples/vga_sokoban/src/levels_loma.cpp | 2 +- examples/vga_sokoban/src/levels_martel.cpp | 2 +- examples/vga_sokoban/src/levels_murase.cpp | 2 +- examples/vga_sokoban/src/levels_peloux.cpp | 2 +- examples/vga_sokoban/src/levels_rabbit.cpp | 2 +- examples/vga_sokoban/src/levels_skinner.cpp | 2 +- examples/vga_sokoban/src/levels_sladkey.cpp | 2 +- examples/vga_sokoban/src/main.cpp | 4 +- examples/vga_sokoban/src/select.cpp | 2 +- examples/vga_spheres/CMakeLists.txt | 22 +++++ examples/vga_spheres/src/main.cpp | 2 +- examples/vga_spots/CMakeLists.txt | 22 +++++ examples/vga_spots/src/main.cpp | 2 +- examples/vga_tetris/CMakeLists.txt | 22 +++++ examples/vga_tetris/img/tiles.cpp | 2 +- examples/vga_tetris/snd/brick.cpp | 2 +- examples/vga_tetris/snd/gameover.cpp | 2 +- examples/vga_tetris/snd/levelup.cpp | 2 +- examples/vga_tetris/snd/line.cpp | 2 +- examples/vga_tetris/src/main.cpp | 2 +- examples/vga_train/CMakeLists.txt | 22 +++++ examples/vga_train/img/tiles.cpp | 2 +- examples/vga_train/snd/collect.cpp | 2 +- examples/vga_train/snd/crash.cpp | 2 +- examples/vga_train/snd/step.cpp | 2 +- examples/vga_train/snd/success.cpp | 2 +- examples/vga_train/src/game.cpp | 2 +- examples/vga_train/src/levels.cpp | 2 +- examples/vga_train/src/main.cpp | 4 +- examples/vga_twister/CMakeLists.txt | 22 +++++ examples/vga_twister/img/CobbleStone.cpp | 2 +- examples/vga_twister/img/Fabric.cpp | 2 +- examples/vga_twister/img/Soil.cpp | 2 +- examples/vga_twister/img/Wood.cpp | 2 +- examples/vga_twister/src/main.cpp | 4 +- examples/vga_watersurface/CMakeLists.txt | 22 +++++ examples/vga_watersurface/img/duck.cpp | 2 +- examples/vga_watersurface/img/forest.cpp | 2 +- examples/vga_watersurface/snd/river.cpp | 2 +- examples/vga_watersurface/src/main.cpp | 2 +- src/vga.cpp | 12 +++ src/vga.h | 4 +- src/vga_vmode.cpp | 5 +- 315 files changed, 1104 insertions(+), 1547 deletions(-) create mode 100644 examples/vga_ants/CMakeLists.txt delete mode 100644 examples/vga_ants/src/include.h create mode 100644 examples/vga_balloons/CMakeLists.txt delete mode 100644 examples/vga_balloons/Makefile delete mode 100644 examples/vga_balloons/src/include.h create mode 100644 examples/vga_draw/CMakeLists.txt delete mode 100644 examples/vga_draw/src/include.h create mode 100644 examples/vga_earth/CMakeLists.txt delete mode 100644 examples/vga_earth/Makefile delete mode 100644 examples/vga_earth/src/include.h create mode 100644 examples/vga_eggs/CMakeLists.txt delete mode 100644 examples/vga_eggs/src/include.h create mode 100644 examples/vga_fifteen/CMakeLists.txt delete mode 100644 examples/vga_fifteen/Makefile delete mode 100644 examples/vga_fifteen/src/include.h create mode 100644 examples/vga_flag/CMakeLists.txt delete mode 100644 examples/vga_flag/Makefile delete mode 100644 examples/vga_flag/src/include.h create mode 100644 examples/vga_ghostracing/CMakeLists.txt delete mode 100644 examples/vga_ghostracing/src/include.h create mode 100644 examples/vga_gingerhouse/CMakeLists.txt delete mode 100644 examples/vga_gingerhouse/img/RaspPicoRle.exe delete mode 100644 examples/vga_gingerhouse/src/include.h create mode 100644 examples/vga_hypno/CMakeLists.txt delete mode 100644 examples/vga_hypno/Makefile delete mode 100644 examples/vga_hypno/src/include.h create mode 100644 examples/vga_levelmeter/CMakeLists.txt delete mode 100644 examples/vga_levelmeter/src/include.h create mode 100644 examples/vga_life/CMakeLists.txt delete mode 100644 examples/vga_life/Makefile delete mode 100644 examples/vga_life/src/include.h create mode 100644 examples/vga_lines/CMakeLists.txt delete mode 100644 examples/vga_lines/src/include.h create mode 100644 examples/vga_mandelbrot/CMakeLists.txt delete mode 100644 examples/vga_mandelbrot/Makefile delete mode 100644 examples/vga_mandelbrot/src/include.h create mode 100644 examples/vga_matrixrain/CMakeLists.txt delete mode 100644 examples/vga_matrixrain/Makefile delete mode 100644 examples/vga_matrixrain/src/include.h create mode 100644 examples/vga_maze/CMakeLists.txt delete mode 100644 examples/vga_maze/Makefile delete mode 100644 examples/vga_maze/src/include.h create mode 100644 examples/vga_monoscope/CMakeLists.txt delete mode 100644 examples/vga_monoscope/Makefile delete mode 100644 examples/vga_monoscope/img/RaspPicoRle.exe delete mode 100644 examples/vga_monoscope/src/include.h create mode 100644 examples/vga_oscilloscope/CMakeLists.txt delete mode 100644 examples/vga_oscilloscope/Makefile delete mode 100644 examples/vga_oscilloscope/src/include.h create mode 100644 examples/vga_pacman/CMakeLists.txt delete mode 100644 examples/vga_pacman/Makefile delete mode 100644 examples/vga_pacman/src/include.h create mode 100644 examples/vga_pi/CMakeLists.txt delete mode 100644 examples/vga_pi/Makefile delete mode 100644 examples/vga_pi/src/include.h create mode 100644 examples/vga_pixels/CMakeLists.txt create mode 100644 examples/vga_raytrace/CMakeLists.txt create mode 100644 examples/vga_sokoban/CMakeLists.txt create mode 100644 examples/vga_spheres/CMakeLists.txt create mode 100644 examples/vga_spots/CMakeLists.txt create mode 100644 examples/vga_tetris/CMakeLists.txt create mode 100644 examples/vga_train/CMakeLists.txt create mode 100644 examples/vga_twister/CMakeLists.txt create mode 100644 examples/vga_watersurface/CMakeLists.txt diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index c755a45..47545a2 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1 +1,21 @@ +add_subdirectory(vga_ants) +add_subdirectory(vga_balloons) +add_subdirectory(vga_draw) +add_subdirectory(vga_earth) +add_subdirectory(vga_eggs) +add_subdirectory(vga_fifteen) +add_subdirectory(vga_flag) +add_subdirectory(vga_ghostracing) +add_subdirectory(vga_gingerhouse) add_subdirectory(vga_hello) +add_subdirectory(vga_hypno) +add_subdirectory(vga_levelmeter) +add_subdirectory(vga_life) +add_subdirectory(vga_lines) +add_subdirectory(vga_mandelbrot) +add_subdirectory(vga_matrixrain) +add_subdirectory(vga_maze) +add_subdirectory(vga_monoscope) +add_subdirectory(vga_oscilloscope) +add_subdirectory(vga_pacman) +add_subdirectory(vga_pi) diff --git a/examples/vga_ants/CMakeLists.txt b/examples/vga_ants/CMakeLists.txt new file mode 100644 index 0000000..31b8148 --- /dev/null +++ b/examples/vga_ants/CMakeLists.txt @@ -0,0 +1,49 @@ +add_executable(vga_ants + src/main.cpp + src/game.cpp + img/background.cpp + img/blacksreds.cpp + img/cards.cpp + img/castle.cpp + img/castle_shadow.cpp + img/cloud.cpp + img/cursor.cpp + img/fence.cpp + img/fence_shadow.cpp + img/flags.cpp + img/grass.cpp + img/open.cpp + img/open_sel.cpp + img/open_sel2.cpp + img/select.cpp + img/state.cpp + img/title.cpp + img/title2.cpp + img/trumpet.cpp + img/win.cpp + snd/applause.cpp + snd/birds.cpp + snd/build_castle.cpp + snd/build_fence.cpp + snd/card.cpp + snd/curse.cpp + snd/decrease_stocks.cpp + snd/fanfares.cpp + snd/increase_power.cpp + snd/increase_stocks.cpp + snd/ruin_castle.cpp + snd/ruin_fence.cpp +) + +add_picovga(vga_ants) + +# for vga_config.h include +target_include_directories(vga_ants PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_ants) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_ants 1) \ No newline at end of file diff --git a/examples/vga_ants/img/background.cpp b/examples/vga_ants/img/background.cpp index 4bca377..af87254 100644 --- a/examples/vga_ants/img/background.cpp +++ b/examples/vga_ants/img/background.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 512 pixels diff --git a/examples/vga_ants/img/blacksreds.cpp b/examples/vga_ants/img/blacksreds.cpp index 82056d4..372c0bc 100644 --- a/examples/vga_ants/img/blacksreds.cpp +++ b/examples/vga_ants/img/blacksreds.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_ants/img/cards.cpp b/examples/vga_ants/img/cards.cpp index 3f58076..7688c3f 100644 --- a/examples/vga_ants/img/cards.cpp +++ b/examples/vga_ants/img/cards.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 2112 pixels diff --git a/examples/vga_ants/img/castle.cpp b/examples/vga_ants/img/castle.cpp index 701b2a2..e6d8d56 100644 --- a/examples/vga_ants/img/castle.cpp +++ b/examples/vga_ants/img/castle.cpp @@ -1,5 +1,4 @@ -#include "include.h" - +#include "main.h" // format: 8-bit pixel graphics // image width: 256 pixels // image height: 232 lines diff --git a/examples/vga_ants/img/castle_shadow.cpp b/examples/vga_ants/img/castle_shadow.cpp index 2ba471c..fc1714d 100644 --- a/examples/vga_ants/img/castle_shadow.cpp +++ b/examples/vga_ants/img/castle_shadow.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 228 pixels diff --git a/examples/vga_ants/img/cloud.cpp b/examples/vga_ants/img/cloud.cpp index 3e563a6..8830d90 100644 --- a/examples/vga_ants/img/cloud.cpp +++ b/examples/vga_ants/img/cloud.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_ants/img/cursor.cpp b/examples/vga_ants/img/cursor.cpp index 19683b4..9430d1a 100644 --- a/examples/vga_ants/img/cursor.cpp +++ b/examples/vga_ants/img/cursor.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_ants/img/fence.cpp b/examples/vga_ants/img/fence.cpp index eb46547..154ba7d 100644 --- a/examples/vga_ants/img/fence.cpp +++ b/examples/vga_ants/img/fence.cpp @@ -1,5 +1,4 @@ -#include "include.h" - +#include "main.h" // format: 8-bit pixel graphics // image width: 8 pixels // image height: 216 lines diff --git a/examples/vga_ants/img/fence_shadow.cpp b/examples/vga_ants/img/fence_shadow.cpp index 1f3e3fd..bace4fc 100644 --- a/examples/vga_ants/img/fence_shadow.cpp +++ b/examples/vga_ants/img/fence_shadow.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 100 pixels diff --git a/examples/vga_ants/img/flags.cpp b/examples/vga_ants/img/flags.cpp index 1a98644..7d1e2d5 100644 --- a/examples/vga_ants/img/flags.cpp +++ b/examples/vga_ants/img/flags.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 256 pixels diff --git a/examples/vga_ants/img/grass.cpp b/examples/vga_ants/img/grass.cpp index b751e17..6134e98 100644 --- a/examples/vga_ants/img/grass.cpp +++ b/examples/vga_ants/img/grass.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 160 pixels diff --git a/examples/vga_ants/img/open.cpp b/examples/vga_ants/img/open.cpp index f001a64..d6b87c9 100644 --- a/examples/vga_ants/img/open.cpp +++ b/examples/vga_ants/img/open.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 384 pixels diff --git a/examples/vga_ants/img/open_sel.cpp b/examples/vga_ants/img/open_sel.cpp index 7f35fa9..1fbad52 100644 --- a/examples/vga_ants/img/open_sel.cpp +++ b/examples/vga_ants/img/open_sel.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 512 pixels diff --git a/examples/vga_ants/img/open_sel2.cpp b/examples/vga_ants/img/open_sel2.cpp index 2eedeb8..2e2ae54 100644 --- a/examples/vga_ants/img/open_sel2.cpp +++ b/examples/vga_ants/img/open_sel2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_ants/img/select.cpp b/examples/vga_ants/img/select.cpp index 6e46cb4..6c9fcc7 100644 --- a/examples/vga_ants/img/select.cpp +++ b/examples/vga_ants/img/select.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 216 pixels diff --git a/examples/vga_ants/img/state.cpp b/examples/vga_ants/img/state.cpp index 64a2a4a..b892e56 100644 --- a/examples/vga_ants/img/state.cpp +++ b/examples/vga_ants/img/state.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 72 pixels diff --git a/examples/vga_ants/img/title.cpp b/examples/vga_ants/img/title.cpp index 248c5a6..82602ab 100644 --- a/examples/vga_ants/img/title.cpp +++ b/examples/vga_ants/img/title.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 224 pixels diff --git a/examples/vga_ants/img/title2.cpp b/examples/vga_ants/img/title2.cpp index 3cbaab4..958e4a3 100644 --- a/examples/vga_ants/img/title2.cpp +++ b/examples/vga_ants/img/title2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 96 pixels diff --git a/examples/vga_ants/img/trumpet.cpp b/examples/vga_ants/img/trumpet.cpp index e804daf..382316c 100644 --- a/examples/vga_ants/img/trumpet.cpp +++ b/examples/vga_ants/img/trumpet.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 64 pixels diff --git a/examples/vga_ants/img/win.cpp b/examples/vga_ants/img/win.cpp index 0c5bf59..e8fb241 100644 --- a/examples/vga_ants/img/win.cpp +++ b/examples/vga_ants/img/win.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 1024 pixels diff --git a/examples/vga_ants/snd/applause.cpp b/examples/vga_ants/snd/applause.cpp index 21da2a0..f00e9b3 100644 --- a/examples/vga_ants/snd/applause.cpp +++ b/examples/vga_ants/snd/applause.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 ApplauseSnd[29304] = { diff --git a/examples/vga_ants/snd/birds.cpp b/examples/vga_ants/snd/birds.cpp index beceb18..edc6975 100644 --- a/examples/vga_ants/snd/birds.cpp +++ b/examples/vga_ants/snd/birds.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 BirdsSnd[192184] = { diff --git a/examples/vga_ants/snd/build_castle.cpp b/examples/vga_ants/snd/build_castle.cpp index 82c1a05..aba503c 100644 --- a/examples/vga_ants/snd/build_castle.cpp +++ b/examples/vga_ants/snd/build_castle.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 BuildCastleSnd[19444] = { diff --git a/examples/vga_ants/snd/build_fence.cpp b/examples/vga_ants/snd/build_fence.cpp index c75b167..621a89b 100644 --- a/examples/vga_ants/snd/build_fence.cpp +++ b/examples/vga_ants/snd/build_fence.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 BuildFenceSnd[10618] = { diff --git a/examples/vga_ants/snd/card.cpp b/examples/vga_ants/snd/card.cpp index af8bbe5..d81b4a0 100644 --- a/examples/vga_ants/snd/card.cpp +++ b/examples/vga_ants/snd/card.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 CardSnd[2388] = { diff --git a/examples/vga_ants/snd/curse.cpp b/examples/vga_ants/snd/curse.cpp index 5aa8060..9761ab6 100644 --- a/examples/vga_ants/snd/curse.cpp +++ b/examples/vga_ants/snd/curse.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 CurseSnd[35080] = { diff --git a/examples/vga_ants/snd/decrease_stocks.cpp b/examples/vga_ants/snd/decrease_stocks.cpp index 8f0fbce..fdb190c 100644 --- a/examples/vga_ants/snd/decrease_stocks.cpp +++ b/examples/vga_ants/snd/decrease_stocks.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 DecreaseStocksSnd[12210] = { diff --git a/examples/vga_ants/snd/fanfares.cpp b/examples/vga_ants/snd/fanfares.cpp index 07147f6..7db0126 100644 --- a/examples/vga_ants/snd/fanfares.cpp +++ b/examples/vga_ants/snd/fanfares.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 FanfaresSnd[59678] = { diff --git a/examples/vga_ants/snd/increase_power.cpp b/examples/vga_ants/snd/increase_power.cpp index 9777c6a..58b56f9 100644 --- a/examples/vga_ants/snd/increase_power.cpp +++ b/examples/vga_ants/snd/increase_power.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 IncreasePowerSnd[24338] = { diff --git a/examples/vga_ants/snd/increase_stocks.cpp b/examples/vga_ants/snd/increase_stocks.cpp index f413445..cb48f51 100644 --- a/examples/vga_ants/snd/increase_stocks.cpp +++ b/examples/vga_ants/snd/increase_stocks.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 IncreaseStocksSnd[16588] = { diff --git a/examples/vga_ants/snd/ruin_castle.cpp b/examples/vga_ants/snd/ruin_castle.cpp index 8ae79eb..174b559 100644 --- a/examples/vga_ants/snd/ruin_castle.cpp +++ b/examples/vga_ants/snd/ruin_castle.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 RuinCastleSnd[23724] = { diff --git a/examples/vga_ants/snd/ruin_fence.cpp b/examples/vga_ants/snd/ruin_fence.cpp index 4f58622..768a137 100644 --- a/examples/vga_ants/snd/ruin_fence.cpp +++ b/examples/vga_ants/snd/ruin_fence.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 RuinFenceSnd[9134] = { diff --git a/examples/vga_ants/src/game.cpp b/examples/vga_ants/src/game.cpp index af5bc3e..1afa94c 100644 --- a/examples/vga_ants/src/game.cpp +++ b/examples/vga_ants/src/game.cpp @@ -5,7 +5,9 @@ // // **************************************************************************** -#include "include.h" +#include "picovga.h" +#include "game.h" +#include "main.h" const int CastleX[2] = { 72+16, WIDTH-72-16-128 }; // castle X coordinate const int FenceX[2] = { 72+160, WIDTH-72-160-8 }; // fence X coordinate diff --git a/examples/vga_ants/src/include.h b/examples/vga_ants/src/include.h deleted file mode 100644 index 1abe335..0000000 --- a/examples/vga_ants/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../../global.h" // global common definitions - -// main -#include "main.h" // main code -#include "game.h" // game engine diff --git a/examples/vga_ants/src/main.cpp b/examples/vga_ants/src/main.cpp index 442581d..68654cb 100644 --- a/examples/vga_ants/src/main.cpp +++ b/examples/vga_ants/src/main.cpp @@ -5,7 +5,9 @@ // // **************************************************************************** -#include "include.h" +#include "pico/printf.h" +#include "main.h" // main code +#include "game.h" // game engine // draw box ALIGNED u8 Box[WIDTH*HEIGHT]; @@ -258,8 +260,7 @@ void DispOpen() DrawImg(&Canvas, &Title2Canvas, 210, 92, 0, 0, 96, 80); // display open text - int y = 192; - int i; + uint i; for (i = 0; i < count_of(OpenText); i++) { DrawText(&Canvas, OpenText[i], 8, 192+i*10, COL_WHITE, FontBold8x8); diff --git a/examples/vga_ants/src/main.h b/examples/vga_ants/src/main.h index 6f5a992..e34b89e 100644 --- a/examples/vga_ants/src/main.h +++ b/examples/vga_ants/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + #define WIDTH 512 // screen width #define HEIGHT 400 // screen height diff --git a/examples/vga_balloons/CMakeLists.txt b/examples/vga_balloons/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_balloons/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_balloons/Makefile b/examples/vga_balloons/Makefile deleted file mode 100644 index 36ba5da..0000000 --- a/examples/vga_balloons/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp -SRC += img/clouds.cpp -SRC += img/hotair.cpp -SRC += img/blue.cpp -SRC += img/green.cpp -SRC += img/red.cpp -SRC += img/yellow.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -#DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_balloons/img/blue.cpp b/examples/vga_balloons/img/blue.cpp index 97bd8e9..bc1b1c9 100644 --- a/examples/vga_balloons/img/blue.cpp +++ b/examples/vga_balloons/img/blue.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 64 pixels diff --git a/examples/vga_balloons/img/clouds.cpp b/examples/vga_balloons/img/clouds.cpp index 17f8c9f..ac4110c 100644 --- a/examples/vga_balloons/img/clouds.cpp +++ b/examples/vga_balloons/img/clouds.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 440 pixels diff --git a/examples/vga_balloons/img/green.cpp b/examples/vga_balloons/img/green.cpp index a3616d7..fd5358e 100644 --- a/examples/vga_balloons/img/green.cpp +++ b/examples/vga_balloons/img/green.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 64 pixels diff --git a/examples/vga_balloons/img/hotair.cpp b/examples/vga_balloons/img/hotair.cpp index 4c1b152..c5d79b3 100644 --- a/examples/vga_balloons/img/hotair.cpp +++ b/examples/vga_balloons/img/hotair.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_balloons/img/red.cpp b/examples/vga_balloons/img/red.cpp index 12b8ed8..ac69cad 100644 --- a/examples/vga_balloons/img/red.cpp +++ b/examples/vga_balloons/img/red.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 64 pixels diff --git a/examples/vga_balloons/img/yellow.cpp b/examples/vga_balloons/img/yellow.cpp index bb04261..00eee1b 100644 --- a/examples/vga_balloons/img/yellow.cpp +++ b/examples/vga_balloons/img/yellow.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 64 pixels diff --git a/examples/vga_balloons/src/include.h b/examples/vga_balloons/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_balloons/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_balloons/src/main.cpp b/examples/vga_balloons/src/main.cpp index dde9323..3c60ea3 100644 --- a/examples/vga_balloons/src/main.cpp +++ b/examples/vga_balloons/src/main.cpp @@ -5,7 +5,8 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include // clouds copy ALIGNED u8 CloudsImg_Copy[sizeof(CloudsImg)]; @@ -205,7 +206,7 @@ int main() CopyWhiteImg(YellowImg_Copy, YellowImg, sizeof(YellowImg)); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(); diff --git a/examples/vga_balloons/src/main.h b/examples/vga_balloons/src/main.h index 9ab6ae4..74eae73 100644 --- a/examples/vga_balloons/src/main.h +++ b/examples/vga_balloons/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // screen resolution #define WIDTH 640 // screen width #define HEIGHT 480 // screen height diff --git a/examples/vga_draw/CMakeLists.txt b/examples/vga_draw/CMakeLists.txt new file mode 100644 index 0000000..d999951 --- /dev/null +++ b/examples/vga_draw/CMakeLists.txt @@ -0,0 +1,25 @@ +add_executable(vga_draw + img/rpi1.cpp + img/rpi2.cpp + img/rpi4.cpp + img/rpi8.cpp + img/peter1.cpp + img/peter2.cpp + img/peter4.cpp + img/peter8.cpp + + src/main.cpp +) + +add_picovga(vga_draw) + +# for vga_config.h include +target_include_directories(vga_draw PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_draw) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_draw 1) \ No newline at end of file diff --git a/examples/vga_draw/img/peter1.cpp b/examples/vga_draw/img/peter1.cpp index c6a7456..dae792b 100644 --- a/examples/vga_draw/img/peter1.cpp +++ b/examples/vga_draw/img/peter1.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 1-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_draw/img/peter2.cpp b/examples/vga_draw/img/peter2.cpp index 93444c9..844d7a5 100644 --- a/examples/vga_draw/img/peter2.cpp +++ b/examples/vga_draw/img/peter2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 2-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_draw/img/peter4.cpp b/examples/vga_draw/img/peter4.cpp index a103341..46c1b73 100644 --- a/examples/vga_draw/img/peter4.cpp +++ b/examples/vga_draw/img/peter4.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 4-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_draw/img/peter8.cpp b/examples/vga_draw/img/peter8.cpp index 26959f4..198a72c 100644 --- a/examples/vga_draw/img/peter8.cpp +++ b/examples/vga_draw/img/peter8.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_draw/img/rpi1.cpp b/examples/vga_draw/img/rpi1.cpp index a98134e..278f3c6 100644 --- a/examples/vga_draw/img/rpi1.cpp +++ b/examples/vga_draw/img/rpi1.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 1-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_draw/img/rpi2.cpp b/examples/vga_draw/img/rpi2.cpp index e94ca29..9793e6a 100644 --- a/examples/vga_draw/img/rpi2.cpp +++ b/examples/vga_draw/img/rpi2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 2-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_draw/img/rpi4.cpp b/examples/vga_draw/img/rpi4.cpp index 8becd3e..46720f4 100644 --- a/examples/vga_draw/img/rpi4.cpp +++ b/examples/vga_draw/img/rpi4.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 4-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_draw/img/rpi8.cpp b/examples/vga_draw/img/rpi8.cpp index e2c7f88..654a336 100644 --- a/examples/vga_draw/img/rpi8.cpp +++ b/examples/vga_draw/img/rpi8.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_draw/src/include.h b/examples/vga_draw/src/include.h deleted file mode 100644 index 9ac0db4..0000000 --- a/examples/vga_draw/src/include.h +++ /dev/null @@ -1,66 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// images - -// format: 1-bit pixel graphics -// image width: 32 pixels -// image height: 40 lines -// image pitch: 4 bytes -extern const u8 RPi1Img[160] __attribute__ ((aligned(4))); - -// format: 2-bit pixel graphics -// image width: 32 pixels -// image height: 40 lines -// image pitch: 8 bytes -extern const u8 RPi2Img[320] __attribute__ ((aligned(4))); - -// format: 4-bit pixel graphics -// image width: 32 pixels -// image height: 40 lines -// image pitch: 16 bytes -extern const u8 RPi4Img[640] __attribute__ ((aligned(4))); - -// format: 8-bit pixel graphics -// image width: 32 pixels -// image height: 40 lines -// image pitch: 32 bytes -extern const u8 RPi8Img[1280] __attribute__ ((aligned(4))); - -// format: 1-bit pixel graphics -// image width: 32 pixels -// image height: 32 lines -// image pitch: 4 bytes -extern const u8 Peter1Img[128] __attribute__ ((aligned(4))); - -// format: 2-bit pixel graphics -// image width: 32 pixels -// image height: 32 lines -// image pitch: 8 bytes -extern const u8 Peter2Img[256] __attribute__ ((aligned(4))); - -// format: 4-bit pixel graphics -// image width: 32 pixels -// image height: 32 lines -// image pitch: 16 bytes -extern const u8 Peter4Img[512] __attribute__ ((aligned(4))); - -// format: 8-bit pixel graphics -// image width: 32 pixels -// image height: 32 lines -// image pitch: 32 bytes -extern const u8 Peter8Img[1024] __attribute__ ((aligned(4))); - -// main -#include "main.h" // main code diff --git a/examples/vga_draw/src/main.cpp b/examples/vga_draw/src/main.cpp index b904f74..23a9994 100644 --- a/examples/vga_draw/src/main.cpp +++ b/examples/vga_draw/src/main.cpp @@ -5,7 +5,8 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include // Draw box #if FORMAT==CANVAS_PLANE2 @@ -133,7 +134,7 @@ int main() u32 t, t2; // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(); diff --git a/examples/vga_draw/src/main.h b/examples/vga_draw/src/main.h index ec9e524..73f3703 100644 --- a/examples/vga_draw/src/main.h +++ b/examples/vga_draw/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // used canvas format #define FORMAT CANVAS_8 // 8-bit pixels //#define FORMAT CANVAS_4 // 4-bit pixels @@ -60,4 +62,53 @@ #define IMG2HEIGHT 32 // image 2 height #define IMG2WIDTHBYTE (IMG2WIDTH/(WIDTH/WIDTHBYTE)) // bytes per line of image 2 +// format: 1-bit pixel graphics +// image width: 32 pixels +// image height: 40 lines +// image pitch: 4 bytes +extern const u8 RPi1Img[160] __attribute__ ((aligned(4))); + +// format: 2-bit pixel graphics +// image width: 32 pixels +// image height: 40 lines +// image pitch: 8 bytes +extern const u8 RPi2Img[320] __attribute__ ((aligned(4))); + +// format: 4-bit pixel graphics +// image width: 32 pixels +// image height: 40 lines +// image pitch: 16 bytes +extern const u8 RPi4Img[640] __attribute__ ((aligned(4))); + +// format: 8-bit pixel graphics +// image width: 32 pixels +// image height: 40 lines +// image pitch: 32 bytes +extern const u8 RPi8Img[1280] __attribute__ ((aligned(4))); + +// format: 1-bit pixel graphics +// image width: 32 pixels +// image height: 32 lines +// image pitch: 4 bytes +extern const u8 Peter1Img[128] __attribute__ ((aligned(4))); + +// format: 2-bit pixel graphics +// image width: 32 pixels +// image height: 32 lines +// image pitch: 8 bytes +extern const u8 Peter2Img[256] __attribute__ ((aligned(4))); + +// format: 4-bit pixel graphics +// image width: 32 pixels +// image height: 32 lines +// image pitch: 16 bytes +extern const u8 Peter4Img[512] __attribute__ ((aligned(4))); + +// format: 8-bit pixel graphics +// image width: 32 pixels +// image height: 32 lines +// image pitch: 32 bytes +extern const u8 Peter8Img[1024] __attribute__ ((aligned(4))); + + #endif // _MAIN_H diff --git a/examples/vga_earth/CMakeLists.txt b/examples/vga_earth/CMakeLists.txt new file mode 100644 index 0000000..233cad4 --- /dev/null +++ b/examples/vga_earth/CMakeLists.txt @@ -0,0 +1,18 @@ +add_executable(vga_earth + src/main.cpp + img/earth1.cpp + img/earth2.cpp +) + +add_picovga(vga_earth) + +# for vga_config.h include +target_include_directories(vga_earth PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_earth) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_earth 1) \ No newline at end of file diff --git a/examples/vga_earth/Makefile b/examples/vga_earth/Makefile deleted file mode 100644 index 7d2c9f0..0000000 --- a/examples/vga_earth/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp -SRC += img/earth1.cpp -SRC += img/earth2.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -#DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_earth/img/earth1.cpp b/examples/vga_earth/img/earth1.cpp index 54781dc..1721932 100644 --- a/examples/vga_earth/img/earth1.cpp +++ b/examples/vga_earth/img/earth1.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 1024 pixels diff --git a/examples/vga_earth/img/earth2.cpp b/examples/vga_earth/img/earth2.cpp index 0878e15..828ed21 100644 --- a/examples/vga_earth/img/earth2.cpp +++ b/examples/vga_earth/img/earth2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 1024 pixels diff --git a/examples/vga_earth/src/include.h b/examples/vga_earth/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_earth/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_earth/src/main.cpp b/examples/vga_earth/src/main.cpp index 1adbfc4..b48f4ab 100644 --- a/examples/vga_earth/src/main.cpp +++ b/examples/vga_earth/src/main.cpp @@ -5,7 +5,8 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include #define USERANDSHADOW 1 // 1=use random shadow (or rastered shadow otherwise) diff --git a/examples/vga_earth/src/main.h b/examples/vga_earth/src/main.h index c7c36ae..b8d319c 100644 --- a/examples/vga_earth/src/main.h +++ b/examples/vga_earth/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // screen resolution #define WIDTH 512 // screen width #define HEIGHT 400 // screen height diff --git a/examples/vga_eggs/CMakeLists.txt b/examples/vga_eggs/CMakeLists.txt new file mode 100644 index 0000000..3ec9120 --- /dev/null +++ b/examples/vga_eggs/CMakeLists.txt @@ -0,0 +1,25 @@ +add_executable(vga_eggs + src/main.cpp + snd/fanfare.cpp + snd/mapple.cpp + snd/beep.cpp + snd/beep2.cpp + img/computer.cpp + img/frame.cpp + img/open.cpp + img/select.cpp + img/tiles.cpp +) + +add_picovga(vga_eggs) + +# for vga_config.h include +target_include_directories(vga_eggs PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_eggs) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_eggs 1) \ No newline at end of file diff --git a/examples/vga_eggs/img/computer.cpp b/examples/vga_eggs/img/computer.cpp index e9d2851..7b723a4 100644 --- a/examples/vga_eggs/img/computer.cpp +++ b/examples/vga_eggs/img/computer.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 16 pixels diff --git a/examples/vga_eggs/img/frame.cpp b/examples/vga_eggs/img/frame.cpp index 03a266c..6f66bf4 100644 --- a/examples/vga_eggs/img/frame.cpp +++ b/examples/vga_eggs/img/frame.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_eggs/img/open.cpp b/examples/vga_eggs/img/open.cpp index 7256b9e..a2e6ceb 100644 --- a/examples/vga_eggs/img/open.cpp +++ b/examples/vga_eggs/img/open.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 512 pixels diff --git a/examples/vga_eggs/img/select.cpp b/examples/vga_eggs/img/select.cpp index 60ef1a0..b32a13e 100644 --- a/examples/vga_eggs/img/select.cpp +++ b/examples/vga_eggs/img/select.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_eggs/img/tiles.cpp b/examples/vga_eggs/img/tiles.cpp index 75241a9..c98519e 100644 --- a/examples/vga_eggs/img/tiles.cpp +++ b/examples/vga_eggs/img/tiles.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_eggs/snd/beep.cpp b/examples/vga_eggs/snd/beep.cpp index ed3d9c9..fa41a24 100644 --- a/examples/vga_eggs/snd/beep.cpp +++ b/examples/vga_eggs/snd/beep.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 BeepSnd[1102] = { diff --git a/examples/vga_eggs/snd/beep2.cpp b/examples/vga_eggs/snd/beep2.cpp index 72b4d68..6afa51c 100644 --- a/examples/vga_eggs/snd/beep2.cpp +++ b/examples/vga_eggs/snd/beep2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 Beep2Snd[1764] = { diff --git a/examples/vga_eggs/snd/fanfare.cpp b/examples/vga_eggs/snd/fanfare.cpp index 0fdf152..7b51734 100644 --- a/examples/vga_eggs/snd/fanfare.cpp +++ b/examples/vga_eggs/snd/fanfare.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 FanfareSnd[74871] = { diff --git a/examples/vga_eggs/snd/mapple.cpp b/examples/vga_eggs/snd/mapple.cpp index 88c5eb4..2b0dbf4 100644 --- a/examples/vga_eggs/snd/mapple.cpp +++ b/examples/vga_eggs/snd/mapple.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 MappleSnd[384007] = { diff --git a/examples/vga_eggs/src/include.h b/examples/vga_eggs/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_eggs/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_eggs/src/main.cpp b/examples/vga_eggs/src/main.cpp index 9ffd2ae..53dfccd 100644 --- a/examples/vga_eggs/src/main.cpp +++ b/examples/vga_eggs/src/main.cpp @@ -5,7 +5,9 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include +#include "pico/printf.h" // Draw box ALIGNED u8 Box[WIDTH*HEIGHT]; @@ -151,7 +153,7 @@ u8 GetStones(s8 x, s8 y) void DispPos() { s8 x, y; - u8 stones; + // u8 stones; u8 c; // clear number of possible positions diff --git a/examples/vga_eggs/src/main.h b/examples/vga_eggs/src/main.h index da49066..fa008f9 100644 --- a/examples/vga_eggs/src/main.h +++ b/examples/vga_eggs/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // control keys #define KEY_R 'L' // right #define KEY_U 'I' // up diff --git a/examples/vga_fifteen/CMakeLists.txt b/examples/vga_fifteen/CMakeLists.txt new file mode 100644 index 0000000..882ea47 --- /dev/null +++ b/examples/vga_fifteen/CMakeLists.txt @@ -0,0 +1,21 @@ +add_executable(vga_fifteen + src/main.cpp + img/tiles.cpp + snd/move.cpp + snd/bump.cpp + snd/shuffling.cpp + snd/fanfare.cpp +) + +add_picovga(vga_fifteen) + +# for vga_config.h include +target_include_directories(vga_fifteen PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_fifteen) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_fifteen 1) \ No newline at end of file diff --git a/examples/vga_fifteen/Makefile b/examples/vga_fifteen/Makefile deleted file mode 100644 index 0335f88..0000000 --- a/examples/vga_fifteen/Makefile +++ /dev/null @@ -1,70 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp -SRC += img/tiles.cpp -SRC += snd/move.cpp -SRC += snd/bump.cpp -SRC += snd/shuffling.cpp -SRC += snd/fanfare.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_fifteen/img/tiles.cpp b/examples/vga_fifteen/img/tiles.cpp index 5e550ad..e753e04 100644 --- a/examples/vga_fifteen/img/tiles.cpp +++ b/examples/vga_fifteen/img/tiles.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 48 pixels diff --git a/examples/vga_fifteen/snd/bump.cpp b/examples/vga_fifteen/snd/bump.cpp index 23059d7..f2ce0ff 100644 --- a/examples/vga_fifteen/snd/bump.cpp +++ b/examples/vga_fifteen/snd/bump.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 BumpSnd[1012] = { diff --git a/examples/vga_fifteen/snd/fanfare.cpp b/examples/vga_fifteen/snd/fanfare.cpp index 0fdf152..7b51734 100644 --- a/examples/vga_fifteen/snd/fanfare.cpp +++ b/examples/vga_fifteen/snd/fanfare.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 FanfareSnd[74871] = { diff --git a/examples/vga_fifteen/snd/move.cpp b/examples/vga_fifteen/snd/move.cpp index 7987f66..da2d5a6 100644 --- a/examples/vga_fifteen/snd/move.cpp +++ b/examples/vga_fifteen/snd/move.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 MoveSnd[2354] = { diff --git a/examples/vga_fifteen/snd/shuffling.cpp b/examples/vga_fifteen/snd/shuffling.cpp index 72eec2f..b1b5ded 100644 --- a/examples/vga_fifteen/snd/shuffling.cpp +++ b/examples/vga_fifteen/snd/shuffling.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 ShufflingSnd[5620] = { diff --git a/examples/vga_fifteen/src/include.h b/examples/vga_fifteen/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_fifteen/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_fifteen/src/main.cpp b/examples/vga_fifteen/src/main.cpp index 64d04b0..379e60c 100644 --- a/examples/vga_fifteen/src/main.cpp +++ b/examples/vga_fifteen/src/main.cpp @@ -5,7 +5,9 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include "pico/printf.h" +#include // copy of tiles images ALIGNED u8 TilesImg_Copy[sizeof(TilesImg)]; diff --git a/examples/vga_fifteen/src/main.h b/examples/vga_fifteen/src/main.h index 6c5095f..ac2cab8 100644 --- a/examples/vga_fifteen/src/main.h +++ b/examples/vga_fifteen/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + #define WIDTH 256 // width of screen #define HEIGHT 192 // screen height #define TILEW 48 // tile width diff --git a/examples/vga_flag/CMakeLists.txt b/examples/vga_flag/CMakeLists.txt new file mode 100644 index 0000000..3da159b --- /dev/null +++ b/examples/vga_flag/CMakeLists.txt @@ -0,0 +1,19 @@ +add_executable(vga_flag + src/main.cpp + img/clouds.cpp + img/flag.cpp + img/mast.cpp +) + +add_picovga(vga_flag) + +# for vga_config.h include +target_include_directories(vga_flag PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_flag) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_flag/Makefile b/examples/vga_flag/Makefile deleted file mode 100644 index c06ed28..0000000 --- a/examples/vga_flag/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp -SRC += img/clouds.cpp -SRC += img/flag.cpp -SRC += img/mast.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -#DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_flag/img/clouds.cpp b/examples/vga_flag/img/clouds.cpp index c1c0e61..bf109e5 100644 --- a/examples/vga_flag/img/clouds.cpp +++ b/examples/vga_flag/img/clouds.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 512 pixels diff --git a/examples/vga_flag/img/flag.cpp b/examples/vga_flag/img/flag.cpp index 21bdf75..35c0796 100644 --- a/examples/vga_flag/img/flag.cpp +++ b/examples/vga_flag/img/flag.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 360 pixels diff --git a/examples/vga_flag/img/mast.cpp b/examples/vga_flag/img/mast.cpp index 7a65472..97b3aa5 100644 --- a/examples/vga_flag/img/mast.cpp +++ b/examples/vga_flag/img/mast.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 24 pixels diff --git a/examples/vga_flag/src/include.h b/examples/vga_flag/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_flag/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_flag/src/main.cpp b/examples/vga_flag/src/main.cpp index 93b2ac9..443b00e 100644 --- a/examples/vga_flag/src/main.cpp +++ b/examples/vga_flag/src/main.cpp @@ -5,7 +5,8 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include // Draw box ALIGNED u8 Box[WIDTH*HEIGHT]; diff --git a/examples/vga_flag/src/main.h b/examples/vga_flag/src/main.h index fd84ce7..81919be 100644 --- a/examples/vga_flag/src/main.h +++ b/examples/vga_flag/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // screen resolution #define WIDTH 512 // screen width #define HEIGHT 400 // screen height diff --git a/examples/vga_ghostracing/CMakeLists.txt b/examples/vga_ghostracing/CMakeLists.txt new file mode 100644 index 0000000..a5daa95 --- /dev/null +++ b/examples/vga_ghostracing/CMakeLists.txt @@ -0,0 +1,27 @@ +add_executable(vga_ghostracing + img/tiles.cpp + img/skyline.cpp + img/car1.cpp + img/car2.cpp + img/car3.cpp + img/ghost1.cpp + img/ghost2.cpp + img/ghost3.cpp + img/ghost4.cpp + snd/engine.cpp + + src/main.cpp +) + +add_picovga(vga_ghostracing) + +# for vga_config.h include +target_include_directories(vga_ghostracing PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_ghostracing) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_ghostracing 1) diff --git a/examples/vga_ghostracing/img/car1.cpp b/examples/vga_ghostracing/img/car1.cpp index e925dd3..c38ff53 100644 --- a/examples/vga_ghostracing/img/car1.cpp +++ b/examples/vga_ghostracing/img/car1.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_ghostracing/img/car2.cpp b/examples/vga_ghostracing/img/car2.cpp index 50e9b90..3eca6b0 100644 --- a/examples/vga_ghostracing/img/car2.cpp +++ b/examples/vga_ghostracing/img/car2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_ghostracing/img/car3.cpp b/examples/vga_ghostracing/img/car3.cpp index ae2475f..95a45fb 100644 --- a/examples/vga_ghostracing/img/car3.cpp +++ b/examples/vga_ghostracing/img/car3.cpp @@ -1,5 +1,4 @@ -#include "include.h" - +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels // image height: 128 lines diff --git a/examples/vga_ghostracing/img/ghost1.cpp b/examples/vga_ghostracing/img/ghost1.cpp index 5ef87c3..8172708 100644 --- a/examples/vga_ghostracing/img/ghost1.cpp +++ b/examples/vga_ghostracing/img/ghost1.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_ghostracing/img/ghost2.cpp b/examples/vga_ghostracing/img/ghost2.cpp index 0a06d84..f5f5fb5 100644 --- a/examples/vga_ghostracing/img/ghost2.cpp +++ b/examples/vga_ghostracing/img/ghost2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_ghostracing/img/ghost3.cpp b/examples/vga_ghostracing/img/ghost3.cpp index 84a15d1..e91dc7c 100644 --- a/examples/vga_ghostracing/img/ghost3.cpp +++ b/examples/vga_ghostracing/img/ghost3.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_ghostracing/img/ghost4.cpp b/examples/vga_ghostracing/img/ghost4.cpp index 8cf0168..539122e 100644 --- a/examples/vga_ghostracing/img/ghost4.cpp +++ b/examples/vga_ghostracing/img/ghost4.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_ghostracing/img/skyline.cpp b/examples/vga_ghostracing/img/skyline.cpp index 43b6aff..99d24ff 100644 --- a/examples/vga_ghostracing/img/skyline.cpp +++ b/examples/vga_ghostracing/img/skyline.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 640 pixels diff --git a/examples/vga_ghostracing/img/tiles.cpp b/examples/vga_ghostracing/img/tiles.cpp index 897d3a8..55fc657 100644 --- a/examples/vga_ghostracing/img/tiles.cpp +++ b/examples/vga_ghostracing/img/tiles.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 64 pixels diff --git a/examples/vga_ghostracing/snd/engine.cpp b/examples/vga_ghostracing/snd/engine.cpp index 1a9b929..85226c9 100644 --- a/examples/vga_ghostracing/snd/engine.cpp +++ b/examples/vga_ghostracing/snd/engine.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 EngineSnd[6062] = { diff --git a/examples/vga_ghostracing/src/include.h b/examples/vga_ghostracing/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_ghostracing/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_ghostracing/src/main.cpp b/examples/vga_ghostracing/src/main.cpp index 38d0fae..2ef3824 100644 --- a/examples/vga_ghostracing/src/main.cpp +++ b/examples/vga_ghostracing/src/main.cpp @@ -5,7 +5,9 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include "pico/printf.h" +#include u8 Text[TEXTMAX]; // row of text ALIGNED u8 TextCol[TEXTMAX*8]; // text color gradient @@ -342,7 +344,7 @@ int main() CopyWhiteImg(Ghost4Img_Copy, Ghost4Img, sizeof(Ghost4Img)); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(170000); diff --git a/examples/vga_ghostracing/src/main.h b/examples/vga_ghostracing/src/main.h index 7d8ecac..fdb841c 100644 --- a/examples/vga_ghostracing/src/main.h +++ b/examples/vga_ghostracing/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // screen resolution #define WIDTH 640 // screen width #define HEIGHT 480 // screen height diff --git a/examples/vga_gingerhouse/CMakeLists.txt b/examples/vga_gingerhouse/CMakeLists.txt new file mode 100644 index 0000000..12612fb --- /dev/null +++ b/examples/vga_gingerhouse/CMakeLists.txt @@ -0,0 +1,38 @@ +add_executable(vga_gingerhouse + img/01.cpp + img/02.cpp + img/03.cpp + img/04.cpp + img/05.cpp + img/06.cpp + img/07.cpp + img/08.cpp + img/09.cpp + img/10.cpp + img/11.cpp + img/12.cpp + img/13.cpp + img/14.cpp + img/15.cpp + img/16.cpp + img/17.cpp + img/18.cpp + img/19.cpp + img/20.cpp + img/22.cpp + + src/main.cpp +) + +add_picovga(vga_gingerhouse) + +# for vga_config.h include +target_include_directories(vga_gingerhouse PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_gingerhouse) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_gingerhouse 1) diff --git a/examples/vga_gingerhouse/img/01.cpp b/examples/vga_gingerhouse/img/01.cpp index 4822c7e..8baac6e 100644 --- a/examples/vga_gingerhouse/img/01.cpp +++ b/examples/vga_gingerhouse/img/01.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/02.cpp b/examples/vga_gingerhouse/img/02.cpp index 3b1819d..c284b21 100644 --- a/examples/vga_gingerhouse/img/02.cpp +++ b/examples/vga_gingerhouse/img/02.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/03.cpp b/examples/vga_gingerhouse/img/03.cpp index 35bab45..8a8fbe3 100644 --- a/examples/vga_gingerhouse/img/03.cpp +++ b/examples/vga_gingerhouse/img/03.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/04.cpp b/examples/vga_gingerhouse/img/04.cpp index 79cac1c..496665c 100644 --- a/examples/vga_gingerhouse/img/04.cpp +++ b/examples/vga_gingerhouse/img/04.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/05.cpp b/examples/vga_gingerhouse/img/05.cpp index e42b410..038a27e 100644 --- a/examples/vga_gingerhouse/img/05.cpp +++ b/examples/vga_gingerhouse/img/05.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/06.cpp b/examples/vga_gingerhouse/img/06.cpp index a02a472..d650a40 100644 --- a/examples/vga_gingerhouse/img/06.cpp +++ b/examples/vga_gingerhouse/img/06.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/07.cpp b/examples/vga_gingerhouse/img/07.cpp index c9a6bba..7d4de5d 100644 --- a/examples/vga_gingerhouse/img/07.cpp +++ b/examples/vga_gingerhouse/img/07.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/08.cpp b/examples/vga_gingerhouse/img/08.cpp index 6e8a9bb..80d9198 100644 --- a/examples/vga_gingerhouse/img/08.cpp +++ b/examples/vga_gingerhouse/img/08.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/09.cpp b/examples/vga_gingerhouse/img/09.cpp index e3a60fd..3f90d25 100644 --- a/examples/vga_gingerhouse/img/09.cpp +++ b/examples/vga_gingerhouse/img/09.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/10.cpp b/examples/vga_gingerhouse/img/10.cpp index baa7ef9..2360133 100644 --- a/examples/vga_gingerhouse/img/10.cpp +++ b/examples/vga_gingerhouse/img/10.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/11.cpp b/examples/vga_gingerhouse/img/11.cpp index 2f6e6f3..5085d21 100644 --- a/examples/vga_gingerhouse/img/11.cpp +++ b/examples/vga_gingerhouse/img/11.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/12.cpp b/examples/vga_gingerhouse/img/12.cpp index 9aa8338..a708991 100644 --- a/examples/vga_gingerhouse/img/12.cpp +++ b/examples/vga_gingerhouse/img/12.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/13.cpp b/examples/vga_gingerhouse/img/13.cpp index 2be554c..68bacb6 100644 --- a/examples/vga_gingerhouse/img/13.cpp +++ b/examples/vga_gingerhouse/img/13.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/14.cpp b/examples/vga_gingerhouse/img/14.cpp index ffbe3e1..2bd6dda 100644 --- a/examples/vga_gingerhouse/img/14.cpp +++ b/examples/vga_gingerhouse/img/14.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/15.cpp b/examples/vga_gingerhouse/img/15.cpp index 4f20f7f..9f4ae5f 100644 --- a/examples/vga_gingerhouse/img/15.cpp +++ b/examples/vga_gingerhouse/img/15.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/16.cpp b/examples/vga_gingerhouse/img/16.cpp index b9181ec..435bb5c 100644 --- a/examples/vga_gingerhouse/img/16.cpp +++ b/examples/vga_gingerhouse/img/16.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/17.cpp b/examples/vga_gingerhouse/img/17.cpp index 3bf6d79..76bfbbd 100644 --- a/examples/vga_gingerhouse/img/17.cpp +++ b/examples/vga_gingerhouse/img/17.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/18.cpp b/examples/vga_gingerhouse/img/18.cpp index 61d5d15..5a5b454 100644 --- a/examples/vga_gingerhouse/img/18.cpp +++ b/examples/vga_gingerhouse/img/18.cpp @@ -1,5 +1,4 @@ -#include "include.h" - +#include "main.h" // format: RLE compression // no transparency // image width: 640 pixels diff --git a/examples/vga_gingerhouse/img/19.cpp b/examples/vga_gingerhouse/img/19.cpp index 434e898..456c983 100644 --- a/examples/vga_gingerhouse/img/19.cpp +++ b/examples/vga_gingerhouse/img/19.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/20.cpp b/examples/vga_gingerhouse/img/20.cpp index 0a69bf2..9a6206c 100644 --- a/examples/vga_gingerhouse/img/20.cpp +++ b/examples/vga_gingerhouse/img/20.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/22.cpp b/examples/vga_gingerhouse/img/22.cpp index 78c2973..8b5270c 100644 --- a/examples/vga_gingerhouse/img/22.cpp +++ b/examples/vga_gingerhouse/img/22.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_gingerhouse/img/RaspPicoRle.exe b/examples/vga_gingerhouse/img/RaspPicoRle.exe deleted file mode 100644 index 9e7c42547c9f2667898dde11e133b4de2305b6d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90112 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

P(2WSGQE;MrbroB1hF0Xm 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 BC@}y4 diff --git a/examples/vga_gingerhouse/src/include.h b/examples/vga_gingerhouse/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_gingerhouse/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_gingerhouse/src/main.cpp b/examples/vga_gingerhouse/src/main.cpp index 93dc26e..46567fc 100644 --- a/examples/vga_gingerhouse/src/main.cpp +++ b/examples/vga_gingerhouse/src/main.cpp @@ -5,7 +5,10 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include "pico/printf.h" +#include "hardware/clocks.h" +#include // page list const u16* const ImgRowsList[PAGES] = { // list of rows @@ -297,7 +300,7 @@ int main() memcpy(Font_Copy, FontBold8x8, sizeof(FontBold8x8)); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode (and open first page) VideoInit(); diff --git a/examples/vga_gingerhouse/src/main.h b/examples/vga_gingerhouse/src/main.h index 36c3be1..f5c92c2 100644 --- a/examples/vga_gingerhouse/src/main.h +++ b/examples/vga_gingerhouse/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // screen resolution #define WIDTH 640 // screen width #define HEIGHT 480 // screen height diff --git a/examples/vga_hypno/CMakeLists.txt b/examples/vga_hypno/CMakeLists.txt new file mode 100644 index 0000000..f5bbefc --- /dev/null +++ b/examples/vga_hypno/CMakeLists.txt @@ -0,0 +1,16 @@ +add_executable(vga_hypno + src/main.cpp +) + +add_picovga(vga_hypno) + +# for vga_config.h include +target_include_directories(vga_hypno PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_hypno) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_hypno/Makefile b/examples/vga_hypno/Makefile deleted file mode 100644 index 87b6ac1..0000000 --- a/examples/vga_hypno/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -#DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_hypno/src/include.h b/examples/vga_hypno/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_hypno/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_hypno/src/main.cpp b/examples/vga_hypno/src/main.cpp index 2ab0a8f..8b7b976 100644 --- a/examples/vga_hypno/src/main.cpp +++ b/examples/vga_hypno/src/main.cpp @@ -12,7 +12,7 @@ // does not display memory outside valid buffer limits, otherwise program will // crash on hardfault. -#include "include.h" +#include "main.h" // draw box ALIGNED u8 Box[IMGW*IMGH]; @@ -69,7 +69,7 @@ int main() SetMat(0); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode (and open first page) VideoInit(); diff --git a/examples/vga_hypno/src/main.h b/examples/vga_hypno/src/main.h index a74d1b2..6191ae8 100644 --- a/examples/vga_hypno/src/main.h +++ b/examples/vga_hypno/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // screen #define WIDTH 512 // screen width #define HEIGHT 400 // screen height diff --git a/examples/vga_levelmeter/CMakeLists.txt b/examples/vga_levelmeter/CMakeLists.txt new file mode 100644 index 0000000..b806ac3 --- /dev/null +++ b/examples/vga_levelmeter/CMakeLists.txt @@ -0,0 +1,20 @@ +add_executable(vga_levelmeter + src/main.cpp + img/repro1.cpp + img/repro2.cpp + img/repro3.cpp + snd/test.cpp +) + +add_picovga(vga_levelmeter) + +# for vga_config.h include +target_include_directories(vga_levelmeter PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_levelmeter) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_levelmeter 1) \ No newline at end of file diff --git a/examples/vga_levelmeter/img/repro1.cpp b/examples/vga_levelmeter/img/repro1.cpp index 6c04a43..38a9327 100644 --- a/examples/vga_levelmeter/img/repro1.cpp +++ b/examples/vga_levelmeter/img/repro1.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 192 pixels diff --git a/examples/vga_levelmeter/img/repro2.cpp b/examples/vga_levelmeter/img/repro2.cpp index 000bfb2..268e3f0 100644 --- a/examples/vga_levelmeter/img/repro2.cpp +++ b/examples/vga_levelmeter/img/repro2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 192 pixels diff --git a/examples/vga_levelmeter/img/repro3.cpp b/examples/vga_levelmeter/img/repro3.cpp index 232a262..5d3b77c 100644 --- a/examples/vga_levelmeter/img/repro3.cpp +++ b/examples/vga_levelmeter/img/repro3.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 100 pixels diff --git a/examples/vga_levelmeter/snd/test.cpp b/examples/vga_levelmeter/snd/test.cpp index 234a5b8..303fa67 100644 --- a/examples/vga_levelmeter/snd/test.cpp +++ b/examples/vga_levelmeter/snd/test.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 TestSnd[154512] = { diff --git a/examples/vga_levelmeter/src/include.h b/examples/vga_levelmeter/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_levelmeter/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_levelmeter/src/main.cpp b/examples/vga_levelmeter/src/main.cpp index 34df4b2..815e143 100644 --- a/examples/vga_levelmeter/src/main.cpp +++ b/examples/vga_levelmeter/src/main.cpp @@ -5,7 +5,8 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include // copy of images ALIGNED u8 Repro1Img_Copy[sizeof(Repro1Img)]; @@ -121,7 +122,7 @@ int main() CopyWhiteImg(Repro3Img_Copy, Repro3Img, sizeof(Repro3Img)); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(); diff --git a/examples/vga_levelmeter/src/main.h b/examples/vga_levelmeter/src/main.h index 94530b5..d64f84a 100644 --- a/examples/vga_levelmeter/src/main.h +++ b/examples/vga_levelmeter/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // screen resolution #define WIDTH 512 // screen width #define HEIGHT 336 // screen height diff --git a/examples/vga_life/CMakeLists.txt b/examples/vga_life/CMakeLists.txt new file mode 100644 index 0000000..46a61b4 --- /dev/null +++ b/examples/vga_life/CMakeLists.txt @@ -0,0 +1,18 @@ +add_executable(vga_life + src/main.cpp + #img/tiles32.cpp + img/tiles16.cpp +) + +add_picovga(vga_life) + +# for vga_config.h include +target_include_directories(vga_life PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_life) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_life 1) \ No newline at end of file diff --git a/examples/vga_life/Makefile b/examples/vga_life/Makefile deleted file mode 100644 index 4de626b..0000000 --- a/examples/vga_life/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp -#SRC += img/tiles32.cpp -SRC += img/tiles16.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_life/img/tiles16.cpp b/examples/vga_life/img/tiles16.cpp index 321d00a..2c95f2f 100644 --- a/examples/vga_life/img/tiles16.cpp +++ b/examples/vga_life/img/tiles16.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 16 pixels diff --git a/examples/vga_life/src/include.h b/examples/vga_life/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_life/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_life/src/main.cpp b/examples/vga_life/src/main.cpp index c5cb072..3293eaf 100644 --- a/examples/vga_life/src/main.cpp +++ b/examples/vga_life/src/main.cpp @@ -5,7 +5,9 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include "pico/printf.h" +#include // copy of tiles images u8 TilesImg_Copy[sizeof(Tiles16Img)] __attribute__ ((aligned(4))); @@ -362,7 +364,7 @@ int main() LoadSlot(); // run VGA core -// multicore_launch_core1(VgaCore); +// StartVgaCore(); // initialize videomode // VideoInit(); diff --git a/examples/vga_life/src/main.h b/examples/vga_life/src/main.h index 44dd433..1622d83 100644 --- a/examples/vga_life/src/main.h +++ b/examples/vga_life/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + //#define DRV VideoVGA // timings #define WIDTH 640 // screen width #define HEIGHT 480 // screen height diff --git a/examples/vga_lines/CMakeLists.txt b/examples/vga_lines/CMakeLists.txt new file mode 100644 index 0000000..0370c2f --- /dev/null +++ b/examples/vga_lines/CMakeLists.txt @@ -0,0 +1,16 @@ +add_executable(vga_lines + src/main.cpp +) + +add_picovga(vga_lines) + +# for vga_config.h include +target_include_directories(vga_lines PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_lines) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_lines 1) \ No newline at end of file diff --git a/examples/vga_lines/src/include.h b/examples/vga_lines/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_lines/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_lines/src/main.cpp b/examples/vga_lines/src/main.cpp index a8d8302..5b6203b 100644 --- a/examples/vga_lines/src/main.cpp +++ b/examples/vga_lines/src/main.cpp @@ -5,7 +5,8 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include #define LINENUM 70 // number of lines #define SPEEDMIN 3.0f // minimal speed @@ -90,7 +91,7 @@ int main() Video(DEV_VGA, RES_EGA, FORM_8BIT, Box); // run VGA core -// multicore_launch_core1(VgaCore); +// StartVgaCore(); // initialize videomode // VideoInit(); diff --git a/examples/vga_lines/src/main.h b/examples/vga_lines/src/main.h index 3137206..071f23e 100644 --- a/examples/vga_lines/src/main.h +++ b/examples/vga_lines/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // used canvas format //#define FORMAT CANVAS_8 // 8-bit pixels //#define WIDTH 532 // screen width diff --git a/examples/vga_mandelbrot/CMakeLists.txt b/examples/vga_mandelbrot/CMakeLists.txt new file mode 100644 index 0000000..8650202 --- /dev/null +++ b/examples/vga_mandelbrot/CMakeLists.txt @@ -0,0 +1,17 @@ +add_executable(vga_mandelbrot + src/fixed.S + src/main.cpp +) + +add_picovga(vga_mandelbrot) + +# for vga_config.h include +target_include_directories(vga_mandelbrot PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_mandelbrot) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_mandelbrot 1) \ No newline at end of file diff --git a/examples/vga_mandelbrot/Makefile b/examples/vga_mandelbrot/Makefile deleted file mode 100644 index a85a69a..0000000 --- a/examples/vga_mandelbrot/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += src/fixed.S - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_mandelbrot/src/fixed.h b/examples/vga_mandelbrot/src/fixed.h index 09d139a..1ac6d50 100644 --- a/examples/vga_mandelbrot/src/fixed.h +++ b/examples/vga_mandelbrot/src/fixed.h @@ -10,6 +10,8 @@ #ifndef _FIXED_H #define _FIXED_H +#include "picovga.h" + // multiply two 64-bit integers with 64-bit result (signed or unsigned) extern "C" s64 Mul64(s64 a, s64 b); diff --git a/examples/vga_mandelbrot/src/include.h b/examples/vga_mandelbrot/src/include.h deleted file mode 100644 index b84e9c7..0000000 --- a/examples/vga_mandelbrot/src/include.h +++ /dev/null @@ -1,17 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "fixed.h" // fixed point number -#include "main.h" // main code diff --git a/examples/vga_mandelbrot/src/main.cpp b/examples/vga_mandelbrot/src/main.cpp index 5250126..8b8ac1f 100644 --- a/examples/vga_mandelbrot/src/main.cpp +++ b/examples/vga_mandelbrot/src/main.cpp @@ -28,7 +28,10 @@ Need 6 bits for integer part of number + 1 bit for sign. We will use 32-bit integer with highest 7 bits as integer part and 25 lower bits as decimal part. */ -#include "include.h" +#include "main.h" +#include "fixed.h" +#include "pico/printf.h" +#include #define USE_INT 0 // use integer arithmetics #define USE_FLT 1 // use float arithmetics @@ -379,7 +382,7 @@ int main() int c; // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // setup videomode Init(); diff --git a/examples/vga_mandelbrot/src/main.h b/examples/vga_mandelbrot/src/main.h index ee9dfb0..a3c5b92 100644 --- a/examples/vga_mandelbrot/src/main.h +++ b/examples/vga_mandelbrot/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + #define WIDTH 528 // image width, high resolution #define HEIGHT 400 // image height, high resolution diff --git a/examples/vga_matrixrain/CMakeLists.txt b/examples/vga_matrixrain/CMakeLists.txt new file mode 100644 index 0000000..f206034 --- /dev/null +++ b/examples/vga_matrixrain/CMakeLists.txt @@ -0,0 +1,16 @@ +add_executable(vga_matrixrain + src/main.cpp +) + +add_picovga(vga_matrixrain) + +# for vga_config.h include +target_include_directories(vga_matrixrain PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_matrixrain) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_matrixrain 1) \ No newline at end of file diff --git a/examples/vga_matrixrain/Makefile b/examples/vga_matrixrain/Makefile deleted file mode 100644 index 87b6ac1..0000000 --- a/examples/vga_matrixrain/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -#DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_matrixrain/src/include.h b/examples/vga_matrixrain/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_matrixrain/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_matrixrain/src/main.cpp b/examples/vga_matrixrain/src/main.cpp index a1c1e56..29761b2 100644 --- a/examples/vga_matrixrain/src/main.cpp +++ b/examples/vga_matrixrain/src/main.cpp @@ -5,7 +5,8 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include #define DELAY 10 // delay in [ms] #define LEN_MIN 10 // minimal length of drop @@ -109,7 +110,7 @@ int main() memcpy(Font_Copy, FontBold8x8, sizeof(FontBold8x8)); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(); diff --git a/examples/vga_matrixrain/src/main.h b/examples/vga_matrixrain/src/main.h index 4416d35..b37cbe1 100644 --- a/examples/vga_matrixrain/src/main.h +++ b/examples/vga_matrixrain/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + #define WIDTH 640 // screen width in pixels #define HEIGHT 480 // screen height #define FONTW 8 // font width diff --git a/examples/vga_maze/CMakeLists.txt b/examples/vga_maze/CMakeLists.txt new file mode 100644 index 0000000..ef6461a --- /dev/null +++ b/examples/vga_maze/CMakeLists.txt @@ -0,0 +1,17 @@ +add_executable(vga_maze + src/main.cpp + img/tiles.cpp +) + +add_picovga(vga_maze) + +# for vga_config.h include +target_include_directories(vga_maze PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_maze) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_maze 1) diff --git a/examples/vga_maze/Makefile b/examples/vga_maze/Makefile deleted file mode 100644 index 92c0ac9..0000000 --- a/examples/vga_maze/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp -SRC += img/tiles.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_maze/img/tiles.cpp b/examples/vga_maze/img/tiles.cpp index 008fc06..fa3fc34 100644 --- a/examples/vga_maze/img/tiles.cpp +++ b/examples/vga_maze/img/tiles.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 8 pixels diff --git a/examples/vga_maze/src/include.h b/examples/vga_maze/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_maze/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_maze/src/main.cpp b/examples/vga_maze/src/main.cpp index 35edc90..80bf256 100644 --- a/examples/vga_maze/src/main.cpp +++ b/examples/vga_maze/src/main.cpp @@ -7,7 +7,9 @@ // "wave" maze generator: https://www.itnetwork.cz/navrh/algoritmy/algoritmy-bludiste/algoritmus-tvorba-nahodneho-bludiste // - MAZEW and MAZEH must be odd numbers! -#include "include.h" +#include "main.h" +#include "pico/printf.h" +#include // copy of tiles images ALIGNED u8 TilesImg_Copy[sizeof(TilesImg)]; diff --git a/examples/vga_maze/src/main.h b/examples/vga_maze/src/main.h index 0a191fc..3c68533 100644 --- a/examples/vga_maze/src/main.h +++ b/examples/vga_maze/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + #define WIDTH 256 // screen width #define HEIGHT 192 // screen height #define TILESIZE 8 // tile size in number of pixels diff --git a/examples/vga_monoscope/CMakeLists.txt b/examples/vga_monoscope/CMakeLists.txt new file mode 100644 index 0000000..4b26bbd --- /dev/null +++ b/examples/vga_monoscope/CMakeLists.txt @@ -0,0 +1,43 @@ +add_executable(vga_monoscope + img/monoscope_256x192.cpp + img/monoscope_300x240.cpp + img/monoscope_320x200.cpp + img/monoscope_320x240.cpp + img/monoscope_360x288.cpp + img/monoscope_384x288.cpp + img/monoscope_424x240.cpp + img/monoscope_400x300.cpp + img/monoscope_500x400.cpp + img/monoscope_512x288.cpp + img/monoscope_528x400.cpp + img/monoscope_600x480.cpp + img/monoscope_640x400.cpp + img/monoscope_640x480.cpp + img/monoscope_704x400.cpp + img/monoscope_720x576.cpp + img/monoscope_768x576.cpp + img/monoscope_800x600.cpp + img/monoscope_848x480.cpp + img/monoscope_1024x576.cpp + img/monoscope_1024x768.cpp + img/monoscope_1064x600.cpp + img/monoscope_1152x864.cpp + img/monoscope_1360x768.cpp + img/monoscope_1280x960.cpp + img/pi-monoscope.cpp + + src/main.cpp +) + +add_picovga(vga_monoscope) + +# for vga_config.h include +target_include_directories(vga_monoscope PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_monoscope) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_monoscope 1) \ No newline at end of file diff --git a/examples/vga_monoscope/Makefile b/examples/vga_monoscope/Makefile deleted file mode 100644 index a1c8bfb..0000000 --- a/examples/vga_monoscope/Makefile +++ /dev/null @@ -1,92 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += img/monoscope_256x192.cpp -SRC += img/monoscope_300x240.cpp -SRC += img/monoscope_320x200.cpp -SRC += img/monoscope_320x240.cpp -SRC += img/monoscope_360x288.cpp -SRC += img/monoscope_384x288.cpp -SRC += img/monoscope_424x240.cpp -SRC += img/monoscope_400x300.cpp -SRC += img/monoscope_500x400.cpp -SRC += img/monoscope_512x288.cpp -SRC += img/monoscope_528x400.cpp -SRC += img/monoscope_600x480.cpp -SRC += img/monoscope_640x400.cpp -SRC += img/monoscope_640x480.cpp -SRC += img/monoscope_704x400.cpp -SRC += img/monoscope_720x576.cpp -SRC += img/monoscope_768x576.cpp -SRC += img/monoscope_800x600.cpp -SRC += img/monoscope_848x480.cpp -SRC += img/monoscope_1024x576.cpp -SRC += img/monoscope_1024x768.cpp -SRC += img/monoscope_1064x600.cpp -SRC += img/monoscope_1152x864.cpp -SRC += img/monoscope_1360x768.cpp -SRC += img/monoscope_1280x960.cpp -SRC += img/pi-monoscope.cpp - -SRC += src/main.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_monoscope/img/RaspPicoRle.exe b/examples/vga_monoscope/img/RaspPicoRle.exe deleted file mode 100644 index 9e7c42547c9f2667898dde11e133b4de2305b6d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90112 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

P(2WSGQE;MrbroB1hF0Xm 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 BC@}y4 diff --git a/examples/vga_monoscope/img/monoscope_1024x576.cpp b/examples/vga_monoscope/img/monoscope_1024x576.cpp index 2483eca..5b3243f 100644 --- a/examples/vga_monoscope/img/monoscope_1024x576.cpp +++ b/examples/vga_monoscope/img/monoscope_1024x576.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_1024x768.cpp b/examples/vga_monoscope/img/monoscope_1024x768.cpp index 84f4701..d10685a 100644 --- a/examples/vga_monoscope/img/monoscope_1024x768.cpp +++ b/examples/vga_monoscope/img/monoscope_1024x768.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_1064x600.cpp b/examples/vga_monoscope/img/monoscope_1064x600.cpp index fba84e6..6713702 100644 --- a/examples/vga_monoscope/img/monoscope_1064x600.cpp +++ b/examples/vga_monoscope/img/monoscope_1064x600.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_1152x864.cpp b/examples/vga_monoscope/img/monoscope_1152x864.cpp index 25550ea..908797e 100644 --- a/examples/vga_monoscope/img/monoscope_1152x864.cpp +++ b/examples/vga_monoscope/img/monoscope_1152x864.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_1280x960.cpp b/examples/vga_monoscope/img/monoscope_1280x960.cpp index 2bfad1e..f875461 100644 --- a/examples/vga_monoscope/img/monoscope_1280x960.cpp +++ b/examples/vga_monoscope/img/monoscope_1280x960.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_1360x768.cpp b/examples/vga_monoscope/img/monoscope_1360x768.cpp index 2adfa08..2618806 100644 --- a/examples/vga_monoscope/img/monoscope_1360x768.cpp +++ b/examples/vga_monoscope/img/monoscope_1360x768.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_256x192.cpp b/examples/vga_monoscope/img/monoscope_256x192.cpp index 47913e3..4010ac7 100644 --- a/examples/vga_monoscope/img/monoscope_256x192.cpp +++ b/examples/vga_monoscope/img/monoscope_256x192.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_300x240.cpp b/examples/vga_monoscope/img/monoscope_300x240.cpp index 184e581..8c3a4a7 100644 --- a/examples/vga_monoscope/img/monoscope_300x240.cpp +++ b/examples/vga_monoscope/img/monoscope_300x240.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_320x200.cpp b/examples/vga_monoscope/img/monoscope_320x200.cpp index 754cfb5..31b4f66 100644 --- a/examples/vga_monoscope/img/monoscope_320x200.cpp +++ b/examples/vga_monoscope/img/monoscope_320x200.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_320x240.cpp b/examples/vga_monoscope/img/monoscope_320x240.cpp index af570f0..d8552cb 100644 --- a/examples/vga_monoscope/img/monoscope_320x240.cpp +++ b/examples/vga_monoscope/img/monoscope_320x240.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_360x288.cpp b/examples/vga_monoscope/img/monoscope_360x288.cpp index 665b4f0..ca6b62e 100644 --- a/examples/vga_monoscope/img/monoscope_360x288.cpp +++ b/examples/vga_monoscope/img/monoscope_360x288.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_384x288.cpp b/examples/vga_monoscope/img/monoscope_384x288.cpp index f5607f4..8c49d1d 100644 --- a/examples/vga_monoscope/img/monoscope_384x288.cpp +++ b/examples/vga_monoscope/img/monoscope_384x288.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_400x300.cpp b/examples/vga_monoscope/img/monoscope_400x300.cpp index e48e191..36c98a7 100644 --- a/examples/vga_monoscope/img/monoscope_400x300.cpp +++ b/examples/vga_monoscope/img/monoscope_400x300.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_424x240.cpp b/examples/vga_monoscope/img/monoscope_424x240.cpp index 6367651..d136981 100644 --- a/examples/vga_monoscope/img/monoscope_424x240.cpp +++ b/examples/vga_monoscope/img/monoscope_424x240.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_500x400.cpp b/examples/vga_monoscope/img/monoscope_500x400.cpp index 5f55b5f..5a859bb 100644 --- a/examples/vga_monoscope/img/monoscope_500x400.cpp +++ b/examples/vga_monoscope/img/monoscope_500x400.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_512x288.cpp b/examples/vga_monoscope/img/monoscope_512x288.cpp index f6284c1..9f98f13 100644 --- a/examples/vga_monoscope/img/monoscope_512x288.cpp +++ b/examples/vga_monoscope/img/monoscope_512x288.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_528x400.cpp b/examples/vga_monoscope/img/monoscope_528x400.cpp index fcd8ad9..2e85c31 100644 --- a/examples/vga_monoscope/img/monoscope_528x400.cpp +++ b/examples/vga_monoscope/img/monoscope_528x400.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_600x480.cpp b/examples/vga_monoscope/img/monoscope_600x480.cpp index 27b780b..19a2bf6 100644 --- a/examples/vga_monoscope/img/monoscope_600x480.cpp +++ b/examples/vga_monoscope/img/monoscope_600x480.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_640x400.cpp b/examples/vga_monoscope/img/monoscope_640x400.cpp index 9deaff6..fe8a06f 100644 --- a/examples/vga_monoscope/img/monoscope_640x400.cpp +++ b/examples/vga_monoscope/img/monoscope_640x400.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_640x480.cpp b/examples/vga_monoscope/img/monoscope_640x480.cpp index 57efe87..445709e 100644 --- a/examples/vga_monoscope/img/monoscope_640x480.cpp +++ b/examples/vga_monoscope/img/monoscope_640x480.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_704x400.cpp b/examples/vga_monoscope/img/monoscope_704x400.cpp index 0798237..bbfb4c4 100644 --- a/examples/vga_monoscope/img/monoscope_704x400.cpp +++ b/examples/vga_monoscope/img/monoscope_704x400.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_720x576.cpp b/examples/vga_monoscope/img/monoscope_720x576.cpp index 49929e0..f4362fb 100644 --- a/examples/vga_monoscope/img/monoscope_720x576.cpp +++ b/examples/vga_monoscope/img/monoscope_720x576.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_768x576.cpp b/examples/vga_monoscope/img/monoscope_768x576.cpp index cb143da..510056b 100644 --- a/examples/vga_monoscope/img/monoscope_768x576.cpp +++ b/examples/vga_monoscope/img/monoscope_768x576.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_800x600.cpp b/examples/vga_monoscope/img/monoscope_800x600.cpp index 04183d2..58ea46c 100644 --- a/examples/vga_monoscope/img/monoscope_800x600.cpp +++ b/examples/vga_monoscope/img/monoscope_800x600.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/monoscope_848x480.cpp b/examples/vga_monoscope/img/monoscope_848x480.cpp index 928e09a..97b3815 100644 --- a/examples/vga_monoscope/img/monoscope_848x480.cpp +++ b/examples/vga_monoscope/img/monoscope_848x480.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/img/pi-monoscope.cpp b/examples/vga_monoscope/img/pi-monoscope.cpp index 4b919bf..f4e1ae9 100644 --- a/examples/vga_monoscope/img/pi-monoscope.cpp +++ b/examples/vga_monoscope/img/pi-monoscope.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: RLE compression // no transparency diff --git a/examples/vga_monoscope/src/include.h b/examples/vga_monoscope/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_monoscope/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_monoscope/src/main.cpp b/examples/vga_monoscope/src/main.cpp index ad54178..1cd86e4 100644 --- a/examples/vga_monoscope/src/main.cpp +++ b/examples/vga_monoscope/src/main.cpp @@ -45,7 +45,11 @@ #define PI_MONOSCOPE 31 -#include "include.h" +#include "main.h" +#include "pico/printf.h" +#include +#include "hardware/clocks.h" + u16 Rows[962]; // RLE rows u8 Img[180000] __attribute__ ((aligned(4))); // RLE image @@ -257,7 +261,7 @@ int main() int i; // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // run default video mode VGA 640x480 MonoInit(22); diff --git a/examples/vga_monoscope/src/main.h b/examples/vga_monoscope/src/main.h index f7aaa00..626c63c 100644 --- a/examples/vga_monoscope/src/main.h +++ b/examples/vga_monoscope/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + #define IMG_LAYER 1 // overlapped layer with RLE image extern const u16 Monoscope256x192_rows[193]; diff --git a/examples/vga_oscilloscope/CMakeLists.txt b/examples/vga_oscilloscope/CMakeLists.txt new file mode 100644 index 0000000..4bbf4bc --- /dev/null +++ b/examples/vga_oscilloscope/CMakeLists.txt @@ -0,0 +1,23 @@ +add_executable(vga_oscilloscope + src/main.cpp + img/grid.cpp + img/oscilA.cpp + img/oscilB1.cpp + img/oscilB2.cpp + img/oscilC1.cpp + img/oscilC2.cpp + img/oscilD.cpp +) + +add_picovga(vga_oscilloscope) + +# for vga_config.h include +target_include_directories(vga_oscilloscope PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_oscilloscope) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_oscilloscope 1) \ No newline at end of file diff --git a/examples/vga_oscilloscope/Makefile b/examples/vga_oscilloscope/Makefile deleted file mode 100644 index 3cc41e3..0000000 --- a/examples/vga_oscilloscope/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp -SRC += img/grid.cpp -SRC += img/oscilA.cpp -SRC += img/oscilB1.cpp -SRC += img/oscilB2.cpp -SRC += img/oscilC1.cpp -SRC += img/oscilC2.cpp -SRC += img/oscilD.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -#DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_oscilloscope/img/grid.cpp b/examples/vga_oscilloscope/img/grid.cpp index 207d08c..b2d1333 100644 --- a/examples/vga_oscilloscope/img/grid.cpp +++ b/examples/vga_oscilloscope/img/grid.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 1-bit pixel graphics // image width: 288 pixels diff --git a/examples/vga_oscilloscope/img/oscilA.cpp b/examples/vga_oscilloscope/img/oscilA.cpp index 658c159..d8aa489 100644 --- a/examples/vga_oscilloscope/img/oscilA.cpp +++ b/examples/vga_oscilloscope/img/oscilA.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 640 pixels diff --git a/examples/vga_oscilloscope/img/oscilB1.cpp b/examples/vga_oscilloscope/img/oscilB1.cpp index ca11376..78cb166 100644 --- a/examples/vga_oscilloscope/img/oscilB1.cpp +++ b/examples/vga_oscilloscope/img/oscilB1.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 64 pixels diff --git a/examples/vga_oscilloscope/img/oscilB2.cpp b/examples/vga_oscilloscope/img/oscilB2.cpp index 7bbf61d..3f73774 100644 --- a/examples/vga_oscilloscope/img/oscilB2.cpp +++ b/examples/vga_oscilloscope/img/oscilB2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 64 pixels diff --git a/examples/vga_oscilloscope/img/oscilC1.cpp b/examples/vga_oscilloscope/img/oscilC1.cpp index cd48641..3beb40d 100644 --- a/examples/vga_oscilloscope/img/oscilC1.cpp +++ b/examples/vga_oscilloscope/img/oscilC1.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 312 pixels diff --git a/examples/vga_oscilloscope/img/oscilC2.cpp b/examples/vga_oscilloscope/img/oscilC2.cpp index ed198e0..d232a5c 100644 --- a/examples/vga_oscilloscope/img/oscilC2.cpp +++ b/examples/vga_oscilloscope/img/oscilC2.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 312 pixels diff --git a/examples/vga_oscilloscope/img/oscilD.cpp b/examples/vga_oscilloscope/img/oscilD.cpp index abe8823..ee65b01 100644 --- a/examples/vga_oscilloscope/img/oscilD.cpp +++ b/examples/vga_oscilloscope/img/oscilD.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 640 pixels diff --git a/examples/vga_oscilloscope/src/include.h b/examples/vga_oscilloscope/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_oscilloscope/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_oscilloscope/src/main.cpp b/examples/vga_oscilloscope/src/main.cpp index 4c70767..2660084 100644 --- a/examples/vga_oscilloscope/src/main.cpp +++ b/examples/vga_oscilloscope/src/main.cpp @@ -5,7 +5,9 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include + // copy of images ALIGNED u8 OscilAImg_Copy[sizeof(OscilAImg)]; @@ -96,7 +98,7 @@ int main() memcpy(GridImg_Copy, GridImg, sizeof(GridImg)); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(); diff --git a/examples/vga_oscilloscope/src/main.h b/examples/vga_oscilloscope/src/main.h index 7ab4aa6..5503ad5 100644 --- a/examples/vga_oscilloscope/src/main.h +++ b/examples/vga_oscilloscope/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // oscil image // AAAAAAAAAAAAAAA // B1 1111111 C1C1 diff --git a/examples/vga_pacman/CMakeLists.txt b/examples/vga_pacman/CMakeLists.txt new file mode 100644 index 0000000..41e631b --- /dev/null +++ b/examples/vga_pacman/CMakeLists.txt @@ -0,0 +1,34 @@ +add_executable(vga_pacman + src/data.cpp + src/game.cpp + src/main.cpp + src/open.cpp + + img/logo.cpp + img/tiles.cpp + img/sprites.cpp + img/status.cpp + + snd/startsnd.cpp + snd/siren.cpp + snd/wakka.cpp + snd/frighten.cpp + snd/eatghost.cpp + snd/eatfruit.cpp + snd/death.cpp + snd/extrapac.cpp + snd/intermission.cpp +) + +add_picovga(vga_pacman) + +# for vga_config.h include +target_include_directories(vga_pacman PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_pacman) + +# Allow stdio to USB +pico_enable_stdio_usb(vga_pacman 1) diff --git a/examples/vga_pacman/Makefile b/examples/vga_pacman/Makefile deleted file mode 100644 index f48dd0e..0000000 --- a/examples/vga_pacman/Makefile +++ /dev/null @@ -1,83 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/data.cpp -SRC += src/game.cpp -SRC += src/main.cpp -SRC += src/open.cpp - -SRC += img/logo.cpp -SRC += img/tiles.cpp -SRC += img/sprites.cpp -SRC += img/status.cpp - -SRC += snd/startsnd.cpp -SRC += snd/siren.cpp -SRC += snd/wakka.cpp -SRC += snd/frighten.cpp -SRC += snd/eatghost.cpp -SRC += snd/eatfruit.cpp -SRC += snd/death.cpp -SRC += snd/extrapac.cpp -SRC += snd/intermission.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_pacman/img/logo.cpp b/examples/vga_pacman/img/logo.cpp index f4353b0..14a5c9e 100644 --- a/examples/vga_pacman/img/logo.cpp +++ b/examples/vga_pacman/img/logo.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // format: 8-bit pixel graphics // image width: 144 pixels diff --git a/examples/vga_pacman/img/sprites.cpp b/examples/vga_pacman/img/sprites.cpp index ea2b420..6ce6153 100644 --- a/examples/vga_pacman/img/sprites.cpp +++ b/examples/vga_pacman/img/sprites.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // format: 8-bit pixel graphics // image width: 1536 pixels diff --git a/examples/vga_pacman/img/status.cpp b/examples/vga_pacman/img/status.cpp index 67ac08e..d461687 100644 --- a/examples/vga_pacman/img/status.cpp +++ b/examples/vga_pacman/img/status.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // format: 8-bit pixel graphics // image width: 144 pixels diff --git a/examples/vga_pacman/img/tiles.cpp b/examples/vga_pacman/img/tiles.cpp index 744b376..ca28833 100644 --- a/examples/vga_pacman/img/tiles.cpp +++ b/examples/vga_pacman/img/tiles.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // format: 8-bit pixel graphics // image width: 516 pixels diff --git a/examples/vga_pacman/snd/death.cpp b/examples/vga_pacman/snd/death.cpp index 4011385..f389e66 100644 --- a/examples/vga_pacman/snd/death.cpp +++ b/examples/vga_pacman/snd/death.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 DeathSnd[33832] = { diff --git a/examples/vga_pacman/snd/eatfruit.cpp b/examples/vga_pacman/snd/eatfruit.cpp index 3e5b814..bc21860 100644 --- a/examples/vga_pacman/snd/eatfruit.cpp +++ b/examples/vga_pacman/snd/eatfruit.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 EatFruitSnd[9690] = { diff --git a/examples/vga_pacman/snd/eatghost.cpp b/examples/vga_pacman/snd/eatghost.cpp index 64dcb1e..cfdc893 100644 --- a/examples/vga_pacman/snd/eatghost.cpp +++ b/examples/vga_pacman/snd/eatghost.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 EatGhostSnd[12879] = { diff --git a/examples/vga_pacman/snd/extrapac.cpp b/examples/vga_pacman/snd/extrapac.cpp index dccacf9..4b93da3 100644 --- a/examples/vga_pacman/snd/extrapac.cpp +++ b/examples/vga_pacman/snd/extrapac.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 ExtraPacSnd[41880] = { diff --git a/examples/vga_pacman/snd/frighten.cpp b/examples/vga_pacman/snd/frighten.cpp index 9f5a800..d839d35 100644 --- a/examples/vga_pacman/snd/frighten.cpp +++ b/examples/vga_pacman/snd/frighten.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 FrightenSnd[5872] = { diff --git a/examples/vga_pacman/snd/intermission.cpp b/examples/vga_pacman/snd/intermission.cpp index e3ed52b..f57c196 100644 --- a/examples/vga_pacman/snd/intermission.cpp +++ b/examples/vga_pacman/snd/intermission.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 IntermissionSnd[114754] = { diff --git a/examples/vga_pacman/snd/siren.cpp b/examples/vga_pacman/snd/siren.cpp index 576e746..650a7b0 100644 --- a/examples/vga_pacman/snd/siren.cpp +++ b/examples/vga_pacman/snd/siren.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 SirenSnd[9460] = { diff --git a/examples/vga_pacman/snd/startsnd.cpp b/examples/vga_pacman/snd/startsnd.cpp index bf5d99b..c696a06 100644 --- a/examples/vga_pacman/snd/startsnd.cpp +++ b/examples/vga_pacman/snd/startsnd.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 StartSnd[94852] = { diff --git a/examples/vga_pacman/snd/wakka.cpp b/examples/vga_pacman/snd/wakka.cpp index abf5fe3..fa24f21 100644 --- a/examples/vga_pacman/snd/wakka.cpp +++ b/examples/vga_pacman/snd/wakka.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "data.h" // sound format: PCM mono 8-bit 22050Hz const u8 WakkaSnd[6391] = { diff --git a/examples/vga_pacman/src/data.cpp b/examples/vga_pacman/src/data.cpp index 8997b54..74b6f28 100644 --- a/examples/vga_pacman/src/data.cpp +++ b/examples/vga_pacman/src/data.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "data.h" // title row ALIGNED u8 Text[TEXTMAX*2]; // text row with attributes diff --git a/examples/vga_pacman/src/data.h b/examples/vga_pacman/src/data.h index 817baef..63c6ef1 100644 --- a/examples/vga_pacman/src/data.h +++ b/examples/vga_pacman/src/data.h @@ -8,6 +8,9 @@ #ifndef _DATA_H #define _DATA_H +#include "picovga.h" +#include "def.h" + // format: 8-bit pixel graphics // image width: 144 pixels // image height: 34 lines diff --git a/examples/vga_pacman/src/game.cpp b/examples/vga_pacman/src/game.cpp index 42c2ea1..778e619 100644 --- a/examples/vga_pacman/src/game.cpp +++ b/examples/vga_pacman/src/game.cpp @@ -5,7 +5,11 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include "game.h" +#include "def.h" +#include "data.h" + // shift X coordinate in direction (wrap coordinate and direction) s8 ShiftX(s8 x, s8 dir) diff --git a/examples/vga_pacman/src/game.h b/examples/vga_pacman/src/game.h index 180cc07..869967f 100644 --- a/examples/vga_pacman/src/game.h +++ b/examples/vga_pacman/src/game.h @@ -8,6 +8,8 @@ #ifndef _GAME_H #define _GAME_H +#include "picovga.h" + // shift X coordinate in direction (wrap coordinate and direction) s8 ShiftX(s8 x, s8 dir); diff --git a/examples/vga_pacman/src/include.h b/examples/vga_pacman/src/include.h deleted file mode 100644 index 178c2da..0000000 --- a/examples/vga_pacman/src/include.h +++ /dev/null @@ -1,20 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "def.h" // definitions -#include "data.h" // data and tables -#include "game.h" // game -#include "main.h" // main code -#include "open.h" // open screen diff --git a/examples/vga_pacman/src/main.cpp b/examples/vga_pacman/src/main.cpp index 01247aa..c2e753e 100644 --- a/examples/vga_pacman/src/main.cpp +++ b/examples/vga_pacman/src/main.cpp @@ -5,7 +5,14 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include "def.h" // definitions +#include "data.h" // data and tables +#include "game.h" // game +#include "main.h" // main code +#include "open.h" // open screen +#include "pico/printf.h" +#include // initialize buffers on program start void BufInit() @@ -202,7 +209,7 @@ int main() BufInit(); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(); diff --git a/examples/vga_pacman/src/main.h b/examples/vga_pacman/src/main.h index f06aab9..3d8c9c1 100644 --- a/examples/vga_pacman/src/main.h +++ b/examples/vga_pacman/src/main.h @@ -8,6 +8,8 @@ #ifndef _MAIN_H #define _MAIN_H +#include "picovga.h" + // initialize open screen void VideoOpenInit(); diff --git a/examples/vga_pacman/src/open.cpp b/examples/vga_pacman/src/open.cpp index 69bada6..dc5607a 100644 --- a/examples/vga_pacman/src/open.cpp +++ b/examples/vga_pacman/src/open.cpp @@ -5,7 +5,12 @@ // // **************************************************************************** -#include "include.h" +#include "open.h" +#include "picovga.h" +#include "def.h" +#include "main.h" +#include "data.h" +#include "game.h" const char* OpenCharName[4] = { "SHADOW", "SPEEDY", "BASHFUL", "POKEY" }; const char* OpenCharNick[4] = { "\"BLINKY\"", "\"PINKY\"", "\"INKY\"", "\"CLYDE\"" }; diff --git a/examples/vga_pi/CMakeLists.txt b/examples/vga_pi/CMakeLists.txt new file mode 100644 index 0000000..8e84e12 --- /dev/null +++ b/examples/vga_pi/CMakeLists.txt @@ -0,0 +1,16 @@ +add_executable(vga_pi + src/main.cpp +) + +add_picovga(vga_pi) + +# for vga_config.h include +target_include_directories(vga_pi PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_pi) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_pi 1) \ No newline at end of file diff --git a/examples/vga_pi/Makefile b/examples/vga_pi/Makefile deleted file mode 100644 index 87b6ac1..0000000 --- a/examples/vga_pi/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# make clean ... clean -# make all ... compile - -############################################################################## -# Input files - -# ASM source files -ASRC += - -# C source files -CSRC += - -# C++ source files -SRC += src/main.cpp - -############################################################################## -# Configuration - -# defines -DEFINE += -DCFG_TUSB_DEBUG=0 -DEFINE += -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DEFINE += -DCFG_TUSB_OS=OPT_OS_PICO -DEFINE += -DPICO_BIT_OPS_PICO=1 -DEFINE += -DPICO_BOARD=\"pico\" -DEFINE += -DPICO_BUILD=1 -DEFINE += -DPICO_CMAKE_BUILD_TYPE=\"Release\" -DEFINE += -DPICO_COPY_TO_RAM=0 -DEFINE += -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DEFINE += -DPICO_DIVIDER_HARDWARE=1 -DEFINE += -DPICO_DOUBLE_PICO=1 -DEFINE += -DPICO_FLOAT_PICO=1 -DEFINE += -DPICO_INT64_OPS_PICO=1 -DEFINE += -DPICO_MEM_OPS_PICO=1 -DEFINE += -DPICO_NO_FLASH=0 -DEFINE += -DPICO_NO_HARDWARE=0 -DEFINE += -DPICO_ON_DEVICE=1 -DEFINE += -DPICO_PRINTF_PICO=1 -DEFINE += -DPICO_PROGRAM_URL=\"https://github.com/raspberrypi/pico-examples\" -DEFINE += -DPICO_TARGET_NAME=\"pico\" -DEFINE += -DPICO_USE_BLOCKED_RAM=0 -DEFINE += -DNDEBUG - -# stdio output (select one option) -#DEFINE += -DPICO_STDIO_UART=1 -#DEFINE += -DPICO_STDIO_SEMIHOSTING=1 -#DEFINE += -DPICO_STDIO_USB=1 - -# How to connect UART to Pico: -# +---USB---+ -# <-- UART0_TX GP0 |.1 40.|VBUS --- +5V power output to USB device -# --> UART0_RX GP1 |.2 39.|VSYS ---|<|--- +5V power input -# --- GND |.3 38.| GND K diode A -# GP2 |.4 37.| 3V3_EN -# GP3 |.5 36.| 3V3_OUT -# ...... -# -# USB/UART adaptor PL2303TA: -# red ......... +5V VSYS (39) -# black ....... GND (3) -# white RxD ... UART0_TX GP0 (1) -# green TxD ... UART0_RX GP1 (2) - -# Setup: 115200 Baud - -include ../Makefile.inc diff --git a/examples/vga_pi/src/include.h b/examples/vga_pi/src/include.h deleted file mode 100644 index 4f5dc18..0000000 --- a/examples/vga_pi/src/include.h +++ /dev/null @@ -1,16 +0,0 @@ - -// **************************************************************************** -// -// Common definitions -// -// **************************************************************************** - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "../../global.h" // global common definitions -#include "../vga.pio.h" // VGA PIO compilation - -// main -#include "main.h" // main code diff --git a/examples/vga_pi/src/main.cpp b/examples/vga_pi/src/main.cpp index 03cae84..01156f6 100644 --- a/examples/vga_pi/src/main.cpp +++ b/examples/vga_pi/src/main.cpp @@ -5,7 +5,10 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" +#include "picovga.h" +#include "hardware/clocks.h" +#include // text screen (mono character, format GF_MTEXT) ALIGNED u8 TextBuf[TEXTSIZE]; diff --git a/examples/vga_pixels/CMakeLists.txt b/examples/vga_pixels/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_pixels/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_pixels/src/main.cpp b/examples/vga_pixels/src/main.cpp index dac0f01..272eee7 100644 --- a/examples/vga_pixels/src/main.cpp +++ b/examples/vga_pixels/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // Draw box ALIGNED u8 Box[WIDTHBYTE*HEIGHT]; diff --git a/examples/vga_raytrace/CMakeLists.txt b/examples/vga_raytrace/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_raytrace/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_raytrace/src/main.cpp b/examples/vga_raytrace/src/main.cpp index b75d98e..a398f9c 100644 --- a/examples/vga_raytrace/src/main.cpp +++ b/examples/vga_raytrace/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // Draw box u8 Box[WIDTHBYTE*HEIGHT] __attribute__ ((aligned(4))); @@ -37,7 +37,7 @@ void VideoInit() int main() { // run VGA core -// multicore_launch_core1(VgaCore); +// StartVgaCore(); // initialize videomode // VideoInit(); diff --git a/examples/vga_raytrace/src/render.cpp b/examples/vga_raytrace/src/render.cpp index a6987ff..6f1ef30 100644 --- a/examples/vga_raytrace/src/render.cpp +++ b/examples/vga_raytrace/src/render.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // list of spheres Sphere Spheres[] = { diff --git a/examples/vga_sokoban/CMakeLists.txt b/examples/vga_sokoban/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_sokoban/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_sokoban/img/tiles12.cpp b/examples/vga_sokoban/img/tiles12.cpp index 90cfb9f..889b962 100644 --- a/examples/vga_sokoban/img/tiles12.cpp +++ b/examples/vga_sokoban/img/tiles12.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 276 pixels diff --git a/examples/vga_sokoban/img/tiles16.cpp b/examples/vga_sokoban/img/tiles16.cpp index 986408b..1f7a5ea 100644 --- a/examples/vga_sokoban/img/tiles16.cpp +++ b/examples/vga_sokoban/img/tiles16.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 368 pixels diff --git a/examples/vga_sokoban/img/tiles20.cpp b/examples/vga_sokoban/img/tiles20.cpp index 576715a..1d7cb94 100644 --- a/examples/vga_sokoban/img/tiles20.cpp +++ b/examples/vga_sokoban/img/tiles20.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 460 pixels diff --git a/examples/vga_sokoban/img/tiles24.cpp b/examples/vga_sokoban/img/tiles24.cpp index 537c5a7..cb4d9f1 100644 --- a/examples/vga_sokoban/img/tiles24.cpp +++ b/examples/vga_sokoban/img/tiles24.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 552 pixels diff --git a/examples/vga_sokoban/img/tiles28.cpp b/examples/vga_sokoban/img/tiles28.cpp index a86e980..ce2d83e 100644 --- a/examples/vga_sokoban/img/tiles28.cpp +++ b/examples/vga_sokoban/img/tiles28.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 644 pixels diff --git a/examples/vga_sokoban/img/tiles32.cpp b/examples/vga_sokoban/img/tiles32.cpp index 5c8c8f0..04dc7d1 100644 --- a/examples/vga_sokoban/img/tiles32.cpp +++ b/examples/vga_sokoban/img/tiles32.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 736 pixels diff --git a/examples/vga_sokoban/img/tiles8.cpp b/examples/vga_sokoban/img/tiles8.cpp index 4ba4a51..7e7d96b 100644 --- a/examples/vga_sokoban/img/tiles8.cpp +++ b/examples/vga_sokoban/img/tiles8.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 184 pixels diff --git a/examples/vga_sokoban/snd/yippee.cpp b/examples/vga_sokoban/snd/yippee.cpp index eca7e92..c0207ef 100644 --- a/examples/vga_sokoban/snd/yippee.cpp +++ b/examples/vga_sokoban/snd/yippee.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 YippeeSnd[17902] = { diff --git a/examples/vga_sokoban/src/game.cpp b/examples/vga_sokoban/src/game.cpp index be9e29b..4017731 100644 --- a/examples/vga_sokoban/src/game.cpp +++ b/examples/vga_sokoban/src/game.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // buffers u8 Board[MAPWMAX*MAPHMAX]; // game board diff --git a/examples/vga_sokoban/src/levels.cpp b/examples/vga_sokoban/src/levels.cpp index 58b2da6..d5bda81 100644 --- a/examples/vga_sokoban/src/levels.cpp +++ b/examples/vga_sokoban/src/levels.cpp @@ -17,7 +17,7 @@ // @ or p = player // + or P = player on mark -#include "include.h" +#include "main.h" // intro level (tiles 32x32, board 20x15) const char* IntroLevel[] = { diff --git a/examples/vga_sokoban/src/levels_damgaard.cpp b/examples/vga_sokoban/src/levels_damgaard.cpp index b16b078..078d31e 100644 --- a/examples/vga_sokoban/src/levels_damgaard.cpp +++ b/examples/vga_sokoban/src/levels_damgaard.cpp @@ -8,7 +8,7 @@ // Copyright: Copyright (c) 2003 Brian Damgaard // These levels may be freely distributed provided they are credited with the author's name. -#include "include.h" +#include "main.h" // The YASGen Collection, (c) Brian Damgaard const char* DamgaardCol1[] = { diff --git a/examples/vga_sokoban/src/levels_domenech.cpp b/examples/vga_sokoban/src/levels_domenech.cpp index 77b4003..13b3c05 100644 --- a/examples/vga_sokoban/src/levels_domenech.cpp +++ b/examples/vga_sokoban/src/levels_domenech.cpp @@ -17,7 +17,7 @@ // License: Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported // http://creativecommons.org/licenses/by-nc-nd/3.0/ -#include "include.h" +#include "main.h" // Original remixed, (c) Jordi Domenech const char* DomenechCol1[] = { diff --git a/examples/vga_sokoban/src/levels_dzekic.cpp b/examples/vga_sokoban/src/levels_dzekic.cpp index 2835787..3491b07 100644 --- a/examples/vga_sokoban/src/levels_dzekic.cpp +++ b/examples/vga_sokoban/src/levels_dzekic.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // Galadriel, (c) Marko Dzekic const char* DzekicCol1[] = { diff --git a/examples/vga_sokoban/src/levels_grigor.cpp b/examples/vga_sokoban/src/levels_grigor.cpp index 6a98b86..44c1ec6 100644 --- a/examples/vga_sokoban/src/levels_grigor.cpp +++ b/examples/vga_sokoban/src/levels_grigor.cpp @@ -20,7 +20,7 @@ // I shall be pleased, if you place them in the program or on the site. // Do not ask me the sanction. -#include "include.h" +#include "main.h" // Grigr 2001 const char* GrigorCol1[] = { diff --git a/examples/vga_sokoban/src/levels_haywood.cpp b/examples/vga_sokoban/src/levels_haywood.cpp index c873f61..4228120 100644 --- a/examples/vga_sokoban/src/levels_haywood.cpp +++ b/examples/vga_sokoban/src/levels_haywood.cpp @@ -29,7 +29,7 @@ // The later puzzles are extremely difficult. // The SokHard puzzles are sorted in release order. -#include "include.h" +#include "main.h" // SokEvo, (c) Lee J. Haywood const char* HaywoodCol1[] = { diff --git a/examples/vga_sokoban/src/levels_holland.cpp b/examples/vga_sokoban/src/levels_holland.cpp index 8c329e6..6651121 100644 --- a/examples/vga_sokoban/src/levels_holland.cpp +++ b/examples/vga_sokoban/src/levels_holland.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** // Author: David Holland -// These levels are © David Holland +// These levels are � David Holland // These levels may be distributed freely as long as this copyright message is retained. // // Author's note: @@ -24,7 +24,7 @@ // kind, but are nevertheless quite varied. The puzzles are in roughly ascending // order of difficulty. -#include "include.h" +#include "main.h" // DH1, (c) David Holland const char* HollandCol1[] = { diff --git a/examples/vga_sokoban/src/levels_loma.cpp b/examples/vga_sokoban/src/levels_loma.cpp index 79838c4..92e9d20 100644 --- a/examples/vga_sokoban/src/levels_loma.cpp +++ b/examples/vga_sokoban/src/levels_loma.cpp @@ -8,7 +8,7 @@ // Authors: Aymeric du Peloux, Francois Marques, David Skinner, Sven Egevad, Victor Kindermans, // Michael Steins, Frantisek Pokorny, Arpad Fekete, Roger Delaporte -#include "include.h" +#include "main.h" // Loma const char* LomaCol1[] = { diff --git a/examples/vga_sokoban/src/levels_martel.cpp b/examples/vga_sokoban/src/levels_martel.cpp index 931b880..12f0848 100644 --- a/examples/vga_sokoban/src/levels_martel.cpp +++ b/examples/vga_sokoban/src/levels_martel.cpp @@ -15,7 +15,7 @@ // Send comments and best solutions to : // sokomonk@laposte.net -#include "include.h" +#include "main.h" const char* MartelCol1[] = { diff --git a/examples/vga_sokoban/src/levels_murase.cpp b/examples/vga_sokoban/src/levels_murase.cpp index de5e5cb..7506b16 100644 --- a/examples/vga_sokoban/src/levels_murase.cpp +++ b/examples/vga_sokoban/src/levels_murase.cpp @@ -7,7 +7,7 @@ // Copyright (c) by Yoshio Murase. // Original level website: http://www.ne.jp/asahi/ai/yoshio/sokoban/ -#include "include.h" +#include "main.h" // Hand-Made, (c) Yoshio Murase const char* MuraseCol1[] = { diff --git a/examples/vga_sokoban/src/levels_peloux.cpp b/examples/vga_sokoban/src/levels_peloux.cpp index de7400b..bd3933b 100644 --- a/examples/vga_sokoban/src/levels_peloux.cpp +++ b/examples/vga_sokoban/src/levels_peloux.cpp @@ -11,7 +11,7 @@ // distributed for non-commercial use provided they remain unchanged, credited // with the author's name and original web site, and provided the author is notified. -#include "include.h" +#include "main.h" // MiniCosmos, (c) Aymeric du Peloux const char* PelouxCol1[] = { diff --git a/examples/vga_sokoban/src/levels_rabbit.cpp b/examples/vga_sokoban/src/levels_rabbit.cpp index 8461a30..4046148 100644 --- a/examples/vga_sokoban/src/levels_rabbit.cpp +++ b/examples/vga_sokoban/src/levels_rabbit.cpp @@ -6,7 +6,7 @@ // **************************************************************************** // (c) Thinking Rabbit -#include "include.h" +#include "main.h" // XSokoban, Original Levels & extras, (c) Thinking Rabbit const char* RabbitCol1[] = { diff --git a/examples/vga_sokoban/src/levels_skinner.cpp b/examples/vga_sokoban/src/levels_skinner.cpp index e4ffec2..9c71ecf 100644 --- a/examples/vga_sokoban/src/levels_skinner.cpp +++ b/examples/vga_sokoban/src/levels_skinner.cpp @@ -11,7 +11,7 @@ // These levels may be freely distributed provided they are credited // with the author's name and e-mail address. -#include "include.h" +#include "main.h" // Sasquatch, (c) David W. Skinner const char* SkinnerCol1[] = { diff --git a/examples/vga_sokoban/src/levels_sladkey.cpp b/examples/vga_sokoban/src/levels_sladkey.cpp index 62c5310..586bd84 100644 --- a/examples/vga_sokoban/src/levels_sladkey.cpp +++ b/examples/vga_sokoban/src/levels_sladkey.cpp @@ -29,7 +29,7 @@ // so that they can be played on a display with the size and aspect ratio of // a typical mobile phone without rotation. -#include "include.h" +#include "main.h" // The Warehouse Volume I - Vertical Mobility 1, (c) Rick Sladkey const char* SladkeyCol1[] = { diff --git a/examples/vga_sokoban/src/main.cpp b/examples/vga_sokoban/src/main.cpp index f4250a1..837d610 100644 --- a/examples/vga_sokoban/src/main.cpp +++ b/examples/vga_sokoban/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // copy of tiles images ALIGNED u8 TilesImg_Copy[sizeof(Tiles32Img)]; @@ -144,7 +144,7 @@ int main() memcpy(Font_Copy, FontBoldB8x16, sizeof(FontBoldB8x16)); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(); diff --git a/examples/vga_sokoban/src/select.cpp b/examples/vga_sokoban/src/select.cpp index 112de55..5e5c6c8 100644 --- a/examples/vga_sokoban/src/select.cpp +++ b/examples/vga_sokoban/src/select.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // print position //u8 PrintX, PrintY, PrintCol; diff --git a/examples/vga_spheres/CMakeLists.txt b/examples/vga_spheres/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_spheres/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_spheres/src/main.cpp b/examples/vga_spheres/src/main.cpp index e64d647..868edf6 100644 --- a/examples/vga_spheres/src/main.cpp +++ b/examples/vga_spheres/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // Draw box ALIGNED u8 Box[WIDTHBYTE*HEIGHT]; diff --git a/examples/vga_spots/CMakeLists.txt b/examples/vga_spots/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_spots/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_spots/src/main.cpp b/examples/vga_spots/src/main.cpp index 57733f4..758681b 100644 --- a/examples/vga_spots/src/main.cpp +++ b/examples/vga_spots/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // Draw box ALIGNED u8 Box[WIDTHBYTE*HEIGHT]; diff --git a/examples/vga_tetris/CMakeLists.txt b/examples/vga_tetris/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_tetris/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_tetris/img/tiles.cpp b/examples/vga_tetris/img/tiles.cpp index 5754afd..8e59216 100644 --- a/examples/vga_tetris/img/tiles.cpp +++ b/examples/vga_tetris/img/tiles.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 24 pixels diff --git a/examples/vga_tetris/snd/brick.cpp b/examples/vga_tetris/snd/brick.cpp index d93c93d..353c842 100644 --- a/examples/vga_tetris/snd/brick.cpp +++ b/examples/vga_tetris/snd/brick.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 BrickSnd[2354] = { diff --git a/examples/vga_tetris/snd/gameover.cpp b/examples/vga_tetris/snd/gameover.cpp index 8b0f628..089b7aa 100644 --- a/examples/vga_tetris/snd/gameover.cpp +++ b/examples/vga_tetris/snd/gameover.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 GameOverSnd[14648] = { diff --git a/examples/vga_tetris/snd/levelup.cpp b/examples/vga_tetris/snd/levelup.cpp index 27df9a9..b381314 100644 --- a/examples/vga_tetris/snd/levelup.cpp +++ b/examples/vga_tetris/snd/levelup.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 LevelUpSnd[43971] = { diff --git a/examples/vga_tetris/snd/line.cpp b/examples/vga_tetris/snd/line.cpp index bda6171..00f47c5 100644 --- a/examples/vga_tetris/snd/line.cpp +++ b/examples/vga_tetris/snd/line.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 LineSnd[7330] = { diff --git a/examples/vga_tetris/src/main.cpp b/examples/vga_tetris/src/main.cpp index e3b4b7d..784c898 100644 --- a/examples/vga_tetris/src/main.cpp +++ b/examples/vga_tetris/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" #define BASEBRICKNUM 7 // number of basebricks #define BRICKTEMPNUM 19 // number of brick templates diff --git a/examples/vga_train/CMakeLists.txt b/examples/vga_train/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_train/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_train/img/tiles.cpp b/examples/vga_train/img/tiles.cpp index 5a12d20..513bad1 100644 --- a/examples/vga_train/img/tiles.cpp +++ b/examples/vga_train/img/tiles.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 32 pixels diff --git a/examples/vga_train/snd/collect.cpp b/examples/vga_train/snd/collect.cpp index 0a8824d..f772247 100644 --- a/examples/vga_train/snd/collect.cpp +++ b/examples/vga_train/snd/collect.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 CollectSnd[3642] = { diff --git a/examples/vga_train/snd/crash.cpp b/examples/vga_train/snd/crash.cpp index 6775cbf..e08e0da 100644 --- a/examples/vga_train/snd/crash.cpp +++ b/examples/vga_train/snd/crash.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 CrashSnd[50146] = { diff --git a/examples/vga_train/snd/step.cpp b/examples/vga_train/snd/step.cpp index 1ef7d06..0731acb 100644 --- a/examples/vga_train/snd/step.cpp +++ b/examples/vga_train/snd/step.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 StepSnd[2243] = { diff --git a/examples/vga_train/snd/success.cpp b/examples/vga_train/snd/success.cpp index c071cf8..3331b9f 100644 --- a/examples/vga_train/snd/success.cpp +++ b/examples/vga_train/snd/success.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 SuccessSnd[32784] = { diff --git a/examples/vga_train/src/game.cpp b/examples/vga_train/src/game.cpp index 0114f1b..ad5d02e 100644 --- a/examples/vga_train/src/game.cpp +++ b/examples/vga_train/src/game.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // buffers u8 Board[MAPSIZE]; // game board diff --git a/examples/vga_train/src/levels.cpp b/examples/vga_train/src/levels.cpp index b7b229c..f77174c 100644 --- a/examples/vga_train/src/levels.cpp +++ b/examples/vga_train/src/levels.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // level scenes const u8 Levels[(LEVNUM+1)*MAPSIZE] = { diff --git a/examples/vga_train/src/main.cpp b/examples/vga_train/src/main.cpp index df12fc8..824b8e0 100644 --- a/examples/vga_train/src/main.cpp +++ b/examples/vga_train/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" u8 Text[TEXTMAX*2]; // 2 rows of text (2nd row is empty, it is used to center line vertically) u8 TextCol[TEXTMAX*2*8] __attribute__ ((aligned(4))); // text color gradient @@ -104,7 +104,7 @@ int main() memcpy(Font_Copy, FontBold8x8, sizeof(FontBold8x8)); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // clear info row InfoClear(); diff --git a/examples/vga_twister/CMakeLists.txt b/examples/vga_twister/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_twister/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_twister/img/CobbleStone.cpp b/examples/vga_twister/img/CobbleStone.cpp index 5f84daf..aa234db 100644 --- a/examples/vga_twister/img/CobbleStone.cpp +++ b/examples/vga_twister/img/CobbleStone.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_twister/img/Fabric.cpp b/examples/vga_twister/img/Fabric.cpp index ea11a84..046517b 100644 --- a/examples/vga_twister/img/Fabric.cpp +++ b/examples/vga_twister/img/Fabric.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_twister/img/Soil.cpp b/examples/vga_twister/img/Soil.cpp index 3278203..685ff40 100644 --- a/examples/vga_twister/img/Soil.cpp +++ b/examples/vga_twister/img/Soil.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_twister/img/Wood.cpp b/examples/vga_twister/img/Wood.cpp index 95ae068..9566c7b 100644 --- a/examples/vga_twister/img/Wood.cpp +++ b/examples/vga_twister/img/Wood.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 128 pixels diff --git a/examples/vga_twister/src/main.cpp b/examples/vga_twister/src/main.cpp index 1e86cd5..7565aee 100644 --- a/examples/vga_twister/src/main.cpp +++ b/examples/vga_twister/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // Draw box ALIGNED u8 Box[WIDTHBYTE*HEIGHT]; @@ -98,7 +98,7 @@ int main() memcpy(Img4, WoodImg, IMGSIZE); // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // initialize videomode VideoInit(); diff --git a/examples/vga_watersurface/CMakeLists.txt b/examples/vga_watersurface/CMakeLists.txt new file mode 100644 index 0000000..a3cbe19 --- /dev/null +++ b/examples/vga_watersurface/CMakeLists.txt @@ -0,0 +1,22 @@ +add_executable(vga_balloons + src/main.cpp + img/clouds.cpp + img/hotair.cpp + img/blue.cpp + img/green.cpp + img/red.cpp + img/yellow.cpp +) + +add_picovga(vga_balloons) + +# for vga_config.h include +target_include_directories(vga_balloons PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +# create map/bin/hex file etc. +pico_add_extra_outputs(vga_balloons) + +# Allow stdio to USB +# pico_enable_stdio_usb(vga_balloons 1) \ No newline at end of file diff --git a/examples/vga_watersurface/img/duck.cpp b/examples/vga_watersurface/img/duck.cpp index 21f9f2d..38b0c6e 100644 --- a/examples/vga_watersurface/img/duck.cpp +++ b/examples/vga_watersurface/img/duck.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 512 pixels diff --git a/examples/vga_watersurface/img/forest.cpp b/examples/vga_watersurface/img/forest.cpp index 2bb0bb2..8ef3e62 100644 --- a/examples/vga_watersurface/img/forest.cpp +++ b/examples/vga_watersurface/img/forest.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // format: 8-bit pixel graphics // image width: 512 pixels diff --git a/examples/vga_watersurface/snd/river.cpp b/examples/vga_watersurface/snd/river.cpp index e199013..7a2bdf9 100644 --- a/examples/vga_watersurface/snd/river.cpp +++ b/examples/vga_watersurface/snd/river.cpp @@ -1,4 +1,4 @@ -#include "include.h" +#include "main.h" // sound format: PCM mono 8-bit 22050Hz const u8 RiverSnd[105000] = { diff --git a/examples/vga_watersurface/src/main.cpp b/examples/vga_watersurface/src/main.cpp index debe0cf..b480da2 100644 --- a/examples/vga_watersurface/src/main.cpp +++ b/examples/vga_watersurface/src/main.cpp @@ -5,7 +5,7 @@ // // **************************************************************************** -#include "include.h" +#include "main.h" // Draw box ALIGNED u8 Box[WIDTHBYTE*HEIGHT]; diff --git a/src/vga.cpp b/src/vga.cpp index 4064391..1aefc73 100644 --- a/src/vga.cpp +++ b/src/vga.cpp @@ -7,6 +7,7 @@ #include "pico/stdlib.h" #include "pico/printf.h" +#include "pico/multicore.h" #include "picovga.h" #include "vga.pio.h" @@ -1057,6 +1058,17 @@ void VgaCore() } } +/** + * @brief Starts the VGA core on core1 + */ +void StartVgaCore() +{ + // stop VGA core + multicore_reset_core1(); + // run VGA core + multicore_launch_core1(VgaCore); +} + // request to initialize VGA videomode, NULL=only stop driver (wait to initialization completes) void VgaInitReq(const sVmode* vmode) { diff --git a/src/vga.h b/src/vga.h index 3387740..1c3a006 100644 --- a/src/vga.h +++ b/src/vga.h @@ -114,8 +114,8 @@ void ScanlineTypePrint(const u8* scan, int lines); // - All layer modes must use same layer program (LAYERMODE_BASE = overlapped layers are OFF) void VgaInit(const sVmode* vmode); //, u8 layer1mode=LAYERMODE_BASE, u8 layer2mode=LAYERMODE_BASE, u8 layer3mode=LAYERMODE_BASE); -// VGA core -void VgaCore(); +// Start the VGA processing on core1 +void StartVgaCore(); // request to initialize VGA videomode, NULL=only stop driver (wait to initialization completes) void VgaInitReq(const sVmode* vmode); diff --git a/src/vga_vmode.cpp b/src/vga_vmode.cpp index efe3e4b..907ae8b 100644 --- a/src/vga_vmode.cpp +++ b/src/vga_vmode.cpp @@ -769,11 +769,8 @@ const u16 VideoResReq[RES_MAX*2] = // FORM_RLE: pointer to image rows (ALIGNED attribute, should be in RAM) void Video(u8 dev, u8 res, u8 form, u8* buf, const void* buf2 /* = FontBoldB8x16 */) { - // stop VGA core - multicore_reset_core1(); - // run VGA core - multicore_launch_core1(VgaCore); + StartVgaCore(); // prepare timings structure if (dev >= DEV_MAX) dev = DEV_VGA;