Browse Source

ch376-native: refactor: moved drive index tracking logic out of drivers into usb framework

pull/592/head
Dean Netherton 9 months ago
parent
commit
2b5a224a4f
  1. 4
      .vscode/settings.json
  2. 109
      Source/HBIOS/ch376-native/base-drv/enumerate.c.s
  3. 2
      Source/HBIOS/ch376-native/base-drv/enumerate_storage.c.s
  4. 12
      Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.s
  5. 29
      Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s
  6. 24
      Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c
  7. 3
      Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.h
  8. 2
      Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.c
  9. 2
      Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.h
  10. 3
      Source/HBIOS/ch376-native/source-doc/base-drv/usb-base-drv.c
  11. 3
      Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi-init.c
  12. 3
      Source/HBIOS/ch376-native/source-doc/ufi-drv/ufi-init.c
  13. 103
      Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s

4
.vscode/settings.json

@ -21,6 +21,8 @@
"usb-base-drv.h": "c", "usb-base-drv.h": "c",
"critical-section.h": "c", "critical-section.h": "c",
"enumerate.h": "c", "enumerate.h": "c",
"ch376inc.h": "c"
"ch376inc.h": "c",
"enumerate_storage.h": "c",
"work-area.h": "c"
} }
} }

109
Source/HBIOS/ch376-native/base-drv/enumerate.c.s

@ -322,7 +322,7 @@ _op_parse_endpoint:
jr l_op_parse_endpoint_00104 jr l_op_parse_endpoint_00104
;source-doc/base-drv/enumerate.c:63: case USB_IS_MASS_STORAGE: { ;source-doc/base-drv/enumerate.c:63: case USB_IS_MASS_STORAGE: {
l_op_parse_endpoint_00102: 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 push bc
ld l,(ix-2) ld l,(ix-2)
ld h,(ix-1) ld h,(ix-1)
@ -923,37 +923,102 @@ l_read_all_configs_00112:
ld sp, ix ld sp, ix
pop ix pop ix
ret 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 ; Function enumerate_all_devices
; --------------------------------- ; ---------------------------------
_enumerate_all_devices: _enumerate_all_devices:
push ix 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 ld hl,0
add hl, sp 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 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 call _read_all_configs
pop af 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 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 pop ix
ret ret

2
Source/HBIOS/ch376-native/base-drv/enumerate_storage.c.s

@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; 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 ; Function parse_endpoints
; --------------------------------- ; ---------------------------------

12
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 ; .area _INITIALIZED removed by z88dk
_storage_count:
DEFS 1
#ENDIF #ENDIF
@ -50,7 +48,7 @@ _storage_count:
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; 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 ; Function chnative_seek
; --------------------------------- ; ---------------------------------
@ -60,7 +58,7 @@ _chnative_seek:
add ix,sp add ix,sp
ld c, l ld c, l
ld b, h 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 h,(ix+5)
ld a,(ix+4) ld a,(ix+4)
add a,0x0c add a,0x0c
@ -75,12 +73,10 @@ l_chnative_seek_00103:
ld (hl), c ld (hl), c
inc hl inc hl
ld (hl), b 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 xor a
;source-doc/base-drv/usb-base-drv.c:9: }
;source-doc/base-drv/usb-base-drv.c:6: }
pop ix pop ix
pop hl pop hl
pop bc pop bc
jp (hl) jp (hl)
_storage_count:
DEFB +0x00

29
Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s

