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
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],
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)
--- /dev/null
+;
+; 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)
+
+;;
--- /dev/null
+;
+; 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
-: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