📄 filldataroutine_small_cf.asm
字号:
/************************************************************************************************/
/* This routine reads sectors from the compact flash into the pack_buffer. This routine is */
/* called only for CFs that have 4 or less sectors per cluster. Since we only want to read */
/* in 4 sectors at a time to fill up pack_buffer half way, this routine will not work for CFs */
/* with more than 4 sectors per cluster (see FillDataRoutine_Big_CF.asm). */
/* Last Modified 02-26-03. H. Desai */
/************************************************************************************************/
.GLOBAL Small_CF;
.EXTERN pack_buffer_wrptr;
.EXTERN pack_buffer;
.EXTERN Current_Cluster;
.EXTERN Cluster_to_Sector;
.EXTERN Parameters;
.EXTERN Calc_CHS;
.EXTERN Read_MP3;
.EXTERN Get_Next_Cluster;
.EXTERN CheckPredacSpace;
.SECTION program;
/**For CFs with 4 or less sectors per cluster**/
Small_CF:
NOP;
READ_MP3:
P0.L = pack_buffer_wrptr; //Set up DAG registers for Pack Buffer
P0.H = pack_buffer_wrptr;
R0 = [P0];
I0 = R0;
L0 = 0x1000;
R0.L = pack_buffer;
R0.H = pack_buffer;
B0 = R0;
P0.H = Current_Cluster;
P0.L = Current_Cluster;
R0 = W[P0](Z);
CALL Cluster_to_Sector;
P0.H = Parameters;
P0.L = Parameters;
R0 = [P0+0x14]; //# of sectors per cluster
P5 = R0;
LSETUP(Read_MP3_Data_BEGIN, Read_MP3_Data_END) LC0 = P5;
Read_MP3_Data_BEGIN:
R0 = R5;
CALL Calc_CHS;
Call Read_MP3;
R5 += 1; //Go to next Sector
Read_MP3_Data_END: NOP;
NOP;
P0.H = pack_buffer_wrptr;
P0.L = pack_buffer_wrptr;
R0 = I0;
[P0] = R0; //Save off Pack Buffer Write Pointer
CALL Get_Next_Cluster;
R6 += -1; //Decrement # of Clusters
R0 = 0x0(Z);
cc = R6 == R0;
IF cc JUMP Done_Reading_MP3; //If 0, done reading MP3 data
JUMP READ_MP3;
Done_Reading_MP3:
NOP;
JUMP CheckPredacSpace;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -