echo.asm
来自「Using DSP/BIOS I/O in Multichannel Syste」· 汇编 代码 · 共 1,261 行 · 第 1/5 页
ASM
1,261 行
MVKL .S2 _trace1,B4 ; |134|
MVKH .S2 _trace1,B4 ; |134|
MV .L1X B4,A4 ; |134|
STW .D2T2 B5,*+SP(8) ; |134|
|| MVKH .S2 RL14,B3 ; |134|
RL14: ; CALL OCCURS ; |134|
.line 27
;----------------------------------------------------------------------
; 136 | if (SIO_issue(channel->outStream,
; 137 | channel->buf,
; 138 | channel->bufSize,
; 139 | NULL) < 0) {
;----------------------------------------------------------------------
LDW .D2T2 *+SP(12),B5 ; |136|
MVKL .S2 RL16,B3 ; |136|
ZERO .L2 B6 ; |136|
MVKH .S2 RL16,B3 ; |136|
NOP 1
LDW .D2T1 *+B5(4),A4 ;
B .S1 _SIO_issue ; |136|
|| MV .L2 B5,B4 ; |136|
|| LDW .D2T1 *+B5(20),A6 ;
LDW .D2T2 *+B4(8),B4 ;
NOP 4
RL16: ; CALL OCCURS ; |136|
CMPLT .L1 A4,0,A1 ;
.line 31
;----------------------------------------------------------------------
; 140 | return(FALSE);
;----------------------------------------------------------------------
[ A1] B .S1 L1 ; |140|
[ A1] ZERO .L1 A10 ; |140|
NOP 4
; BRANCH OCCURS ; |140|
;** --------------------------------------------------------------------------*
.line 34
;----------------------------------------------------------------------
; 143 | if (SIO_reclaim(channel->outStream,
; 144 | &channel->buf,
; 145 | &arg) < 0) {
;----------------------------------------------------------------------
LDW .D2T2 *+SP(12),B4 ; |143|
ADD .D2 SP,16,B5 ; |143|
MVKL .S2 RL18,B3 ; |143|
MV .L1X B5,A6 ; |143|
B .S1 _SIO_reclaim ; |143|
LDW .D2T1 *+B4(4),A4 ;
ADD .L2 8,B4,B4 ;
MVKH .S2 RL18,B3 ; |143|
NOP 2
RL18: ; CALL OCCURS ; |143|
CMPLT .L1 A4,0,A1 ;
.line 37
;----------------------------------------------------------------------
; 146 | return(FALSE);
;----------------------------------------------------------------------
[ A1] B .S1 L1 ; |146|
[ A1] ZERO .L1 A10 ; |146|
NOP 4
; BRANCH OCCURS ; |146|
;** --------------------------------------------------------------------------*
.line 40
;----------------------------------------------------------------------
; 149 | LOG_printf(&trace1, "sio_reclaim out returns buffer 0x%x", channel->buf
; | );
;----------------------------------------------------------------------
LDW .D2T2 *+SP(12),B4 ; |149|
MVKL .S2 SL4+0,B5 ; |149|
MVKH .S2 SL4+0,B5 ; |149|
STW .D2T2 B5,*+SP(4) ; |149|
MVKL .S2 RL20,B3 ; |149|
B .S1 _LOG_printf ; |149|
|| LDW .D2T2 *+B4(8),B4 ; |149|
MVKL .S1 _trace1,A4 ; |149|
MVKH .S2 RL20,B3 ; |149|
MVKH .S1 _trace1,A4 ; |149|
NOP 1
STW .D2T2 B4,*+SP(8) ; |149|
RL20: ; CALL OCCURS ; |149|
.line 41
;----------------------------------------------------------------------
; 150 | return(TRUE);
;----------------------------------------------------------------------
MVK .S1 0x1,A10 ; |150|
;** --------------------------------------------------------------------------*
L1:
.line 42
LDW .D2T1 *+SP(20),A10 ; |151|
|| MV .L1 A10,A4 ; |151|
LDW .D2T2 *++SP(24),B3 ; |151|
NOP 4
B .S2 B3 ; |151|
NOP 5
; BRANCH OCCURS ; |151|
.endfunc 151,000080400h,24
.sect ".text"
.global _echo
.sym _echo,_echo, 32, 2, 0
.func 153
;----------------------------------------------------------------------
; 153 | void echo(Int channelNum)
;----------------------------------------------------------------------
;******************************************************************************
;* FUNCTION NAME: _echo *
;* *
;* Regs Modified : A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,B0,B1,B2,B3,B4,B5,B6, *
;* B7,B8,B9,SP *
;* Regs Used : A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,B0,B1,B2,B3,B4,B5,B6, *
;* B7,B8,B9,DP,SP *
;* Local Frame Size : 8 Args + 4 Auto + 4 Save = 16 byte *
;******************************************************************************
_echo:
;** --------------------------------------------------------------------------*
.sym _channelNum,4, 4, 17, 32
.sym _channelNum,12, 4, 1, 32
STW .D2T2 B3,*SP--(16) ; |153|
.line 2
STW .D2T1 A4,*+SP(12) ; |154|
.line 7
;----------------------------------------------------------------------
; 159 | if ((audioChannel[channelNum].buf = (Ptr)MEM_alloc(SDRAM,
; 160 |
; | SAMPLE_BUF_SIZE,
; 161 |
; | 0)) == NULL) {
;----------------------------------------------------------------------
B .S1 _MEM_alloc ; |159|
LDW .D2T1 *+DP(_SDRAM),A4 ; |159|
MVKL .S2 RL22,B3 ; |159|
MVK .S2 0x140,B4 ; |159|
MVKH .S2 RL22,B3 ; |159|
ZERO .L1 A6 ; |159|
RL22: ; CALL OCCURS ; |159|
LDW .D2T2 *+SP(12),B4 ; |159|
MV .L1 A4,A1 ;
MVK .S1 (_audioChannel+8-$bss),A0 ; |159|
[ A1] B .S1 L2 ; |159|
ADD .L1X DP,A0,A0 ; |159|
SHL .S2 B4,5,B5 ; |159|
SUBAW .D2 B5,B4,B4 ; |159|
ADD .L1X A0,B4,A0 ; |159|
STW .D1T1 A1,*A0 ; |159|
; BRANCH OCCURS ; |159|
;** --------------------------------------------------------------------------*
.line 10
;----------------------------------------------------------------------
; 162 | SYS_abort("MEM_alloc failed");
;----------------------------------------------------------------------
B .S1 _SYS_abort ; |162|
MVKL .S1 SL5+0,A0 ; |162|
MVKH .S1 SL5+0,A0 ; |162|
MVKL .S2 RL24,B3 ; |162|
STW .D2T1 A0,*+SP(4) ; |162|
MVKH .S2 RL24,B3 ; |162|
RL24: ; CALL OCCURS ; |162|
;** --------------------------------------------------------------------------*
L2:
.line 13
;----------------------------------------------------------------------
; 165 | if ((audioChannel[channelNum].buf1 = (Ptr)MEM_alloc(SDRAM,
; 166 |
; | SAMPLE_BUF_SIZE,
; 167 |
; | 0)) == NULL) {
;----------------------------------------------------------------------
B .S1 _MEM_alloc ; |165|
LDW .D2T1 *+DP(_SDRAM),A4 ; |165|
MVKL .S2 RL26,B3 ; |165|
MVK .S2 0x140,B4 ; |165|
MVKH .S2 RL26,B3 ; |165|
ZERO .L1 A6 ; |165|
RL26: ; CALL OCCURS ; |165|
LDW .D2T2 *+SP(12),B4 ; |165|
MV .L1 A4,A1 ;
MVK .S1 (_audioChannel+12-$bss),A0 ; |165|
[ A1] B .S1 L3 ; |165|
ADD .L1X DP,A0,A0 ; |165|
SHL .S2 B4,5,B5 ; |165|
SUBAW .D2 B5,B4,B4 ; |165|
ADD .L1X A0,B4,A0 ; |165|
STW .D1T1 A1,*A0 ; |165|
; BRANCH OCCURS ; |165|
;** --------------------------------------------------------------------------*
.line 16
;----------------------------------------------------------------------
; 168 | SYS_abort("MEM_alloc failed");
;----------------------------------------------------------------------
B .S1 _SYS_abort ; |168|
MVKL .S1 SL5+0,A0 ; |168|
MVKH .S1 SL5+0,A0 ; |168|
MVKL .S2 RL28,B3 ; |168|
STW .D2T1 A0,*+SP(4) ; |168|
MVKH .S2 RL28,B3 ; |168|
RL28: ; CALL OCCURS ; |168|
;** --------------------------------------------------------------------------*
L3:
.line 20
;----------------------------------------------------------------------
; 172 | if (SIO_issue(audioChannel[channelNum].outStream,
; 173 | audioChannel[channelNum].buf,
; 174 | 0,
; 175 | NULL) < 0) {
;----------------------------------------------------------------------
LDW .D2T2 *+SP(12),B4 ; |172|
MVK .S2 (_audioChannel+8-$bss),B5 ; |172|
MVK .S1 (_audioChannel+4-$bss),A0 ; |172|
ADD .L1X DP,A0,A0 ; |172|
ADD .L2 DP,B5,B5 ; |172|
SHL .S2 B4,5,B6 ; |172|
SUBAW .D2 B6,B4,B6 ; |172|
|| SHL .S2 B4,5,B7 ; |172|
SUBAW .D2 B7,B4,B4 ; |172|
B .S1 _SIO_issue ; |172|
|| ADD .L2 B5,B4,B4 ; |172|
|| ADD .L1X A0,B6,A0 ; |172|
LDW .D2T2 *B4,B4 ;
|| LDW .D1T1 *A0,A4 ;
MVKL .S2 RL30,B3 ; |172|
ZERO .L2 B6 ; |172|
MVKH .S2 RL30,B3 ; |172|
ZERO .L1 A6 ; |172|
RL30: ; CALL OCCURS ; |172|
CMPLT .L1 A4,0,A1 ;
[!A1] B .S1 L4 ; |172|
NOP 5
; BRANCH OCCURS ; |172|
;** --------------------------------------------------------------------------*
.line 24
;----------------------------------------------------------------------
; 176 | SYS_abort("error on issue for chan %d", channelNum);
;----------------------------------------------------------------------
B .S1 _SYS_abort ; |176|
|| LDW .D2T2 *+SP(12),B4 ; |176|
MVKL .S1 SL6+0,A0 ; |176|
MVKH .S1 SL6+0,A0 ; |176|
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?