diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index c49461d..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,15 +0,0 @@ -# prgmTRANSFER - -## v0.0.1b -- Initial beta release - -## v0.0.2b -- Fix corrupted screen, crash, or garbage data when receiving some variables from Archive. -- Fix incorrect file names for images. - -## v0.0.3b -- Use new usbdrvce error handling features. -- Improve build system. - -## v0.0.4b -- Recompile for new usbdrvce. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 6c358c8..0000000 --- a/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2019 - 2021 Jacob "jacobly" Young - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index 56aa779..f7119e8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# prgmTRANSFER v0.0.4b +# prgmTRANSFER v0.0.1b ### This software is still in beta, no liability for corrupted or lost files, etc! @@ -7,13 +7,8 @@ Running this program on the calculator will allow you to transfer variable files Windows 10/Ubuntu 20.04/Android with preinstalled software, or other OSes with various PTP or MTP transfer software. -## Known Working Computer OSes -- Windows 10 using the default file explorer, check under Computer after connecting. -- Ubuntu 20.04 using the default Gnome Files (nautilus) or Dolphin. -- Android 11 using the builtin Files application, check notifications after connecting to open. - ## Installation -1. Send [TRANSFER.8xp release](https://github.com/jacobly0/transfer/releases/latest) and [nightly clibs.8xg from usbdrvce branch](https://jacobly.com/artifact?repo=toolchain&branch=usbdrvce&file=clibs) to your calculator using other transfer software. +1. Send [TRANSFER.8xp release](https://github.com/jacobly0/transfer/releases/latest) and [nightly clibs.8xg from usbdrvce branch](https://jacobly.com/a/toolchain/usbdrvce/clibs.zip) to your calculator using other transfer software. 1. Run `Asm(prgmTRANSFER)` and then plug-and-play with a usb cable to supported OSes, or using supported software. 1. The screen should display a debug log that can be ignored unless things go wrong, in which case the last few lines should be reported if there is an issue. 1. Press `clear` to exit. @@ -28,8 +23,7 @@ PTP or MTP transfer software. - [ ] Receiving a rom dump. - [ ] Copying variables in either RAM or Archive to another name in either RAM or Archive. - [x] Getting free space in RAM or Archive. -- [x] Getting the current time. -- [ ] Setting the current time. -- [x] Getting the current battery level. -- [ ] ~~Getting a device icon for displaying in MTP program UIs.~~ +- [x] Geting and seting the current time. +- [x] Geting the current battery level. +- [ ] Geting a device icon for displaying in MTP program UIs. - [ ] Optimize for a smaller program size. diff --git a/font/genfont.c b/font/genfont.c index 306ec99..786da1f 100644 --- a/font/genfont.c +++ b/font/genfont.c @@ -5,14 +5,14 @@ #include #include #include +#include int main(int argc, char **argv) { FT_Library library; FT_Error error; FT_Face face; if ((error = FT_Init_FreeType(&library)) || - ((error = FT_New_Face(library, "/usr/share/fonts/fonts-master/apache/robotomono/RobotoMono-Medium.ttf", 0, &face)) && - (error = FT_New_Face(library, "/Library/Fonts/RobotoMono-Medium.ttf", 0, &face))) || + (error = FT_New_Face(library, "/usr/share/fonts/fonts-master/apache/robotomono/RobotoMono-Medium.ttf", 0, &face)) || (error = FT_Set_Char_Size(face, 0, 550, 0, 141)) || (error = FT_Load_Char(face, U'w', FT_LOAD_DEFAULT))) return error; int width = face->glyph->advance.x >> 6, height = face->size->metrics.height >> 6, height_bytes = (height + 1) >> 1; @@ -45,7 +45,7 @@ int main(int argc, char **argv) { "const uint8_t font[0x100][FONT_WIDTH][FONT_HEIGHT_BYTES] = {\n"); uint8_t *bitmap = calloc(width, height_bytes); if (!bitmap) return 1; - for (uint32_t c = U'\0'; c <= U'\xFF'; ++c) { + for (char32_t c = U'\0'; c <= U'\xFF'; ++c) { memset(bitmap, 0, width * height_bytes); if ((error = FT_Load_Char(face, c, FT_LOAD_DEFAULT)) || (error = FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL))) return error; diff --git a/makefile b/makefile index d4a9d91..dc428c8 100644 --- a/makefile +++ b/makefile @@ -2,47 +2,29 @@ # Makefile Options # ---------------------------- -NATIVECC = clang +NAME ?= TRANSFER +ICON ?= transfer.png +DESCRIPTION ?= "Variable Transfer Program" +COMPRESSED ?= YES +ARCHIVED ?= YES -NAME = TRANSFER -MAJOR_VERSION = 0 -MINOR_VERSION = 0 -PATCH_VERSION = 4 -KIND_VERSION = n -BUILD_VERSION = -$(shell git rev-parse --short HEAD) -FULL_VERSION = v$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION)$(KIND_VERSION)$(BUILD_VERSION) -ICON = transfer.png -DESCRIPTION = "Variable Transfer Program $(FULL_VERSION)" -COMPRESSED = YES -ARCHIVED = YES +CFLAGS ?= -Wall -Wextra -Oz +CXXFLAGS ?= -Wall -Wextra -Oz -FLAGS = -Wall -Wextra -Oz -DVERSION='"$(FULL_VERSION)"' -CFLAGS = $(FLAGS) -CXXFLAGS = $(FLAGS) - -EXTRA_CSOURCES = src/font.c -EXTRA_USERHEADERS = src/ti84pceg.inc src/font.h -EXTRA_CLEAN = src/font.c src/font.h font/genfont +EXTRA_CSOURCES ?= $(if $(wildcard src/font.c),,src/font.c) +EXTRA_USERHEADERS ?= src/ti84pceg.inc src/font.h +EXTRA_CLEAN ?= src/font.c src/font.h font/genfont # ---------------------------- -include $(shell cedev-config --makefile) +ifndef CEDEV +$(error CEDEV environment path variable is not set) +endif -all: - $(Q)echo [done] prgm$(NAME) $(FULL_VERSION) +include $(CEDEV)/meta/makefile.mk -beta: KIND_VERSION = b -beta: BUILD_VERSION = -beta: all +src/font.h src/font.c: font/genfont + @$< -release: BUILD_VERSION = -release: REV_VERSION = -release: all - -src/font.h src/font.c: font/genfont makefile - $(Q)echo [running] $< - $(Q)$< - -font/genfont: font/genfont.c makefile - $(Q)echo [compiling] $< - $(Q)$(NATIVECC) -O3 -flto $< `pkg-config --cflags --libs freetype2` -o $@ +font/genfont: font/genfont.c + @clang -O3 -flto $< `pkg-config --cflags --libs freetype2` -o $@ diff --git a/src/main.c b/src/main.c index 3499fb3..3737e58 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,6 @@ typedef struct mtp_global mtp_global_t; #define usb_transfer_data_t mtp_global_t /* Includes */ -#include "font.h" #include "ui.h" #include "var.h" @@ -37,8 +36,6 @@ typedef struct mtp_global mtp_global_t; #define lengthof(array) (sizeof(array) / sizeof(*(array))) -#define charsof(literal) (lengthof(literal) - 1) - #define COUNT_EACH(...) +1 #define OBJECT_BUFFER \ @@ -62,9 +59,7 @@ typedef struct mtp_global mtp_global_t; X(SET_DEVICE_PROP_VALUE) \ X(MOVE_OBJECT) -#define FOR_EACH_SUPP_EVT(X) \ - X(OBJECT_ADDED) \ - X(OBJECT_REMOVED) +#define FOR_EACH_SUPP_EVT(X) #define FOR_EACH_SUPP_DP(X) \ X(uint8, BATTERY_LEVEL, RANGE) \ @@ -128,13 +123,13 @@ typedef struct mtp_global mtp_global_t; } #define DATE_TIME_GET_SET 1 #define DATE_TIME_GET(current) \ - get_datetime(¤t) + get_datetime(current.string) #define DATE_TIME_SET(new) #define PERCEIVED_DEVICE_TYPE_DEF 0 #define PERCEIVED_DEVICE_TYPE_GET_SET 0 #define PERCEIVED_DEVICE_TYPE_GET(current) \ - current = 5 + current = 3 #define PERCEIVED_DEVICE_TYPE_SET(new) /* MTP Types */ @@ -167,16 +162,16 @@ typedef usb_error_t(*mtp_transaction_callback_t)( #define Los_specific L"MSFT100\1" #define Lmtp_extensions L"microsoft.com: 1.0;" #define Lmanufacturer L"Texas Instruments Incorporated" -#define Lproduct L"TI-84 Plus CE" -#define Lproduct83 L"TI-83 Premium CE" -#define Ldevice_version L"255.255.255.65535" +#define Lproduct L"TI-83 Premium CE" /* default must be longer than alt */ +#define Lproduct84 L"TI-84 Plus CE" +#define Ldevice_version L"2.20" #define Lserial_number L"0000000000000000" #define Lcharging_cfg L"Charging" #define Lmtp_interface L"MTP" /* magic string to aid detection */ #define Lram_storage_desc L"RAM" -#define Lram_volume_id Lserial_number "R" +#define Lram_volume_id Lserial_number"R" #define Larc_storage_desc L"Archive" -#define Larc_volume_id Lserial_number "A" +#define Larc_volume_id Lserial_number"A" #define Lfactory_datetime L"20150101T000000" typedef enum string_id { @@ -717,8 +712,7 @@ typedef struct mtp_device_info { mtp_byte_t manufacturer_length; wchar_t manufacturer[lengthof(Lmanufacturer)]; mtp_byte_t model_length; - wchar_t model[lengthof(Lproduct) > lengthof(Lproduct83) ? - lengthof(Lproduct) : lengthof(Lproduct83)]; + wchar_t model[lengthof(Lproduct)]; mtp_byte_t device_version_length; wchar_t device_version[lengthof(Ldevice_version)]; mtp_byte_t serial_number_length; @@ -825,7 +819,6 @@ DECLARE_CALLBACK(get_object); DECLARE_CALLBACK(send_object_info); DECLARE_CALLBACK(send_object_container); DECLARE_CALLBACK(send_object); -DECLARE_CALLBACK(zlp_data_in); DECLARE_CALLBACK(final_data_in); DECLARE_CALLBACK(response); DECLARE_CALLBACK(event); @@ -846,12 +839,18 @@ static usb_endpoint_t get_endpoint( static usb_error_t stall_data_endpoints( usb_endpoint_t endpoint) { printf("stalling data endpoints\n"); - usb_error_t error = usb_SetEndpointHalt( +#if 0 + usb_error_t error; + error = usb_StallEndpoint( get_endpoint(endpoint, MTP_EP_DATA_IN)); if (error == USB_SUCCESS) - error = usb_SetEndpointHalt( + error = usb_StallEndpoint( get_endpoint(endpoint, MTP_EP_DATA_OUT)); return error; +#else + (void)endpoint; + return USB_ERROR_FAILED; +#endif } static usb_error_t schedule_event( @@ -956,6 +955,33 @@ static usb_error_t schedule_ok_response( params, param_count, global); } +static usb_error_t schedule_data_in_response( + usb_endpoint_t endpoint, + const void *data, + size_t data_size, + mtp_global_t *global) { + usb_error_t error; + global->transaction.container.length.size = + sizeof(mtp_container_t) + + data_size; + global->transaction.container.type = + MTP_BT_DATA; + error = usb_ScheduleBulkTransfer( + endpoint = get_endpoint( + endpoint, MTP_EP_DATA_IN), + &global->transaction, + sizeof(mtp_container_t), + NULL, + global); + if (error) return error; + return usb_ScheduleBulkTransfer( + endpoint, + (void *)data, + data_size, + final_data_in_complete, + global); +} + static usb_error_t schedule_data_in( usb_endpoint_t endpoint, size_t data_size, @@ -975,27 +1001,6 @@ static usb_error_t schedule_data_in( global); } -static usb_error_t schedule_data_in_response( - usb_endpoint_t endpoint, - const void *data, - size_t data_size, - mtp_global_t *global) { - usb_error_t error = schedule_data_in( - endpoint, data_size, NULL, global); - if (error == USB_SUCCESS) - error = usb_ScheduleBulkTransfer( - get_endpoint(endpoint, - MTP_EP_DATA_IN), - (void *)data, - data_size, - data_size && - !(data_size % MTP_MAX_BULK_PKT_SZ) - ? zlp_data_in_complete - : final_data_in_complete, - global); - return error; -} - static usb_error_t status_error( usb_transfer_status_t status) { printf("transfer status = %02X\n", status); @@ -1051,19 +1056,21 @@ static uint16_t compute_checksum( } static void get_datetime( - datetime_t *result) { + wchar_t result[lengthof(Lfactory_datetime)]) { uint16_t year; - uint8_t month, day, hour, minute, second; - char string[lengthof(Lfactory_datetime)]; + uint8_t month, day, hour, minute, second, + i = lengthof(Lfactory_datetime); + char string[lengthof(Lfactory_datetime)], + *pointer = string; boot_GetDate(&day, &month, &year); boot_GetTime(&second, &minute, &hour); - int count = - snprintf(string, lengthof(string), - "%04u%02u%02uT%02u%02u%02u", - year, month, day, hour, minute, second); - result->length = count <= 0 ? 0 : count + 1; - for (mtp_byte_t i = 0; i != result->length; ++i) - result->string[i] = string[i]; + sprintf(string, "%04u%02u%02uT%02u%02u%02u", + year, month, day, hour, minute, second); + do { + *(char *)result = *pointer; + ++result; + ++pointer; + } while (--i); } static int delete_object( @@ -1181,7 +1188,6 @@ static int send_object( version = entry->version; flag = entry->flag; } - (void)version; flag &= global->transaction.pending .send_object.mask; flag |= global->transaction.pending @@ -1748,7 +1754,6 @@ DEFINE_CALLBACK(command) { MTP_RSP_DEVICE_PROP_NOT_SUPPORTED, global); case MTP_OPR_GET_DEVICE_PROP_VALUE: - MAX_PARAMS(1); #define GET_DEVICE_PROP_VALUE_RESPONSE(type, name, form) \ if (global->transaction.payload.params[0] == \ MTP_DP_##name) { \ @@ -1764,7 +1769,6 @@ DEFINE_CALLBACK(command) { MTP_RSP_DEVICE_PROP_NOT_SUPPORTED, global); case MTP_OPR_SET_DEVICE_PROP_VALUE: - MAX_PARAMS(1); usb_ScheduleBulkTransfer( endpoint, &global->transaction.payload, @@ -2140,18 +2144,6 @@ DEFINE_CALLBACK(send_object) { endpoint, response, NULL, 0, global); } -DEFINE_CALLBACK(zlp_data_in) { - (void)transferred; - if (status != USB_TRANSFER_COMPLETED) - return status_error(status); - if (global->reset) - return schedule_command(endpoint, global); - return usb_ScheduleBulkTransfer( - endpoint, NULL, 0, - final_data_in_complete, - global); -} - DEFINE_CALLBACK(final_data_in) { (void)transferred; if (status != USB_TRANSFER_COMPLETED) @@ -2198,7 +2190,7 @@ static usb_error_t usb_event(usb_event_t event, (USB_DEVICE_TO_HOST | USB_STANDARD_REQUEST | USB_RECIPIENT_DEVICE) && - setup->bRequest == USB_GET_DESCRIPTOR_REQUEST && + setup->bRequest == USB_GET_DESCRIPTOR && setup->wValue == 0x03EE && !setup->wIndex) { DEFINE_STRING_DESCRIPTOR(const, os_specific); error = usb_ScheduleTransfer( @@ -2271,19 +2263,10 @@ int main(void) { static mtp_global_t global; usb_error_t error; ui_Init(); -#define CENTER(string) \ - printf("%*s%.*s", \ - (LCD_WIDTH / FONT_WIDTH + \ - charsof(string)) / 2, \ - string, \ - charsof(string) % \ - (LCD_WIDTH / FONT_WIDTH) != 0, \ - "\n"); - CENTER("TRANSFER " VERSION); - CENTER("Connect USB to PC."); - CENTER("Press [clear] to exit."); - CENTER("--------------------------------"); - ui_Lock(); + printf(" TRANSFER v0.0.1b\n" + " Connect USB to PC.\n" + " Press [clear] to exit.\n" + "--------------------------------"); static mtp_device_info_t device_info = { .standard_version = 100, /* 1.00 */ .mtp_vendor_extension_id = 6, @@ -2299,11 +2282,7 @@ int main(void) { FOR_EACH_SUPP_OPR(LIST_SUPP_OPR) }, .events_supported_length = lengthof(device_info.events_supported), - .events_supported = { -#define LIST_SUPP_EVT(name) \ - MTP_EVT_##name, - FOR_EACH_SUPP_EVT(LIST_SUPP_EVT) - }, + .events_supported = {}, .device_properties_length = lengthof(device_info.device_properties), .device_properties = { #define LIST_SUPP_DP(type, name, form) \ @@ -2324,8 +2303,14 @@ int main(void) { }, .manufacturer_length = lengthof(device_info.manufacturer), .manufacturer = Lmanufacturer, + .model_length = lengthof(Lproduct), + .model = Lproduct, + .device_version_length = lengthof(device_info.device_version), + .device_version = Ldevice_version, + .serial_number_length = lengthof(device_info.serial_number), + .serial_number = Lserial_number Lserial_number, }; -#define DEFINE_STORAGE_INFO(name) \ +#define DEFINE_STORAGE_INFO(name) \ static name##_mtp_storage_info_t name##_storage_info = { \ .storage_type = MTP_ST_FIXED_RAM, \ .filesystem_type = MTP_FT_GENERIC_FLAT, \ @@ -2343,7 +2328,7 @@ int main(void) { FOR_EACH_STORAGE(DEFINE_STORAGE_INFO) /* Standard USB Descriptors */ FOR_EACH_STRING_DESCRIPTOR(DEFINE_STRING_DESCRIPTOR) - DEFINE_STRING_DESCRIPTOR(const, product83) + DEFINE_STRING_DESCRIPTOR(const, product84) const static usb_string_descriptor_t *strings[] = { #define ADDRESSOF_STRING_DESCRIPTOR(const, name) &name, FOR_EACH_STRING_DESCRIPTOR(ADDRESSOF_STRING_DESCRIPTOR) @@ -2426,7 +2411,7 @@ int main(void) { .bMaxPacketSize0 = 0x40u, .idVendor = 0x0451u, .idProduct = 0xE010u, - .bcdDevice = 0x240u, /* 2.40 */ + .bcdDevice = 0x260u, /* 2.60 */ .iManufacturer = Imanufacturer, .iProduct = Iproduct, .iSerialNumber = Iserial_number, @@ -2440,68 +2425,34 @@ int main(void) { .strings = strings, }; const system_info_t *info = os_GetSystemInfo(); - for (mtp_byte_t i = 0; i != MTP_MAX_PENDING_EVENTS; ++i) - global.events[i].container.type = MTP_BT_EVENT; - mtp_byte_t *device_info_strings = &device_info.model_length; - if (info->hardwareType & 1) { - *device_info_strings++ = - lengthof(Lproduct83); - memcpy(device_info_strings, - Lproduct83, - sizeof(Lproduct83)); - device_info_strings += - sizeof(Lproduct83); - *(mtp_byte_t *)&device.bcdDevice = - 0x60; /* 2.60 */ - strings[Iproduct - 1] = &product83; - var_extensions[0x23][0] = 'p'; - } else { - *device_info_strings++ = - lengthof(Lproduct); - memcpy(device_info_strings, - Lproduct, - sizeof(Lproduct)); - device_info_strings += - sizeof(Lproduct); - } - { - char version[lengthof(Ldevice_version)]; - int count = - snprintf(version, lengthof(version), - "%u.%u.%u.%04u", - info->osMajorVersion, - info->osMinorVersion, - info->osRevisionVersion, - info->osBuildVersion); - mtp_byte_t size = count <= 0 ? 0 : count + 1; - *device_info_strings++ = size; - for (mtp_byte_t i = 0; i != size; ++i) { - *device_info_strings++ = version[i]; - device_info_strings++; - } - } - *device_info_strings++ = - lengthof(Lserial_number Lserial_number); - memcpy(device_info_strings, - Lserial_number, - sizeof(Lserial_number) - - sizeof(L'\0')); - device_info_strings += - sizeof(Lserial_number Lserial_number); - global.device_info = &device_info; - global.device_info_size = - device_info_strings - - (mtp_byte_t *)&device_info; -#define SET_STORAGE_INFO_PTR(name) \ - global.name##_storage_info = &name##_storage_info; - FOR_EACH_STORAGE(SET_STORAGE_INFO_PTR) wchar_t *serial_numbers[] = { &serial_number.bString[2 * lengthof(info->calcid)], - (wchar_t *)device_info_strings - 1, + &device_info.serial_number[4 * lengthof(info->calcid)], #define LIST_STORAGE_INFO_SERIAL(name) \ &name##_storage_info.volume_identifier[2 * lengthof(info->calcid)], FOR_EACH_STORAGE(LIST_STORAGE_INFO_SERIAL) }; + for (mtp_byte_t i = 0; i != MTP_MAX_PENDING_EVENTS; ++i) + global.events[i].container.type = MTP_BT_EVENT; + if (info->hardwareType & 1) + global.device_info_size = sizeof(mtp_device_info_t); + else { + *(mtp_byte_t *)&device.bcdDevice = 0x40; /* 2.40 */ + device_info.model_length = lengthof(Lproduct84); + memcpy(device_info.model, Lproduct84, sizeof(Lproduct84)); + memmove(&device_info.model[lengthof(Lproduct84)], + &device_info.device_version_length, + sizeof(mtp_device_info_t) - + offsetof(mtp_device_info_t, device_version_length)); + global.device_info_size = sizeof(mtp_device_info_t) - + sizeof(Lproduct) + sizeof(Lproduct84); + strings[Iproduct - 1] = &product84; + var_extensions[0x23][0] = 'e'; + } + global.device_info = &device_info; +#define SET_STORAGE_INFO_PTR(name) \ + global.name##_storage_info = &name##_storage_info; + FOR_EACH_STORAGE(SET_STORAGE_INFO_PTR) for (mtp_byte_t i = 2 * lengthof(info->calcid); i; ) { mtp_byte_t nibble = info->calcid[--i >> 1]; if (!(i & 1)) diff --git a/src/ui.c b/src/ui.c index 5e6394f..85a44cd 100644 --- a/src/ui.c +++ b/src/ui.c @@ -8,7 +8,9 @@ #include #include -static uint8_t static_rows, row, col, swap; +#define STATIC_ROWS 4 + +static uint8_t row, col, swap; #define buffer(n) (*(uint8_t (*)[4][LCD_WIDTH][LCD_HEIGHT >> 1])lcd_Ram)[(n) ^ swap] void ui_Init(void) { @@ -29,10 +31,6 @@ void ui_Init(void) { *(volatile uint8_t *volatile *)&lcd_UpBase = &buffer(0)[0][0]; } -void ui_Lock(void) { - static_rows = row; -} - void ui_Cleanup(void) { boot_ClearVRAM(); boot_TurnOn(); @@ -58,7 +56,7 @@ void outchar(char c) { sizeof(buffer(1)) - FONT_HEIGHT_BYTES); for (unsigned x = 0; x != LCD_WIDTH; ++x) { memcpy(&buffer(0)[x][0], &buffer(1)[x][0], - FONT_HEIGHT_BYTES * static_rows); + FONT_HEIGHT_BYTES * STATIC_ROWS); memset(&buffer(0)[x][((LCD_HEIGHT / FONT_HEIGHT - 1) * FONT_HEIGHT) >> 1], 0xFF, FONT_HEIGHT_BYTES); } diff --git a/src/ui.h b/src/ui.h index d998800..e7f3eaf 100644 --- a/src/ui.h +++ b/src/ui.h @@ -2,7 +2,6 @@ #define UI_H void ui_Init(void); -void ui_Lock(void); void ui_Cleanup(void); #endif diff --git a/src/var.asm b/src/var.asm index 396f470..1954a5e 100644 --- a/src/var.asm +++ b/src/var.asm @@ -6,8 +6,9 @@ private ti.DataSize private ti.DelVarArc private ti.EquObj - private ti.Get_Tok_Strng + private ti.flags private ti.GroupObj + private ti.Get_Tok_Strng private ti.GroupObj private ti.Mov9ToOP1 private ti.OP1 @@ -17,19 +18,13 @@ private ti.ProgObj private ti.ProtProgObj private ti.PushErrorHandler - private ti.flags private ti.tAns - private ti.tExtTok private ti.tRecurn private ti.tVarLst private ti.tVarOut include 'ti84pceg.inc' - private ImageObj - private tVarImage1 private varTypeMask -ImageObj := $1A -tVarImage1 := $50 varTypeMask := $3F private DELETE_VAR_NOT_DELETED @@ -129,16 +124,11 @@ _get_var_data_ptr: ex de,hl bit 15,bc ret nz - ex de,hl - call ti.Sym_Prog_non_t_Lst - jq z,.named - ld c,2 -.named: - ex de,hl - ld de,10 - add hl,de - ld e,c - add hl,de + ld bc,9 + add hl,bc + ld c,(hl) + add hl,bc + inc hl ret section .text @@ -234,11 +224,6 @@ _arc_unarc_var: ex (sp),iy push de .enter: - ld a,(de) - cp a,'A' - ret c - cp a,ti.tAns - ret z ld hl,.return call ti.PushErrorHandler lea hl,iy @@ -270,8 +255,6 @@ _get_var_file_name: sub a,(ti.AppVarObj-ti.ProtProgObj-1) shl 1 sub a,(ti.GroupObj-ti.AppVarObj+1) shl 1 jq c,.named - sub a,(ImageObj-ti.GroupObj-1) shl 1 - jq z,.image ld a,(de) cp a,'.' jq z,.namedEnter @@ -348,12 +331,6 @@ _get_var_file_name: ld a,13 sub a,c ret -.image: - inc de - ld a,(de) - ld de,_image_name+1 - add a,tVarImage1 - ld (de),a .list: dec de .token: @@ -367,10 +344,6 @@ _get_var_file_name: jq .named section .data - public _image_name -_image_name: - db ti.tExtTok,tVarImage1 - public _var_extensions _var_extensions: db "xnxlxmxyxsxpxpci" diff --git a/src/var.h b/src/var.h index 072fb33..36289b5 100644 --- a/src/var.h +++ b/src/var.h @@ -69,7 +69,7 @@ uint8_t create_var(const var_name_t *var_name, const void *data, size_t size); uint8_t arc_unarc_var(const var_name_t *var_name); uint8_t get_var_file_name(const var_name_t *var_name, - wchar_t file_name[MAX_FILE_NAME_LENGTH]); + wchar_t file_name[13]); #ifdef __cplusplus }