📄 blkmove.c
字号:
/*--------------------------------------------------------*/
/* WQ21ST SOFTWARE STUDIO. */
/*--------------------------------------------------------*/
/* Moves block of memory from program to data */
/* and data to program space */
/*--------------------------------------------------------*/
/* file name: blkmove.c */
/* Started on: 08/11/2001 by WQ */
/* Last update: 08/28/2001 by WQ */
/*--------------------------------------------------------*/
unsigned int blk_mv_p2d( unsigned int *pgm_src, unsigned int size, unsigned int *data_dest )
{
/*--------------------------------------------------*/
/* Save 3 Aux Registers to Stack bump past temp 1st */
/* Use AR3 to point to parameters on the stack */
/*--------------------------------------------------*/
asm(" MAR *+ ");
asm(" SAR AR3,*+ ");
/*--------------------------------------------------*/
/* AR3 is Pointer to Parameters on the stack via */
/* backing up stack pointer then restoring it */
/*--------------------------------------------------*/
asm(" MAR *- ");
asm(" MAR *- ");
asm(" MAR *- ");
asm(" LAR AR0,#3 ");
asm(" LAR AR3,*0+ ");
asm(" MAR *,AR3 ");
asm(" SBRK #3 ");
/*--------------------------------------------------*/
/* save off AR4 - AR6 onto stack, parameter vars */
/*--------------------------------------------------*/
asm(" MAR *,AR1 ");
asm(" SAR AR4,*+ ");
asm(" SAR AR5,*+ ");
asm(" SAR AR6,*+ ");
/*--------------------------------------------------*/
/* Block move code */
/* AR4 has start address pointer */
/* AR5 has size needs to be decremented by 1 */
/* AR6 has data buffer pointer */
/*--------------------------------------------------*/
asm(" MAR *,AR3 ");
asm(" LAR AR4,*- ");
asm(" LAR AR5,*- ");
asm(" LAR AR6,*- ");
asm(" MAR *,AR4 ");
asm(" LACL *,AR5 ");
asm(" SBRK #1 ");
asm(" MAR *,AR6 ");
asm("BMPLP: TBLR *+,AR5 ");
asm(" ADD #1 ");
asm(" BANZ BMPLP,AR6 ");
/* Restore Aux Registers from Stack */
asm(" MAR *,AR1 ");
asm(" MAR *- ");
asm(" LAR AR6,*- ");
asm(" LAR AR5,*- ");
asm(" LAR AR4,*- ");
asm(" LAR AR3,*- ");
return( 0 );
}
/* This function has not been debugged */
unsigned int blk_mv_d2p( unsigned int *data_src, unsigned int size, unsigned int *pgm_dest )
{
/*--------------------------------------------------*/
/* Save 3 Aux Registers to Stack bump past temp 1st */
/* Use AR3 to point to parameters on the stack */
/*--------------------------------------------------*/
asm(" MAR *+ ");
asm(" SAR AR3,*+ ");
/*--------------------------------------------------*/
/* AR3 is Pointer to Parameters on the stack via */
/* backing up stack pointer then restoring it */
/*--------------------------------------------------*/
asm(" MAR *- ");
asm(" MAR *- ");
asm(" MAR *- ");
asm(" LAR AR0,#3 ");
asm(" LAR AR3,*0+ ");
asm(" MAR *,AR3 ");
asm(" SBRK #3 ");
/*--------------------------------------------------*/
/* save off AR4 - AR6 onto stack, parameter vars */
/*--------------------------------------------------*/
asm(" MAR *,AR1 ");
asm(" SAR AR4,*+ ");
asm(" SAR AR5,*+ ");
asm(" SAR AR6,*+ ");
/*--------------------------------------------------*/
/* Block move code */
/* AR4 has start data address pointer */
/* AR5 has size needs to be decremented by 1 */
/* AR6 has program destination pointer */
/*--------------------------------------------------*/
asm(" MAR *,AR3 ");
asm(" LAR AR4,*- ");
asm(" LAR AR5,*- ");
asm(" LAR AR6,*- ");
asm(" MAR *,AR6 ");
asm(" LACL *,AR5 ");
asm(" SBRK #1 ");
asm(" MAR *,AR4 ");
asm("BMDLP: TBLW *+,AR5 ");
asm(" ADD #1 ");
asm(" BANZ BMDLP,AR4 ");
/* Restore Aux Registers from Stack */
asm(" MAR *,AR1 ");
asm(" MAR *- ");
asm(" LAR AR6,*- ");
asm(" LAR AR5,*- ");
asm(" LAR AR4,*- ");
asm(" LAR AR3,*- ");
return( 0 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -