]> git.alsa-project.org Git - alsa-firmware.git/commitdiff
Added open-source tascam_loader firmware
authorTakashi Iwai <tiwai@suse.de>
Thu, 31 Mar 2005 15:47:22 +0000 (15:47 +0000)
committerTakashi Iwai <tiwai@suse.de>
Thu, 31 Mar 2005 15:47:22 +0000 (15:47 +0000)
Added open-source tascam_loader firmware files
by Martin Langer <martin-langer@gmx.de>

New option "--enable-buildfw" is added to configure script
to build firmware files via as31.

configure.in
usx2yloader/Makefile.am
usx2yloader/an2131.asm [new file with mode: 0644]
usx2yloader/tascam_loader.asm [new file with mode: 0644]
usx2yloader/tascam_loader.ihx

index ac58bccd211be557fdf2d9699135be6980510492..531a64958579facae091fd270bc31fd393fa257f 100644 (file)
@@ -1,6 +1,6 @@
 AC_PREREQ(2.53)
 AC_INIT(hdsploader/tobin.c)
-AM_INIT_AUTOMAKE(alsa-firmware, 1.0.8)
+AM_INIT_AUTOMAKE(alsa-firmware, 1.0.9rc2)
 AC_PROG_CC
 AC_PROG_INSTALL
 AC_HEADER_STDC
