diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index c59c3c548a87f6401c442116d6ed011cbe6de23e..b088f28f4d4a6a8cd810433089afa1c1a8686d9c 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,26 +1,31 @@
-name: PlatformIO CI
+name: Build CI
 
 on: [push, pull_request]
 
 jobs:
+  find-examples: # Job that list subdirectories
+    runs-on: ubuntu-latest
+    outputs:
+      dir: ${{ steps.set-dirs.outputs.dir }} # generate output name dir by using inner step output
+    steps:
+      - uses: actions/checkout@v3
+      - id: set-dirs # Give it an id to handle to get step outputs in the outputs key above
+        run: echo "::set-output name=dir::$(find examples -name Makefile -print0 |xargs -0 -n 1 dirname | jq -R -s -c 'split("\n")[:-1]')"
+        # Define step output named dir base on ls command transformed to JSON thanks to jq
   # Build using native Makefile buildsystem
   makefile-build:
+    needs: [find-examples] # Depends on previous job
     runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        example: ${{fromJson(needs.find-examples.outputs.dir)}}
     steps:
     - uses: actions/checkout@v3
     - name: Install Dependencies
       run: sudo apt-get update && sudo apt-get install -y build-essential make libnewlib-dev gcc-riscv64-unknown-elf libusb-1.0-0-dev
-    - name: Build Blink Example
-      run: cd examples/blink && make V=1 -j3 blink.elf && riscv64-unknown-elf-size blink.elf && cd ../..
-    - name: Build debugprintfdemo Example
-      run: cd examples/debugprintfdemo && make V=1 -j3 debugprintfdemo.elf && riscv64-unknown-elf-size debugprintfdemo.elf && cd ../..
-    # currently not compiling: __get_dscratch0() not defined.
-    #- name: Build sandbox Example
-    #  run: cd examples/sandbox && make V=1 -j3 sandbox.elf && riscv64-unknown-elf-size sandbox.elf && cd ../..
-    - name: Build uartdemo Example
-      run: cd examples/uartdemo && make V=1 -j3 uartdemo.elf && riscv64-unknown-elf-size uartdemo.elf && cd ../..
-    - name: Build ws2812 Example
-      run: cd examples/ws2812demo && make V=1 -j3 ws2812bdemo.elf && riscv64-unknown-elf-size ws2812bdemo.elf && cd ../..
+    - name: Build ${{ matrix.example }}
+      run: cd ${{ matrix.example }} && make V=1 -j3 $(basename ${{ matrix.example }}.elf) && riscv64-unknown-elf-size $(basename ${{ matrix.example }}.elf)
   # Build using PlatformIO
   pio-build:
     strategy:
diff --git a/examples/run_from_ram/run_from_ram.c b/examples/run_from_ram/run_from_ram.c
index 8ece215fa526b39c1f5b3a76a0cfaf20e6873f03..071e52bcd1a94e47cfcc42dbe6926ec73a167708 100644
--- a/examples/run_from_ram/run_from_ram.c
+++ b/examples/run_from_ram/run_from_ram.c
@@ -39,6 +39,7 @@ void RamFunction()
 		// But we turbo through twiddling a pin.
 		
 		asm volatile("\n\
+			.option rvc\n\
 			li a0, 1 | (1<<4)\n\
 			li a1, (1<<16) | (1<<(16+4))\n\
 			la a2, 0x40011410 /* GPIO D*/ \n\
diff --git a/examples/ws2812demo/Makefile b/examples/ws2812bdemo/Makefile
similarity index 100%
rename from examples/ws2812demo/Makefile
rename to examples/ws2812bdemo/Makefile
diff --git a/examples/ws2812demo/README.md b/examples/ws2812bdemo/README.md
similarity index 100%
rename from examples/ws2812demo/README.md
rename to examples/ws2812bdemo/README.md
diff --git a/examples/ws2812demo/color_utilities.h b/examples/ws2812bdemo/color_utilities.h
similarity index 100%
rename from examples/ws2812demo/color_utilities.h
rename to examples/ws2812bdemo/color_utilities.h
diff --git a/examples/ws2812demo/ws2812b_dma_spi_led_driver.h b/examples/ws2812bdemo/ws2812b_dma_spi_led_driver.h
similarity index 100%
rename from examples/ws2812demo/ws2812b_dma_spi_led_driver.h
rename to examples/ws2812bdemo/ws2812b_dma_spi_led_driver.h
diff --git a/examples/ws2812demo/ws2812bdemo.c b/examples/ws2812bdemo/ws2812bdemo.c
similarity index 100%
rename from examples/ws2812demo/ws2812bdemo.c
rename to examples/ws2812bdemo/ws2812bdemo.c
diff --git a/platformio.ini b/platformio.ini
index a23fc60a0f32ac959d20635c2aa647b51964e02a..d4a84f4dc8b1fcd177fe2d61f313c02f6d7a7e96 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -8,13 +8,9 @@ platform = https://github.com/Community-PIO-CH32V/platform-ch32v.git
 ; or genericCH32V003A4M6 or whatever, see platform link
 board = ch32v003f4p6_evt_r0
 monitor_speed = 115200
-; use a source filter to only build certain folders / files
-
-; for examples that use ch32v003evt as their base
-[evt_base]
-board_build.ldscript = ch32v003evt/ch32v003.ld
-build_flags = -flto -Ich32v003evt -lgcc
-build_src_filter = +<ch32v003evt>
+; all environments use ch32v003 fun as base, no more ch32v003evt
+extends = fun_base
+; use a source filter to only build certain folders / files in later environments
 
 ; for examples that use ch32v003fun as their base
 [fun_base]
@@ -23,22 +19,31 @@ build_flags = -flto -Ich32v003fun -I/usr/include/newlib -DTINYVECTOR -lgcc
 build_src_filter = +<ch32v003fun>
 
 [env:blink]
-extends = fun_base
 build_src_filter = ${fun_base.build_src_filter} +<examples/blink>
 
+[env:bootload]
+build_src_filter = ${fun_base.build_src_filter} +<examples/bootload>
+
 [env:debugprintfdemo]
-extends = fun_base
 build_src_filter = ${fun_base.build_src_filter} +<examples/debugprintfdemo>
 
-; sandbox demo does currently not compile (undefined reference to `__get_dscratch0')
-;[env:sandbox]
-;extends = fun_base
-;build_src_filter = ${fun_base.build_src_filter} +<examples/sandbox>
+[env:external_crystal]
+build_src_filter = ${fun_base.build_src_filter} +<examples/external_crystal>
+
+[env:optionbytes]
+build_src_filter = ${fun_base.build_src_filter} +<examples/optionbytes>
+
+[env:run_from_ram]
+build_src_filter = ${fun_base.build_src_filter} +<examples/run_from_ram>
+
+[env:sandbox]
+build_src_filter = ${fun_base.build_src_filter} +<examples/sandbox>
+
+[env:self_modify_code]
+build_src_filter = ${fun_base.build_src_filter} +<examples/self_modify_code>
 
 [env:uartdemo]
-extends = fun_base
 build_src_filter = ${fun_base.build_src_filter} +<examples/uartdemo>
 
-[env:ws2812demo]
-extends = fun_base
-build_src_filter = ${evt_base.build_src_filter} +<examples/ws2812demo>
+[env:ws2812bdemo]
+build_src_filter = ${fun_base.build_src_filter} +<examples/ws2812bdemo>
\ No newline at end of file