?? logo.lst
字號:
0200 83 40 [05] jmp request_not_supported ; alternate than 0, stall.
0202 alternate_supported:
0202 19 02 [04] mov A, NO_CHANGE_PENDING
0204 31 27 [05] mov [ep0_in_flag], A
0206 83 35 [05] jmp initialize_no_data_control
0208 get_interface_status: ; GET STATUS
0208 19 02 [04] mov A, INTERFACE_STATUS_LENGTH
020A 31 25 [05] mov [maximum_data_count], A
020C 19 6E [04] mov A, (interface_status_table - control_read_table)
020E 31 23 [05] mov [data_start], A
0210 83 0C [05] jmp initialize_control_read
0212 get_interface_interface: ; GET INTERFACE
0212 19 01 [04] mov A, INTERFACE_ALTERNATE_LENGTH
0214 31 25 [05] mov [maximum_data_count], A
0216 19 70 [04] mov A, (interface_alternate_table - control_read_table)
0218 31 23 [05] mov [data_start], A
021A 83 0C [05] jmp initialize_control_read
021C set_interface_idle: ; SET IDLE
021C 1A FB [05] mov A, [wValuehi] ; test if new idle time
021E 16 00 [05] cmp A, 00h ; disables idle timer
0220 A2 30 [05] jz idle_timer_disable
0222 1A 30 [05] mov A, [idle_timer] ; test if less than 4ms left
0224 16 01 [05] cmp A, 01h
0226 A2 34 [05] jz set_idle_last_not_expired
0228 1A FB [05] mov A, [wValuehi] ; test if time left less than
022A 08 30 [06] sub A, [idle_timer] ; new idle value
022C D2 44 [05] jnc set_idle_new_timer_less
022E 82 50 [05] jmp set_idle_normal
0230 idle_timer_disable:
0230 31 2A [05] mov [idle], A ; disable idle timer
0232 82 5A [05] jmp set_idle_done
0234 set_idle_last_not_expired:
0234 19 02 [04] mov A, EVENT_PENDING ; send report immediately
0236 31 2D [05] mov [event_machine], A
0238 19 00 [04] mov A, 00h ; reset idle prescaler
023A 31 31 [05] mov [idle_prescaler], A
023C 1A FB [05] mov A, [wValuehi] ; set new idle value
023E 31 30 [05] mov [idle_timer], A
0240 31 2A [05] mov [idle], A
0242 82 5A [05] jmp set_idle_done
0244 set_idle_new_timer_less:
0244 19 00 [04] mov A, 00h
0246 31 31 [05] mov [idle_prescaler], A ; reset idle prescaler
0248 1A FB [05] mov A, [wValuehi]
024A 31 30 [05] mov [idle_timer], A ; update idle time value
024C 31 2A [05] mov [idle], A
024E 82 5A [05] jmp set_idle_done
0250 set_idle_normal:
0250 19 00 [04] mov A, 00h ; reset idle prescaler
0252 31 31 [05] mov [idle_prescaler], A
0254 1A FB [05] mov A, [wValuehi] ; update idle time value
0256 31 30 [05] mov [idle_timer], A
0258 31 2A [05] mov [idle], A
025A set_idle_done:
025A 19 02 [04] mov A, NO_CHANGE_PENDING ; respond with no-data control
025C 31 27 [05] mov [ep0_in_flag], A ; transaction
025E 83 35 [05] jmp initialize_no_data_control
0260 set_interface_protocol: ; SET PROTOCOL
0260 1A FA [05] mov A, [wValuelo]
0262 31 2B [05] mov [protocol], A ; set protocol value
0264 19 02 [04] mov A, NO_CHANGE_PENDING
0266 31 27 [05] mov [ep0_in_flag], A ; respond with no-data control
0268 83 35 [05] jmp initialize_no_data_control ; transaction
026A get_interface_report: ; GET REPORT
026A 19 80 [04] mov A, DATA_TOGGLE ; set data toggle to DATA ONE
026C 31 22 [05] mov [ep0_data_toggle], A
026E 19 01 [04] mov A, NAK_IN_OUT ; clear setup bit to write to
0270 2A 12 [05] iowr ep0_mode ; endpoint fifo
0272 1A F0 [05] mov A, [ep1_dmabuff0] ; copy over button data
0274 31 F8 [05] mov [ep0_dmabuff0], A
0276 1A F1 [05] mov A, [ep1_dmabuff1] ; copy horizontal data
0278 31 F9 [05] mov [ep0_dmabuff1], A
027A 1A F2 [05] mov A, [ep1_dmabuff2] ; copy vertical data
027C 31 FA [05] mov [ep0_dmabuff2], A
027E 19 02 [04] mov A, CONTROL_READ_DATA ; set state machine state
0280 31 26 [05] mov [ep0_in_machine], A
0282 1C 03 [04] mov X, 03h ; set number of byte to transfer to 3
0284 83 69 [05] jmp dmabuffer_load_done ; jump to finish transfer
0286 get_interface_idle: ; GET IDLE
0286 19 80 [04] mov A, DATA_TOGGLE ; set data toggle to DATA ONE
0288 31 22 [05] mov [ep0_data_toggle], A
028A 19 01 [04] mov A, NAK_IN_OUT ; clear setup bit to write to
028C 2A 12 [05] iowr ep0_mode ; endpoint fifo
028E 1A 2A [05] mov A, [idle] ; copy over idle time
0290 31 F8 [05] mov [ep0_dmabuff0], A
0292 19 02 [04] mov A, CONTROL_READ_DATA ; set state machine state
0294 31 26 [05] mov [ep0_in_machine], A
0296 1C 01 [04] mov X, 01h ; set number of byte to transfer to 3
0298 83 69 [05] jmp dmabuffer_load_done ; jump to finish transfer
029A get_interface_protocol: ; GET PROTOCOL
029A 19 01 [04] mov A, INTERFACE_PROTOCOL_LENGTH
029C 31 25 [05] mov [maximum_data_count], A ; get offset of device descriptor table
029E 1A 2B [05] mov A, [protocol]
02A0 10 01 [04] and A, 01h
02A2 A2 AA [05] jz boot_protocol
02A4 report_protocol:
02A4 19 72 [04] mov A, (interface_report_protocol - control_read_table)
02A6 31 23 [05] mov [data_start], A
02A8 83 0C [05] jmp initialize_control_read ; get ready to send data
02AA boot_protocol:
02AA 19 71 [04] mov A, (interface_boot_protocol - control_read_table)
02AC 31 23 [05] mov [data_start], A
02AE 83 0C [05] jmp initialize_control_read ; get ready to send data
02B0 get_interface_hid:
02B0 1A FB [05] mov A, [wValuehi]
02B2 16 21 [05] cmp A, 21h
02B4 A2 BC [05] jz get_interface_hid_descriptor
02B6 16 22 [05] cmp A, 22h
02B8 A2 C8 [05] jz get_interface_hid_report
02BA 83 40 [05] jmp request_not_supported
02BC get_interface_hid_descriptor: ; GET HID CLASS DESCRIPTOR
02BC 19 00 [04] mov A, 00h ; get hid decriptor length
02BE F7 24 [14] index hid_desc_table
02C0 31 25 [05] mov [maximum_data_count], A ; get offset of device descriptor table
02C2 19 24 [04] mov A, (hid_desc_table - control_read_table)
02C4 31 23 [05] mov [data_start], A
02C6 83 0C [05] jmp initialize_control_read ; get ready to send data
02C8 get_interface_hid_report: ; GET HID REPORT DESCRIPTOR
02C8 19 07 [04] mov A, 07h ; get hid report descriptor length
02CA F7 24 [14] index hid_desc_table
02CC 31 25 [05] mov [maximum_data_count], A ; get offset of device descriptor table
02CE 19 34 [04] mov A, (hid_report_desc_table - control_read_table)
02D0 31 23 [05] mov [data_start], A
02D2 83 0C [05] jmp initialize_control_read ; get ready to send data
;;************ ENDPOINT REQUESTS ************
02D4 clear_endpoint_feature: ; CLEAR FEATURE
02D4 1A FA [05] mov A, [wValuelo]
02D6 16 00 [05] cmp A, ENDPOINT_STALL
02D8 B3 40 [05] jnz request_not_supported
02DA 19 00 [04] mov A, 00h ; clear endpoint 1 stall
02DC 31 29 [05] mov [ep1_stall], A
02DE 19 02 [04] mov A, NO_CHANGE_PENDING ; respond with no-data control
02E0 31 27 [05] mov [ep0_in_flag], A
02E2 83 35 [05] jmp initialize_no_data_control
02E4 set_endpoint_feature: ; SET FEATURE
02E4 1A FA [05] mov A, [wValuelo]
02E6 16 00 [05] cmp A, ENDPOINT_STALL
02E8 B3 40 [05] jnz request_not_supported
02EA 19 FF [04] mov A, FFh ; stall endpoint 1
02EC 31 29 [05] mov [ep1_stall], A
02EE 19 02 [04] mov A, NO_CHANGE_PENDING ; respond with no-data control
02F0 31 27 [05] mov [ep0_in_flag], A
02F2 83 35 [05] jmp initialize_no_data_control
02F4 get_endpoint_status: ; GET STATUS
02F4 19 02 [04] mov A, ENDPOINT_STALL_LENGTH
02F6 31 25 [05] mov [maximum_data_count], A
02F8 1A 29 [05] mov A, [ep1_stall] ; test if endpoint 1 stalled
02FA 10 FF [04] and A, FFh
02FC B3 06 [05] jnz endpoint_stalled
02FE endpoint_not_stalled: ; send no-stall status
02FE 20 [04] NOP
02FF 1F [04] XPAGE
0300 19 6A [04] mov A, (endpoint_nostall_table - control_read_table)
0302 31 23 [05] mov [data_start], A
0304 83 0C [05] jmp initialize_control_read
0306 endpoint_stalled: ; send stall status
0306 19 6C [04] mov A, (endpoint_stall_table - control_read_table)
0308 31 23 [05] mov [data_start], A
030A 83 0C [05] jmp initialize_control_read
;;***************** CONTROL READ TRANSACTION **************
030C initialize_control_read:
030C 19 02 [04] mov A, TRANS_CONTROL_READ ; set transaction type to control read
030E 31 33 [05] mov [ep0_transtype], A
0310 19 80 [04] mov A, DATA_TOGGLE ; set data toggle to DATA ONE
0312 31 22 [05] mov [ep0_data_toggle], A
; if wLengthhi == 0
0314 1A FF [05] mov A, [wLengthhi] ; find lesser of requested and maximum
0316 16 00 [05] cmp A, 00h
0318 B3 24 [05] jnz initialize_control_read_done
; and wLengthlo < maximum_data_count
031A 1A FE [05] mov A, [wLengthlo] ; find lesser of requested and maximum
031C 17 25 [07] cmp A, [maximum_data_count] ; response lengths
031E D3 24 [05] jnc initialize_control_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -