📄 navi_select.s01
字号:
NAME navi_select(17)
RSEG APC_NAVI_UI_SELECT(0)
RSEG CSTR(0)
RSEG CONST(0)
RSEG APD_NAVI_SELECT(0)
RSEG AP_NAVI_UI_SELECT(0)
EXTERN CurListoffset
PUBLIC Deal_play_Navi
EXTERN FS_CD
EXTERN FS_FClose
EXTERN FS_FOpen
EXTERN FS_FRead
EXTERN FS_FSeek
EXTERN FS_GetCurDir
EXTERN FS_SetCurDir
PUBLIC Navi_ext
PUBLIC Navi_read_S
EXTERN Navifp
EXTERN UI_play_Navi
EXTERN VMWrite
EXTERN buffer
PUBLIC check_file_type
PUBLIC ext
EXTERN g_music_vars
PUBLIC location
PUBLIC msz_temp
PUBLIC navi_offset
PUBLIC temp_browser_vars
EXTERN ?CLZ80B_4_04_L00
EXTERN ?L_LSH_L03
EXTERN ?SL_DIV_L03
EXTERN ?SL_MOD_L03
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
EXTERN ?MEMSET_L11
EXTERN ?STRCMP_L11
RSEG APC_NAVI_UI_SELECT
Navi_read_S:
; 1. #include "ap_music.h"
; 2. const char msz_temp[12]="NAVI 0 " ;
; 3. extern handle Navifp;
; 4. extern long CurListoffset; //每个表的偏移量
; 5. extern long CurTotalNum;
; 6. extern long Navfileoffset; //当前表的已经读的偏移量
; 7. extern BOOL Navi_read(long fileoffset);
; 8. #pragma memory=dataseg(APD_NAVI)
; 9. extern char navi_buff[NAVI_GROUP*30];
; 10. extern char buffer[512];
; 11.
; 12. #pragma memory=default
; 13. #pragma memory=dataseg(APD_NAVI_SELECT)
; 14. BYTE ext[4];
; 15. file_location_t location;
; 16. browser_vars_t temp_browser_vars;
; 17. long navi_offset;
; 18. #pragma memory=default
; 19. #pragma memory=constseg(AP_NAVI_UI_SELECT)
; 20. const char Navi_ext[][4] = {"MP3", "WMA", "ASF", "WMV", "OGG","APE","WAV","ACT","JPG","BMP","GIF","TXT","AMV"};
; 21. #pragma memory=default
; 22.
; 23. #pragma codeseg(APC_NAVI_UI_SELECT)
; 24. void Navi_read_S(long fileoffset)
; 25. {
PUSH BC
PUSH DE
PUSH AF
; 26. char IO27Bak = input8(0x27);
IN A,(39)
LD HL,0
ADD HL,SP
LD (HL),A
; 27. output8(0x27,0); //关DSP中断
XOR A
OUT (39),A
; 28. FS_FSeek(fileoffset/512,FS_SEEK_FFROMSTART,Navifp);
LD HL,(Navifp)
PUSH HL
LD L,A
PUSH HL
LD H,L
PUSH HL
LD H,2
PUSH HL
EX DE,HL
CALL LWRD ?SL_DIV_L03
EX DE,HL
CALL LWRD FS_FSeek
POP HL
POP HL
; 29. FS_FRead(buffer,1,Navifp);
LD HL,(Navifp)
PUSH HL
LD C,1
LD DE,buffer
CALL LWRD FS_FRead
POP HL
; 30. output8(0x27,IO27Bak);
LD HL,0
ADD HL,SP
LD A,(HL)
OUT (39),A
; 31. }
POP HL
POP HL
POP HL
JP LWRD ?BANK_FAST_LEAVE_L08
check_file_type:
; 32.
; 33. int check_file_type(long active)
; 34. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
; 35. char i;
; 36. char IO27Bak = input8(0x27);
IN A,(39)
LD (IX-1),A
; 37. navi_offset = (active-1)*sizeof(file_info_t)+CurListoffset+sizeof(Location_Path_t);
LD HL,65535
PUSH HL
PUSH HL
LD L,(IX+2)
LD H,(IX+3)
POP BC
ADD HL,BC
EX DE,HL
LD L,(IX+4)
LD H,(IX+5)
POP BC
ADC HL,BC
LD C,L
LD B,H
EX DE,HL
LD A,6
CALL LWRD ?L_LSH_L03
PUSH BC
PUSH HL
LD HL,(CurListoffset)
POP BC
ADD HL,BC
EX DE,HL
LD HL,(CurListoffset+2)
POP BC
ADC HL,BC
PUSH HL
PUSH DE
LD HL,64
POP BC
ADD HL,BC
EX DE,HL
LD HL,0
POP BC
ADC HL,BC
LD C,L
LD B,H
EX DE,HL
LD (navi_offset),HL
LD (navi_offset+2),BC
; 38. memset(&location,0,sizeof(file_location_t));
LD BC,43
LD DE,location
LD L,B
CALL LWRD ?MEMSET_L11
; 39. Navi_read_S(CurListoffset);
LD BC,(CurListoffset+2)
LD DE,(CurListoffset)
LD A,BYTE3 Navi_read_S
LD HL,LWRD Navi_read_S
CALL LWRD ?BANK_CALL_DIRECT_L08
; 40. memcpy(&location,buffer+CurListoffset%512+1,sizeof(file_location_t)-2);
LD BC,41
LD C,B
PUSH BC
LD B,2
PUSH BC
LD BC,(CurListoffset+2)
LD HL,(CurListoffset)
CALL LWRD ?SL_MOD_L03
EX DE,HL
LD HL,buffer+1
ADD HL,DE
LD DE,location
LD BC,41
LDIR
; 41. Navi_read_S(navi_offset);
LD BC,(navi_offset+2)
LD DE,(navi_offset)
LD A,BYTE3 Navi_read_S
LD HL,LWRD Navi_read_S
CALL LWRD ?BANK_CALL_DIRECT_L08
; 42. memcpy(location.filename,buffer+navi_offset%512+1,11);
LD BC,11
LD C,B
PUSH BC
LD B,2
PUSH BC
LD BC,(navi_offset+2)
LD HL,(navi_offset)
CALL LWRD ?SL_MOD_L03
EX DE,HL
LD HL,buffer+1
ADD HL,DE
LD DE,location+26
LD BC,11
LDIR
; 43. memcpy(ext, buffer+navi_offset%512+1+8, 3);
PUSH BC
LD B,2
PUSH BC
LD BC,(navi_offset+2)
LD HL,(navi_offset)
CALL LWRD ?SL_MOD_L03
EX DE,HL
LD HL,buffer+9
ADD HL,DE
LD DE,ext
LD BC,3
LDIR
; 44. ext[0] = (ext[0]>='a' && ext[0]<='z') ? ext[0] - 'a' + 'A' : ext[0];
LD A,(ext)
CP 97
JR C,?0005
LD A,(ext)
LD B,A
LD A,122
CP B
JR C,?0005
LD A,(ext)
ADD A,224
JR ?0006
?0005:
LD A,(ext)
?0006:
LD (ext),A
; 45. ext[1] = (ext[1]>='a' && ext[1]<='z') ? ext[1] - 'a' + 'A' : ext[1];
LD A,(ext+1)
CP 97
JR C,?0011
LD A,(ext+1)
LD B,A
LD A,122
CP B
JR C,?0011
LD A,(ext+1)
ADD A,224
JR ?0012
?0011:
LD A,(ext+1)
?0012:
LD (ext+1),A
; 46. ext[2] = (ext[2]>='a' && ext[2]<='z') ? ext[2] - 'a' + 'A' : ext[2];
LD A,(ext+2)
CP 97
JR C,?0017
LD A,(ext+2)
LD B,A
LD A,122
CP B
JR C,?0017
LD A,(ext+2)
ADD A,224
JR ?0018
?0017:
LD A,(ext+2)
?0018:
LD (ext+2),A
; 47. ext[3] = 0;
XOR A
LD (ext+3),A
; 48. for(i=0;i<NAVI_FILE_TYPE_NUM;i++)
LD (IX-2),C
?0021:
LD A,(IX-2)
CP 13
JR NC,?0020
?0022:
; 49. {
; 50. if(strcmp(Navi_ext[i],ext)==0)
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
LD BC,Navi_ext
ADD HL,BC
EX DE,HL
LD HL,ext
CALL LWRD ?STRCMP_L11
LD A,L
OR H
JR Z,?0020
?0024:
; 51. break;
?0025:
INC (IX-2)
JR ?0021
?0020:
; 52. }
; 53. memcpy(&temp_browser_vars.location,&location,sizeof(file_location_t));
LD BC,43
LD DE,temp_browser_vars+2
LD HL,location
LDIR
; 54. output8(0x27,0); //关DSP中断
XOR A
OUT (39),A
; 55. VMWrite(&temp_browser_vars,VM_AP_BROWSER);
LD B,76
LD DE,temp_browser_vars
CALL LWRD VMWrite
; 56. output8(0x27,IO27Bak); //开DSP中断
LD A,(IX-1)
OUT (39),A
; 57. if(i<6) //music
LD A,(IX-2)
CP 6
JR NC,?0027
?0026:
; 58. {
; 59. memcpy(&g_music_vars.location,&location,sizeof(file_location_t));
LD BC,43
LD DE,g_music_vars+7
LD HL,location
LDIR
; 60. return RESULT_MUSIC_PLAY; //zhangxs changed for real play 2007.03.30
LD HL,30
; 61. }
JR ?0034
?0027:
; 62. else if(i<8) //voice
CP 8
JR NC,?0029
?0028:
; 63. {
; 64. return RESULT_VOICE_PLAY;
LD HL,31
JR ?0034
?0029:
; 65. }else if(i<11) //jpg
CP 11
JR NC,?0031
?0030:
; 66. {
; 67.
; 68. return RESULT_VIEW_PLAY;
LD HL,34
JR ?0034
?0031:
; 69. }else if(i<12) //text
CP 12
JR NC,?0033
?0032:
; 70. {
; 71.
; 72. return RESULT_READER_PLAY;
LD HL,33
; 73. }
JR ?0034
?0033:
; 74. else
; 75. {
; 76.
; 77. return RESULT_MOVIE_PLAY;
LD HL,32
; 78. }
?0034:
JP LWRD ?BANK_LEAVE_DIRECT_L08
; 79.
; 80. }
Deal_play_Navi:
; 81.
; 82. int Deal_play_Navi(void)
; 83. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -6
; 84. int result=0;
; 85. long CurDirBackup;
; 86. BYTE IO27Bak = input8(0x27);
IN A,(39)
LD (IX-6),A
; 87. output8(0x27,IO27Bak&0xfe); //关DSP中断
RES 0,A
OUT (39),A
; 88. //FS_Backup(NaviBackbuf,FS_BACKUP_DIRINFO,0);//目录项备份
; 89. CurDirBackup=FS_GetCurDir();
CALL LWRD FS_GetCurDir
LD (IX-4),L
LD (IX-3),H
LD (IX-2),C
LD (IX-1),B
; 90. FS_CD(FS_CD_ROOT); //返回根目录查找列表
LD DE,?0035
CALL LWRD FS_CD
; 91. Navifp = FS_FOpen(msz_temp,FS_OPEN_NORMAL);
LD C,0
LD DE,msz_temp
CALL LWRD FS_FOpen
LD (Navifp),HL
; 92. if(Navifp==NULL)
LD A,L
OR H
JR NZ,?0037
?0036:
; 93. {
; 94. // FS_Restore(NaviBackbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 95. FS_SetCurDir(CurDirBackup);
CALL LWRD ?0039
; 96. output8(0x27,IO27Bak);
LD A,(IX-6)
OUT (39),A
; 97. return RESULT_IGNORE;
LD HL,52
; 98. }
JR ?0038
?0037:
; 99. output8(0x27,IO27Bak);
LD A,(IX-6)
OUT (39),A
; 100. result = UI_play_Navi();
LD A,BYTE3 UI_play_Navi
LD HL,LWRD UI_play_Navi
CALL LWRD ?BANK_CALL_DIRECT_L08
EX DE,HL
; 101. output8(0x27,IO27Bak&0xfe);
LD B,(IX-6)
RES 0,B
LD A,B
OUT (39),A
; 102. FS_FClose(Navifp);
PUSH DE
LD DE,(Navifp)
CALL LWRD FS_FClose
; 103. // FS_Restore(NaviBackbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 104. FS_SetCurDir(CurDirBackup);
CALL LWRD ?0039
POP DE
; 105. output8(0x27,IO27Bak);
LD A,(IX-6)
OUT (39),A
; 106. return result;
EX DE,HL
; 107. }
?0038:
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0039:
LD C,(IX-2)
LD B,(IX-1)
LD E,(IX-4)
LD D,(IX-3)
JP LWRD FS_SetCurDir
RSEG CSTR
?0035:
DEFB ':'
DEFB 0
RSEG CONST
msz_temp:
DEFB 'NAVI 0 '
RSEG APD_NAVI_SELECT
ext:
DEFS 4
location:
DEFS 43
temp_browser_vars:
DEFS 45
navi_offset:
DEFS 4
RSEG AP_NAVI_UI_SELECT
Navi_ext:
DEFB 'MP3'
DEFB 0
DEFB 'WMA'
DEFB 0
DEFB 'ASF'
DEFB 0
DEFB 'WMV'
DEFB 0
DEFB 'OGG'
DEFB 0
DEFB 'APE'
DEFB 0
DEFB 'WAV'
DEFB 0
DEFB 'ACT'
DEFB 0
DEFB 'JPG'
DEFB 0
DEFB 'BMP'
DEFB 0
DEFB 'GIF'
DEFB 0
DEFB 'TXT'
DEFB 0
DEFB 'AMV'
DEFB 0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -