📄 sacmv32.lst
字号:
00009107 90 9A RETF
//////////////////////////////////////////////////////
// Queue Functions
//////////////////////////////////////////////////////
////////////////////////////////////////////////////////
// Function: _SP_InitQueue
// Description: Initiate queue for algorism use
// Syntax : SP_InitQueue()
// Destory: R1
////////////////////////////////////////////////////////
_SP_InitQueue: .PROC
_SP_InitQueue_A2000:
_SP_InitQueue_S530:
_SP_InitQueue_S480:
_SP_InitQueue_S240:
_SP_InitQueue_MS01:
_SP_InitQueue_DVR:
F_SP_InitQueue_A2000:
F_SP_InitQueue_S530:
F_SP_InitQueue_S480:
F_SP_InitQueue_S240:
F_SP_InitQueue_MS01:
F_SP_InitQueue_DVR:
F_SP_InitQueue:
00009108 09 93 7E 00 R1 = R_Queue
0000910A 40 94 R2 = 0
?L_ClearQueueLoop:
0000910B D1 D4 [R1++] = R2
0000910C 09 43 B0 00 cmp R1, R_Queue+C_QueueSize
0000910E 44 4E jne ?L_ClearQueueLoop
0000910F 40 92 R1 = 0
00009110 19 D3 B0 00 [R_ReadIndex] = R1
00009112 19 D3 B1 00 [R_WriteIndex] = R1
00009114 90 9A RETF
.ENDP
//-------------------------------------------------------
// Function: F_SP_ReadQueue_Xnnn
// Description Get a data form Queue
// Output: R1: Data read
// Destory: R1,R2
//-------------------------------------------------------
F_SP_ReadQueue_A2000:
F_SP_ReadQueue_S530:
F_SP_ReadQueue_S480:
F_SP_ReadQueue_S240:
F_SP_ReadQueue_MS01:
F_SP_ReadQueue_DVR:
F_SP_ReadQueue:
00009115 12 95 B0 00 R2 = [R_ReadIndex]
00009117 12 45 B1 00 cmp R2,[R_WriteIndex]
00009119 0C 5E je L_RQ_QueueEmpty
0000911A 0A 05 7E 00 R2 += R_Queue // get queue data address
0000911C C2 92 R1 = [R2]
0000911D 12 95 B0 00 R2 = [R_ReadIndex]
0000911F 41 04 R2 += 1
00009120 72 44 cmp R2, C_QueueSize
00009121 01 4E jne L_RQ_NotQueueBottom
00009122 40 94 R2 = 0
L_RQ_NotQueueBottom:
00009123 1A D5 B0 00 [R_ReadIndex] = R2
//r2 = 0x0000 // get queue data
00009125 90 9A retf
L_RQ_QueueEmpty:
//r2 = 0x8000 // queue empty
00009126 90 9A retf
//-------------------------------------------------------
// Function: F_SP_ReadQueue_NIC_Xnnn
// Description: Get a data from Queue but do
// not change queue index
// Output: R1: Data read
// Destory: R1,R2
//-------------------------------------------------------
F_SP_ReadQueue_NIC:
F_SP_ReadQueue_NIC_A2000:
F_SP_ReadQueue_NIC_S530:
F_SP_ReadQueue_NIC_S480:
F_SP_ReadQueue_NIC_S240:
F_SP_ReadQueue_NIC_MS01:
F_SP_ReadQueue_NIC_DVR:
00009127 12 95 B0 00 R2 = [R_ReadIndex]
00009129 12 45 B1 00 cmp R2,[R_WriteIndex]
0000912B 03 5E je ?L_RQ_QueueEmpty
0000912C 0A 05 7E 00 R2 += R_Queue // get queue data index
0000912E C2 92 R1 = [R2]
?L_RQ_QueueEmpty:
0000912F 90 9A RETF
//-------------------------------------------------------
// Function: F_SP_WriteQueue_Xnnn
// Description: Put a data to Queue
// Input : R1 Data to write
// Destory: R1,R2
//-------------------------------------------------------
F_SP_WriteQueue_A2000:
F_SP_WriteQueue_S530:
F_SP_WriteQueue_S480:
F_SP_WriteQueue_S240:
F_SP_WriteQueue_MS01:
F_SP_WriteQueue_DVR:
F_SP_WriteQueue:
00009130 12 95 B1 00 R2 = [R_WriteIndex] // put data to queue
00009132 0A 05 7E 00 R2 += R_Queue
00009134 C2 D2 [R2] = R1
00009135 12 95 B1 00 R2 = [R_WriteIndex]
00009137 41 04 R2 += 1
00009138 72 44 cmp R2, C_QueueSize
00009139 01 4E jne L_WQ_NotQueueBottom
0000913A 40 94 R2 = 0
L_WQ_NotQueueBottom:
0000913B 1A D5 B1 00 [R_WriteIndex] = R2
0000913D 90 9A RETF
//-------------------------------------------------------
// Function: F_SP_ReadQueue_NIC_Xnnn
// Description: Test Queue Status
// Output: R1: queue status
// 0: not Full, not empty
// 1: full
// 2: empty
// Destory: R1
//-------------------------------------------------------
F_SP_TestQueue_A2000:
F_SP_TestQueue_S530:
F_SP_TestQueue_S480:
F_SP_TestQueue_S240:
F_SP_TestQueue_MS01:
F_SP_TestQueue_DVR:
F_SP_TestQueue:
//... Test Queue Empty ...
0000913E 11 93 B0 00 R1 = [R_ReadIndex]
00009140 11 43 B1 00 cmp R1,[R_WriteIndex]
00009142 11 5E je L_TQ_QueueEmpty
//... Test Queue Full ...
00009143 11 93 B0 00 R1 = [R_ReadIndex] // For N Queue Full: 1.R=0 and W=N-1 2. R<>0 and W=R-1
00009145 04 4E jnz L_TQ_JudgeCond2
00009146 11 93 B1 00 R1 = [R_WriteIndex]
00009148 71 42 cmp R1, C_QueueSize-1 // Cond1
00009149 08 5E je L_TQ_QueueFull
L_TQ_JudgeCond2:
0000914A 11 93 B0 00 R1 = [R_ReadIndex]
0000914C 41 22 R1 -=1
0000914D 11 43 B1 00 cmp R1,[R_WriteIndex]
0000914F 02 5E je L_TQ_QueueFull
00009150 40 92 r1 = 0 // not Full, not empty
00009151 90 9A retf
L_TQ_QueueFull:
00009152 41 92 r1 = 1 // full
00009153 90 9A retf
L_TQ_QueueEmpty:
00009154 42 92 r1 = 2 // empty
00009155 90 9A retf
//////////////////////////////////////////////////////
// SACM_dependent functions
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
// Function: _SP_GetResource
// Description: Get data from resource(ROM area)
// Syntax: int SP_GetResource(int Addr, int Page)
// Output: R1: data to read
// Destory: R1
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
// Function: Get data from resource(ROM area)
// int SP_GetResource(int Addr, int Page)
//////////////////////////////////////////////////////////////////
_SP_GetResource: .PROC
00009156 88 DA push bp to [sp]
00009157 08 0B 01 00 bp = sp + 1
00009159 03 92 r1 = [bp+3] // Address
0000915A 04 94 r2 = [bp+4] // Page
0000915B 5A 95 r2 = r2 lsl 4 // Prepare Page for SR
0000915C 5A 95 r2 = r2 lsl 4
0000915D 4A 95 r2 = r2 lsl 2
0000915E 7F BC sr &= 0x03f // Change Page
0000915F 06 A5 r2 |=sr //
00009160 02 9D sr = r2 //
00009161 E1 92 r1 = D:[r1] // Get data
00009162 88 98 pop bp from [sp]
00009163 90 9A retf
.ENDP
//........................................
F_SP_GetResource:
00009164 5A 95 r2 = r2 lsl 4 // Prepare Page for SR
00009165 5A 95 r2 = r2 lsl 4
00009166 4A 95 r2 = r2 lsl 2
00009167 7F BC sr &= 0x03f // Change Page
00009168 06 A5 r2 |=sr //
00009169 02 9D sr = r2 //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -