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

📄 debug.s

📁 关于DVD的MPEG2用的DSP代码,在DSP的实现MPEG的压缩,解压算法.
💻 S
字号:

;************************************************************************
; (c)1996-1997 Copyright M-Pact, Inc. All rights reserved
;
; Revision 1.0
;
;
;
;       Module: SUB_debug
;
;       Initial version:Jinshi Huang 5/7/97
;
;       Calling :       none
;       Called by:      none
;       Return:         ret
;       Param in:
;       Temp reg:
;       AGR  reg:
;       Local buffer:
;************************************************************************

        .nolist
#include "regdef.h"
#include "debug.h"
        .list

        .data
        .globl  SUB_DSP_DEBUGGER
        .globl  dbg_last_inst

SUB_DSP_DEBUGGER:

#ifdef	DEBUGGER
	
        movi    DcacheBase,DBG_SEG

//-----------------------------------------------------------------------
// dump registers to DRAM
//-----------------------------------------------------------------------
        dsw     r0, DB_GPR0
        mov     r0, TrapReg
        dsw     r0, DB_TRAP     // save TrapReg at 0x1eed00
        rlwi    r0, DSP_INT_CTRL
        dsw     r0, INT_CTRL_TEMP       // save Reg274
        li      r0, 0x38000000
        rswi    r0, DSP_INT_CTRL        // reset Reg274
        dsw     r1, DB_GPR1
        dsw     r2, DB_GPR2
        dsw     r3, DB_GPR3
        dsw     r4, DB_GPR4
        dsw     r5, DB_GPR5
        dsw     r6, DB_GPR6
        dsw     r7, DB_GPR7
        dsw     r8, DB_GPR8
        dsw     r9, DB_GPR9
        dsw     r10, DB_GPR10
        dsw     r11, DB_GPR11
        dsw     r12, DB_GPR12
        dsw     r13, DB_GPR13
        dsw     r14, DB_GPR14
        dsw     r15, DB_GPR15
        dsw     r16, DB_GPR16
        dsw     r17, DB_GPR17
        dsw     r18, DB_GPR18
        dsw     r19, DB_GPR19
        dsw     r20, DB_GPR20
        dsw     r21, DB_GPR21
        dsw     r22, DB_GPR22
        dsw     r23, DB_GPR23
        dsw     r24, DB_GPR24
        dsw     r25, DB_GPR25
        dsw     r26, DB_GPR26
        dsw     r27, DB_GPR27
        dsw     r28, DB_GPR28
        dsw     r29, DB_GPR29
        dsw     r30, DB_GPR30
        dsw     r31, DB_GPR31

//--------------------------------------------------------------------
// DUMP AGR REGISTERS
//--------------------------------------------------------------------

// copy to general registers first

        mov     r0, AGRAdr0
        mov     r1, AGRAdr1
        mov     r2, AGRAdr2
        mov     r3, AGRAdr3
        mov     r4, AGRAdr4
        mov     r5, AGRAdr5
        mov     r6, AGRAdr6
        mov     r7, AGRAdr7

        mov     r8, AGRMod0
        mov     r9, AGRMod1
        mov     r10, AGRMod2
        mov     r11, AGRMod3
        mov     r12, AGRMod4
        mov     r13, AGRMod5
        mov     r14, AGRMod6
        mov     r15, AGRMod7

        mov     r16, AGRSiz0
        mov     r17, AGRSiz1
        mov     r18, AGRSiz2
        mov     r19, AGRSiz3
        mov     r20, AGRSiz4
        mov     r21, AGRSiz5
        mov     r22, AGRSiz6
        mov     r23, AGRSiz7

        mov     r24, AGRInc0
        mov     r25, AGRInc1
        mov     r26, AGRInc2
        mov     r27, AGRInc3
        mov     r28, AGRInc4
        mov     r29, AGRInc5
        mov     r30, AGRInc6
        mov     r31, AGRInc7

// then dump these registers

        dsw     r0, DB_AGRADR0
        dsw     r1, DB_AGRADR1
        dsw     r2, DB_AGRADR2
        dsw     r3, DB_AGRADR3
        dsw     r4, DB_AGRADR4
        dsw     r5, DB_AGRADR5
        dsw     r6, DB_AGRADR6
        dsw     r7, DB_AGRADR7
        dsw     r8, DB_AGRMOD0
        dsw     r9, DB_AGRMOD1
        dsw     r10, DB_AGRMOD2
        dsw     r11, DB_AGRMOD3
        dsw     r12, DB_AGRMOD4
        dsw     r13, DB_AGRMOD5
        dsw     r14, DB_AGRMOD6
        dsw     r15, DB_AGRMOD7
        dsw     r16, DB_AGRSIZ0
        dsw     r17, DB_AGRSIZ1
        dsw     r18, DB_AGRSIZ2
        dsw     r19, DB_AGRSIZ3
        dsw     r20, DB_AGRSIZ4
        dsw     r21, DB_AGRSIZ5
        dsw     r22, DB_AGRSIZ6
        dsw     r23, DB_AGRSIZ7
        dsw     r24, DB_AGRINC0
        dsw     r25, DB_AGRINC1
        dsw     r26, DB_AGRINC2
        dsw     r27, DB_AGRINC3
        dsw     r28, DB_AGRINC4
        dsw     r29, DB_AGRINC5
        dsw     r30, DB_AGRINC6
        dsw     r31, DB_AGRINC7

//------------------------------------------------------------------
// other registers
//------------------------------------------------------------------

// The following internal registers won't be restored when exit this routine
        mov     r0,Gb_Getbits_Ptr
        mov     r1,Gb_Shadow_Ptr
        mov     r2,Gb_Control
        mov     r3,Gb_RdWrPtr
        mov     r4,Gb_Prev_LocalData
        mov     r5,Gb_dma_addr
//        mov     r6,LoopCount

        dsw     r0,DB_Gb_Getbits_Ptr
        dsw     r1,DB_Gb_Shadow_Ptr
        dsw     r2,DB_Gb_Control
        dsw     r3,DB_Gb_RdWrPtr
        dsw     r4,DB_Gb_Prev_LocalData
        dsw     r5,DB_Gb_dma_addr
//        dsw     r6,DB_LoopCount

// The following internal registers will be restored when exit this routine
        dlw     r1, DB_TRAP     // TrapReg value at 0x1eed00
        mov     r0, StatusReg
        dsw     r0, DB_STATUS
        mov     r0, IcacheSegment
        dsw     r0, DB_IcacheSegment

        movi    TrapReg, 0      // disable all Trap and Interrupts
        andi    r1,0x700        // mask trap code

//------------------------------------------------------------------
//wait until host says "c"
//------------------------------------------------------------------

        la      r0, dbg_last_inst
        andi    r0, 0xffff
        dsw     r0, RETURN_OFFSET

        tsti    r1, TRAP_CODE_INT_TRAP
        movi    r0, 0x8642
        beq     save_debug_flag
        tsti    r1, TRAP_CODE_EXT_TRAP
        movi    r0, 0x9753
        beq     save_debug_flag
        tsti    r1, TRAP_CODE_EXT_INTRP
        movi    r0, 0xa864
        beq     save_debug_flag
        movi    r0, 0x2468              // flag for break point
save_debug_flag:
        dsw     r0, DB_FLAG
        dsw     r0, DB_FLAG_T
//        nop

wait_debug_flag:
        dlw     r0, DB_FLAG
        nop
        tsti    r0, 0x4321              // local buffer modify flag
        bne     check_flag_continue

        dlw     r0,BREAK_S_ADDR
        dlw     r2,BREAK_E_ADDR
        mov     AGRAdr0,r0
        movi    AGRSiz0,0xffff
        movi    AGRMod0,0
        dlw     r3,BREAK_M_DATA
        nop
modify_local_buffer:
        addi    r0,4
        mov     a0(4),r3
        tst     r0,r2
        blt     modify_local_buffer     // loop until r0 reaches BREAK_E_ADDR
        li      r1, 0x0
        dsw     r1, DB_FLAG
        nop
        j       wait_debug_flag

check_flag_continue:
        tsti    r0, 0x1234              // continue flag
        bne     wait_debug_flag
//--------------------------------------------------------------------
// RESTORE AGR REGISTERS
//--------------------------------------------------------------------
// load AGR registers to general registers first

        dlw     r0, DB_AGRADR0
        dlw     r1, DB_AGRADR1
        dlw     r2, DB_AGRADR2
        dlw     r3, DB_AGRADR3
        dlw     r4, DB_AGRADR4
        dlw     r5, DB_AGRADR5
        dlw     r6, DB_AGRADR6
        dlw     r7, DB_AGRADR7
        dlw     r8, DB_AGRMOD0
        dlw     r9, DB_AGRMOD1
        dlw     r10, DB_AGRMOD2
        dlw     r11, DB_AGRMOD3
        dlw     r12, DB_AGRMOD4
        dlw     r13, DB_AGRMOD5
        dlw     r14, DB_AGRMOD6
        dlw     r15, DB_AGRMOD7
        dlw     r16, DB_AGRSIZ0
        dlw     r17, DB_AGRSIZ1
        dlw     r18, DB_AGRSIZ2
        dlw     r19, DB_AGRSIZ3
        dlw     r20, DB_AGRSIZ4
        dlw     r21, DB_AGRSIZ5
        dlw     r22, DB_AGRSIZ6
        dlw     r23, DB_AGRSIZ7
        dlw     r24, DB_AGRINC0
        dlw     r25, DB_AGRINC1
        dlw     r26, DB_AGRINC2
        dlw     r27, DB_AGRINC3
        dlw     r28, DB_AGRINC4
        dlw     r29, DB_AGRINC5
        dlw     r30, DB_AGRINC6
        dlw     r31, DB_AGRINC7

// restore to AGR registers

        mov     AGRAdr0, r0
        mov     AGRAdr1, r1
        mov     AGRAdr2, r2
        mov     AGRAdr3, r3
        mov     AGRAdr4, r4
        mov     AGRAdr5, r5
        mov     AGRAdr6, r6
        mov     AGRAdr7, r7

        mov     AGRMod0, r8
        mov     AGRMod1, r9
        mov     AGRMod2, r10
        mov     AGRMod3, r11
        mov     AGRMod4, r12
        mov     AGRMod5, r13
        mov     AGRMod6, r14
        mov     AGRMod7, r15

        mov     AGRSiz0, r16
        mov     AGRSiz1, r17
        mov     AGRSiz2, r18
        mov     AGRSiz3, r19
        mov     AGRSiz4, r20
        mov     AGRSiz5, r21
        mov     AGRSiz6, r22
        mov     AGRSiz7, r23

        mov     AGRInc0, r24
        mov     AGRInc1, r25
        mov     AGRInc2, r26
        mov     AGRInc3, r27
        mov     AGRInc4, r28
        mov     AGRInc5, r29
        mov     AGRInc6, r30
        mov     AGRInc7, r31

// restore general registers

        dlw     r2, DB_GPR2
        dlw     r3, DB_GPR3
        dlw     r4, DB_GPR4
        dlw     r5, DB_GPR5
        dlw     r6, DB_GPR6
        dlw     r7, DB_GPR7
        dlw     r8, DB_GPR8
        dlw     r9, DB_GPR9
        dlw     r10, DB_GPR10
        dlw     r11, DB_GPR11
        dlw     r12, DB_GPR12
        dlw     r13, DB_GPR13
        dlw     r14, DB_GPR14
        dlw     r15, DB_GPR15
        dlw     r16, DB_GPR16
        dlw     r17, DB_GPR17
        dlw     r18, DB_GPR18
        dlw     r19, DB_GPR19
        dlw     r20, DB_GPR20
        dlw     r21, DB_GPR21
        dlw     r22, DB_GPR22
        dlw     r23, DB_GPR23
        dlw     r24, DB_GPR24
        dlw     r25, DB_GPR25
        dlw     r26, DB_GPR26
        dlw     r27, DB_GPR27
        dlw     r28, DB_GPR28
        dlw     r29, DB_GPR29
        dlw     r30, DB_GPR30
        dlw     r31, DB_GPR31
        nop


        movi    r0, 0
        dsw     r0, DB_FLAG          // clear flag
        dlw     r0, DB_FLAG_T        // load flag
        dlw     r1, BREAK_I_INST        // instruction
        tsti    r0, 0x2468              // test break point flag
        bne     inc_r30_done            // branch if not break point
        addi    r30,4                   // execute the inst next to bp
                                        //  when return
inc_r30_done:
        la      r0, dbg_last_inst
        movi    DcacheBase,MEM_SEG
        dswr    r1, r0          ; restore instruction
        movi    DcacheBase,DBG_SEG
        dlw     r0, DB_IcacheSegment
        nop
        mov     IcacheSegment, r0; to flush I cache
        nop
        nop
        nop

//------------------------------------------------------------------
// other registers
//------------------------------------------------------------------

        dlw     r0, DB_TRAP
        nop
        andi    r0,0x3f         // clear all status bits
        ori     r0,TRAPREGINIT
        mov     TrapReg, r0
        dlw     r0, DB_STATUS
        movi    r1, 0x2000
        mov     StatusReg, r0
        rswi    r1, DSP_INT_CLEAR
        dlw     r0, INT_CTRL_TEMP       // save Reg274
        nop
        rswi    r0, DSP_INT_CTRL        // restore Reg274

// restore general registers

        dlw     r0, DB_GPR0
        dlw     r1, DB_GPR1

        movi    DcacheBase,MEM_SEG

#ifdef QT_SYNC
        movw    r20, LWTempR20
        movw    r21, LWTempR21
        movw    r22, LWTempR22
        movw    r23, LWTempR23
        movw    r24, LWTempR24
        movw    r25, LWTempR25
#endif  // QT_SYNC

dbg_last_inst:
        nop     // When host executes command 'Continue', this instruction
                //  will be replaced with the original instruction at
                //  the breakpoint. Displacement in branch instructions will be
                //  taken into account by host.
        nop
        nop
        nop
        nop

#endif	//DEBUGGER
	
        ret

⌨️ 快捷键说明

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