commit 2719260c4195e4effa114ac0d9c7ce06c174b797 Author: Erin Nova Date: Sun Mar 6 21:01:34 2022 -0500 Setup git repo diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e660fd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +bin/ diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..08e5182 Binary files /dev/null and b/icon.png differ diff --git a/makefile b/makefile new file mode 100644 index 0000000..41a1d51 --- /dev/null +++ b/makefile @@ -0,0 +1,17 @@ +# ---------------------------- +# Makefile Options +# ---------------------------- + +NAME = TEST +ICON = icon.png +DESCRIPTION = "Test TI-84 program" +COMPRESSED = NO +ARCHIVED = NO + +CFLAGS = -Wall -Wextra -Oz +CXXFLAGS = -Wall -Wextra -Oz +HAS_PRINTF := NO + +# ---------------------------- + +include $(shell cedev-config --makefile) diff --git a/obj/icon.src b/obj/icon.src new file mode 100644 index 0000000..f132134 --- /dev/null +++ b/obj/icon.src @@ -0,0 +1,27 @@ + section .icon + + jp ___prgm_init + db $01 + public ___icon +___icon: + db $10, $10 + db $FF, $FF, $FF, $FF, $FE, $B5, $B5, $D6, $D6, $B5, $B5, $FE, $FF, $FF, $FF, $FF + db $FF, $FF, $FF, $B5, $DE, $DF, $96, $56, $56, $96, $DF, $DE, $B5, $FF, $FF, $FF + db $FF, $FF, $B5, $DF, $56, $0E, $0D, $0D, $0D, $0D, $0D, $4E, $DF, $B5, $FF, $FF + db $FF, $B5, $DF, $2E, $0D, $0D, $0D, $0D, $0D, $0D, $0D, $0D, $2E, $DF, $B5, $FF + db $FE, $DE, $56, $0D, $0D, $05, $05, $05, $05, $05, $05, $0D, $0D, $4E, $DE, $FE + db $B5, $DF, $0D, $05, $2D, $B7, $DF, $96, $4D, $D7, $D7, $B6, $05, $0D, $B7, $B5 + db $B5, $96, $05, $2D, $FF, $DE, $76, $96, $4D, $FF, $96, $6E, $05, $05, $76, $B5 + db $D6, $4E, $05, $76, $FF, $0D, $05, $05, $4D, $FF, $B6, $76, $05, $05, $4D, $D6 + db $D6, $4E, $05, $76, $FF, $05, $05, $05, $4D, $FF, $B6, $76, $05, $05, $4D, $D6 + db $B5, $76, $05, $2D, $FF, $B7, $6E, $96, $4D, $FF, $76, $4E, $05, $05, $6D, $B5 + db $B5, $DE, $05, $05, $4D, $DE, $FF, $96, $4D, $DE, $DE, $B7, $05, $05, $B6, $B5 + db $FE, $DE, $4E, $05, $05, $04, $04, $04, $04, $04, $04, $05, $05, $2D, $DE, $FE + db $FF, $B5, $DF, $2D, $05, $04, $04, $04, $04, $04, $05, $05, $0D, $D6, $B5, $FF + db $FF, $FF, $B5, $DF, $4D, $05, $04, $04, $04, $04, $05, $2D, $B6, $B5, $FF, $FF + db $FF, $FF, $FF, $B5, $DE, $B6, $6D, $2D, $2D, $4D, $96, $DE, $B5, $FF, $FF, $FF + db $FF, $FF, $FF, $FF, $FE, $B5, $B5, $D6, $D6, $B5, $B5, $DE, $FF, $FF, $FF, $FF + public ___description +___description: + db "Test TI-84 program", 0 +___prgm_init: diff --git a/obj/src/main.c.src b/obj/src/main.c.src new file mode 100644 index 0000000..ca6024c --- /dev/null +++ b/obj/src/main.c.src @@ -0,0 +1,357 @@ + section .text,"ax",@progbits + assume adl = 1 + section .text,"ax",@progbits + public _print +_print: + call __frameset0 + ld a, (ix + 9) + ld l, (ix + 12) + push hl + ld l, a + push hl + call _os_SetCursorPos + pop hl + pop hl + ld hl, (ix + 6) + push hl + call _os_PutStrFull + pop hl + or a, a + sbc hl, hl + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _clearLine +_clearLine: + call __frameset0 + ld a, (ix + 6) + or a, a + sbc hl, hl + push hl + ld l, a + push hl + call _os_SetCursorPos + pop hl + pop hl + ld hl, L_.str + push hl + call _os_PutStrFull + pop hl + or a, a + sbc hl, hl + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _print_ui +_print_ui: + ld hl, -33 + call __frameset + ld de, 0 + lea hl, ix - 24 + ld (ix - 27), hl + push de + push de + call _os_SetCursorPos + pop hl + pop hl + or a, a + sbc hl, hl + push hl + push hl + ld hl, L_.str.1 + push hl + call _print + ld bc, (ix + 6) + pop hl + pop hl + pop hl + ld hl, L_.str.2 + ld (ix - 24), hl + ld hl, L_.str.3 + ld (ix - 21), hl + ld hl, L_.str.4 + ld (ix - 18), hl + ld de, 3 + push bc + pop hl + or a, a + sbc hl, de + inc de + jq nz, BB2_1 + ld de, (ix + 9) + push de + pop hl + add hl, bc + or a, a + sbc hl, bc + ld hl, 2 + jq z, BB2_7 + dec de + ex de, hl + jq BB2_7 +BB2_1: + ld iy, (ix + 9) + push bc + pop hl + or a, a + sbc hl, de + jq nz, BB2_2 + ld de, 2 + lea bc, iy + push bc + pop hl + or a, a + sbc hl, de + ld hl, 0 + jq z, BB2_7 + inc bc + push bc + pop hl + jq BB2_7 +BB2_2: + lea hl, iy +BB2_7: + ld iy, L_.str.5 + ld de, 1 + ld bc, 3 + ld (ix - 33), hl + call __imulu + push de + pop bc + push hl + pop de + ld hl, (ix - 27) + add hl, de + ld (hl), iy + ld de, 4 +BB2_8: + push bc + pop hl + or a, a + sbc hl, de + jq z, BB2_10 + push bc + ld (ix - 30), bc + call _clearLine + pop hl + ld hl, (ix - 27) + ld hl, (hl) + ld de, 2 + push de + ld de, (ix - 30) + push de + push hl + call _print + ld bc, (ix - 30) + ld de, 4 + pop hl + pop hl + pop hl + inc bc + ld iy, (ix - 27) + lea iy, iy + 3 + ld (ix - 27), iy + jq BB2_8 +BB2_10: + or a, a + sbc hl, hl + push hl + ld hl, 5 + push hl + ld hl, L_.str.6 + push hl + call _print + pop hl + pop hl + pop hl + ld hl, (ix - 33) + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _get_input +_get_input: + ld hl, -43 + call __frameset + ld iy, -720868 + or a, a + sbc hl, hl + lea de, ix - 25 + ld (ix - 43), de + ld (ix - 37), hl + ld (ix - 40), hl +BB3_1: + ld l, (iy) + ld h, (iy + 1) + ld (ix - 31), hl + ld hl, -720866 + push de + ld e, (hl) + inc hl + ld d, (hl) + ld l, e + ld h, d + pop de + ld (ix - 28), hl + call _kb_Scan + ld iy, -720868 + ld l, (iy) + ld h, (iy + 1) + ld (ix - 34), hl + ld hl, -720866 + ld e, (hl) + inc hl + ld d, (hl) + ld bc, (ix - 31) + ld a, c + cp a, 1 + jq z, BB3_4 + ld hl, (ix - 34) + ld a, l + cp a, 1 + jq nz, BB3_4 + ld hl, (ix - 37) + push hl + ld hl, L_.str.7 + push hl + ld hl, (ix - 43) + push hl + ld (ix - 31), de + call ___sprintf + pop hl + pop hl + pop hl + ld hl, 17 + push hl + ld hl, 5 + push hl + ld hl, (ix - 43) + push hl + call _print + ld de, (ix - 31) + ld iy, -720868 + pop hl + pop hl + pop hl + ld hl, (ix - 37) + inc hl + ld (ix - 37), hl +BB3_4: + ld a, e + ld hl, (ix - 28) + xor a, l + or a, a + jq z, BB3_10 + ld a, e + cp a, 1 + ld hl, 4 + jq z, BB3_8 + ld a, e + cp a, 8 + jq nz, BB3_9 + ld hl, 3 +BB3_8: + ld de, (ix - 40) + push de + push hl + call _print_ui + ld (ix - 40), hl + pop hl + pop hl +BB3_9: + ld iy, -720868 +BB3_10: + ld l, (iy) + ld h, (iy + 1) + ld a, l + cp a, 64 + jq nz, BB3_1 + ld sp, ix + pop ix + ret + section .text,"ax",@progbits + + section .text,"ax",@progbits + public _main +_main: + ld iy, -3145600 + call _os_ClrLCD + call _os_HomeUp + call _os_DrawStatusBar + or a, a + sbc hl, hl + push hl + push hl + call _print_ui + pop hl + pop hl + call _get_input +BB4_1: + call _os_GetCSC + or a, a + jq z, BB4_1 + or a, a + sbc hl, hl + ret + section .text,"ax",@progbits + + section .rodata,"a",@progbits + private L_.str +L_.str: + db " ", 0 + + section .rodata,"a",@progbits + private L_.str.1 +L_.str.1: + db "Test: ", 0 + + section .rodata,"a",@progbits + private L_.str.2 +L_.str.2: + db "[ ] one", 0 + + section .rodata,"a",@progbits + private L_.str.3 +L_.str.3: + db "[ ] two", 0 + + section .rodata,"a",@progbits + private L_.str.4 +L_.str.4: + db "[ ] three", 0 + + section .rodata,"a",@progbits + private L_.str.5 +L_.str.5: + db "[x] three", 0 + + section .rodata,"a",@progbits + private L_.str.6 +L_.str.6: + db " pressed: ", 0 + + section .rodata,"a",@progbits + private L_.str.7 +L_.str.7: + db "%d", 0 + + ident "clang version 14.0.0 (https://github.com/jacobly0/llvm-project a139def90d26173f771eb1eca797633d1fbb2797)" + extern _os_DrawStatusBar + extern __Unwind_SjLj_Register + extern _os_ClrLCD + extern __Unwind_SjLj_Unregister + extern __frameset + extern _os_PutStrFull + extern __imulu + extern _kb_Scan + extern ___sprintf + extern __frameset0 + extern _os_HomeUp + extern _os_SetCursorPos + extern _os_GetCSC diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..d26f4bf --- /dev/null +++ b/src/main.c @@ -0,0 +1,136 @@ +/* + *-------------------------------------- + * Program Name: MY_PROGRAM + * Author: Erin L. Nova + * License: CNPLv7+ + * Description: A test TI-84 program + *-------------------------------------- +*/ +#include +#include +#include + +enum Directions { + None, + Left, + Right, + Up, + Down, +}; + +int print(const char *string, int x, int y) { // Function to easily print to a location on screen + os_SetCursorPos(x, y); + os_PutStrFull(string); + return 0; +} + +int clearLine(int x) { + os_SetCursorPos(x, 0); + os_PutStrFull(" "); + return 0; +} + +int print_ui(enum Directions direction, int prev_index) { + os_SetCursorPos(0, 0); // Reset cursor position + + print("Test: ", 0, 0); + + int index = prev_index; + + int num_items = 3; + + char *items[8]; + items[0] = "\[ ] one"; + items[1] = "\[ ] two"; + items[2] = "\[ ] three"; + + switch (direction) { + case Down: + if (index != num_items-1) { + index++; + } else { + index = 0; + } + break; + case Up: + if (index != 0) { + index--; + } else { + index = num_items-1; + } + break; + } + + items[index] = "\[x] three"; + + int i; + for (i = 0; i < num_items; i++) { + clearLine(i+1); + print(items[i], i+1, 2); + } + + print(" pressed: ", num_items+2, 0); + + return index; +} + +void get_input() { + // Key variable + kb_key_t key, dir_key, prev_key, prev_dir_key; + + int counter = 0; + int index = 0; + + // Loop until 2nd is pressed + do { + // Update kb_Data + prev_key = kb_Data[6]; + prev_dir_key = kb_Data[7]; + kb_Scan(); + + // Load group registers + key = kb_Data[6]; + dir_key = kb_Data[7]; + + char str[25]; + + // Make sure it's a new press + if (key != prev_key) { + // Check what key it is + switch (key) { + case kb_Enter: + sprintf(str, "%d", counter); + print(str, 5, 17); + counter++; + break; + + default: + break; + } + } + + // Make sure it's a new press + if (dir_key != prev_dir_key) { + // Check what key it is + switch (dir_key) { + case kb_Down: + index = print_ui(Down, index); + break; + case kb_Up: + index = print_ui(Up, index); + break; + } + } + } while (kb_Data[6] != kb_Clear); +} + +int main(void) { + os_ClrHome(); // Clear the screen + print_ui(None, 0); + + get_input(); + + // Wait for input + while (!os_GetCSC()); + return 0; +}