@ -56,7 +56,7 @@ _chscsi_init:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af
dec sp
;source-doc/scsi-drv/scsi-init.c:15: do { ;source-doc/scsi-drv/scsi-init.c:15: do {
ld (ix-1),0x01 ld (ix-1),0x01
l_chscsi_init_00105: l_chscsi_init_00105:
@ -89,8 +89,10 @@ l_chscsi_init_00105:
ld hl,scsi_init_str_1 ld hl,scsi_init_str_1
call _print_string call _print_string
pop de 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 ld h,0x00
push de push de
call _print_uint16 call _print_uint16
@ -98,35 +100,24 @@ l_chscsi_init_00105:
ld hl,scsi_init_str_2 ld hl,scsi_init_str_2
call _print_string call _print_string
pop de 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
push de push de
call _scsi_sense_init call _scsi_sense_init
pop af pop af
pop de 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 ld hl,_ch_scsi_fntbl
call _dio_add_entry call _dio_add_entry
l_chscsi_init_00106: 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) inc (ix-1)
ld a,(ix-1) ld a,(ix-1)
sub 0x07 sub 0x07
jr NZ,l_chscsi_init_00105 jr NZ,l_chscsi_init_00105
l_chscsi_init_00108: 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 pop ix
ret ret
scsi_init_str_0: scsi_init_str_0:

24
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) { switch (working->usb_device) {
case USB_IS_FLOPPY: case USB_IS_FLOPPY:
case USB_IS_MASS_STORAGE: { case USB_IS_MASS_STORAGE: {
parse_endpoints(device, endpoint);
parse_endpoints((device_config_storage *)device, endpoint);
break; break;
} }
@ -186,14 +186,34 @@ done:
return result; 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_error enumerate_all_devices(void) {
_usb_state *const work_area = get_usb_work_area(); _usb_state *const work_area = get_usb_work_area();
enumeration_state state; enumeration_state state;
memset(&state, 0, sizeof(enumeration_state)); memset(&state, 0, sizeof(enumeration_state));
state.next_device_address = 0;
usb_error result = read_all_configs(&state); usb_error result = read_all_configs(&state);
count_storage_devs(&state);
work_area->count_of_detected_usb_devices = state.next_device_address; work_area->count_of_detected_usb_devices = state.next_device_address;
done: done:

3
Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.h

@ -8,7 +8,8 @@
#define MAX_CONFIG_SIZE 140 #define MAX_CONFIG_SIZE 140
typedef struct { 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; } enumeration_state;
typedef struct __working { typedef struct __working {

2
Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.c

@ -2,7 +2,7 @@
#include "protocol.h" #include "protocol.h"
#include <string.h> #include <string.h>
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)) if (!(pEndpoint->bmAttributes & 0x02))
return; return;

2
Source/HBIOS/ch376-native/source-doc/base-drv/enumerate_storage.h

@ -3,6 +3,6 @@
#include "protocol.h" #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 #endif

3
Source/HBIOS/ch376-native/source-doc/base-drv/usb-base-drv.c

@ -1,8 +1,5 @@
#include "usb-base-drv.h" #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) { uint8_t chnative_seek(const uint32_t lba, device_config_storage *const storage_device) __sdcccall(1) {
storage_device->current_lba = lba; storage_device->current_lba = lba;
return 0; return 0;

3
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_string("\r\nUSB: MASS STORAGE @ $");
print_uint16(index); print_uint16(index);
print_string(":$"); print_string(":$");
print_uint16(storage_count);
print_uint16(storage_device->drive_index);
print_string(" $"); print_string(" $");
storage_device->drive_index = storage_count++;
scsi_sense_init(storage_device); scsi_sense_init(storage_device);
dio_add_entry(ch_scsi_fntbl, storage_device); dio_add_entry(ch_scsi_fntbl, storage_device);
} }

3
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_string("\r\nUSB: FLOPPY @ $");
print_uint16(index); print_uint16(index);
print_string(":$"); print_string(":$");
print_uint16(storage_count);
print_uint16(storage_device->drive_index);
print_string(" $"); print_string(" $");
storage_device->drive_index = storage_count++;
dio_add_entry(ch_ufi_fntbl, storage_device); dio_add_entry(ch_ufi_fntbl, storage_device);
} }

103
Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s

