From c33b7f7d65e8013845e21e2828b29ee60f22a375 Mon Sep 17 00:00:00 2001 From: pcawte Date: Tue, 1 Aug 2023 21:24:42 +0700 Subject: [PATCH] vdp_vdu & vdp_key libraries added --- Agon-HW.md | 459 +++++++ README.md | 128 +- assets/2023-07-27-10-43-19-image.png | Bin 0 -> 70490 bytes assets/2023-07-27-10-47-02-image.png | Bin 0 -> 92568 bytes assets/2023-07-27-10-47-36-image.png | Bin 0 -> 104842 bytes include/vdp_key.h | 29 + include/vdp_vdu.h | 57 + lib/agon/intagon.src | 165 +++ lib/agon/vdp_key.c.src | 340 +++++ lib/agon/vdp_vdu.c.src | 1461 +++++++++++++++++++++ meta/linker_script | 22 +- src/libc/include/mos_api.h | 75 +- src/libc/include/vdp_key.h | 29 + src/libc/include/vdp_vdu.h | 57 + src/libc/vdp_key.c | 175 +++ src/libc/vdp_vdu.c | 353 +++++ tests/sprite/bin/bitmaps/gal-red0.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/gal-red1.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/gal-red2.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/gal-red3.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship00.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship01.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship02.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship03.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship04.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship05.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship06.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship07.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship08.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship09.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship10.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship11.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship12.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship13.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship14.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship15.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship16.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship17.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship18.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship19.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship20.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship21.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship22.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/bitmaps/ship23.rgba | Bin 0 -> 1024 bytes tests/sprite/bin/sprite.bin | Bin 0 -> 13570 bytes tests/sprite/bin/sprite.map | 197 +++ tests/sprite/img-src/Galaxian.png | Bin 0 -> 7299 bytes tests/sprite/img-src/Galaxian1.png | Bin 0 -> 1171 bytes tests/sprite/img-src/Galaxian10.png | Bin 0 -> 1174 bytes tests/sprite/img-src/Galaxian100.png | Bin 0 -> 1197 bytes tests/sprite/img-src/Galaxian101.png | Bin 0 -> 1200 bytes tests/sprite/img-src/Galaxian102.png | Bin 0 -> 1194 bytes tests/sprite/img-src/Galaxian103.png | Bin 0 -> 1188 bytes tests/sprite/img-src/Galaxian104.png | Bin 0 -> 1195 bytes tests/sprite/img-src/Galaxian105.png | Bin 0 -> 1193 bytes tests/sprite/img-src/Galaxian106.png | Bin 0 -> 1173 bytes tests/sprite/img-src/Galaxian107.png | Bin 0 -> 1150 bytes tests/sprite/img-src/Galaxian108.png | Bin 0 -> 1158 bytes tests/sprite/img-src/Galaxian109.png | Bin 0 -> 1188 bytes tests/sprite/img-src/Galaxian11.png | Bin 0 -> 1178 bytes tests/sprite/img-src/Galaxian110.png | Bin 0 -> 1191 bytes tests/sprite/img-src/Galaxian111.png | Bin 0 -> 1198 bytes tests/sprite/img-src/Galaxian112.png | Bin 0 -> 1192 bytes tests/sprite/img-src/Galaxian113.png | Bin 0 -> 1199 bytes tests/sprite/img-src/Galaxian114.png | Bin 0 -> 1196 bytes tests/sprite/img-src/Galaxian115.png | Bin 0 -> 1185 bytes tests/sprite/img-src/Galaxian116.png | Bin 0 -> 1190 bytes tests/sprite/img-src/Galaxian117.png | Bin 0 -> 1191 bytes tests/sprite/img-src/Galaxian118.png | Bin 0 -> 1178 bytes tests/sprite/img-src/Galaxian119.png | Bin 0 -> 1136 bytes tests/sprite/img-src/Galaxian12.png | Bin 0 -> 1176 bytes tests/sprite/img-src/Galaxian120.png | Bin 0 -> 1136 bytes tests/sprite/img-src/Galaxian121.png | Bin 0 -> 1184 bytes tests/sprite/img-src/Galaxian122.png | Bin 0 -> 1186 bytes tests/sprite/img-src/Galaxian123.png | Bin 0 -> 1192 bytes tests/sprite/img-src/Galaxian124.png | Bin 0 -> 1186 bytes tests/sprite/img-src/Galaxian125.png | Bin 0 -> 1179 bytes tests/sprite/img-src/Galaxian126.png | Bin 0 -> 1187 bytes tests/sprite/img-src/Galaxian127.png | Bin 0 -> 1175 bytes tests/sprite/img-src/Galaxian128.png | Bin 0 -> 1192 bytes tests/sprite/img-src/Galaxian129.png | Bin 0 -> 1164 bytes tests/sprite/img-src/Galaxian13.png | Bin 0 -> 1171 bytes tests/sprite/img-src/Galaxian130.png | Bin 0 -> 1143 bytes tests/sprite/img-src/Galaxian131.png | Bin 0 -> 1136 bytes tests/sprite/img-src/Galaxian132.png | Bin 0 -> 1164 bytes tests/sprite/img-src/Galaxian14.png | Bin 0 -> 1174 bytes tests/sprite/img-src/Galaxian15.png | Bin 0 -> 1173 bytes tests/sprite/img-src/Galaxian16.png | Bin 0 -> 1175 bytes tests/sprite/img-src/Galaxian17.png | Bin 0 -> 1176 bytes tests/sprite/img-src/Galaxian18.png | Bin 0 -> 1179 bytes tests/sprite/img-src/Galaxian19.png | Bin 0 -> 1181 bytes tests/sprite/img-src/Galaxian2.png | Bin 0 -> 1174 bytes tests/sprite/img-src/Galaxian20.png | Bin 0 -> 1180 bytes tests/sprite/img-src/Galaxian21.png | Bin 0 -> 1179 bytes tests/sprite/img-src/Galaxian22.png | Bin 0 -> 1174 bytes tests/sprite/img-src/Galaxian23.png | Bin 0 -> 1178 bytes tests/sprite/img-src/Galaxian24.png | Bin 0 -> 1176 bytes tests/sprite/img-src/Galaxian25.png | Bin 0 -> 1171 bytes tests/sprite/img-src/Galaxian26.png | Bin 0 -> 1174 bytes tests/sprite/img-src/Galaxian27.png | Bin 0 -> 1173 bytes tests/sprite/img-src/Galaxian28.png | Bin 0 -> 1175 bytes tests/sprite/img-src/Galaxian29.png | Bin 0 -> 1176 bytes tests/sprite/img-src/Galaxian3.png | Bin 0 -> 1173 bytes tests/sprite/img-src/Galaxian30.png | Bin 0 -> 1179 bytes tests/sprite/img-src/Galaxian31.png | Bin 0 -> 1180 bytes tests/sprite/img-src/Galaxian32.png | Bin 0 -> 1180 bytes tests/sprite/img-src/Galaxian33.png | Bin 0 -> 1179 bytes tests/sprite/img-src/Galaxian34.png | Bin 0 -> 1174 bytes tests/sprite/img-src/Galaxian35.png | Bin 0 -> 1202 bytes tests/sprite/img-src/Galaxian36.png | Bin 0 -> 1198 bytes tests/sprite/img-src/Galaxian37.png | Bin 0 -> 1192 bytes tests/sprite/img-src/Galaxian38.png | Bin 0 -> 1190 bytes tests/sprite/img-src/Galaxian39.png | Bin 0 -> 1188 bytes tests/sprite/img-src/Galaxian4.png | Bin 0 -> 1175 bytes tests/sprite/img-src/Galaxian40.png | Bin 0 -> 1182 bytes tests/sprite/img-src/Galaxian41.png | Bin 0 -> 1182 bytes tests/sprite/img-src/Galaxian42.png | Bin 0 -> 1180 bytes tests/sprite/img-src/Galaxian43.png | Bin 0 -> 1171 bytes tests/sprite/img-src/Galaxian44.png | Bin 0 -> 1172 bytes tests/sprite/img-src/Galaxian45.png | Bin 0 -> 1165 bytes tests/sprite/img-src/Galaxian46.png | Bin 0 -> 1183 bytes tests/sprite/img-src/Galaxian47.png | Bin 0 -> 1184 bytes tests/sprite/img-src/Galaxian48.png | Bin 0 -> 1163 bytes tests/sprite/img-src/Galaxian49.png | Bin 0 -> 1200 bytes tests/sprite/img-src/Galaxian5.png | Bin 0 -> 1176 bytes tests/sprite/img-src/Galaxian50.png | Bin 0 -> 1188 bytes tests/sprite/img-src/Galaxian51.png | Bin 0 -> 1183 bytes tests/sprite/img-src/Galaxian52.png | Bin 0 -> 1202 bytes tests/sprite/img-src/Galaxian53.png | Bin 0 -> 1204 bytes tests/sprite/img-src/Galaxian54.png | Bin 0 -> 1194 bytes tests/sprite/img-src/Galaxian55.png | Bin 0 -> 1221 bytes tests/sprite/img-src/Galaxian56.png | Bin 0 -> 1210 bytes tests/sprite/img-src/Galaxian57.png | Bin 0 -> 1180 bytes tests/sprite/img-src/Galaxian58.png | Bin 0 -> 1178 bytes tests/sprite/img-src/Galaxian59.png | Bin 0 -> 1165 bytes tests/sprite/img-src/Galaxian6.png | Bin 0 -> 1179 bytes tests/sprite/img-src/Galaxian60.png | Bin 0 -> 1156 bytes tests/sprite/img-src/Galaxian61.png | Bin 0 -> 1181 bytes tests/sprite/img-src/Galaxian62.png | Bin 0 -> 1197 bytes tests/sprite/img-src/Galaxian63.png | Bin 0 -> 1190 bytes tests/sprite/img-src/Galaxian64.png | Bin 0 -> 1199 bytes tests/sprite/img-src/Galaxian65.png | Bin 0 -> 1210 bytes tests/sprite/img-src/Galaxian66.png | Bin 0 -> 1209 bytes tests/sprite/img-src/Galaxian67.png | Bin 0 -> 1199 bytes tests/sprite/img-src/Galaxian68.png | Bin 0 -> 1200 bytes tests/sprite/img-src/Galaxian69.png | Bin 0 -> 1171 bytes tests/sprite/img-src/Galaxian7.png | Bin 0 -> 1181 bytes tests/sprite/img-src/Galaxian70.png | Bin 0 -> 1172 bytes tests/sprite/img-src/Galaxian71.png | Bin 0 -> 1148 bytes tests/sprite/img-src/Galaxian72.png | Bin 0 -> 1145 bytes tests/sprite/img-src/Galaxian73.png | Bin 0 -> 1185 bytes tests/sprite/img-src/Galaxian74.png | Bin 0 -> 1207 bytes tests/sprite/img-src/Galaxian75.png | Bin 0 -> 1195 bytes tests/sprite/img-src/Galaxian76.png | Bin 0 -> 1202 bytes tests/sprite/img-src/Galaxian77.png | Bin 0 -> 1210 bytes tests/sprite/img-src/Galaxian78.png | Bin 0 -> 1217 bytes tests/sprite/img-src/Galaxian79.png | Bin 0 -> 1209 bytes tests/sprite/img-src/Galaxian8.png | Bin 0 -> 1180 bytes tests/sprite/img-src/Galaxian80.png | Bin 0 -> 1200 bytes tests/sprite/img-src/Galaxian81.png | Bin 0 -> 1167 bytes tests/sprite/img-src/Galaxian82.png | Bin 0 -> 1170 bytes tests/sprite/img-src/Galaxian83.png | Bin 0 -> 1160 bytes tests/sprite/img-src/Galaxian84.png | Bin 0 -> 1163 bytes tests/sprite/img-src/Galaxian85.png | Bin 0 -> 1195 bytes tests/sprite/img-src/Galaxian86.png | Bin 0 -> 1196 bytes tests/sprite/img-src/Galaxian87.png | Bin 0 -> 1197 bytes tests/sprite/img-src/Galaxian88.png | Bin 0 -> 1195 bytes tests/sprite/img-src/Galaxian89.png | Bin 0 -> 1201 bytes tests/sprite/img-src/Galaxian9.png | Bin 0 -> 1179 bytes tests/sprite/img-src/Galaxian90.png | Bin 0 -> 1195 bytes tests/sprite/img-src/Galaxian91.png | Bin 0 -> 1190 bytes tests/sprite/img-src/Galaxian92.png | Bin 0 -> 1195 bytes tests/sprite/img-src/Galaxian93.png | Bin 0 -> 1195 bytes tests/sprite/img-src/Galaxian94.png | Bin 0 -> 1171 bytes tests/sprite/img-src/Galaxian95.png | Bin 0 -> 1168 bytes tests/sprite/img-src/Galaxian96.png | Bin 0 -> 1166 bytes tests/sprite/img-src/Galaxian97.png | Bin 0 -> 1192 bytes tests/sprite/img-src/Galaxian98.png | Bin 0 -> 1195 bytes tests/sprite/img-src/Galaxian99.png | Bin 0 -> 1200 bytes tests/sprite/img-src/gal-red0.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/gal-red1.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/gal-red2.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/gal-red3.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/Galaxian37.png | Bin 0 -> 1171 bytes tests/sprite/img-src/ship/Galaxian38.png | Bin 0 -> 1185 bytes tests/sprite/img-src/ship/Galaxian39.png | Bin 0 -> 1181 bytes tests/sprite/img-src/ship/Galaxian40.png | Bin 0 -> 1186 bytes tests/sprite/img-src/ship/Galaxian41.png | Bin 0 -> 1190 bytes tests/sprite/img-src/ship/Galaxian42.png | Bin 0 -> 1188 bytes tests/sprite/img-src/ship/Galaxian43.png | Bin 0 -> 1186 bytes tests/sprite/img-src/ship/Galaxian44.png | Bin 0 -> 1187 bytes tests/sprite/img-src/ship/Galaxian45.png | Bin 0 -> 1188 bytes tests/sprite/img-src/ship/Galaxian46.png | Bin 0 -> 1181 bytes tests/sprite/img-src/ship/Galaxian47.png | Bin 0 -> 1184 bytes tests/sprite/img-src/ship/Galaxian48.png | Bin 0 -> 1178 bytes tests/sprite/img-src/ship/Galaxian49.png | Bin 0 -> 1171 bytes tests/sprite/img-src/ship/Galaxian50.png | Bin 0 -> 1183 bytes tests/sprite/img-src/ship/Galaxian51.png | Bin 0 -> 1184 bytes tests/sprite/img-src/ship/Galaxian52.png | Bin 0 -> 1180 bytes tests/sprite/img-src/ship/Galaxian53.png | Bin 0 -> 1190 bytes tests/sprite/img-src/ship/Galaxian54.png | Bin 0 -> 1189 bytes tests/sprite/img-src/ship/Galaxian55.png | Bin 0 -> 1192 bytes tests/sprite/img-src/ship/Galaxian56.png | Bin 0 -> 1190 bytes tests/sprite/img-src/ship/Galaxian57.png | Bin 0 -> 1188 bytes tests/sprite/img-src/ship/Galaxian58.png | Bin 0 -> 1182 bytes tests/sprite/img-src/ship/Galaxian59.png | Bin 0 -> 1182 bytes tests/sprite/img-src/ship/Galaxian60.png | Bin 0 -> 1180 bytes tests/sprite/img-src/ship/ship00.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship01.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship02.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship03.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship04.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship05.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship06.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship07.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship08.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship09.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship10.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship11.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship12.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship13.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship14.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship15.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship16.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship17.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship18.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship19.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship20.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship21.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship22.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship/ship23.rgba | Bin 0 -> 1024 bytes tests/sprite/img-src/ship2/Galaxian37.png | Bin 0 -> 1171 bytes tests/sprite/img-src/ship2/Galaxian38.png | Bin 0 -> 1185 bytes tests/sprite/img-src/ship2/Galaxian39.png | Bin 0 -> 1181 bytes tests/sprite/img-src/ship2/Galaxian40.png | Bin 0 -> 1186 bytes tests/sprite/img-src/ship2/Galaxian41.png | Bin 0 -> 1190 bytes tests/sprite/img-src/ship2/Galaxian42.png | Bin 0 -> 1188 bytes tests/sprite/img-src/ship2/Galaxian43.png | Bin 0 -> 1186 bytes tests/sprite/img-src/ship2/Galaxian44.png | Bin 0 -> 1187 bytes tests/sprite/img-src/ship2/Galaxian45.png | Bin 0 -> 1188 bytes tests/sprite/img-src/ship2/Galaxian46.png | Bin 0 -> 1181 bytes tests/sprite/img-src/ship2/Galaxian47.png | Bin 0 -> 1184 bytes tests/sprite/img-src/ship2/Galaxian48.png | Bin 0 -> 1178 bytes tests/sprite/img-src/ship2/Galaxian49.png | Bin 0 -> 1171 bytes tests/sprite/img-src/ship2/Galaxian50.png | Bin 0 -> 1183 bytes tests/sprite/img-src/ship2/Galaxian51.png | Bin 0 -> 1184 bytes tests/sprite/img-src/ship2/Galaxian52.png | Bin 0 -> 1180 bytes tests/sprite/img-src/ship2/Galaxian53.png | Bin 0 -> 1190 bytes tests/sprite/img-src/ship2/Galaxian54.png | Bin 0 -> 1189 bytes tests/sprite/img-src/ship2/Galaxian55.png | Bin 0 -> 1192 bytes tests/sprite/img-src/ship2/Galaxian56.png | Bin 0 -> 1190 bytes tests/sprite/img-src/ship2/Galaxian57.png | Bin 0 -> 1188 bytes tests/sprite/img-src/ship2/Galaxian58.png | Bin 0 -> 1182 bytes tests/sprite/img-src/ship2/Galaxian59.png | Bin 0 -> 1182 bytes tests/sprite/img-src/ship2/Galaxian60.png | Bin 0 -> 1180 bytes tests/sprite/makefile | 18 + tests/sprite/src/sprite.c | 129 ++ 257 files changed, 3654 insertions(+), 40 deletions(-) create mode 100644 Agon-HW.md create mode 100644 assets/2023-07-27-10-43-19-image.png create mode 100644 assets/2023-07-27-10-47-02-image.png create mode 100644 assets/2023-07-27-10-47-36-image.png create mode 100644 include/vdp_key.h create mode 100644 include/vdp_vdu.h create mode 100644 lib/agon/intagon.src create mode 100644 lib/agon/vdp_key.c.src create mode 100644 lib/agon/vdp_vdu.c.src create mode 100644 src/libc/include/vdp_key.h create mode 100644 src/libc/include/vdp_vdu.h create mode 100644 src/libc/vdp_key.c create mode 100644 src/libc/vdp_vdu.c create mode 100644 tests/sprite/bin/bitmaps/gal-red0.rgba create mode 100644 tests/sprite/bin/bitmaps/gal-red1.rgba create mode 100644 tests/sprite/bin/bitmaps/gal-red2.rgba create mode 100644 tests/sprite/bin/bitmaps/gal-red3.rgba create mode 100644 tests/sprite/bin/bitmaps/ship00.rgba create mode 100644 tests/sprite/bin/bitmaps/ship01.rgba create mode 100644 tests/sprite/bin/bitmaps/ship02.rgba create mode 100644 tests/sprite/bin/bitmaps/ship03.rgba create mode 100644 tests/sprite/bin/bitmaps/ship04.rgba create mode 100644 tests/sprite/bin/bitmaps/ship05.rgba create mode 100644 tests/sprite/bin/bitmaps/ship06.rgba create mode 100644 tests/sprite/bin/bitmaps/ship07.rgba create mode 100644 tests/sprite/bin/bitmaps/ship08.rgba create mode 100644 tests/sprite/bin/bitmaps/ship09.rgba create mode 100644 tests/sprite/bin/bitmaps/ship10.rgba create mode 100644 tests/sprite/bin/bitmaps/ship11.rgba create mode 100644 tests/sprite/bin/bitmaps/ship12.rgba create mode 100644 tests/sprite/bin/bitmaps/ship13.rgba create mode 100644 tests/sprite/bin/bitmaps/ship14.rgba create mode 100644 tests/sprite/bin/bitmaps/ship15.rgba create mode 100644 tests/sprite/bin/bitmaps/ship16.rgba create mode 100644 tests/sprite/bin/bitmaps/ship17.rgba create mode 100644 tests/sprite/bin/bitmaps/ship18.rgba create mode 100644 tests/sprite/bin/bitmaps/ship19.rgba create mode 100644 tests/sprite/bin/bitmaps/ship20.rgba create mode 100644 tests/sprite/bin/bitmaps/ship21.rgba create mode 100644 tests/sprite/bin/bitmaps/ship22.rgba create mode 100644 tests/sprite/bin/bitmaps/ship23.rgba create mode 100644 tests/sprite/bin/sprite.bin create mode 100644 tests/sprite/bin/sprite.map create mode 100644 tests/sprite/img-src/Galaxian.png create mode 100644 tests/sprite/img-src/Galaxian1.png create mode 100644 tests/sprite/img-src/Galaxian10.png create mode 100644 tests/sprite/img-src/Galaxian100.png create mode 100644 tests/sprite/img-src/Galaxian101.png create mode 100644 tests/sprite/img-src/Galaxian102.png create mode 100644 tests/sprite/img-src/Galaxian103.png create mode 100644 tests/sprite/img-src/Galaxian104.png create mode 100644 tests/sprite/img-src/Galaxian105.png create mode 100644 tests/sprite/img-src/Galaxian106.png create mode 100644 tests/sprite/img-src/Galaxian107.png create mode 100644 tests/sprite/img-src/Galaxian108.png create mode 100644 tests/sprite/img-src/Galaxian109.png create mode 100644 tests/sprite/img-src/Galaxian11.png create mode 100644 tests/sprite/img-src/Galaxian110.png create mode 100644 tests/sprite/img-src/Galaxian111.png create mode 100644 tests/sprite/img-src/Galaxian112.png create mode 100644 tests/sprite/img-src/Galaxian113.png create mode 100644 tests/sprite/img-src/Galaxian114.png create mode 100644 tests/sprite/img-src/Galaxian115.png create mode 100644 tests/sprite/img-src/Galaxian116.png create mode 100644 tests/sprite/img-src/Galaxian117.png create mode 100644 tests/sprite/img-src/Galaxian118.png create mode 100644 tests/sprite/img-src/Galaxian119.png create mode 100644 tests/sprite/img-src/Galaxian12.png create mode 100644 tests/sprite/img-src/Galaxian120.png create mode 100644 tests/sprite/img-src/Galaxian121.png create mode 100644 tests/sprite/img-src/Galaxian122.png create mode 100644 tests/sprite/img-src/Galaxian123.png create mode 100644 tests/sprite/img-src/Galaxian124.png create mode 100644 tests/sprite/img-src/Galaxian125.png create mode 100644 tests/sprite/img-src/Galaxian126.png create mode 100644 tests/sprite/img-src/Galaxian127.png create mode 100644 tests/sprite/img-src/Galaxian128.png create mode 100644 tests/sprite/img-src/Galaxian129.png create mode 100644 tests/sprite/img-src/Galaxian13.png create mode 100644 tests/sprite/img-src/Galaxian130.png create mode 100644 tests/sprite/img-src/Galaxian131.png create mode 100644 tests/sprite/img-src/Galaxian132.png create mode 100644 tests/sprite/img-src/Galaxian14.png create mode 100644 tests/sprite/img-src/Galaxian15.png create mode 100644 tests/sprite/img-src/Galaxian16.png create mode 100644 tests/sprite/img-src/Galaxian17.png create mode 100644 tests/sprite/img-src/Galaxian18.png create mode 100644 tests/sprite/img-src/Galaxian19.png create mode 100644 tests/sprite/img-src/Galaxian2.png create mode 100644 tests/sprite/img-src/Galaxian20.png create mode 100644 tests/sprite/img-src/Galaxian21.png create mode 100644 tests/sprite/img-src/Galaxian22.png create mode 100644 tests/sprite/img-src/Galaxian23.png create mode 100644 tests/sprite/img-src/Galaxian24.png create mode 100644 tests/sprite/img-src/Galaxian25.png create mode 100644 tests/sprite/img-src/Galaxian26.png create mode 100644 tests/sprite/img-src/Galaxian27.png create mode 100644 tests/sprite/img-src/Galaxian28.png create mode 100644 tests/sprite/img-src/Galaxian29.png create mode 100644 tests/sprite/img-src/Galaxian3.png create mode 100644 tests/sprite/img-src/Galaxian30.png create mode 100644 tests/sprite/img-src/Galaxian31.png create mode 100644 tests/sprite/img-src/Galaxian32.png create mode 100644 tests/sprite/img-src/Galaxian33.png create mode 100644 tests/sprite/img-src/Galaxian34.png create mode 100644 tests/sprite/img-src/Galaxian35.png create mode 100644 tests/sprite/img-src/Galaxian36.png create mode 100644 tests/sprite/img-src/Galaxian37.png create mode 100644 tests/sprite/img-src/Galaxian38.png create mode 100644 tests/sprite/img-src/Galaxian39.png create mode 100644 tests/sprite/img-src/Galaxian4.png create mode 100644 tests/sprite/img-src/Galaxian40.png create mode 100644 tests/sprite/img-src/Galaxian41.png create mode 100644 tests/sprite/img-src/Galaxian42.png create mode 100644 tests/sprite/img-src/Galaxian43.png create mode 100644 tests/sprite/img-src/Galaxian44.png create mode 100644 tests/sprite/img-src/Galaxian45.png create mode 100644 tests/sprite/img-src/Galaxian46.png create mode 100644 tests/sprite/img-src/Galaxian47.png create mode 100644 tests/sprite/img-src/Galaxian48.png create mode 100644 tests/sprite/img-src/Galaxian49.png create mode 100644 tests/sprite/img-src/Galaxian5.png create mode 100644 tests/sprite/img-src/Galaxian50.png create mode 100644 tests/sprite/img-src/Galaxian51.png create mode 100644 tests/sprite/img-src/Galaxian52.png create mode 100644 tests/sprite/img-src/Galaxian53.png create mode 100644 tests/sprite/img-src/Galaxian54.png create mode 100644 tests/sprite/img-src/Galaxian55.png create mode 100644 tests/sprite/img-src/Galaxian56.png create mode 100644 tests/sprite/img-src/Galaxian57.png create mode 100644 tests/sprite/img-src/Galaxian58.png create mode 100644 tests/sprite/img-src/Galaxian59.png create mode 100644 tests/sprite/img-src/Galaxian6.png create mode 100644 tests/sprite/img-src/Galaxian60.png create mode 100644 tests/sprite/img-src/Galaxian61.png create mode 100644 tests/sprite/img-src/Galaxian62.png create mode 100644 tests/sprite/img-src/Galaxian63.png create mode 100644 tests/sprite/img-src/Galaxian64.png create mode 100644 tests/sprite/img-src/Galaxian65.png create mode 100644 tests/sprite/img-src/Galaxian66.png create mode 100644 tests/sprite/img-src/Galaxian67.png create mode 100644 tests/sprite/img-src/Galaxian68.png create mode 100644 tests/sprite/img-src/Galaxian69.png create mode 100644 tests/sprite/img-src/Galaxian7.png create mode 100644 tests/sprite/img-src/Galaxian70.png create mode 100644 tests/sprite/img-src/Galaxian71.png create mode 100644 tests/sprite/img-src/Galaxian72.png create mode 100644 tests/sprite/img-src/Galaxian73.png create mode 100644 tests/sprite/img-src/Galaxian74.png create mode 100644 tests/sprite/img-src/Galaxian75.png create mode 100644 tests/sprite/img-src/Galaxian76.png create mode 100644 tests/sprite/img-src/Galaxian77.png create mode 100644 tests/sprite/img-src/Galaxian78.png create mode 100644 tests/sprite/img-src/Galaxian79.png create mode 100644 tests/sprite/img-src/Galaxian8.png create mode 100644 tests/sprite/img-src/Galaxian80.png create mode 100644 tests/sprite/img-src/Galaxian81.png create mode 100644 tests/sprite/img-src/Galaxian82.png create mode 100644 tests/sprite/img-src/Galaxian83.png create mode 100644 tests/sprite/img-src/Galaxian84.png create mode 100644 tests/sprite/img-src/Galaxian85.png create mode 100644 tests/sprite/img-src/Galaxian86.png create mode 100644 tests/sprite/img-src/Galaxian87.png create mode 100644 tests/sprite/img-src/Galaxian88.png create mode 100644 tests/sprite/img-src/Galaxian89.png create mode 100644 tests/sprite/img-src/Galaxian9.png create mode 100644 tests/sprite/img-src/Galaxian90.png create mode 100644 tests/sprite/img-src/Galaxian91.png create mode 100644 tests/sprite/img-src/Galaxian92.png create mode 100644 tests/sprite/img-src/Galaxian93.png create mode 100644 tests/sprite/img-src/Galaxian94.png create mode 100644 tests/sprite/img-src/Galaxian95.png create mode 100644 tests/sprite/img-src/Galaxian96.png create mode 100644 tests/sprite/img-src/Galaxian97.png create mode 100644 tests/sprite/img-src/Galaxian98.png create mode 100644 tests/sprite/img-src/Galaxian99.png create mode 100644 tests/sprite/img-src/gal-red0.rgba create mode 100644 tests/sprite/img-src/gal-red1.rgba create mode 100644 tests/sprite/img-src/gal-red2.rgba create mode 100644 tests/sprite/img-src/gal-red3.rgba create mode 100644 tests/sprite/img-src/ship/Galaxian37.png create mode 100644 tests/sprite/img-src/ship/Galaxian38.png create mode 100644 tests/sprite/img-src/ship/Galaxian39.png create mode 100644 tests/sprite/img-src/ship/Galaxian40.png create mode 100644 tests/sprite/img-src/ship/Galaxian41.png create mode 100644 tests/sprite/img-src/ship/Galaxian42.png create mode 100644 tests/sprite/img-src/ship/Galaxian43.png create mode 100644 tests/sprite/img-src/ship/Galaxian44.png create mode 100644 tests/sprite/img-src/ship/Galaxian45.png create mode 100644 tests/sprite/img-src/ship/Galaxian46.png create mode 100644 tests/sprite/img-src/ship/Galaxian47.png create mode 100644 tests/sprite/img-src/ship/Galaxian48.png create mode 100644 tests/sprite/img-src/ship/Galaxian49.png create mode 100644 tests/sprite/img-src/ship/Galaxian50.png create mode 100644 tests/sprite/img-src/ship/Galaxian51.png create mode 100644 tests/sprite/img-src/ship/Galaxian52.png create mode 100644 tests/sprite/img-src/ship/Galaxian53.png create mode 100644 tests/sprite/img-src/ship/Galaxian54.png create mode 100644 tests/sprite/img-src/ship/Galaxian55.png create mode 100644 tests/sprite/img-src/ship/Galaxian56.png create mode 100644 tests/sprite/img-src/ship/Galaxian57.png create mode 100644 tests/sprite/img-src/ship/Galaxian58.png create mode 100644 tests/sprite/img-src/ship/Galaxian59.png create mode 100644 tests/sprite/img-src/ship/Galaxian60.png create mode 100644 tests/sprite/img-src/ship/ship00.rgba create mode 100644 tests/sprite/img-src/ship/ship01.rgba create mode 100644 tests/sprite/img-src/ship/ship02.rgba create mode 100644 tests/sprite/img-src/ship/ship03.rgba create mode 100644 tests/sprite/img-src/ship/ship04.rgba create mode 100644 tests/sprite/img-src/ship/ship05.rgba create mode 100644 tests/sprite/img-src/ship/ship06.rgba create mode 100644 tests/sprite/img-src/ship/ship07.rgba create mode 100644 tests/sprite/img-src/ship/ship08.rgba create mode 100644 tests/sprite/img-src/ship/ship09.rgba create mode 100644 tests/sprite/img-src/ship/ship10.rgba create mode 100644 tests/sprite/img-src/ship/ship11.rgba create mode 100644 tests/sprite/img-src/ship/ship12.rgba create mode 100644 tests/sprite/img-src/ship/ship13.rgba create mode 100644 tests/sprite/img-src/ship/ship14.rgba create mode 100644 tests/sprite/img-src/ship/ship15.rgba create mode 100644 tests/sprite/img-src/ship/ship16.rgba create mode 100644 tests/sprite/img-src/ship/ship17.rgba create mode 100644 tests/sprite/img-src/ship/ship18.rgba create mode 100644 tests/sprite/img-src/ship/ship19.rgba create mode 100644 tests/sprite/img-src/ship/ship20.rgba create mode 100644 tests/sprite/img-src/ship/ship21.rgba create mode 100644 tests/sprite/img-src/ship/ship22.rgba create mode 100644 tests/sprite/img-src/ship/ship23.rgba create mode 100644 tests/sprite/img-src/ship2/Galaxian37.png create mode 100644 tests/sprite/img-src/ship2/Galaxian38.png create mode 100644 tests/sprite/img-src/ship2/Galaxian39.png create mode 100644 tests/sprite/img-src/ship2/Galaxian40.png create mode 100644 tests/sprite/img-src/ship2/Galaxian41.png create mode 100644 tests/sprite/img-src/ship2/Galaxian42.png create mode 100644 tests/sprite/img-src/ship2/Galaxian43.png create mode 100644 tests/sprite/img-src/ship2/Galaxian44.png create mode 100644 tests/sprite/img-src/ship2/Galaxian45.png create mode 100644 tests/sprite/img-src/ship2/Galaxian46.png create mode 100644 tests/sprite/img-src/ship2/Galaxian47.png create mode 100644 tests/sprite/img-src/ship2/Galaxian48.png create mode 100644 tests/sprite/img-src/ship2/Galaxian49.png create mode 100644 tests/sprite/img-src/ship2/Galaxian50.png create mode 100644 tests/sprite/img-src/ship2/Galaxian51.png create mode 100644 tests/sprite/img-src/ship2/Galaxian52.png create mode 100644 tests/sprite/img-src/ship2/Galaxian53.png create mode 100644 tests/sprite/img-src/ship2/Galaxian54.png create mode 100644 tests/sprite/img-src/ship2/Galaxian55.png create mode 100644 tests/sprite/img-src/ship2/Galaxian56.png create mode 100644 tests/sprite/img-src/ship2/Galaxian57.png create mode 100644 tests/sprite/img-src/ship2/Galaxian58.png create mode 100644 tests/sprite/img-src/ship2/Galaxian59.png create mode 100644 tests/sprite/img-src/ship2/Galaxian60.png create mode 100644 tests/sprite/makefile create mode 100644 tests/sprite/src/sprite.c diff --git a/Agon-HW.md b/Agon-HW.md new file mode 100644 index 0000000..0d3047a --- /dev/null +++ b/Agon-HW.md @@ -0,0 +1,459 @@ +# Notes on Agon-Light Hardware + +## EZ80 CPU + +### Hardware Details + +CPU: + +- eZ80F92 + +Master clock: + +- System clock speed for CPU: 18,432,000Hz + +- Clock divisor: 16 + + - Not sure what this is used for + +Serial Interfaces: + +- UART0: connects to ESP32 VDP + + - Runs at 1,152,000 baud (if fails drops back to 384,000 baud) + +- UART1: + + - Not sure what this is used for + +Timers (x6): + +- timer0:  + +- timer1-5 + +Watch-Dog Timer + +GPIO Ports + +- Port B (bits 0-7) + +- Port C (bits 0-7) + +- Port D (bits 0-7) + +SPI (Serial Peripheral Interface) + +I2C Bus + +RTC: + +- There is no clock signal connected to the EZ80 RTC, so does not function + +Interrupts: + +- VBLANK: timer interrupt ever 20ms (i.e. 50Hz) + + - PORTB1_IVECT (0x32) + + - GPIO pin B1 coming from VDP + +- UART0: handler for serial comms to the VDP + + - UART0_IVECT (0x18) + +- UART1: not set up by MOS + + - UART1_IVECT (0x1A) + +Flash memory: + +- 128kbytes + + - 128 pages with 8 rows per page and 128 bytes per row + + - Can be protected in blocks of 16KB + +- In addition to main Flash memory, there are two separately-addressable rows which comprise a 256-byte Information Page. + +### Software Development + +In ZDS Acclaim: + +- ``: includes `` based on `_EZ90F92` being defined + + - `#defines` for the internal hardware, including the interrupt vectors + +### Interrupts + +On the eZ80F92 device, all maskable interrupts use the CPU’s vectored interrupt function. +Table 11 lists the low-byte vector for each of the maskable interrupt sources. The +maskable interrupt sources are listed in order of priority, with vector 00h being the highest-priority interrupt. The full 16-bit interrupt vector is located at starting address {I[7:0], +IVECT[7:0]} where I[7:0] is the CPU’s Interrupt Page Address Register. + +![](assets/2023-07-27-10-43-19-image.png) + +Your program must store the starting address of the interrupt service routine (ISR) in the +two-byte interrupt vector locations. For example, for ADL mode the two-byte address for +the SPI interrupt service routine would be stored at {00h, I[7:0], 1Eh} and {00h, I[7:0], +1Fh}. In Z80 mode, the two-byte address for the SPI interrupt service routine would be stored at {MBASE[7:0], I[7:0], 1Eh} and {MBASE, I[7:0], 1Fh}. The least-significant +byte is stored at the lower address. + +When any one or more of the interrupt requests (IRQs) become active, an interrupt request +is generated by the interrupt controller and sent to the CPU. The corresponding 8-bit interrupt vector for the highest-priority interrupt is placed on the 8-bit interrupt vector bus, +IVECT[7:0]. The interrupt vector bus is internal to the eZ80F92 device and is therefore +not visible externally. + +The response time of the CPU to an interrupt request is a function of the current instruction being executed as well as the number of wait states being asserted. The interrupt vector, {I[7:0], IVECT[7:0]}, is visible on the address bus, ADDR[15:0], when the interrupt +service routine begins. The response of the CPU to a vectored interrupt on the eZ80F92 +device is explained in Table 12. Interrupt sources are required to be active until the interrupt service routine starts. It is recommended that the Interrupt Page Address Register (I) +value be changed by the user from its default value of 00h as this address can create conflicts between the nonmaskable interrupt vector, the RST instruction addresses, and the +maskable interrupt vectors. + +![](assets/2023-07-27-10-47-02-image.png) + +![](assets/2023-07-27-10-47-36-image.png) + +#### MOS & Interrupts + +Sets up interrupt vector table for the first 30h interrupts (i.e. does not include GPIO). + +- This doesn't seem to equate with GPIO B1 being used for VSYNC + +Two levels of tables are defined for the interrupt vectors: + +- Interrupt Vector Table + + - this segment must be aligned on a 256 byte boundary anywhere below + + - the 64K byte boundary + + - each 2-byte entry is a 2-byte vector address + +- 1st interrupt vector jump table. + + - This table must reside in the first 64K bytes of memory. + + - Each 4-byte entry is a jump to the 2nd jump table plus offset + +- 2nd interrupt vector Jump Table. + + - This table resides in RAM anywhere in the 16M byte range. + + - Each 4-byte entry is a jump to an interrupt handler + + - Contains: `JP addr24` instructions for each interrupt + + - Set by default to `JP __default_mi_handler` + + - Default interrupt handler is just `EI; RETI.L` + +#### VDP / Keyboard Interrupts + +UART0 interrupt: + +``` +; AGON UART0 Interrupt Handler +; +_uart0_handler: DI + PUSH AF + PUSH BC + PUSH DE + PUSH HL + CALL UART0_serial_RX + LD C, A + LD        HL, _vdp_protocol_data + CALL vdp_protocol + POP HL + POP DE + POP BC + POP AF + EI + RETI.L +``` + +`UART0_serial_RX`: gets a single byte from UART0 in A + +- If there is no data returns with carry clear + +- If data, returns byte in A with carry set + +In the above code, it always assumes that there will be data because it is triggered by the UART0 interrupt. + +Calls `vdp_protocol` with the address of the buffer if HL and the character in C + +``` +; The UART protocol handler state machine +; +vdp_protocol: +            LD A, (_vdp_protocol_state) + OR A + JR Z, vdp_protocol_state0 + DEC A + JR Z, vdp_protocol_state1 + DEC A + JR Z, vdp_protocol_state2 + XOR A + LD (_vdp_protocol_state), A + RET +``` + +Maintains a state machine to reflect the state of the VDP protocol: + +- State 0: waiting for control byte / command + + - Control bytes have bit-7 set + +- State 1: get the packet length + +- State 2: read the packet body + +**State 0:** + +``` +; Wait for control byte (>=80h) +; +vdp_protocol_state0: +            LD A, C ; Wait for a header byte (bit 7 set) + SUB 80h + RET C + CP vdp_protocol_vesize ; Check whether the command is in bounds + RET NC ; Out of bounds, so just ignore + LD (_vdp_protocol_cmd), A ; Store the cmd (discard the top bit) + LD (_vdp_protocol_ptr), HL ; Store the buffer pointer + LD A, 1 ; Switch to next state + LD (_vdp_protocol_state), A + RET +``` + +Receives control byte from UART0 then: + +- Return if not a control / command byte + +- Store the command (with bit-7 cleared) + +- Reset the incoming data point - the address is passed in from `_uart0_handler` + +- Transition to state 1 + +**State 1:** + +``` +; Read the packet length in +; +vdp_protocol_state1: +         LD A, C     ; Fetch the length byte + CP VDPP_BUFFERLEN + 1 ; Check if it exceeds buffer length (16) + JR C, $F ; + XOR A        ; If it does exceed buffer length, reset state machine + LD (_vdp_protocol_state), A + RET +; +$$: LD (_vdp_protocol_len), A ; Store the length + OR A             ; If it is zero + JR Z, vdp_protocol_exec  ; Then we can skip fetching bytes, otherwise + LD A, 2          ; Switch to next state + LD (_vdp_protocol_state), A + RET +``` + +Receives packet length byte from UART0 then: + +- Checks does not exceed buffer length - if it does, it resets the state machine + +- Store the length of the packet + +- If zero, executes the packet immediately (`vdp_protocol_exec`) + +- Transition to state 2 + +**State 2:** + +``` +; Read the packet body in +; +vdp_protocol_state2: +            LD HL, (_vdp_protocol_ptr) ; Get the buffer pointer + LD (HL), C        ; Store the byte in it + INC HL             ; Increment the buffer pointer + LD (_vdp_protocol_ptr), HL + LD A, (_vdp_protocol_len) ; Decrement the length + DEC A + LD (_vdp_protocol_len), A + RET NZ             ; Stay in this state if there are still bytes to read + + + +``` + +Receives data bytes from UART0 then: + +- Stores byte in buffer and increments the pointer + +- Decrease the remaining length + +- Returns if there are still bytes to collect + +- Otherwise continues / falls through to `vdp_protocol_exec` + +**Command Execute:** + +``` +; When len is 0, we can action the packet +; + +vdp_protocol_exec: +         XOR A             ; Reset the state + LD (_vdp_protocol_state), A + LD DE, vdp_protocol_vector + LD HL, 0         ; Index into the jump table + LD A, (_vdp_protocol_cmd) ; Get the command byte... + LD L, A          ; ...in HLU + ADD HL, HL        ; Multiply by four, as each entry is 4 bytes + ADD HL, HL        ; And add the address of the vector table + ADD HL, DE + JP (HL)          ; And jump to the entry in the jump table + +``` + +Execute the command with the complete received packet of data + +- Reset the state machine to zero for next incoming data + +- Jump to the command using the command vector, indexed by the saved command + + + +Incoming protocol / data information is maintained in: + +- `_vdp_protocol_cmd`: incoming command - with bit-7 cleared + +- `_vdp_protocol_state`: position in state machine + +- `_vdp_protocol_len`: length of data associated with this command (sent by VDP) + +- `_vdp_protocol_ptr`: position to store next incoming byte + + + +Format of VDP protocol data: + +- Command (1 byte) + + - GP + + - KEY + + - CURSOR + + - SCRCHAR + + - POINT + + - AUDIO + + - MODE + + - RTC + + - KEYSTATE + +- Length (1 byte) + +- Data (n bytes) - length depends upon the command + +##### KEY Command + +Data packet sent from VDP (4 bytes): + +- `keycode`: contains the ASCII key code + +- `modifiers`: contains the modifiers packed into a single byte + +- `item.vk`: represents each possible real or derived (shift+real) key + +- `item.down`: + +``` +; Keyboard Data +; Received after a keypress event in the VPD +; +vdp_protocol_KEY: +         LD A, (_vdp_protocol_data + 0) ; ASCII key code + LD (_keyascii), A + LD A, (_vdp_protocol_data + 1) ; Key modifiers (SHIFT, ALT, etc) + LD (_keymods), A + LD A, (_vdp_protocol_data + 3) ; Key down? (1=down, 0=up) + LD (_keydown), A + LD A, (_keycount)      ; Increment the key event counter + INC A + LD (_keycount), A + LD A, (_vdp_protocol_data + 2) + LD (_keycode), A +; +; Now check for CTRL+ALT+DEL +; + CP 130 ; Check for DEL (cursor keys) + JR Z, $F + CP 131 ; Check for DEL (no numlock) + JR Z, $F + CP 88 ; And DEL (numlock) + RET NZ +$$: LD A, (_keymods) ; DEL is pressed, so check CTRL + ALT + AND 05h ; Bit 0 and 2 + CP 05h + RET NZ ; Exit if not pressed +; +; Here we're just waiting for the key to go up +; + LD A, (_keydown) ; Get key down + DEC A   ; Check for 0 + JP NZ, 0 + LD (_keyascii), A ; Otherwise clear the keycode so no interaction with console + LD (_keycode), A + RET +``` + +Based on the received KEY VDP protocol packet: + +- Store ASCII code, modifiers and key down status in MOS SYSVARs + +- Increments the `sysvar_vkeycount` – this is incremented every time a key packet is received + +- Check for Ctrl-Alt-Del pressed + +- If Ctrl-Alt-Del pressed, wait for keys to be released + + + +The VDP protocol data comes from FabGL `kb->getNextVirtualKey(&item, 0)` + +Where item is an instance of `fabgl::VirtualKeyItem item;` with public attributes + +Public Attributes + +- uint8_t CAPSLOCK: 1 + +- uint8_t CTRL: 1 + +- uint8_t down + +- uint8_t GUI: 1 + +- uint8_t LALT: 1 + +- uint8_t NUMLOCK: 1 + +- uint8_t RALT: 1 + +- uint8_t scancode [8] + +- uint8_t SCROLLLOCK: 1 + +- uint8_t SHIFT: 1 + +- VirtualKey vk + +[VirtualKey]([FabGL: fabgl::VirtualKey](http://www.fabglib.org/group___enumerations_gad0e6e31d5953384be4ea987eb3923e02.html#gad0e6e31d5953384be4ea987eb3923e02)) represents each possible real or derived (shift+real) key + +Note that keyboard de-bouncing is done by the VDP. diff --git a/README.md b/README.md index 2a9c103..5c88326 100644 --- a/README.md +++ b/README.md @@ -318,24 +318,126 @@ In the relevant: example, test or any other directory created at the same level. - `gets_s()` updated to handle backspace, cursor left and control-C during input +01/08/2023 + +- `Agon-HW.md` file started to collect documentation on Agon hardware + + - Section on UART0 / VDP interrupt with a focus on understanding keyboard input + +- `lib/agon/intagon.src` created - intercepts Agon UART0 interrupt to maintain an array of bits for key presses (one bit per key). This allows multiple key presses to be detected at the same time + +- `vdp_vdu` library created for using VDP graphics via the VDU commands + + - `vdp_bell()` + + - `vdp_cursor_left()` + + - `vdp_cursor_right()` + + - `vdp_cursor_down()` + + - `vdp_cursor_up()` + + - `vdp_clear_screen()` + + - `vdp_clear_graphics()` + + - `vdp_cursor_home()` + + - `vdp_cursor_tab()` + + - vdp_set_`text_colour()` + + - `vdp_mode()` + + - `vdp_graphics_origin()` + + - `vdp_get_scr_dims()` + + - `vdp_logical_scr_dims()` + + - `vdp_cursor_enable()` + + - `vdp_move_to()` + + - `vdp_line_to()` + + - `vdp_point()` + + - `vdp_triangle()` + + - `vdp_circle_radius()` + + - `vdp_circle()` + + - `vdp_select_bitmap()` + + - `vdp_draw_bitmap()` + + - `vdp_load_bitmap()` + + - `vdp_load_bitmap_file()` + + - `vdp_load_sprite_bitmaps()` + + - `vdp_create_sprite()` + + - `vdp_select_sprite()` + + - `vdp_move_sprite_to()` + + - `vdp_move_sprite_by()` + + - `vdp_show_sprite()` + + - `vdp_hide_sprite()` + + - `vdp_next_sprite_frame()` + + - `vdp_prev_sprite_frame()` + + - `vdp_nth_sprite_frame()` + + - `vdp_activate_sprites()` + + - `vdp_refresh_sprites()` + + - `vdp_reset_sprites()` + +- `vdp_key` library created for accessing VDP keyboard data to maintain a bit map of key presses (can be simultaneous) + + - `vdp_key_init():` initialise the VDP keyboard routines, which hook into the UART0 interrupt handler and maintains an array `vdp_key_bits[32]` of up/down status per key. + + - `vdp_key_reset_interrupt()`: resets the original interrupt vector. This does not normally need to be explicitly as it is registered to be call at the end of the program via `atexit()`. It can however be safely called. + + - `vdp_set_key_event_handler()`: sets a handler function to be called when a key is pressed. It is passed a KEY_EVENT + + - `vdp_update_key_state()`: this should be called frequently in the main game loop, otherwise events might be missed - there is in any case a small chance of this (could consider integrating into the interrupt routine). It is the routine that tiggers the event handler. + + - `vdp_check_key_press()`: checks for a key press by examining `vdp_key_bits[]`. + +- `linker_script`: updated to include the above 3 items and remove some CE items left over from the original version. + +- `tests/sprite` added to demonstrate sprites and keyboard handling + ### To-Do / Known Issues: - Testing / validation - Check for ZDS pseudo ops in any assembly language source files copied from ZDS -- Add handling for exit codes from programs as MOS treats them as file errors - which doesn't make sense in the context of most programs. - - Review and improved efficiency / size of crt0.src and resulting binary - including the use of compile time options - For stdio remove stuff inherited from CE Toolchain (there is nothing used, but some remnants in the various files) -- Change printf with NULL pointers do something sensible +- Change printf %s with NULL pointers to do something sensible - Close files that have not been closed on `exit()` as MOS does not close them and runs out of file handles - plus this is part of the C standard ### To-Do - New Features +- Complete vdp_vdu library - for example, need to add routines for colours and palette + - Add command line support for redirection of stderr - Add simulation of pipes @@ -1229,11 +1331,27 @@ convert source.png dest.rgba - `VDU 23, 27, 12`: Hide current sprite - `VDU 23, 27, 13, x; y;`: Move current sprite to pixel position x, y - `VDU 23, 27, 14, x; y;`: Move current sprite by x, y pixels -- `VDU 23, 27, 15`: Update the sprites in the GPU +- `VDU 23, 27, 15`: Update / refresh the sprites in the GPU - `VDU 23, 27, 16`: Reset the sprites and clear all data (Requires MOS 1.03 or above) Sprites reference underlying bit maps +Sprite creation order: + +1) Create bitmap(s) for sprite, or re-use bitmaps already created + +2) Select the correct sprite ID (0-255). The GDU only accepts sequential sprite sets, starting from ID 0. All sprites must be adjacent to 0 + +3) Clear out any frames from previous program definitions + +4) Add one or more frames to each sprite + +5) Activate sprite to the GDU + +6) Show sprites on screen / move them around as needed + +7) Refresh + ##### VDU 23, ASCII-code: User Defined Characters (UDG) - `VDU 23, ascii-code, n1, n2, n3, n4, n5, n6, n7, n8`: redefine character with ASCII code (>=32). @@ -1260,6 +1378,8 @@ Sprites reference underlying bit maps Three successive points are maintained, updated whenever a call is made to VDU25. These are used, for example, for the vertices of the triangle. +## VDP / Keyboard Interrupts + ## Appendix - eZ80 compile runtime ``` diff --git a/assets/2023-07-27-10-43-19-image.png b/assets/2023-07-27-10-43-19-image.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3e5fab6019c6525277bb1c9ddb74c2c20704b4 GIT binary patch literal 70490 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 Z9p*4@Sr%W(iWv&{r>?B6R0%qm{U7#aKn(x@ literal 0 HcmV?d00001 diff --git a/assets/2023-07-27-10-47-02-image.png b/assets/2023-07-27-10-47-02-image.png new file mode 100644 index 0000000000000000000000000000000000000000..970e27d8161e9bb107c1860c3e939444283a5a9d GIT binary patch literal 92568 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%0A^bf=@>kBQp%#NV88u}Q7>-Gx|w#iWo zewj6APV$c$X-?mttrn=S0OOBb3)tC|IK@W+x z58>L(ewKxgxuDJCkZKVVxgbuhURt3mcK9{E2)9)Rr{a0H8 zdsI`c1CNL^ME5DMoX?sQyXj(C-Jt6%9Szav>CRx87Eo7pe;+Bis6QS(4~{le7XVDM zd0y&8A0*EDJo;W-RH8s;Dv{*a_4_DAO-(BI4}>pEbx8m+BVv6jME3T|V{<6|uaZN3 zM}$XR26`qNF^^T2`CDM~`#`1`i;evbLs+8!ntG91WT=uXTr+hyzL>N65RzVkv zCNp?KyWWu8O8bBC%JhoS0Thy_1CnXcem2CyIv!!P^o{C5H8o|?Pkck;!$I^DW$4Gi z(Q;-d@3Bg1oRKNmMf@VmE-c{*iEhxBVg$p+?QCA5SQt-O4u~r%f7~viyM!&YiF>1@w3vMv7 zE1ihkXSUr9hz)cnb=%Xvifi>8DDe`C3=T=ixo;~B7t;~31!N+9{f1yM$-Y!yQ}5uT z(7oU9vNd1>?4Rm*AT!%GtDO-?5=J5{+tn}C0-S0xcdtLghqO=Rjmee-Pi2a5B8Wl0 zh|3yu%V}9%)x7pEjsN?V^)~o%ATN%7n<_ox=^YIZ9}Tu-U%v|Uq`$k8qC5K_Om=U> z<6t(UeW<2LTbI2_yKo7SD3W4i3*1L-nvqw)*6i2U^EbR|&nPv^v=aJ1o=z6M0ljFy zP{7w{vB1C7;SfGbK1X~XIctR58$V%VX4)O}tVam6ufHVqH-4#kSY4fy{kLvK)+pI; zvT@V)Ss*CO!XuncPhwSj_nI4gO*j9epT_-L9cK#bJ>3F00Xf>66-hvG42_9^m z%lZP9mcRCAKMQyTmjyQW_RX6|+qk##B>y{2dA_%5PdK+7{SE-8b1}ul|8YB?ov`>N z7hGu?EkRO?^XAn_tpw535sxsCa$_gZue}OngJ_V0iH-!SZR|6-s>m4fXzWrNY+5}p z{0tt$iy6EkMdyAMLD2u5g#;CZYvLWWT9Zk|B5Mi!5nIAMxHJ&O=SLUfNF{8QTpj;R z0>oxB*FtD0s0Rnv0QDxp?c8*L7GwH=r}BSe4t;vPsq*!No@HVI=) zMd$;uAGCgll7y&UmHfPd|Cgk=e>tw?IBG+OLAxiG|h^D>)}0XM1~3d9k!D9s+2c-m}bK!>XMK zzCVdi%#Eko&neGW+REac$!@300;V`y4m$}pf7Nj=-3UkSKRfFSGLfXa3RWQX;HSCh z&*f*eFzAf5cnio!vEcj9{o4P@OE4y;w?|q+2`>(cthtpBV>1kk#QL+~&y7M*;wIJ4 zgt^Y&q|u6Z4afSC)m+O#$ikcI$B9w{)>_Gm6vf1*E9=vA;J}-sO#{jekEm_(N!El+ z9yI>rW2;=ox5T+*r_$UdfU3M3wattUj=GQpRX;+k*LFg`3sM`AC{!f=kaRLMjEIJe z5Yj*1kS-OllQT?r;RH4!NT_Sw+wpYbt`lZIeH7ZQ?xZ5~xgH=|2D0U|4&4-9 zxiWBCq=YlXGO2esV&zG6W8^*|@x>*+&`KuPEhabmYfC`-Dyp511z?Co!S8VekWH6D z^tSfN?>gLH)_l0m#5imABS`ribOvi3z0q8wEYJ_Ye!VMW#(>#wLy`xIAk*gY0f~%| z;8DQWe5c$34FeM)7aE-O-;PD7s6CWuHpuPbTD>~eDS8+4a0Ofa=uDOjn2u!|7YI^_ zHf5fFR@P!5;+zQRD&CFeIZcL;Os^1sd-NMr*+uC})kt!Woo^KoH)spryl#FuCA+nhw>X>FN4 zI%AkC0Zfe`{BPwNP~g`bOBBp#HZrpS&>#zX{U@8lRi|c$_x=jvS1FsHQ4Y76=VJrGzL7lt*+;ii zD>Kt=0ohJxlIjXQpFe++0jm)jwNWep=n?24Ah@bJ^?p7|co5uI9L81ApTeT8dhR!* z&ZStQkdycV;lqbWlET;htqc{vxp&`Xeyg<*+nq40?0qdR&FG$m?lTcRS1)p`zS=F; zcQAsA-X_jGgpsI=Wp3qiMe@gkP~D6zfMx%Nb@HCRnW$+xL+YoXsP*sU%1H2NkIWIT zchAZ7r}1_uToj(r4k5d(jRjw?bYDg>#vei-)^=OVu13hD%w}zKZpzTSqq#fo!gC@= z(DNWzT@0GeaL%A$f7s9ppwF z6>L?wwjmfi>89}TSDr_c1mKBkpo0|NJ)taXUiPA>`~fXyho}4n>ciifT|$I+zvL;+ z7dRV7aJayVUYQ49R+@X~&Ybuj<2A~bjl&6kAlc0H zK>@hlzEgLQC)oWXxrmeWX^Gc1>O%7 zfv-v$=fD0n&$bi;5i&Tp`#ILmSs|FVsral?wHkg`4l2p3s!Qn;eLD3@A!Kns&rldw zEPmLr`GjC;8WloFCo9&9OEUHjGg}Ubrdt z%2Z1@QS|CngiQd)!essM`9!U;1hR1m#o5OW+HnB7B@nQTL2U+$m(3LeC6O4LMpq8{jhfg z507k|Cc7Q*XFdG8JKh)?4B(k#(Qkw#)(Vjh;DdS4N-FrPj!g;wc3sSM5>dj+>AXE& z%8jx{*_T7s18%=<`m5Ij#e;M`rBsO!%O<#c4qx;G6MNIG|8|62kdIOF8zH|n@n{p#i z5Gn$jYDd}a2kWAZ6W58KYV&RF9$q7AK_x4m9<=D z1E4X_f1Q{&AoC@mra~2j-oQYIkHy5yUjIIM{q*UjGZPt?StRJfU0WHF*O)Ijxm0(^ z>P=%2+KS~M<7AnCSW-V8?Fr7qWxRgZ3o#CQ97~Z2fux?{o{dAa zY;`nzbb`9PE1-j}#fn?pv_*N1N0P#XE{V@N>vNt-WNG!H-0un6iF?Sc`2fidXdLo5Xfl%_a-tysC_1Mynta5%?lvN3J@;0%SIRN{ z&*j#I$DVN;OYJ@DsX{V3V{(6p;HL{ZD^1;cUD|k73Q9k2Cgj1VikYoI^X5NcdzYo- z2VlydEcKQRb=JsZuT-lOFhKITeRl??^wvjIRq;~m z>$EXp>=K)87So3Xve%TMwtdNhPm@7EbI31vtW;$naRf0oUqoJq2DXWVO!ao4T=5n5*rr;&p}HS?&6ov@iM* zvYQ0C*zlne)Yf_Qf?%3x4YRo$O~tHpFd$UVgdq((Bg7fVH!?#FE-bm~D0XiMEf=lc zKbKUOkiND>jr;1E1c0yih$1-rOPbNM`%ne<5N1kWEJ=%@VyCN>=Y2!(Or_zkuo~%lNFvOn%jVR(dB^<1(^0xZP z?cnBYVUrW#NFO6)u#KU>Uqs+NBh4|wj)6J&3NSP z|K)W5!*zQ(@3H2k)|ia{jror90slQC)PfTJAHM#-w=wz6032{<|1^EMq$82=p*40k zZR5v1Tt)u(Mwr1oaS}4?poyiY9}b>i+$^q~JnpMcG%(Q7VN2j#xg^1Vj8mtqloPqr zsk@KIlKHFdv2RR5>wSebY+t`|GdTNoXUGpHhRsrgQD}oTRn6C-vf4Ef>g6!nz*kO( z<_V%m=h;{%son`2a-wtq3m=gQBbKT?djp_+DVK_=uTe%$JFmgB-_J%qo1Km`n~@&? zSigVT0zC5S%zi%%S4*j`{9A_L{K_<#heUN#jbS5mHb&BDf#Vir9-@aA+g)q2*%S1&=;6hS@L?4k^6D5K+D11wg;%<&-Ide{75dWkP{E2?2A46%R=h|(EQCWnh(R_FIf zUM@DcEhO_BHC=9geDB(9_~Y|};L2qmj{roM8zQn0*7|-sCz5>tKNfdopKg(OW zxK3D5@}BD%U?|G-vqARV{^rhd&V0NQlo=(^oxa(^n2i9p-A`8a-(WK?`m|aoLn~E8HUhx`W%`{ksE>Wemm^+iuh;C(`TMDN{_tJ^d8R#6xCoG|~+R@$IH4Jf9F zEn&|y;NSIf8d21o_RUYst?y>+@V)cx9;e}qvtz!7MboWz!uu{tC-%zlLZgO< z7W-RbG*9ob$sVr2OGT9_GTV04UEa`(`_x%Ds!?h@O=?VDm~$}OFo!r8vv4GqMOkE1 zp&`0qd2-rlS5@p(S;a^kW`8{K@b8J(nwdtxW!!O^4vo)x(k1KO+6!b>kP9BI$0^Xz z{51Nzx&l16dFX;H&m#WgNq|FFu=}s}SuMhCDYDPJZM#IbXHmWRsQi#dp_g&wZSi@| zG#_8LY>6JQcKcnJ^7vo5yZH_yfT(zV;^`NfH9@JTd>ZkuU`zNgt!NGYX=nmSIQ_|^^U3cAPZBQN#8=!0FROSXBCwF|~ZEdG<}(r0!bp^w;s!NB0b zH>7S3zX3|4`-G{t1ZW0QiDq*=A2$}VWh&@WYcwY3vl_{PZ0YypaCWypG1L6RzxEtL z4)-5=TwGGCH}|xez&q=tA~Wr!(chKk|ETZ>T=6fu`YNCSC2%LRE0iFDOp;cn=+K71 zqIbQgdt-y6YKWIIJg1b7gMc!bVU~%Rj05sCwZEnL5D|@`vEoy~6e6Wh1$6G#afl{K zD5x$)@k(mq#?LKVrWvxUM*)ef`d*mi%p`%wYr*C-KY3}*Avqhem^^&Ulvf>FGJ zFi!hdlGwBNkFnGA9=DXf$O6-Z|{pWM?~Dc*t}yV}3BQ z^PUlIg812%p&8!cz*b|0Rzx|BcGg%t^^lY=w+qNs1I$rF`CdNU^x0jjJAOj_qo7?{VEo7Xp*2-A0 z$um>OvQiv&Ibg%atr82__Yeli-)~N)?FgIPw_XALV$4yP($Au-KYV#{S>+2HfaYo( z1BF7Tx=({el_)I*Pd3J^D2&FUx8L=3@cN6D0<3-62jvxW(jgzY93zz201iYf>nob+ zkJK(6xbWKY3R+ToH>2*FPCOzoLN-~F088QX_dDe-FuCjH>p3p<6|%Wu{7ho|@LB(O zJo5#{)_b8~N!%;%ZT!kb#PHK=U)@<=k|c5+-(Q7@es|OQ={P`H7MnQo0peRJ%yVcG z=h|;M{k_QaZtvM+d`0D@0SW7fizfV+R%d4E85_kS1x|+k%~=@^$xx9U;KEqRl&xE3 z#iTrH3xME%$@2t%d9GsT@ogw(0jWsXIMlAfDgn56xo>>X&WI-+gN%-t3WW>o$=YAJ zbRS#dZQW0huewv1MZ#jW>Yop>X_W@U`t<-+5un`Ok&@ zkGz&|!6&0xw?Mj0UY$;{uaf-ArTSyO=7^Bv0^XnS~!!M zCW#Kw$A&E>{X6w-p&0QY(64!;_kTV>J1X+khY_YPm8iJjg5{Z!cOaKgpMueIJ9RG- zMvGf~fzvj$KV|-UOrM`iJ71?@Q8K#C^2YvjNr%?|TD-MINv@4=vk1pL1T?5(=Aeud zw>6G%@2)L?qyfPY_ij@8i+p;g9_KlAmXTn2P2Kyu)jKfRQF4yat{^J<8*npx*9*8v zIzKs!45XY&zrI%@v^{-x0`bTH@$uEjDal^$W@6U)!rSf7p+uEmL>o9Eil>>8jb|=3 z4yP131xMP-;_nhdcc_a+pPua#1mFH$;Q9oF?QBbGrr#ucGsT-qU@Jza+egoY=|~IF zNU266a7918oH5|zkvz;(f@vnBUm{EY5O4TW#H0t!@*Z_93Wav8PuNod%!>?@M>T_C zaE9Oe98u5ZE~BC6-}Yi=-4~2bGG_j>zINAB)Uuu`K|DM*T$tm}ruDgk$%h!ppRP=e zn%^ghVyQN6fXH2{%yZkhF=l;`6ig)> znL`!}{Uc+HzxfoCt(Rm7GE{*qg170t3s^)NXK^lD)6|$E)UXiMkpEiafR$ntdC zwI(zZOt%w1n{o7MzZ$qvxTa&aV^+3K7Lpe+8t&j`)HOA8lfr0z0~$-D?MJ2Pn~2{P z_x;g~&nfJ$Q@~C< zHKCOf+C6pX+0z)=QWruw1%{K#7NS=8;K+n#-BP&>Z)O@^XdfE?2qV-zK47i6?m9os z_$%ea{DDby>JXJE=&-;Vt2cfNpOFDY+RI01zQm_q(p?DTC{BM@jUcfVOz?%w+r^S4 zP#Ip|$*7Accich{D;eaybSm6E!xvW#9gZE~h{lfgI;H? z)x7xH8B&Oj-}A{NcPRXWB>?P{HZ7jfB+FkdaX9ZeZcq1loR{NEeVRR{=cQ$Z`ma@J z=P92&#<2c&F>f&!2^svv9(lC!GY&P|s8(jVZrr|}4yj6z>Dn2Sr#)M89XyUDALl{4 zw~!3}R5-pcvoe$F#Dy7;a622!Rzf2*gP-yfK2Wq$Q5e_R9O!2;WR_()41Z@}E4#4y zr zeQgaROv7Op=g#3#<7ItA>NhH+3KSl}$eh!IEG)iQCgP+pa~UyLcZrK17E_9cZI>Qt z{a7C%qYUGZK&0DybX(Ae`<=WG-;Y;~XOHX<$pWI31u5ZTRAk{>S^mRFrKG>*i+EPs zNj!7xfL6@v^!kF~)0!}#UX;r{TN!dT{B)B!^C$ubkwb_b8*Gv-9LhG12NHHaciklG zjXhELg{nW?o05b7d4xmd1Jc0hikXbskcH+~KkmhjASu8_IHmCS3_AU{;JH7+b$Bmx zkUrpzhMws=%E{QPp`l`O%Ot%JD+z2VFqxI2 z&I!&MQOd9b!%?gJr$rL-_8}TIjbl<;((CFdYuNl`Kz>vIo4i1 z1H^yKU~H^%u?a==+E+qGVFLmMsqk>QoU~8*6N*jMzbB!V@8Z=R_rG@$SEp*x_-^NT zK9}oWl(={~(33$rzOEZ3RPKt7v6*gi6xHL9PG(RneA;5I71h6I6G^f1L-f&E?+dj? z9#7)wru%#*95N_bYHnE!D;rXjd+3<}W!h-iB`Q^^f6AW8Px>@@cdo@CuSMrVs9&e! z+q(w2CZ*#UBWPGUH(p?&Nyd>a@v6$zu4c28fN8l$V z)KM2}jhp#DhUHpJe>3wff$O}|z}eM^1fDn*?5THFD?X+!-pBnc`a)*qgTjezAaS-X zPOHFJ*3uX}ZpEI0n@W9$G?%a*_Q?pQv$T#xQ&}OMz~#TuFZth9pJuxc3^i&GI#>m> zA!;{bELqQ^5WIU!wE@;5Ff;R=p5Les&M9Y{w}bV020R1d=m9IOuf*XPBT-t=YjQqA zG1W{Ybc)@gh{c}+dvbTTE=rfR?*--LC7*%+yAF-7c%Ezr7{@ojNT?NE4~L4MA1FqK zr*sc^OQGO{`pAd=K{~CDl0O=1g^wK&KJ@7=AAL(wmOhL3zW!t3u<7`=et)`YUH6u! zHPd;yt10|Ev#_fQV?^;o`OgjAQuQfI0_5)c2D017w>JlXzyL6Yzcsx+l~Z@-Dr# zW3sp?!L2|wS;71&qj%b5z>wqsv0>=X3k(Nk41O^9_9h}`^r^HeQ(+FWW1L~IMmcO) zX{nO`$^d@;a-+|OorvXC{ebD*+wn*GVnZii>|ZN#Z`(eO7+rFG`q<;#{H^+oyBh=j_x%K-6~cxpR|VOw&5p{K8y;Wx>rDGA`8nwdD<3 zKI5-WI(@onU0KXk=bb&L_pPtLqhi;(M&04KHM2?l3XR6JqiEonGa1xRJRm4=lHC9F zMW2ovLh`F8c7uZu_Lh#@h@^e{;U~#c3I9q6q829FZjgDJ{L0t1-m4Q|k8H@uafkKs zRiNMGXFj|$jlwK^P>+mG;>l6o#*8W3lNf*QKL4jHE8L@<EqZ0XCF-D-H2}-gT8T4MpG=AuRN^2-3 zuoxKnFlSlS@>k>^K$KkZOyZsT!H?XfjDbN!%`y#o+(6`*Xv3MJc586O0oO6-B+ROd9?8Q+}hb?pz8X=8&c00G0AzLJd6Y+ zeBWjw9Ff!ok_f`Zlo56gnQON_21=lR6%KHukPLyQKMDr-_^_+Ih8>V|AQ1AfFWj9a zIfSvNiFk3K4a37C#z0RhPOf~3@S>uY4VQ_-5prTA6cX1Gi%Je zB?YJ8sFvxxuE`)n}mbhxNl-#qh|q_CtfzaT~YuZ0wNFKT0^*O_Bqhc(|K|AqQ(Et znu9M$YC^<5@ma^`m)!lx6q;Z+bIDY~!nsW6%lH09=W?e+U5*Uv=xGp$M=j;>j!@(@ zJCo4fyNr23LHF7?K)g##8*hff5;XhX4J`)Mu0hk>FCGrU$cuykqfF`MM@}&`&?i|c z`Eiprxnppi`Efs(f^8Eml-3h$Q$r~G=ee_rzP#W`4-U0Hu62bO=O8*7X*!I&mDvv* z7@30qJM9MdcpcpNFXfkR9TG=`8t{}^>h(mu#2F08Ey)6ie`op~HAyj&*{F2ZL*i|s z+_^q$+JyjIocd@6le+3lsjiBOMSco&@Kp~m5B&$P?Zx086lO%vwu2$I4`^21^}0m+ z547nAp1HE)!w7x|RWQ79M|TMEUTWX&tvt{s^p)2mn)l0rMe9eoO#aMHeei%K2qq(` z$=>~C-rp=<(Yhsi)Rd_53Fk=Z%5`GJAEF;eC*K91YS_-eMtJ;p(F%~B$s&zg?*B}g zkpEon&w$GYkrSjLYlr@6NE@wk`XMg6n&%$NvP< z7EgxJf zP~(XtxW`-CMs4V$XGqjFC&?)ucgO1{TkTNM?0siSrL|Av2WoU$!ZporaDd!Y`}cbz z;`=If0~Z}G$?K{&>sW-(;l=!X!V^jA(>H60t|nkz_(_{#f0=wPGSSQw3dKb41zGt3Xww zq`ynfeW!VKKi=?7gBI-{V23j`Emm;HTP+p2)cNKHqW1PGL~yejh+l#fV8u$tv3H65 zm2m0KyRSaPY-#xV^SO&RmBwX40uIQ}Y~^aa zajT2cz!Yn**E*|o;Z70&Q97Uw6g-6YghrWzCK^;PXc+9Z_w4NFB;(MGE zZPIv1%|T%JS6WJUddDyOiLcbEtbSBF7&5G?ldCjV$JW+N4DMKa(IP!>&(|i*x%N|r zn_X_Jb*>-BY4Z?CsBeX3(L`Twe~{$-Vf&Tk%J=f+e(>eMr^#_EsQ=9CajNyb|{($B52!rfP>GQ+-x3qh>+q|A%b6Y8pQ6&gz zL|V+`H^ola`4_2v3V?d}0OLxdcCK*wX9@~ZzqP3-rk6?<#aHD*{lXVdTG zi?cV}+Daze3_47W{886QrJ0`dwl%tdlNvJXBoiYd4&_(4NxZ2bZ2UWKpJwT!z;6Au zJ}4}%{~TPI;gGj1?qN6YF_<^;D%)GxcVT?_4Gz54QQx(x*7<0&y60P2fhxTGt-M}O z)o#Iq>=lK6HUTjLLjSmsoNmG<$bFAW!XlI2l~brNNYF=6pygLrK2 zeVpP4*OM_vLzFu&Wduc`ZU1?QmAHhChSnB)6b(4Q2vtlS+GBmYqI_YH*o(T&XZFv! zLaLv$fMk)$Wk9~{#(lH)oI!)Av4Ky|`EC#aVvP0%&zqDg_n?UOj#fxTEOpVQK+ z>^FPk#Ss7X^x6dS0LZR==R1I9w_Ln)I}2_~C|Lec=MR6-CGW{iJ~_4nlr7ctFBlHF z7qc8`xb0aWosxVjx_48#z}F2cv#ZHiGu-eix20Y2Nng4%DF|`Q3_ux-u(v0P{FT;$ znm@@re|Wye5Y9B~M^%&U2aCCTo@{`2R_?Cq=#w`RQ?jAX>pux5U^KWEtOy&aqP%}d zFvb9lIC7NB-~BTgfHybx`%AwhH4qU)b|US0%qjq@bT?oLwheiR{Q%5i(Aj?ac_!ix z;v$rEO!r8V2Xb3#iPY^y1|$&<2u~XnWCBBW^P5r%cyDe#B5xDifBqRnchz0!2>Ug8 zjK6nUe9>~I^?_Y=+9O6k$qz=vNI}Tu8j;4dTj0ykAGXtB3?9tj#u(%R%F+pgEU7za zy0{x1b@k^P?H36q5CmzN5g~lB#6Vv9C0t3>h&I{UeH{>(Tit;??q=G6|IM=2UVmRZ zU~D;Ii+=$tExFqXAAWu~0aVpli~R+?zPM(r-8MnwyAv9ImHBs^)G^-ltrrfX*-Wp` zS72&508&gvKdt(E1_xb%QNu;Mkd}#RarO}~3 zdA9U)3tu@pJXV0cC96~_R+Zk^!?R`BGG;3{hG2Z{t`nBrgjvU(@#{|p^NCb!nBlZK z`qM|ZA2hF#kS5G?+I4#KNU7kd*9JqUtCbrgfsJ_=H@zCsU9CsC+BszAOV7{tv@iZ>!^Qov573E>*u(^3DC8GOfCLc~VBR z!aal9?`a0~^7B&*(E%>QhP8etAD62=zc-u*`3WV>^pk(@Y#<4>aa2LCZ5P7#IQ6&J zc2x%pE%kcS#e|2nh<2cVIDj6LUt;-h>K&5Y%YA)=1}XQMxP(5@CcYbNd1u^4_asb; zFf-qpP0^-JQ`4~a`|jd+zr+7VZ>i9~bDp~C=M@ip0i{j=qe?Ue2&WU}CKL2&5eg}Fyr?NRBdtq2K!41(d z&p21j<<1@x7fKr>yql=;VJD^QHwIzWBFz(Z_;;t6|J;0fEGeK-stPzNy(MkOR~vS= zuQHw6n-`jyHY$FNP=BvsG<9lLK6E@WLVo$+Q{&i5t*@=o^}T z@v7YK2j73Ga>j)AV%6>MX-}B2Fv;;TzG;ljNTuH)mc@8pz~#9}v|nt?lRk4qBTyyV zy*}UhXf9}-+c7BL*J<~rUcge)GTX zOu&x@m3^Pl4#ft~&{ zdy?Y>8wQY>NtATGKo(n+^+V&R`=}xK{KV@!eWbe}ZQqI@Hm?kKKllS5Q4zID4O}6G;XdCh|`hAwE&9*Urst9_+)KYb~2knZLm%Ap_r zwYuL+NwGRK#$AH_x5`pdBFR{#jwHO3u2GRO{7tNPaQ!I^`jaXBdN|I7q}ML@B|h@7)-N-a_ejobc69Pjo*R$G(#l%ClX+ zj}x7*ceBnSe$+J$H`Jqf)im-lbIy*e=!f*mAbvO(+j??0&4ZL}AYD~;*=F9B=BL0_ zFh;|%mfASXQ-l5-0agihb7koiWa(A?h$0$f@oHD}y#WcBelT7OI6s%WcDW;rkALK| zGDuR``YW6KTnc~BQoJo9#m29(9HZf*_0F!o3tnMMeQ ziie$8&UXs&$b$cn=BYP`8n62>*y}cE1Wbug4R>UbUwycPL_**D=K18F?@ z?FhHd49*h+aj=cM8GwsDHo6-mOwgpbTSJU-&g*RwbU`O`|Kt6i*_&TQp;mmzlsnUT znY9_*E?$N!v+V<0;k@hoIIqiUkYK{aiW>8GrJV9;fF0HsN^X1-y`abIpKL+F&GWX- zFY0r9n6kgA^OrJY?(d&BWr!UO9nPk-?}W!^R@d=AN}Kle+I6;)B-s9Psn$RPR4-L(=#X1T7{B+O zWw&ZX?0vgsuKOtGmlBTTx4I3JV+gShA%5tLK*U4y=*A9jg7?rqYwr z;r&Q8^kU}bk5AShZ^0AtLb1vWza;bqIG&fi5gdykMRRy4Wowe+ z!yXebq;T(Nns}SO$R|>>*{P$Oj};$5kG+wk3PDvI;AWOE%{Kc;aLnlS-QpdTuM)R`UAG@el;)|9MAVyz{mq zQ|X&-CT-q??2Rc461S}NYPY(N_C3lG#XRc1$5F@31FiK_i8Vq_pD#Fx>sy)okhFYz z5ll+-LHB2h%$R#Q^p@A3=LV81A3-z)lvZf2vTb%F&51=0+fVOP7po5^0>Y!J>Z^rR zjA-K#^hnp@u!OdnX}v*}ysha;N*Y)slH8G{_k(6~9b^0|VLf zYU6UQ1O3`KN?eyySv5r7FSHum$ZjP+?0qzNlbky5%Hr#jsw@8sk96j#6bt8!t|e7k zK>og&g@XZ5|5z;f@#usF@5|C4WUv%J&3bFpT6%`R&4~HioT+X4QF}tZ)2V|GHmL9y zJN64iI@p=zOx7#Scbast_Tuq3GIQN=HR^=>Mv0!_X`D0;jTGd2kzqG3_{d3L8sqxK z<_u7O1%lsaMd00e&6gn$h8_W~@~ik5q1NL8wn)vVG+2rmrqMsQ|8P^aCn|ik9u7*U zxm06TisZ95vf;8FlOI<{3Jr%}hMMrR#y|#kwn<dyr2;1 z1z9Hx6xZ)fR_tN3~$XGNh;P#_&A;+C1L7PSN!A1w$YndD85Er@mu5LoUl??z0 zFIE>w`)Ou_=~Epk5HZZ;H#u{1%6pLErS1Ex11B~ZZa=v96bu?BLfEVP+6Y6}zqsAV zI5(XDF(_vd_bG?TJi(?$(2cA2lEhvCCAhXZBP4{?tyq7bF%uk{ zrGLHUL$CaM`Y$l>WfGAm@+&7-Fp`iDu_4n% zdgZg&P<8^qwn2!`FdpkuGBxDdr!P3?f;^mPVA|{>lMWPcF~&Q&`}-cdsV5|hrHHhozv2`yQ}=}wC2Pw*KWNP6DITVzIcx22CF+hJp%vh z=j{^rV6a)?aqDS5*PJ?CGQUArd!{Cn@-4a~B!URMaW9_K8X&TChGR7+UV#}&gM&@d z6A=k;t>`g#C$24BOsiG7Y$B@!$SfT!xaji@pf|AftMlKFjJdz<)>;uvU`an%L&y+< zU*qB}zQx_4BwPm0V93Pym8!>v%E&NNPnD#ymww$fHQ|5TFOn$Fx!C!d2vQt9K32~{ zQz!;Oy~x$~VCkjfNBSV)`49@CBF^N>ukMsBd`PpRS7f%h2)bm|NrH>d|4&)h8P!C$ zwO@*KOb7}=kRn}*^d`M`5fnkBNL7&{AQF1$F`@S&ND)MlP^4F>QUpbM=omt82|@tz z4*IV9-L<~?ch1b5eP+#`b7r^a34NAGg3xn2huj^^phG?ty!1bi9^@C$ zJCHO;L;z^oc*b7>0fwAkkv>sUXPs(71}~s5Iq4my?wRM4`MlPhPfOcq9i=d7-LazM zowR*EcGs;cGI1&QdJQ%_u@6udmniTmT}M$n+mV-tG}^s)Z2zHv_=u`~)D3BrQbyUg z*l?3wT(n1x(&6;?jO#MwsS9tc!Cp;zat%==A{P3Q!GY|?d>yR8rsObW;n$ns)$?)z1<}vFI|KN47@b$} zXH?wCa=xgm(CbHDuEC%IELd9{{3}wW3CIiXK^a)I{=xsh{*N6Tq`?CxkP+E|urqdF z@!-8H+Nn$h>X4R{{nqNlF4yi#x`h|D#1K{Ihq*IOJeb^T*OHwW(OeM&**uvlC}}S^PV2hi1|)C zkn|^K&)xQ*U1^piifbJIE=~S?rPgDWNZE0(7(X z2c>bn;#zdq>rC6e;O)oy22=GVrOIT_MXj>-KMxxy*dCh?4&OV>o)*>1kA3)J>KgLl zO}=@6#weH@9K}{R?4pBUB!>sLZl35_MWT&yrCG&m8NANwPL+YtqjZPRtih*x6>GVl za?w`P>QA~Li_I{+A!$q(73~-I9v?If|m$6hCD4ZzHgUwf}=%L1%dB9NlGW~|6n zy=V#1eU$$PMhC>3dqtJo#Zg$hQR;On!~^%7JL$#SYy+ov9g-S-T5>d=M5i<%sI=sQ zrU_DR#~+J%uHq6$eyTrr(^2BIt#yX6T_)#Q*MJ!Zl-??$CihnZ{=)*)1V_k8moJf| zomR{^B8@r9jV#g}E&Zipu##mg-?BReF1%7t8wpzhk*-=5aAdMl#cCRv7(H?rjVd&x z^Y%Olzun8&wk7qJCGK=%UzG!_l8{2199_VAcEz&46&m@%1ghk=Eb=TdF zS^Dw^6s|?dDh9BYJ&wr@e1A~=Hn0d&&m&hUw}G;PH_vD(SnFd-x#w%);(N8@czH}|+xu3St5^48(= z)QPD&HlOjUE_u4tEt;VAcfQ|^WViS?7z~iVt84=EWA9vu33~ZaCLXU~>O?PN%eU9y zjho&QlM;L9kf{A0jUarIjJ(nQ$@EMZd$5gzb(ioBUs=ReSgcTfkM?%8=M8uSu#KA7 zq9pfUkewW5Y+{wvt@^@`F96d#M;q6sT@!F=y_O&uXv4tgkP)po3NbH}WAyECqcp7t z(p!n87YDS<4iZ-VV#*~FeeHx1$(WVkh`z25$5im12omo8qA(!Byr*i4Adu*w4TZOx zYs=}DvL)8qQ|u9lYRlRb4gUg(g_W>V#gJP&Ftdy9%DThj*3k*F$(Pq2*Y(zY!F*9R zyyyh^M0$@$UOc};*Fo^KaiV2N^fvSKtzbDy3Q4{N#SqWMx)FV$Hv!uXy`H;)r68vE z8651mrg8r?%VR?f?<$5B~f?c!ng{kbe*by{ot5>^VKTt@u%J^hhj2UZMX9c`>pH|yqhv31OT|};NbXK zi$ZRTO+;y-yU~y34(o-Z%6PMFhqC?rm0{DGIoO=ruxoA{NWJK}F+l~Q%a+N#_2OEw z__oFRTTDQNI8aZCQXuuW1hitAorG8@Nm=UOu27rBW`!y5D^4&-jFZ}*_J9e{sAi@^ zdq*nE3oc!HiM?;bh&P`Bz|XJ3j^KPrO9>hmD>aCeLQ?scQuLIhGcS1+nm+Opz%MnY z(I9Ije1Y6*^~I{qU_C(^5iI~5`x1?j6R`rVOMl_u#Wj`vp8O9p&nH{cJZQyDE?f-Y z#frInKCgJOWNw(*#SDDNh)};RAWVOVK!^e$N~TTaeJv)s6=48Wi8}nU7lZx8C1S^r zeDQtX8(p5v_LKe1HEiaO*2>Odso!*S-8d)xxMZIrY}@~R1pUfGXc*!c@;pP(C+#2_ zN+T5i^SV^}>{t}X+9M8?-2&yL)2X1BE%yb&w7BMdovsiCgTC_DuNh#_SfX z24zEJEPO(I<-cA^Tnnq@VHW;5vf{>}ioJ;C_OQM2y`Bq4^<<(^~by zr?p&LJQ2)`eMbyo@AX&FTv&%v`n4a?%7lCg=e2XV{5aR{qNyY%gK0I$QRcgrQqK|I*@)VV)inZaC`QbvHy%87{JDMw-L_g)7z3D%DCWAe+?W>R z`5)6bi_hp<4olK|8B%7R+K4%_8%1WKnONneilw{+Cna%#wX*6Vefuhin_4d|hsT5L zpv6s}0g<|lp?hX9R65|t9P9YXAervhw)$>_Qn$qGv6&frSEP+o>fN%ogwKhf=j-DW zEu(erie{jqyslcOG9V>ErK-~UUfX#BLs7hNxcX5-L`*E5xVeQsbEix1sq|RWHcZ6h z-R6Q&QbNe73B4sY=>238TKS@a=}0`suT`C!!K+QcmqmLW2nUM1Rbo82V*ZD4g+~xB zXwQgxwLIf}W=9iFZBKpCn&X<)Yq24T>>~ejDha6``jyzv6ov%D&Dlptk=lw=F%wQ( zC_j_}svPrXz@~p8SP%SVs`3UJa*HV{?BBF*=rB;UE(dUgJn0Fo5H<`R?MtV@Hw&aY zIq^LY8|@4g+tUz>7jDzTEt$a&{t`u$^OFqna=q}tx^M>rw^v}4IN|TxMUMXt_(-lVQ9%|8CWC zq~v)x*#{{G%n2sqB<%@mhNI<#FXG8!kW000h7Ri(z!4~mx6;XHIbRMgz2T0WH-Uja5q4U+I;-l2Wt30VST!`#f!&7GXHkN{j9 zMjI0GaGQFZzmja5gxtwS0BonD-&`r7hIkzlCY$yT3C*U3>@Jx?XcCrpJT&wJLunmu^IzzjBVJyC(*FLhr6G^^dJz(DGo~{!g540fxr3@-Psu- zz0X!$R%}f_VJ4j$+8ot5I5^V99de+I%_)8zO;2B)ITsW0sEWaZf#mB8Xr4`>E2h;Ba6=PAz7I@Me7` zwS5R|Lf9HKnM|x?_{`O`8bBqah!AFk?|F7^ndkbR9v&8|3ayIglGwZETXS!s^JK=CD&pki#Hj$(#*9=7*$doX!>*gWn|tqni>iy=<@c_9qQNGbB;Bv5qY3Q@ zrMun54)PePwz=w!&5(?i-NCfYuRrMzAg6aNuJmO!aN+#%q|jJGmYTowcx9#7(ITnu zxCPK4hH}R?Qx5xhW(WOADA!DHyz(MK9aZi+Bh*0-ADpZZ<<56k&&a-_9=S$0da~Eq z3u#0tH0X2;4tDYsUWtF;hi>fgPd<~NWXzA&fugTF%s3;v()xT9MB4fc-=+^=;Iiqu zZU)LKdp~b9@#5<8PMUn2Bb-~gT0Acu7D?=`e+-$tOZu|a`YOvwjU@T_9@x{Uc{gKs zq03BNE~etfVwJxjgS%LNMf|<|+D8G$7$5l%FvHg|iUZAt##X;u_Ou7E3;$TM>!{aJU#oeJicO;xo=d#FgBH&H-+XP>a{TsR|abi zWFem5BqQxM20F#SJ@#)*cr2C93qW=5N@`dnki+ZTJv`9DufKGvK&X$8xQxruXxgS3 zro+r$`JYoGIB;elO!dyz&Q2Ylm*&*lHpD}=aLMnqZx6q4c=SVi2QY<~Yiu z{r##t80qn#Ums3%BEPLXl@Th)sSvUGXraJ2)T`7j)9M*<$RG-(Eswq})BoZidjnr{ zTiIiyRZ=ItJCoV66N@x`FhB_J?CeZs#_MMbA2ZerT-%SGqEm>oKD|j^s z45#4-OEok{LDC(mR0&2BCEiw>-?Xw$x z`q`}lgjA24@fEb%Typz0GqipDJQgpxK>`!>|4#{BUtb6GAME zu-QajtICON&9SJAEG{!8g(QTM2Xn$p_KG+r>y7kONt<;38Rju)(sW+iKKRNGbU+f? z!KD7jQ6|+Wavn|+YF(fU%0i+P#LX(!B=olp3=##bHT3z;EPu`eZ5}ZRK&ukzGiFnP z#^3uis09AsI9l_cDF(Oo&*hw72j?Qc6r}OiQv2UF2{j58THxVG=KO;9U*YHTdD+S} zD$M;~;o91&-(;&us+;}}0`%Kak!a0>0T$u^3g_m2y~;WjI%WNTGmHR6rji~wf1Eo04cb-S?t04P&IQUCw| literal 0 HcmV?d00001 diff --git a/assets/2023-07-27-10-47-36-image.png b/assets/2023-07-27-10-47-36-image.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec4ebe87b1aaaaf60eee353101ba921b631631d GIT binary patch literal 104842 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຿j# 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%0AeR?5Q(|A@Pdm4-Sfewl{ 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 i +#include + +typedef union { + uint32_t key_data; + struct { + uint8_t ascii; + uint8_t mods; + uint8_t code; + uint8_t down; + }; +} KEY_EVENT; + + +extern uint8_t vdp_key_bits[32]; + +typedef void (*KEY_EVENT_HANDLER)(KEY_EVENT key_event); + +int vdp_key_init( void ); +void vdp_key_reset_interrupt( void ); + +void vdp_update_key_state(); +bool vdp_check_key_press( uint8_t key_code ); +void vdp_set_key_event_handler( KEY_EVENT_HANDLER event_handler ); + +#endif \ No newline at end of file diff --git a/include/vdp_vdu.h b/include/vdp_vdu.h new file mode 100644 index 0000000..830ae3c --- /dev/null +++ b/include/vdp_vdu.h @@ -0,0 +1,57 @@ +#ifndef _VDP_VDU_H +#define _VDP_VDU_H + +#include +#include +#include + +#define VDP_PUTS(S) mos_puts( (char *)&(S), sizeof(S), 0) + +volatile SYSVAR *vdp_vdu_init( void ); +void vdp_bell( void ); +void vdp_cursor_left( void ); +void vdp_cursor_right( void ); +void vdp_cursor_down( void ); +void vdp_cursor_up( void ); +void vdp_cursor_up( void ); +void vdp_clear_screen( void ); +void vdp_clear_graphics( void ); +void vdp_cursor_home( void ); +void vdp_cursor_tab( int row, int col ); +void vdp_set_text_colour( int colour ); +void vdp_graphics_origin( int x, int y ); +int vdp_mode( int mode ); +void vdp_get_scr_dims( bool ); +void vdp_logical_scr_dims( bool ); +void vdp_cursor_enable( bool flag ); + + +void vdp_move_to( int x, int y ); +void vdp_line_to( int x, int y ); +void vdp_point( int x, int y ); +void vdp_triangle( int x, int y ); +void vdp_circle_radius( int x, int y ); +void vdp_circle( int x, int y ); + +void vdp_select_bitmap( int n ); +void vdp_load_bitmap( int width, int height, uint32_t *data ); +int vdp_load_bitmap_file( const char *fname, int width, int height ); +void vdp_draw_bitmap( int x, int y ); + +int vdp_load_sprite_bitmaps( const char *fname_prefix, const char *fname_format, + int width, int height, int num, int bitmap_num ); +void vdp_create_sprite( int sprite, int bitmap_num, int frames ); + +void vdp_select_sprite( int n ); +void vdp_move_sprite_to( int x, int y ); +void vdp_move_sprite_by( int x, int y ); +void vdp_show_sprite( void ); +void vdp_hide_sprite( void ); +void vdp_next_sprite_frame( void ); +void vdp_prev_sprite_frame( void ); +void vdp_nth_sprite_frame( int n ); +void vdp_activate_sprites( int n ); +void vdp_refresh_sprites( void ); +void vdp_reset_sprites( void ); + +#endif \ No newline at end of file diff --git a/lib/agon/intagon.src b/lib/agon/intagon.src new file mode 100644 index 0000000..0e9481a --- /dev/null +++ b/lib/agon/intagon.src @@ -0,0 +1,165 @@ +; Various interrupt related routines +; +; Paul Cawte 01/08/2023 +; +; Index values relative to _vdp_protocol_data for keyboard events + +prot_state := -6 +prot_cmd := -5 +prot_len := -4 +prot_ptr := -3 +prot_data := 0 +key_ascii := 0 +key_mods := 1 +key_code := 2 +key_down := 3 + + assume adl=1 + + section .text + +; Default interrupt handler - does nothing + + public __agdev_default_mi_handler +__agdev_default_mi_handler: + ei + reti.l + +; Modified UART0 interrupt handler + + public __agdev_uart0_handler + public __agdev_UART0_serial_RX + public __agdev_vdp_protocol_data + public __agdev_vdp_protocol +__agdev_uart0_handler: + di + push af ; save the registers + push bc + push de + push hl + push ix + + call 0 ; Address to be replaced by UART0_serial_RX +__agdev_UART0_serial_RX := $-3 + ld c, a + ld hl, 0 ; Address to be replaced by _vdp_protocol_data +__agdev_vdp_protocol_data := $-3 + push hl ; Save address for later + call 0 ; Address to be replaced by vdp_protocol +__agdev_vdp_protocol := $-3 + + pop ix ; Get address of _vdp_protocol_data + + ld hl, (ix+prot_state) + ld de, 000100h ; state = 0, cmd = 1, len = 0 + or a, a ; clear carry + sbc hl, de + jr nz, end_of_interrupt ; quick if not just finished processing KEY event + + ld a, (ix+key_code) + cp a, 030h + jr c, got_key_code ; if less than 30h (A) + cp a, 04Ah + jr nc, check_punctuation ; if less than or equal to 49h (Z) + sub a, 030h - 016h ; key code for 'a' is 16h + jr got_key_code + +check_punctuation: + + cp a, 04Dh ; translation for shifted punctuation keys + jr c, got_key_code + cp a, 074h + jr nc, got_key_code + + ld de, key_code_trans - 04Dh + or a, a + sbc hl, hl + ld l, a + add hl, de ; hl is the address in the translation table + ld a, (hl) + +got_key_code: +; jr save_key + + ld c, a ; save the key for later + and a, 07h ; isolate the bottom 3 bits as the mask index + ld de, bit_mask + or a, a + sbc hl, hl + ld l, a + add hl, de + ld b, (hl) ; have the bit mask in b (key code is in c) + + ld de, _vdp_key_bits + or a, a + sbc hl, hl + ld l, c + srl l ; divide by eight + srl l + srl l + add hl, de ; hl is the address in the vdp_key_bits table + + ld a, (ix+key_down) + or a, a + ld a, b ; get mask ready for both branch paths + jr z, key_not_down + + or a, (hl) ; key down - set bit + ld (hl), a + jr end_of_interrupt + +key_not_down: + cpl ; key up - clear bit + and a, (hl) + ld (hl), a + +save_key: +; ld (_vdp_key_bits), a + +end_of_interrupt: + pop ix ; restore the registers + pop hl + pop de + pop bc + pop af + ei + reti.l + + ; key code translations codes 4D to 73 + ; - where there is no translation required, translates to itself +key_code_trans: + db 4Ch ; 4D + db 4Eh, 4Fh, 50h + db 4Eh ; 51 + db 52h, 53h + db 0ah ; 54 + db 55h, 56h, 57h, 58h, 59h + db 5ch ; 5a + db 5bh, 5ch + db 09h ; 5d + db 55h ; 5e + db 05h ; 5f + db 04h ; 60 + db 08h ; 61 + db 06h ; 62 + db 63h, 64h + db 07h ; 65 + db 03h ; 66 + db 57h ; 67 + db 6ah ; 68 + db 6bh ; 69 + db 6ah, 6bh + db 0bh ; 6c + db 02h ; 6d + db 5bh ; 6e + db 59h ; 6f + db 4fh ; 70 + db 71h, 72h + db 4ah ; 73 + + ; bit masks - used for bit packing +bit_mask: + db 001h, 002h, 004h, 008h + db 010h, 020h, 040h, 080h + +extern _vdp_key_bits diff --git a/lib/agon/vdp_key.c.src b/lib/agon/vdp_key.c.src new file mode 100644 index 0000000..7b1688f --- /dev/null +++ b/lib/agon/vdp_key.c.src @@ -0,0 +1,340 @@ + section .text,"ax",@progbits + assume adl = 1 + section .text,"ax",@progbits + public _vdp_key_init +_vdp_key_init: + ld hl, __agdev_default_mi_handler + push hl + ld hl, 24 + push hl + call _mos_setintvector + pop de + pop de + ld (_uart0_orig_handler), hl + push hl + ld hl, 24 + push hl + call _mos_setintvector + pop hl + pop hl + ld hl, (_uart0_orig_handler) + ld de, __agdev_UART0_serial_RX + push de + ld de, _fp1 + push de + push hl + call _check_bytes_get_int + pop de + pop de + pop de + add hl, bc + or a, a + sbc hl, bc + jr z, BB0_3 + ld de, _fp2 + ld bc, __agdev_vdp_protocol_data + push bc + push de + push hl + call _check_bytes_get_int + pop de + pop de + pop de + add hl, bc + or a, a + sbc hl, bc + jr z, BB0_3 + ld de, _fp3 + ld bc, __agdev_vdp_protocol + push bc + push de + push hl + call _check_bytes_get_int + pop de + pop de + pop de + add hl, bc + or a, a + sbc hl, bc + jr nz, BB0_4 +BB0_3: + scf + sbc hl, hl + ret +BB0_4: + ld de, _fp4 + push de + push hl + call _check_bytes + pop de + pop de + add hl, bc + or a, a + sbc hl, bc + ld hl, -1 + jr z, BB0_6 + ld de, -6 + ld iy, _vdp_key_reset_interrupt + ld bc, (__agdev_vdp_protocol_data) + push bc + pop hl + add hl, de + ld (_vdp_ctrl_ptr), hl + ld (_vdp_key_event_ptr), bc + push iy + call _atexit + pop hl + ld hl, __agdev_uart0_handler + push hl + ld hl, 24 + push hl + call _mos_setintvector + pop hl + pop hl + or a, a + sbc hl, hl +BB0_6: + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _check_bytes_get_int +_check_bytes_get_int: + call __frameset0 + ld hl, (ix + 6) + ld de, (ix + 9) + push de + push hl + call _check_bytes + push hl + pop iy + pop hl + pop hl + lea hl, iy + add hl, bc + or a, a + sbc hl, bc + jr nz, BB1_2 + ld hl, 0 + jr BB1_3 +BB1_2: + ld hl, (ix + 12) + ld de, (iy) + ld (hl), de + lea hl, iy + 3 +BB1_3: + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _check_bytes +_check_bytes: + call __frameset0 + ld hl, (ix + 6) + ld iy, (ix + 9) + ld bc, 0 +BB2_1: + ld e, (iy) + ld a, e + or a, a + jr z, BB2_3 + inc iy + ld a, (hl) + inc hl + cp a, e + jr z, BB2_1 + jr BB2_4 +BB2_3: + push hl + pop bc +BB2_4: + push bc + pop hl + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_key_reset_interrupt +_vdp_key_reset_interrupt: + ld hl, (_uart0_orig_handler) + add hl, bc + or a, a + sbc hl, bc + jr z, BB3_2 + push hl + ld hl, 24 + push hl + call _mos_setintvector + pop hl + pop hl + ld hl, 0 + ld (_uart0_orig_handler), hl +BB3_2: + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_set_key_event_handler +_vdp_set_key_event_handler: + call __frameset0 + ld hl, (ix + 6) + ld (_event_handler), hl + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_update_key_state +_vdp_update_key_state: + ld hl, -4 + call __frameset + ld iy, (_vdp_key_event_ptr) + lea hl, iy + add hl, bc + or a, a + sbc hl, bc + jr z, BB5_5 + ld hl, (_vdp_ctrl_ptr) + ld hl, (hl) + ld bc, (iy) + ld e, (iy + 3) + push bc + pop iy + ld (ix - 4), bc + ld (ix - 1), e + ld bc, 256 + or a, a + sbc hl, bc + jr nz, BB5_5 + ld bc, (_event_handler) + lea hl, iy + call __lcmpzero + jr z, BB5_5 + push bc + pop hl + add hl, bc + or a, a + sbc hl, bc + jr z, BB5_5 + lea hl, ix - 4 + push de + push de + ld iy, 0 + add iy, sp + ld a, (hl) + ld (iy), a + ld a, (ix - 3) + ld (iy + 1), a + ld a, (ix - 2) + ld (iy + 2), a + ld a, (ix - 1) + ld (iy + 3), a + push bc + pop hl + call __indcallhl + pop hl + pop hl +BB5_5: + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_check_key_press +_vdp_check_key_press: + call __frameset0 + ld c, (ix + 6) + ld b, 3 + ld iy, _vdp_key_bits + ld hl, _bit_masks + ld a, c + and a, 7 + ld e, a + ld a, c + call __bshru + ld bc, 0 + ld c, a + add iy, bc + ld c, e + add hl, bc + ld a, (hl) + and a, (iy) + or a, a + jr nz, BB6_2 + ld a, 0 + jr BB6_3 +BB6_2: + ld a, -1 +BB6_3: + pop ix + ret + section .text,"ax",@progbits + + section .bss,"aw",@nobits + public _vdp_key_bits +_vdp_key_bits: + rb 32 + + section .bss,"aw",@nobits + private _uart0_orig_handler +_uart0_orig_handler: + rb 3 + + section .data,"aw",@progbits + private _fp1 +_fp1: + db "óõÅÕåÍ", 0 + + section .data,"aw",@progbits + private _fp2 +_fp2: + db "O!", 0 + + section .data,"aw",@progbits + private _fp3 +_fp3: + db "Í", 0 + + section .data,"aw",@progbits + private _fp4 +_fp4: + db "áÑÁñû[íM", 0 + + section .bss,"aw",@nobits + private _vdp_ctrl_ptr +_vdp_ctrl_ptr: + rb 3 + + section .bss,"aw",@nobits + private _vdp_key_event_ptr +_vdp_key_event_ptr: + rb 3 + + section .bss,"aw",@nobits + private _event_handler +_event_handler: + rb 3 + + section .rodata,"a",@progbits + private _bit_masks +_bit_masks: + db " @€" + + ident "clang version 15.0.0 (https://github.com/jacobly0/llvm-project 6c61664110f888c0285ae4c48b150c9a7a4361bb)" + extern __Unwind_SjLj_Register + extern __frameset + extern __lcmpzero + extern __indcallhl + extern __agdev_UART0_serial_RX + extern __Unwind_SjLj_Unregister + extern __agdev_uart0_handler + extern _mos_setintvector + extern __agdev_vdp_protocol + extern __agdev_vdp_protocol_data + extern _atexit + extern __agdev_default_mi_handler + extern __bshru + extern __frameset0 diff --git a/lib/agon/vdp_vdu.c.src b/lib/agon/vdp_vdu.c.src new file mode 100644 index 0000000..d7e67eb --- /dev/null +++ b/lib/agon/vdp_vdu.c.src @@ -0,0 +1,1461 @@ + section .text,"ax",@progbits + assume adl = 1 + section .text,"ax",@progbits + public _vdp_vdu_init +_vdp_vdu_init: + call _mos_sysvars + ld (_sys_vars), hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_bell +_vdp_bell: + ld hl, _vdu_bell + ld de, 1 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_cursor_left +_vdp_cursor_left: + ld hl, _vdu_cursor_left + ld de, 1 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_cursor_right +_vdp_cursor_right: + ld hl, _vdu_cursor_right + ld de, 1 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_cursor_down +_vdp_cursor_down: + ld hl, _vdu_cursor_down + ld de, 1 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_cursor_up +_vdp_cursor_up: + ld hl, _vdu_cursor_up + ld de, 1 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_clear_screen +_vdp_clear_screen: + ld hl, _vdu_clear_screen + ld de, 1 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_clear_graphics +_vdp_clear_graphics: + ld hl, _vdu_clear_graphics + ld de, 1 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_cursor_home +_vdp_cursor_home: + ld hl, _vdu_cursor_home + ld de, 1 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_cursor_tab +_vdp_cursor_tab: + call __frameset0 + ld a, (ix + 6) + ld l, (ix + 9) + ld de, _vdu_cursor_tab + ld bc, 3 + ld (_vdu_cursor_tab+2), a + ld a, l + ld (_vdu_cursor_tab+1), a + or a, a + sbc hl, hl + push hl + push bc + push de + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_set_text_colour +_vdp_set_text_colour: + call __frameset0 + ld a, (ix + 6) + ld hl, _vdu_set_text_colour + ld de, 2 + ld (_vdu_set_text_colour+1), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_mode +_vdp_mode: + call __frameset0 + ld iy, (ix + 6) + ld de, -1 + ld bc, 4 + lea hl, iy + or a, a + sbc hl, bc + jr nc, BB11_2 + ld hl, _vdu_mode + ld de, 2 + ld a, iyl + ld (_vdu_mode+1), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ld de, (ix + 6) +BB11_2: + ex de, hl + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_graphics_origin +_vdp_graphics_origin: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_graphics_origin+1 + ld iy, _vdu_graphics_origin+3 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 5 + push hl + ld hl, _vdu_graphics_origin + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_get_scr_dims +_vdp_get_scr_dims: + call __frameset0 + ld hl, (_sys_vars) + add hl, bc + or a, a + sbc hl, bc + call z, _vdp_vdu_init + ld hl, _vdu_get_scr_dims + ld de, 3 + bit 0, (ix + 6) + jr z, BB13_3 + ld iy, (_sys_vars) + ld (iy + 4), 0 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ld iy, (_sys_vars) +BB13_2: + ld a, (iy + 4) + bit 4, a + jr z, BB13_2 + jr BB13_4 +BB13_3: + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl +BB13_4: + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_logical_scr_dims +_vdp_logical_scr_dims: + call __frameset0 + ld hl, _vdu_set_logical_scr_dims + ld de, 4 + ld a, (ix + 6) + and a, 1 + ld (_vdu_set_logical_scr_dims+3), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_cursor_enable +_vdp_cursor_enable: + call __frameset0 + ld hl, _vdu_cursor_enable + ld de, 3 + ld a, (ix + 6) + and a, 1 + ld (_vdu_cursor_enable+2), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_move_to +_vdp_move_to: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_move_to+2 + ld iy, _vdu_move_to+4 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 6 + push hl + ld hl, _vdu_move_to + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_line_to +_vdp_line_to: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_line_to+2 + ld iy, _vdu_line_to+4 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 6 + push hl + ld hl, _vdu_line_to + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_point +_vdp_point: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_point+2 + ld iy, _vdu_point+4 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 6 + push hl + ld hl, _vdu_point + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_triangle +_vdp_triangle: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_triangle+2 + ld iy, _vdu_triangle+4 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 6 + push hl + ld hl, _vdu_triangle + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_circle_radius +_vdp_circle_radius: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_circle_radius+2 + ld iy, _vdu_circle_radius+4 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 6 + push hl + ld hl, _vdu_circle_radius + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_circle +_vdp_circle: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_circle+2 + ld iy, _vdu_circle+4 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 6 + push hl + ld hl, _vdu_circle + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_select_bitmap +_vdp_select_bitmap: + call __frameset0 + ld a, (ix + 6) + ld hl, _vdu_select_bitmap + ld de, 4 + ld (_vdu_select_bitmap+3), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_draw_bitmap +_vdp_draw_bitmap: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_draw_bitmap+3 + ld iy, _vdu_draw_bitmap+5 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 7 + push hl + ld hl, _vdu_draw_bitmap + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_load_bitmap +_vdp_load_bitmap: + ld hl, -9 + call __frameset + ld bc, (ix + 6) + ld (ix - 9), bc + ld de, (ix + 9) + ld (ix - 6), de + ld hl, (ix + 12) + ld (ix - 3), hl + ld hl, _vdu_load_bitmap+3 + ld iy, _vdu_load_bitmap+5 + ld (hl), c + inc hl + ld (hl), b + ld (iy), e + ld (iy + 1), d + or a, a + sbc hl, hl + push hl + ld hl, 7 + push hl + ld hl, _vdu_load_bitmap + push hl + call _mos_puts + pop hl + pop hl + pop hl + ld c, 2 + ld hl, (ix - 9) + call __ishl + ld bc, (ix - 6) + call __imulu + push hl + pop iy +BB24_1: + ld de, 65536 + lea hl, iy + or a, a + sbc hl, de + call pe, __setflag + jp m, BB24_3 + or a, a + sbc hl, hl + push hl + ld hl, 65535 + push hl + ld hl, (ix - 3) + push hl + ld (ix - 6), iy + call _mos_puts + ld iy, (ix - 6) + pop hl + pop hl + pop hl + ld de, 65535 + ld hl, (ix - 3) + add hl, de + ld (ix - 3), hl + ld de, -65535 + add iy, de + jr BB24_1 +BB24_3: + ld hl, (ix - 3) + ld (ix + 6), hl + ld (ix + 9), iy + ld (ix + 12), 0 + ld sp, ix + pop ix + jp _mos_puts + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_load_bitmap_file +_vdp_load_bitmap_file: + ld hl, -15 + call __frameset + ld hl, 65535 + push hl + call _malloc + pop de + add hl, bc + or a, a + sbc hl, bc + jr z, BB25_2 + ld (ix - 3), hl + or a, a + sbc hl, hl + ld (ix - 6), hl + ld hl, (ix + 6) + ld de, _.str + push de + push hl + call _fopen + pop de + pop de + add hl, bc + or a, a + sbc hl, bc + jr nz, BB25_3 +BB25_2: + scf + sbc hl, hl + jp BB25_14 +BB25_3: + ld (ix - 9), hl + ld de, (ix + 9) + ld bc, (ix + 12) + ld iy, _vdu_load_bitmap+3 + ld (iy), e + ld (iy + 1), d + ld hl, _vdu_load_bitmap+5 + ld (hl), c + inc hl + ld (hl), b + or a, a + sbc hl, hl + push hl + ld hl, 7 + push hl + ld hl, _vdu_load_bitmap + push hl + call _mos_puts + pop hl + pop hl + pop hl + ld c, 2 + ld hl, (ix + 9) + call __ishl + ld bc, (ix + 12) + call __imulu + push hl + pop bc + ld de, 65535 + or a, a + sbc hl, de + push bc + pop de + call pe, __setflag + jp m, BB25_8 + ld bc, 65535 + jr BB25_8 +BB25_5: + ld (ix - 15), de + ld hl, (ix - 9) + push hl + ld (ix - 12), bc + push bc + push iy + ld hl, (ix - 3) + push hl + call _fread + pop de + pop de + pop de + pop de + ld de, (ix - 12) + or a, a + sbc hl, de + jr z, BB25_7 + scf + sbc hl, hl + ld (ix - 6), hl +BB25_7: + or a, a + sbc hl, hl + push hl + push de + ld hl, (ix - 3) + push hl + call _mos_puts + pop hl + pop hl + pop hl + ld hl, (ix - 15) + ld de, (ix - 12) + push de + pop bc + or a, a + sbc hl, de + push hl + pop de +BB25_8: + ld iy, 1 + push bc + pop hl + or a, a + sbc hl, de + call pe, __setflag + jp m, BB25_5 + push de + pop bc + ld de, 1 + push bc + pop hl + or a, a + sbc hl, de + call pe, __setflag + jp m, BB25_13 + ld hl, (ix - 9) + push hl + push bc + push iy + ld hl, (ix - 3) + push hl + ld (ix - 15), bc + call _fread + pop de + pop de + pop de + pop de + ld de, (ix - 15) + or a, a + sbc hl, de + jr z, BB25_12 + scf + sbc hl, hl + ld (ix - 6), hl +BB25_12: + or a, a + sbc hl, hl + push hl + push de + ld hl, (ix - 3) + push hl + call _mos_puts + pop hl + pop hl + pop hl +BB25_13: + ld hl, (ix - 9) + push hl + call _fclose + pop hl + ld hl, (ix - 3) + push hl + call _free + pop hl + ld hl, (ix - 6) +BB25_14: + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_load_sprite_bitmaps +_vdp_load_sprite_bitmaps: + ld hl, -21 + call __frameset + ld bc, (ix + 12) + ld hl, (ix + 15) + call __imulu + ld c, 2 + ld (ix - 3), hl + call __ishl + push hl + call _malloc + pop de + add hl, bc + or a, a + sbc hl, bc + jr nz, BB26_2 + or a, a + sbc hl, hl + jp BB26_11 +BB26_2: + ld (ix - 6), hl + ld bc, (ix + 18) + ld de, 1 + push bc + pop hl + or a, a + sbc hl, de + call pe, __setflag + dec de + jp p, BB26_4 + push de + pop bc +BB26_4: + ld iy, (ix + 6) + ld hl, (ix + 21) + ld (ix - 9), bc +BB26_5: + add hl, de + ld (ix - 12), hl + push bc + pop hl + or a, a + sbc hl, de + jp z, BB26_9 + push de + push iy + ld hl, (ix + 9) + push hl + ld hl, _sprite_fname + push hl + ld (ix - 15), de + call _sprintf + pop hl + pop hl + pop hl + pop hl + ld hl, _.str + push hl + ld hl, _sprite_fname + push hl + call _fopen + push hl + pop de + pop hl + pop hl + push de + pop hl + add hl, bc + or a, a + sbc hl, bc + jr z, BB26_10 + push de + ld hl, (ix - 3) + push hl + ld hl, 4 + push hl + ld hl, (ix - 6) + push hl + ld (ix - 21), de + call _fread + ld (ix - 18), hl + pop hl + pop hl + pop hl + pop hl + ld hl, (ix - 21) + push hl + call _fclose + pop hl + ld hl, (ix - 18) + ld de, (ix - 3) + or a, a + sbc hl, de + jr nz, BB26_10 + ld hl, (ix - 12) + push hl + call _vdp_select_bitmap + pop hl + ld hl, (ix - 6) + push hl + ld hl, (ix + 15) + push hl + ld hl, (ix + 12) + push hl + call _vdp_load_bitmap + pop hl + pop hl + pop hl + ld de, (ix - 15) + inc de + ld bc, (ix - 9) + ld iy, (ix + 6) + ld hl, (ix + 21) + jp BB26_5 +BB26_9: + ld hl, (ix - 6) + push hl + call _free + pop hl + ld hl, (ix - 9) + jr BB26_11 +BB26_10: + ld hl, (ix - 15) +BB26_11: + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_create_sprite +_vdp_create_sprite: + ld hl, -4 + call __frameset + ld a, (ix + 6) + ld hl, _vdu_sprite_select + ld de, 4 + ld (_vdu_sprite_select+3), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + or a, a + sbc hl, hl + push hl + ld hl, 3 + push hl + ld hl, _vdu_sprite_clear + push hl + call _mos_puts + ld bc, (ix + 12) + pop hl + pop hl + pop hl + ld de, 1 + push bc + pop hl + or a, a + sbc hl, de + call pe, __setflag + jp p, BB27_2 + ld bc, 0 +BB27_2: + ld a, (ix + 9) + ld de, _vdu_sprite_add_bitmap +BB27_3: + push bc + pop hl + add hl, bc + or a, a + sbc hl, bc + jr z, BB27_5 + ld (ix - 1), a + ld a, (ix - 1) + ld (_vdu_sprite_add_bitmap+3), a + or a, a + sbc hl, hl + push hl + ld hl, 4 + push hl + push de + ld (ix - 4), bc + call _mos_puts + ld de, _vdu_sprite_add_bitmap + ld a, (ix - 1) + ld bc, (ix - 4) + pop hl + pop hl + pop hl + inc a + dec bc + jr BB27_3 +BB27_5: + ld a, (ix + 6) + ld (_vdu_sprite_activate+3), a + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_select_sprite +_vdp_select_sprite: + call __frameset0 + ld a, (ix + 6) + ld hl, _vdu_sprite_select + ld de, 4 + ld (_vdu_sprite_select+3), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_move_sprite_to +_vdp_move_sprite_to: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_sprite_moveto+3 + ld iy, _vdu_sprite_moveto+5 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 7 + push hl + ld hl, _vdu_sprite_moveto + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_move_sprite_by +_vdp_move_sprite_by: + call __frameset0 + ld de, (ix + 6) + ld bc, (ix + 9) + ld hl, _vdu_sprite_moveby+3 + ld iy, _vdu_sprite_moveby+5 + ld (hl), e + inc hl + ld (hl), d + ld (iy), c + ld (iy + 1), b + or a, a + sbc hl, hl + push hl + ld hl, 7 + push hl + ld hl, _vdu_sprite_moveby + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_show_sprite +_vdp_show_sprite: + ld hl, _vdu_sprite_show + ld de, 3 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_hide_sprite +_vdp_hide_sprite: + ld hl, _vdu_sprite_hide + ld de, 3 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_next_sprite_frame +_vdp_next_sprite_frame: + ld hl, _vdu_sprite_next_frame + ld de, 3 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_prev_sprite_frame +_vdp_prev_sprite_frame: + ld hl, _vdu_sprite_prev_frame + ld de, 3 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_nth_sprite_frame +_vdp_nth_sprite_frame: + call __frameset0 + ld a, (ix + 6) + ld hl, _vdu_sprite_nth_frame + ld de, 4 + ld (_vdu_sprite_nth_frame+3), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_activate_sprites +_vdp_activate_sprites: + call __frameset0 + ld a, (ix + 6) + ld hl, _vdu_sprite_activate + ld de, 4 + ld (_vdu_sprite_activate+3), a + ld bc, 0 + push bc + push de + push hl + call _mos_puts + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_refresh_sprites +_vdp_refresh_sprites: + ld hl, _vdu_sprite_update + ld de, 3 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _vdp_reset_sprites +_vdp_reset_sprites: + ld hl, _vdu_sprite_reset + ld de, 3 + ld bc, 0 + push bc + push de + push hl + call _mos_puts + pop hl + pop hl + pop hl + ret + section .text,"ax",@progbits + + section .bss,"aw",@nobits + private _sys_vars +_sys_vars: + rb 3 + + section .data,"aw",@progbits + private _vdu_bell +_vdu_bell: + db 7 + + section .data,"aw",@progbits + private _vdu_cursor_left +_vdu_cursor_left: + db 8 + + section .data,"aw",@progbits + private _vdu_cursor_right +_vdu_cursor_right: + db 9 + + section .data,"aw",@progbits + private _vdu_cursor_down +_vdu_cursor_down: + db 10 + + section .data,"aw",@progbits + private _vdu_cursor_up +_vdu_cursor_up: + db 11 + + section .data,"aw",@progbits + private _vdu_clear_screen +_vdu_clear_screen: + db 12 + + section .data,"aw",@progbits + private _vdu_clear_graphics +_vdu_clear_graphics: + db 16 + + section .data,"aw",@progbits + private _vdu_cursor_home +_vdu_cursor_home: + db 30 + + section .data,"aw",@progbits + private _vdu_cursor_tab +_vdu_cursor_tab: + db 31 + db 0 + db 0 + + section .data,"aw",@progbits + private _vdu_set_text_colour +_vdu_set_text_colour: + db 17 + db 0 + + section .data,"aw",@progbits + private _vdu_mode +_vdu_mode: + db 22 + db 0 + + section .data,"aw",@progbits + private _vdu_graphics_origin +_vdu_graphics_origin: + db 29 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_get_scr_dims +_vdu_get_scr_dims: + db 23 + db 0 + db 134 + + section .data,"aw",@progbits + private _vdu_set_logical_scr_dims +_vdu_set_logical_scr_dims: + db 23 + db 0 + db 192 + db 0 + + section .data,"aw",@progbits + private _vdu_cursor_enable +_vdu_cursor_enable: + db 23 + db 1 + db 0 + + section .data,"aw",@progbits + private _vdu_move_to +_vdu_move_to: + db 25 + db 4 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_line_to +_vdu_line_to: + db 25 + db 5 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_point +_vdu_point: + db 25 + db 64 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_triangle +_vdu_triangle: + db 25 + db 80 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_circle_radius +_vdu_circle_radius: + db 25 + db 144 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_circle +_vdu_circle: + db 25 + db 148 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_select_bitmap +_vdu_select_bitmap: + db 23 + db 27 + db 0 + db 0 + + section .data,"aw",@progbits + private _vdu_draw_bitmap +_vdu_draw_bitmap: + db 23 + db 27 + db 3 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_load_bitmap +_vdu_load_bitmap: + db 23 + db 27 + db 1 + dw 0 + dw 0 + + section .rodata,"a",@progbits + private _.str +_.str: + db "rb", 0 + + section .bss,"aw",@nobits + private _sprite_fname +_sprite_fname: + rb 32 + + section .data,"aw",@progbits + private _vdu_sprite_select +_vdu_sprite_select: + db 23 + db 27 + db 4 + db 0 + + section .data,"aw",@progbits + private _vdu_sprite_clear +_vdu_sprite_clear: + db 23 + db 27 + db 5 + + section .data,"aw",@progbits + private _vdu_sprite_add_bitmap +_vdu_sprite_add_bitmap: + db 23 + db 27 + db 6 + db 0 + + section .data,"aw",@progbits + private _vdu_sprite_activate +_vdu_sprite_activate: + db 23 + db 27 + db 7 + db 0 + + section .data,"aw",@progbits + private _vdu_sprite_moveto +_vdu_sprite_moveto: + db 23 + db 27 + db 13 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_sprite_moveby +_vdu_sprite_moveby: + db 23 + db 27 + db 14 + dw 0 + dw 0 + + section .data,"aw",@progbits + private _vdu_sprite_show +_vdu_sprite_show: + db 23 + db 27 + db 11 + + section .data,"aw",@progbits + private _vdu_sprite_hide +_vdu_sprite_hide: + db 23 + db 27 + db 12 + + section .data,"aw",@progbits + private _vdu_sprite_next_frame +_vdu_sprite_next_frame: + db 23 + db 27 + db 8 + + section .data,"aw",@progbits + private _vdu_sprite_prev_frame +_vdu_sprite_prev_frame: + db 23 + db 27 + db 9 + + section .data,"aw",@progbits + private _vdu_sprite_nth_frame +_vdu_sprite_nth_frame: + db 23 + db 27 + db 10 + db 0 + + section .data,"aw",@progbits + private _vdu_sprite_update +_vdu_sprite_update: + db 23 + db 27 + db 15 + + section .data,"aw",@progbits + private _vdu_sprite_reset +_vdu_sprite_reset: + db 23 + db 27 + db 16 + + ident "clang version 15.0.0 (https://github.com/jacobly0/llvm-project 6c61664110f888c0285ae4c48b150c9a7a4361bb)" + extern __frameset + extern _malloc + extern _fopen + extern _sprintf + extern _mos_sysvars + extern __Unwind_SjLj_Register + extern __ishl + extern __setflag + extern _mos_puts + extern __Unwind_SjLj_Unregister + extern __imulu + extern _fread + extern _free + extern __frameset0 + extern _fclose diff --git a/meta/linker_script b/meta/linker_script index b6e64ec..df0e4bc 100644 --- a/meta/linker_script +++ b/meta/linker_script @@ -253,24 +253,10 @@ source "../lib/crt/sxor.src" source "../lib/crt/sxor_fast.src" source "../lib/crt/ulltof.src" -source "../lib/ce/atomic_load_32.src" -source "../lib/ce/atomic_load_decreasing_32.src" -source "../lib/ce/atomic_load_increasing_32.src" -source "../lib/ce/delay.src" -source "../lib/ce/eval.src" -source "../lib/ce/getstringinput.src" -source "../lib/ce/gettokeninput.src" -source "../lib/ce/intce.src" -source "../lib/ce/os_textbuffer.src" -source "../lib/ce/random.src" -source "../lib/ce/runprgm.src" -source "../lib/ce/sleep.src" -source "../lib/ce/sleep_common.src" -source "../lib/ce/tice.src" -source "../lib/ce/ticksleep.src" -source "../lib/ce/usleep.src" -source "../lib/ce/zx0.src" -source "../lib/ce/zx7.src" +source "../lib/agon/intagon.src" +source "../lib/agon/vdp_vdu.c.src" +source "../lib/agon/vdp_key.c.src" + if HAS_LIBC source "../lib/libc/abs.src" source "../lib/libc/acos.src" diff --git a/src/libc/include/mos_api.h b/src/libc/include/mos_api.h index f987e14..610adc9 100644 --- a/src/libc/include/mos_api.h +++ b/src/libc/include/mos_api.h @@ -2,7 +2,7 @@ * Title: AGON MOS - MOS c header interface * Author: Jeroen Venema * Created: 15/10/2022 - * Last Updated: 15/10/2022 + * Last Updated: 22/07/2023 * * Modinfo: * 15/10/2022: Added putch, getch @@ -11,6 +11,8 @@ * 25/03/2023: Added MOS 1.03 functions / sysvars * 16/04/2023: Added MOS 1.03RC4 mos_fread / mos_fwrite / mos_flseek functions * 19/04/2023: Added mos_getfil + * 02/07/2023: Added struct / union for RTC_DATA + * 22/07/2023: Added structure for SYSVAR */ #ifndef _MOS_H @@ -53,11 +55,9 @@ typedef enum { FR_INVALID_PARAMETER /* (19) Given parameter is invalid */ } FRESULT; - - // Indexes into sysvar - from mos_api.inc #define sysvar_time 0x00 // 4: Clock timer in centiseconds (incremented by 2 every VBLANK) -#define sysvar_vpd_pflags 0x04 // 1: Flags to indicate completion of VDP commands +#define sysvar_vdp_pflags 0x04 // 1: Flags to indicate completion of VDP commands #define sysvar_keyascii 0x05 // 1: ASCII keycode, or 0 if no key is pressed #define sysvar_keymods 0x06 // 1: Keycode modifiers #define sysvar_cursorX 0x07 // 1: Cursor X position @@ -88,6 +88,59 @@ typedef enum { #define vdp_pflag_mode 0x10 #define vdp_pflag_rtc 0x20 +// Stucture / union for accessing RTC data + +typedef union { + uint64_t rtc_data; + struct { + uint8_t year; // offset since 1980 + uint8_t month; // (0-11) + uint8_t day; // (1-31) + uint8_t day_of_year; // (0-365) - *** but doesn't fit in 1 byte - wraps round *** + uint8_t day_of_week; // (0-6) + uint8_t hour; // (0-23) + uint8_t minute; // (0-59) + uint8_t second; // (0-59) + }; +} RTC_DATA; + +// Structure for accesing SYSVAR + +typedef struct { + uint32_t time; + uint8_t vpd_pflags; + uint8_t keyascii; + uint8_t keymods; + uint8_t cursorX; + uint8_t cursorY; + uint8_t scrchar; + union { + uint24_t scrpixel; + struct { + uint8_t scrpixelR; + uint8_t scrpixelB; + uint8_t scrpixelG; + }; + }; + uint8_t audioChannel; + uint8_t audioSuccess; + uint16_t scrWidth; + uint16_t scrHeight; + uint8_t scrCols; + uint8_t scrRows; + uint8_t scrColours; + uint8_t scrpixelIndex; + uint8_t vkeycode; + uint8_t vkeydown; + uint8_t vkeycount; + RTC_DATA rtc; + uint16_t keydelay; + uint16_t keyrate; + uint8_t keyled; + uint8_t scrMode; +} SYSVAR; + + // UART settings for open_UART1 typedef struct { int24_t baudRate ; //!< The baudrate to be used. @@ -120,20 +173,6 @@ typedef struct { uint24_t* dir_ptr; /* Pointer to the directory entry in the win[] (not used at exFAT) */ } FIL; -typedef union { - uint64_t rtc_data; - struct { - uint8_t year; // offset since 1980 - uint8_t month; // (0-11) - uint8_t day; // (1-31) - uint8_t day_of_year; // (0-365) - *** but doesn't fit in 1 byte - wraps round *** - uint8_t day_of_week; // (0-6) - uint8_t hour; // (0-23) - uint8_t minute; // (0-59) - uint8_t second; // (0-59) - }; -} RTC_DATA; - // Generic IO extern int putch(int a); extern char getch(void); diff --git a/src/libc/include/vdp_key.h b/src/libc/include/vdp_key.h new file mode 100644 index 0000000..78987bf --- /dev/null +++ b/src/libc/include/vdp_key.h @@ -0,0 +1,29 @@ +#ifndef _VDP_KEY_H +#define _VDP_KEY_H + +#include +#include + +typedef union { + uint32_t key_data; + struct { + uint8_t ascii; + uint8_t mods; + uint8_t code; + uint8_t down; + }; +} KEY_EVENT; + + +extern uint8_t vdp_key_bits[32]; + +typedef void (*KEY_EVENT_HANDLER)(KEY_EVENT key_event); + +int vdp_key_init( void ); +void vdp_key_reset_interrupt( void ); + +void vdp_update_key_state(); +bool vdp_check_key_press( uint8_t key_code ); +void vdp_set_key_event_handler( KEY_EVENT_HANDLER event_handler ); + +#endif \ No newline at end of file diff --git a/src/libc/include/vdp_vdu.h b/src/libc/include/vdp_vdu.h new file mode 100644 index 0000000..830ae3c --- /dev/null +++ b/src/libc/include/vdp_vdu.h @@ -0,0 +1,57 @@ +#ifndef _VDP_VDU_H +#define _VDP_VDU_H + +#include +#include +#include + +#define VDP_PUTS(S) mos_puts( (char *)&(S), sizeof(S), 0) + +volatile SYSVAR *vdp_vdu_init( void ); +void vdp_bell( void ); +void vdp_cursor_left( void ); +void vdp_cursor_right( void ); +void vdp_cursor_down( void ); +void vdp_cursor_up( void ); +void vdp_cursor_up( void ); +void vdp_clear_screen( void ); +void vdp_clear_graphics( void ); +void vdp_cursor_home( void ); +void vdp_cursor_tab( int row, int col ); +void vdp_set_text_colour( int colour ); +void vdp_graphics_origin( int x, int y ); +int vdp_mode( int mode ); +void vdp_get_scr_dims( bool ); +void vdp_logical_scr_dims( bool ); +void vdp_cursor_enable( bool flag ); + + +void vdp_move_to( int x, int y ); +void vdp_line_to( int x, int y ); +void vdp_point( int x, int y ); +void vdp_triangle( int x, int y ); +void vdp_circle_radius( int x, int y ); +void vdp_circle( int x, int y ); + +void vdp_select_bitmap( int n ); +void vdp_load_bitmap( int width, int height, uint32_t *data ); +int vdp_load_bitmap_file( const char *fname, int width, int height ); +void vdp_draw_bitmap( int x, int y ); + +int vdp_load_sprite_bitmaps( const char *fname_prefix, const char *fname_format, + int width, int height, int num, int bitmap_num ); +void vdp_create_sprite( int sprite, int bitmap_num, int frames ); + +void vdp_select_sprite( int n ); +void vdp_move_sprite_to( int x, int y ); +void vdp_move_sprite_by( int x, int y ); +void vdp_show_sprite( void ); +void vdp_hide_sprite( void ); +void vdp_next_sprite_frame( void ); +void vdp_prev_sprite_frame( void ); +void vdp_nth_sprite_frame( int n ); +void vdp_activate_sprites( int n ); +void vdp_refresh_sprites( void ); +void vdp_reset_sprites( void ); + +#endif \ No newline at end of file diff --git a/src/libc/vdp_key.c b/src/libc/vdp_key.c new file mode 100644 index 0000000..0457b43 --- /dev/null +++ b/src/libc/vdp_key.c @@ -0,0 +1,175 @@ + +// Check key status based on VDP protocol data +// +// - should call vdp_update_key_state() in the main game loop otherwise may miss events +// - in theory should be integrated into the interrupt handler (TODO) + +#include +#include +#include +#include +#include + +// Array to be updated by the interrupt routine + +uint8_t vdp_key_bits[32] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + +// Information is extracted from the existing interrupt routine to allow it to be cloned & modified + +/* Existing interrupt routine + + - Check fingerprint of this routine + - and extract addresses to use in own interrupt routine + +; AGON UART0 Interrupt Handler +; +_uart0_handler: DI ; f3 + PUSH AF ; f5 + PUSH BC ; c5 + PUSH DE ; d5 + PUSH HL ; e5 + CALL UART0_serial_RX ; cd ## ## ## + LD C, A ; 4f + LD HL, _vdp_protocol_data ; 21 ## ## ## + CALL vdp_protocol ; cd ## ## ## + POP HL ; e1 + POP DE ; d1 + POP BC ; c1 + POP AF ; f1 + EI ; fb + RETI.L ; 5b ed 4d +*/ + +static uint8_t fp1[] = { 0xf3, 0xf5, 0xc5, 0xd5, 0xe5, 0xcd, 0 }; +static uint8_t fp2[] = { 0x4f, 0x21, 0 }; +static uint8_t fp3[] = { 0xcd, 0 }; +static uint8_t fp4[] = { 0xe1, 0xd1, 0xc1, 0xf1, 0xfb, 0x5b, 0xed, 0x4d, 0 }; + +extern uint24_t _agdev_UART0_serial_RX; // Address of UART0_serial_RX call +extern uint24_t _agdev_vdp_protocol_data; // Address of vdp_protocol_data buffer +extern uint24_t _agdev_vdp_protocol; // Address of vdp_protocol call + +typedef void(*INTERRUPT_HANDLER)(void); + +extern void _agdev_default_mi_handler( void ); +extern void _agdev_uart0_handler( void ); + +const uint8_t *check_bytes( const uint8_t *mem_ptr, const uint8_t *finger_print ); +const uint8_t *check_bytes_get_int( const uint8_t *mem_ptr, const uint8_t *finger_print, uint24_t *value ); +void vdp_key_reset_interrupt( void ); + +static INTERRUPT_HANDLER uart0_orig_handler = NULL; + + +typedef union { + uint24_t vdp_prot_ctrl; + struct { + uint8_t vdp_protocol_state; + uint8_t vdp_protocol_cmd; + uint8_t vdp_protocol_len; + }; +} VDP_CTRL; + +static VDP_CTRL *vdp_ctrl_ptr = NULL; +static KEY_EVENT *vdp_key_event_ptr = NULL; + +// Returns -1 if fails to set interrupt handler else returns 0 + +int vdp_key_init( void ) +{ + // Get UART0 interrupt vector by setting it to dummy and then restoring it + + uart0_orig_handler = mos_setintvector( 0x18, _agdev_default_mi_handler ); + mos_setintvector( 0x18, uart0_orig_handler ); + + // Check "finger print" of existing routine & get addresses + + const uint8_t *mem_ptr = (uint8_t *)uart0_orig_handler; + + if ( !(mem_ptr = check_bytes_get_int( mem_ptr, fp1, &_agdev_UART0_serial_RX )) ) return -1; + if ( !(mem_ptr = check_bytes_get_int( mem_ptr, fp2, &_agdev_vdp_protocol_data )) ) return -1; + if ( !(mem_ptr = check_bytes_get_int( mem_ptr, fp3, &_agdev_vdp_protocol )) ) return -1; + if ( !(mem_ptr = check_bytes( mem_ptr, fp4 )) ) return -1; + + vdp_ctrl_ptr = (VDP_CTRL *)(_agdev_vdp_protocol_data-6); + vdp_key_event_ptr = (KEY_EVENT *)_agdev_vdp_protocol_data; + + // The above sets the 3 address in the interrupt code to the values from the original routine + + atexit( &vdp_key_reset_interrupt ); + mos_setintvector( 0x18, &_agdev_uart0_handler ); + return 0; +} + +// Restore interrupt vector on exit from program + +void vdp_key_reset_interrupt( void ) +{ + if ( !uart0_orig_handler ) return; + mos_setintvector( 0x18, uart0_orig_handler ); + uart0_orig_handler = NULL; +} + + +// Check for "finger_print" in memory +// - returns address of end of finger print or NULL if doesn't match + +const uint8_t *check_bytes( const uint8_t *mem_ptr, const uint8_t *finger_print ) +{ + while ( *finger_print ) { + if ( *mem_ptr++ != *finger_print++ ) return NULL; + } + return mem_ptr; +} + +// Check for "finger_print" in memory and gets uint24_t at end +// - returns address of end of finger print or NULL if doesn't match + +const uint8_t *check_bytes_get_int( const uint8_t *mem_ptr, const uint8_t *finger_print, uint24_t *value ) +{ + if ( !(mem_ptr = check_bytes( mem_ptr, finger_print )) ) return NULL; + *value = *(uint24_t *)mem_ptr; + mem_ptr += 3; + return mem_ptr; +} + +// Update key state routine to be called from main game loop + +static KEY_EVENT prev_key = { 0 }; +static KEY_EVENT_HANDLER event_handler = NULL; + +void vdp_set_key_event_handler( KEY_EVENT_HANDLER key_event_handler ) { + event_handler = key_event_handler; +} + +void vdp_update_key_state( void ) +{ + if ( !vdp_key_event_ptr ) return; + + uint24_t vdp_prot_ctrl; + KEY_EVENT key_event; + + vdp_prot_ctrl = vdp_ctrl_ptr->vdp_prot_ctrl; + key_event = *vdp_key_event_ptr; + + if ( vdp_prot_ctrl != 0x000100 ) return; + + if ( key_event.key_data != prev_key.key_data ) { + if ( event_handler ) (*event_handler)( key_event ); + + // Setting of bit mask is done in the interrupt routine + } + return; +} + +static uint8_t bit_masks[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; + +bool vdp_check_key_press( uint8_t key_code ) +{ + uint8_t mask = key_code & 0x07; + uint8_t byte = key_code >> 3; + return vdp_key_bits[byte] & bit_masks[mask]; +} + + diff --git a/src/libc/vdp_vdu.c b/src/libc/vdp_vdu.c new file mode 100644 index 0000000..222e0a0 --- /dev/null +++ b/src/libc/vdp_vdu.c @@ -0,0 +1,353 @@ +// VDP VDU Commands wrapper + +#include +#include +#include +#include +#include + +// Different patterns for the VDU commands +// - when defining VDU commands the values A, B and CMD should be set in the structure initialiser +// - values N (8-bit), R (8-bit), C (8-bit), X (16-bit) and Y (16-bit) should be set in the code + +typedef struct { uint8_t a; } VDU_A; +typedef struct { uint8_t a; uint8_t n; } VDU_A_N; +typedef struct { uint8_t a; uint8_t cmd; } VDU_A_CMD; +typedef struct { uint8_t a; uint8_t cmd; uint8_t n; } VDU_A_CMD_N; +typedef struct { uint8_t a; uint8_t c; uint8_t r; } VDU_A_C_R; +typedef struct { uint8_t a; uint16_t x; uint16_t y; } VDU_A_X_Y; +typedef struct { uint8_t a; uint8_t cmd; uint16_t x; uint16_t y; } VDU_A_CMD_X_Y; +typedef struct { uint8_t a; uint8_t b; uint8_t cmd; } VDU_A_B_CMD; +typedef struct { uint8_t a; uint8_t b; uint8_t cmd; uint8_t n; } VDU_A_B_CMD_N; +typedef struct { uint8_t a; uint8_t b; uint8_t cmd; uint16_t x; uint16_t y; } VDU_A_B_CMD_X_Y; + + +static volatile SYSVAR *sys_vars = NULL; + +volatile SYSVAR *vdp_vdu_init( void ) +{ + sys_vars = (SYSVAR *)mos_sysvars(); + return (SYSVAR *)sys_vars; +} + +// Basic VDU commands + +static VDU_A vdu_bell = { 7 }; +static VDU_A vdu_cursor_left = { 8 }; +static VDU_A vdu_cursor_right = { 9 }; +static VDU_A vdu_cursor_down = { 10 }; +static VDU_A vdu_cursor_up = { 11 }; +static VDU_A vdu_clear_screen = { 12 }; +static VDU_A vdu_clear_graphics = { 16 }; +static VDU_A_N vdu_set_text_colour = { 17, 0 }; +static VDU_A_N vdu_mode = { 22, 0 }; +static VDU_A_X_Y vdu_graphics_origin = { 29, 0, 0 }; +static VDU_A vdu_cursor_home = { 30 }; +static VDU_A_C_R vdu_cursor_tab = { 31, 0, 0 }; + +void vdp_bell( void ) { VDP_PUTS( vdu_bell ); } +void vdp_cursor_left( void ) { VDP_PUTS( vdu_cursor_left ); } +void vdp_cursor_right( void ) { VDP_PUTS( vdu_cursor_right ); } +void vdp_cursor_down( void ) { VDP_PUTS( vdu_cursor_down ); } +void vdp_cursor_up( void ) { VDP_PUTS( vdu_cursor_up ); } +void vdp_clear_screen( void ) { VDP_PUTS( vdu_clear_screen ); } +void vdp_clear_graphics( void ) { VDP_PUTS( vdu_clear_graphics ); } +void vdp_cursor_home( void ) { VDP_PUTS( vdu_cursor_home ); } + +void vdp_cursor_tab( int row, int col ) +{ + vdu_cursor_tab.r = row; + vdu_cursor_tab.c = col; + VDP_PUTS( vdu_cursor_tab ); +} + +void vdp_set_text_colour( int colour ) +{ + vdu_set_text_colour.n = colour; + VDP_PUTS( vdu_set_text_colour ); +} + +int vdp_mode( int mode ) +{ + if ( mode < 0 || mode >= 4 ) return -1; + vdu_mode.n = mode; + VDP_PUTS( vdu_mode ); + return mode; +} + +void vdp_graphics_origin( int x, int y ) +{ + vdu_graphics_origin.x = x; + vdu_graphics_origin.y = y; + VDP_PUTS( vdu_graphics_origin ); +} + +// VDU 23 commands + +static VDU_A_B_CMD vdu_get_scr_dims = { 23, 0, 0x86 }; +static VDU_A_B_CMD_N vdu_set_logical_scr_dims = { 23, 0, 0xC0, 0 }; +static VDU_A_CMD_N vdu_cursor_enable = { 23, 1, 0 }; + +void vdp_get_scr_dims( bool wait ) +{ + if ( !sys_vars ) vdp_vdu_init(); + + if ( wait ) sys_vars->vpd_pflags = 0; + + VDP_PUTS( vdu_get_scr_dims ); + + // wait for results of mode change to be reflected in SYSVARs + if ( wait ) while ( !(sys_vars->vpd_pflags & vdp_pflag_mode) ); +} + +void vdp_logical_scr_dims( bool flag ) +{ + vdu_set_logical_scr_dims.n = 0; + if ( flag ) vdu_set_logical_scr_dims.n = 1; + VDP_PUTS( vdu_set_logical_scr_dims ); +} + +void vdp_cursor_enable( bool flag ) +{ + vdu_cursor_enable.n = 0; + if ( flag ) vdu_cursor_enable.n = 1; + VDP_PUTS( vdu_cursor_enable ); +} + +// VDU 25 - plot command + +static VDU_A_CMD_X_Y vdu_move_to = { 25, 0x04, 0, 0 }; +static VDU_A_CMD_X_Y vdu_line_to = { 25, 0x05, 0, 0 }; +static VDU_A_CMD_X_Y vdu_point = { 25, 0x40, 0, 0 }; +static VDU_A_CMD_X_Y vdu_triangle = { 25, 0x50, 0, 0 }; +static VDU_A_CMD_X_Y vdu_circle_radius = { 25, 0x90, 0, 0 }; +static VDU_A_CMD_X_Y vdu_circle = { 25, 0x94, 0, 0 }; + +void vdp_move_to( int x, int y ) +{ + vdu_move_to.x = x; + vdu_move_to.y = y; + VDP_PUTS( vdu_move_to ); +} + +void vdp_line_to( int x, int y ) +{ + vdu_line_to.x = x; + vdu_line_to.y = y; + VDP_PUTS( vdu_line_to ); +} + +void vdp_point( int x, int y ) +{ + vdu_point.x = x; + vdu_point.y = y; + VDP_PUTS( vdu_point ); +} + +void vdp_triangle( int x, int y ) +{ + vdu_triangle.x = x; + vdu_triangle.y = y; + VDP_PUTS( vdu_triangle ); +} + +void vdp_circle_radius( int x, int y ) +{ + vdu_circle_radius.x = x; + vdu_circle_radius.y = y; + VDP_PUTS( vdu_circle_radius ); +} + +void vdp_circle( int x, int y ) +{ + vdu_circle.x = x; + vdu_circle.y = y; + VDP_PUTS( vdu_circle ); +} + +// Bitmaps + +static VDU_A_B_CMD_N vdu_select_bitmap = { 23, 27, 0, 0 }; +static VDU_A_B_CMD_X_Y vdu_load_bitmap = { 23, 27, 1, 0, 0 }; +static VDU_A_B_CMD_X_Y vdu_draw_bitmap = { 23, 27, 3, 0, 0 }; + +void vdp_select_bitmap( int n ) +{ + vdu_select_bitmap.n = n; + VDP_PUTS( vdu_select_bitmap ); +} + +void vdp_draw_bitmap( int x, int y ) +{ + vdu_draw_bitmap.x = x; + vdu_draw_bitmap.y = y; + VDP_PUTS( vdu_draw_bitmap ); +} + +#define LOAD_BMAP_BLOCK 65535 + +void vdp_load_bitmap( int width, int height, uint32_t *data ) +{ + vdu_load_bitmap.x = width; + vdu_load_bitmap.y = height; + VDP_PUTS( vdu_load_bitmap ); + + int size; + char *ptr = (char *)data; + for ( size = width*height*sizeof(uint32_t); size > LOAD_BMAP_BLOCK; size -= LOAD_BMAP_BLOCK ) { + mos_puts( (char *)ptr, LOAD_BMAP_BLOCK, 0 ); + ptr += LOAD_BMAP_BLOCK; + } + mos_puts( (char *)ptr, size, 0 ); +} + +int vdp_load_bitmap_file( const char *fname, int width, int height ) +{ + FILE *fp; + char *buffer; + int exit_code = 0; + + if ( !(buffer = (char *)malloc( LOAD_BMAP_BLOCK ) ) ) return -1; + if ( !(fp = fopen( fname, "rb" ) ) ) return -1; + + vdu_load_bitmap.x = width; + vdu_load_bitmap.y = height; + VDP_PUTS( vdu_load_bitmap ); + + int block_size = LOAD_BMAP_BLOCK; + int size = width * height * sizeof(uint32_t); + if ( size < block_size ) block_size = size; + + for ( ; size > block_size; size -= block_size ) { + if ( fread( buffer, 1, block_size, fp ) != (size_t)block_size ) exit_code = -1; + mos_puts( buffer, block_size, 0 ); + } + if ( size > 0) { + if ( fread( buffer, 1, size, fp ) != (size_t)size ) exit_code = -1; + mos_puts( buffer, size, 0 ); + } + fclose( fp ); + free( buffer ); + return exit_code; +} + + +// VDU 23, 27 - sprite commands + +static VDU_A_B_CMD_N vdu_sprite_select = { 23, 27, 4, 0 }; +static VDU_A_B_CMD vdu_sprite_clear = { 23, 27, 5 }; +static VDU_A_B_CMD_N vdu_sprite_add_bitmap = { 23, 27, 6, 0 }; +static VDU_A_B_CMD_N vdu_sprite_activate = { 23, 27, 7, 0 }; +static VDU_A_B_CMD vdu_sprite_next_frame = { 23, 27, 8 }; +static VDU_A_B_CMD vdu_sprite_prev_frame = { 23, 27, 9 }; +static VDU_A_B_CMD_N vdu_sprite_nth_frame = { 23, 27, 10, 0 }; +static VDU_A_B_CMD vdu_sprite_show = { 23, 27, 11 }; +static VDU_A_B_CMD vdu_sprite_hide = { 23, 27, 12 }; +static VDU_A_B_CMD_X_Y vdu_sprite_moveto = { 23, 27, 13, 0, 0 }; +static VDU_A_B_CMD_X_Y vdu_sprite_moveby = { 23, 27, 14, 0, 0 }; +static VDU_A_B_CMD vdu_sprite_update = { 23, 27, 15 }; +static VDU_A_B_CMD vdu_sprite_reset = { 23, 27, 16 }; + + +static char sprite_fname[32]; + +int vdp_load_sprite_bitmaps( const char *fname_prefix, const char *fname_format, + int width, int height, int num, int bitmap_num ) +{ + uint32_t *img_buf; + FILE *fp; + int cnt = 0; + + if ( !(img_buf = (uint32_t *)malloc( width*height*sizeof(uint32_t) ) ) ) return cnt; + + for ( int i = 0; i < num; i++ ) { + sprintf( sprite_fname, fname_format, fname_prefix, i ); + if ( !(fp = fopen( sprite_fname, "rb" ) ) ) return cnt; + + size_t pixel_cnt = fread( (void *)img_buf, sizeof(uint32_t), width*height, fp ); + fclose( fp ); + if ( pixel_cnt != (size_t)(width*height) ) return cnt; + + vdp_select_bitmap( bitmap_num++ ); + vdp_load_bitmap( width, height, img_buf ); + cnt++; + } + free( img_buf); + return cnt; +} + + +void vdp_create_sprite( int sprite, int bitmap_num, int frames ) +{ + vdu_sprite_select.n = sprite; + VDP_PUTS( vdu_sprite_select ); + VDP_PUTS( vdu_sprite_clear ); + for ( int i = 0; i < frames; i++ ) { + vdu_sprite_add_bitmap.n = bitmap_num++; + VDP_PUTS( vdu_sprite_add_bitmap ); + } + vdu_sprite_activate.n = sprite; +} + +void vdp_select_sprite( int n ) +{ + vdu_sprite_select.n = n; + VDP_PUTS( vdu_sprite_select ); +} + +void vdp_move_sprite_to( int x, int y ) +{ + vdu_sprite_moveto.x = x; + vdu_sprite_moveto.y = y; + VDP_PUTS( vdu_sprite_moveto ); +} + +void vdp_move_sprite_by( int x, int y ) +{ + vdu_sprite_moveby.x = x; + vdu_sprite_moveby.y = y; + VDP_PUTS( vdu_sprite_moveby ); +} + +void vdp_show_sprite( void ) +{ + VDP_PUTS( vdu_sprite_show ); +} + +void vdp_hide_sprite( void ) +{ + VDP_PUTS( vdu_sprite_hide ); +} + +void vdp_next_sprite_frame( void ) +{ + VDP_PUTS( vdu_sprite_next_frame ); +} + +void vdp_prev_sprite_frame( void ) +{ + VDP_PUTS( vdu_sprite_prev_frame ); +} + +void vdp_nth_sprite_frame( int n ) +{ + vdu_sprite_nth_frame.n = n; + VDP_PUTS( vdu_sprite_nth_frame ); +} + +void vdp_activate_sprites( int n ) +{ + vdu_sprite_activate.n = n; + VDP_PUTS( vdu_sprite_activate ); +} + +void vdp_refresh_sprites( void ) +{ + VDP_PUTS( vdu_sprite_update ); +} + +void vdp_reset_sprites( void ) +{ + VDP_PUTS( vdu_sprite_reset ); +} + diff --git a/tests/sprite/bin/bitmaps/gal-red0.rgba b/tests/sprite/bin/bitmaps/gal-red0.rgba new file mode 100644 index 0000000000000000000000000000000000000000..cee2eb76661e1298050185c8955a162140f5b79e GIT binary patch literal 1024 zcmeHDK@Pwm2;-l7`ELBgt&Ey##Owi*kV0wEV0L140XJ*liKutssi%fLapu_*q5GTk zR2X|a_a#=^&R=)4%r7K_J>(2di#-8PGvcjdtfVw!eSM*>?qa>Sisq_<(8q9Z*{sI9^Dniyb5tn|=^9|OXVl|4)qB{E6#b}rL3V@mlV%3Q6)?9GV+OKX tWH!uhWSZEpz-A6%z0~kOsu|>j9W33z{6N^<*i=B=0W%9iV^cS9VgMldjrRZm literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship01.rgba b/tests/sprite/bin/bitmaps/ship01.rgba new file mode 100644 index 0000000000000000000000000000000000000000..d7498fa97afb76c5252202d88bca3b25bd1d99c5 GIT binary patch literal 1024 zcmd6lQ4WA03`2J^FYhV%<0hD9X{Zx3=Z`KSz}V{=!0hkQh8ai2E15QWH_<>o3unRU z$S6Hm4(ok`hx^caR%s4=rU6bF_9gp-U-gbUtXa?3yQ}v#lfx$xy|qYD62~?lk6%FZ literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship03.rgba b/tests/sprite/bin/bitmaps/ship03.rgba new file mode 100644 index 0000000000000000000000000000000000000000..06b57c201819073ba787ea0190e974449b13b227 GIT binary patch literal 1024 zcmds#Q3}8y3`2XeU4EzV&zo!uB_x6h%Jws%7;E#aXvBX;t#Ro#<nS065N~$#do`?E}R^3RoewL2t=98Z=Y`b R-}dxif{~3c7+DW%`U?;TnTh}a literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship05.rgba b/tests/sprite/bin/bitmaps/ship05.rgba new file mode 100644 index 0000000000000000000000000000000000000000..c3d62c0e0357ecd8010c9ef6617058e5bd2f4331 GIT binary patch literal 1024 zcmdUsOA5ds3`BFXUcRSr=S?gj3^OW9z%E)r@-c4`)$E(AR%<7dy}?tXq-P;xM&J32 zMrqD~gC8+8b~@yhRewE4=xgnL#VnfJ@ml9Tc(=aeKXH%ociA8HYWwQd8!)ddd-p1H ML>^~(7R0~o1NkqQ!2kdN literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship06.rgba b/tests/sprite/bin/bitmaps/ship06.rgba new file mode 100644 index 0000000000000000000000000000000000000000..3f589f81ded07d8587c8622ca7239ad3b181c9e1 GIT binary patch literal 1024 zcmdsy(FwpX2t=K%%XfTtK{L3uFb#>n>@Pfco!k+lks-ke2cwm)kAK*Rt1 GFS`Lg-i`MF literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship07.rgba b/tests/sprite/bin/bitmaps/ship07.rgba new file mode 100644 index 0000000000000000000000000000000000000000..a77f3d3b367deefb93cfd294b277b617d8257a45 GIT binary patch literal 1024 zcmd6iOAf#w2t++uFW*zR^CoSOyuetK{x-T9KpqUGtp8do#~+v9_}X_G`<^#8`0(zv z$j1n-_MLgRd*FZM$d!Z7iZ2M&E5C1kKQo-4-4Wi5fkWX<=N@z>GqMJ&y?TRZnX@>0 O?pb=3qxzhOSXoa7d6x44 literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship08.rgba b/tests/sprite/bin/bitmaps/ship08.rgba new file mode 100644 index 0000000000000000000000000000000000000000..c20b42f0a51c6479805d103fcf9bc20f266639c5 GIT binary patch literal 1024 zcmdUrQ4WA03`2J^FYhV%<0k5CnpJcP;Y$_1MCF5~jaBtT59<8$0mC^iNKPEcEMO{YdWOsO;p&ry{ abl)@TUr*wVuJzvCx9@z?44Y4#J=p;VMw&?g literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship09.rgba b/tests/sprite/bin/bitmaps/ship09.rgba new file mode 100644 index 0000000000000000000000000000000000000000..db0d0aaaf9e8cb93cbe9511fe6bd4bc05951f1c0 GIT binary patch literal 1024 zcmds#Q3`-C3`2V|FYhV*+fCFGLW;)e{1GgSc57eTz#{%;%NpShbhZ|I{>s2*O+BoB z!;+zAud~nDusWMDbI_)ni{?rD*BCo!j$`wU3_W)k;T=25XOCl_C;FW(&A!*~c>O7# M?Z4t*^=rP#Zh*$0Z2$lO literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship10.rgba b/tests/sprite/bin/bitmaps/ship10.rgba new file mode 100644 index 0000000000000000000000000000000000000000..6d30ed3875f1344daf0e098d56261f568227916c GIT binary patch literal 1024 zcmd6kK@Pwm2n2muKi^mM=1*)0nQTH4O;4H_VBJA#TRU|< zqUOaz#1m`u81L(Qzp>FbtKlt@%d0u1DT9GyX1||zl|N={J`#DI_3{6j`zv*K_Pht* MT)$h*=BFp9FRuQXiU0rr literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship11.rgba b/tests/sprite/bin/bitmaps/ship11.rgba new file mode 100644 index 0000000000000000000000000000000000000000..3efc1d865330fd045a827b9fdeeb0f9692e69503 GIT binary patch literal 1024 zcmZQz7>wZNe+C8^CdGX)JvaY9c));U21uNE0Md&M6Kld@J52qg=tb8L(~ImTm>4<@ y(u<6d^?=yu>XG^6>LbPsQsWaj3`o@ra}Uh#5dAPwVrfKLB3(aBFR^wFoH_taq?o|~ literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship12.rgba b/tests/sprite/bin/bitmaps/ship12.rgba new file mode 100644 index 0000000000000000000000000000000000000000..472ae16cfa69b8b0a6dcd6a803c519038d78f2be GIT binary patch literal 1024 zcmZQz7;NC?e+CA0Ou8E%JYe__!U(fSGvlxwL_axZfb=5kC&dixdWmy8OfNDG3kP%> qmx(aF$m(&a#U+m23|O4v(uFDxG6UuYa^jGDy)bto)2MD6PCNi0MUD3W literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship13.rgba b/tests/sprite/bin/bitmaps/ship13.rgba new file mode 100644 index 0000000000000000000000000000000000000000..682b71139535b2d0e83a962f8d8642d09e2f4eb6 GIT binary patch literal 1024 zcmd6lK?(pN2t_?vm!DI#>n05%kNJxrb2bTLNdG^j%x;W6%{>1E9@KNMF>HEPW_em@ zKYeZ=*OBnE9_W;fM|OMlsQ93V8?y&})mzO~;i`{vf}i~Z-0Sl0^pvnWqw#uoycV98 A^8f$< literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship14.rgba b/tests/sprite/bin/bitmaps/ship14.rgba new file mode 100644 index 0000000000000000000000000000000000000000..a1344f75ff750e35026992d380f60ceb33c0be90 GIT binary patch literal 1024 zcmd6k(G9>L2t=8z%XbR@+{A{^R}$1p+K<+RoZ#IdD)Q%5nux}mg~xNBTIIY)-ecdS zX{eUS%z`dz{SNnUvDU9=pf_IDo4$EHbAvdH(S6~A@MBKhQ9a7_-tZOSP$TcrJnXOH OzGu%XKF^%<{mB6{B$`P8 literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship15.rgba b/tests/sprite/bin/bitmaps/ship15.rgba new file mode 100644 index 0000000000000000000000000000000000000000..934b37310e85ccc8c9f9a30068ccab5ef2cd2e3d GIT binary patch literal 1024 zcmZQz7z*I#e+C8+rUX!C#)Ah8P&W{E$6-5$|Hv4m7lw)P2TU(a4>C=xevlrJImmiJ zY*O@NGXuANM7W^a39%OzcL;Sb5eN;5A6$A-%|O+O;9)ldCQphP5Pw3l)ci(Jgt?|W~NiTRqxPnDNn_brm)dkv@>hYZ8}w0*y_4@RrE8a*@H SyGHC|c6)dJ&BIRhto{ItA(@H* literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship17.rgba b/tests/sprite/bin/bitmaps/ship17.rgba new file mode 100644 index 0000000000000000000000000000000000000000..11cd35347ea59c7154b1e54de0429fbbbcf31c14 GIT binary patch literal 1024 zcmdszT?&9O41;$vFYhV#wwoxSl&1CvhCVr%)GS}38{@z0JjNCOZYElEf#q$EiuXFR zIrX067?Oat0r8?xvT1j+rnP^6=h0?;!=AiiIeA9*`J3Ov z#d_!SJE=a$@JuvSv!vzA9G&sl9K2VaAGx{%`sU~}tn}c62aJgK*`KH!;2cB89a*ntaYynqu3QBx JJ(W85IUnpBnTh}a literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/bitmaps/ship23.rgba b/tests/sprite/bin/bitmaps/ship23.rgba new file mode 100644 index 0000000000000000000000000000000000000000..4c79b15f0d578181115142dcec7630f6513dad4e GIT binary patch literal 1024 zcmZQz7z*I#e+C8+CI!Isz-UtRg4Evp|KI@w7?Y|K;#P$I!*&cLxE6q#uTf zbqlh7Qp~`o51&7f^}*bTEJh9Y!^|Z_BioD2CZrEl9+qw(@d%4k%F-dK4TFIP05lz# A!2kdN literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/sprite.bin b/tests/sprite/bin/sprite.bin new file mode 100644 index 0000000000000000000000000000000000000000..574cfe04d1cb6bd0f9d36f0ad484217fa3576ce2 GIT binary patch literal 13570 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 E2lRg`{Qv*} literal 0 HcmV?d00001 diff --git a/tests/sprite/bin/sprite.map b/tests/sprite/bin/sprite.map new file mode 100644 index 0000000..4799341 --- /dev/null +++ b/tests/sprite/bin/sprite.map @@ -0,0 +1,197 @@ +Section Base Top High Length +----------- ------ ------ ------ ------- +.libs 040045 040045 0h +.init 040045 04006B 26h +.fini 04006B 0400F3 88h +.init.args 0400F3 0400F3 0h +.init.bss 0400F3 0400FF Ch +.text 0400FF 04337A 327Bh +.data 04337A 0433E2 68h +.rodata 0433E2 043502 120h +.init_array 000000 000000 0h +.ctors 000000 000000 0h +.dtors 000000 000000 0h +.fini_array 000000 000000 0h +.bss 060000 060080 09FFFF 80h +.header 040000 040045 45h + +Label Value +-------------------------- ------ +___low_bss = 060000 +___len_bss = 000080 +___heaptop = 09FFFF +___heapbot = 060080 +___init_array_count = 000000 +___ctors_count = 000000 +___dtors_count = 000000 +___fini_array_count = 000000 +__stack = 0AFFFF +__fcmp = 0400FF +_inchar = 04011C +__setflag = 040123 +__bshru = 040132 +__frameset = 04013C +__frameset0 = 04014A +__iand = 040155 +__idivu = 04016E +__idvrmu = 040176 +__imulu = 04018E +__indcallhl = 0401BE +__ineg = 0401BF +__ior = 0401C8 +__ishl = 0401E1 +__ishru = 040207 +__ixor = 040248 +__ladd = 040261 +__land = 040267 +__lcmps = 040282 +__lcmpu = 04028F +__lcmpzero = 040297 +__lladd = 04029F +__lland = 0402C3 +__llcmpu = 040300 +__llcmpzero = 04032A +__llctlz = 04033F +__lldivs = 040357 +__lldivu = 0403A7 +__lldvrmu = 0403BB +__lldvrmu.hijack = 0403C2 +__llmulu = 040419 +__llneg = 04046E +__llshl = 040487 +__llshrs.hijack_llshru = 0404B5 +__llshrs.finish = 0404D4 +__llshru = 0404D8 +__llsub = 0404F2 +__lshrs.hijack_lshru = 040520 +__lshru = 04052F +__lsub = 04053F +__agdev_default_mi_handler = 040549 +__agdev_uart0_handler = 04054D +__agdev_UART0_serial_RX = 040555 +__agdev_vdp_protocol_data = 04055A +__agdev_vdp_protocol = 04055F +_vdp_vdu_init = 0405F4 +_vdp_clear_screen = 0405FD +_vdp_cursor_tab = 040614 +_vdp_mode = 04063E +_vdp_logical_scr_dims = 040678 +_vdp_cursor_enable = 04069D +_vdp_select_bitmap = 0406C2 +_vdp_load_bitmap = 0406E5 +_vdp_load_sprite_bitmaps = 04078D +_vdp_create_sprite = 04088F +_vdp_select_sprite = 040928 +_vdp_move_sprite_to = 04094B +_vdp_move_sprite_by = 04097E +_vdp_show_sprite = 0409B1 +_vdp_next_sprite_frame = 0409C8 +_vdp_prev_sprite_frame = 0409DF +_vdp_activate_sprites = 0409F6 +_sys_vars = 060000 +_vdu_clear_screen = 04337A +_vdu_cursor_tab = 04337B +_vdu_mode = 04337E +_vdu_set_logical_scr_dims = 043380 +_vdu_cursor_enable = 043384 +_vdu_select_bitmap = 043387 +_vdu_load_bitmap = 04338B +_.str = 0433E2 +_sprite_fname = 060003 +_vdu_sprite_select = 043392 +_vdu_sprite_clear = 043396 +_vdu_sprite_add_bitmap = 043399 +_vdu_sprite_activate = 04339D +_vdu_sprite_moveto = 0433A1 +_vdu_sprite_moveby = 0433A8 +_vdu_sprite_show = 0433AF +_vdu_sprite_next_frame = 0433B2 +_vdu_sprite_prev_frame = 0433B5 +_vdp_key_init = 040A19 +_check_bytes_get_int = 040AD4 +_check_bytes = 040B06 +_vdp_key_reset_interrupt = 040B2B +_vdp_set_key_event_handler = 040B4A +_vdp_update_key_state = 040B58 +_vdp_check_key_press = 040BD1 +_vdp_key_bits = 060023 +_uart0_orig_handler = 060043 +_fp1 = 0433B8 +_fp2 = 0433BF +_fp3 = 0433C2 +_fp4 = 0433C4 +_vdp_ctrl_ptr = 060046 +_vdp_key_event_ptr = 060049 +_event_handler = 06004C +_bit_masks = 0433E5 +_fclose = 040C05 +_fgetc = 040C49 +__stdio_init = 040D28 +_stdin = 0433CD +_stdout = 0433D2 +_stderr = 0433D7 +__file_streams = 06004F +_fopen = 040D7A +___fmodeflags = 040E3B +_.str = 0433ED +_fputc = 040EA2 +_fput_char = 040F32 +_fread = 040F59 +_free = 041025 +_fseek = 0410E2 +_malloc = 04118B +__alloc_base = 060077 +_npf_vpprintf = 04122A +JTI0_0 = 0433F1 +JTI0_1 = 04340F +JTI0_2 = 043454 +JTI0_3 = 043475 +JTI0_4 = 04348D +JTI0_5 = 0434A5 +_npf_utoa_rev = 042994 +_printf = 042A5C +_vprintf = 042A7B +_vsnprintf = 042A9B +_npf_bufputc = 042AFE +_npf_bufputc_nop = 042B23 +_npf_putc_std = 042B2A +_sprintf = 042B3A +_.str = 0434BD +_.str.1 = 0434C1 +_.str.2 = 0434C5 +_clock = 042B63 +_outchar = 042B67 +_putchar = 042B6E +_sbrk = 042B9D +__sbrkbase = 0433DC +_strchr = 042BBB +_strlen = 042BD8 +_errno = 06007D +_mos_puts = 042C05 +_mos_sysvars = 042E27 +_mos_fopen = 042E4E +_mos_fclose = 042E66 +_mos_fgetc = 042E7B +_mos_fputc = 042E90 +_mos_setintvector = 042F1D +_mos_fread = 042F78 +_mos_flseek = 042FB0 +_mos_getfil = 042FCF +_getsysvar_time = 042C3A +_ungetc = 042FE4 +__start = 040045 +_exit = 04006D +skip._abort = 0400A5 +_exit.sp = 0400A6 +_clear_bss = 0400F3 +_atexit = 043021 +exit_functions = 0433DF +_main = 04304D +_key_event_handler = 0431C1 +_game_loop = 04322B +_wait_clock = 043345 +_.str = 0434C9 +_.str.1 = 0434D9 +_.str.2 = 0434E4 +_.str.3 = 0434F1 +_.str.5 = 0434FD diff --git a/tests/sprite/img-src/Galaxian.png b/tests/sprite/img-src/Galaxian.png new file mode 100644 index 0000000000000000000000000000000000000000..10b8d3cd3702e335fa3bf8a276fcab6bcff2c934 GIT binary patch literal 7299 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 BXtn?V literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian1.png b/tests/sprite/img-src/Galaxian1.png new file mode 100644 index 0000000000000000000000000000000000000000..591f909186edda7b4bf8a90ce771d551b22da3a3 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u`BYlflGZ?JJHwjovJP2;gWZR`H@$Nu@W*h^S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u^tr9 cg0B?vhwWfGv2T)z5Gc)fy85}Sb4q9e06GOr0ssI2 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian101.png b/tests/sprite/img-src/Galaxian101.png new file mode 100644 index 0000000000000000000000000000000000000000..84243706b706ad7fb7ca946aac8fd65ea2dc93e2 GIT binary patch literal 1200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uK_eJ+-I7$L++)vyVKN1g%>1{?M(>k!i)->o?d~Pvg8+Ao44C f<{rtDnm{r-UW|mMBi& literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian102.png b/tests/sprite/img-src/Galaxian102.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5cb6865be74b77e5df31348de652987ce4a0ca GIT binary patch literal 1194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@umdKI;Vst00Cx65C8xG literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian103.png b/tests/sprite/img-src/Galaxian103.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbfdbc7119191f59fb96fb5faede8b53ef9a883 GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ur+_Z6 z)QoJNxe3f?7@1sMR;qh&{IZ^LPN*&UOhv9^*+juNGFC-3EWxpsw+e4RKE!16o+)>_ S%(7@uQt@>4b6Mw<&;$VA1w=Fe literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian104.png b/tests/sprite/img-src/Galaxian104.png new file mode 100644 index 0000000000000000000000000000000000000000..2e7827bfd43df9d4afa31b73a21f5cc7eede0274 GIT binary patch literal 1195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u!O8XdyrEH=_oEo)_ZzrECyTl0UcGVgVd(Wkr3G^) ZZe%RTVdgu~#n=lS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u0wC~!DET>1b1V=&JTJFNQ6?A@q%|+ZL(3X1S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uQD8cg#9k=C zRAAP|An_oyF_S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u=UHV85X mgnUR0WW3nr-%wb<&A_1jfN}fQUI$P~!{F)a=d#Wzp$PzBpf>*i literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian109.png b/tests/sprite/img-src/Galaxian109.png new file mode 100644 index 0000000000000000000000000000000000000000..4a38126eecff57cb24318eecc2e6afb2ac543cb8 GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u={ S53;U-l8UFRpUXO@geCw#;zjfT literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian11.png b/tests/sprite/img-src/Galaxian11.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a6a1511c7c0eec58e0dae53503474d61824f73 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ubP0 Hl+XkKvP3)r literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian110.png b/tests/sprite/img-src/Galaxian110.png new file mode 100644 index 0000000000000000000000000000000000000000..24db5bd3a7fc29908e32257673a6d0f1fd43bcad GIT binary patch literal 1191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u%6gZel5B^<0M}A9D zuuhjdpPE*Pr0gg59j9*Ow*Pi<5aB7>V}}y;_2$=vd$@?2>|c$MoRzy literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian111.png b/tests/sprite/img-src/Galaxian111.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0f626a76fdc0ddf9f9a08f0416ad77606e0542 GIT binary patch literal 1198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u~3T_&QAFvVzsbn#jE{Hi$BGkIVSUpbFb#|1=bIv bw|!vzX~}r~)}_awQi#FR)z4*}Q$iB}TLntG literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian115.png b/tests/sprite/img-src/Galaxian115.png new file mode 100644 index 0000000000000000000000000000000000000000..e30b563a0ca2aedffd98264744116d57401f1f5e GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uo4DFC$v6>~K-}aE`}vdw`7US1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uIrf%Q~loCIBL$NR$8o literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian118.png b/tests/sprite/img-src/Galaxian118.png new file mode 100644 index 0000000000000000000000000000000000000000..6d634f1a9632605fd95879105f42a22ca272ccd3 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ubP0 Hl+XkK!%01P literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian119.png b/tests/sprite/img-src/Galaxian119.png new file mode 100644 index 0000000000000000000000000000000000000000..e072110c890eaf56dd02192dd64e5fa78bae01d0 GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uxC%O7lUWdkJ-Pgg&ebxsLQ E0N8jq;s5{u literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian120.png b/tests/sprite/img-src/Galaxian120.png new file mode 100644 index 0000000000000000000000000000000000000000..e072110c890eaf56dd02192dd64e5fa78bae01d0 GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u{!{J$C>A literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian122.png b/tests/sprite/img-src/Galaxian122.png new file mode 100644 index 0000000000000000000000000000000000000000..a6f24fc22d1e1f3361ea23d16577c8f208c18226 GIT binary patch literal 1186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u7^ktcz+tRDj{e4oF0ooqb+wBS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uitc7~R-7x+gMn zDe$bP0l+XkK9+*9m literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian125.png b/tests/sprite/img-src/Galaxian125.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b7e0d8ae7b29e9212b28609aa15a6fcfca1079 GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uIGUy#Rz;LugS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uBoKOTsR}b*zR0OaY<{R}L^gyJWdr Q8I)2yUHx3vIVCg!0GrM}(*OVf literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian127.png b/tests/sprite/img-src/Galaxian127.png new file mode 100644 index 0000000000000000000000000000000000000000..98e03d6ec52ece91c02443931c2d45d6951bde86 GIT binary patch literal 1175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u=NS0Y{b-tNSN`AP3_!&m8rpZ#>;@xJ}vQv5tZIwbrDV{->W#PIRl5XyiN7 W!NT^{<9IzNxp=zzxvXS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ugTe~DWM4fIaV^M literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian131.png b/tests/sprite/img-src/Galaxian131.png new file mode 100644 index 0000000000000000000000000000000000000000..e072110c890eaf56dd02192dd64e5fa78bae01d0 GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u3Qm)#Np}c=d#Wzp$Pzn C6FIH` literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian15.png b/tests/sprite/img-src/Galaxian15.png new file mode 100644 index 0000000000000000000000000000000000000000..90f1e8747b2ecf3303ff451f3050a857d6ab7042 GIT binary patch literal 1173 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ubQBS%=CFnhAdFKJ=aV_IgpfQKRA38Vfpt~g-%!oc9^>gTe~DWM4f DZE`vZ literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian16.png b/tests/sprite/img-src/Galaxian16.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e4b600a5653b269512b8d1093ee58ba708b96c GIT binary patch literal 1175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uHjhK7tk9fS_DYbG{yH)QfjGy@Bsg))r#4)!Jipw!{%>gTe~DWM4f D(aAYO literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian17.png b/tests/sprite/img-src/Galaxian17.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a62e84320fd29595e59e53a028e8a92cd27b46 GIT binary patch literal 1176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ut<8 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian18.png b/tests/sprite/img-src/Galaxian18.png new file mode 100644 index 0000000000000000000000000000000000000000..94392d86acc383aeead4aaa04c48e8881ec5ce1a GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@um(=4j$|iVEp8$b;EMP*@q2GBF-}|=%zb~9~4M9AfO<`z_2xjQGf9%rDvcN;_2$= Jvd$@?2>_lrKtccj literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian19.png b/tests/sprite/img-src/Galaxian19.png new file mode 100644 index 0000000000000000000000000000000000000000..f737d87818fc1ed33728eb16802a2300d72b538e GIT binary patch literal 1181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u4wREp;Ts2{OA`}0`e^*i%&Q4&A?(S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u>qlygN{!8OOjdy^K-+|4LbP0l+XkK D)oMGN literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian23.png b/tests/sprite/img-src/Galaxian23.png new file mode 100644 index 0000000000000000000000000000000000000000..9c91eed5be42da00335b3103072bf309e4bb5f59 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uO5w;p5B)S~C_fIWRnF)|errHbIEZLO#u?>_7(_n+F4fXfxyNO+n@XKtmWjUHx3v IIVCg!0L3dj2mk;8 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian24.png b/tests/sprite/img-src/Galaxian24.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf5d15c2131bfc31a7f133ac580de07f14424eb GIT binary patch literal 1176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uKr+p literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian26.png b/tests/sprite/img-src/Galaxian26.png new file mode 100644 index 0000000000000000000000000000000000000000..8697f3e435fabc8ad2f49158aa60d9b18e561526 GIT binary patch literal 1174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ua64^mV2EKj zlFIHRCNZCLT@$Ak1B-)QN0VkElV)PW=Z9ezf#pv82ZqJ>UUlk#5{IX&pUXO@geCxx Ce>(^O literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian27.png b/tests/sprite/img-src/Galaxian27.png new file mode 100644 index 0000000000000000000000000000000000000000..46ce89c87001e6547ab261dfde914c77deab71de GIT binary patch literal 1173 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ubQBS%=CFnhAdFKJ=aV_FuufQLcn0K@w2i#7tw6$S=RS3j3^P6S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uC zC{w1u(ru`4WWpB%Lqo=&4nhanH4_`U8#2Wtnt=sR)DMRBUoI4aiXaA0S3j3^P6S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u) literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian3.png b/tests/sprite/img-src/Galaxian3.png new file mode 100644 index 0000000000000000000000000000000000000000..61ad351d830b72d4b717df239b5e119d7306af7f GIT binary patch literal 1173 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uqg{+vx$vNBF-}|=%zb~9~4M9AfO<`z>xBTVfECz3co-p#M9N! JWt~$(69BNWK?VQ- literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian31.png b/tests/sprite/img-src/Galaxian31.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1cde593f7d145a1b1e3f3a5a88980a028ea8a5 GIT binary patch literal 1180 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@umdK II;Vst03`@Jr~m)} literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian33.png b/tests/sprite/img-src/Galaxian33.png new file mode 100644 index 0000000000000000000000000000000000000000..17f0126acfb711b90035c6b990aa6de89aef50e3 GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uFVdQ I&MBb@0KGCh_5c6? literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian34.png b/tests/sprite/img-src/Galaxian34.png new file mode 100644 index 0000000000000000000000000000000000000000..f22bc2e451c1a0b3625378f6474e4d49e6b724ab GIT binary patch literal 1174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ugTe~DWM4f D>peUR literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian35.png b/tests/sprite/img-src/Galaxian35.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2e3341706164cef83b9706b9b345089e1fa8d8 GIT binary patch literal 1202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uWSvVG7T{d&!{N3-%o{3+X!g)n5?D@(|J4zVtH1IL3KF%)DEf>kx d*w1WlEytYAEbvt2?>tbV@pScbS?83{1ORfvN*n+H literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian37.png b/tests/sprite/img-src/Galaxian37.png new file mode 100644 index 0000000000000000000000000000000000000000..873596439c79caa8fb4b42412541da56e256393f GIT binary patch literal 1192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u_{pA literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian38.png b/tests/sprite/img-src/Galaxian38.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab58c70b83926378ed0f6b647a9472fa1c38f1 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uvqFxokqjbeMkMC{GGQss&;<(183&@IgHz@ S%Dt9>l8UFRpUXO@geCwhl14iK literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian4.png b/tests/sprite/img-src/Galaxian4.png new file mode 100644 index 0000000000000000000000000000000000000000..99f573e932efee572b811a60b886e41bcd220b09 GIT binary patch literal 1175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uC zD5Iyq(ru`4WWpB%V`Ju@4nhanH4_`U8#2oznt=t+jHisMZ|bvEK&ivi)z4*}Q$iB} D*;6{v literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian40.png b/tests/sprite/img-src/Galaxian40.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b9cde350eb26770daaaf7353107541aaf8fa2a GIT binary patch literal 1182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uUdlsDVte>&h$eCeZ=A#vQbM)qDEwSj*R6JYjzwS!T!SwYfnO>PHN2&k- literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian41.png b/tests/sprite/img-src/Galaxian41.png new file mode 100644 index 0000000000000000000000000000000000000000..cd7ac61f5795773d202316900e2e943f92d964bf GIT binary patch literal 1182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uSV1_{rlF6O(aj z=Z+f}e#GSDoN$U+p%kDe-NdbCuyw)5KwY+7-QApr*RuR!V`jKz!?;&KjfDl2L_A&n KT-G@yGywoEm_Zu= literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian43.png b/tests/sprite/img-src/Galaxian43.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ec53095ff858a595ea42e3f6875eb83bf4d0d7 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@umdKI;Vst0CnU& AdH?_b literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian44.png b/tests/sprite/img-src/Galaxian44.png new file mode 100644 index 0000000000000000000000000000000000000000..6efd6880bf65d5f52a6a8ae959f71d3a2534ede0 GIT binary patch literal 1172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@usZ?)0xEv6CZrwkdEPu}2Wx?qEJJ(+)BCN?KYoLfhNr8a%Q~loCIHCK BK3)I- literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian45.png b/tests/sprite/img-src/Galaxian45.png new file mode 100644 index 0000000000000000000000000000000000000000..716e9452ecc83f3de506838c9175338000b0f616 GIT binary patch literal 1165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u=-tMOy#> literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian47.png b/tests/sprite/img-src/Galaxian47.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e78d56487d68fb727306d3e5521685875db837 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@udQRUD8<4Ylx#d*{an^LB{Ts5?VU=J literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian5.png b/tests/sprite/img-src/Galaxian5.png new file mode 100644 index 0000000000000000000000000000000000000000..1810b5d962ee4beb143e7e523e45fab6e3f80759 GIT binary patch literal 1176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u^gtJE#Bv literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian50.png b/tests/sprite/img-src/Galaxian50.png new file mode 100644 index 0000000000000000000000000000000000000000..704494c5727f8b5b88bf771d6d1009ab7c483bfd GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uElvF%j{an^LB{Ts5^Pogp literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian51.png b/tests/sprite/img-src/Galaxian51.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7a6b7d7e1ee156f69658c0d75b849f7566a673 GIT binary patch literal 1183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ugV>lT^EjuGjV=lzPs&$9;gUn N@O1TaS?83{1OTJ?LiYdw literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian52.png b/tests/sprite/img-src/Galaxian52.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7c15d82c3258042968596210739544dcb99369 GIT binary patch literal 1202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u#gyZSz=d#Wzp$Pz`#8M^z literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian53.png b/tests/sprite/img-src/Galaxian53.png new file mode 100644 index 0000000000000000000000000000000000000000..547135fcf2cad47af18ab86794e148928868ba4e GIT binary patch literal 1204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u!z#q4!j54d=_6*L$&x~k0cQb-VZIDdgsUZ{MAJM$tr&(n5|buG(o jTU@z5=}3pn|DcDgZ1PODpS4uOK}pBc)z4*}Q$iB}bd^mr literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian54.png b/tests/sprite/img-src/Galaxian54.png new file mode 100644 index 0000000000000000000000000000000000000000..2d84ed461c9e67e61058f99e540799974aece0e1 GIT binary patch literal 1194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u?Ufzvi>GkLFkFzsA?SYwuRRh#DGs^h$K ZICmUpTx$DbP5>yuc)I$ztaD0e0suaGN&x@> literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian55.png b/tests/sprite/img-src/Galaxian55.png new file mode 100644 index 0000000000000000000000000000000000000000..6ead94805ba9e099cfe0234e917c2f6299b8f028 GIT binary patch literal 1221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uY-f{c}lFFe|22b7*F^Ai BS8o6S literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian56.png b/tests/sprite/img-src/Galaxian56.png new file mode 100644 index 0000000000000000000000000000000000000000..603fe5b5ec2983fff7fe20f1e2ee7beb6b6c0231 GIT binary patch literal 1210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u7It11e)oGzEw3zn{GgS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@up$9>K!=Ad1#IT zqX4TQbD|putFr>*4w*>|>ddPk*h&0`n4jMcQxPj!hP}5LbEW29X9Oh?Pgg&ebxsLQ E0HBdMxBvhE literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian58.png b/tests/sprite/img-src/Galaxian58.png new file mode 100644 index 0000000000000000000000000000000000000000..c504c03703a574cf7dbf4f0ad91470f89d020c3f GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@up$9>K!=AsVLFN zqCVsB0nQelIXwbus~FUoS22XJZxUlGF+QLp5`Cgra~A`{$%l;fuh;Hk2PF_sS3j3^ HP6S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@up$9>K!=AsVL#7 tqVB@MA!#8gdBCWGwc}dTQL(PMd<Y%Q~loCIE+)H(dY# literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian6.png b/tests/sprite/img-src/Galaxian6.png new file mode 100644 index 0000000000000000000000000000000000000000..b438b48382ef569db227b050eaca7e7b7624e519 GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u-Qc)YT`jt4s(f kU{YjO4`tnO!)fDX#;qlc5hr4_?|_nmr>mdKI;Vst0FV4Ma{vGU literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian61.png b/tests/sprite/img-src/Galaxian61.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7ac6d31b630900c214f8f32a1553a33607a921 GIT binary patch literal 1181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uOzZ$Nv)+rfhNDal4rz&Z6O|>KO~AwyS3rFeS(>Wwp62^rVmPQQZFyvqR4r U+c$Ug9|R>9Pgg&ebxsLQ04z00xc~qF literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian64.png b/tests/sprite/img-src/Galaxian64.png new file mode 100644 index 0000000000000000000000000000000000000000..644c6023e7ec6c3ca8596f2ce887922a9880c2fa GIT binary patch literal 1199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian65.png b/tests/sprite/img-src/Galaxian65.png new file mode 100644 index 0000000000000000000000000000000000000000..48e40fa1a0a9345d77388f2432efa7b5052c8617 GIT binary patch literal 1210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uzopr0JhRmPXGV_ literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian67.png b/tests/sprite/img-src/Galaxian67.png new file mode 100644 index 0000000000000000000000000000000000000000..45e38a755c93991e34d6d94b2be77262d1f1f227 GIT binary patch literal 1199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u9EK{ZRP|1gyS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uk z$5CrHGS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uE?o(-OlXHcFO5HL!JqEYP76X3*Nd(?ct-W1zJy1XB=?eVs9#WP=V1i>*vYipfuv? L>gTe~DWM4fWZgs9 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian70.png b/tests/sprite/img-src/Galaxian70.png new file mode 100644 index 0000000000000000000000000000000000000000..4410a7d7336f13f9010e68acf21ddb71ac44f526 GIT binary patch literal 1172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ui;Ijt{f(&?WtP3 PKS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ux2mpowpz4S;ju$f_akHf-1)nMiCDwhWBpWVh0#CZ|yFSYY=U&bkc7q5)3@HFIul; lA)mETK>zJB?|8j<1IGR$ru;%>Ha$@4@pScbS?83{1OT<2N}T`z literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian75.png b/tests/sprite/img-src/Galaxian75.png new file mode 100644 index 0000000000000000000000000000000000000000..d2cdfc217e8e9434246663d61bc27b1ce65703ea GIT binary patch literal 1195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uIrN-s^VC5I4%}Z8Vt=cww ii;RlD!C$r7gG?Vy7^ghA_q`L8a6Dc8T-G@yGywqcr%zn~ literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian77.png b/tests/sprite/img-src/Galaxian77.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ea30551046ed6564e63ee6e0adff5b7170efb1 GIT binary patch literal 1210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ul-E+wf298FlYG*ReMl+211UgbP_&kUbka!IImN`GSf p)AHi~y;63YzD}**^)0;p2g9QVmdP@zGr~a$$kWx&Wt~$(69C(_Q1$=- literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian78.png b/tests/sprite/img-src/Galaxian78.png new file mode 100644 index 0000000000000000000000000000000000000000..d1c6fd78d34467e85c590928ff886c765cf2b99a GIT binary patch literal 1217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u!f_M6KwZ_ o`em+vKTycs_vdQgAS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u__sK1~1s literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian80.png b/tests/sprite/img-src/Galaxian80.png new file mode 100644 index 0000000000000000000000000000000000000000..5bff93e46f34a93b33cc53d2ff29c4f61a260b31 GIT binary patch literal 1200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uk literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian81.png b/tests/sprite/img-src/Galaxian81.png new file mode 100644 index 0000000000000000000000000000000000000000..8832436117accb3ddc8c29200008737ff293dd38 GIT binary patch literal 1167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uYgr+Are!Q6I_^iLWCbE>l`@FF8IuO o#RKKI2L6*g0!JHC7zopr0I^gy!TS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ud| rqo4m!!^#KFL5>j({Avf>O_wt>h?_F$IMnV41f>X1S3j3^P6S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u~t;{UvOg0jb)(^C1<_ly>Q^9Pr=uS2Q#n4e`?r% a_5!24H%mm3B|{b{#dx~S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u%6gZfU+kUst*ZiCO zu$qr^;R0`=iNON*crW$b*%|jlCtyrw literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian88.png b/tests/sprite/img-src/Galaxian88.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ad1898fca3fe6c24616de1d53711bc99d6d916 GIT binary patch literal 1195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ubjQ%c~FMC>N+e584{yQ(t geziBme@>)k4XEueJc>FVdQ&MBb@0EIA4AOHXW literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian9.png b/tests/sprite/img-src/Galaxian9.png new file mode 100644 index 0000000000000000000000000000000000000000..767054f57eb1294ef40adab92d67e907e774baaf GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uQQ=^KTHCA>$Du41_v5z?)AZNYAq%Nt#o7*>`snzMb*eg{e+p00i_ I>zopr08vywqyPW_ literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian90.png b/tests/sprite/img-src/Galaxian90.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f0eb3c75c7c9b4f0d5c8947834f2c197120f87 GIT binary patch literal 1195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ugK;#cokpkKS2qOy0UJGvd$@?2>|_PN4o$3 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian91.png b/tests/sprite/img-src/Galaxian91.png new file mode 100644 index 0000000000000000000000000000000000000000..6f2090c863681989b287d356c9b4aabcb0f3bf9c GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u>WVh?>}uzafwLr{A~a)^}9jt?Ya6 Z6w_i=R__GnlG~sZvd$@?2>?6dN234$ literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian93.png b/tests/sprite/img-src/Galaxian93.png new file mode 100644 index 0000000000000000000000000000000000000000..05616dc24a72ade7655f21772d9e82cc5fdb1f6f GIT binary patch literal 1195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uO+ny+RiHfX7*?oo!I`^sKiyF%l3pu>A710?DPNKkkSgXa*~NU_9CDy ZnQ_K5mLu=YHZ23C7*AI}mvv4FO#p8wN@4&2 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian94.png b/tests/sprite/img-src/Galaxian94.png new file mode 100644 index 0000000000000000000000000000000000000000..95dd56d5a81e99dcaf0a44dcc8ab167118a573a7 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@udB} zrUX+$LpZA+;|kq?103lK7}-iVlUNe?l<)H}=&&(!I^O=w4oVrGu6{1-oD!M<911x2 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian95.png b/tests/sprite/img-src/Galaxian95.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ae423d019574b98b0f5bb8e59edb43876ccf9d GIT binary patch literal 1168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uq|P@?d3^>bP0l+XkKAPG4q literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/Galaxian97.png b/tests/sprite/img-src/Galaxian97.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1ebae1b60797022b4a0c23953bb5cb4b1f338d GIT binary patch literal 1192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ub^Hl5<8LSE)6!D=R9zc_+6THQFiO7HUWb(S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uHTx`+W zwa*UlNOLT3j^MfJ7Ru`-AFymy`s@|A7Ce=3=2rPS_annI(P@Y8C-1$raO)&(#=>{? feh*|nF!~fQ#^o{HZMSCx6+sN1u6{1-oD!Mr7K_J>(2di#-8PGvcjdtfVw!eSM*>?qa>Sisq_<(8q9Z*{sI9^Dniyb5tn|=^9|OXS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@umdKI;Vst0CnU& AdH?_b literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian38.png b/tests/sprite/img-src/ship/Galaxian38.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e2cac692cf15a164a6b3564085e0ac6ef0e54b GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ul=3oPg; zQ0z8v6e(zoOkh-K=k0hP<-p`1Xu_yx7Q$#|mcpo}XEI&Ul3_WA90LREcgBkz4xRHs O3B}XZ&t;ucLK6V$Bs!D; literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian41.png b/tests/sprite/img-src/ship/Galaxian41.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0efb0410e280ae0cda801817fb889ea05eb286 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uM552cl*DdLHqET+iHx!{7Ib{z-DXiFKbP_K@^_zBFnxZ- VxVfi0b_*!6c)I$ztaD0e0sux4N#y_l literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian42.png b/tests/sprite/img-src/ship/Galaxian42.png new file mode 100644 index 0000000000000000000000000000000000000000..9a775f3a8e72094f74194967a909a8bec979d086 GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u@%g0Gm;WMrY4Xle^1?Nk>(P7;C TbP0l+XkK^g>DF literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian43.png b/tests/sprite/img-src/ship/Galaxian43.png new file mode 100644 index 0000000000000000000000000000000000000000..a9042d58724e1030d180bc7a9bfe303f950c8ea7 GIT binary patch literal 1186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u17 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian45.png b/tests/sprite/img-src/ship/Galaxian45.png new file mode 100644 index 0000000000000000000000000000000000000000..817a5bec8b7be0e795eae0bd4cb6e3a404fe950a GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u_G04YKc^y3Kfj!?EhFjH~U$53;lG{5it>MTBwt TLb?0{prqpI>gTe~DWM4fS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u&SS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uNaAiT^LnV!G8y0?aWLxxUrokPr1NkQy82&F|+}l`tuN#y=JYD@< J);T3K0RRhZMUwyk literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian49.png b/tests/sprite/img-src/ship/Galaxian49.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc340d9c073fe87cac38ec11365462eb875b0a6 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uOqSkOrav yhDeq(?i16QxfNY5h9=Bv%;er>yS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uF_}jRqzUB>_8e<}R)fMFa5^gBXrjZV$ejVha}UxFFN^(65Gp;p!R2wH%ggR{#J2 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian51.png b/tests/sprite/img-src/ship/Galaxian51.png new file mode 100644 index 0000000000000000000000000000000000000000..8b5901db9c3601ae94ae291b6364030c9cc58f60 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uJ?1p-l~`-bU<-p+4FC%PZ_SyW85Baa)${h OnRvSTxvXS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uTs- literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian54.png b/tests/sprite/img-src/ship/Galaxian54.png new file mode 100644 index 0000000000000000000000000000000000000000..fa28388d7b068f1f3e4d84df0a5cad677a846571 GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uH91Xn>lNc0RI0EGEX11^vFfzQ|!niju S)ldYKRyS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u_{pA literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian56.png b/tests/sprite/img-src/ship/Galaxian56.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab58c70b83926378ed0f6b647a9472fa1c38f1 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uvqFxokqjbeMkMC{GGQss&;<(183&@IgHz@ S%Dt9>l8UFRpUXO@geCwhl14iK literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian58.png b/tests/sprite/img-src/ship/Galaxian58.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b9cde350eb26770daaaf7353107541aaf8fa2a GIT binary patch literal 1182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uUdlsDVte>&h$eCeZ=A#vQbM)qDEwSj*R6JYjzwS!T!SwYfnO>PHN2&k- literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/Galaxian59.png b/tests/sprite/img-src/ship/Galaxian59.png new file mode 100644 index 0000000000000000000000000000000000000000..cd7ac61f5795773d202316900e2e943f92d964bf GIT binary patch literal 1182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uSV1_{rlF6O(aj z=Z+f}e#GSDoN$U+p%kDe-NdbCuyw)5KwY+7-QApr*RuR!V`jKz!?;&KjfDl2L_A&n KT-G@yGywoEm_Zu= literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship00.rgba b/tests/sprite/img-src/ship/ship00.rgba new file mode 100644 index 0000000000000000000000000000000000000000..7a884d08ffd9a1184f1588d0f76dcefa6d1dc47f GIT binary patch literal 1024 zcmZQz7|!74e+CA0Ossz)`W`%B_z%Lw>Vl|4)qB{E6#b}rL3V@mlV%3Q6)?9GV+OKX tWH!uhWSZEpz-A6%z0~kOsu|>j9W33z{6N^<*i=B=0W%9iV^cS9VgMldjrRZm literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship01.rgba b/tests/sprite/img-src/ship/ship01.rgba new file mode 100644 index 0000000000000000000000000000000000000000..d7498fa97afb76c5252202d88bca3b25bd1d99c5 GIT binary patch literal 1024 zcmd6lQ4WA03`2J^FYhV%<0hD9X{Zx3=Z`KSz}V{=!0hkQh8ai2E15QWH_<>o3unRU z$S6Hm4(ok`hx^caR%s4=rU6bF_9gp-U-gbUtXa?3yQ}v#lfx$xy|qYD62~?lk6%FZ literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship03.rgba b/tests/sprite/img-src/ship/ship03.rgba new file mode 100644 index 0000000000000000000000000000000000000000..06b57c201819073ba787ea0190e974449b13b227 GIT binary patch literal 1024 zcmds#Q3}8y3`2XeU4EzV&zo!uB_x6h%Jws%7;E#aXvBX;t#Ro#<nS065N~$#do`?E}R^3RoewL2t=98Z=Y`b R-}dxif{~3c7+DW%`U?;TnTh}a literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship05.rgba b/tests/sprite/img-src/ship/ship05.rgba new file mode 100644 index 0000000000000000000000000000000000000000..c3d62c0e0357ecd8010c9ef6617058e5bd2f4331 GIT binary patch literal 1024 zcmdUsOA5ds3`BFXUcRSr=S?gj3^OW9z%E)r@-c4`)$E(AR%<7dy}?tXq-P;xM&J32 zMrqD~gC8+8b~@yhRewE4=xgnL#VnfJ@ml9Tc(=aeKXH%ociA8HYWwQd8!)ddd-p1H ML>^~(7R0~o1NkqQ!2kdN literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship06.rgba b/tests/sprite/img-src/ship/ship06.rgba new file mode 100644 index 0000000000000000000000000000000000000000..3f589f81ded07d8587c8622ca7239ad3b181c9e1 GIT binary patch literal 1024 zcmdsy(FwpX2t=K%%XfTtK{L3uFb#>n>@Pfco!k+lks-ke2cwm)kAK*Rt1 GFS`Lg-i`MF literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship07.rgba b/tests/sprite/img-src/ship/ship07.rgba new file mode 100644 index 0000000000000000000000000000000000000000..a77f3d3b367deefb93cfd294b277b617d8257a45 GIT binary patch literal 1024 zcmd6iOAf#w2t++uFW*zR^CoSOyuetK{x-T9KpqUGtp8do#~+v9_}X_G`<^#8`0(zv z$j1n-_MLgRd*FZM$d!Z7iZ2M&E5C1kKQo-4-4Wi5fkWX<=N@z>GqMJ&y?TRZnX@>0 O?pb=3qxzhOSXoa7d6x44 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship08.rgba b/tests/sprite/img-src/ship/ship08.rgba new file mode 100644 index 0000000000000000000000000000000000000000..c20b42f0a51c6479805d103fcf9bc20f266639c5 GIT binary patch literal 1024 zcmdUrQ4WA03`2J^FYhV%<0k5CnpJcP;Y$_1MCF5~jaBtT59<8$0mC^iNKPEcEMO{YdWOsO;p&ry{ abl)@TUr*wVuJzvCx9@z?44Y4#J=p;VMw&?g literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship09.rgba b/tests/sprite/img-src/ship/ship09.rgba new file mode 100644 index 0000000000000000000000000000000000000000..db0d0aaaf9e8cb93cbe9511fe6bd4bc05951f1c0 GIT binary patch literal 1024 zcmds#Q3`-C3`2V|FYhV*+fCFGLW;)e{1GgSc57eTz#{%;%NpShbhZ|I{>s2*O+BoB z!;+zAud~nDusWMDbI_)ni{?rD*BCo!j$`wU3_W)k;T=25XOCl_C;FW(&A!*~c>O7# M?Z4t*^=rP#Zh*$0Z2$lO literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship10.rgba b/tests/sprite/img-src/ship/ship10.rgba new file mode 100644 index 0000000000000000000000000000000000000000..6d30ed3875f1344daf0e098d56261f568227916c GIT binary patch literal 1024 zcmd6kK@Pwm2n2muKi^mM=1*)0nQTH4O;4H_VBJA#TRU|< zqUOaz#1m`u81L(Qzp>FbtKlt@%d0u1DT9GyX1||zl|N={J`#DI_3{6j`zv*K_Pht* MT)$h*=BFp9FRuQXiU0rr literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship11.rgba b/tests/sprite/img-src/ship/ship11.rgba new file mode 100644 index 0000000000000000000000000000000000000000..3efc1d865330fd045a827b9fdeeb0f9692e69503 GIT binary patch literal 1024 zcmZQz7>wZNe+C8^CdGX)JvaY9c));U21uNE0Md&M6Kld@J52qg=tb8L(~ImTm>4<@ y(u<6d^?=yu>XG^6>LbPsQsWaj3`o@ra}Uh#5dAPwVrfKLB3(aBFR^wFoH_taq?o|~ literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship12.rgba b/tests/sprite/img-src/ship/ship12.rgba new file mode 100644 index 0000000000000000000000000000000000000000..472ae16cfa69b8b0a6dcd6a803c519038d78f2be GIT binary patch literal 1024 zcmZQz7;NC?e+CA0Ou8E%JYe__!U(fSGvlxwL_axZfb=5kC&dixdWmy8OfNDG3kP%> qmx(aF$m(&a#U+m23|O4v(uFDxG6UuYa^jGDy)bto)2MD6PCNi0MUD3W literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship13.rgba b/tests/sprite/img-src/ship/ship13.rgba new file mode 100644 index 0000000000000000000000000000000000000000..682b71139535b2d0e83a962f8d8642d09e2f4eb6 GIT binary patch literal 1024 zcmd6lK?(pN2t_?vm!DI#>n05%kNJxrb2bTLNdG^j%x;W6%{>1E9@KNMF>HEPW_em@ zKYeZ=*OBnE9_W;fM|OMlsQ93V8?y&})mzO~;i`{vf}i~Z-0Sl0^pvnWqw#uoycV98 A^8f$< literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship14.rgba b/tests/sprite/img-src/ship/ship14.rgba new file mode 100644 index 0000000000000000000000000000000000000000..a1344f75ff750e35026992d380f60ceb33c0be90 GIT binary patch literal 1024 zcmd6k(G9>L2t=8z%XbR@+{A{^R}$1p+K<+RoZ#IdD)Q%5nux}mg~xNBTIIY)-ecdS zX{eUS%z`dz{SNnUvDU9=pf_IDo4$EHbAvdH(S6~A@MBKhQ9a7_-tZOSP$TcrJnXOH OzGu%XKF^%<{mB6{B$`P8 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship15.rgba b/tests/sprite/img-src/ship/ship15.rgba new file mode 100644 index 0000000000000000000000000000000000000000..934b37310e85ccc8c9f9a30068ccab5ef2cd2e3d GIT binary patch literal 1024 zcmZQz7z*I#e+C8+rUX!C#)Ah8P&W{E$6-5$|Hv4m7lw)P2TU(a4>C=xevlrJImmiJ zY*O@NGXuANM7W^a39%OzcL;Sb5eN;5A6$A-%|O+O;9)ldCQphP5Pw3l)ci(Jgt?|W~NiTRqxPnDNn_brm)dkv@>hYZ8}w0*y_4@RrE8a*@H SyGHC|c6)dJ&BIRhto{ItA(@H* literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship17.rgba b/tests/sprite/img-src/ship/ship17.rgba new file mode 100644 index 0000000000000000000000000000000000000000..11cd35347ea59c7154b1e54de0429fbbbcf31c14 GIT binary patch literal 1024 zcmdszT?&9O41;$vFYhV#wwoxSl&1CvhCVr%)GS}38{@z0JjNCOZYElEf#q$EiuXFR zIrX067?Oat0r8?xvT1j+rnP^6=h0?;!=AiiIeA9*`J3Ov z#d_!SJE=a$@JuvSv!vzA9G&sl9K2VaAGx{%`sU~}tn}c62aJgK*`KH!;2cB89a*ntaYynqu3QBx JJ(W85IUnpBnTh}a literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship/ship23.rgba b/tests/sprite/img-src/ship/ship23.rgba new file mode 100644 index 0000000000000000000000000000000000000000..4c79b15f0d578181115142dcec7630f6513dad4e GIT binary patch literal 1024 zcmZQz7z*I#e+C8+CI!Isz-UtRg4Evp|KI@w7?Y|K;#P$I!*&cLxE6q#uTf zbqlh7Qp~`o51&7f^}*bTEJh9Y!^|Z_BioD2CZrEl9+qw(@d%4k%F-dK4TFIP05lz# A!2kdN literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian37.png b/tests/sprite/img-src/ship2/Galaxian37.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ec53095ff858a595ea42e3f6875eb83bf4d0d7 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@umdKI;Vst0CnU& AdH?_b literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian38.png b/tests/sprite/img-src/ship2/Galaxian38.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e2cac692cf15a164a6b3564085e0ac6ef0e54b GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@ul=3oPg; zQ0z8v6e(zoOkh-K=k0hP<-p`1Xu_yx7Q$#|mcpo}XEI&Ul3_WA90LREcgBkz4xRHs O3B}XZ&t;ucLK6V$Bs!D; literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian41.png b/tests/sprite/img-src/ship2/Galaxian41.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0efb0410e280ae0cda801817fb889ea05eb286 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uM552cl*DdLHqET+iHx!{7Ib{z-DXiFKbP_K@^_zBFnxZ- VxVfi0b_*!6c)I$ztaD0e0sux4N#y_l literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian42.png b/tests/sprite/img-src/ship2/Galaxian42.png new file mode 100644 index 0000000000000000000000000000000000000000..9a775f3a8e72094f74194967a909a8bec979d086 GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u@%g0Gm;WMrY4Xle^1?Nk>(P7;C TbP0l+XkK^g>DF literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian43.png b/tests/sprite/img-src/ship2/Galaxian43.png new file mode 100644 index 0000000000000000000000000000000000000000..a9042d58724e1030d180bc7a9bfe303f950c8ea7 GIT binary patch literal 1186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u17 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian45.png b/tests/sprite/img-src/ship2/Galaxian45.png new file mode 100644 index 0000000000000000000000000000000000000000..817a5bec8b7be0e795eae0bd4cb6e3a404fe950a GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u_G04YKc^y3Kfj!?EhFjH~U$53;lG{5it>MTBwt TLb?0{prqpI>gTe~DWM4fS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u&SS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uNaAiT^LnV!G8y0?aWLxxUrokPr1NkQy82&F|+}l`tuN#y=JYD@< J);T3K0RRhZMUwyk literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian49.png b/tests/sprite/img-src/ship2/Galaxian49.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc340d9c073fe87cac38ec11365462eb875b0a6 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uOqSkOrav yhDeq(?i16QxfNY5h9=Bv%;er>yS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uF_}jRqzUB>_8e<}R)fMFa5^gBXrjZV$ejVha}UxFFN^(65Gp;p!R2wH%ggR{#J2 literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian51.png b/tests/sprite/img-src/ship2/Galaxian51.png new file mode 100644 index 0000000000000000000000000000000000000000..8b5901db9c3601ae94ae291b6364030c9cc58f60 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uJ?1p-l~`-bU<-p+4FC%PZ_SyW85Baa)${h OnRvSTxvXS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uTs- literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian54.png b/tests/sprite/img-src/ship2/Galaxian54.png new file mode 100644 index 0000000000000000000000000000000000000000..fa28388d7b068f1f3e4d84df0a5cad677a846571 GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uH91Xn>lNc0RI0EGEX11^vFfzQ|!niju S)ldYKRyS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@u_{pA literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian56.png b/tests/sprite/img-src/ship2/Galaxian56.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab58c70b83926378ed0f6b647a9472fa1c38f1 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uvqFxokqjbeMkMC{GGQss&;<(183&@IgHz@ S%Dt9>l8UFRpUXO@geCwhl14iK literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian58.png b/tests/sprite/img-src/ship2/Galaxian58.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b9cde350eb26770daaaf7353107541aaf8fa2a GIT binary patch literal 1182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uUdlsDVte>&h$eCeZ=A#vQbM)qDEwSj*R6JYjzwS!T!SwYfnO>PHN2&k- literal 0 HcmV?d00001 diff --git a/tests/sprite/img-src/ship2/Galaxian59.png b/tests/sprite/img-src/ship2/Galaxian59.png new file mode 100644 index 0000000000000000000000000000000000000000..cd7ac61f5795773d202316900e2e943f92d964bf GIT binary patch literal 1182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6zM9{GlNlJ883KGl zT!G>S1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uS1_lfaHyNUDGPF)%IDGT49m4|#hE|4~hZ$}@c))P@uSV1_{rlF6O(aj z=Z+f}e#GSDoN$U+p%kDe-NdbCuyw)5KwY+7-QApr*RuR!V`jKz!?;&KjfDl2L_A&n KT-G@yGywoEm_Zu= literal 0 HcmV?d00001 diff --git a/tests/sprite/makefile b/tests/sprite/makefile new file mode 100644 index 0000000..85736fd --- /dev/null +++ b/tests/sprite/makefile @@ -0,0 +1,18 @@ +# ---------------------------- +# Makefile Options +# ---------------------------- + +NAME = sprite +DESCRIPTION = "Ag C Toolchain Demo" +COMPRESSED = NO +LDHAS_ARG_PROCESSING = 0 + +BSSHEAP_LOW = 060000 +BSSHEAP_HIGH = 09FFFF + +CFLAGS = -Wall -Wextra -Oz +CXXFLAGS = -Wall -Wextra -Oz + +# ---------------------------- + +include $(shell cedev-config --makefile) diff --git a/tests/sprite/src/sprite.c b/tests/sprite/src/sprite.c new file mode 100644 index 0000000..24f015c --- /dev/null +++ b/tests/sprite/src/sprite.c @@ -0,0 +1,129 @@ +// VDU commands + +#include "vdp_vdu.h" +#include "vdp_key.h" +#include +#include +#include +#include +#include + +#define SC_MODE 1 +#define SC_WIDTH 512 +#define SC_HEIGHT 384 + +#define ALIEN_COLS 10 +#define ALIEN_ROWS 5 +#define ALIEN_X 64 +#define ALIEN_Y 64 + +typedef struct{ + int x; + int y; +} ALIEN; + +void game_loop( int num_sprite ); +void key_event_handler( KEY_EVENT key_event ); +void wait_clock( clock_t ticks ); + + +static ALIEN aliens[ALIEN_COLS][ALIEN_ROWS]; + +int main( void ) +{ + volatile SYSVAR *sv; + + sv = vdp_vdu_init(); + if ( vdp_key_init() == -1 ) return 1; + + vdp_mode( SC_MODE ); + vdp_clear_screen(); + vdp_logical_scr_dims( false ); + vdp_cursor_enable( false ); + + // Load bitmaps to use for the red galaxian sprites & the gun / ship + + vdp_load_sprite_bitmaps( "bitmaps/gal-red", "%s%1d.rgba", 16, 16, 4, 0 ); + vdp_load_sprite_bitmaps( "bitmaps/ship", "%s%02d.rgba", 16, 16, 24, 4 ); + + // Create the sprite for the ship (sprite 0) + + vdp_create_sprite( 0, 4, 24 ); + vdp_select_sprite( 0 ); + vdp_move_sprite_to( 256, 300 ); + vdp_show_sprite(); + + // Create the rows and columns of sprites at their initial positions + + int sprite = 1; + int x = ALIEN_X, y = ALIEN_Y; + + for ( int c = 0; c < ALIEN_COLS; c++ ) { + for ( int r = 0; r < ALIEN_ROWS; r++ ) { + vdp_create_sprite( sprite, 0, 4 ); + vdp_select_sprite( sprite++ ); + vdp_move_sprite_to( x, y ); + vdp_show_sprite(); + y += 32; + } + x += 32; + y = ALIEN_Y; + } + vdp_activate_sprites( sprite ); + + vdp_set_key_event_handler( key_event_handler ); + + game_loop( sprite ); + + vdp_cursor_enable( true ); + printf( "Press any key to continue...\n" ); + getchar(); + + return 0; +} + +void game_loop( int num_sprite ) +{ + while ( true ) { + for ( int s = 1; s < num_sprite; s++ ) { + vdp_select_sprite( s ); + vdp_next_sprite_frame(); + } + for ( int s = 0; s < 4; s++ ) { + vdp_select_sprite( 0 ); + if ( vdp_check_key_press( 0x2f ) ) vdp_prev_sprite_frame(); // z-key + if ( vdp_check_key_press( 0x2d ) ) vdp_next_sprite_frame(); // x-key + if ( vdp_check_key_press( 0x9c ) ) vdp_move_sprite_by( +3, 0 ); // right + if ( vdp_check_key_press( 0x9a ) ) vdp_move_sprite_by( -3, 0 ); // left + if ( vdp_check_key_press( 0x96 ) ) vdp_move_sprite_by( 0, -3 ); // up + if ( vdp_check_key_press( 0x98 ) ) vdp_move_sprite_by( 0, +3 ); // down + wait_clock( 4 ); +// for ( int w = 0; w < 2; w++ ) { +// vdp_update_key_state(); +// waitvblank(); +// } + } + } +} + +void key_event_handler( KEY_EVENT key_event ) +{ + if ( key_event.code == 0x7d ) { + vdp_cursor_enable( true ); + exit( 1 ); // Exit program if esc pressed + } + vdp_cursor_tab( 0, 0 ); +// printf( "Modifier %02x, key-code %02x, up/down %02x\n", +// key_event.mods, key_event.code, key_event.down ); + for ( int i = 31; i >= 0; i-- ) printf( "%02x", vdp_key_bits[i] ); + return; +} + +void wait_clock( clock_t ticks ) +{ + clock_t ticks_now = clock(); + + do { + vdp_update_key_state(); + } while ( clock() - ticks_now < ticks ); +} \ No newline at end of file