📄 sacmv32.lst
字号:
00008A19 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:
00008A1A 09 93 91 00 R1 = R_Queue
00008A1C 40 94 R2 = 0
?L_ClearQueueLoop:
00008A1D D1 D4 [R1++] = R2
00008A1E 09 43 C3 00 cmp R1, R_Queue+C_QueueSize
00008A20 44 4E jne ?L_ClearQueueLoop
00008A21 40 92 R1 = 0
00008A22 19 D3 C3 00 [R_ReadIndex] = R1
00008A24 19 D3 C4 00 [R_WriteIndex] = R1
00008A26 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:
00008A27 12 95 C3 00 R2 = [R_ReadIndex]
00008A29 12 45 C4 00 cmp R2,[R_WriteIndex]
00008A2B 0C 5E je L_RQ_QueueEmpty
00008A2C 0A 05 91 00 R2 += R_Queue // get queue data address
00008A2E C2 92 R1 = [R2]
00008A2F 12 95 C3 00 R2 = [R_ReadIndex]
00008A31 41 04 R2 += 1
00008A32 72 44 cmp R2, C_QueueSize
00008A33 01 4E jne L_RQ_NotQueueBottom
00008A34 40 94 R2 = 0
L_RQ_NotQueueBottom:
00008A35 1A D5 C3 00 [R_ReadIndex] = R2
//r2 = 0x0000 // get queue data
00008A37 90 9A retf
L_RQ_QueueEmpty:
//r2 = 0x8000 // queue empty
00008A38 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:
00008A39 12 95 C3 00 R2 = [R_ReadIndex]
00008A3B 12 45 C4 00 cmp R2,[R_WriteIndex]
00008A3D 03 5E je ?L_RQ_QueueEmpty
00008A3E 0A 05 91 00 R2 += R_Queue // get queue data index
00008A40 C2 92 R1 = [R2]
?L_RQ_QueueEmpty:
00008A41 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:
00008A42 12 95 C4 00 R2 = [R_WriteIndex] // put data to queue
00008A44 0A 05 91 00 R2 += R_Queue
00008A46 C2 D2 [R2] = R1
00008A47 12 95 C4 00 R2 = [R_WriteIndex]
00008A49 41 04 R2 += 1
00008A4A 72 44 cmp R2, C_QueueSize
00008A4B 01 4E jne L_WQ_NotQueueBottom
00008A4C 40 94 R2 = 0
L_WQ_NotQueueBottom:
00008A4D 1A D5 C4 00 [R_WriteIndex] = R2
00008A4F 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 ...
00008A50 11 93 C3 00 R1 = [R_ReadIndex]
00008A52 11 43 C4 00 cmp R1,[R_WriteIndex]
00008A54 11 5E je L_TQ_QueueEmpty
//... Test Queue Full ...
00008A55 11 93 C3 00 R1 = [R_ReadIndex] // For N Queue Full: 1.R=0 and W=N-1 2. R<>0 and W=R-1
00008A57 04 4E jnz L_TQ_JudgeCond2
00008A58 11 93 C4 00 R1 = [R_WriteIndex]
00008A5A 71 42 cmp R1, C_QueueSize-1 // Cond1
00008A5B 08 5E je L_TQ_QueueFull
L_TQ_JudgeCond2:
00008A5C 11 93 C3 00 R1 = [R_ReadIndex]
00008A5E 41 22 R1 -=1
00008A5F 11 43 C4 00 cmp R1,[R_WriteIndex]
00008A61 02 5E je L_TQ_QueueFull
00008A62 40 92 r1 = 0 // not Full, not empty
00008A63 90 9A retf
L_TQ_QueueFull:
00008A64 41 92 r1 = 1 // full
00008A65 90 9A retf
L_TQ_QueueEmpty:
00008A66 42 92 r1 = 2 // empty
00008A67 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
00008A68 88 DA push bp to [sp]
00008A69 08 0B 01 00 bp = sp + 1
00008A6B 03 92 r1 = [bp+3] // Address
00008A6C 04 94 r2 = [bp+4] // Page
00008A6D 5A 95 r2 = r2 lsl 4 // Prepare Page for SR
00008A6E 5A 95 r2 = r2 lsl 4
00008A6F 4A 95 r2 = r2 lsl 2
00008A70 7F BC sr &= 0x03f // Change Page
00008A71 06 A5 r2 |=sr //
00008A72 02 9D sr = r2 //
00008A73 E1 92 r1 = D:[r1] // Get data
00008A74 88 98 pop bp from [sp]
00008A75 90 9A retf
.ENDP
//........................................
F_SP_GetResource:
00008A76 5A 95 r2 = r2 lsl 4 // Prepare Page for SR
00008A77 5A 95 r2 = r2 lsl 4
00008A78 4A 95 r2 = r2 lsl 2
00008A79 7F BC sr &= 0x03f // Change Page
00008A7A 06 A5 r2 |=sr //
00008A7B 02 9D sr = r2 //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -