⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 echo.asm

📁 Using DSP/BIOS I/O in Multichannel Systems
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;----------------------------------------------------------------------
; 115 | LOG_printf(&trace1, "sio_get uses buffer 0x%x", channel->buf);         
;----------------------------------------------------------------------
           MVKL    .S2     SL2+0,B4          ; |115| 
           MVKH    .S2     SL2+0,B4          ; |115| 
           STW     .D2T2   B4,*+SP(4)        ; |115| 

           B       .S1     _LOG_printf       ; |115| 
||         LDW     .D1T1   *+A4(8),A0        ; |115| 

           MVKL    .S1     _trace1,A4        ; |115| 
           MVKL    .S2     RL8,B3            ; |115| 
           MVKH    .S1     _trace1,A4        ; |115| 
           MVKH    .S2     RL8,B3            ; |115| 
           STW     .D2T1   A0,*+SP(8)        ; |115| 
RL8:       ; CALL OCCURS                     ; |115| 
	.line	7
;----------------------------------------------------------------------
; 117 | nbytes = SIO_get(channel->inStream, &channel->buf);                    
;----------------------------------------------------------------------
           LDW     .D2T2   *+SP(12),B4       ; |117| 
           MVKL    .S2     RL10,B3           ; |117| 
           MVKH    .S2     RL10,B3           ; |117| 
           NOP             1
           B       .S1     _SIO_get          ; |117| 
           LDW     .D2T1   *B4,A4            ; 
           ADD     .L2     8,B4,B4           ; 
           NOP             3
RL10:      ; CALL OCCURS                     ; |117| 
           STW     .D2T1   A4,*+SP(16)       ; |117| 
	.line	8
;----------------------------------------------------------------------
; 118 | if (nbytes < 0)                                                        
;----------------------------------------------------------------------
           CMPLT   .L1     A4,0,A1           ; 
	.line	9
;----------------------------------------------------------------------
; 119 | return(FALSE);                                                         
;----------------------------------------------------------------------
   [ A1]   B       .S1     L3                ; |119| 
   [ A1]   ZERO    .L1     A10               ; |119| 
           NOP             4
           ; BRANCH OCCURS                   ; |119| 
;** --------------------------------------------------------------------------*
	.line	11
;----------------------------------------------------------------------
; 121 | LOG_printf(&trace1, "sio_get returns buffer 0x%x", channel->buf);      
;----------------------------------------------------------------------
           LDW     .D2T2   *+SP(12),B5       ; |121| 
           MVKL    .S2     SL3+0,B4          ; |121| 
           MVKH    .S2     SL3+0,B4          ; |121| 
           STW     .D2T2   B4,*+SP(4)        ; |121| 
           MVKL    .S2     RL12,B3           ; |121| 

           B       .S1     _LOG_printf       ; |121| 
||         LDW     .D2T2   *+B5(8),B4        ; |121| 

           MVKL    .S1     _trace1,A4        ; |121| 
           MVKH    .S2     RL12,B3           ; |121| 
           MVKH    .S1     _trace1,A4        ; |121| 
           NOP             1
           STW     .D2T2   B4,*+SP(8)        ; |121| 
RL12:      ; CALL OCCURS                     ; |121| 
	.line	14
;----------------------------------------------------------------------
; 124 | doLoad(channel->load);                                                 
;----------------------------------------------------------------------
           LDW     .D2T2   *+SP(12),B4       ; |124| 
           MVKL    .S2     RL14,B3           ; |124| 
           MVKH    .S2     RL14,B3           ; |124| 
           NOP             1
           B       .S1     _doLoad           ; |124| 
           LDW     .D2T1   *+B4(12),A4       ; |124| 
           NOP             4
RL14:      ; CALL OCCURS                     ; |124| 
	.line	16
;----------------------------------------------------------------------
; 126 | nbytes = SIO_put(channel->outStream, &channel->buf, nbytes);           
;----------------------------------------------------------------------
           LDW     .D2T2   *+SP(12),B4       ; |126| 
           LDW     .D2T1   *+SP(16),A6       ; 
           MVKL    .S2     RL16,B3           ; |126| 
           MVKH    .S2     RL16,B3           ; |126| 
           B       .S1     _SIO_put          ; |126| 
           LDW     .D2T1   *+B4(4),A4        ; 
           ADD     .L2     8,B4,B4           ; 
           NOP             3
RL16:      ; CALL OCCURS                     ; |126| 
           STW     .D2T1   A4,*+SP(16)       ; |126| 
	.line	17
;----------------------------------------------------------------------
; 127 | if (nbytes < 0)                                                        
;----------------------------------------------------------------------
           CMPLT   .L1     A4,0,A1           ; 
	.line	18
;----------------------------------------------------------------------
; 128 | return(FALSE);                                                         
;----------------------------------------------------------------------
   [ A1]   B       .S1     L3                ; |128| 
   [ A1]   ZERO    .L1     A10               ; |128| 
           NOP             4
           ; BRANCH OCCURS                   ; |128| 
;** --------------------------------------------------------------------------*
	.line	20
;----------------------------------------------------------------------
; 130 | LOG_printf(&trace1, "sio_put returns buffer 0x%x", channel->buf);      
;----------------------------------------------------------------------
           LDW     .D2T2   *+SP(12),B5       ; |130| 
           MVKL    .S2     SL4+0,B4          ; |130| 
           MVKH    .S2     SL4+0,B4          ; |130| 
           STW     .D2T2   B4,*+SP(4)        ; |130| 
           MVKL    .S2     RL18,B3           ; |130| 

           B       .S1     _LOG_printf       ; |130| 
||         LDW     .D2T2   *+B5(8),B4        ; |130| 

           MVKL    .S1     _trace1,A4        ; |130| 
           MVKH    .S2     RL18,B3           ; |130| 
           MVKH    .S1     _trace1,A4        ; |130| 
           NOP             1
           STW     .D2T2   B4,*+SP(8)        ; |130| 
RL18:      ; CALL OCCURS                     ; |130| 
	.line	21
;----------------------------------------------------------------------
; 131 | return(TRUE);                                                          
;----------------------------------------------------------------------
           MVK     .S1     0x1,A10           ; |131| 
;** --------------------------------------------------------------------------*
L3:    
	.line	22

           LDW     .D2T1   *+SP(20),A10      ; |132| 
||         MV      .L1     A10,A4            ; |132| 

           LDW     .D2T2   *++SP(24),B3      ; |132| 
           NOP             4
           B       .S2     B3                ; |132| 
           NOP             5
           ; BRANCH OCCURS                   ; |132| 
	.endfunc	132,000080400h,24


	.sect	".text"
	.global	_echo
	.sym	_echo,_echo, 32, 2, 0
	.func	134
;----------------------------------------------------------------------
; 134 | 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)      ; |134| 
	.line	2
           STW     .D2T1   A4,*+SP(12)       ; |135| 
	.line	3
