Avoid trash of zero page variable.

It's not save to presume any zero page variable to stay intact after using the Ethernet drivers to perform actual network I/O. In example a necessary ARP lookup may require network I/O in not anticipated scenarios. Therefore the tftp_filename is rather to be placed in a normal variable and copied to a zero page variable just-in-time.
This commit is contained in:
Oliver Schmidt 2017-04-10 09:06:18 +02:00
parent 39975cab33
commit 8745021d7d

View File

@ -20,6 +20,7 @@ TFTP_TIMER_MASK = $F8 ; mask lower two bits, means we wait for 8 x1/4
.export tftp_set_callback_vector
.export tftp_callback_vector
.export tftp_clear_callbacks
.export tftp_filename
.export tftp_filesize
.export tftp_upload_from_memory
.import ip65_process
@ -49,8 +50,6 @@ TFTP_TIMER_MASK = $F8 ; mask lower two bits, means we wait for 8 x1/4
.import timer_read
.exportzp tftp_filename = ptr3
.bss
@ -88,6 +87,7 @@ tftp_actual_server_ip: .res 4 ; this is read from the reply - it may n
tftp_just_set_new_load_address: .res 1
tftp_opcode: .res 2 ; will be set to 4 if we are doing a RRQ, or 7 if we are doing a DIR
tftp_filename: .res 2 ; pointer to null terminated name of file to upload/download
tftp_filesize: .res 2 ; will be set by tftp_download, needs to be set before calling tftp_upload_from_memory
tftp_bytes_remaining: .res 2
@ -238,6 +238,8 @@ send_request_packet:
sta tftp_state
ldax tftp_opcode
stax tftp_outp
ldax tftp_filename
stax ptr1
ldx #$01 ; we inc x/y at start of loop, so
ldy #$ff ; set them to be 1 below where we want the copy to begin
@ -245,7 +247,7 @@ send_request_packet:
inx
iny
bmi @error_in_send ; if we get to 0x80 bytes, we've gone too far
lda (tftp_filename),y
lda (ptr1),y
sta tftp_outp,x
bne @copy_filename_loop