@@ -13,9 +13,21 @@ AC_ARG_ENABLE(loader,
 AC_ARG_ENABLE(hotplug,
   [  --disable-hotplug       Disable the hotplug fw loader support],
   [hotplug="$enableval"],[hotplug=yes])
+AC_ARG_ENABLE(buildfw,
+  [  --enable-buildfw        Enable building fw from source files],
+  [buildfw="$enableval"],[buildfw=no])
+
+AC_PATH_PROGS(AS31, as31)
+AS31_FLAGS="-Fhex"
+AC_SUBST(AS31_FLAGS)
+
+if test x"${AS31}" = x"";  then
+  buildfw=false
+fi
 
 AM_CONDITIONAL(USE_LOADER, test "$loader" = "yes")
 AM_CONDITIONAL(USE_HOTPLUG, test "$hotplug" = "yes")
+AM_CONDITIONAL(BUILD_FW, test "$buildfw" = "yes")
 
 AC_ARG_WITH(hotplug-dir,
   [  --with-hotplug-dir      Specify the hotplug firmware directory],
index de84bdc068d06b83af42dc2064794c11e0de6604..4bd66caa20f6d31febe9c60c8500561190f12eeb 100644 (file)
@@ -6,7 +6,15 @@ cfg_files =    us122.conf us224.conf us428.conf \
                tascam_loader.ihx \
                us122fw.ihx us224fw.ihx us428fw.ihx
 
-EXTRA_DIST = $(cfg_files)
+if BUILD_FW
+bin_SCRIPTS = tascam_loader
+tascam_loader: 
+       $(AS31) $(AS31_FLAGS) -s tascam_loader.asm > tascam_loader.ihx
+endif
+
+EXTRA_DIST = $(cfg_files) \
+       tascam_loader.asm \
+       an2131.asm
 
 firmwaredir = $(datadir)/alsa/firmware/$(MYNAME)
 firmware_DATA = $(cfg_files)
diff --git a/usx2yloader/an2131.asm b/usx2yloader/an2131.asm
new file mode 100644 (file)
index 0000000..1aaa78e
--- /dev/null
@@ -0,0 +1,88 @@
+;
+;   Declaration of AN2131xx EZ-USB Registers
+;
+;
+;   Copyright (c) 2004 Martin Langer <martin-langer@gmx.de>
+;
+;
+;   This program is free software; you can redistribute it and/or
+;   modify it under the terms of the GNU General Public License
+;   as published by the Free Software Foundation; either version 2
+;   of the License, or any later version.
+;
+;   This program is distributed in the hope that it will be useful,
+;   but WITHOUT ANY WARRANTY; without even the implied warranty of
+;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;   GNU General Public License for more details.
+;
+;   You should have received a copy of the GNU General Public License
+;   along with this program; if not, write to the Free Software
+;   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;
+;
+
+
+.equ DPL1,     0x84
+.equ DPH1,     0x85
+.equ DPS,      0x86            
+.equ CKCON,    0x8E
+.equ SPC_FNC,  0x8F
+.equ EXIF,     0x91
+.equ MPAGE,    0x92
+.equ SCON0,    0x98
+.equ SBUF0,    0x99
+.equ SCON1,    0xC0
+.equ SBUF1,    0xC1
+.equ EICON,    0xD8
+.equ EIE,      0xE8            ; Interrupt Enables
+.equ EIP,      0xF8
+
+
+.equ OUT1BUF,  0x7E40
+.equ IN1BUF,   0x7E80
+.equ OUT0BUF,  0x7EC0
+.equ IN0BUF,   0x7F00
+.equ CPUCS,     0x7F92 
+.equ PORTACFG,         0x7F93
+.equ PORTBCFG,         0x7F94
+.equ PORTCCFG,         0x7F95
+.equ OUTA,             0x7F96  
+.equ OUTB,             0x7F97
+.equ OUTC,             0x7F98
+.equ PINSA,            0x7F99
+.equ PINSB,            0x7F9A
+.equ PINSC,            0x7F9B
+.equ OEA,              0x7F9C
+.equ OEB,              0x7F9D
+.equ OEC,              0x7F9E
+
+.equ I2CS,     0x7FA5          ; I2C Control and Status
+.equ I2DAT,    0x7FA6          ; I2C Data
+
+.equ IN07IRQ,  0x7FA9          ; EP IN Interrupt Request
+.equ OUT07IRQ, 0x7FAA          ; EP OUT Interrupt Request
+.equ USBIRQ,   0x7FAB          ; USB Interrupt Request
+.equ USBIEN,   0x7FAE          ; USB Interrupt Enables
+.equ USBBAV,   0x7FAF          ; Breakpoint and Autovector
+.equ EP0CS,    0x7FB4          ; Control and Status
+.equ IN0BC,    0x7FB5          ; Byte Count
+.equ IN1CS,    0x7FB6
+.equ IN1BC,    0x7FB7
+.equ OUT0BC,   0x7FC5          ; Byte Count
+.equ OUT1CS,   0x7FC6
+.equ OUT1BC,   0x7FC7
+.equ USBCS,    0x7FD6          ; USB Control and Status
+.equ SD_BMREQ, 0x7FE8          ; Setup Data Byte 1: bmRequest 
+                                       ; c0: Vendor Request 'In'
+                                       ; 40: Vendor Request 'Out'
+.equ SD_BREQ,  0x7FE9          ; Setup Data Byte 2: bRequest
+                                       ; a0: Internal Firmware Load
+                                       ; a3: External Firmware Load ?
+.equ SD_VALL,  0x7FEA          ; Setup Data Byte 3: Starting address (lo)
+.equ SD_VALH,  0x7FEB          ; Setup Data Byte 4: Starting address (hi)
+.equ SD_INDL,  0x7FEC          ; Setup Data Byte 5: 0x00
+.equ SD_INDH,  0x7FED          ; Setup Data Byte 6: 0x00
+.equ SD_LENL,  0x7FEE          ; Setup Data Byte 7: Number of Bytes (lo)
+.equ SD_LENH,  0x7FEF          ; Setup Data Byte 8: Number of Bytes (hi)
+
+;;
diff --git a/usx2yloader/tascam_loader.asm b/usx2yloader/tascam_loader.asm
new file mode 100644 (file)
index 0000000..b46bcdd
--- /dev/null
@@ -0,0 +1,266 @@
+;
+;   Second stage AN2131QC (aka EzUSB) loader
+;
+;      
+;   Copyright (c) 2004-2005 Martin Langer <martin-langer@gmx.de>
+;
+;   Written for Tascam US-122/US-224/US-428 audio/MIDI devices
+;
+;   This program is free software; you can redistribute it and/or
+;   modify it under the terms of the GNU General Public License
+;   as published by the Free Software Foundation; either version 2
+;   of the License, or any later version.
+;
+;   This program is distributed in the hope that it will be useful,
+;   but WITHOUT ANY WARRANTY; without even the implied warranty of
+;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;   GNU General Public License for more details.
+;
+;   You should have received a copy of the GNU General Public License
+;   along with this program; if not, write to the Free Software
+;   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;
+;
+
+.inc   "an2131.asm"
+
+
+; ====================================================== interrupt vectors ===
+
+       .org    0x0000                  ; reset vector
+       ljmp    init
+
+       .org    0x0043                  ; int2 vector (USB)
+       ljmp    usb_jump_table          ; autovector will replace byte 45
+
+
+; =================================================================== init ===
+
+init:
+       mov     sp, #20h                ; move stack pointer to 0x20
+
+       mov     a, EIE
+       setb    acc.0                   ; enable int2 (USB Interrupt)
+       mov     EIE, a
+       
+       mov     dptr, #USBIRQ
+       mov     a, #00011111b
+       movx    @dptr, a                ; clear Interrupt Request
+
+       mov     dptr, #IN07IRQ
+       mov     a, #11111111b
+       movx    @dptr, a                ; clear EP IN Interrupt Request
+
+       mov     dptr, #OUT07IRQ
+       mov     a, #11111111b
+       movx    @dptr, a                ; clear EP OUT Interrupt Request
+
+       mov     dptr, #PORTCCFG
+       movx    a, @dptr
+       orl     a, #11000000b           ; allow read and write on Port C
+       movx    @dptr, a
+
+       mov     dptr, #USBBAV
+       movx    a, @dptr
+       orl     a, #00000001b           ; enable Autovector feature
+       movx    @dptr, a
+
+       mov     dptr, #USBIEN
+       movx    a, @dptr
+       orl     a, #00000101b           ; enable 'Setup Data Available
+       movx    @dptr, a                ; Interrupt Request' and 'Setup Token
+                                       ; Interrupt Request'
+
+       setb    ea                      ; enable global 8051 Interrupts
+
+loop:
+       sjmp    loop
+
+
+; ========================================= usb interrupt service routines ===
+
+usb_jump_table:
+       ljmp    setup_data_avail_isr    ; setup data available 
+       .db     0               
+       ljmp    start_of_frame_isr      ; Start of frame
+       .db     0
+       ljmp    setup_token_isr         ; loading setup data
+       .db     0
+       ljmp    usb_suspend_isr         ; USB suspend
+       .db     0
+       ljmp    usb_reset_isr           ; USB reset
+       .db     0
+       ljmp    spare_isr
+       .db     0
+       ljmp    ep0_in_isr
+       .db     0
+       ljmp    ep0_out_isr
+       .db     0
+       ljmp    ep1_in_isr
+       .db     0
+       ljmp    ep1_out_isr
+       .db     0
+       ljmp    ep2_in_isr
+       .db     0
+       ljmp    ep2_out_isr
+       .db     0
+       ljmp    ep3_in_isr
+       .db     0
+       ljmp    ep3_out_isr
+       .db     0
+       ljmp    ep4_in_isr
+       .db     0
+       ljmp    ep4_out_isr
+       .db     0
+       ljmp    ep5_in_isr
+       .db     0
+       ljmp    ep5_out_isr
+       .db     0
+       ljmp    ep6_in_isr
+       .db     0
+       ljmp    ep6_out_isr
+       .db     0
+       ljmp    ep7_in_isr
+       .db     0
+       ljmp    ep7_out_isr
+       .db     0
+
+setup_data_avail_isr:
+       push    acc
+       push    dph
+       push    dpl
+       push    dph1
+       push    dpl1
+       push    dps
+       mov     a, EXIF
+       clr     acc.4                   ; clear USB Interrupt Request
+       mov     EXIF, a
+       mov     dptr, #USBIRQ
+       mov     a, #00000001b           ; Setup Data Avail. Interrupt Request
+       movx    @dptr, a
+       pop     dps
+       pop     dpl1
+       pop     dph1
+       pop     dpl
+       pop     dph
+       pop     acc
+       reti
+
+start_of_frame_isr:
+       push    acc
+       push    dph
+       push    dpl
+       push    dph1
+       push    dpl1
+       push    dps
+       mov     a, EXIF
+       clr     acc.4                   ; clear USB Interrupt Request
+       mov     EXIF, a
+       mov     dptr, #USBIRQ
+       mov     a, #00000010b           ; Start of frame Interrupt Request
+       movx    @dptr, a
+       pop     dps
+       pop     dpl1
+       pop     dph1
+       pop     dpl
+       pop     dph
+       pop     acc
+       reti
+
+setup_token_isr:
+       push    acc
+       push    dph
+       push    dpl
+       push    dph1
+       push    dpl1
+       push    dps
+       mov     a, EXIF
+       clr     acc.4                   ; clear USB Interrupt Request
+       mov     EXIF, a
+       mov     dptr, #USBIRQ
+       mov     a, #00000100b           ; Setup Token Interrupt Request
+       movx    @dptr, a
+       pop     dps
+       pop     dpl1
+       pop     dph1
+       pop     dpl
+       pop     dph
+       pop     acc
+       reti
+
+usb_suspend_isr:
+       push    acc
+       push    dph
+       push    dpl
+       push    dph1
+       push    dpl1
+       push    dps
+       mov     a, EXIF
+       clr     acc.4                   ; clear USB Interrupt Request
+       mov     EXIF, a
+       mov     dptr, #USBIRQ
+       mov     a, #00001000b           ; USB Suspend Interrupt Request
+       movx    @dptr, a
+       pop     dps
+       pop     dpl1
+       pop     dph1
+       pop     dpl
+       pop     dph
+       pop     acc
+       reti
+
+usb_reset_isr:
+       push    acc
+       push    dph
+       push    dpl
+       push    dph1
+       push    dpl1
+       push    dps
+       mov     a, EXIF
+       clr     acc.4                   ; clear USB Interrupt Request
+       mov     EXIF, a
+       mov     dptr, #USBIRQ
+       mov     a, #00010000b           ; USB Reset Interrupt Request
+       movx    @dptr, a
+       pop     dps
+       pop     dpl1
+       pop     dph1
+       pop     dpl
+       pop     dph
+       pop     acc
+       reti
+       
+spare_isr:
+       reti
+ep0_in_isr:
+       reti
+ep0_out_isr:
+       reti
+ep1_in_isr:
+       reti
+ep1_out_isr:
+       reti
+ep2_in_isr:
+       reti
+ep2_out_isr:
+       reti
+ep3_in_isr:
+       reti
+ep3_out_isr:
+       reti
+ep4_in_isr:
+       reti
+ep4_out_isr:
+       reti
+ep5_in_isr:
+       reti
+ep5_out_isr:
+       reti
+ep6_in_isr:
+       reti
+ep6_out_isr:
+       reti
+ep7_in_isr:
+       reti
+ep7_out_isr:
+       reti
index faf5d9bbc04513dfe7a9d5285fbd6fbf82173993..4022f2a083ccd85cc996bcb91723953d9efdc114 100644 (file)
-:10146C00C200907FA5E05418FF131313541F44506F
-:10147C00F51C139201D2E8907FAB74FFF0907FA91A
-:10148C00F0907FAAF05391EF907F95E044C0F090DC
-:10149C007FAFE04401F0907FAEE04405F0D2AF1294
-:0D14AC00175F3000FD121100C20080F62213
-:10110000907FE9E0245D600D147003021244240214
-:10111000600302124A907FEAE0750800F509A3E037
-:10112000FEE42509F509EE3508F508907FEEE07537
-:101130000A00F50BA3E0FEE4250BF50BEE350AF5EE
-:101140000A907FE8E064C060030211D4E50B450A11
-:10115000700302124AC3E50B9440E50A940050085C
-:10116000850A0C850B0D8006750C00750D40907F6F
-:10117000E9E0B4A325AE0CAF0DAA08A9097B01C014
-:1011800003C002C0017A7F790078007C7FAD03D074
-:1011900001D002D003121356800FAF09AE08AD0D77
-:1011A0007A7F79007B001215A4907FB5E50DF0E5FC
-:1011B0000D2509F509E50C3508F508C3E50B950D76
-:1011C000F50BE50A950CF50A907FB4E020E20302E6
-:1011D000114C80F4907FE8E06440706EE50B450AA6
-:1011E0006068E4907FC5F0907FB4E020E3F9907FE1
-:1011F000C5E0750C00F50D907FE9E0B4A315AE0CC9
-:10120000AF0DA809AC087D017B017A7E79C012136D
-:1012100056800FAF09AE08AD0D7A7F79007B0012C2
-:1012200014B9E50D2509F509E50C3508F508C3E500
-:101230000B950DF50BE50A950CF50A907FB4E0448B
-:0A12400002F08098907FEAE0F51CB0
-:01124A002281
-:06155800AB07AA06AC057A
-:10155E00E4FD300111EAFFAE050DEE2400F582E444
-:10156E0034E0F583EFF0EBAE050D74002EF582E45A
-:10157E0034E0F583EBF0AF050D74002FF582E43403
-:10158E00E0F583ECF0AF1C7AE07B001217207F0AA7
-:05159E007E0012173C65
-:0115A3002225
-:0A14B9008E0E8F0F8D108A118B121A
-:1014C300E4F513E513C395105020050FE50FAE0E99
-:1014D3007002050E14FFE5122513F582E43511F5AC
-:0A14E30083E0FD121558051380D9AF
-:0114ED0022DC
-:0A15A4008E0E8F0F8D108A118B122E
-:1015AE00E4FD300112E50EFFAE050DEE2403F582CB
-:1015BE00E434E0F583EFF0E50FAE050D74032EF580
-:1015CE0082E434E0F583E50FF0AF1C7AE07B031282
-:0D15DE001720AF1CAD10AB12AA111217049C
-:0115EB0022DD
-:10166E00C0E0C083C082C085C084C086758600D2AB
-:10167E00005391EF907FAB7401F0D086D084D0856B
-:07168E00D082D083D0E032CE
-:10164400C0E0C083C082C085C084C0867586009017
-:101654007FC4E4F05391EF907FAB7404F0D086D054
-:0A16640084D085D082D083D0E0321C
-:10169500C0E0C083C082C085C084C0867586005303
-:1016A50091EF907FAB7402F0D086D084D085D08244
-:0516B500D083D0E032FB
-:1016BA00C0E0C083C082C085C084C08675860053DE
-:1016CA0091EF907FAB7410F0D086D084D085D08211
-:0516DA00D083D0E032D6
-:0114FF0032BA
-:1016DF00C0E0C083C082C085C084C08675860053B9
-:1016EF0091EF907FAB7408F0D086D084D085D082F4
-:0516FF00D083D0E032B1
-:01176700324F
-:01176800324E
-:01176900324D
-:01176A00324C
-:01176B00324B
-:01176C00324A
-:01176D003249
-:01176E003248
-:01176F003247
-:011770003246
-:011771003245
-:011772003244
-:011773003243
-:011774003242
-:011775003241
-:011776003240
-:03004300021500A3
-:1015000002166E0002169500021644000216DF0055
-:101510000216BA000214FF000217670002176800E3
-:101520000217690002176A0002176B0002176C00AD
-:1015300002176D0002176E0002176F00021770008D
-:10154000021771000217720002177300021774006D
-:08155000021775000217760076
-:10173C008E148F15E5151515AE14700215144E6028
-:07174C00051214EE80EE22ED
-:08175F00E4F51BD2E9D2AF2230
-:10161900A907E51B7023907FA5E04480F0E925E048
-:10162900907FA6F08D16AF03A9077517018A18894F
-:0B16390019E4F51A751B01D322C3222F
-:1015EC00A907E51B7025907FA5E04480F0E925E074
-:1015FC004401907FA6F08D16AF03A9077517018AD9
-:0D160C00188919E4F51A751B03D322C322B7
-:03004B0002137F1E
-:10137F00C0E0C083C082C085C084C086758600C0AF
-:10138F00D075D000C000C001C002C003C006C007A6
-:10139F00907FA5E030E206751B0602144E907FA5E4
-:1013AF00E020E10CE51B64026006751B0702144E7A
-:1013BF00AF1BEF24FE604814602C24FE60772404DA
-:1013CF00600302144EAB17AA18A919AF1A051A8F8A
-:1013DF008275830012124B907FA6F0E51A65167086
-:1013EF005E751B058059907FA6E0AB17AA18A91947
-:1013FF00AE1A8E82758300121278751B028040E53B
-:10140F001624FEB51A07907FA5E04420F0E51614C8
-:10141F00B51A0A907FA5E04440F0751B00907FA697
-:10142F00E0AB17AA18A919AE1A8E82758300121293
-:10143F0078051A800A907FA5E04440F0751B005391
-:10144F0091DFD007D006D003D002D001D000D0D08A
-:0D145F00D086D084D085D082D083D0E032FA
-:101704001215ECE51B24FA600E146006240770F32E
-:0C171400D322E4F51BD322E4F51BD32202
-:10172000121619E51B24FA600E146006240770F3E4
-:0C173000D322E4F51BD322E4F51BD322E6
-:1014EE007400F58690FDA57C05A3E582458370F911
-:0114FE0022CB
-:0300000002175391
-:0C175300787FE4F6D8FD75812002146C4C
-:10124B00BB010CE58229F582E5833AF583E0225058
-:10125B0006E92582F8E622BBFE06E92582F8E222A2
-:0D126B00E58229F582E5833AF583E49322BC
-:10127800F8BB010DE58229F582E5833AF583E8F0AC
-:10128800225006E92582C8F622BBFE05E92582C858
-:02129800F22240
-:10129A00E709F608DFFA8046E709F208DFFA803E36
-:1012AA0088828C83E709F0A3DFFA8032E309F60823
-:1012BA00DFFA806EE309F208DFFA806688828C839F
-:1012CA00E309F0A3DFFA805A89828A83E0A3F60849
-:1012DA00DFFA804E89828A83E0A3F208DFFA80422D
-:1012EA0080D280FA80C680D4805580F2802980100E
-:1012FA0080A680EA809A80A880DA80E280CA802963
-:10130A0088848C8589828A83E493A30586F0A30561
-:10131A0086DFF5DEF3800B89828A83E493A3F608DD
-:10132A00DFF9ECFAA9F0EDFB2288848C8589828AA0
-:10133A0083E0A30586F0A30586DFF6DEF480E38961
-:10134A00828A83E493A3F208DFF980D688F0ED2439
-:10135A0002B4040050CCF582EB2402B4040050C25B
-:10136A0023234582F582EF4E60B8EF60010EE582D5
-:05137A00239012EA734C
+:03000000020046B5
+:1000430002007A758120E5E8D2E0F5E8907FAB7491
+:100053001FF0907FA974FFF0907FAA74FFF0907F48
+:1000630095E044C0F0907FAFE04401F0907FAEE0B4
+:100073004405F0D2AF80FE0200D2000200F7000276
+:10008300011C00020141000201660002018B000213
+:10009300018C0002018D0002018E0002018F00021B
+:1000A30001900002019100020192000201930002FB
+:1000B30001940002019500020196000201970002DB
+:1000C3000198000201990002019A0002019B00C0FD
+:1000D300E0C083C082C085C084C086E591C2E4F5D8
+:1000E30091907FAB7401F0D086D084D085D082D03C
+:1000F30083D0E032C0E0C083C082C085C084C086A4
+:10010300E591C2E4F591907FAB7402F0D086D08480
+:10011300D085D082D083D0E032C0E0C083C082C01B
+:1001230085C084C086E591C2E4F591907FAB7404E9
+:10013300F0D086D084D085D082D083D0E032C0E0A6
+:10014300C083C082C085C084C086E591C2E4F591B6
+:10015300907FAB7408F0D086D084D085D082D083D2
+:10016300D0E032C0E0C083C082C085C084C086E5D1
+:1001730091C2E4F591907FAB7410F0D086D084D017
+:1001830085D082D083D0E0323232323232323232D0
+:0A019300323232323232323232326E
 :00000001FF