aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.c34
-rw-r--r--src/makefile14
-rw-r--r--test/ppu-stm-integration-demo/.gitignore1
-rw-r--r--test/ppu-stm-integration-demo/data.txt2521
-rw-r--r--test/ppu-stm-integration-demo/img.pngbin0 -> 2438 bytes
-rw-r--r--test/ppu-stm-integration-demo/makefile6
-rw-r--r--test/ppu-stm-integration-demo/readme.md9
7 files changed, 2564 insertions, 21 deletions
diff --git a/src/main.c b/src/main.c
index 191d5d9..8d36bf5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,21 +1,37 @@
#include <stdlib.h>
+#include <stm32f0xx_hal.h>
-#include "demo.h"
-#include "input.h"
#include "main.h"
+#include "stm32/setup.h"
+#include "../test/ppu-stm-integration-demo/data.h"
bool g_hh_run = true;
int main() {
hh_setup();
- hh_loop();
+
+ while (1) {
+ for (unsigned long i = 0; i < HH_PPUINTDEMO_LENGTH; i++) {
+ uint16_t addr = HH_PPUINTDEMO_ADDR[i];
+ uint16_t data = HH_PPUINTDEMO_DATA[i];
+
+ uint8_t spi_data[4] = {
+ (addr & 0xff00) >> 8,
+ (addr & 0x00ff) >> 0,
+ (data & 0xff00) >> 8,
+ (data & 0x00ff) >> 0,
+ };
+
+ HAL_SPI_Transmit(&hspi1, spi_data, 4, HAL_MAX_DELAY);
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, true);
+ // HAL_Delay(1);
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, false);
+ // HAL_Delay(1);
+ }
+ HAL_Delay(1e3);
+ }
+
hh_exit();
return 0;
}
-void hh_ppu_vblank_interrupt() {
- static unsigned long frame = 0;
- hh_input_read();
- hh_demo_loop(frame);
- frame++;
-}
diff --git a/src/makefile b/src/makefile
index d7d9087..e2fc1d3 100644
--- a/src/makefile
+++ b/src/makefile
@@ -3,7 +3,7 @@ RM = rm -f
TARGET = main
# platform is ds (desktop) or stm (stm32)
-PLATFORM = ds
+PLATFORM = stm
# if your editor uses compile_commands.json for autocomplete, you should run `make compile_commands.json` again
HOST=$(strip $(shell uname -o))
@@ -27,17 +27,7 @@ LFLAGS += -lm
CFLAGS += $(if $(STM), -DHH_TARGET_STM32, )
CFLAGS += $(if $(DESKTOP), -DHH_TARGET_DESKTOP, )
-LOCAL_SRCS += main.c \
- ppu/internals.c \
- ppu/ppu.c \
- demo.c \
- engine/engine.c \
- engine/sprite_controller.c \
- engine/player_controller.c \
- engine/draw_screen.c \
- engine/camera.c \
- engine/maths.c \
- engine/entity.c
+LOCAL_SRCS += main.c
CFLAGS += $(SHARED_FLAGS)
LFLAGS += $(SHARED_FLAGS)
diff --git a/test/ppu-stm-integration-demo/.gitignore b/test/ppu-stm-integration-demo/.gitignore
new file mode 100644
index 0000000..f6e7f8c
--- /dev/null
+++ b/test/ppu-stm-integration-demo/.gitignore
@@ -0,0 +1 @@
+data.h
diff --git a/test/ppu-stm-integration-demo/data.txt b/test/ppu-stm-integration-demo/data.txt
new file mode 100644
index 0000000..f0c3b43
--- /dev/null
+++ b/test/ppu-stm-integration-demo/data.txt
@@ -0,0 +1,2521 @@
+0000: 0000
+0001: 1249
+0002: 0001
+0003: 1000
+0004: 1249
+0005: 0249
+0006: 1000
+0007: 1249
+0008: 1249
+0009: 1001
+000a: 1249
+000b: 1249
+000c: 0049
+000d: 1249
+000e: 1249
+000f: 0249
+0010: 1249
+0011: 1249
+0012: 1249
+0013: 1249
+0014: 1249
+0015: 1249
+0016: 1249
+0017: 1249
+0018: 1249
+0019: 1249
+001a: 1249
+001b: 1249
+001c: 1249
+001d: 1249
+001e: 0249
+001f: 1249
+0020: 1249
+0021: 1249
+0022: 1241
+0023: 1241
+0024: 0049
+0025: 1000
+0026: 1201
+0027: 1249
+0028: 1049
+0029: 0009
+002a: 1249
+002b: 1049
+002c: 0009
+002d: 1240
+002e: 1249
+002f: 0009
+0030: 0000
+0031: 1249
+0032: 0001
+0033: 0000
+0034: 0001
+0035: 0208
+0036: 1000
+0037: 0000
+0038: 0200
+0039: 0000
+003a: 0048
+003b: 0200
+003c: 0001
+003d: 1008
+003e: 0200
+003f: 0040
+0040: 0008
+0041: 0208
+0042: 1000
+0043: 0008
+0044: 0200
+0045: 0000
+0046: 0008
+0047: 0200
+0048: 0001
+0049: 0208
+004a: 0200
+004b: 0040
+004c: 0008
+004d: 0201
+004e: 1000
+004f: 0008
+0050: 0040
+0051: 0000
+0052: 0008
+0053: 1000
+0054: 0001
+0055: 0208
+0056: 1000
+0057: 0040
+0058: 0008
+0059: 1001
+005a: 1000
+005b: 0008
+005c: 1040
+005d: 0000
+005e: 0008
+005f: 1000
+0060: 0000
+0061: 0208
+0062: 1000
+0063: 0008
+0064: 0008
+0065: 1001
+0066: 0200
+0067: 0000
+dc01: 0444
+d000: 0001
+d001: 5f5a
+d001: 0001
+d002: 5f5a
+d002: 0001
+d003: 5f5a
+d003: 0001
+d004: 5f5a
+d004: 0001
+d005: 5f5a
+d005: 0001
+d006: 5f5a
+d006: 0001
+d007: 5f5a
+d007: 0001
+d008: 5f5a
+d008: 0001
+d009: 5f5a
+d009: 0001
+d00a: 5f5a
+d00a: 0001
+d00b: 5f5a
+d00b: 0001
+d00c: 5f5a
+d00c: 0001
+d00d: 5f5a
+d00d: 0001
+d00e: 5f5a
+d00e: 0001
+d00f: 5f5a
+d00f: 0001
+d010: 5f5a
+d010: 0001
+d011: 5f5a
+d011: 0001
+d012: 5f5a
+d012: 0001
+d013: 5f5a
+d013: 0001
+d014: 5f5a
+d014: 0001
+d015: 5f5a
+d015: 0001
+d016: 5f5a
+d016: 0001
+d017: 5f5a
+d017: 0001
+d018: 5f5a
+d018: 0001
+d019: 5f5a
+d019: 0001
+d01a: 5f5a
+d01a: 0001
+d01b: 5f5a
+d01b: 0001
+d01c: 5f5a
+d01c: 0001
+d01d: 5f5a
+d01d: 0001
+d01e: 5f5a
+d01e: 0001
+d01f: 5f5a
+d01f: 0001
+d020: 5f5a
+d020: 0001
+d021: 5f5a
+d021: 0001
+d022: 5f5a
+d022: 0001
+d023: 5f5a
+d023: 0001
+d024: 5f5a
+d024: 0001
+d025: 5f5a
+d025: 0001
+d026: 5f5a
+d026: 0001
+d027: 5f5a
+d027: 0001
+d028: 5f5a
+d028: 0001
+d029: 5f5a
+d029: 0001
+d02a: 5f5a
+d02a: 0001
+d02b: 5f5a
+d02b: 0001
+d02c: 5f5a
+d02c: 0001
+d02d: 5f5a
+d02d: 0001
+d02e: 5f5a
+d02e: 0001
+d02f: 5f5a
+d02f: 0001
+d030: 5f5a
+d030: 0001
+d031: 5f5a
+d031: 0001
+d032: 5f5a
+d032: 0001
+d033: 5f5a
+d033: 0001
+d034: 5f5a
+d034: 0001
+d035: 5f5a
+d035: 0001
+d036: 5f5a
+d036: 0001
+d037: 5f5a
+d037: 0001
+d038: 5f5a
+d038: 0001
+d039: 5f5a
+d039: 0001
+d03a: 5f5a
+d03a: 0001
+d03b: 5f5a
+d03b: 0001
+d03c: 5f5a
+d03c: 0001
+d03d: 5f5a
+d03d: 0001
+d03e: 5f5a
+d03e: 0001
+d03f: 5f5a
+d03f: 0001
+d040: 5f5a
+d040: 0001
+d041: 5f5a
+d041: 0001
+d042: 5f5a
+d042: 0001
+d043: 5f5a
+d043: 0001
+d044: 5f5a
+d044: 0001
+d045: 5f5a
+d045: 0001
+d046: 5f5a
+d046: 0001
+d047: 5f5a
+d047: 0001
+d048: 5f5a
+d048: 0001
+d049: 5f5a
+d049: 0001
+d04a: 5f5a
+d04a: 0001
+d04b: 5f5a
+d04b: 0001
+d04c: 5f5a
+d04c: 0001
+d04d: 5f5a
+d04d: 0001
+d04e: 5f5a
+d04e: 0001
+d04f: 5f5a
+d04f: 0001
+d050: 5f5a
+d050: 0001
+d051: 5f5a
+d051: 0001
+d052: 5f5a
+d052: 0001
+d053: 5f5a
+d053: 0001
+d054: 5f5a
+d054: 0001
+d055: 5f5a
+d055: 0001
+d056: 5f5a
+d056: 0001
+d057: 5f5a
+d057: 0001
+d058: 5f5a
+d058: 0001
+d059: 5f5a
+d059: 0001
+d05a: 5f5a
+d05a: 0001
+d05b: 5f5a
+d05b: 0001
+d05c: 5f5a
+d05c: 0001
+d05d: 5f5a
+d05d: 0001
+d05e: 5f5a
+d05e: 0001
+d05f: 5f5a
+d05f: 0001
+d060: 5f5a
+d060: 0001
+d061: 5f5a
+d061: 0001
+d062: 5f5a
+d062: 0001
+d063: 5f5a
+d063: 0001
+d064: 5f5a
+d064: 0001
+d065: 5f5a
+d065: 0001
+d066: 5f5a
+d066: 0001
+d067: 5f5a
+d067: 0001
+d068: 5f5a
+d068: 0001
+d069: 5f5a
+d069: 0001
+d06a: 5f5a
+d06a: 0001
+d06b: 5f5a
+d06b: 0001
+d06c: 5f5a
+d06c: 0001
+d06d: 5f5a
+d06d: 0001
+d06e: 5f5a
+d06e: 0001
+d06f: 5f5a
+d06f: 0001
+d070: 5f5a
+d070: 0001
+d071: 5f5a
+d071: 0001
+d072: 5f5a
+d072: 0001
+d073: 5f5a
+d073: 0001
+d074: 5f5a
+d074: 0001
+d075: 5f5a
+d075: 0001
+d076: 5f5a
+d076: 0001
+d077: 5f5a
+d077: 0001
+d078: 5f5a
+d078: 0001
+d079: 5f5a
+d079: 0001
+d07a: 5f5a
+d07a: 0001
+d07b: 5f5a
+d07b: 0001
+d07c: 5f5a
+d07c: 0001
+d07d: 5f5a
+d07d: 0001
+d07e: 5f5a
+d07e: 0001
+d07f: 5f5a
+d07f: 0001
+d080: 5f5a
+d080: 0001
+d081: 5f5a
+d081: 0001
+d082: 5f5a
+d082: 0001
+d083: 5f5a
+d083: 0001
+d084: 5f5a
+d084: 0001
+d085: 5f5a
+d085: 0001
+d086: 5f5a
+d086: 0001
+d087: 5f5a
+d087: 0001
+d088: 5f5a
+d088: 0001
+d089: 5f5a
+d089: 0001
+d08a: 5f5a
+d08a: 0001
+d08b: 5f5a
+d08b: 0001
+d08c: 5f5a
+d08c: 0001
+d08d: 5f5a
+d08d: 0001
+d08e: 5f5a
+d08e: 0001
+d08f: 5f5a
+d08f: 0001
+d090: 5f5a
+d090: 0001
+d091: 5f5a
+d091: 0001
+d092: 5f5a
+d092: 0001
+d093: 5f5a
+d093: 0001
+d094: 5f5a
+d094: 0001
+d095: 5f5a
+d095: 0001
+d096: 5f5a
+d096: 0001
+d097: 5f5a
+d097: 0001
+d098: 5f5a
+d098: 0001
+d099: 5f5a
+d099: 0001
+d09a: 5f5a
+d09a: 0001
+d09b: 5f5a
+d09b: 0001
+d09c: 5f5a
+d09c: 0001
+d09d: 5f5a
+d09d: 0001
+d09e: 5f5a
+d09e: 0001
+d09f: 5f5a
+d09f: 0001
+d0a0: 5f5a
+d0a0: 0001
+d0a1: 5f5a
+d0a1: 0001
+d0a2: 5f5a
+d0a2: 0001
+d0a3: 5f5a
+d0a3: 0001
+d0a4: 5f5a
+d0a4: 0001
+d0a5: 5f5a
+d0a5: 0001
+d0a6: 5f5a
+d0a6: 0001
+d0a7: 5f5a
+d0a7: 0001
+d0a8: 5f5a
+d0a8: 0001
+d0a9: 5f5a
+d0a9: 0001
+d0aa: 5f5a
+d0aa: 0001
+d0ab: 5f5a
+d0ab: 0001
+d0ac: 5f5a
+d0ac: 0001
+d0ad: 5f5a
+d0ad: 0001
+d0ae: 5f5a
+d0ae: 0001
+d0af: 5f5a
+d0af: 0001
+d0b0: 5f5a
+d0b0: 0001
+d0b1: 5f5a
+d0b1: 0001
+d0b2: 5f5a
+d0b2: 0001
+d0b3: 5f5a
+d0b3: 0001
+d0b4: 5f5a
+d0b4: 0001
+d0b5: 5f5a
+d0b5: 0001
+d0b6: 5f5a
+d0b6: 0001
+d0b7: 5f5a
+d0b7: 0001
+d0b8: 5f5a
+d0b8: 0001
+d0b9: 5f5a
+d0b9: 0001
+d0ba: 5f5a
+d0ba: 0001
+d0bb: 5f5a
+d0bb: 0001
+d0bc: 5f5a
+d0bc: 0001
+d0bd: 5f5a
+d0bd: 0001
+d0be: 5f5a
+d0be: 0001
+d0bf: 5f5a
+d0bf: 0001
+d0c0: 5f5a
+d0c0: 0001
+d0c1: 5f5a
+d0c1: 0001
+d0c2: 5f5a
+d0c2: 0001
+d0c3: 5f5a
+d0c3: 0001
+d0c4: 5f5a
+d0c4: 0001
+d0c5: 5f5a
+d0c5: 0001
+d0c6: 5f5a
+d0c6: 0001
+d0c7: 5f5a
+d0c7: 0001
+d0c8: 5f5a
+d0c8: 0001
+d0c9: 5f5a
+d0c9: 0001
+d0ca: 5f5a
+d0ca: 0001
+d0cb: 5f5a
+d0cb: 0001
+d0cc: 5f5a
+d0cc: 0001
+d0cd: 5f5a
+d0cd: 0001
+d0ce: 5f5a
+d0ce: 0001
+d0cf: 5f5a
+d0cf: 0001
+d0d0: 5f5a
+d0d0: 0001
+d0d1: 5f5a
+d0d1: 0001
+d0d2: 5f5a
+d0d2: 0001
+d0d3: 5f5a
+d0d3: 0001
+d0d4: 5f5a
+d0d4: 0001
+d0d5: 5f5a
+d0d5: 0001
+d0d6: 5f5a
+d0d6: 0001
+d0d7: 5f5a
+d0d7: 0001
+d0d8: 5f5a
+d0d8: 0001
+d0d9: 5f5a
+d0d9: 0001
+d0da: 5f5a
+d0da: 0001
+d0db: 5f5a
+d0db: 0001
+d0dc: 5f5a
+d0dc: 0001
+d0dd: 5f5a
+d0dd: 0001
+d0de: 5f5a
+d0de: 0001
+d0df: 5f5a
+d0df: 0001
+d0e0: 5f5a
+d0e0: 0001
+d0e1: 5f5a
+d0e1: 0001
+d0e2: 5f5a
+d0e2: 0001
+d0e3: 5f5a
+d0e3: 0001
+d0e4: 5f5a
+d0e4: 0001
+d0e5: 5f5a
+d0e5: 0001
+d0e6: 5f5a
+d0e6: 0001
+d0e7: 5f5a
+d0e7: 0001
+d0e8: 5f5a
+d0e8: 0001
+d0e9: 5f5a
+d0e9: 0001
+d0ea: 5f5a
+d0ea: 0001
+d0eb: 5f5a
+d0eb: 0001
+d0ec: 5f5a
+d0ec: 0001
+d0ed: 5f5a
+d0ed: 0001
+d0ee: 5f5a
+d0ee: 0001
+d0ef: 5f5a
+d0ef: 0001
+d0f0: 5f5a
+d0f0: 0001
+d0f1: 5f5a
+d0f1: 0001
+d0f2: 5f5a
+d0f2: 0001
+d0f3: 5f5a
+d0f3: 0001
+d0f4: 5f5a
+d0f4: 0001
+d0f5: 5f5a
+d0f5: 0001
+d0f6: 5f5a
+d0f6: 0001
+d0f7: 5f5a
+d0f7: 0001
+d0f8: 5f5a
+d0f8: 0001
+d0f9: 5f5a
+d0f9: 0001
+d0fa: 5f5a
+d0fa: 0001
+d0fb: 5f5a
+d0fb: 0001
+d0fc: 5f5a
+d0fc: 0001
+d0fd: 5f5a
+d0fd: 0001
+d0fe: 5f5a
+d0fe: 0001
+d0ff: 5f5a
+d0ff: 0001
+d100: 5f5a
+d100: 0001
+d101: 5f5a
+d101: 0001
+d102: 5f5a
+d102: 0001
+d103: 5f5a
+d103: 0001
+d104: 5f5a
+d104: 0001
+d105: 5f5a
+d105: 0001
+d106: 5f5a
+d106: 0001
+d107: 5f5a
+d107: 0001
+d108: 5f5a
+d108: 0001
+d109: 5f5a
+d109: 0001
+d10a: 5f5a
+d10a: 0001
+d10b: 5f5a
+d10b: 0001
+d10c: 5f5a
+d10c: 0001
+d10d: 5f5a
+d10d: 0001
+d10e: 5f5a
+d10e: 0001
+d10f: 5f5a
+d10f: 0001
+d110: 5f5a
+d110: 0001
+d111: 5f5a
+d111: 0001
+d112: 5f5a
+d112: 0001
+d113: 5f5a
+d113: 0001
+d114: 5f5a
+d114: 0001
+d115: 5f5a
+d115: 0001
+d116: 5f5a
+d116: 0001
+d117: 5f5a
+d117: 0001
+d118: 5f5a
+d118: 0001
+d119: 5f5a
+d119: 0001
+d11a: 5f5a
+d11a: 0001
+d11b: 5f5a
+d11b: 0001
+d11c: 5f5a
+d11c: 0001
+d11d: 5f5a
+d11d: 0001
+d11e: 5f5a
+d11e: 0001
+d11f: 5f5a
+d11f: 0001
+d120: 5f5a
+d120: 0001
+d121: 5f5a
+d121: 0001
+d122: 5f5a
+d122: 0001
+d123: 5f5a
+d123: 0001
+d124: 5f5a
+d124: 0001
+d125: 5f5a
+d125: 0001
+d126: 5f5a
+d126: 0001
+d127: 5f5a
+d127: 0001
+d128: 5f5a
+d128: 0001
+d129: 5f5a
+d129: 0001
+d12a: 5f5a
+d12a: 0001
+d12b: 5f5a
+d12b: 0001
+d12c: 5f5a
+d12c: 0001
+d12d: 5f5a
+d12d: 0001
+d12e: 5f5a
+d12e: 0001
+d12f: 5f5a
+d12f: 0001
+d130: 5f5a
+d130: 0001
+d131: 5f5a
+d131: 0001
+d132: 5f5a
+d132: 0001
+d133: 5f5a
+d133: 0001
+d134: 5f5a
+d134: 0001
+d135: 5f5a
+d135: 0001
+d136: 5f5a
+d136: 0001
+d137: 5f5a
+d137: 0001
+d138: 5f5a
+d138: 0001
+d139: 5f5a
+d139: 0001
+d13a: 5f5a
+d13a: 0001
+d13b: 5f5a
+d13b: 0001
+d13c: 5f5a
+d13c: 0001
+d13d: 5f5a
+d13d: 0001
+d13e: 5f5a
+d13e: 0001
+d13f: 5f5a
+d13f: 0001
+d140: 5f5a
+d140: 0001
+d141: 5f5a
+d141: 0001
+d142: 5f5a
+d142: 0001
+d143: 5f5a
+d143: 0001
+d144: 5f5a
+d144: 0001
+d145: 5f5a
+d145: 0001
+d146: 5f5a
+d146: 0001
+d147: 5f5a
+d147: 0001
+d148: 5f5a
+d148: 0001
+d149: 5f5a
+d149: 0001
+d14a: 5f5a
+d14a: 0001
+d14b: 5f5a
+d14b: 0001
+d14c: 5f5a
+d14c: 0001
+d14d: 5f5a
+d14d: 0001
+d14e: 5f5a
+d14e: 0001
+d14f: 5f5a
+d14f: 0001
+d150: 5f5a
+d150: 0001
+d151: 5f5a
+d151: 0001
+d152: 5f5a
+d152: 0001
+d153: 5f5a
+d153: 0001
+d154: 5f5a
+d154: 0001
+d155: 5f5a
+d155: 0001
+d156: 5f5a
+d156: 0001
+d157: 5f5a
+d157: 0001
+d158: 5f5a
+d158: 0001
+d159: 5f5a
+d159: 0001
+d15a: 5f5a
+d15a: 0001
+d15b: 5f5a
+d15b: 0001
+d15c: 5f5a
+d15c: 0001
+d15d: 5f5a
+d15d: 0001
+d15e: 5f5a
+d15e: 0001
+d15f: 5f5a
+d15f: 0001
+d160: 5f5a
+d160: 0001
+d161: 5f5a
+d161: 0001
+d162: 5f5a
+d162: 0001
+d163: 5f5a
+d163: 0001
+d164: 5f5a
+d164: 0001
+d165: 5f5a
+d165: 0001
+d166: 5f5a
+d166: 0001
+d167: 5f5a
+d167: 0001
+d168: 5f5a
+d168: 0001
+d169: 5f5a
+d169: 0001
+d16a: 5f5a
+d16a: 0001
+d16b: 5f5a
+d16b: 0001
+d16c: 5f5a
+d16c: 0001
+d16d: 5f5a
+d16d: 0001
+d16e: 5f5a
+d16e: 0001
+d16f: 5f5a
+d16f: 0001
+d170: 5f5a
+d170: 0001
+d171: 5f5a
+d171: 0001
+d172: 5f5a
+d172: 0001
+d173: 5f5a
+d173: 0001
+d174: 5f5a
+d174: 0001
+d175: 5f5a
+d175: 0001
+d176: 5f5a
+d176: 0001
+d177: 5f5a
+d177: 0001
+d178: 5f5a
+d178: 0001
+d179: 5f5a
+d179: 0001
+d17a: 5f5a
+d17a: 0001
+d17b: 5f5a
+d17b: 0001
+d17c: 5f5a
+d17c: 0001
+d17d: 5f5a
+d17d: 0001
+d17e: 5f5a
+d17e: 0001
+d17f: 5f5a
+d17f: 0001
+d180: 5f5a
+d180: 0001
+d181: 5f5a
+d181: 0001
+d182: 5f5a
+d182: 0001
+d183: 5f5a
+d183: 0001
+d184: 5f5a
+d184: 0001
+d185: 5f5a
+d185: 0001
+d186: 5f5a
+d186: 0001
+d187: 5f5a
+d187: 0001
+d188: 5f5a
+d188: 0001
+d189: 5f5a
+d189: 0001
+d18a: 5f5a
+d18a: 0001
+d18b: 5f5a
+d18b: 0001
+d18c: 5f5a
+d18c: 0001
+d18d: 5f5a
+d18d: 0001
+d18e: 5f5a
+d18e: 0001
+d18f: 5f5a
+d18f: 0001
+d190: 5f5a
+d190: 0001
+d191: 5f5a
+d191: 0001
+d192: 5f5a
+d192: 0001
+d193: 5f5a
+d193: 0001
+d194: 5f5a
+d194: 0001
+d195: 5f5a
+d195: 0001
+d196: 5f5a
+d196: 0001
+d197: 5f5a
+d197: 0001
+d198: 5f5a
+d198: 0001
+d199: 5f5a
+d199: 0001
+d19a: 5f5a
+d19a: 0001
+d19b: 5f5a
+d19b: 0001
+d19c: 5f5a
+d19c: 0001
+d19d: 5f5a
+d19d: 0001
+d19e: 5f5a
+d19e: 0001
+d19f: 5f5a
+d19f: 0001
+d1a0: 5f5a
+d1a0: 0001
+d1a1: 5f5a
+d1a1: 0001
+d1a2: 5f5a
+d1a2: 0001
+d1a3: 5f5a
+d1a3: 0001
+d1a4: 5f5a
+d1a4: 0001
+d1a5: 5f5a
+d1a5: 0001
+d1a6: 5f5a
+d1a6: 0001
+d1a7: 5f5a
+d1a7: 0001
+d1a8: 5f5a
+d1a8: 0001
+d1a9: 5f5a
+d1a9: 0001
+d1aa: 5f5a
+d1aa: 0001
+d1ab: 5f5a
+d1ab: 0001
+d1ac: 5f5a
+d1ac: 0001
+d1ad: 5f5a
+d1ad: 0001
+d1ae: 5f5a
+d1ae: 0001
+d1af: 5f5a
+d1af: 0001
+d1b0: 5f5a
+d1b0: 0001
+d1b1: 5f5a
+d1b1: 0001
+d1b2: 5f5a
+d1b2: 0001
+d1b3: 5f5a
+d1b3: 0001
+d1b4: 5f5a
+d1b4: 0001
+d1b5: 5f5a
+d1b5: 0001
+d1b6: 5f5a
+d1b6: 0001
+d1b7: 5f5a
+d1b7: 0001
+d1b8: 5f5a
+d1b8: 0001
+d1b9: 5f5a
+d1b9: 0001
+d1ba: 5f5a
+d1ba: 0001
+d1bb: 5f5a
+d1bb: 0001
+d1bc: 5f5a
+d1bc: 0001
+d1bd: 5f5a
+d1bd: 0001
+d1be: 5f5a
+d1be: 0001
+d1bf: 5f5a
+d1bf: 0001
+d1c0: 5f5a
+d1c0: 0001
+d1c1: 5f5a
+d1c1: 0001
+d1c2: 5f5a
+d1c2: 0001
+d1c3: 5f5a
+d1c3: 0001
+d1c4: 5f5a
+d1c4: 0001
+d1c5: 5f5a
+d1c5: 0001
+d1c6: 5f5a
+d1c6: 0001
+d1c7: 5f5a
+d1c7: 0001
+d1c8: 5f5a
+d1c8: 0001
+d1c9: 5f5a
+d1c9: 0001
+d1ca: 5f5a
+d1ca: 0001
+d1cb: 5f5a
+d1cb: 0001
+d1cc: 5f5a
+d1cc: 0001
+d1cd: 5f5a
+d1cd: 0001
+d1ce: 5f5a
+d1ce: 0001
+d1cf: 5f5a
+d1cf: 0001
+d1d0: 5f5a
+d1d0: 0001
+d1d1: 5f5a
+d1d1: 0001
+d1d2: 5f5a
+d1d2: 0001
+d1d3: 5f5a
+d1d3: 0001
+d1d4: 5f5a
+d1d4: 0001
+d1d5: 5f5a
+d1d5: 0001
+d1d6: 5f5a
+d1d6: 0001
+d1d7: 5f5a
+d1d7: 0001
+d1d8: 5f5a
+d1d8: 0001
+d1d9: 5f5a
+d1d9: 0001
+d1da: 5f5a
+d1da: 0001
+d1db: 5f5a
+d1db: 0001
+d1dc: 5f5a
+d1dc: 0001
+d1dd: 5f5a
+d1dd: 0001
+d1de: 5f5a
+d1de: 0001
+d1df: 5f5a
+d1df: 0001
+d1e0: 5f5a
+d1e0: 0001
+d1e1: 5f5a
+d1e1: 0001
+d1e2: 5f5a
+d1e2: 0001
+d1e3: 5f5a
+d1e3: 0001
+d1e4: 5f5a
+d1e4: 0001
+d1e5: 5f5a
+d1e5: 0001
+d1e6: 5f5a
+d1e6: 0001
+d1e7: 5f5a
+d1e7: 0001
+d1e8: 5f5a
+d1e8: 0001
+d1e9: 5f5a
+d1e9: 0001
+d1ea: 5f5a
+d1ea: 0001
+d1eb: 5f5a
+d1eb: 0001
+d1ec: 5f5a
+d1ec: 0001
+d1ed: 5f5a
+d1ed: 0001
+d1ee: 5f5a
+d1ee: 0001
+d1ef: 5f5a
+d1ef: 0001
+d1f0: 5f5a
+d1f0: 0001
+d1f1: 5f5a
+d1f1: 0001
+d1f2: 5f5a
+d1f2: 0001
+d1f3: 5f5a
+d1f3: 0001
+d1f4: 5f5a
+d1f4: 0001
+d1f5: 5f5a
+d1f5: 0001
+d1f6: 5f5a
+d1f6: 0001
+d1f7: 5f5a
+d1f7: 0001
+d1f8: 5f5a
+d1f8: 0001
+d1f9: 5f5a
+d1f9: 0001
+d1fa: 5f5a
+d1fa: 0001
+d1fb: 5f5a
+d1fb: 0001
+d1fc: 5f5a
+d1fc: 0001
+d1fd: 5f5a
+d1fd: 0001
+d1fe: 5f5a
+d1fe: 0001
+d1ff: 5f5a
+d1ff: 0001
+d200: 5f5a
+d200: 0001
+d201: 5f5a
+d201: 0001
+d202: 5f5a
+d202: 0001
+d203: 5f5a
+d203: 0001
+d204: 5f5a
+d204: 0001
+d205: 5f5a
+d205: 0001
+d206: 5f5a
+d206: 0001
+d207: 5f5a
+d207: 0001
+d208: 5f5a
+d208: 0001
+d209: 5f5a
+d209: 0001
+d20a: 5f5a
+d20a: 0001
+d20b: 5f5a
+d20b: 0001
+d20c: 5f5a
+d20c: 0001
+d20d: 5f5a
+d20d: 0001
+d20e: 5f5a
+d20e: 0001
+d20f: 5f5a
+d20f: 0001
+d210: 5f5a
+d210: 0001
+d211: 5f5a
+d211: 0001
+d212: 5f5a
+d212: 0001
+d213: 5f5a
+d213: 0001
+d214: 5f5a
+d214: 0001
+d215: 5f5a
+d215: 0001
+d216: 5f5a
+d216: 0001
+d217: 5f5a
+d217: 0001
+d218: 5f5a
+d218: 0001
+d219: 5f5a
+d219: 0001
+d21a: 5f5a
+d21a: 0001
+d21b: 5f5a
+d21b: 0001
+d21c: 5f5a
+d21c: 0001
+d21d: 5f5a
+d21d: 0001
+d21e: 5f5a
+d21e: 0001
+d21f: 5f5a
+d21f: 0001
+d220: 5f5a
+d220: 0001
+d221: 5f5a
+d221: 0001
+d222: 5f5a
+d222: 0001
+d223: 5f5a
+d223: 0001
+d224: 5f5a
+d224: 0001
+d225: 5f5a
+d225: 0001
+d226: 5f5a
+d226: 0001
+d227: 5f5a
+d227: 0001
+d228: 5f5a
+d228: 0001
+d229: 5f5a
+d229: 0001
+d22a: 5f5a
+d22a: 0001
+d22b: 5f5a
+d22b: 0001
+d22c: 5f5a
+d22c: 0001
+d22d: 5f5a
+d22d: 0001
+d22e: 5f5a
+d22e: 0001
+d22f: 5f5a
+d22f: 0001
+d230: 5f5a
+d230: 0001
+d231: 5f5a
+d231: 0001
+d232: 5f5a
+d232: 0001
+d233: 5f5a
+d233: 0001
+d234: 5f5a
+d234: 0001
+d235: 5f5a
+d235: 0001
+d236: 5f5a
+d236: 0001
+d237: 5f5a
+d237: 0001
+d238: 5f5a
+d238: 0001
+d239: 5f5a
+d239: 0001
+d23a: 5f5a
+d23a: 0001
+d23b: 5f5a
+d23b: 0001
+d23c: 5f5a
+d23c: 0001
+d23d: 5f5a
+d23d: 0001
+d23e: 5f5a
+d23e: 0001
+d23f: 5f5a
+d23f: 0001
+d240: 5f5a
+d240: 0001
+d241: 5f5a
+d241: 0001
+d242: 5f5a
+d242: 0001
+d243: 5f5a
+d243: 0001
+d244: 5f5a
+d244: 0001
+d245: 5f5a
+d245: 0001
+d246: 5f5a
+d246: 0001
+d247: 5f5a
+d247: 0001
+d248: 5f5a
+d248: 0001
+d249: 5f5a
+d249: 0001
+d24a: 5f5a
+d24a: 0001
+d24b: 5f5a
+d24b: 0001
+d24c: 5f5a
+d24c: 0001
+d24d: 5f5a
+d24d: 0001
+d24e: 5f5a
+d24e: 0001
+d24f: 5f5a
+d24f: 0001
+d250: 5f5a
+d250: 0001
+d251: 5f5a
+d251: 0001
+d252: 5f5a
+d252: 0001
+d253: 5f5a
+d253: 0001
+d254: 5f5a
+d254: 0001
+d255: 5f5a
+d255: 0001
+d256: 5f5a
+d256: 0001
+d257: 5f5a
+d257: 0001
+d258: 5f5a
+d258: 0001
+d259: 5f5a
+d259: 0001
+d25a: 5f5a
+d25a: 0001
+d25b: 5f5a
+d25b: 0001
+d25c: 5f5a
+d25c: 0001
+d25d: 5f5a
+d25d: 0001
+d25e: 5f5a
+d25e: 0001
+d25f: 5f5a
+d25f: 0001
+d260: 5f5a
+d260: 0001
+d261: 5f5a
+d261: 0001
+d262: 5f5a
+d262: 0001
+d263: 5f5a
+d263: 0001
+d264: 5f5a
+d264: 0001
+d265: 5f5a
+d265: 0001
+d266: 5f5a
+d266: 0001
+d267: 5f5a
+d267: 0001
+d268: 5f5a
+d268: 0001
+d269: 5f5a
+d269: 0001
+d26a: 5f5a
+d26a: 0001
+d26b: 5f5a
+d26b: 0001
+d26c: 5f5a
+d26c: 0001
+d26d: 5f5a
+d26d: 0001
+d26e: 5f5a
+d26e: 0001
+d26f: 5f5a
+d26f: 0001
+d270: 5f5a
+d270: 0001
+d271: 5f5a
+d271: 0001
+d272: 5f5a
+d272: 0001
+d273: 5f5a
+d273: 0001
+d274: 5f5a
+d274: 0001
+d275: 5f5a
+d275: 0001
+d276: 5f5a
+d276: 0001
+d277: 5f5a
+d277: 0001
+d278: 5f5a
+d278: 0001
+d279: 5f5a
+d279: 0001
+d27a: 5f5a
+d27a: 0001
+d27b: 5f5a
+d27b: 0001
+d27c: 5f5a
+d27c: 0001
+d27d: 5f5a
+d27d: 0001
+d27e: 5f5a
+d27e: 0001
+d27f: 5f5a
+d27f: 0001
+d280: 5f5a
+d280: 0001
+d281: 5f5a
+d281: 0001
+d282: 5f5a
+d282: 0001
+d283: 5f5a
+d283: 0001
+d284: 5f5a
+d284: 0001
+d285: 5f5a
+d285: 0001
+d286: 5f5a
+d286: 0001
+d287: 5f5a
+d287: 0001
+d288: 5f5a
+d288: 0001
+d289: 5f5a
+d289: 0001
+d28a: 5f5a
+d28a: 0001
+d28b: 5f5a
+d28b: 0001
+d28c: 5f5a
+d28c: 0001
+d28d: 5f5a
+d28d: 0001
+d28e: 5f5a
+d28e: 0001
+d28f: 5f5a
+d28f: 0001
+d290: 5f5a
+d290: 0001
+d291: 5f5a
+d291: 0001
+d292: 5f5a
+d292: 0001
+d293: 5f5a
+d293: 0001
+d294: 5f5a
+d294: 0001
+d295: 5f5a
+d295: 0001
+d296: 5f5a
+d296: 0001
+d297: 5f5a
+d297: 0001
+d298: 5f5a
+d298: 0001
+d299: 5f5a
+d299: 0001
+d29a: 5f5a
+d29a: 0001
+d29b: 5f5a
+d29b: 0001
+d29c: 5f5a
+d29c: 0001
+d29d: 5f5a
+d29d: 0001
+d29e: 5f5a
+d29e: 0001
+d29f: 5f5a
+d29f: 0001
+d2a0: 5f5a
+d2a0: 0001
+d2a1: 5f5a
+d2a1: 0001
+d2a2: 5f5a
+d2a2: 0001
+d2a3: 5f5a
+d2a3: 0001
+d2a4: 5f5a
+d2a4: 0001
+d2a5: 5f5a
+d2a5: 0001
+d2a6: 5f5a
+d2a6: 0001
+d2a7: 5f5a
+d2a7: 0001
+d2a8: 5f5a
+d2a8: 0001
+d2a9: 5f5a
+d2a9: 0001
+d2aa: 5f5a
+d2aa: 0001
+d2ab: 5f5a
+d2ab: 0001
+d2ac: 5f5a
+d2ac: 0001
+d2ad: 5f5a
+d2ad: 0001
+d2ae: 5f5a
+d2ae: 0001
+d2af: 5f5a
+d2af: 0001
+d2b0: 5f5a
+d2b0: 0001
+d2b1: 5f5a
+d2b1: 0001
+d2b2: 5f5a
+d2b2: 0001
+d2b3: 5f5a
+d2b3: 0001
+d2b4: 5f5a
+d2b4: 0001
+d2b5: 5f5a
+d2b5: 0001
+d2b6: 5f5a
+d2b6: 0001
+d2b7: 5f5a
+d2b7: 0001
+d2b8: 5f5a
+d2b8: 0001
+d2b9: 5f5a
+d2b9: 0001
+d2ba: 5f5a
+d2ba: 0001
+d2bb: 5f5a
+d2bb: 0001
+d2bc: 5f5a
+d2bc: 0001
+d2bd: 5f5a
+d2bd: 0001
+d2be: 5f5a
+d2be: 0001
+d2bf: 5f5a
+d2bf: 0001
+d2c0: 5f5a
+d2c0: 0001
+d2c1: 5f5a
+d2c1: 0001
+d2c2: 5f5a
+d2c2: 0001
+d2c3: 5f5a
+d2c3: 0001
+d2c4: 5f5a
+d2c4: 0001
+d2c5: 5f5a
+d2c5: 0001
+d2c6: 5f5a
+d2c6: 0001
+d2c7: 5f5a
+d2c7: 0001
+d2c8: 5f5a
+d2c8: 0001
+d2c9: 5f5a
+d2c9: 0001
+d2ca: 5f5a
+d2ca: 0001
+d2cb: 5f5a
+d2cb: 0001
+d2cc: 5f5a
+d2cc: 0001
+d2cd: 5f5a
+d2cd: 0001
+d2ce: 5f5a
+d2ce: 0001
+d2cf: 5f5a
+d2cf: 0001
+d2d0: 5f5a
+d2d0: 0001
+d2d1: 5f5a
+d2d1: 0001
+d2d2: 5f5a
+d2d2: 0001
+d2d3: 5f5a
+d2d3: 0001
+d2d4: 5f5a
+d2d4: 0001
+d2d5: 5f5a
+d2d5: 0001
+d2d6: 5f5a
+d2d6: 0001
+d2d7: 5f5a
+d2d7: 0001
+d2d8: 5f5a
+d2d8: 0001
+d2d9: 5f5a
+d2d9: 0001
+d2da: 5f5a
+d2da: 0001
+d2db: 5f5a
+d2db: 0001
+d2dc: 5f5a
+d2dc: 0001
+d2dd: 5f5a
+d2dd: 0001
+d2de: 5f5a
+d2de: 0001
+d2df: 5f5a
+d2df: 0001
+d2e0: 5f5a
+d2e0: 0001
+d2e1: 5f5a
+d2e1: 0001
+d2e2: 5f5a
+d2e2: 0001
+d2e3: 5f5a
+d2e3: 0001
+d2e4: 5f5a
+d2e4: 0001
+d2e5: 5f5a
+d2e5: 0001
+d2e6: 5f5a
+d2e6: 0001
+d2e7: 5f5a
+d2e7: 0001
+d2e8: 5f5a
+d2e8: 0001
+d2e9: 5f5a
+d2e9: 0001
+d2ea: 5f5a
+d2ea: 0001
+d2eb: 5f5a
+d2eb: 0001
+d2ec: 5f5a
+d2ec: 0001
+d2ed: 5f5a
+d2ed: 0001
+d2ee: 5f5a
+d2ee: 0001
+d2ef: 5f5a
+d2ef: 0001
+d2f0: 5f5a
+d2f0: 0001
+d2f1: 5f5a
+d2f1: 0001
+d2f2: 5f5a
+d2f2: 0001
+d2f3: 5f5a
+d2f3: 0001
+d2f4: 5f5a
+d2f4: 0001
+d2f5: 5f5a
+d2f5: 0001
+d2f6: 5f5a
+d2f6: 0001
+d2f7: 5f5a
+d2f7: 0001
+d2f8: 5f5a
+d2f8: 0001
+d2f9: 5f5a
+d2f9: 0001
+d2fa: 5f5a
+d2fa: 0001
+d2fb: 5f5a
+d2fb: 0001
+d2fc: 5f5a
+d2fc: 0001
+d2fd: 5f5a
+d2fd: 0001
+d2fe: 5f5a
+d2fe: 0001
+d2ff: 5f5a
+d2ff: 0001
+d300: 5f5a
+d300: 0001
+d301: 5f5a
+d301: 0001
+d302: 5f5a
+d302: 0001
+d303: 5f5a
+d303: 0001
+d304: 5f5a
+d304: 0001
+d305: 5f5a
+d305: 0001
+d306: 5f5a
+d306: 0001
+d307: 5f5a
+d307: 0001
+d308: 5f5a
+d308: 0001
+d309: 5f5a
+d309: 0001
+d30a: 5f5a
+d30a: 0001
+d30b: 5f5a
+d30b: 0001
+d30c: 5f5a
+d30c: 0001
+d30d: 5f5a
+d30d: 0001
+d30e: 5f5a
+d30e: 0001
+d30f: 5f5a
+d30f: 0001
+d310: 5f5a
+d310: 0001
+d311: 5f5a
+d311: 0001
+d312: 5f5a
+d312: 0001
+d313: 5f5a
+d313: 0001
+d314: 5f5a
+d314: 0001
+d315: 5f5a
+d315: 0001
+d316: 5f5a
+d316: 0001
+d317: 5f5a
+d317: 0001
+d318: 5f5a
+d318: 0001
+d319: 5f5a
+d319: 0001
+d31a: 5f5a
+d31a: 0001
+d31b: 5f5a
+d31b: 0001
+d31c: 5f5a
+d31c: 0001
+d31d: 5f5a
+d31d: 0001
+d31e: 5f5a
+d31e: 0001
+d31f: 5f5a
+d31f: 0001
+d320: 5f5a
+d320: 0001
+d321: 5f5a
+d321: 0001
+d322: 5f5a
+d322: 0001
+d323: 5f5a
+d323: 0001
+d324: 5f5a
+d324: 0001
+d325: 5f5a
+d325: 0001
+d326: 5f5a
+d326: 0001
+d327: 5f5a
+d327: 0001
+d328: 5f5a
+d328: 0001
+d329: 5f5a
+d329: 0001
+d32a: 5f5a
+d32a: 0001
+d32b: 5f5a
+d32b: 0001
+d32c: 5f5a
+d32c: 0001
+d32d: 5f5a
+d32d: 0001
+d32e: 5f5a
+d32e: 0001
+d32f: 5f5a
+d32f: 0001
+d330: 5f5a
+d330: 0001
+d331: 5f5a
+d331: 0001
+d332: 5f5a
+d332: 0001
+d333: 5f5a
+d333: 0001
+d334: 5f5a
+d334: 0001
+d335: 5f5a
+d335: 0001
+d336: 5f5a
+d336: 0001
+d337: 5f5a
+d337: 0001
+d338: 5f5a
+d338: 0001
+d339: 5f5a
+d339: 0001
+d33a: 5f5a
+d33a: 0001
+d33b: 5f5a
+d33b: 0001
+d33c: 5f5a
+d33c: 0001
+d33d: 5f5a
+d33d: 0001
+d33e: 5f5a
+d33e: 0001
+d33f: 5f5a
+d33f: 0001
+d340: 5f5a
+d340: 0001
+d341: 5f5a
+d341: 0001
+d342: 5f5a
+d342: 0001
+d343: 5f5a
+d343: 0001
+d344: 5f5a
+d344: 0001
+d345: 5f5a
+d345: 0001
+d346: 5f5a
+d346: 0001
+d347: 5f5a
+d347: 0001
+d348: 5f5a
+d348: 0001
+d349: 5f5a
+d349: 0001
+d34a: 5f5a
+d34a: 0001
+d34b: 5f5a
+d34b: 0001
+d34c: 5f5a
+d34c: 0001
+d34d: 5f5a
+d34d: 0001
+d34e: 5f5a
+d34e: 0001
+d34f: 5f5a
+d34f: 0001
+d350: 5f5a
+d350: 0001
+d351: 5f5a
+d351: 0001
+d352: 5f5a
+d352: 0001
+d353: 5f5a
+d353: 0001
+d354: 5f5a
+d354: 0001
+d355: 5f5a
+d355: 0001
+d356: 5f5a
+d356: 0001
+d357: 5f5a
+d357: 0001
+d358: 5f5a
+d358: 0001
+d359: 5f5a
+d359: 0001
+d35a: 5f5a
+d35a: 0001
+d35b: 5f5a
+d35b: 0001
+d35c: 5f5a
+d35c: 0001
+d35d: 5f5a
+d35d: 0001
+d35e: 5f5a
+d35e: 0001
+d35f: 5f5a
+d35f: 0001
+d360: 5f5a
+d360: 0001
+d361: 5f5a
+d361: 0001
+d362: 5f5a
+d362: 0001
+d363: 5f5a
+d363: 0001
+d364: 5f5a
+d364: 0001
+d365: 5f5a
+d365: 0001
+d366: 5f5a
+d366: 0001
+d367: 5f5a
+d367: 0001
+d368: 5f5a
+d368: 0001
+d369: 5f5a
+d369: 0001
+d36a: 5f5a
+d36a: 0001
+d36b: 5f5a
+d36b: 0001
+d36c: 5f5a
+d36c: 0001
+d36d: 5f5a
+d36d: 0001
+d36e: 5f5a
+d36e: 0001
+d36f: 5f5a
+d36f: 0001
+d370: 5f5a
+d370: 0001
+d371: 5f5a
+d371: 0001
+d372: 5f5a
+d372: 0001
+d373: 5f5a
+d373: 0001
+d374: 5f5a
+d374: 0001
+d375: 5f5a
+d375: 0001
+d376: 5f5a
+d376: 0001
+d377: 5f5a
+d377: 0001
+d378: 5f5a
+d378: 0001
+d379: 5f5a
+d379: 0001
+d37a: 5f5a
+d37a: 0001
+d37b: 5f5a
+d37b: 0001
+d37c: 5f5a
+d37c: 0001
+d37d: 5f5a
+d37d: 0001
+d37e: 5f5a
+d37e: 0001
+d37f: 5f5a
+d37f: 0001
+d380: 5f5a
+d380: 0001
+d381: 5f5a
+d381: 0001
+d382: 5f5a
+d382: 0001
+d383: 5f5a
+d383: 0001
+d384: 5f5a
+d384: 0001
+d385: 5f5a
+d385: 0001
+d386: 5f5a
+d386: 0001
+d387: 5f5a
+d387: 0001
+d388: 5f5a
+d388: 0001
+d389: 5f5a
+d389: 0001
+d38a: 5f5a
+d38a: 0001
+d38b: 5f5a
+d38b: 0001
+d38c: 5f5a
+d38c: 0001
+d38d: 5f5a
+d38d: 0001
+d38e: 5f5a
+d38e: 0001
+d38f: 5f5a
+d38f: 0001
+d390: 5f5a
+d390: 0001
+d391: 5f5a
+d391: 0001
+d392: 5f5a
+d392: 0001
+d393: 5f5a
+d393: 0001
+d394: 5f5a
+d394: 0001
+d395: 5f5a
+d395: 0001
+d396: 5f5a
+d396: 0001
+d397: 5f5a
+d397: 0001
+d398: 5f5a
+d398: 0001
+d399: 5f5a
+d399: 0001
+d39a: 5f5a
+d39a: 0001
+d39b: 5f5a
+d39b: 0001
+d39c: 5f5a
+d39c: 0001
+d39d: 5f5a
+d39d: 0001
+d39e: 5f5a
+d39e: 0001
+d39f: 5f5a
+d39f: 0001
+d3a0: 5f5a
+d3a0: 0001
+d3a1: 5f5a
+d3a1: 0001
+d3a2: 5f5a
+d3a2: 0001
+d3a3: 5f5a
+d3a3: 0001
+d3a4: 5f5a
+d3a4: 0001
+d3a5: 5f5a
+d3a5: 0001
+d3a6: 5f5a
+d3a6: 0001
+d3a7: 5f5a
+d3a7: 0001
+d3a8: 5f5a
+d3a8: 0001
+d3a9: 5f5a
+d3a9: 0001
+d3aa: 5f5a
+d3aa: 0001
+d3ab: 5f5a
+d3ab: 0001
+d3ac: 5f5a
+d3ac: 0001
+d3ad: 5f5a
+d3ad: 0001
+d3ae: 5f5a
+d3ae: 0001
+d3af: 5f5a
+d3af: 0001
+d3b0: 5f5a
+d3b0: 0001
+d3b1: 5f5a
+d3b1: 0001
+d3b2: 5f5a
+d3b2: 0001
+d3b3: 5f5a
+d3b3: 0001
+d3b4: 5f5a
+d3b4: 0001
+d3b5: 5f5a
+d3b5: 0001
+d3b6: 5f5a
+d3b6: 0001
+d3b7: 5f5a
+d3b7: 0001
+d3b8: 5f5a
+d3b8: 0001
+d3b9: 5f5a
+d3b9: 0001
+d3ba: 5f5a
+d3ba: 0001
+d3bb: 5f5a
+d3bb: 0001
+d3bc: 5f5a
+d3bc: 0001
+d3bd: 5f5a
+d3bd: 0001
+d3be: 5f5a
+d3be: 0001
+d3bf: 5f5a
+d3bf: 0001
+d3c0: 5f5a
+d3c0: 0001
+d3c1: 5f5a
+d3c1: 0001
+d3c2: 5f5a
+d3c2: 0001
+d3c3: 5f5a
+d3c3: 0001
+d3c4: 5f5a
+d3c4: 0001
+d3c5: 5f5a
+d3c5: 0001
+d3c6: 5f5a
+d3c6: 0001
+d3c7: 5f5a
+d3c7: 0001
+d3c8: 5f5a
+d3c8: 0001
+d3c9: 5f5a
+d3c9: 0001
+d3ca: 5f5a
+d3ca: 0001
+d3cb: 5f5a
+d3cb: 0001
+d3cc: 5f5a
+d3cc: 0001
+d3cd: 5f5a
+d3cd: 0001
+d3ce: 5f5a
+d3ce: 0001
+d3cf: 5f5a
+d3cf: 0001
+d3d0: 5f5a
+d3d0: 0001
+d3d1: 5f5a
+d3d1: 0001
+d3d2: 5f5a
+d3d2: 0001
+d3d3: 5f5a
+d3d3: 0001
+d3d4: 5f5a
+d3d4: 0001
+d3d5: 5f5a
+d3d5: 0001
+d3d6: 5f5a
+d3d6: 0001
+d3d7: 5f5a
+d3d7: 0001
+d3d8: 5f5a
+d3d8: 0001
+d3d9: 5f5a
+d3d9: 0001
+d3da: 5f5a
+d3da: 0001
+d3db: 5f5a
+d3db: 0001
+d3dc: 5f5a
+d3dc: 0001
+d3dd: 5f5a
+d3dd: 0001
+d3de: 5f5a
+d3de: 0001
+d3df: 5f5a
+d3df: 0001
+d3e0: 5f5a
+d3e0: 0001
+d3e1: 5f5a
+d3e1: 0001
+d3e2: 5f5a
+d3e2: 0001
+d3e3: 5f5a
+d3e3: 0001
+d3e4: 5f5a
+d3e4: 0001
+d3e5: 5f5a
+d3e5: 0001
+d3e6: 5f5a
+d3e6: 0001
+d3e7: 5f5a
+d3e7: 0001
+d3e8: 5f5a
+d3e8: 0001
+d3e9: 5f5a
+d3e9: 0001
+d3ea: 5f5a
+d3ea: 0001
+d3eb: 5f5a
+d3eb: 0001
+d3ec: 5f5a
+d3ec: 0001
+d3ed: 5f5a
+d3ed: 0001
+d3ee: 5f5a
+d3ee: 0001
+d3ef: 5f5a
+d3ef: 0001
+d3f0: 5f5a
+d3f0: 0001
+d3f1: 5f5a
+d3f1: 0001
+d3f2: 5f5a
+d3f2: 0001
+d3f3: 5f5a
+d3f3: 0001
+d3f4: 5f5a
+d3f4: 0001
+d3f5: 5f5a
+d3f5: 0001
+d3f6: 5f5a
+d3f6: 0001
+d3f7: 5f5a
+d3f7: 0001
+d3f8: 5f5a
+d3f8: 0001
+d3f9: 5f5a
+d3f9: 0001
+d3fa: 5f5a
+d3fa: 0001
+d3fb: 5f5a
+d3fb: 0001
+d3fc: 5f5a
+d3fc: 0001
+d3fd: 5f5a
+d3fd: 0001
+d3fe: 5f5a
+d3fe: 0001
+d3ff: 5f5a
+d3ff: 0001
+d400: 5f5a
+d400: 0001
+d401: 5f5a
+d401: 0001
+d402: 5f5a
+d402: 0001
+d403: 5f5a
+d403: 0001
+d404: 5f5a
+d404: 0001
+d405: 5f5a
+d405: 0001
+d406: 5f5a
+d406: 0001
+d407: 5f5a
+d407: 0001
+d408: 5f5a
+d408: 0001
+d409: 5f5a
+d409: 0001
+d40a: 5f5a
+d40a: 0001
+d40b: 5f5a
+d40b: 0001
+d40c: 5f5a
+d40c: 0001
+d40d: 5f5a
+d40d: 0001
+d40e: 5f5a
+d40e: 0001
+d40f: 5f5a
+d40f: 0001
+d410: 5f5a
+d410: 0001
+d411: 5f5a
+d411: 0001
+d412: 5f5a
+d412: 0001
+d413: 5f5a
+d413: 0001
+d414: 5f5a
+d414: 0001
+d415: 5f5a
+d415: 0001
+d416: 5f5a
+d416: 0001
+d417: 5f5a
+d417: 0001
+d418: 5f5a
+d418: 0001
+d419: 5f5a
+d419: 0001
+d41a: 5f5a
+d41a: 0001
+d41b: 5f5a
+d41b: 0001
+d41c: 5f5a
+d41c: 0001
+d41d: 5f5a
+d41d: 0001
+d41e: 5f5a
+d41e: 0001
+d41f: 5f5a
+d41f: 0001
+d420: 5f5a
+d420: 0001
+d421: 5f5a
+d421: 0001
+d422: 5f5a
+d422: 0001
+d423: 5f5a
+d423: 0001
+d424: 5f5a
+d424: 0001
+d425: 5f5a
+d425: 0001
+d426: 5f5a
+d426: 0001
+d427: 5f5a
+d427: 0001
+d428: 5f5a
+d428: 0001
+d429: 5f5a
+d429: 0001
+d42a: 5f5a
+d42a: 0001
+d42b: 5f5a
+d42b: 0001
+d42c: 5f5a
+d42c: 0001
+d42d: 5f5a
+d42d: 0001
+d42e: 5f5a
+d42e: 0001
+d42f: 5f5a
+d42f: 0001
+d430: 5f5a
+d430: 0001
+d431: 5f5a
+d431: 0001
+d432: 5f5a
+d432: 0001
+d433: 5f5a
+d433: 0001
+d434: 5f5a
+d434: 0001
+d435: 5f5a
+d435: 0001
+d436: 5f5a
+d436: 0001
+d437: 5f5a
+d437: 0001
+d438: 5f5a
+d438: 0001
+d439: 5f5a
+d439: 0001
+d43a: 5f5a
+d43a: 0001
+d43b: 5f5a
+d43b: 0001
+d43c: 5f5a
+d43c: 0001
+d43d: 5f5a
+d43d: 0001
+d43e: 5f5a
+d43e: 0001
+d43f: 5f5a
+d43f: 0001
+d440: 5f5a
+d440: 0001
+d441: 5f5a
+d441: 0001
+d442: 5f5a
+d442: 0001
+d443: 5f5a
+d443: 0001
+d444: 5f5a
+d444: 0001
+d445: 5f5a
+d445: 0001
+d446: 5f5a
+d446: 0001
+d447: 5f5a
+d447: 0001
+d448: 5f5a
+d448: 0001
+d449: 5f5a
+d449: 0001
+d44a: 5f5a
+d44a: 0001
+d44b: 5f5a
+d44b: 0001
+d44c: 5f5a
+d44c: 0001
+d44d: 5f5a
+d44d: 0001
+d44e: 5f5a
+d44e: 0001
+d44f: 5f5a
+d44f: 0001
+d450: 5f5a
+d450: 0001
+d451: 5f5a
+d451: 0001
+d452: 5f5a
+d452: 0001
+d453: 5f5a
+d453: 0001
+d454: 5f5a
+d454: 0001
+d455: 5f5a
+d455: 0001
+d456: 5f5a
+d456: 0001
+d457: 5f5a
+d457: 0001
+d458: 5f5a
+d458: 0001
+d459: 5f5a
+d459: 0001
+d45a: 5f5a
+d45a: 0001
+d45b: 5f5a
+d45b: 0001
+d45c: 5f5a
+d45c: 0001
+d45d: 5f5a
+d45d: 0001
+d45e: 5f5a
+d45e: 0001
+d45f: 5f5a
+d45f: 0001
+d460: 5f5a
+d460: 0001
+d461: 5f5a
+d461: 0001
+d462: 5f5a
+d462: 0001
+d463: 5f5a
+d463: 0001
+d464: 5f5a
+d464: 0001
+d465: 5f5a
+d465: 0001
+d466: 5f5a
+d466: 0001
+d467: 5f5a
+d467: 0001
+d468: 5f5a
+d468: 0001
+d469: 5f5a
+d469: 0001
+d46a: 5f5a
+d46a: 0001
+d46b: 5f5a
+d46b: 0001
+d46c: 5f5a
+d46c: 0001
+d46d: 5f5a
+d46d: 0001
+d46e: 5f5a
+d46e: 0001
+d46f: 5f5a
+d46f: 0001
+d470: 5f5a
+d470: 0001
+d471: 5f5a
+d471: 0001
+d472: 5f5a
+d472: 0001
+d473: 5f5a
+d473: 0001
+d474: 5f5a
+d474: 0001
+d475: 5f5a
+d475: 0001
+d476: 5f5a
+d476: 0001
+d477: 5f5a
+d477: 0001
+d478: 5f5a
+d478: 0001
+d479: 5f5a
+d479: 0001
+d47a: 5f5a
+d47a: 0001
+d47b: 5f5a
+d47b: 0001
+d47c: 5f5a
+d47c: 0001
+d47d: 5f5a
+d47d: 0001
+d47e: 5f5a
+d47e: 0001
+d47f: 5f5a
+d47f: 0001
+d480: 5f5a
+d480: 0001
+d481: 5f5a
+d481: 0001
+d482: 5f5a
+d482: 0001
+d483: 5f5a
+d483: 0001
+d484: 5f5a
+d484: 0001
+d485: 5f5a
+d485: 0001
+d486: 5f5a
+d486: 0001
+d487: 5f5a
+d487: 0001
+d488: 5f5a
+d488: 0001
+d489: 5f5a
+d489: 0001
+d48a: 5f5a
+d48a: 0001
+d48b: 5f5a
+d48b: 0001
+d48c: 5f5a
+d48c: 0001
+d48d: 5f5a
+d48d: 0001
+d48e: 5f5a
+d48e: 0001
+d48f: 5f5a
+d48f: 0001
+d490: 5f5a
+d490: 0001
+d491: 5f5a
+d491: 0001
+d492: 5f5a
+d492: 0001
+d493: 5f5a
+d493: 0001
+d494: 5f5a
+d494: 0001
+d495: 5f5a
+d495: 0001
+d496: 5f5a
+d496: 0001
+d497: 5f5a
+d497: 0001
+d498: 5f5a
+d498: 0001
+d499: 5f5a
+d499: 0001
+d49a: 5f5a
+d49a: 0001
+d49b: 5f5a
+d49b: 0001
+d49c: 5f5a
+d49c: 0001
+d49d: 5f5a
+d49d: 0001
+d49e: 5f5a
+d49e: 0001
+d49f: 5f5a
+d49f: 0001
+d4a0: 5f5a
+d4a0: 0001
+d4a1: 5f5a
+d4a1: 0001
+d4a2: 5f5a
+d4a2: 0001
+d4a3: 5f5a
+d4a3: 0001
+d4a4: 5f5a
+d4a4: 0001
+d4a5: 5f5a
+d4a5: 0001
+d4a6: 5f5a
+d4a6: 0001
+d4a7: 5f5a
+d4a7: 0001
+d4a8: 5f5a
+d4a8: 0001
+d4a9: 5f5a
+d4a9: 0001
+d4aa: 5f5a
+d4aa: 0001
+d4ab: 5f5a
+d4ab: 0001
+d4ac: 5f5a
+d4ac: 0001
+d4ad: 5f5a
+d4ad: 0001
+d4ae: 5f5a
+d4ae: 0001
+d4af: 5f5a
+d4af: 0001
+dc09: 0f0f
+dc11: 0fff
+dc19: 0f00
+dc21: 00ff
+dc29: 000f
+de00: 0401
+de01: 0000
+d800: a400
+d801: 1ad3
+d802: 8800
+d803: 1773
+d804: 4c00
+d805: 1372
+d806: 7000
+d807: 0fb0
+d808: 7400
+d809: 0dce
diff --git a/test/ppu-stm-integration-demo/img.png b/test/ppu-stm-integration-demo/img.png
new file mode 100644
index 0000000..449d8ec
--- /dev/null
+++ b/test/ppu-stm-integration-demo/img.png
Binary files differ
diff --git a/test/ppu-stm-integration-demo/makefile b/test/ppu-stm-integration-demo/makefile
new file mode 100644
index 0000000..715a22b
--- /dev/null
+++ b/test/ppu-stm-integration-demo/makefile
@@ -0,0 +1,6 @@
+data.h: data.txt
+ echo "#pragma once" > $@
+ echo "#include <stdint.h>" >> $@
+ (printf "#define HH_PPUINTDEMO_LENGTH "; wc -l < $<) >> $@
+ tr -d ':' < $< | awk 'BEGIN { printf "const uint16_t HH_PPUINTDEMO_ADDR[] = { " } 1 { printf "0x"$$1", " } END { print "};" }' >> $@
+ tr -d ':' < $< | awk 'BEGIN { printf "const uint16_t HH_PPUINTDEMO_DATA[] = { " } 1 { printf "0x"$$2", " } END { print "};" }' >> $@
diff --git a/test/ppu-stm-integration-demo/readme.md b/test/ppu-stm-integration-demo/readme.md
new file mode 100644
index 0000000..4e9be23
--- /dev/null
+++ b/test/ppu-stm-integration-demo/readme.md
@@ -0,0 +1,9 @@
+# ppu-stm integration demo
+
+- data.txt is generated using a hacked version of the ppusim demo
+- makefile converts data into header file for c
+- main.c should be compiled and uploaded to stm32
+- this program sends ppu data to the ppu using HAL SPI, and should produce
+ img.png as output
+- other details undocumented
+