?? basal_fmradio.s01
字號:
NAME basal_fmradio(17)
RSEG MOD_BS_FMRADIO(0)
RSEG RCODE(0)
EXTERN BankSwitch
EXTERN FM_Exit
EXTERN FM_GetStatus
EXTERN FM_Init
EXTERN FM_MUTE
EXTERN FM_Search
EXTERN FM_SetFreq
EXTERN FM_Standby
EXTERN FM_VolumeSet
EXTERN abs
PUBLIC d_FMStatus
PUBLIC disable_hosc
PUBLIC fmSendCommand
PUBLIC m_FMPlaystatus
PUBLIC m_FMStationTab
EXTERN ?CLZ80B_4_04_L00
EXTERN ?SL_RSH_L03
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG MOD_BS_FMRADIO
fmSendCommand:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * FM tunner basal module implementation
; 5. *
; 6. * (c) Copyright Actions Co,Ld.
; 7. *
; 8. *******************************************************************************
; 9. */
; 10. #include "actos.h"
; 11. #include "fmradio.h"
; 12. //#include "chip_cfg.h"
; 13. //#include "../inc/typeext.h"
; 14. //#include "../inc/mmcmd.h"
; 15. //---公共變量區
; 16.
; 17.
; 18. //extern WORD FMStationTab[20];
; 19. //WORD G_FMStationTab[20];
; 20. //fm_play_status_t G_FMPlaystatus;
; 21.
; 22.
; 23. //-----basal module ----
; 24. #pragma memory=dataseg(RCODE)
; 25.
; 26. //電臺頻率對照表(注:頻率范圍87M-108M 以K為精度要三位數,但由于最高位都是1,所以就可不記錄,只記中低位就可以了).
; 27.
; 28. WORD m_FMStationTab[20];
; 29. fm_play_status_t m_FMPlaystatus; //當前電臺信息
; 30. FMStatus_Tab_t d_FMStatus; //從FM硬件讀取的當前頻率和聲道信息
; 31. char disable_hosc;
; 32.
; 33.
; 34. #pragma memory=default
; 35. //extern WORD SearchFreq;
; 36. //extern WORD SetFreq;
; 37.
; 38. #pragma codeseg(MOD_BS_FMRADIO)
; 39.
; 40. BOOL fmSendCommand(BYTE cmd, int param)
; 41. {
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH DE
PUSH AF
PUSH AF
; 42. int i;
; 43. uchar k;
; 44. uint Tempfreq;
; 45.
; 46. // if( (0x7f34 < m_FMPlaystatus.freq) && ( m_FMPlaystatus.freq < 0x80c4) ) disable_hosc = 1;
; 47. // else disable_hosc = 0;
; 48. //
; 49.
; 50. switch (cmd)
CALL LWRD ?C_V_SWITCH_L06
DEFW 18
DEFB 1
DEFB 2
DEFB 4
DEFB 7
DEFB 9
DEFB 10
DEFB 11
DEFB 12
DEFB 17
DEFB 18
DEFB 64
DEFB 68
DEFB 69
DEFB 83
DEFB 85
DEFB 86
DEFB 131
DEFB 132
DEFW ?0000
DEFW ?0093
DEFW ?0084
DEFW ?0101
DEFW ?0094
DEFW ?0080
DEFW ?0083
DEFW ?0082
DEFW ?0081
DEFW ?0112
DEFW ?0111
DEFW ?0106
DEFW ?0060
DEFW ?0059
DEFW ?0034
DEFW ?0003
DEFW ?0057
DEFW ?0110
DEFW ?0001
?0001:
; 51. {
; 52. case MC_OPEN:
; 53. BankSwitch(address_24_of(FM_Init) >> 16);
LD HL,FM_Init
LD C,BYTE3 FM_Init
CALL LWRD ?0141
; 54. return FM_Init(m_FMPlaystatus.mode, (BYTE) param);
LD C,(IX-2)
LD DE,(m_FMPlaystatus+5)
CALL LWRD FM_Init
JP LWRD ?0126
; 55. case MC_PLAY:
?0002:
; 56. BankSwitch(address_24_of(FM_SetFreq) >> 16);
; 57. Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
; 58. FM_SetFreq(Tempfreq);
; 59. break;
?0003:
; 60.
; 61. case MC_STEP:
; 62. if (m_FMPlaystatus.station_count == 0)
LD A,(m_FMPlaystatus+4)
OR A
JP Z,?0128
?0004:
; 63. return FALSE;
?0005:
; 64. k = 0;
LD (IX-8),0
; 65. switch (param)
LD A,1
XOR C
OR B
JR NZ,?0020
?0007:
; 66. {
; 67. case UP: //找到下一電臺頻率
; 68. if (m_FMPlaystatus.station == m_FMPlaystatus.station_count)
LD A,(m_FMPlaystatus+4)
LD B,A
LD A,(m_FMPlaystatus+3)
CP B
JR NZ,?0009
?0008:
; 69. m_FMPlaystatus.station = 0;
XOR A
LD (m_FMPlaystatus+3),A
?0009:
; 70. m_FMPlaystatus.station++;
LD HL,m_FMPlaystatus+3
INC (HL)
; 71. for (i = 0; i < 20; i++)
LD IY,0
?0011:
LD BC,32788
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0010
?0012:
; 72. {
; 73. if (m_FMStationTab[i] != 0)
PUSH IY
POP HL
ADD HL,HL
LD BC,m_FMStationTab
ADD HL,BC
LD A,(HL)
INC HL
OR (HL)
JR Z,?0017
?0014:
; 74. {
; 75. k++;
INC (IX-8)
; 76. if (k == m_FMPlaystatus.station)
LD A,(m_FMPlaystatus+3)
LD B,A
LD A,(IX-8)
CP B
JR Z,?0010
?0016:
; 77. break;
?0017:
?0015:
INC IY
JR ?0011
?0010:
; 78. }
; 79.
; 80. }
; 81. if (i >= 20) // 如沒有找到電臺,重新設置電臺數
LD BC,32788
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0032
?0018:
; 82. {
; 83. m_FMPlaystatus.station_count = k - 1;
LD A,(IX-8)
ADD A,255
LD (m_FMPlaystatus+4),A
; 84. m_FMPlaystatus.station = 1;
LD A,1
JR ?0129
?0019:
; 85. }
; 86. break;
?0020:
LD A,C
OR B
JR NZ,?0032
; 87. case DOWN: //找到上一電臺頻率
; 88. if (m_FMPlaystatus.station == 1)
LD A,(m_FMPlaystatus+3)
DEC A
JR NZ,?0022
?0021:
; 89. m_FMPlaystatus.station = m_FMPlaystatus.station_count + 1;
LD A,(m_FMPlaystatus+4)
INC A
LD (m_FMPlaystatus+3),A
?0022:
; 90. m_FMPlaystatus.station--;
LD HL,m_FMPlaystatus+3
DEC (HL)
; 91. for (i = 0; i < 20; i++)
LD IY,0
?0024:
LD BC,32788
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0023
?0025:
; 92. {
; 93. if (m_FMStationTab[i] != 0)
PUSH IY
POP HL
ADD HL,HL
LD BC,m_FMStationTab
ADD HL,BC
LD A,(HL)
INC HL
OR (HL)
JR Z,?0030
?0027:
; 94. {
; 95. k++;
INC (IX-8)
; 96. if (k == m_FMPlaystatus.station)
LD A,(m_FMPlaystatus+3)
LD B,A
LD A,(IX-8)
CP B
JR Z,?0023
?0029:
; 97. break;
?0030:
?0028:
INC IY
JR ?0024
?0023:
; 98. }
; 99. }
; 100. if (i >= 20) // 如沒有找到電臺,重新設置電臺數
LD BC,32788
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0032
?0031:
; 101. {
; 102. m_FMPlaystatus.station = m_FMPlaystatus.station_count = k + 1;
LD B,(IX-8)
INC B
LD A,B
LD (m_FMPlaystatus+4),A
?0129:
LD (m_FMPlaystatus+3),A
?0032:
; 103. }
; 104. break;
?0033:
; 105. default:
; 106. break;
?0006:
; 107. }
; 108. m_FMPlaystatus.freq = m_FMStationTab[i];
PUSH IY
POP HL
ADD HL,HL
LD BC,m_FMStationTab
ADD HL,BC
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
JR ?0118
; 109. BankSwitch(address_24_of(FM_SetFreq) >> 16);
; 110. Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
; 111. FM_SetFreq(Tempfreq);
; 112. return TRUE;
; 113.
; 114. case MC_STEPGRID:
?0034:
; 115. switch (param)
LD A,1
XOR C
OR B
JR NZ,?0047
?0036:
; 116. {
; 117. case UP:
; 118. if(((m_FMPlaystatus.freq+1)>210)&&(m_FMPlaystatus.mode==0))
LD BC,(m_FMPlaystatus+1)
INC BC
LD HL,210
SBC HL,BC
JR NC,?0038
LD A,(m_FMPlaystatus+5)
OR A
JR Z,?0130
?0040:
?0039:
?0037:
; 119. m_FMPlaystatus.freq=0;
?0038:
; 120. else if(((m_FMPlaystatus.freq+1)>140)&&(m_FMPlaystatus.mode==1))
LD HL,140
AND A
SBC HL,BC
JR NC,?0043
LD A,(m_FMPlaystatus+5)
DEC A
JR NZ,?0043
?0045:
?0044:
?0042:
; 121. m_FMPlaystatus.freq=0;
?0130:
LD L,A
LD H,A
JR ?0118
; 122. else
?0043:
; 123. {
; 124. m_FMPlaystatus.freq += 1;
LD L,C
LD H,B
JR ?0118
?0046:
?0041:
; 125. }
; 126. break;
?0047:
LD A,C
OR B
JR NZ,?0057
; 127. case DOWN:
; 128. if((m_FMPlaystatus.freq == 0)&&(m_FMPlaystatus.mode==0))m_FMPlaystatus.freq=210;
LD HL,(m_FMPlaystatus+1)
LD A,L
OR H
JR NZ,?0049
LD A,(m_FMPlaystatus+5)
OR A
JR NZ,?0049
?0051:
?0050:
?0048:
LD HL,210
JR ?0118
?0049:
; 129. else if((m_FMPlaystatus.freq==0)&&(m_FMPlaystatus.mode==1))m_FMPlaystatus.freq=140;
LD A,L
OR H
JR NZ,?0054
LD A,(m_FMPlaystatus+5)
DEC A
JR NZ,?0054
?0056:
?0055:
?0053:
LD HL,140
?0118:
LD (m_FMPlaystatus+1),HL
; 130.
; 131. // if(((m_FMPlaystatus.freq-1)<0)&&
; 132. else
JR ?0057
?0054:
; 133. {
; 134. m_FMPlaystatus.freq-=1;
LD HL,m_FMPlaystatus+1
LD A,(HL)
ADD A,255
LD (HL),A
INC HL
LD A,(HL)
ADC A,255
LD (HL),A
?0057:
?0052:
; 135. }
; 136. break;
?0058:
; 137. default:
; 138. break;
?0035:
; 139. }
; 140. BankSwitch(address_24_of(FM_SetFreq) >> 16);
LD HL,FM_SetFreq
LD C,BYTE3 FM_SetFreq
CALL LWRD ?0140
; 141. Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
; 142. //SetFreq = m_FMPlaystatus.freq;
; 143. FM_SetFreq(Tempfreq);
EX DE,HL
CALL LWRD FM_SetFreq
; 144. return TRUE;
JP LWRD ?0000
; 145.
; 146. case MC_SEARCH:
?0059:
; 147. FM_MUTE(SetMUTE);
LD E,1
CALL LWRD FM_MUTE
; 148. BankSwitch(address_24_of(FM_Search) >> 16);
LD HL,FM_Search
LD C,BYTE3 FM_Search
CALL LWRD ?0140
; 149. Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
; 150. //SearchFreq = m_FMPlaystatus.freq ;
; 151. return FM_Search(Tempfreq,param);
LD C,(IX-2)
EX DE,HL
CALL LWRD FM_Search
?0126:
LD L,A
; 152.
; 153. case MC_SAVESTATION:
JP LWRD ?0114
?0060:
; 154. if (m_FMPlaystatus.station != 0) //當前電臺在電臺表中有保存的情況
LD A,(m_FMPlaystatus+3)
OR A
JR Z,?0062
?0061:
; 155. {
; 156. k = 0;
; 157. for (i = 0; i < 20; i++)
LD (IX-8),0
LD IY,0
?0064:
LD BC,32788
PUSH IY
POP HL
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -