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

📄 c200mnrt.asm

📁 DSP BIOS A
💻 ASM
📖 第 1 页 / 共 5 页
字号:
               TBLR   XTND_ADRS                 ;
               TBLW   PRM_XTND                  ;
               .elseif (MON_PMAP_PAGE == MON_PMAP_PAGE_DATA)
               BLDD   #MON_PMAP_ADDR, XTND_ADRS ;
               BLDD   PRM_XTND, #MON_PMAP_ADDR  ;
               .elseif (MON_PMAP_PAGE == MON_PMAP_PAGE_IO)
               IN     XTND_ADRS, MON_PMAP_ADDR  ;
               OUT    PRM_XTND, MON_PMAP_ADDR   ;
               .endif ; (MON_PMAP_PAGE)
               .endif ; (MON_XTND_PROG == MON_XTND_PROG_ON)
;
               .if (MON_XTND_BOTH == MON_XTND_ON)
               B      LOAD_NEW_DONE             ;
LOAD_NEW_DATA                                   ;
               .endif ; (MON_XTND_BOTH == MON_XTND_ON)
;
               .if (MON_XTND_DATA == MON_XTND_DATA_ON)
               .if (MON_DMAP_PAGE == MON_DMAP_PAGE_PROG)
               LALK   #MON_DMAP_ADDR            ;
               TBLR   XTND_ADRS                 ;
               TBLW   PRM_XTND                  ;
               .elseif (MON_DMAP_PAGE == MON_DMAP_PAGE_DATA)
               BLDD   #MON_DMAP_ADDR, XTND_ADRS ;
               BLDD   PRM_XTND, #MON_DMAP_ADDR  ;
               .elseif (MON_DMAP_PAGE == MON_DMAP_PAGE_IO)
               IN     XTND_ADRS, MON_DMAP_ADDR  ;
               OUT    PRM_XTND, MON_DMAP_ADDR   ;
               .endif ; (MON_DMAP_PAGE)
               .endif ; (MON_XTND_DATA == MON_XTND_DATA_ON)
;
LOAD_NEW_DONE
               .endif ; (MON_XTND_EITHER == MON_XTND_ON)
               .endm  ; mon_load_new
;
               .page 
;---------------------------------------------------------------------------
; Define MON_LOAD_OLD macro.
; Load the old MON_PMAP or MON_DMAP value into the appropriate map register.
; This macro should not be modified.
;---------------------------------------------------------------------------
mon_load_old   .macro
               .if (MON_XTND_EITHER == MON_XTND_ON)
               BIT    PRM_CMND, 15-B_MAPSMASK   ;
               BBZ    LOAD_OLD_DONE             ;
;
               .if (MON_XTND_BOTH == MON_XTND_ON)
               BIT    PRM_CMND, 15-B_PORDMASK   ;
               BBNZ   LOAD_OLD_DATA             ;
LOAD_OLD_PROG                                   ;
               .endif ; (MON_XTND_BOTH == MON_XTND_ON)
;
               .if (MON_XTND_PROG == MON_XTND_PROG_ON)
               .if (MON_PMAP_PAGE == MON_PMAP_PAGE_PROG)
               LALK   #MON_PMAP_ADDR            ;
               TBLW   XTND_ADRS                 ;
               .elseif (MON_PMAP_PAGE == MON_PMAP_PAGE_DATA)
               BLDD   XTND_ADRS, #MON_PMAP_ADDR ;
               .elseif (MON_PMAP_PAGE == MON_PMAP_PAGE_IO)
               OUT    XTND_ADRS, MON_PMAP_ADDR  ;
               .endif ; (MON_PMAP_PAGE)
               .endif ; (MON_XTND_PROG == MON_XTND_PROG_ON)
;
               .if (MON_XTND_BOTH == MON_XTND_ON)
               B      LOAD_OLD_DONE             ;
LOAD_OLD_DATA                                   ;
               .endif ; (MON_XTND_BOTH == MON_XTND_ON)
;
               .if (MON_XTND_DATA == MON_XTND_DATA_ON)
               .if (MON_DMAP_PAGE == MON_DMAP_PAGE_PROG)
               LALK   #MON_DMAP_ADDR            ;
               TBLW   XTND_ADRS                 ;
               .elseif (MON_DMAP_PAGE == MON_DMAP_PAGE_DATA)
               BLDD   XTND_ADRS, #MON_DMAP_ADDR ;
               .elseif (MON_DMAP_PAGE == MON_DMAP_PAGE_IO)
               OUT    XTND_ADRS, MON_DMAP_ADDR  ;
               .endif ; (MON_DMAP_PAGE}
               .endif ; (MON_XTND_DATA == MON_XTND_DATA_ON)
;
LOAD_OLD_DONE
               .endif ; (MON_XTND_EITHER == MON_XTND_ON)
               .endm  ; mon_load_old
;
               .page 
;---------------------------------------------------------------------------
; Define MON_SAVE_CORE macro.
; This macro should not be modified.
;---------------------------------------------------------------------------
mon_save_core  .macro
               .if (MON_RGST == MON_RGST_ANY)
               BLDD  MON_TEMP_PC,   #MON_PC   ; Save PC.
               BLDD  MON_TEMP_ST0,  #MON_ST0  ; Save ST0.
               BLDD  MON_TEMP_ST1,  #MON_ST1  ; Save ST1.
               BLDD  MON_TEMP_ACCL, #MON_ACCL ; Save ACCL.
               BLDD  MON_TEMP_ACCH, #MON_ACCH ; Save ACCH.
               .else ; (MON_RGST == MON_RGST_ZRO)
               PSHD  MON_TEMP_PC  ;
               POPD  MON_PC       ; Save PC.
               PSHD  MON_TEMP_ST0 ;
               POPD  MON_ST0      ; Save ST0.
               PSHD  MON_TEMP_ST1 ;
               POPD  MON_ST1      ; Save ST1.
               ;                  ;
               ;                  ; Already saved ACCL.
               ;                  ;
               ;                  ; Already saved ACCH.
               .endif ; (MON_RGST)
               .endm ; mon_save_core
;
;---------------------------------------------------------------------------
; Define MON_ETRAP_LOAD macro.
; This macro should not be modified.
;---------------------------------------------------------------------------
mon_etrap_load .macro VALU
               SPLK  #VALU, MON_TRAP_VEC
               .endm
;
;---------------------------------------------------------------------------
; Define MON_ETRAP_NULL macro.
; This macro should not be modified.
;---------------------------------------------------------------------------
mon_etrap_null .macro VALU
               SPLK  #NULL_ETRP?, MON_TRAP_VEC
               mon_etrap
NULL_ETRP?     SPLK  #VALU, MON_TRAP_VEC
               .endm
;
;---------------------------------------------------------------------------
; Define MON_ERET_NULL macro.
; This macro should not be modified.
;---------------------------------------------------------------------------
mon_eret_null  .macro VALU
               LALK   #VALU
               PUSH
               mon_eret
               .endm
;
               .page 
;---------------------------------------------------------------------------
; Define the MON_WAIT macro.
; This macro should not be modified.
;---------------------------------------------------------------------------
mon_wait       .macro
;
               .if (MON_WAIT_USE == MON_WAIT_USE_YES)
               .var   WAIT_MASK
               .asg   0, WAIT_MASK
;
               .if (MON_WAIT_STOP == MON_WAIT_STOP_YES)
               .eval  STOPMASK | WAIT_MASK, WAIT_MASK
               .endif
               .if (MON_WAIT_SNGL == MON_WAIT_SNGL_YES)
               .eval  SNGLMASK | WAIT_MASK, WAIT_MASK
               .endif
               .if (MON_WAIT_EVER == MON_WAIT_EVER_YES)
               .eval  EVERMASK | WAIT_MASK, WAIT_MASK
               .endif
               .if (MON_WAIT_AUTO == MON_WAIT_AUTO_YES)
               .eval  AUTOMASK | WAIT_MASK, WAIT_MASK
               .endif
;
               .if (0 != WAIT_MASK)
               LACK   #WAIT_MASK      ; Short immediate is ok.
               AND    PRM_CMND        ;
               BZ     NOT_WAIT?       ;
               mon_wait_test          ;
NOT_WAIT?      .endif ; (0 != WAIT_MASK)
;
               .endif ; (MON_WAIT_USE == MON_WAIT_USE_YES)
;
               .endm  ; mon_wait
;
;---------------------------------------------------------------------------
; Define the MON_WAIT_TEST macro.
; The default code in this macro is very generic, so is likely usable as is.
; It waits for an interrupt driven routine to signal permission to stop,
; step or run by a placing a non-zero value in location MON_WAIT_B2.
; This is a global symbol referring to a location in data memory page zero
; that is reserved for the sole use of this macro.
; If can be modified by the user as required.
;---------------------------------------------------------------------------
mon_wait_test  .macro
               SPLK   #0, MON_WAIT_B2 ;
WAIT_TEST?     LACL   MON_WAIT_B2     ;
               BZ     WAIT_TEST?      ;
               .endm ; mon_wait_test
;
               .page 
;***************************************************************************
; REALTIME OPCODES
;***************************************************************************
;
;---------------------------------------------------------------------------
; Define the C2xx opcode mnemonics that are used as part of
; the MON_IO_MAP_USE_RAM and MON_IO_MAP_USE_ROM options.
;---------------------------------------------------------------------------
               .if (MON_IO_MAP_USE != MON_IO_MAP_USE_NOT)
OPCODE_ERET    .set   0be96h ;
                             ; Return Opcode in "ERET"
DP_MASK        .set   0007fh ;
                             ; DP field mask for IN/OUT opcodes.
OPCODE_IN      .set  (0af00h & ~DP_MASK) | (MSG_DATA & DP_MASK) 
                             ; IO Read Opcode "IN MSG_DATA, PA0"
OPCODE_OUT     .set  (00c00h & ~DP_MASK) | (MSG_DATA & DP_MASK)
                             ; IO Write Opcode "OUT MSG_DATA, PA0"
               .endif ; (MON_IO_MAP_USE != MON_IO_MAP_USE_NOT)
;
               .page 
;***************************************************************************
; This page is intentionally left blank.
;***************************************************************************
;
               .page 
;***************************************************************************
; DEBUG MACROS
;***************************************************************************
;
;---------------------------------------------------------------------------
; Define MON_DBG_SAVE macro.
; This macro is used to sample various status bits on monitor entry.
;
; Configure the monitor to save (or not save) the values of the four
; registers ST0, ST1, MSG_STAT and MSG_BP in data memory locations 0x70
; to 0x73. The current and prior values of ST1(3-2) and MSG_STAT(4) are
; stored in locations 0x74 to 0x77.
;
; The results of using mon_dbg_save are:            ST1(3-2)   MSG_STAT(4)
;
; monitor initialisation                              2             0
; step-n                                              1             0
; run-n                                               1             0
; update            (during run with updating)        3             1
; halt               (after run with updating)        3             1
; halt            (after run without updating)        3             1
; hard breakpoint (after run without updating)        3             1
; soft breakpoint (after run without updating)        2             0
; idle     (after step/run-n without updating)        0             0
;---------------------------------------------------------------------------
               .if (MON_DEBUG)
mon_dbg_save   .macro
               LDP    #MON_PGE0_DP    ; Set DP to page zero.
               BLDD   #MON_ST0, 070h  ; Save ST0.
               BLDD   #MON_ST1, 071h  ; Save ST1.
               BLDD   #MSG_STAT, 072h ; Save MSG_STAT.
               BLDD   #MSG_CNTL, 073h ; Save MSG_CNTL.
;
               LACL   070h
               ANDK   #000Ch
               RPTK   #(2-1)
               SFRD
               BLDD   #074h, 076h ; Save prior ST1(3-2).
               SACL   074h        ; Save current ST1(3-2).
;
               LACL   072h
               ANDK   #0010h
               RPTK   #(4-1)
               SFR
               BLDD   #075h, 077h ; Save prior MSG_STAT(4).
               SACL   075h        ; Save current MSG_STAT(4).
               .endm
               .endif ; (MON_DEBUG)
;
               .page 
;---------------------------------------------------------------------------
; Define MON_DBG_START macro.
; This macro is used to start a C209 timer so as to benchmark
; the HLL Debugger updating memory or register values during a run command.
;---------------------------------------------------------------------------
               .if (MON_DEBUG)
mon_dbg_start  .macro

⌨️ 快捷键说明

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