USBReadData = usbrecbuf + 0 USBReadSequence = usbrecbuf + 256 + 0 USBReadBytesLeft = usbrecbuf + 256 + 1 USBReadStart = usbrecbuf + 256 + 2 USBWriteData = usbsndbuf + 0 USBWriteSequence = usbsndbuf + 256 + 0 USBWriteBytesLeft = usbsndbuf + 256 + 1 USBWriteStart = usbsndbuf + 256 + 2 ;------------------------------------------------------------------------------- init_usb: lda #0 sta USBReadStart sta USBReadData sta USBReadSequence sta USBReadBytesLeft sta USBWriteStart sta USBWriteData sta USBWriteSequence sta USBWriteBytesLeft rts ;------------------------------------------------------------------------------- ; checks if the pc wants to send something check_data_available: clc lda USBReadBytesLeft adc #$ff ; set carry if A!=0 lda USBReadBytesLeft rts ;------------------------------------------------------------------------------- ; gets one byte from usb get_byte: stx xs1+1 ; save X ; get current sequence number ldx USBReadSequence ; signal PC to start sending lda #$ff sta USBReadStart waitbyte: ; wait until byte has arrived cpx USBReadSequence beq waitbyte xs1: ldx #0 ; restore X ; get the byte lda USBReadData ; flags must be set according to read byte rts ;------------------------------------------------------------------------------- get_block: stx xs3+1 ; save X ; get current sequence number ldx USBReadSequence ; signal PC to start sending lda #$ff sta USBReadStart waitblock: ; wait until block has arrived cpx USBReadSequence beq waitblock xs3: ldx #0 ; restore X rts ;------------------------------------------------------------------------------- send_byte stx xs2+1 pha ; get current sequence number ; ldx USBWriteSequence sta USBWriteData ; send back the byte ; signal PC to start recieving lda #$ff sta USBWriteStart waitbyte2: lda USBWriteStart bne waitbyte2 xs2: ldx #0 pla rts ;------------------------------------------------------------------------------- send_block stx xs4+1 pha ; get current sequence number ; ldx USBWriteSequence ; signal PC to start recieving lda #$ff sta USBWriteStart waitblock2: lda USBWriteStart bne waitblock2 xs4: ldx #0 pla rts