From 2b5a224a4f47d89b67057aaf2942e4b58de6c138 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sun, 20 Apr 2025 14:22:21 +1000 Subject: [PATCH] ch376-native: refactor: moved drive index tracking logic out of drivers into usb framework --- .vscode/settings.json | 4 +- .../HBIOS/ch376-native/base-drv/enumerate.c.s | 109 ++++++++++++++---- .../base-drv/enumerate_storage.c.s | 2 +- .../ch376-native/base-drv/usb-base-drv.c.s | 12 +- .../HBIOS/ch376-native/scsi-drv/scsi-init.c.s | 29 ++--- .../source-doc/base-drv/enumerate.c | 24 +++- .../source-doc/base-drv/enumerate.h | 3 +- .../source-doc/base-drv/enumerate_storage.c | 2 +- .../source-doc/base-drv/enumerate_storage.h | 2 +- .../source-doc/base-drv/usb-base-drv.c | 3 - .../source-doc/scsi-drv/scsi-init.c | 3 +- .../source-doc/ufi-drv/ufi-init.c | 3 +- .../HBIOS/ch376-native/ufi-drv/ufi-init.c.s | 103 ++++++++--------- 13 files changed, 180 insertions(+), 119 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b1314ed9..a1edd90b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,6 +21,8 @@ "usb-base-drv.h": "c", "critical-section.h": "c", "enumerate.h": "c", - "ch376inc.h": "c" + "ch376inc.h": "c", + "enumerate_storage.h": "c", + "work-area.h": "c" } } diff --git a/Source/HBIOS/ch376-native/base-drv/enumerate.c.s b/Source/HBIOS/ch376-native/base-drv/enumerate.c.s index d6ec0f46..4a86dcf6 100644 --- a/Source/HBIOS/ch376-native/base-drv/enumerate.c.s +++ b/Source/HBIOS/ch376-native/base-drv/enumerate.c.s @@ -322,7 +322,7 @@ _op_parse_endpoint: jr l_op_parse_endpoint_00104 ;source-doc/base-drv/enumerate.c:63: case USB_IS_MASS_STORAGE: { l_op_parse_endpoint_00102: -;source-doc/base-drv/enumerate.c:64: parse_endpoints(device, endpoint); +;source-doc/base-drv/enumerate.c:64: parse_endpoints((device_config_storage *)device, endpoint); push bc ld l,(ix-2) ld h,(ix-1) @@ -923,37 +923,102 @@ l_read_all_configs_00112: ld sp, ix pop ix ret -;source-doc/base-drv/enumerate.c:189: usb_error enumerate_all_devices(void) { +;source-doc/base-drv/enumerate.c:189: static uint8_t count_storage_devs(enumeration_state *state) { +; --------------------------------- +; Function count_storage_devs +; --------------------------------- +_count_storage_devs: + push ix + ld ix,0 + add ix,sp +;source-doc/base-drv/enumerate.c:192: do { + ld c,0x01 +l_count_storage_devs_00106: +;source-doc/base-drv/enumerate.c:193: device_config_storage *const storage_device = (device_config_storage *)get_usb_device_config(index); + push bc + ld a, c + call _get_usb_device_config + pop bc +;source-doc/base-drv/enumerate.c:195: if (storage_device == NULL) + ld a, d + or e + jr Z,l_count_storage_devs_00108 +;source-doc/base-drv/enumerate.c:198: const usb_device_type t = storage_device->type; + ld l, e + ld h, d + ld a, (hl) + and 0x0f +;source-doc/base-drv/enumerate.c:200: if (t == USB_IS_FLOPPY || t == USB_IS_MASS_STORAGE) + cp 0x01 + jr Z,l_count_storage_devs_00103 + sub 0x02 + jr NZ,l_count_storage_devs_00107 +l_count_storage_devs_00103: +;source-doc/base-drv/enumerate.c:201: storage_device->drive_index = state->storage_count++; + ld hl,0x0010 + add hl, de + ex de, hl + ld l,(ix+4) + ld h,(ix+5) + inc hl + ld a, (hl) + ld b, a + inc b + ld (hl), b + ld (de), a +l_count_storage_devs_00107: +;source-doc/base-drv/enumerate.c:203: } while (++index != MAX_NUMBER_OF_DEVICES + 1); + inc c + ld a, c + sub 0x07 + jr NZ,l_count_storage_devs_00106 +l_count_storage_devs_00108: +;source-doc/base-drv/enumerate.c:205: return state->storage_count; + ld l,(ix+4) + ld h,(ix+5) + inc hl + ld l, (hl) +;source-doc/base-drv/enumerate.c:206: } + pop ix + ret +;source-doc/base-drv/enumerate.c:208: usb_error enumerate_all_devices(void) { ; --------------------------------- ; Function enumerate_all_devices ; --------------------------------- _enumerate_all_devices: push ix - dec sp -;source-doc/base-drv/enumerate.c:190: _usb_state *const work_area = get_usb_work_area(); -;source-doc/base-drv/enumerate.c:192: memset(&state, 0, sizeof(enumeration_state)); + ld ix,0 + add ix,sp + push af +;source-doc/base-drv/enumerate.c:209: _usb_state *const work_area = get_usb_work_area(); +;source-doc/base-drv/enumerate.c:211: memset(&state, 0, sizeof(enumeration_state)); ld hl,0 add hl, sp - ld e,l - ld d,h - ld (hl),0x00 -;source-doc/base-drv/enumerate.c:193: state.next_device_address = 0; - ld c, e - ld b, d xor a - ld (bc), a -;source-doc/base-drv/enumerate.c:195: usb_error result = read_all_configs(&state); - push bc - push de + ld (hl), a + inc hl + ld (hl), a +;source-doc/base-drv/enumerate.c:213: usb_error result = read_all_configs(&state); + ld hl,0 + add hl, sp + push hl + push hl call _read_all_configs pop af + ld c, l + pop hl +;source-doc/base-drv/enumerate.c:215: count_storage_devs(&state); + push bc + push hl + call _count_storage_devs + pop af pop bc -;source-doc/base-drv/enumerate.c:197: work_area->count_of_detected_usb_devices = state.next_device_address; - ld de,_x + 1 - ld a, (bc) - ld (de), a -;source-doc/base-drv/enumerate.c:200: return result; -;source-doc/base-drv/enumerate.c:201: } - inc sp +;source-doc/base-drv/enumerate.c:217: work_area->count_of_detected_usb_devices = state.next_device_address; + ld a,(ix-2) + ld ((_x + 1)),a +;source-doc/base-drv/enumerate.c:220: return result; + ld l, c +;source-doc/base-drv/enumerate.c:221: } + ld sp, ix pop ix ret diff --git a/Source/HBIOS/ch376-native/base-drv/enumerate_storage.c.s b/Source/HBIOS/ch376-native/base-drv/enumerate_storage.c.s index d8e57ed5..0b85b094 100644 --- a/Source/HBIOS/ch376-native/base-drv/enumerate_storage.c.s +++ b/Source/HBIOS/ch376-native/base-drv/enumerate_storage.c.s @@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a ;-------------------------------------------------------- ; code ;-------------------------------------------------------- -;source-doc/base-drv/enumerate_storage.c:5: void parse_endpoints(device_config *const storage_dev, const endpoint_descriptor const *pEndpoint) { +;source-doc/base-drv/enumerate_storage.c:5: void parse_endpoints(device_config_storage *const storage_dev, const endpoint_descriptor const *pEndpoint) { ; --------------------------------- ; Function parse_endpoints ; --------------------------------- diff --git a/Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.s b/Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.s index 314f6d9f..8006021c 100644 --- a/Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.s +++ b/Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.s @@ -33,8 +33,6 @@ _USB_MODULE_LEDS .EQU 0xff8a ; .area _INITIALIZED removed by z88dk -_storage_count: - DEFS 1 #ENDIF @@ -50,7 +48,7 @@ _storage_count: ;-------------------------------------------------------- ; code ;-------------------------------------------------------- -;source-doc/base-drv/usb-base-drv.c:6: uint8_t chnative_seek(const uint32_t lba, device_config_storage *const storage_device) __sdcccall(1) { +;source-doc/base-drv/usb-base-drv.c:3: uint8_t chnative_seek(const uint32_t lba, device_config_storage *const storage_device) __sdcccall(1) { ; --------------------------------- ; Function chnative_seek ; --------------------------------- @@ -60,7 +58,7 @@ _chnative_seek: add ix,sp ld c, l ld b, h -;source-doc/base-drv/usb-base-drv.c:7: storage_device->current_lba = lba; +;source-doc/base-drv/usb-base-drv.c:4: storage_device->current_lba = lba; ld h,(ix+5) ld a,(ix+4) add a,0x0c @@ -75,12 +73,10 @@ l_chnative_seek_00103: ld (hl), c inc hl ld (hl), b -;source-doc/base-drv/usb-base-drv.c:8: return 0; +;source-doc/base-drv/usb-base-drv.c:5: return 0; xor a -;source-doc/base-drv/usb-base-drv.c:9: } +;source-doc/base-drv/usb-base-drv.c:6: } pop ix pop hl pop bc jp (hl) -_storage_count: - DEFB +0x00 diff --git a/Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s b/Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s index c1e9efbb..e4be4af6 100644 --- a/Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s +++ b/Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s @@ -56,7 +56,7 @@ _chscsi_init: push ix ld ix,0 add ix,sp - push af + dec sp ;source-doc/scsi-drv/scsi-init.c:15: do { ld (ix-1),0x01 l_chscsi_init_00105: @@ -89,8 +89,10 @@ l_chscsi_init_00105: ld hl,scsi_init_str_1 call _print_string pop de -;source-doc/scsi-drv/scsi-init.c:27: print_uint16(storage_count); - ld hl, (_storage_count) +;source-doc/scsi-drv/scsi-init.c:27: print_uint16(storage_device->drive_index); + ld hl,16 + add hl,de + ld l, (hl) ld h,0x00 push de call _print_uint16 @@ -98,35 +100,24 @@ l_chscsi_init_00105: ld hl,scsi_init_str_2 call _print_string pop de -;source-doc/scsi-drv/scsi-init.c:29: storage_device->drive_index = storage_count++; - ld hl,0x0010 - add hl, de - ld c, l - ld b, h - ld hl,_storage_count - ld a, (hl) - ld (ix-2),a - inc (hl) - ld a,(ix-2) - ld (bc), a -;source-doc/scsi-drv/scsi-init.c:30: scsi_sense_init(storage_device); +;source-doc/scsi-drv/scsi-init.c:29: scsi_sense_init(storage_device); push de push de call _scsi_sense_init pop af pop de -;source-doc/scsi-drv/scsi-init.c:31: dio_add_entry(ch_scsi_fntbl, storage_device); +;source-doc/scsi-drv/scsi-init.c:30: dio_add_entry(ch_scsi_fntbl, storage_device); ld hl,_ch_scsi_fntbl call _dio_add_entry l_chscsi_init_00106: -;source-doc/scsi-drv/scsi-init.c:34: } while (++index != MAX_NUMBER_OF_DEVICES + 1); +;source-doc/scsi-drv/scsi-init.c:33: } while (++index != MAX_NUMBER_OF_DEVICES + 1); inc (ix-1) ld a,(ix-1) sub 0x07 jr NZ,l_chscsi_init_00105 l_chscsi_init_00108: -;source-doc/scsi-drv/scsi-init.c:35: } - ld sp, ix +;source-doc/scsi-drv/scsi-init.c:34: } + inc sp pop ix ret scsi_init_str_0: diff --git a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c index d294985b..aec85045 100644 --- a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c +++ b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c @@ -61,7 +61,7 @@ usb_error op_parse_endpoint(_working *const working) __sdcccall(1) { switch (working->usb_device) { case USB_IS_FLOPPY: case USB_IS_MASS_STORAGE: { - parse_endpoints(device, endpoint); + parse_endpoints((device_config_storage *)device, endpoint); break; } @@ -186,14 +186,34 @@ done: return result; } +static uint8_t count_storage_devs(enumeration_state *state) { + + uint8_t index = 1; + do { + device_config_storage *const storage_device = (device_config_storage *)get_usb_device_config(index); + + if (storage_device == NULL) + break; + + const usb_device_type t = storage_device->type; + + if (t == USB_IS_FLOPPY || t == USB_IS_MASS_STORAGE) + storage_device->drive_index = state->storage_count++; + + } while (++index != MAX_NUMBER_OF_DEVICES + 1); + + return state->storage_count; +} + usb_error enumerate_all_devices(void) { _usb_state *const work_area = get_usb_work_area(); enumeration_state state; memset(&state, 0, sizeof(enumeration_state)); - state.next_device_address = 0; usb_error result = read_all_configs(&state); + count_storage_devs(&state); + work_area->count_of_detected_usb_devices = state.next_device_address; done: diff --git a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.h b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.h index f8f971b7..f057a5ce 100644 --- a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.h +++ b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.h @@ -8,7 +8,8 @@ #define MAX_CONFIG_SIZE 140 typedef struct { - uint8_t next_device_address; + uint8_t next_device_address; /* Track the count of installed usb devices*/ + uint8_t storage_count; /* Track the count of storage devices (scsi, ufi) */ } enumeration_state; typedef struct __working { diff --git a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.c b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.c index 289182d9..b2ab79ef 100644 --- a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.c +++ b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.c @@ -2,7 +2,7 @@ #include "protocol.h" #include -void parse_endpoints(device_config *const storage_dev, const endpoint_descriptor const *pEndpoint) { +void parse_endpoints(device_config_storage *const storage_dev, const endpoint_descriptor const *pEndpoint) { if (!(pEndpoint->bmAttributes & 0x02)) return; diff --git a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.h b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.h index 3f4a3508..849fa3a4 100644 --- a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.h +++ b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.h @@ -3,6 +3,6 @@ #include "protocol.h" -extern void parse_endpoints(device_config *const storage_dev, const endpoint_descriptor const *pEndpoint); +extern void parse_endpoints(device_config_storage *const storage_dev, const endpoint_descriptor const *pEndpoint); #endif diff --git a/Source/HBIOS/ch376-native/source-doc/base-drv/usb-base-drv.c b/Source/HBIOS/ch376-native/source-doc/base-drv/usb-base-drv.c index 3320fd4d..928b24f4 100644 --- a/Source/HBIOS/ch376-native/source-doc/base-drv/usb-base-drv.c +++ b/Source/HBIOS/ch376-native/source-doc/base-drv/usb-base-drv.c @@ -1,8 +1,5 @@ #include "usb-base-drv.h" -/* The total number of storage devices (scsi, ufi) */ -uint8_t storage_count = 0; - uint8_t chnative_seek(const uint32_t lba, device_config_storage *const storage_device) __sdcccall(1) { storage_device->current_lba = lba; return 0; diff --git a/Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi-init.c b/Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi-init.c index 5032703b..cbcaed45 100644 --- a/Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi-init.c +++ b/Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi-init.c @@ -24,9 +24,8 @@ void chscsi_init(void) { print_string("\r\nUSB: MASS STORAGE @ $"); print_uint16(index); print_string(":$"); - print_uint16(storage_count); + print_uint16(storage_device->drive_index); print_string(" $"); - storage_device->drive_index = storage_count++; scsi_sense_init(storage_device); dio_add_entry(ch_scsi_fntbl, storage_device); } diff --git a/Source/HBIOS/ch376-native/source-doc/ufi-drv/ufi-init.c b/Source/HBIOS/ch376-native/source-doc/ufi-drv/ufi-init.c index 9ddcebb0..5ba62e95 100644 --- a/Source/HBIOS/ch376-native/source-doc/ufi-drv/ufi-init.c +++ b/Source/HBIOS/ch376-native/source-doc/ufi-drv/ufi-init.c @@ -23,9 +23,8 @@ void chufi_init(void) { print_string("\r\nUSB: FLOPPY @ $"); print_uint16(index); print_string(":$"); - print_uint16(storage_count); + print_uint16(storage_device->drive_index); print_string(" $"); - storage_device->drive_index = storage_count++; dio_add_entry(ch_ufi_fntbl, storage_device); } diff --git a/Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s b/Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s index fa74e62a..627967a4 100644 --- a/Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s +++ b/Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s @@ -56,7 +56,7 @@ _chufi_init: push ix ld ix,0 add ix,sp - push af + dec sp ;source-doc/ufi-drv/ufi-init.c:14: do { ld (ix-1),0x01 l_chufi_init_00105: @@ -89,8 +89,10 @@ l_chufi_init_00105: ld hl,ufi_init_str_1 call _print_string pop de -;source-doc/ufi-drv/ufi-init.c:26: print_uint16(storage_count); - ld hl, (_storage_count) +;source-doc/ufi-drv/ufi-init.c:26: print_uint16(storage_device->drive_index); + ld hl,16 + add hl,de + ld l, (hl) ld h,0x00 push de call _print_uint16 @@ -98,29 +100,18 @@ l_chufi_init_00105: ld hl,ufi_init_str_2 call _print_string pop de -;source-doc/ufi-drv/ufi-init.c:28: storage_device->drive_index = storage_count++; - ld hl,0x0010 - add hl, de - ld c, l - ld b, h - ld hl,_storage_count - ld a, (hl) - ld (ix-2),a - inc (hl) - ld a,(ix-2) - ld (bc), a -;source-doc/ufi-drv/ufi-init.c:29: dio_add_entry(ch_ufi_fntbl, storage_device); +;source-doc/ufi-drv/ufi-init.c:28: dio_add_entry(ch_ufi_fntbl, storage_device); ld hl,_ch_ufi_fntbl call _dio_add_entry l_chufi_init_00106: -;source-doc/ufi-drv/ufi-init.c:32: } while (++index != MAX_NUMBER_OF_DEVICES + 1); +;source-doc/ufi-drv/ufi-init.c:31: } while (++index != MAX_NUMBER_OF_DEVICES + 1); inc (ix-1) ld a,(ix-1) sub 0x07 jr NZ,l_chufi_init_00105 l_chufi_init_00108: -;source-doc/ufi-drv/ufi-init.c:33: } - ld sp, ix +;source-doc/ufi-drv/ufi-init.c:32: } + inc sp pop ix ret ufi_init_str_0: @@ -134,7 +125,7 @@ ufi_init_str_1: ufi_init_str_2: DEFM " $" DEFB 0x00 -;source-doc/ufi-drv/ufi-init.c:35: uint32_t chufi_get_cap(device_config *const dev) { +;source-doc/ufi-drv/ufi-init.c:34: uint32_t chufi_get_cap(device_config *const dev) { ; --------------------------------- ; Function chufi_get_cap ; --------------------------------- @@ -145,7 +136,7 @@ _chufi_get_cap: ld hl, -72 add hl, sp ld sp, hl -;source-doc/ufi-drv/ufi-init.c:37: memset(&response, 0, sizeof(ufi_format_capacities_response)); +;source-doc/ufi-drv/ufi-init.c:36: memset(&response, 0, sizeof(ufi_format_capacities_response)); ld hl,0 add hl, sp ld b,0x12 @@ -156,7 +147,7 @@ l_chufi_get_cap_00112: ld (hl), a inc hl djnz l_chufi_get_cap_00112 -;source-doc/ufi-drv/ufi-init.c:39: wait_for_device_ready(dev, 25); +;source-doc/ufi-drv/ufi-init.c:38: wait_for_device_ready(dev, 25); ld a,0x19 push af inc sp @@ -166,7 +157,7 @@ l_chufi_get_cap_00112: call _wait_for_device_ready pop af inc sp -;source-doc/ufi-drv/ufi-init.c:43: ufi_inquiry(dev, &inquiry); +;source-doc/ufi-drv/ufi-init.c:42: ufi_inquiry(dev, &inquiry); ld hl,36 add hl, sp push hl @@ -175,7 +166,7 @@ l_chufi_get_cap_00112: push hl call _ufi_inquiry pop af -;source-doc/ufi-drv/ufi-init.c:45: wait_for_device_ready(dev, 15); +;source-doc/ufi-drv/ufi-init.c:44: wait_for_device_ready(dev, 15); ld h,0x0f ex (sp),hl inc sp @@ -185,7 +176,7 @@ l_chufi_get_cap_00112: call _wait_for_device_ready pop af inc sp -;source-doc/ufi-drv/ufi-init.c:47: const usb_error result = ufi_read_frmt_caps(dev, &response); +;source-doc/ufi-drv/ufi-init.c:46: const usb_error result = ufi_read_frmt_caps(dev, &response); ld hl,0 add hl, sp push hl @@ -196,27 +187,27 @@ l_chufi_get_cap_00112: pop af pop af ld a, l -;source-doc/ufi-drv/ufi-init.c:48: if (result != USB_ERR_OK) +;source-doc/ufi-drv/ufi-init.c:47: if (result != USB_ERR_OK) or a jr Z,l_chufi_get_cap_00102 -;source-doc/ufi-drv/ufi-init.c:49: return 0; +;source-doc/ufi-drv/ufi-init.c:48: return 0; ld hl,0x0000 ld e, l ld d, l jr l_chufi_get_cap_00103 l_chufi_get_cap_00102: -;source-doc/ufi-drv/ufi-init.c:51: return convert_from_msb_first(response.descriptors[0].number_of_blocks); +;source-doc/ufi-drv/ufi-init.c:50: return convert_from_msb_first(response.descriptors[0].number_of_blocks); ld hl,4 add hl, sp push hl call _convert_from_msb_first pop af l_chufi_get_cap_00103: -;source-doc/ufi-drv/ufi-init.c:52: } +;source-doc/ufi-drv/ufi-init.c:51: } ld sp, ix pop ix ret -;source-doc/ufi-drv/ufi-init.c:54: uint8_t chufi_read(device_config_storage *const dev, uint8_t *const buffer) { +;source-doc/ufi-drv/ufi-init.c:53: uint8_t chufi_read(device_config_storage *const dev, uint8_t *const buffer) { ; --------------------------------- ; Function chufi_read ; --------------------------------- @@ -227,7 +218,7 @@ _chufi_read: ld hl, -20 add hl, sp ld sp, hl -;source-doc/ufi-drv/ufi-init.c:56: if (wait_for_device_ready((device_config *)dev, 20) != 0) +;source-doc/ufi-drv/ufi-init.c:55: if (wait_for_device_ready((device_config *)dev, 20) != 0) ld c,(ix+4) ld b,(ix+5) push bc @@ -242,18 +233,18 @@ _chufi_read: pop bc or a jr Z,l_chufi_read_00102 -;source-doc/ufi-drv/ufi-init.c:57: return -1; // Not READY! +;source-doc/ufi-drv/ufi-init.c:56: return -1; // Not READY! ld l,0xff jr l_chufi_read_00109 l_chufi_read_00102: -;source-doc/ufi-drv/ufi-init.c:62: memset(&sense_codes, 0, sizeof(sense_codes)); +;source-doc/ufi-drv/ufi-init.c:61: memset(&sense_codes, 0, sizeof(sense_codes)); ld hl,0 add hl, sp xor a ld (hl), a inc hl ld (hl), a -;source-doc/ufi-drv/ufi-init.c:64: if (ufi_read_write_sector((device_config *)dev, false, dev->current_lba, 1, buffer, (uint8_t *)&sense_codes) != USB_ERR_OK) +;source-doc/ufi-drv/ufi-init.c:63: if (ufi_read_write_sector((device_config *)dev, false, dev->current_lba, 1, buffer, (uint8_t *)&sense_codes) != USB_ERR_OK) ld e,(ix+4) ld d,(ix+5) ld hl,12 @@ -286,11 +277,11 @@ l_chufi_read_00102: pop bc or a jr Z,l_chufi_read_00104 -;source-doc/ufi-drv/ufi-init.c:65: return -1; // general error +;source-doc/ufi-drv/ufi-init.c:64: return -1; // general error ld l,0xff jr l_chufi_read_00109 l_chufi_read_00104: -;source-doc/ufi-drv/ufi-init.c:68: memset(&response, 0, sizeof(response)); +;source-doc/ufi-drv/ufi-init.c:67: memset(&response, 0, sizeof(response)); push bc ld hl,4 add hl, sp @@ -303,7 +294,7 @@ l_chufi_read_00139: inc hl djnz l_chufi_read_00139 pop bc -;source-doc/ufi-drv/ufi-init.c:70: if ((result = ufi_request_sense((device_config *)dev, &response)) != USB_ERR_OK) +;source-doc/ufi-drv/ufi-init.c:69: if ((result = ufi_request_sense((device_config *)dev, &response)) != USB_ERR_OK) ld hl,2 add hl, sp push hl @@ -314,29 +305,29 @@ l_chufi_read_00139: ld a, l or a jr Z,l_chufi_read_00106 -;source-doc/ufi-drv/ufi-init.c:71: return -1; // error +;source-doc/ufi-drv/ufi-init.c:70: return -1; // error ld l,0xff jr l_chufi_read_00109 l_chufi_read_00106: -;source-doc/ufi-drv/ufi-init.c:75: const uint8_t sense_key = response.sense_key; +;source-doc/ufi-drv/ufi-init.c:74: const uint8_t sense_key = response.sense_key; ld hl,4 add hl, sp ld a, (hl) -;source-doc/ufi-drv/ufi-init.c:77: if (sense_key != 0) +;source-doc/ufi-drv/ufi-init.c:76: if (sense_key != 0) and 0x0f jr Z,l_chufi_read_00108 -;source-doc/ufi-drv/ufi-init.c:78: return -1; +;source-doc/ufi-drv/ufi-init.c:77: return -1; ld l,0xff jr l_chufi_read_00109 l_chufi_read_00108: -;source-doc/ufi-drv/ufi-init.c:80: return USB_ERR_OK; +;source-doc/ufi-drv/ufi-init.c:79: return USB_ERR_OK; ld l,0x00 l_chufi_read_00109: -;source-doc/ufi-drv/ufi-init.c:81: } +;source-doc/ufi-drv/ufi-init.c:80: } ld sp, ix pop ix ret -;source-doc/ufi-drv/ufi-init.c:83: usb_error chufi_write(device_config_storage *const dev, uint8_t *const buffer) { +;source-doc/ufi-drv/ufi-init.c:82: usb_error chufi_write(device_config_storage *const dev, uint8_t *const buffer) { ; --------------------------------- ; Function chufi_write ; --------------------------------- @@ -347,7 +338,7 @@ _chufi_write: ld hl, -20 add hl, sp ld sp, hl -;source-doc/ufi-drv/ufi-init.c:85: if (wait_for_device_ready((device_config *)dev, 20) != 0) +;source-doc/ufi-drv/ufi-init.c:84: if (wait_for_device_ready((device_config *)dev, 20) != 0) ld c,(ix+4) ld b,(ix+5) push bc @@ -362,18 +353,18 @@ _chufi_write: pop bc or a jr Z,l_chufi_write_00102 -;source-doc/ufi-drv/ufi-init.c:86: return -1; // Not READY! +;source-doc/ufi-drv/ufi-init.c:85: return -1; // Not READY! ld l,0xff jr l_chufi_write_00109 l_chufi_write_00102: -;source-doc/ufi-drv/ufi-init.c:90: memset(&sense_codes, 0, sizeof(sense_codes)); +;source-doc/ufi-drv/ufi-init.c:89: memset(&sense_codes, 0, sizeof(sense_codes)); ld hl,0 add hl, sp xor a ld (hl), a inc hl ld (hl), a -;source-doc/ufi-drv/ufi-init.c:91: if ((ufi_read_write_sector((device_config *)dev, true, dev->current_lba, 1, buffer, (uint8_t *)&sense_codes)) != USB_ERR_OK) { +;source-doc/ufi-drv/ufi-init.c:90: if ((ufi_read_write_sector((device_config *)dev, true, dev->current_lba, 1, buffer, (uint8_t *)&sense_codes)) != USB_ERR_OK) { ld e,(ix+4) ld d,(ix+5) ld hl,12 @@ -406,11 +397,11 @@ l_chufi_write_00102: pop bc or a jr Z,l_chufi_write_00104 -;source-doc/ufi-drv/ufi-init.c:92: return -1; +;source-doc/ufi-drv/ufi-init.c:91: return -1; ld l,0xff jr l_chufi_write_00109 l_chufi_write_00104: -;source-doc/ufi-drv/ufi-init.c:96: memset(&response, 0, sizeof(response)); +;source-doc/ufi-drv/ufi-init.c:95: memset(&response, 0, sizeof(response)); push bc ld hl,4 add hl, sp @@ -423,7 +414,7 @@ l_chufi_write_00139: inc hl djnz l_chufi_write_00139 pop bc -;source-doc/ufi-drv/ufi-init.c:98: if ((ufi_request_sense((device_config *)dev, &response)) != USB_ERR_OK) { +;source-doc/ufi-drv/ufi-init.c:97: if ((ufi_request_sense((device_config *)dev, &response)) != USB_ERR_OK) { ld hl,2 add hl, sp push hl @@ -434,25 +425,25 @@ l_chufi_write_00139: ld a, l or a jr Z,l_chufi_write_00106 -;source-doc/ufi-drv/ufi-init.c:99: return -1; +;source-doc/ufi-drv/ufi-init.c:98: return -1; ld l,0xff jr l_chufi_write_00109 l_chufi_write_00106: -;source-doc/ufi-drv/ufi-init.c:104: const uint8_t sense_key = response.sense_key; +;source-doc/ufi-drv/ufi-init.c:103: const uint8_t sense_key = response.sense_key; ld hl,4 add hl, sp ld a, (hl) -;source-doc/ufi-drv/ufi-init.c:106: if (sense_key != 0) +;source-doc/ufi-drv/ufi-init.c:105: if (sense_key != 0) and 0x0f jr Z,l_chufi_write_00108 -;source-doc/ufi-drv/ufi-init.c:107: return -1; +;source-doc/ufi-drv/ufi-init.c:106: return -1; ld l,0xff jr l_chufi_write_00109 l_chufi_write_00108: -;source-doc/ufi-drv/ufi-init.c:109: return USB_ERR_OK; +;source-doc/ufi-drv/ufi-init.c:108: return USB_ERR_OK; ld l,0x00 l_chufi_write_00109: -;source-doc/ufi-drv/ufi-init.c:110: } +;source-doc/ufi-drv/ufi-init.c:109: } ld sp, ix pop ix ret