Blame usx2yloader/tascam_loader.asm

Packit e67170
;
Packit e67170
;   Second stage AN2131QC (aka EzUSB) loader
Packit e67170
;
Packit e67170
;	
Packit e67170
;   Copyright (c) 2004-2005 Martin Langer <martin-langer@gmx.de>
Packit e67170
;
Packit e67170
;   Written for Tascam US-122/US-224/US-428 audio/MIDI devices
Packit e67170
;
Packit e67170
;   This program is free software; you can redistribute it and/or
Packit e67170
;   modify it under the terms of the GNU General Public License
Packit e67170
;   as published by the Free Software Foundation; either version 2
Packit e67170
;   of the License, or any later version.
Packit e67170
;
Packit e67170
;   This program is distributed in the hope that it will be useful,
Packit e67170
;   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit e67170
;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Packit e67170
;   GNU General Public License for more details.
Packit e67170
;
Packit e67170
;   You should have received a copy of the GNU General Public License
Packit e67170
;   along with this program; if not, write to the Free Software
Packit e67170
;   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Packit e67170
;
Packit e67170
;
Packit e67170
Packit e67170
.inc	"an2131.asm"
Packit e67170
Packit e67170
Packit e67170
; ====================================================== interrupt vectors ===
Packit e67170
Packit e67170
	.org	0x0000			; reset vector
Packit e67170
	ljmp    init
Packit e67170
Packit e67170
	.org	0x0043			; int2 vector (USB)
Packit e67170
	ljmp	usb_jump_table		; autovector will replace byte 45
Packit e67170
Packit e67170
Packit e67170
; =================================================================== init ===
Packit e67170
Packit e67170
init:
Packit e67170
	mov	sp, #20h		; move stack pointer to 0x20
Packit e67170
Packit e67170
	mov	a, EIE
Packit e67170
	setb	acc.0			; enable int2 (USB Interrupt)
Packit e67170
	mov	EIE, a
Packit e67170
	
Packit e67170
	mov	dptr, #USBIRQ
Packit e67170
	mov	a, #00011111b
Packit e67170
	movx	@dptr, a		; clear Interrupt Request
Packit e67170
Packit e67170
	mov	dptr, #IN07IRQ
Packit e67170
	mov	a, #11111111b
Packit e67170
	movx	@dptr, a		; clear EP IN Interrupt Request
Packit e67170
Packit e67170
	mov	dptr, #OUT07IRQ
Packit e67170
	mov	a, #11111111b
Packit e67170
	movx	@dptr, a		; clear EP OUT Interrupt Request
Packit e67170
Packit e67170
	mov	dptr, #PORTCCFG
Packit e67170
	movx	a, @dptr
Packit e67170
	orl	a, #11000000b		; allow read and write on Port C
Packit e67170
	movx	@dptr, a
Packit e67170
Packit e67170
	mov	dptr, #USBBAV
Packit e67170
	movx	a, @dptr
Packit e67170
	orl	a, #00000001b		; enable Autovector feature
Packit e67170
	movx	@dptr, a
Packit e67170
Packit e67170
	mov	dptr, #USBIEN
Packit e67170
	movx	a, @dptr
Packit e67170
	orl	a, #00000101b		; enable 'Setup Data Available
Packit e67170
	movx    @dptr, a		; Interrupt Request' and 'Setup Token
Packit e67170
					; Interrupt Request'
Packit e67170
Packit e67170
	setb	ea			; enable global 8051 Interrupts
Packit e67170
Packit e67170
loop:
Packit e67170
	sjmp	loop
Packit e67170
Packit e67170
Packit e67170
; ========================================= usb interrupt service routines ===
Packit e67170
Packit e67170
usb_jump_table:
Packit e67170
	ljmp	setup_data_avail_isr	; setup data available 
Packit e67170
	.db	0		
Packit e67170
	ljmp	start_of_frame_isr	; Start of frame
Packit e67170
	.db	0
Packit e67170
	ljmp	setup_token_isr		; loading setup data
Packit e67170
	.db	0
Packit e67170
	ljmp	usb_suspend_isr		; USB suspend
Packit e67170
	.db	0
Packit e67170
	ljmp	usb_reset_isr		; USB reset
Packit e67170
	.db	0
Packit e67170
	ljmp	spare_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep0_in_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep0_out_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep1_in_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep1_out_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep2_in_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep2_out_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep3_in_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep3_out_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep4_in_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep4_out_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep5_in_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep5_out_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep6_in_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep6_out_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep7_in_isr
Packit e67170
	.db	0
Packit e67170
	ljmp	ep7_out_isr
Packit e67170
	.db	0
Packit e67170
Packit e67170
setup_data_avail_isr:
Packit e67170
	push	acc
Packit e67170
	push	dph
Packit e67170
	push	dpl
Packit e67170
	push	dph1
Packit e67170
	push	dpl1
Packit e67170
	push	dps
Packit e67170
	mov	a, EXIF
Packit e67170
	clr	acc.4			; clear USB Interrupt Request
Packit e67170
	mov	EXIF, a
Packit e67170
	mov	dptr, #USBIRQ
Packit e67170
	mov	a, #00000001b		; Setup Data Avail. Interrupt Request
Packit e67170
	movx	@dptr, a
Packit e67170
	pop	dps
Packit e67170
	pop	dpl1
Packit e67170
	pop	dph1
Packit e67170
	pop	dpl
Packit e67170
	pop	dph
Packit e67170
	pop	acc
Packit e67170
	reti
Packit e67170
Packit e67170
start_of_frame_isr:
Packit e67170
	push	acc
Packit e67170
	push	dph
Packit e67170
	push	dpl
Packit e67170
	push	dph1
Packit e67170
	push	dpl1
Packit e67170
	push	dps
Packit e67170
	mov	a, EXIF
Packit e67170
	clr	acc.4			; clear USB Interrupt Request
Packit e67170
	mov	EXIF, a
Packit e67170
	mov	dptr, #USBIRQ
Packit e67170
	mov	a, #00000010b		; Start of frame Interrupt Request
Packit e67170
	movx	@dptr, a
Packit e67170
	pop	dps
Packit e67170
	pop	dpl1
Packit e67170
	pop	dph1
Packit e67170
	pop	dpl
Packit e67170
	pop	dph
Packit e67170
	pop	acc
Packit e67170
	reti
Packit e67170
Packit e67170
setup_token_isr:
Packit e67170
	push	acc
Packit e67170
	push	dph
Packit e67170
	push	dpl
Packit e67170
	push	dph1
Packit e67170
	push	dpl1
Packit e67170
	push	dps
Packit e67170
	mov	a, EXIF
Packit e67170
	clr	acc.4			; clear USB Interrupt Request
Packit e67170
	mov	EXIF, a
Packit e67170
	mov	dptr, #USBIRQ
Packit e67170
	mov	a, #00000100b		; Setup Token Interrupt Request
Packit e67170
	movx	@dptr, a
Packit e67170
	pop	dps
Packit e67170
	pop	dpl1
Packit e67170
	pop	dph1
Packit e67170
	pop	dpl
Packit e67170
	pop	dph
Packit e67170
	pop	acc
Packit e67170
	reti
Packit e67170
Packit e67170
usb_suspend_isr:
Packit e67170
	push	acc
Packit e67170
	push	dph
Packit e67170
	push	dpl
Packit e67170
	push	dph1
Packit e67170
	push	dpl1
Packit e67170
	push	dps
Packit e67170
	mov	a, EXIF
Packit e67170
	clr	acc.4			; clear USB Interrupt Request
Packit e67170
	mov	EXIF, a
Packit e67170
	mov	dptr, #USBIRQ
Packit e67170
	mov	a, #00001000b		; USB Suspend Interrupt Request
Packit e67170
	movx	@dptr, a
Packit e67170
	pop	dps
Packit e67170
	pop	dpl1
Packit e67170
	pop	dph1
Packit e67170
	pop	dpl
Packit e67170
	pop	dph
Packit e67170
	pop	acc
Packit e67170
	reti
Packit e67170
Packit e67170
usb_reset_isr:
Packit e67170
	push	acc
Packit e67170
	push	dph
Packit e67170
	push	dpl
Packit e67170
	push	dph1
Packit e67170
	push	dpl1
Packit e67170
	push	dps
Packit e67170
	mov	a, EXIF
Packit e67170
	clr	acc.4			; clear USB Interrupt Request
Packit e67170
	mov	EXIF, a
Packit e67170
	mov	dptr, #USBIRQ
Packit e67170
	mov	a, #00010000b		; USB Reset Interrupt Request
Packit e67170
	movx	@dptr, a
Packit e67170
	pop	dps
Packit e67170
	pop	dpl1
Packit e67170
	pop	dph1
Packit e67170
	pop	dpl
Packit e67170
	pop	dph
Packit e67170
	pop	acc
Packit e67170
	reti
Packit e67170
	
Packit e67170
spare_isr:
Packit e67170
	reti
Packit e67170
ep0_in_isr:
Packit e67170
	reti
Packit e67170
ep0_out_isr:
Packit e67170
	reti
Packit e67170
ep1_in_isr:
Packit e67170
	reti
Packit e67170
ep1_out_isr:
Packit e67170
	reti
Packit e67170
ep2_in_isr:
Packit e67170
	reti
Packit e67170
ep2_out_isr:
Packit e67170
	reti
Packit e67170
ep3_in_isr:
Packit e67170
	reti
Packit e67170
ep3_out_isr:
Packit e67170
	reti
Packit e67170
ep4_in_isr:
Packit e67170
	reti
Packit e67170
ep4_out_isr:
Packit e67170
	reti
Packit e67170
ep5_in_isr:
Packit e67170
	reti
Packit e67170
ep5_out_isr:
Packit e67170
	reti
Packit e67170
ep6_in_isr:
Packit e67170
	reti
Packit e67170
ep6_out_isr:
Packit e67170
	reti
Packit e67170
ep7_in_isr:
Packit e67170
	reti
Packit e67170
ep7_out_isr:
Packit e67170
	reti