navi.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 933 行 · 第 1/2 页
S01
933 行
NAME navi(17)
RSEG APC_NAVI(0)
RSEG UDATA0(0)
RSEG APD_NAVI(0)
PUBLIC CurListoffset
PUBLIC CurTotalNum
PUBLIC Navfileoffset
EXTERN Navi_read_head
EXTERN ScrollFlag
PUBLIC UI_play_Navi
EXTERN ap_get_message
EXTERN ap_handle_hotkey
PUBLIC buffer
EXTERN check_file_type
PUBLIC navi_buff
EXTERN ui_Navi_list
EXTERN ?CLZ80B_4_04_L00
EXTERN ?UC_MOD_L01
EXTERN ?S_MUL_L02
EXTERN ?L_LSH_L03
EXTERN ?L_MUL_L03
EXTERN ?SL_DIV_L03
EXTERN ?SL_MOD_L03
EXTERN ?SL_CMP_L03
EXTERN ?L_INC_L03
EXTERN ?L_DEC_L03
EXTERN ?L_ADDASG_L03
EXTERN ?L_SUBASG_L03
EXTERN ?L_LSHASG_L03
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG APC_NAVI
UI_play_Navi:
; 1. #include "ap_music.h"
; 2. //extern BOOL Navi_read_data(long fileoffset,char direct);
; 3. //extern BOOL GetFilePath(file_location_t *location);
; 4. //extern BOOL Navi_read(long fileoffset);
; 5. extern BOOL Navi_read_head(long fileoffset,char direct,WORD *DelNum);
; 6. extern BOOL GetFilePath(file_location_t *location);
; 7. extern void ui_Navi_list(BYTE active,BYTE old_active,long file_active,char direct,bool scroll_flag);
; 8. extern int check_file_type(long active);
; 9. extern char ScrollFlag; //滚动标志位
; 10.
; 11. long CurListoffset; //每个表的偏移量
; 12. long Navfileoffset; //当前表的已经读的偏移量
; 13. long CurTotalNum;
; 14.
; 15. #pragma memory=dataseg(APD_NAVI)
; 16. //char msz_temp[12];
; 17. char navi_buff[NAVI_GROUP*30];
; 18. char buffer[512];
; 19. #pragma memory=default
; 20.
; 21. #pragma codeseg(APC_NAVI)
; 22.
; 23.
; 24. int UI_play_Navi()
; 25. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -18
PUSH IY
; 26.
; 27. BOOL need_read=FALSE;
; 28. BOOL need_draw=TRUE;
; 29. BYTE active_list = 0;
; 30. BYTE old_list =0;
; 31. char direct=0;
; 32. char key;
; 33. long g_active_list ;
; 34. WORD DelNum=0 ;
XOR A
LD (IX-10),A
LD (IX-9),A
; 35. char head;
; 36. long save_list=0;
; 37. char save_active=0;
; 38.
; 39.
; 40. int result=0;
; 41.
; 42. if(!Navi_read_head(0,0,&DelNum))
LD (IX-3),A
LD (IX-5),1
LD (IX-8),A
LD (IX-4),A
LD (IX-14),A
LD (IX-13),A
LD (IX-12),A
LD (IX-11),A
LD (IX-1),A
LD IY,0
LD HL,10
ADD HL,SP
PUSH HL
LD C,A
PUSH BC
LD B,C
LD D,B
LD E,C
CALL LWRD ?0067
POP AF
POP AF
INC L
DEC L
JR NZ,?0003
?0002:
; 43. {
; 44. return RESULT_IGNORE;
LD HL,52
; 45. }
JP LWRD ?0064
?0003:
; 46. g_active_list =0;
; 47. head =1;
XOR A
LD (IX-18),A
LD (IX-17),A
LD (IX-16),A
LD (IX-15),A
LD (IX-7),1
?0005:
; 48. while(1)
; 49. {
; 50. if(need_read)
XOR A
OR (IX-3)
JR Z,?0008
?0007:
; 51. {
; 52. Navi_read_head(Navfileoffset,head,&DelNum);
LD HL,10
ADD HL,SP
PUSH HL
LD L,(IX-7)
PUSH HL
CALL LWRD ?0068
POP AF
POP AF
; 53. need_read=FALSE;
LD (IX-3),0
?0008:
; 54. }
; 55. if(need_draw)
XOR A
OR (IX-5)
JR Z,?0010
?0009:
; 56. {
; 57.
; 58. ui_Navi_list(active_list,active_list,g_active_list, direct,0);
LD C,0
PUSH BC
LD L,(IX-4)
PUSH HL
LD L,(IX-16)
LD H,(IX-15)
PUSH HL
LD L,(IX-18)
LD H,(IX-17)
PUSH HL
LD C,(IX-8)
LD E,C
CALL LWRD ?0069
POP HL
POP HL
POP HL
POP HL
; 59. need_draw = FALSE;
LD (IX-5),0
?0010:
; 60. }
; 61. key = ap_get_message();
CALL LWRD ap_get_message
; 62. old_list = active_list;
LD B,(IX-8)
LD (IX-6),B
; 63. switch( key)
LD E,A
CALL LWRD ?C_V_SWITCH_L06
DEFW 8
DEFB 5
DEFB 6
DEFB 30
DEFB 33
DEFB 48
DEFB 69
DEFB 70
DEFB 144
DEFW ?0054
DEFW ?0061
DEFW ?0012
DEFW ?0021
DEFW ?0043
DEFW ?0053
DEFW ?0053
DEFW ?0012
DEFW ?0021
?0012:
; 64. {
; 65. case AP_KEY_NEXT:
; 66. case AP_KEY_NEXT | AP_KEY_HOLD:
; 67. if(g_active_list< CurTotalNum-1)
LD HL,65535
PUSH HL
PUSH HL
LD HL,(CurTotalNum)
POP BC
ADD HL,BC
EX DE,HL
LD HL,(CurTotalNum+2)
POP BC
ADC HL,BC
PUSH HL
PUSH DE
LD C,(IX-16)
LD B,(IX-15)
LD L,(IX-18)
LD H,(IX-17)
CALL LWRD ?SL_CMP_L03
JR NC,?0014
?0013:
; 68. {
; 69. g_active_list++;
CALL LWRD ?L_INC_L03
LD (IX-18),L
LD (IX-17),H
LD (IX-16),C
LD (IX-15),B
; 70. active_list++;
INC (IX-8)
; 71. if(active_list%NAVI_GROUP==0)
LD B,6
LD A,(IX-8)
CALL LWRD ?UC_MOD_L01
OR A
JR NZ,?0016
?0015:
; 72. {
; 73. need_read = 1;
; 74. active_list = 0;
; 75. old_list = 0;
; 76. need_draw = TRUE;
; 77. direct=0;
; 78. head =1;
LD (IX-3),1
LD (IX-8),A
LD (IX-5),1
LD (IX-4),A
LD (IX-7),1
; 79. break;
JP LWRD ?0061
?0016:
; 80.
; 81. }
; 82. ui_Navi_list(active_list,old_list,g_active_list,0,0);
LD C,0
PUSH BC
PUSH BC
LD L,(IX-16)
LD H,(IX-15)
PUSH HL
LD L,(IX-18)
LD H,(IX-17)
PUSH HL
CALL LWRD ?0070
POP HL
POP HL
POP HL
POP HL
; 83. }
; 84. else //到列表尾,回到列表头
JR ?0017
?0014:
; 85. {
; 86. active_list = 0;
; 87. g_active_list = 0;
; 88. old_list=0;
; 89. need_draw = TRUE;
; 90. Navfileoffset = CurListoffset;
LD BC,(CurListoffset+2)
LD HL,(CurListoffset)
LD (Navfileoffset),HL
LD (Navfileoffset+2),BC
; 91.
; 92. direct=0;
; 93. need_read = TRUE;
; 94. head=0;
LD (IX-8),0
XOR A
LD (IX-18),A
LD (IX-17),A
LD (IX-16),A
LD (IX-15),A
LD (IX-5),1
LD (IX-4),A
LD (IX-3),1
LD (IX-7),A
?0017:
?0019:
; 95. }
; 96. while(ap_get_message() != 0);
CALL LWRD ap_get_message
OR A
JR NZ,?0017
?0020:
; 97. break;
?0018:
JP LWRD ?0061
?0021:
; 98.
; 99. case AP_KEY_PREV:
; 100. case AP_KEY_PREV | AP_KEY_HOLD:
; 101. if(g_active_list==0)
LD A,(IX-18)
OR (IX-17)
OR (IX-16)
OR (IX-15)
JP NZ,?0023
?0022:
; 102. {
; 103. if(CurTotalNum<=NAVI_GROUP)
LD HL,(CurTotalNum+2)
PUSH HL
LD HL,(CurTotalNum)
PUSH HL
LD C,A
LD B,A
LD HL,6
CALL LWRD ?SL_CMP_L03
JR C,?0025
?0024:
; 104. {
; 105. head = 0;
; 106. Navfileoffset=CurListoffset;
LD BC,(CurListoffset+2)
LD HL,(CurListoffset)
LD (Navfileoffset),HL
LD (Navfileoffset+2),BC
LD (IX-7),A
; 107. }
; 108. else
JP LWRD ?0026
?0025:
; 109. {
; 110. if(CurTotalNum%NAVI_GROUP==0)
LD H,B
PUSH BC
PUSH HL
LD BC,(CurTotalNum+2)
LD HL,(CurTotalNum)
CALL LWRD ?SL_MOD_L03
LD A,L
OR H
OR C
OR B
JR NZ,?0028
?0027:
; 111. {
; 112. Navfileoffset=CurListoffset+sizeof(Location_Path_t)+(CurTotalNum-NAVI_GROUP-1)*sizeof(file_info_t);
LD HL,65535
PUSH HL
LD HL,65529
PUSH HL
LD HL,(CurTotalNum)
POP BC
ADD HL,BC
EX DE,HL
LD HL,(CurTotalNum+2)
JR ?0065
; 113. }
; 114. else
?0028:
; 115. {
; 116. Navfileoffset=CurListoffset+sizeof(Location_Path_t)+((CurTotalNum-1-(CurTotalNum)%NAVI_GROUP))*sizeof(file_info_t);
LD HL,0
PUSH HL
LD L,6
PUSH HL
LD BC,(CurTotalNum+2)
LD HL,(CurTotalNum)
CALL LWRD ?SL_MOD_L03
LD E,C
LD D,B
LD C,L
LD B,H
LD HL,(CurTotalNum)
SBC HL,BC
LD C,L
LD B,H
LD HL,(CurTotalNum+2)
SBC HL,DE
PUSH HL
PUSH BC
LD HL,65535
POP BC
ADD HL,BC
EX DE,HL
LD HL,65535
?0065:
POP BC
CALL LWRD ?0072
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 (Navfileoffset),HL
LD (Navfileoffset+2),BC
?0029:
; 117. }
; 118. head = 1;
LD (IX-7),1
?0026:
; 119. }
; 120. g_active_list = CurTotalNum-1;
LD HL,65535
PUSH HL
PUSH HL
LD HL,(CurTotalNum)
POP BC
ADD HL,BC
EX DE,HL
LD HL,(CurTotalNum+2)
POP BC
ADC HL,BC
LD C,L
LD B,H
EX DE,HL
LD (IX-18),L
LD (IX-17),H
LD (IX-16),C
LD (IX-15),B
; 121. active_list = (CurTotalNum-1)%NAVI_GROUP;
LD DE,0
PUSH DE
LD E,6
PUSH DE
CALL LWRD ?SL_MOD_L03
LD (IX-8),L
; 122. old_list=active_list;
; 123. need_read = TRUE;
; 124. need_draw = TRUE;
; 125. direct=2;
LD (IX-3),1
LD (IX-5),1
LD (IX-4),2
; 126.
; 127. }
; 128. else
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?