@ -56,7 +56,7 @@ _chufi_init:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af
dec sp
;source-doc/ufi-drv/ufi-init.c:14: do { ;source-doc/ufi-drv/ufi-init.c:14: do {
ld (ix-1),0x01 ld (ix-1),0x01
l_chufi_init_00105: l_chufi_init_00105:
@ -89,8 +89,10 @@ l_chufi_init_00105:
ld hl,ufi_init_str_1 ld hl,ufi_init_str_1
call _print_string call _print_string
pop de 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 ld h,0x00
push de push de
call _print_uint16 call _print_uint16
@ -98,29 +100,18 @@ l_chufi_init_00105:
ld hl,ufi_init_str_2 ld hl,ufi_init_str_2
call _print_string call _print_string
pop de 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 ld hl,_ch_ufi_fntbl
call _dio_add_entry call _dio_add_entry
l_chufi_init_00106: 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) inc (ix-1)
ld a,(ix-1) ld a,(ix-1)
sub 0x07 sub 0x07
jr NZ,l_chufi_init_00105 jr NZ,l_chufi_init_00105
l_chufi_init_00108: 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 pop ix
ret ret
ufi_init_str_0: ufi_init_str_0:
@ -134,7 +125,7 @@ ufi_init_str_1:
ufi_init_str_2: ufi_init_str_2:
DEFM " $" DEFM " $"
DEFB 0x00 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 ; Function chufi_get_cap
; --------------------------------- ; ---------------------------------
@ -145,7 +136,7 @@ _chufi_get_cap:
ld hl, -72 ld hl, -72
add hl, sp add hl, sp
ld sp, hl 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 ld hl,0
add hl, sp add hl, sp
ld b,0x12 ld b,0x12
@ -156,7 +147,7 @@ l_chufi_get_cap_00112:
ld (hl), a ld (hl), a
inc hl inc hl
djnz l_chufi_get_cap_00112 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 ld a,0x19
push af push af
inc sp inc sp
@ -166,7 +157,7 @@ l_chufi_get_cap_00112:
call _wait_for_device_ready call _wait_for_device_ready
pop af pop af
inc sp 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 ld hl,36
add hl, sp add hl, sp
push hl push hl
@ -175,7 +166,7 @@ l_chufi_get_cap_00112:
push hl push hl
call _ufi_inquiry call _ufi_inquiry
pop af 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 ld h,0x0f
ex (sp),hl ex (sp),hl
inc sp inc sp
@ -185,7 +176,7 @@ l_chufi_get_cap_00112:
call _wait_for_device_ready call _wait_for_device_ready
pop af pop af
inc sp 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 ld hl,0
add hl, sp add hl, sp
push hl push hl
@ -196,27 +187,27 @@ l_chufi_get_cap_00112:
pop af pop af
pop af pop af
ld a, l 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 or a
jr Z,l_chufi_get_cap_00102 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 hl,0x0000
ld e, l ld e, l
ld d, l ld d, l
jr l_chufi_get_cap_00103 jr l_chufi_get_cap_00103
l_chufi_get_cap_00102: 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 ld hl,4
add hl, sp add hl, sp
push hl push hl
call _convert_from_msb_first call _convert_from_msb_first
pop af pop af
l_chufi_get_cap_00103: l_chufi_get_cap_00103:
;source-doc/ufi-drv/ufi-init.c:52: }
;source-doc/ufi-drv/ufi-init.c:51: }
ld sp, ix ld sp, ix
pop ix pop ix
ret 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 ; Function chufi_read
; --------------------------------- ; ---------------------------------
@ -227,7 +218,7 @@ _chufi_read:
ld hl, -20 ld hl, -20
add hl, sp add hl, sp
ld sp, hl 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 c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
push bc push bc
@ -242,18 +233,18 @@ _chufi_read:
pop bc pop bc
or a or a
jr Z,l_chufi_read_00102 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 ld l,0xff
jr l_chufi_read_00109 jr l_chufi_read_00109
l_chufi_read_00102: 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 ld hl,0
add hl, sp add hl, sp
xor a xor a
ld (hl), a ld (hl), a
inc hl inc hl
ld (hl), a 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 e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
ld hl,12 ld hl,12
@ -286,11 +277,11 @@ l_chufi_read_00102:
pop bc pop bc
or a or a
jr Z,l_chufi_read_00104 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 ld l,0xff
jr l_chufi_read_00109 jr l_chufi_read_00109
l_chufi_read_00104: 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 push bc
ld hl,4 ld hl,4
add hl, sp add hl, sp
@ -303,7 +294,7 @@ l_chufi_read_00139:
inc hl inc hl
djnz l_chufi_read_00139 djnz l_chufi_read_00139
pop bc 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 ld hl,2
add hl, sp add hl, sp
push hl push hl
@ -314,29 +305,29 @@ l_chufi_read_00139:
ld a, l ld a, l
or a or a
jr Z,l_chufi_read_00106 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 ld l,0xff
jr l_chufi_read_00109 jr l_chufi_read_00109
l_chufi_read_00106: 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 ld hl,4
add hl, sp add hl, sp
ld a, (hl) 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 and 0x0f
jr Z,l_chufi_read_00108 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 ld l,0xff
jr l_chufi_read_00109 jr l_chufi_read_00109
l_chufi_read_00108: 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 ld l,0x00
l_chufi_read_00109: l_chufi_read_00109:
;source-doc/ufi-drv/ufi-init.c:81: }
;source-doc/ufi-drv/ufi-init.c:80: }
ld sp, ix ld sp, ix
pop ix pop ix
ret 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 ; Function chufi_write
; --------------------------------- ; ---------------------------------
@ -347,7 +338,7 @@ _chufi_write:
ld hl, -20 ld hl, -20
add hl, sp add hl, sp
ld sp, hl 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 c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
push bc push bc
@ -362,18 +353,18 @@ _chufi_write:
pop bc pop bc
or a or a
jr Z,l_chufi_write_00102 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 ld l,0xff
jr l_chufi_write_00109 jr l_chufi_write_00109
l_chufi_write_00102: 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 ld hl,0
add hl, sp add hl, sp
xor a xor a
ld (hl), a ld (hl), a
inc hl inc hl
ld (hl), a 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 e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
ld hl,12 ld hl,12
@ -406,11 +397,11 @@ l_chufi_write_00102:
pop bc pop bc
or a or a
jr Z,l_chufi_write_00104 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 ld l,0xff
jr l_chufi_write_00109 jr l_chufi_write_00109
l_chufi_write_00104: 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 push bc
ld hl,4 ld hl,4
add hl, sp add hl, sp
@ -423,7 +414,7 @@ l_chufi_write_00139:
inc hl inc hl
djnz l_chufi_write_00139 djnz l_chufi_write_00139
pop bc 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 ld hl,2
add hl, sp add hl, sp
push hl push hl
@ -434,25 +425,25 @@ l_chufi_write_00139:
ld a, l ld a, l
or a or a
jr Z,l_chufi_write_00106 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 ld l,0xff
jr l_chufi_write_00109 jr l_chufi_write_00109
l_chufi_write_00106: 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 ld hl,4
add hl, sp add hl, sp
ld a, (hl) 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 and 0x0f
jr Z,l_chufi_write_00108 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 ld l,0xff
jr l_chufi_write_00109 jr l_chufi_write_00109
l_chufi_write_00108: 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 ld l,0x00
l_chufi_write_00109: l_chufi_write_00109:
;source-doc/ufi-drv/ufi-init.c:110: }
;source-doc/ufi-drv/ufi-init.c:109: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

Loading…
Cancel
Save