Merge branch 'touch_kbd'
This commit is contained in:
commit
233077b434
10 files changed
+725
-48
No files matched your search
@@ -186,7 +186,7 @@ TIC80_H = include/tic80_types.h include/tic80.h include/tic80_config.h src/tic.h
|
|||||||
TIC_H= src/*.h \
|
TIC_H= src/*.h \
|
||||||
src/ext/*.h
|
src/ext/*.h
|
||||||
|
|
||||||
bin/studio.o: src/studio.c src/keycodes.c $(TIC80_H) $(TIC_H)
|
bin/studio.o: src/studio.c $(TIC80_H) $(TIC_H)
|
||||||
$(CC) $< $(OPT) $(INCLUDES) -c -o $@
|
$(CC) $< $(OPT) $(INCLUDES) -c -o $@
|
||||||
|
|
||||||
bin/console.o: src/console.c $(TIC80_H) $(TIC_H) $(DEMO_ASSETS)
|
bin/console.o: src/console.c $(TIC80_H) $(TIC_H) $(DEMO_ASSETS)
|
||||||
@@ -258,7 +258,7 @@ bin/menu.o: src/menu.c $(TIC80_H) $(TIC_H)
|
|||||||
bin/surf.o: src/surf.c $(TIC80_H) $(TIC_H)
|
bin/surf.o: src/surf.c $(TIC80_H) $(TIC_H)
|
||||||
$(CC) $< $(OPT) $(INCLUDES) -c -o $@
|
$(CC) $< $(OPT) $(INCLUDES) -c -o $@
|
||||||
|
|
||||||
bin/system.o: src/system.c src/keycodes.c $(TIC80_H) $(TIC_H)
|
bin/system.o: src/system.c src/keycodes.inl src/kbdlayout.inl src/kbdlabels.inl $(TIC80_H) $(TIC_H)
|
||||||
$(CC) $< $(OPT) $(INCLUDES) -c -o $@
|
$(CC) $< $(OPT) $(INCLUDES) -c -o $@
|
||||||
|
|
||||||
bin/chip.o: src/system/chip.c src/keycodes.c $(TIC80_H) $(TIC_H)
|
bin/chip.o: src/system/chip.c src/keycodes.c $(TIC80_H) $(TIC_H)
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
0x78, 0xda, 0xed, 0x18, 0x4b, 0x6c, 0x1b, 0xc7, 0x75, 0xfd, 0x49, 0x1a, 0x32, 0xae, 0xc7, 0x02, 0x8a, 0xa0, 0x9f, 0xb4, 0x59, 0xa8, 0x69, 0x4b, 0x4a, 0x24, 0x45, 0x91, 0x92, 0xea, 0xda, 0xdd, 0xa6, 0xb2, 0x48, 0x4b, 0x6a, 0xf4, 0x83, 0x24, 0xc6, 0x0d, 0x8c, 0x44, 0x5d, 0x91, 0x4b, 0x89, 0x08, 0xc5, 0x55, 0x77, 0x49, 0x4b, 0x72, 0x20, 0x20, 0x08, 0x10, 0x40, 0x3d, 0xb9, 0x07, 0x17, 0xa8, 0x0e, 0x85, 0x52, 0xf8, 0xa6, 0x5e, 0x7a, 0xf1, 0xa5, 0x3a, 0x18, 0xed, 0xad, 0x05, 0x5a, 0x14, 0x41, 0xd1, 0x43, 0x51, 0xf4, 0x52, 0xf4, 0x4a, 0xef, 0xc9, 0xa8, 0x11, 0x20, 0xd3, 0xf7, 0x66, 0x76, 0x97, 0xb3, 0xbb, 0xb3, 0x94, 0x03, 0x24, 0x3d, 0x69, 0x96, 0xc3, 0xf9, 0xbc, 0x79, 0x6f, 0xde, 0x7f, 0x66, 0xf7, 0xdc, 0x87, 0xcf, 0x2b, 0x9f, 0x50, 0x28, 0x83, 0x83, 0x83, 0xf7, 0x0e, 0x0e, 0x0e, 0xee, 0x61, 0x0b, 0xc3, 0x7b, 0xd4, 0xf1, 0x2b, 0xa5, 0x8f, 0xbb, 0x83, 0x83, 0xb4, 0x7b, 0x70, 0xe0, 0x74, 0x07, 0xdf, 0x77, 0xba, 0xf4, 0x9e, 0x43, 0x9d, 0x7b, 0x8e, 0xe3, 0x55, 0x86, 0x3f, 0x30, 0x30, 0x60, 0xd6, 0xeb, 0x75, 0x13, 0x5b, 0x18, 0x9a, 0x80, 0xe7, 0x55, 0xc4, 0x1f, 0x18, 0xa0, 0xdd, 0x7a, 0xdd, 0xe9, 0x0e, 0xe8, 0x80, 0x6f, 0x3a, 0x5d, 0x87, 0xd7, 0xc7, 0x8e, 0xa9, 0x50, 0x86, 0x5f, 0x2a, 0x95, 0x8e, 0x0e, 0x0f, 0x0f, 0x8f, 0xb0, 0x85, 0xe1, 0x11, 0x81, 0x0a, 0xb8, 0x47, 0x2e, 0x7e, 0xa9, 0x44, 0xbb, 0x87, 0x87, 0x4e, 0xb7, 0x74, 0x1f, 0xf0, 0x8f, 0x9c, 0x2e, 0x81, 0xea, 0x1c, 0x01, 0xfe, 0x91, 0x8b, 0x5f, 0xa9, 0x54, 0x1e, 0x9d, 0x9c, 0x9c, 0x3c, 0xc2, 0x16, 0x86, 0xac, 0x12, 0x85, 0x60, 0x8b, 0xf8, 0x95, 0x0a, 0xed, 0x9e, 0x9c, 0x38, 0xdd, 0xca, 0x43, 0xc0, 0x7f, 0x04, 0x34, 0x1f, 0x39, 0x8e, 0x02, 0x15, 0xdb, 0x0f, 0x8f, 0x8f, 0x93, 0xc7, 0x58, 0xae, 0x3d, 0x38, 0x3e, 0x2e, 0x16, 0x8f, 0xaf, 0x15, 0x8b, 0x0f, 0x70, 0x08, 0x7f, 0xd7, 0xf2, 0xc5, 0xe2, 0x05, 0x0f, 0xce, 0xe6, 0x01, 0xce, 0xd6, 0x45, 0xe0, 0x0f, 0x5c, 0x7c, 0xb7, 0x85, 0x71, 0x00, 0x7e, 0xcd, 0xa5, 0x7f, 0xcd, 0xc5, 0xbf, 0xd6, 0xc3, 0xff, 0xed, 0xc9, 0xc9, 0x8b, 0x27, 0xb7, 0x1f, 0x9e, 0x9c, 0x3c, 0xbc, 0xcd, 0x6b, 0xa5, 0xc2, 0x5a, 0x98, 0xb9, 0xbd, 0x54, 0xa9, 0x3c, 0xf7, 0x93, 0x7a, 0xfd, 0xf9, 0xfa, 0x80, 0x5e, 0xaf, 0xeb, 0x2f, 0xd5, 0xc5, 0x16, 0x7a, 0x2f, 0x5d, 0x19, 0x18, 0x38, 0xf7, 0xde, 0xc1, 0xc1, 0x0b, 0x07, 0xef, 0xa7, 0x0e, 0x58, 0x4d, 0xbd, 0x7f, 0xe0, 0xf5, 0xa1, 0x97, 0x52, 0x07, 0x07, 0xcf, 0xff, 0xfc, 0xf0, 0x30, 0x71, 0x78, 0x7f, 0xf6, 0x90, 0xd5, 0xd9, 0x12, 0x68, 0x19, 0xdb, 0xfb, 0x87, 0xf7, 0xe1, 0xff, 0x87, 0xa5, 0xd2, 0x45, 0x66, 0x6f, 0xb4, 0x3d, 0x7b, 0xfe, 0xcb, 0xfa, 0x23, 0xe0, 0x07, 0x54, 0x71, 0x50, 0xb7, 0x9f, 0xd0, 0x7b, 0x0a, 0x05, 0xdb, 0x3f, 0xbe, 0x07, 0xf6, 0x3f, 0x70, 0x2b, 0xfa, 0x83, 0xe2, 0x3c, 0xee, 0x52, 0xda, 0xed, 0x32, 0x7b, 0xa3, 0xed, 0xeb, 0x4f, 0xa0, 0xc5, 0xa7, 0x5e, 0x7f, 0x05, 0xfc, 0xc0, 0xc7, 0x37, 0x1d, 0x07, 0x6c, 0xcf, 0xaa, 0x59, 0x77, 0x28, 0xf3, 0x83, 0x81, 0x1e, 0x3e, 0xb3, 0x37, 0xda, 0xfe, 0xe9, 0xd3, 0xa7, 0x47, 0x87, 0x47, 0x47, 0xd8, 0x5f, 0x04, 0x3f, 0xf0, 0xf1, 0x8f, 0x1c, 0x07, 0x6c, 0xef, 0x3c, 0x85, 0x7a, 0x74, 0xe8, 0x50, 0xe6, 0x07, 0xa5, 0x1e, 0x3e, 0xb3, 0x35, 0xda, 0xfe, 0x04, 0xdb, 0x8f, 0x59, 0x7f, 0x0d, 0xfc, 0xc0, 0xc7, 0x7f, 0xa4, 0x50, 0xb0, 0xfd, 0xe3, 0x47, 0x60, 0xff, 0x13, 0xb7, 0xa2, 0x3f, 0x78, 0xf8, 0x0a, 0x94, 0x38, 0x1f, 0xc0, 0x79, 0x11, 0x1e, 0xf6, 0x81, 0x20, 0x3c, 0xea, 0x03, 0x01, 0xb8, 0xc4, 0x07, 0x3c, 0x78, 0x9c, 0x0f, 0xe0, 0x3c, 0xc2, 0xe3, 0x7c, 0x00, 0xe7, 0x11, 0x1e, 0xe7, 0x03, 0x38, 0x8f, 0xf0, 0x38, 0x1f, 0xc0, 0x79, 0x69, 0xfc, 0xb2, 0x52, 0x37, 0x4d, 0xfa, 0x44, 0x16, 0xbf, 0x00, 0x07, 0x7b, 0x42, 0x7d, 0x02, 0x55, 0x51, 0xae, 0x0c, 0xc0, 0x6f, 0x40, 0x01, 0xdc, 0x2b, 0x6e, 0x0d, 0x14, 0xd8, 0x1f, 0xff, 0xc0, 0x55, 0x71, 0x89, 0x57, 0xcf, 0x79, 0xf5, 0xed, 0x4a, 0xb7, 0xfb, 0xf0, 0xe3, 0xff, 0x74, 0x1f, 0x9e, 0xf0, 0x8a, 0x63, 0xb1, 0x28, 0x67, 0xe5, 0x73, 0x2d, 0xbd, 0xf8, 0xc5, 0xf6, 0x09, 0x8d, 0xc6, 0xaf, 0x82, 0x31, 0xfb, 0x18, 0x62, 0x97, 0xf9, 0x40, 0x38, 0x7e, 0x3d, 0x33, 0x7b, 0xb6, 0x67, 0x06, 0x46, 0x7f, 0x40, 0xbf, 0x60, 0xb6, 0xf7, 0x6d, 0xed, 0xda, 0xfe, 0x1c, 0xf7, 0x07, 0x77, 0xff, 0x1f, 0x14, 0xbb, 0x5d, 0x7b, 0xe7, 0xdf, 0x7e, 0xc5, 0xb1, 0x58, 0xce, 0xff, 0xf1, 0x95, 0x33, 0x23, 0x9d, 0x95, 0xb3, 0x72, 0x56, 0xe2, 0x0b, 0x15, 0xaa, 0x22, 0xb4, 0x6e, 0xc1, 0x53, 0x0a, 0x6b, 0x5c, 0x41, 0x18, 0xa5, 0x24, 0xd0, 0x06, 0xe0, 0x30, 0x47, 0x08, 0xb6, 0x30, 0x80, 0x0e, 0x0d, 0xd1, 0x07, 0x28, 0x00, 0x59, 0xc7, 0x6d, 0x48, 0x10, 0x9f, 0xa3, 0x29, 0x0e, 0xfc, 0x11, 0x87, 0xb7, 0x21, 0x02, 0x8a, 0xd3, 0x4f, 0x3e, 0x97, 0xb6, 0x5f, 0x9d, 0x28, 0x58, 0x84, 0x47, 0x68, 0x11, 0xdc, 0x9f, 0x30, 0xfe, 0xb1, 0x0d, 0xb1, 0xd7, 0xe3, 0x81, 0x2a, 0x72, 0x98, 0xb8, 0x17, 0x89, 0xe7, 0xd7, 0xa1, 0xa7, 0x9b, 0xca, 0x21, 0x2e, 0x0d, 0x99, 0x02, 0x7a, 0x4d, 0x84, 0x2e, 0x05, 0x24, 0x8a, 0xba, 0x57, 0x48, 0x74, 0x1f, 0xea, 0xee, 0x4d, 0xbd, 0x7e, 0x90, 0x02, 0xb3, 0x97, 0xc3, 0xf1, 0xd8, 0x92, 0x08, 0xdc, 0x65, 0x0a, 0xf5, 0xe3, 0xc4, 0xd3, 0xa7, 0x8e, 0xb7, 0x56, 0x89, 0xe0, 0x53, 0x61, 0x9f, 0xb0, 0x7f, 0xf4, 0xf6, 0x55, 0xa4, 0xfc, 0x8b, 0xfb, 0Line truncated
|
0x78, 0xda, 0xed, 0x5b, 0x4d, 0x6c, 0x24, 0x47, 0x15, 0xee, 0xcd, 0x0f, 0xe0, 0xc9, 0xb2, 0x15, 0x4b, 0x28, 0xe2, 0x3f, 0x2d, 0x93, 0xc4, 0x33, 0xf6, 0xcc, 0x78, 0x3c, 0x6d, 0x9b, 0x65, 0x97, 0xc6, 0x78, 0x3d, 0xb3, 0xb6, 0x61, 0xd7, 0x5e, 0x6c, 0xcf, 0x2e, 0xd1, 0x0a, 0x4c, 0x7b, 0xa6, 0xc7, 0x1e, 0x31, 0x9e, 0x36, 0xdd, 0x33, 0x6b, 0x3b, 0xd1, 0x4a, 0x21, 0x10, 0xc9, 0x9c, 0x96, 0x9f, 0x8d, 0x84, 0x0f, 0xc8, 0x09, 0xb9, 0x2d, 0x17, 0x7e, 0xb4, 0x17, 0x7c, 0x58, 0xc1, 0x0d, 0x24, 0x10, 0x42, 0x88, 0x03, 0x42, 0x5c, 0x10, 0xd7, 0xd9, 0x96, 0x2c, 0x45, 0x44, 0x48, 0x69, 0xde, 0xab, 0xae, 0xee, 0xa9, 0xee, 0xae, 0x6e, 0x6f, 0x20, 0x41, 0x71, 0x70, 0xb5, 0x6b, 0xaa, 0xab, 0x5e, 0xbd, 0xd7, 0xf5, 0xde, 0xf7, 0xde, 0xab, 0xea, 0x96, 0x7c, 0xea, 0x85, 0x27, 0xa4, 0x37, 0x1d, 0x28, 0x03, 0x03, 0x03, 0xb7, 0x76, 0x77, 0x77, 0x6f, 0x61, 0x0b, 0xdd, 0x5b, 0x8e, 0xed, 0x57, 0xc7, 0xb9, 0xdf, 0x1d, 0x18, 0x70, 0xba, 0xbb, 0xbb, 0x76, 0x77, 0xe0, 0x45, 0xbb, 0xeb, 0xdc, 0xb2, 0x1d, 0xfb, 0x96, 0x6d, 0x7b, 0x95, 0xf2, 0xf7, 0xf7, 0xf7, 0x1b, 0xf5, 0x7a, 0xdd, 0xc0, 0x16, 0xba, 0x06, 0xf0, 0x79, 0x15, 0xf9, 0xfb, 0xfb, 0x9d, 0x6e, 0xbd, 0x6e, 0x77, 0xfb, 0x35, 0xe0, 0x37, 0xec, 0xae, 0xed, 0xd6, 0xfb, 0xb6, 0x21, 0x39, 0x94, 0xbf, 0x54, 0x2a, 0xed, 0xef, 0xed, 0xed, 0xed, 0x63, 0x0b, 0xdd, 0x7d, 0x02, 0x15, 0x78, 0xf7, 0x19, 0x7f, 0xa9, 0xe4, 0x74, 0xf7, 0xf6, 0xec, 0x6e, 0xe9, 0x36, 0xf0, 0xef, 0xdb, 0x5d, 0x02, 0xd5, 0xde, 0x07, 0xfe, 0x7d, 0xc6, 0x5f, 0xa9, 0x54, 0xee, 0x1d, 0x1c, 0x1c, 0xdc, 0xc3, 0x16, 0xba, 0xb4, 0x12, 0x89, 0x60, 0x8b, 0xfc, 0x95, 0x8a, 0xd3, 0x3d, 0x38, 0xb0, 0xbb, 0x95, 0xbb, 0xc0, 0x7f, 0x0f, 0x64, 0xde, 0xb3, 0x6d, 0x09, 0x2a, 0xb6, 0xaf, 0xdc, 0xb9, 0x93, 0xba, 0x83, 0xe5, 0xdc, 0x6b, 0x77, 0xee, 0x28, 0xca, 0x9d, 0x73, 0x8a, 0xf2, 0x1a, 0x76, 0xe1, 0xe7, 0x5c, 0x41, 0x51, 0x1e, 0xf6, 0xe8, 0x74, 0x1c, 0xe8, 0x74, 0x5e, 0x84, 0xfe, 0x1a, 0xe3, 0x67, 0x2d, 0xf4, 0x03, 0xf4, 0x73, 0x4c, 0xfe, 0x39, 0xc6, 0x7f, 0xae, 0xc7, 0xff, 0xd3, 0x83, 0x83, 0xc7, 0x0e, 0xae, 0xdf, 0x3d, 0x38, 0xb8, 0x7b, 0xdd, 0xad, 0x95, 0x0a, 0x6d, 0x61, 0xe4, 0xfa, 0x95, 0x4a, 0xe5, 0xd1, 0xaf, 0xd5, 0xeb, 0xef, 0xab, 0xf7, 0x6b, 0xf5, 0xba, 0xf6, 0x44, 0x9d, 0x6f, 0xe1, 0xee, 0x89, 0xc7, 0xfb, 0xfb, 0x4f, 0xbd, 0xb0, 0xbb, 0xfb, 0x81, 0xdd, 0x17, 0xd3, 0xbb, 0xb4, 0xa6, 0x5f, 0xdc, 0xf5, 0xee, 0xe1, 0x2e, 0x2d, 0x0f, 0x0c, 0x3c, 0xf4, 0xdd, 0xbd, 0xbd, 0xbe, 0xbd, 0xdb, 0x73, 0x7b, 0xb4, 0xce, 0x95, 0xc0, 0xca, 0xd8, 0xde, 0xde, 0xbb, 0x0d, 0xbf, 0x9f, 0x2f, 0x95, 0x1e, 0xa1, 0x78, 0x23, 0xf6, 0xf4, 0xfa, 0x27, 0xbd, 0x1f, 0x01, 0x3f, 0x70, 0x24, 0x1b, 0x6d, 0xfb, 0xa6, 0x73, 0x4b, 0x72, 0x00, 0xfb, 0xfb, 0xb7, 0x00, 0xff, 0x5d, 0x56, 0xd1, 0x1f, 0x24, 0xfb, 0x7e, 0xd7, 0x71, 0xba, 0x5d, 0x8a, 0x37, 0x62, 0x5f, 0x7f, 0x1d, 0x5a, 0xbc, 0xea, 0xf5, 0x27, 0xc1, 0x0f, 0x7c, 0x7e, 0xc3, 0xb6, 0x01, 0x7b, 0x5a, 0x8d, 0xba, 0xed, 0x50, 0x3f, 0xe8, 0xef, 0xf1, 0x53, 0xbc, 0x11, 0xfb, 0x37, 0xde, 0x78, 0x63, 0x7f, 0x6f, 0x7f, 0x1f, 0xef, 0x17, 0xc0, 0x0f, 0x7c, 0xfe, 0x7d, 0xdb, 0x06, 0xec, 0xed, 0x37, 0xa0, 0xee, 0xef, 0xd9, 0x0e, 0xf5, 0x83, 0x52, 0x8f, 0x9f, 0x62, 0x8d, 0xd8, 0x1f, 0x60, 0xfb, 0x2f, 0x7a, 0xbf, 0x02, 0x7e, 0xe0, 0xf3, 0xdf, 0x93, 0x1c, 0xc0, 0xfe, 0xfe, 0x3d, 0xc0, 0xff, 0x80, 0x55, 0xf4, 0x07, 0x8f, 0x5f, 0x82, 0x12, 0xe7, 0x03, 0x38, 0xce, 0xd3, 0xc3, 0x3e, 0x10, 0xa4, 0x47, 0x7d, 0x20, 0x40, 0x17, 0xf8, 0x80, 0x47, 0x8f, 0xf3, 0x01, 0x1c, 0x47, 0x7a, 0x9c, 0x0f, 0xe0, 0x38, 0xd2, 0xe3, 0x7c, 0x00, 0xc7, 0x91, 0x1e, 0xe7, 0x03, 0x38, 0x2e, 0x8c, 0x5f, 0x5a, 0xea, 0x86, 0xe1, 0xbc, 0x2e, 0x8a, 0x5f, 0xa0, 0x03, 0x9e, 0x50, 0x5f, 0x87, 0x2a, 0x49, 0x8f, 0xf7, 0xc3, 0x5f, 0xbf, 0x04, 0xbc, 0x8f, 0xb3, 0x1a, 0x28, 0xf0, 0x7c, 0xfc, 0x01, 0x57, 0xc5, 0x29, 0x5e, 0x3d, 0xe5, 0xd5, 0xaf, 0x56, 0xba, 0xdd, 0xbb, 0xff, 0xfa, 0x47, 0xf7, 0xee, 0x81, 0x5b, 0xb1, 0xcf, 0x17, 0x1a, 0xc2, 0x8a, 0xa2, 0x4c, 0x42, 0x23, 0xaa, 0x8c, 0x8c, 0xcd, 0x61, 0x4c, 0x4d, 0x2c, 0xd2, 0x11, 0x85, 0xc9, 0x57, 0x9c, 0x07, 0x28, 0xa2, 0x79, 0x93, 0x47, 0xd4, 0x84, 0x75, 0xd3, 0x2a, 0xbd, 0xc3, 0xa5, 0x17, 0xbf, 0xd8, 0xbe, 0xee, 0x44, 0xe3, 0x57, 0xc2, 0x98, 0xbd, 0x0f, 0xb1, 0x4b, 0x7d, 0x20, 0x1c, 0xbf, 0x1e, 0xcc, 0x1e, 0xf6, 0x14, 0x60, 0xf4, 0x07, 0xf4, 0x0b, 0x8a, 0xbd, 0x8f, 0x35, 0xc3, 0xfe, 0x94, 0xeb, 0x0f, 0xec, 0xf9, 0x9f, 0x53, 0xba, 0x5d, 0x6b, 0xeb, 0xef, 0x7e, 0xc5, 0x3e, 0x5f, 0x02, 0xf6, 0x02, 0x8b, 0x4c, 0xa2, 0x2f, 0xa0, 0x9d, 0x7b, 0xb6, 0xe6, 0xec, 0x35, 0x79, 0x08, 0xc3, 0x5e, 0x75, 0xed, 0x2f, 0xe6, 0xe1, 0x11, 0x8a, 0xf0, 0x1c, 0x85, 0xb1, 0x57, 0x1e, 0xc4, 0x17, 0xa4, 0x77, 0x79, 0x89, 0x89, 0xaf, 0x49, 0xa8, 0x30, 0x36, 0xa9, 0x88, 0xe2, 0x0b, 0x7e, 0x0e, 0x15, 0xac, 0x87, 0x2c, 0xbe, 0x22, 0xfc, 0x93, 0x8a, 0x5b, 0x1d, 0x21, 0x3f, 0xf2, 0xd1, 0x2a, 0x88, 0x4f, 0x1c, 0x50, 0x58, 0x9d, 0x14, 0x18, 0x55, 0x14, 0xff, 0x4e, 0x42, 0x1e, 0xe0, 0x7d, 0x47, 0x8c, 0x7f, 0xc0, 0x77, 0xde, 0x72, 0x7e, 0x38, 0xee, 0x85, 0xe1, 0x14, 0x1b, 0x5f, 0x0c, 0xe3, 0xf8, 0xf8, 0x72, 0x7d, 0x25, 0x96, 0xff, 0xf0, 0x88, 0xf8, 0x8c, 0Line truncated
|
||||||
BIN
Binary file not shown.
@@ -0,0 +1,72 @@
|
|||||||
|
{"ESC", 0*8+3, 0*8+3, true},
|
||||||
|
|
||||||
|
{"F1", 2*8+4, 0*8+3, true},
|
||||||
|
{"F2", 4*8+4, 0*8+3, true},
|
||||||
|
{"F3", 6*8+4, 0*8+3, true},
|
||||||
|
{"F4", 8*8+4, 0*8+3, true},
|
||||||
|
{"F5", 10*8+4, 0*8+3, true},
|
||||||
|
{"F6", 12*8+4, 0*8+3, true},
|
||||||
|
{"F7", 14*8+4, 0*8+3, true},
|
||||||
|
{"F8", 16*8+4, 0*8+3, true},
|
||||||
|
{"F9", 18*8+4, 0*8+3, true},
|
||||||
|
{"F10", 20*8+3, 0*8+3, true},
|
||||||
|
|
||||||
|
{"TAB", 0*8+3, 2*8+4, true},
|
||||||
|
{"`", 2*8+3, 2*8+3, false, "~"},
|
||||||
|
{"[", 4*8+3, 2*8+3, false, "{"},
|
||||||
|
{"]", 6*8+3, 2*8+3, false, "}"},
|
||||||
|
{";", 8*8+3, 2*8+3, false, ":"},
|
||||||
|
{"'", 10*8+3, 2*8+3, false, "\""},
|
||||||
|
{"-", 12*8+3, 2*8+3, false, "_"},
|
||||||
|
{"=", 14*8+3, 2*8+3, false, "+"},
|
||||||
|
{"/", 16*8+3, 2*8+3, false, "?"},
|
||||||
|
{"F11", 18*8+3, 2*8+3, true},
|
||||||
|
{"F12", 20*8+3, 2*8+3, true},
|
||||||
|
|
||||||
|
{"1", 0*8+3, 4*8+3, false, "!"},
|
||||||
|
{"2", 2*8+3, 4*8+3, false, "@"},
|
||||||
|
{"3", 4*8+3, 4*8+3, false, "#"},
|
||||||
|
{"4", 6*8+3, 4*8+3, false, "$"},
|
||||||
|
{"5", 8*8+3, 4*8+3, false, "%"},
|
||||||
|
{"6", 10*8+3, 4*8+3, false, "^"},
|
||||||
|
{"7", 12*8+3, 4*8+3, false, "&"},
|
||||||
|
{"8", 14*8+3, 4*8+3, false, "*"},
|
||||||
|
{"9", 16*8+3, 4*8+3, false, "("},
|
||||||
|
{"0", 18*8+3, 4*8+3, false, ")"},
|
||||||
|
{"BAC", 20*8+3, 4*8+4, true},
|
||||||
|
|
||||||
|
{"Q", 0*8+3, 6*8+3},
|
||||||
|
{"W", 2*8+3, 6*8+3},
|
||||||
|
{"E", 4*8+3, 6*8+3},
|
||||||
|
{"R", 6*8+3, 6*8+3},
|
||||||
|
{"T", 8*8+3, 6*8+3},
|
||||||
|
{"Y", 10*8+3, 6*8+3},
|
||||||
|
{"U", 12*8+3, 6*8+3},
|
||||||
|
{"I", 14*8+3, 6*8+3},
|
||||||
|
{"O", 16*8+3, 6*8+3},
|
||||||
|
{"P", 18*8+3, 6*8+3},
|
||||||
|
{"\\", 20*8+3, 6*8+3, false, "|"},
|
||||||
|
|
||||||
|
{"A", 1*8+3, 8*8+3},
|
||||||
|
{"S", 3*8+3, 8*8+3},
|
||||||
|
{"D", 5*8+3, 8*8+3},
|
||||||
|
{"F", 7*8+3, 8*8+3},
|
||||||
|
{"G", 9*8+3, 8*8+3},
|
||||||
|
{"H", 11*8+3, 8*8+3},
|
||||||
|
{"J", 13*8+3, 8*8+3},
|
||||||
|
{"K", 15*8+3, 8*8+3},
|
||||||
|
{"L", 17*8+3, 8*8+3},
|
||||||
|
{"ENTER", 19*8+3, 8*8+4, true},
|
||||||
|
|
||||||
|
{"Z", 2*8+3, 10*8+3},
|
||||||
|
{"X", 4*8+3, 10*8+3},
|
||||||
|
{"C", 6*8+3, 10*8+3},
|
||||||
|
{"V", 8*8+3, 10*8+3},
|
||||||
|
{"B", 10*8+3, 10*8+3},
|
||||||
|
{"N", 12*8+3, 10*8+3},
|
||||||
|
{"M", 14*8+3, 10*8+3},
|
||||||
|
{",", 16*8+3, 10*8+3, false, "<"},
|
||||||
|
{".", 18*8+3, 10*8+3, false, ">"},
|
||||||
|
|
||||||
|
{"CTRL", 0*8+5, 12*8+4, true},
|
||||||
|
{"ALT", 3*8+6, 12*8+4, true},
|
||||||
@@ -0,0 +1,407 @@
|
|||||||
|
//0
|
||||||
|
tic_key_escape,
|
||||||
|
tic_key_escape,
|
||||||
|
tic_key_f1,
|
||||||
|
tic_key_f1,
|
||||||
|
tic_key_f2,
|
||||||
|
tic_key_f2,
|
||||||
|
tic_key_f3,
|
||||||
|
tic_key_f3,
|
||||||
|
tic_key_f4,
|
||||||
|
tic_key_f4,
|
||||||
|
tic_key_f5,
|
||||||
|
tic_key_f5,
|
||||||
|
tic_key_f6,
|
||||||
|
tic_key_f6,
|
||||||
|
tic_key_f7,
|
||||||
|
tic_key_f7,
|
||||||
|
tic_key_f8,
|
||||||
|
tic_key_f8,
|
||||||
|
tic_key_f9,
|
||||||
|
tic_key_f9,
|
||||||
|
tic_key_f10,
|
||||||
|
tic_key_f10,
|
||||||
|
|
||||||
|
//1
|
||||||
|
tic_key_escape,
|
||||||
|
tic_key_escape,
|
||||||
|
tic_key_f1,
|
||||||
|
tic_key_f1,
|
||||||
|
tic_key_f2,
|
||||||
|
tic_key_f2,
|
||||||
|
tic_key_f3,
|
||||||
|
tic_key_f3,
|
||||||
|
tic_key_f4,
|
||||||
|
tic_key_f4,
|
||||||
|
tic_key_f5,
|
||||||
|
tic_key_f5,
|
||||||
|
tic_key_f6,
|
||||||
|
tic_key_f6,
|
||||||
|
tic_key_f7,
|
||||||
|
tic_key_f7,
|
||||||
|
tic_key_f8,
|
||||||
|
tic_key_f8,
|
||||||
|
tic_key_f9,
|
||||||
|
tic_key_f9,
|
||||||
|
tic_key_f10,
|
||||||
|
tic_key_f10,
|
||||||
|
|
||||||
|
//2
|
||||||
|
tic_key_tab,
|
||||||
|
tic_key_tab,
|
||||||
|
tic_key_grave,
|
||||||
|
tic_key_grave,
|
||||||
|
tic_key_leftbracket,
|
||||||
|
tic_key_leftbracket,
|
||||||
|
tic_key_rightbracket,
|
||||||
|
tic_key_rightbracket,
|
||||||
|
tic_key_semicolon,
|
||||||
|
tic_key_semicolon,
|
||||||
|
tic_key_apostrophe,
|
||||||
|
tic_key_apostrophe,
|
||||||
|
tic_key_minus,
|
||||||
|
tic_key_minus,
|
||||||
|
tic_key_equals,
|
||||||
|
tic_key_equals,
|
||||||
|
tic_key_slash,
|
||||||
|
tic_key_slash,
|
||||||
|
tic_key_f11,
|
||||||
|
tic_key_f11,
|
||||||
|
tic_key_f12,
|
||||||
|
tic_key_f12,
|
||||||
|
|
||||||
|
//3
|
||||||
|
tic_key_tab,
|
||||||
|
tic_key_tab,
|
||||||
|
tic_key_grave,
|
||||||
|
tic_key_grave,
|
||||||
|
tic_key_leftbracket,
|
||||||
|
tic_key_leftbracket,
|
||||||
|
tic_key_rightbracket,
|
||||||
|
tic_key_rightbracket,
|
||||||
|
tic_key_semicolon,
|
||||||
|
tic_key_semicolon,
|
||||||
|
tic_key_apostrophe,
|
||||||
|
tic_key_apostrophe,
|
||||||
|
tic_key_minus,
|
||||||
|
tic_key_minus,
|
||||||
|
tic_key_equals,
|
||||||
|
tic_key_equals,
|
||||||
|
tic_key_slash,
|
||||||
|
tic_key_slash,
|
||||||
|
tic_key_f11,
|
||||||
|
tic_key_f11,
|
||||||
|
tic_key_f12,
|
||||||
|
tic_key_f12,
|
||||||
|
|
||||||
|
//4
|
||||||
|
tic_key_1,
|
||||||
|
tic_key_1,
|
||||||
|
tic_key_2,
|
||||||
|
tic_key_2,
|
||||||
|
tic_key_3,
|
||||||
|
tic_key_3,
|
||||||
|
tic_key_4,
|
||||||
|
tic_key_4,
|
||||||
|
tic_key_5,
|
||||||
|
tic_key_5,
|
||||||
|
tic_key_6,
|
||||||
|
tic_key_6,
|
||||||
|
tic_key_7,
|
||||||
|
tic_key_7,
|
||||||
|
tic_key_8,
|
||||||
|
tic_key_8,
|
||||||
|
tic_key_9,
|
||||||
|
tic_key_9,
|
||||||
|
tic_key_0,
|
||||||
|
tic_key_0,
|
||||||
|
tic_key_backspace,
|
||||||
|
tic_key_backspace,
|
||||||
|
|
||||||
|
//5
|
||||||
|
tic_key_1,
|
||||||
|
tic_key_1,
|
||||||
|
tic_key_2,
|
||||||
|
tic_key_2,
|
||||||
|
tic_key_3,
|
||||||
|
tic_key_3,
|
||||||
|
tic_key_4,
|
||||||
|
tic_key_4,
|
||||||
|
tic_key_5,
|
||||||
|
tic_key_5,
|
||||||
|
tic_key_6,
|
||||||
|
tic_key_6,
|
||||||
|
tic_key_7,
|
||||||
|
tic_key_7,
|
||||||
|
tic_key_8,
|
||||||
|
tic_key_8,
|
||||||
|
tic_key_9,
|
||||||
|
tic_key_9,
|
||||||
|
tic_key_0,
|
||||||
|
tic_key_0,
|
||||||
|
tic_key_backspace,
|
||||||
|
tic_key_backspace,
|
||||||
|
|
||||||
|
//6
|
||||||
|
tic_key_q,
|
||||||
|
tic_key_q,
|
||||||
|
tic_key_w,
|
||||||
|
tic_key_w,
|
||||||
|
tic_key_e,
|
||||||
|
tic_key_e,
|
||||||
|
tic_key_r,
|
||||||
|
tic_key_r,
|
||||||
|
tic_key_t,
|
||||||
|
tic_key_t,
|
||||||
|
tic_key_y,
|
||||||
|
tic_key_y,
|
||||||
|
tic_key_u,
|
||||||
|
tic_key_u,
|
||||||
|
tic_key_i,
|
||||||
|
tic_key_i,
|
||||||
|
tic_key_o,
|
||||||
|
tic_key_o,
|
||||||
|
tic_key_p,
|
||||||
|
tic_key_p,
|
||||||
|
tic_key_backslash,
|
||||||
|
tic_key_backslash,
|
||||||
|
|
||||||
|
//7
|
||||||
|
tic_key_q,
|
||||||
|
tic_key_q,
|
||||||
|
tic_key_w,
|
||||||
|
tic_key_w,
|
||||||
|
tic_key_e,
|
||||||
|
tic_key_e,
|
||||||
|
tic_key_r,
|
||||||
|
tic_key_r,
|
||||||
|
tic_key_t,
|
||||||
|
tic_key_t,
|
||||||
|
tic_key_y,
|
||||||
|
tic_key_y,
|
||||||
|
tic_key_u,
|
||||||
|
tic_key_u,
|
||||||
|
tic_key_i,
|
||||||
|
tic_key_i,
|
||||||
|
tic_key_o,
|
||||||
|
tic_key_o,
|
||||||
|
tic_key_p,
|
||||||
|
tic_key_p,
|
||||||
|
tic_key_backslash,
|
||||||
|
tic_key_backslash,
|
||||||
|
|
||||||
|
//8
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_a,
|
||||||
|
tic_key_a,
|
||||||
|
tic_key_s,
|
||||||
|
tic_key_s,
|
||||||
|
tic_key_d,
|
||||||
|
tic_key_d,
|
||||||
|
tic_key_f,
|
||||||
|
tic_key_f,
|
||||||
|
tic_key_g,
|
||||||
|
tic_key_g,
|
||||||
|
tic_key_h,
|
||||||
|
tic_key_h,
|
||||||
|
tic_key_j,
|
||||||
|
tic_key_j,
|
||||||
|
tic_key_k,
|
||||||
|
tic_key_k,
|
||||||
|
tic_key_l,
|
||||||
|
tic_key_l,
|
||||||
|
tic_key_return,
|
||||||
|
tic_key_return,
|
||||||
|
tic_key_return,
|
||||||
|
|
||||||
|
//9
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_a,
|
||||||
|
tic_key_a,
|
||||||
|
tic_key_s,
|
||||||
|
tic_key_s,
|
||||||
|
tic_key_d,
|
||||||
|
tic_key_d,
|
||||||
|
tic_key_f,
|
||||||
|
tic_key_f,
|
||||||
|
tic_key_g,
|
||||||
|
tic_key_g,
|
||||||
|
tic_key_h,
|
||||||
|
tic_key_h,
|
||||||
|
tic_key_j,
|
||||||
|
tic_key_j,
|
||||||
|
tic_key_k,
|
||||||
|
tic_key_k,
|
||||||
|
tic_key_l,
|
||||||
|
tic_key_l,
|
||||||
|
tic_key_return,
|
||||||
|
tic_key_return,
|
||||||
|
tic_key_return,
|
||||||
|
|
||||||
|
//10
|
||||||
|
tic_key_shift,
|
||||||
|
tic_key_shift,
|
||||||
|
tic_key_z,
|
||||||
|
tic_key_z,
|
||||||
|
tic_key_x,
|
||||||
|
tic_key_x,
|
||||||
|
tic_key_c,
|
||||||
|
tic_key_c,
|
||||||
|
tic_key_v,
|
||||||
|
tic_key_v,
|
||||||
|
tic_key_b,
|
||||||
|
tic_key_b,
|
||||||
|
tic_key_n,
|
||||||
|
tic_key_n,
|
||||||
|
tic_key_m,
|
||||||
|
tic_key_m,
|
||||||
|
tic_key_comma,
|
||||||
|
tic_key_comma,
|
||||||
|
tic_key_period,
|
||||||
|
tic_key_period,
|
||||||
|
tic_key_return,
|
||||||
|
tic_key_return,
|
||||||
|
|
||||||
|
//11
|
||||||
|
tic_key_shift,
|
||||||
|
tic_key_shift,
|
||||||
|
tic_key_z,
|
||||||
|
tic_key_z,
|
||||||
|
tic_key_x,
|
||||||
|
tic_key_x,
|
||||||
|
tic_key_c,
|
||||||
|
tic_key_c,
|
||||||
|
tic_key_v,
|
||||||
|
tic_key_v,
|
||||||
|
tic_key_b,
|
||||||
|
tic_key_b,
|
||||||
|
tic_key_n,
|
||||||
|
tic_key_n,
|
||||||
|
tic_key_m,
|
||||||
|
tic_key_m,
|
||||||
|
tic_key_comma,
|
||||||
|
tic_key_comma,
|
||||||
|
tic_key_period,
|
||||||
|
tic_key_period,
|
||||||
|
tic_key_return,
|
||||||
|
tic_key_return,
|
||||||
|
|
||||||
|
//12
|
||||||
|
tic_key_ctrl,
|
||||||
|
tic_key_ctrl,
|
||||||
|
tic_key_ctrl,
|
||||||
|
tic_key_alt,
|
||||||
|
tic_key_alt,
|
||||||
|
tic_key_alt,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
|
||||||
|
//13
|
||||||
|
tic_key_ctrl,
|
||||||
|
tic_key_ctrl,
|
||||||
|
tic_key_ctrl,
|
||||||
|
tic_key_alt,
|
||||||
|
tic_key_alt,
|
||||||
|
tic_key_alt,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_space,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_up,
|
||||||
|
tic_key_up,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
|
||||||
|
//14
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_up,
|
||||||
|
tic_key_up,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
|
||||||
|
//15
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_left,
|
||||||
|
tic_key_left,
|
||||||
|
tic_key_down,
|
||||||
|
tic_key_down,
|
||||||
|
tic_key_right,
|
||||||
|
tic_key_right,
|
||||||
|
|
||||||
|
//16
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_unknown,
|
||||||
|
tic_key_left,
|
||||||
|
tic_key_left,
|
||||||
|
tic_key_down,
|
||||||
|
tic_key_down,
|
||||||
|
tic_key_right,
|
||||||
|
tic_key_right,
|
||||||
File renamed without changes.
@@ -526,6 +526,13 @@ const StudioConfig* getConfig()
|
|||||||
return &impl.config->data;
|
return &impl.config->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isGamepadMode()
|
||||||
|
{
|
||||||
|
return impl.mode == TIC_RUN_MODE
|
||||||
|
|| impl.mode == TIC_SURF_MODE
|
||||||
|
|| impl.mode == TIC_MENU_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined (TIC80_PRO)
|
#if defined (TIC80_PRO)
|
||||||
|
|
||||||
static void drawBankIcon(s32 x, s32 y)
|
static void drawBankIcon(s32 x, s32 y)
|
||||||
@@ -1873,6 +1880,7 @@ Studio* studioInit(s32 argc, char **argv, s32 samplerate, const char* folder, Sy
|
|||||||
impl.studio.updateProject = updateStudioProject;
|
impl.studio.updateProject = updateStudioProject;
|
||||||
impl.studio.exit = exitStudio;
|
impl.studio.exit = exitStudio;
|
||||||
impl.studio.config = getConfig;
|
impl.studio.config = getConfig;
|
||||||
|
impl.studio.isGamepadMode = isGamepadMode;
|
||||||
|
|
||||||
return &impl.studio;
|
return &impl.studio;
|
||||||
}
|
}
|
||||||
|
|||||||
+232
-44
@@ -17,6 +17,9 @@
|
|||||||
#define OFFSET_LEFT ((TIC80_FULLWIDTH-TIC80_WIDTH)/2)
|
#define OFFSET_LEFT ((TIC80_FULLWIDTH-TIC80_WIDTH)/2)
|
||||||
#define OFFSET_TOP ((TIC80_FULLHEIGHT-TIC80_HEIGHT)/2)
|
#define OFFSET_TOP ((TIC80_FULLHEIGHT-TIC80_HEIGHT)/2)
|
||||||
|
|
||||||
|
#define KBD_COLS 22
|
||||||
|
#define KBD_ROWS 17
|
||||||
|
|
||||||
static struct
|
static struct
|
||||||
{
|
{
|
||||||
Studio* studio;
|
Studio* studio;
|
||||||
@@ -39,10 +42,6 @@ static struct
|
|||||||
tic80_gamepads touch;
|
tic80_gamepads touch;
|
||||||
tic80_gamepads joystick;
|
tic80_gamepads joystick;
|
||||||
|
|
||||||
bool show;
|
|
||||||
s32 counter;
|
|
||||||
s32 alpha;
|
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
s32 size;
|
s32 size;
|
||||||
@@ -54,6 +53,18 @@ static struct
|
|||||||
} part;
|
} part;
|
||||||
} gamepad;
|
} gamepad;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
GPU_Image* up;
|
||||||
|
GPU_Image* down;
|
||||||
|
} texture;
|
||||||
|
|
||||||
|
} keyboard;
|
||||||
|
|
||||||
|
u32 touchCounter;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
GPU_Image* texture;
|
GPU_Image* texture;
|
||||||
@@ -162,15 +173,89 @@ static void updateGamepadParts()
|
|||||||
platform.gamepad.part.y = (SDL_Point){rect.w - 2*tileSize, 0*tileSize + offset};
|
platform.gamepad.part.y = (SDL_Point){rect.w - 2*tileSize, 0*tileSize + offset};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void drawKeyboardLabels(s32 shift)
|
||||||
|
{
|
||||||
|
tic_mem* tic = platform.studio->tic;
|
||||||
|
|
||||||
|
typedef struct {const char* text; s32 x; s32 y; bool alt; const char* shift;} Label;
|
||||||
|
static const Label Labels[] =
|
||||||
|
{
|
||||||
|
#include "kbdlabels.inl"
|
||||||
|
};
|
||||||
|
|
||||||
|
for(s32 i = 0; i < COUNT_OF(Labels); i++)
|
||||||
|
{
|
||||||
|
const Label* label = Labels + i;
|
||||||
|
if(label->text)
|
||||||
|
tic->api.text(tic, label->text, label->x, label->y + shift, tic_color_dark_gray, label->alt);
|
||||||
|
|
||||||
|
if(label->shift)
|
||||||
|
tic->api.fixed_text(tic, label->shift, label->x + 6, label->y + shift + 2, tic_color_light_blue, label->alt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void initTouchKeyboard()
|
||||||
|
{
|
||||||
|
tic_mem* tic = platform.studio->tic;
|
||||||
|
|
||||||
|
enum{Cols=KBD_COLS, Rows=KBD_ROWS};
|
||||||
|
|
||||||
|
// TODO: add touch keyboard to one texture with gamepad (and mouse cursor???)
|
||||||
|
if(!platform.keyboard.texture.up)
|
||||||
|
{
|
||||||
|
platform.keyboard.texture.up = GPU_CreateImage(TIC80_FULLWIDTH, TIC80_FULLHEIGHT, STUDIO_PIXEL_FORMAT);
|
||||||
|
GPU_SetAnchor(platform.keyboard.texture.up, 0, 0);
|
||||||
|
GPU_SetImageFilter(platform.keyboard.texture.up, GPU_FILTER_NEAREST);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
memcpy(tic->ram.vram.palette.data, platform.studio->config()->cart->bank0.palette.data, sizeof(tic_palette));
|
||||||
|
|
||||||
|
tic->api.clear(tic, 0);
|
||||||
|
tic->api.map(tic, &platform.studio->config()->cart->bank0.map,
|
||||||
|
&platform.studio->config()->cart->bank0.tiles, 8, 0, Cols, Rows, 0, 0, -1, 1);
|
||||||
|
|
||||||
|
drawKeyboardLabels(0);
|
||||||
|
|
||||||
|
tic->api.blit(tic, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
GPU_UpdateImageBytes(platform.keyboard.texture.up, NULL, (const u8*)tic->screen, TIC80_FULLWIDTH * sizeof(u32));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!platform.keyboard.texture.down)
|
||||||
|
{
|
||||||
|
platform.keyboard.texture.down = GPU_CreateImage(TIC80_FULLWIDTH, TIC80_FULLHEIGHT, STUDIO_PIXEL_FORMAT);
|
||||||
|
GPU_SetAnchor(platform.keyboard.texture.down, 0, 0);
|
||||||
|
GPU_SetImageFilter(platform.keyboard.texture.down, GPU_FILTER_NEAREST);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
memcpy(tic->ram.vram.palette.data, platform.studio->config()->cart->bank0.palette.data, sizeof(tic_palette));
|
||||||
|
|
||||||
|
tic->api.map(tic, &platform.studio->config()->cart->bank0.map,
|
||||||
|
&platform.studio->config()->cart->bank0.tiles, TIC_MAP_SCREEN_WIDTH+8, 0, Cols, Rows, 0, 0, -1, 1);
|
||||||
|
|
||||||
|
drawKeyboardLabels(2);
|
||||||
|
|
||||||
|
tic->api.blit(tic, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
GPU_UpdateImageBytes(platform.keyboard.texture.down, NULL, (const u8*)tic->screen, TIC80_FULLWIDTH * sizeof(u32));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void initTouchGamepad()
|
static void initTouchGamepad()
|
||||||
{
|
{
|
||||||
platform.studio->tic->api.map(platform.studio->tic, &platform.studio->config()->cart->bank0.map, &platform.studio->config()->cart->bank0.tiles, 0, 0, TIC_MAP_SCREEN_WIDTH, TIC_MAP_SCREEN_HEIGHT, 0, 0, -1, 1);
|
platform.studio->tic->api.map(platform.studio->tic, &platform.studio->config()->cart->bank0.map,
|
||||||
|
&platform.studio->config()->cart->bank0.tiles, 0, 0, TIC_MAP_SCREEN_WIDTH, TIC_MAP_SCREEN_HEIGHT, 0, 0, -1, 1);
|
||||||
|
|
||||||
if(!platform.gamepad.texture)
|
if(!platform.gamepad.texture)
|
||||||
{
|
{
|
||||||
platform.gamepad.texture = GPU_CreateImage(TEXTURE_SIZE, TEXTURE_SIZE, STUDIO_PIXEL_FORMAT);
|
platform.gamepad.texture = GPU_CreateImage(TEXTURE_SIZE, TEXTURE_SIZE, STUDIO_PIXEL_FORMAT);
|
||||||
GPU_SetAnchor(platform.gamepad.texture, 0, 0);
|
GPU_SetAnchor(platform.gamepad.texture, 0, 0);
|
||||||
GPU_SetImageFilter(platform.gamepad.texture, GPU_FILTER_NEAREST);
|
GPU_SetImageFilter(platform.gamepad.texture, GPU_FILTER_NEAREST);
|
||||||
|
GPU_SetRGBA(platform.gamepad.texture, 0xff, 0xff, 0xff, platform.studio->config()->theme.gamepad.touch.alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
u32* data = SDL_malloc(TEXTURE_SIZE * TEXTURE_SIZE * sizeof(u32));
|
u32* data = SDL_malloc(TEXTURE_SIZE * TEXTURE_SIZE * sizeof(u32));
|
||||||
@@ -305,7 +390,7 @@ static void processKeyboard()
|
|||||||
{
|
{
|
||||||
static const u8 KeyboardCodes[] =
|
static const u8 KeyboardCodes[] =
|
||||||
{
|
{
|
||||||
#include "keycodes.c"
|
#include "keycodes.inl"
|
||||||
};
|
};
|
||||||
|
|
||||||
tic80_input* input = &platform.studio->tic->ram.input;
|
tic80_input* input = &platform.studio->tic->ram.input;
|
||||||
@@ -330,24 +415,9 @@ static bool checkTouch(const SDL_Rect* rect, s32* x, s32* y)
|
|||||||
{
|
{
|
||||||
SDL_TouchID id = SDL_GetTouchDevice(i);
|
SDL_TouchID id = SDL_GetTouchDevice(i);
|
||||||
|
|
||||||
// very strange, but on Android id always == 0
|
|
||||||
//if (id)
|
|
||||||
{
|
{
|
||||||
s32 fingers = SDL_GetNumTouchFingers(id);
|
s32 fingers = SDL_GetNumTouchFingers(id);
|
||||||
|
|
||||||
if(fingers)
|
|
||||||
{
|
|
||||||
platform.gamepad.counter = 0;
|
|
||||||
|
|
||||||
if (!platform.gamepad.show)
|
|
||||||
{
|
|
||||||
platform.gamepad.alpha = platform.studio->config()->theme.gamepad.touch.alpha;
|
|
||||||
GPU_SetRGBA(platform.gamepad.texture, 0xff, 0xff, 0xff, platform.gamepad.alpha);
|
|
||||||
platform.gamepad.show = true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (s32 f = 0; f < fingers; f++)
|
for (s32 f = 0; f < fingers; f++)
|
||||||
{
|
{
|
||||||
SDL_Finger* finger = SDL_GetTouchFinger(id, f);
|
SDL_Finger* finger = SDL_GetTouchFinger(id, f);
|
||||||
@@ -369,10 +439,72 @@ static bool checkTouch(const SDL_Rect* rect, s32* x, s32* y)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void processTouchGamepad()
|
static void processTouchKeyboard()
|
||||||
{
|
{
|
||||||
|
if(platform.touchCounter == 0) return;
|
||||||
|
|
||||||
|
enum{Cols=KBD_COLS, Rows=KBD_ROWS};
|
||||||
|
|
||||||
|
s32 w, h;
|
||||||
|
SDL_GetWindowSize(platform.window, &w, &h);
|
||||||
|
|
||||||
|
float scale = (float)w / (KBD_COLS*TIC_SPRITESIZE);
|
||||||
|
|
||||||
|
SDL_Rect kbd = {0, h - KBD_ROWS*TIC_SPRITESIZE*scale,
|
||||||
|
KBD_COLS*TIC_SPRITESIZE*scale, KBD_ROWS*TIC_SPRITESIZE*scale};
|
||||||
|
|
||||||
|
static const tic_key KbdLayout[] =
|
||||||
|
{
|
||||||
|
#include "kbdlayout.inl"
|
||||||
|
};
|
||||||
|
|
||||||
|
tic80_input* input = &platform.studio->tic->ram.input;
|
||||||
|
|
||||||
|
s32 devices = SDL_GetNumTouchDevices();
|
||||||
|
|
||||||
|
for (s32 i = 0; i < devices; i++)
|
||||||
|
{
|
||||||
|
SDL_TouchID id = SDL_GetTouchDevice(i);
|
||||||
|
s32 fingers = SDL_GetNumTouchFingers(id);
|
||||||
|
|
||||||
|
for (s32 f = 0; f < fingers; f++)
|
||||||
|
{
|
||||||
|
SDL_Finger* finger = SDL_GetTouchFinger(id, f);
|
||||||
|
|
||||||
|
if (finger && finger->pressure > 0.0f)
|
||||||
|
{
|
||||||
|
SDL_Point pt = {finger->x * w, finger->y * h};
|
||||||
|
|
||||||
|
if(SDL_PointInRect(&pt, &kbd))
|
||||||
|
{
|
||||||
|
pt.x -= kbd.x;
|
||||||
|
pt.y -= kbd.y;
|
||||||
|
|
||||||
|
pt.x /= scale;
|
||||||
|
pt.y /= scale;
|
||||||
|
|
||||||
|
for(s32 i = 0; i < COUNT_OF(input->keyboard.keys); i++)
|
||||||
|
{
|
||||||
|
tic_key* key = &input->keyboard.keys[i];
|
||||||
|
|
||||||
|
if(*key == tic_key_unknown)
|
||||||
|
{
|
||||||
|
*key = KbdLayout[pt.x / TIC_SPRITESIZE + pt.y / TIC_SPRITESIZE * Cols];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void processTouchGamepad()
|
||||||
|
{
|
||||||
platform.gamepad.touch.data = 0;
|
platform.gamepad.touch.data = 0;
|
||||||
|
|
||||||
|
if(platform.touchCounter == 0) return;
|
||||||
|
|
||||||
const s32 size = platform.gamepad.part.size;
|
const s32 size = platform.gamepad.part.size;
|
||||||
s32 x = 0, y = 0;
|
s32 x = 0, y = 0;
|
||||||
|
|
||||||
@@ -540,7 +672,19 @@ static void processJoysticks()
|
|||||||
static void processGamepad()
|
static void processGamepad()
|
||||||
{
|
{
|
||||||
#if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__)
|
#if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__)
|
||||||
processTouchGamepad();
|
{
|
||||||
|
s32 devices = SDL_GetNumTouchDevices();
|
||||||
|
for (s32 i = 0; i < devices; i++)
|
||||||
|
if(SDL_GetNumTouchFingers(SDL_GetTouchDevice(i)) > 0)
|
||||||
|
platform.touchCounter = 10 * TIC_FRAMERATE;
|
||||||
|
|
||||||
|
if(platform.touchCounter)
|
||||||
|
platform.touchCounter--;
|
||||||
|
}
|
||||||
|
|
||||||
|
platform.studio->isGamepadMode()
|
||||||
|
? processTouchGamepad()
|
||||||
|
: processTouchKeyboard();
|
||||||
#endif
|
#endif
|
||||||
processJoysticks();
|
processJoysticks();
|
||||||
|
|
||||||
@@ -675,9 +819,59 @@ static void blitSound()
|
|||||||
else SDL_QueueAudio(platform.audio.device, tic->samples.buffer, tic->samples.size);
|
else SDL_QueueAudio(platform.audio.device, tic->samples.buffer, tic->samples.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void renderKeyboard()
|
||||||
|
{
|
||||||
|
if(platform.touchCounter == 0) return;
|
||||||
|
|
||||||
|
SDL_Rect rect;
|
||||||
|
SDL_GetWindowSize(platform.window, &rect.w, &rect.h);
|
||||||
|
|
||||||
|
GPU_Rect src = {OFFSET_LEFT, OFFSET_TOP, KBD_COLS*TIC_SPRITESIZE, KBD_ROWS*TIC_SPRITESIZE};
|
||||||
|
float scale = rect.w/src.w;
|
||||||
|
GPU_Rect dst = (GPU_Rect){0, rect.h - KBD_ROWS*TIC_SPRITESIZE*scale, scale, scale};
|
||||||
|
|
||||||
|
{
|
||||||
|
SDL_Rect rect;
|
||||||
|
calcTextureRect(&rect);
|
||||||
|
|
||||||
|
if(dst.y - (rect.h + rect.y*2) < 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GPU_BlitScale(platform.keyboard.texture.up, &src, platform.gpu.screen, dst.x, dst.y, dst.w, dst.h);
|
||||||
|
|
||||||
|
static const tic_key KbdLayout[] =
|
||||||
|
{
|
||||||
|
#include "kbdlayout.inl"
|
||||||
|
};
|
||||||
|
|
||||||
|
tic80_input* input = &platform.studio->tic->ram.input;
|
||||||
|
|
||||||
|
enum{Cols=KBD_COLS, Rows=KBD_ROWS};
|
||||||
|
|
||||||
|
for(s32 i = 0; i < COUNT_OF(input->keyboard.keys); i++)
|
||||||
|
{
|
||||||
|
tic_key key = input->keyboard.keys[i];
|
||||||
|
if(key > tic_key_unknown)
|
||||||
|
{
|
||||||
|
for(s32 k = 0; k < COUNT_OF(KbdLayout); k++)
|
||||||
|
{
|
||||||
|
if(key == KbdLayout[k])
|
||||||
|
{
|
||||||
|
GPU_Rect src = {(k % Cols)*TIC_SPRITESIZE + OFFSET_LEFT, (k / Cols)*TIC_SPRITESIZE + OFFSET_TOP,
|
||||||
|
TIC_SPRITESIZE, TIC_SPRITESIZE};
|
||||||
|
|
||||||
|
GPU_BlitScale(platform.keyboard.texture.down, &src, platform.gpu.screen,
|
||||||
|
(src.x - OFFSET_LEFT) * dst.w, (src.y - OFFSET_TOP) * dst.h + dst.y, dst.w, dst.h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void renderGamepad()
|
static void renderGamepad()
|
||||||
{
|
{
|
||||||
if(platform.gamepad.show || platform.gamepad.alpha); else return;
|
if(platform.touchCounter == 0) return;
|
||||||
|
|
||||||
const s32 tileSize = platform.gamepad.part.size;
|
const s32 tileSize = platform.gamepad.part.size;
|
||||||
const SDL_Point axis = platform.gamepad.part.axis;
|
const SDL_Point axis = platform.gamepad.part.axis;
|
||||||
@@ -695,33 +889,15 @@ static void renderGamepad()
|
|||||||
{platform.studio->tic->ram.input.gamepads.first.y, platform.gamepad.part.y.x, platform.gamepad.part.y.y},
|
{platform.studio->tic->ram.input.gamepads.first.y, platform.gamepad.part.y.x, platform.gamepad.part.y.y},
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {ButtonsCount = 8};
|
|
||||||
|
|
||||||
for(s32 i = 0; i < COUNT_OF(Tiles); i++)
|
for(s32 i = 0; i < COUNT_OF(Tiles); i++)
|
||||||
{
|
{
|
||||||
const Tile* tile = Tiles + i;
|
const Tile* tile = Tiles + i;
|
||||||
GPU_Rect src = {(tile->press ? ButtonsCount + i : i) * TIC_SPRITESIZE, 0, TIC_SPRITESIZE, TIC_SPRITESIZE};
|
GPU_Rect src = {i * TIC_SPRITESIZE, tile->press ? TIC_SPRITESIZE : 0, TIC_SPRITESIZE, TIC_SPRITESIZE};
|
||||||
GPU_Rect dest = {tile->x, tile->y, tileSize, tileSize};
|
GPU_Rect dest = {tile->x, tile->y, tileSize, tileSize};
|
||||||
|
|
||||||
GPU_BlitScale(platform.gamepad.texture, &src, platform.gpu.screen, dest.x, dest.y,
|
GPU_BlitScale(platform.gamepad.texture, &src, platform.gpu.screen, dest.x, dest.y,
|
||||||
(float)dest.w / TIC_SPRITESIZE, (float)dest.h / TIC_SPRITESIZE);
|
(float)dest.w / TIC_SPRITESIZE, (float)dest.h / TIC_SPRITESIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!platform.gamepad.show && platform.gamepad.alpha)
|
|
||||||
{
|
|
||||||
enum {Step = 3};
|
|
||||||
|
|
||||||
if(platform.gamepad.alpha - Step >= 0) platform.gamepad.alpha -= Step;
|
|
||||||
else platform.gamepad.alpha = 0;
|
|
||||||
|
|
||||||
GPU_SetRGBA(platform.gamepad.texture, 0xff, 0xff, 0xff, platform.gamepad.alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
platform.gamepad.counter = platform.gamepad.touch.data ? 0 : platform.gamepad.counter+1;
|
|
||||||
|
|
||||||
// wait 5 seconds and hide touch gamepad
|
|
||||||
if(platform.gamepad.counter >= 5 * TIC_FRAMERATE)
|
|
||||||
platform.gamepad.show = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void blitCursor(const u8* in)
|
static void blitCursor(const u8* in)
|
||||||
@@ -1135,7 +1311,12 @@ static void gpuTick()
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderCursor();
|
renderCursor();
|
||||||
renderGamepad();
|
|
||||||
|
#if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__)
|
||||||
|
platform.studio->isGamepadMode()
|
||||||
|
? renderGamepad()
|
||||||
|
: renderKeyboard();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
GPU_Flip(platform.gpu.screen);
|
GPU_Flip(platform.gpu.screen);
|
||||||
@@ -1198,6 +1379,7 @@ static s32 start(s32 argc, char **argv, const char* folder)
|
|||||||
}
|
}
|
||||||
|
|
||||||
initTouchGamepad();
|
initTouchGamepad();
|
||||||
|
initTouchKeyboard();
|
||||||
|
|
||||||
platform.gpu.texture = GPU_CreateImage(TIC80_FULLWIDTH, TIC80_FULLHEIGHT, STUDIO_PIXEL_FORMAT);
|
platform.gpu.texture = GPU_CreateImage(TIC80_FULLWIDTH, TIC80_FULLHEIGHT, STUDIO_PIXEL_FORMAT);
|
||||||
GPU_SetAnchor(platform.gpu.texture, 0, 0);
|
GPU_SetAnchor(platform.gpu.texture, 0, 0);
|
||||||
@@ -1252,6 +1434,12 @@ static s32 start(s32 argc, char **argv, const char* folder)
|
|||||||
if(platform.gamepad.texture)
|
if(platform.gamepad.texture)
|
||||||
GPU_FreeImage(platform.gamepad.texture);
|
GPU_FreeImage(platform.gamepad.texture);
|
||||||
|
|
||||||
|
if(platform.keyboard.texture.up)
|
||||||
|
GPU_FreeImage(platform.keyboard.texture.up);
|
||||||
|
|
||||||
|
if(platform.keyboard.texture.down)
|
||||||
|
GPU_FreeImage(platform.keyboard.texture.down);
|
||||||
|
|
||||||
if(platform.mouse.texture)
|
if(platform.mouse.texture)
|
||||||
GPU_FreeImage(platform.mouse.texture);
|
GPU_FreeImage(platform.mouse.texture);
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ typedef struct
|
|||||||
void (*updateProject)();
|
void (*updateProject)();
|
||||||
const StudioConfig* (*config)();
|
const StudioConfig* (*config)();
|
||||||
|
|
||||||
|
// TODO: remove this method, system has to know nothing about current mode
|
||||||
|
bool (*isGamepadMode)();
|
||||||
} Studio;
|
} Studio;
|
||||||
|
|
||||||
TIC80_API Studio* studioInit(s32 argc, char **argv, s32 samplerate, const char* appFolder, System* system);
|
TIC80_API Studio* studioInit(s32 argc, char **argv, s32 samplerate, const char* appFolder, System* system);
|
||||||
@@ -662,7 +662,7 @@ static s32 api_fixed_text(tic_mem* memory, const char* text, s32 x, s32 y, u8 co
|
|||||||
|
|
||||||
static s32 drawNonFixedChar(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, bool alt)
|
static s32 drawNonFixedChar(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, bool alt)
|
||||||
{
|
{
|
||||||
const u8* ptr = memory->font.data + (symbol)*BITS_IN_BYTE + (alt ? TIC_FONT_CHARS / 2 : 0);
|
const u8* ptr = memory->font.data + (symbol + (alt ? TIC_FONT_CHARS / 2 : 0))*BITS_IN_BYTE;
|
||||||
|
|
||||||
const s32 FontWidth = alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH;
|
const s32 FontWidth = alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH;
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user