;----------------------------------------------------------------------
; 136 | while (TRUE) {                                                         
;----------------------------------------------------------------------
;** --------------------------------------------------------------------------*
L4:    
	.line	4
;----------------------------------------------------------------------
; 137 | LOG_printf(&trace1, "channel %d", channelNum);                         
;----------------------------------------------------------------------

           B       .S1     _LOG_printf       ; |137| 
||         LDW     .D2T2   *+SP(12),B5       ; |137| 

           MVKL    .S2     SL5+0,B4          ; |137| 
           MVKH    .S2     SL5+0,B4          ; |137| 
           STW     .D2T2   B4,*+SP(4)        ; |137| 

           MVKL    .S1     _trace1,A4        ; |137| 
||         MVKL    .S2     RL20,B3           ; |137| 

           STW     .D2T2   B5,*+SP(8)        ; |137| 
||         MVKH    .S2     RL20,B3           ; |137| 
||         MVKH    .S1     _trace1,A4        ; |137| 

RL20:      ; CALL OCCURS                     ; |137| 
	.line	6
;----------------------------------------------------------------------
; 139 | if (!processChannel(&audioChannel[channelNum])) {                      
;----------------------------------------------------------------------
           LDW     .D2T2   *+SP(12),B4       ; |139| 
           B       .S1     _processChannel   ; |139| 
           MVKL    .S2     RL22,B3           ; |139| 
           MVK     .S1     (_audioChannel-$bss),A0 ; |139| 
           ADD     .L1X    DP,A0,A0          ; |139| 
           SHL     .S2     B4,4,B4           ; |139| 

           ADD     .L1X    A0,B4,A4          ; |139| 
||         MVKH    .S2     RL22,B3           ; |139| 

RL22:      ; CALL OCCURS                     ; |139| 
           MV      .L1     A4,A1             ; |139| 
   [ A1]   B       .S1     L4                ; |139| 
           NOP             5
           ; BRANCH OCCURS                   ; |139| 
;** --------------------------------------------------------------------------*
	.line	7
;----------------------------------------------------------------------
; 140 | LOG_printf(&trace, "processing error on channel %d", channelNum);      
;----------------------------------------------------------------------

           B       .S1     _LOG_printf       ; |140| 
||         LDW     .D2T2   *+SP(12),B4       ; |140| 

           MVKL    .S2     SL6+0,B5          ; |140| 
           MVKH    .S2     SL6+0,B5          ; |140| 
           STW     .D2T2   B5,*+SP(4)        ; |140| 

           MVKL    .S1     _trace,A4         ; |140| 
||         MVKL    .S2     RL24,B3           ; |140| 

           STW     .D2T2   B4,*+SP(8)        ; |140| 
||         MVKH    .S2     RL24,B3           ; |140| 
||         MVKH    .S1     _trace,A4         ; |140| 

RL24:      ; CALL OCCURS                     ; |140| 
	.line	10
           B       .S1     L4                ; |143| 
           NOP             5
           ; BRANCH OCCURS                   ; |143| 
;** --------------------------------------------------------------------------*
	.line	11
	.endfunc	144,000080000h,16


	.sect	".text"
	.global	_main
	.sym	_main,_main, 36, 2, 0
	.func	146
;----------------------------------------------------------------------
; 146 | main()                                                                 
;----------------------------------------------------------------------

;******************************************************************************
;* FUNCTION NAME: _main                                                       *
;*                                                                            *
;*   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,SP                                      *
;*   Local Frame Size  : 0 Args + 0 Auto + 4 Save = 4 byte                    *
;******************************************************************************
_main:
;** --------------------------------------------------------------------------*
           STW     .D2T2   B3,*SP--(8)       ; |146| 
	.line	3
;----------------------------------------------------------------------
; 148 | initChannelData();                                                     
;----------------------------------------------------------------------
           B       .S1     _initChannelData  ; |148| 
           MVKL    .S2     RL26,B3           ; |148| 
           MVKH    .S2     RL26,B3           ; |148| 
           NOP             3
RL26:      ; CALL OCCURS                     ; |148| 
           ZERO    .L1     A4                ; |148| 
	.line	4
           LDW     .D2T2   *++SP(8),B3       ; |149| 
           NOP             4
           B       .S2     B3                ; |149| 
           NOP             5
           ; BRANCH OCCURS                   ; |149| 
	.endfunc	149,000080000h,8


;******************************************************************************
;* STRINGS                                                                    *
;******************************************************************************
	.sect	".const"
SL1:	.string	"Cannot get static buffer",0
SL2:	.string	"sio_get uses buffer 0x%x",0
SL3:	.string	"sio_get returns buffer 0x%x",0
SL4:	.string	"sio_put returns buffer 0x%x",0
SL5:	.string	"channel %d",0
SL6:	.string	"processing error on channel %d",0
;******************************************************************************
;* UNDEFINED EXTERNAL REFERENCES                                              *
;******************************************************************************
	.global	_LOG_printf
	.global	_SYS_abort
	.global	_SIO_get
	.global	_SIO_staticbuf
	.global	_SIO_put
	.global	_doLoad
	.global	_outStream1
	.global	_inStream1
	.global	_outStream0
	.global	_inStream0
	.global	_trace
	.global	_trace1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -