📄 mp3.lst
字号:
.................... #define REG_HEAD 0x06 // ADDRESS OF HEAD/DRIVE REGISTER
.................... #define REG_STATUS 0x07 // ADDRESS OF STATUS REGISTER
.................... #define REG_COMMAND 0x07 // ADDRESS OF COMMAND REGISTER
....................
....................
.................... #define COMMAND_IDENTIFY 0xEC
.................... #define COMMAND_WRITESECTOR 0x30
.................... #define COMMAND_READSECTOR 0x20
....................
.................... #define CF_OK 0
.................... #define NO_CF 1
....................
.................... boolean CF_isReady();
.................... boolean CF_isBusy(void);
.................... void CF_taskFileWrite(byte, byte);
.................... byte CF_ReadByte(void);
.................... void CF_WriteByte(byte data);
....................
.................... // Compact flash state
.................... int32 CF_CurrSector; // the sector we're currently reading/writing
.................... int16 CF_CurrByteInSector; // what byte in that sector we're at
.................... boolean CF_isValid; // CF seems ok
....................
.................... boolean is_CF_Out() {
.................... input(CF_CD); // check if the CD line is high
*
0004: GOTO 18B0 (RETURN)
.................... }
....................
....................
....................
.................... void CF_SetAddr(byte addr) {
.................... output_bit(CF_A0, bit_test(addr, 0));
*
17E8: MOVLB 2
17EA: BTFSC xC4.0
17EC: GOTO 17F6
17F0: BCF F8D.0
17F2: GOTO 17F8
17F6: BSF F8D.0
.................... output_bit(CF_A1, bit_test(addr, 1));
17F8: BTFSC xC4.1
17FA: GOTO 1804
17FE: BCF F8D.1
1800: GOTO 1806
1804: BSF F8D.1
.................... output_bit(CF_A2, bit_test(addr, 2));
1806: BTFSC xC4.2
1808: GOTO 1812
180C: BCF F8D.2
180E: GOTO 1814
1812: BSF F8D.2
1814: MOVLB 0
1816: RETLW 00
.................... }
....................
.................... // write data to CF port addr
.................... void CF_TaskFileWrite(byte addr, byte data)
.................... {
.................... cf_SetAddr(addr);
*
199A: MOVFF 2C2,2C4
199E: CALL 17E8
.................... cf_WriteByte(data);
19A2: MOVFF 2C3,2C4
19A6: CALL 197C
19AA: RETLW 00
.................... }
....................
.................... // read byte from CF port addr
.................... byte CF_TaskFileRead(byte addr)
.................... {
.................... CF_SetAddr(addr);
*
1924: MOVFF 2B9,2C4
1928: CALL 17E8
.................... return(CF_ReadByte());
192C: CALL 18FA
1930: MOVF 01,W
1932: RETLW 00
.................... }
....................
.................... boolean CF_isBusy(void) {
.................... return ((CF_TaskFileRead(7) & 0x80) == 0x80);
1934: MOVLW 07
1936: MOVLB 2
1938: MOVWF xB9
193A: MOVLB 0
193C: CALL 1924
1940: MOVF 01,W
1942: ANDLW 80
1944: SUBLW 80
1946: BTFSC FD8.2
1948: GOTO 1952
194C: MOVLW 00
194E: GOTO 1954
1952: MOVLW 01
1954: MOVWF 01
1956: RETLW 00
.................... }
....................
.................... boolean CF_isReady(void) {
.................... return ((CF_TaskFileRead(7) & 0x40) == 0x40);
1958: MOVLW 07
195A: MOVLB 2
195C: MOVWF xB9
195E: MOVLB 0
1960: CALL 1924
1964: MOVF 01,W
1966: ANDLW 40
1968: SUBLW 40
196A: BTFSC FD8.2
196C: GOTO 1976
1970: MOVLW 00
1972: GOTO 1978
1976: MOVLW 01
1978: MOVWF 01
197A: RETLW 00
.................... }
....................
.................... /********************/
.................... // reset the card via the RST line
....................
.................... void CF_ResetCard(void) {
.................... output_high(CF_RESET);
*
185E: BSF F89.5
.................... delay_ms(255);
1860: MOVLW FF
1862: MOVLB 2
1864: MOVWF xB3
1866: MOVLB 0
1868: CALL 1832
.................... output_low(CF_RESET);
186C: BCF F89.5
.................... delay_ms(10);
186E: MOVLW 0A
1870: MOVLB 2
1872: MOVWF xB3
1874: MOVLB 0
1876: CALL 1832
187A: GOTO 18AC (RETURN)
.................... }
....................
.................... void CF_Disable(void) {
.................... // default CF power down signals
.................... output_low(CF_OE);
*
1818: BCF F89.1
.................... output_low(CF_WE);
181A: BCF F89.2
.................... output_high(CF_CE);
181C: BSF F8A.0
.................... CF_SetAddr(0);
181E: MOVLB 2
1820: CLRF xC4
1822: MOVLB 0
1824: CALL 17E8
.................... output_high(CF_RESET);
1828: BSF F89.5
.................... // presumption of invalidity
.................... CF_isValid=false;
182A: MOVLB 2
182C: BCF x17.1
182E: MOVLB 0
1830: RETLW 00
.................... }
....................
.................... byte CF_Enable(void) {
.................... CF_Disable();
*
187E: CALL 1818
.................... output_low(CF_CE);
1882: BCF F8A.0
.................... printf("Resetting Card.. ");
*
0096: MOVFF FF2,0E
009A: BCF FF2.7
009C: CLRF FF7
009E: ADDLW B0
00A0: MOVWF FF6
00A2: MOVLW 00
00A4: ADDWFC FF7,F
00A6: TBLRD*+
00A8: MOVF FF5,W
00AA: BTFSC 0E.7
00AC: BSF FF2.7
00AE: RETURN 0
00B0: DATA 52,65
00B2: DATA 73,65
00B4: DATA 74,74
00B6: DATA 69,6E
00B8: DATA 67,20
00BA: DATA 43,61
00BC: DATA 72,64
00BE: DATA 2E,2E
00C0: DATA 20,00
*
1884: MOVLB 2
1886: CLRF x9E
1888: MOVF x9E,W
188A: MOVLB 0
188C: CALL 0096
1890: MOVLB 2
1892: INCF x9E,F
1894: BTFSS F9E.4
1896: GOTO 1894
189A: MOVWF FAD
189C: MOVLW 11
189E: SUBWF x9E,W
18A0: BTFSS FD8.2
18A2: GOTO 1888
.................... CF_ResetCard();
18A6: MOVLB 0
18A8: GOTO 185E
.................... if (is_CF_Out()) {
18AC: GOTO 0004
18B0: MOVF 01,F
18B2: BTFSC FD8.2
18B4: GOTO 18E6
.................... CF_isValid = false;
18B8: MOVLB 2
18BA: BCF x17.1
.................... printf("No CF found!\n\r");
*
00C2: MOVFF FF2,0E
00C6: BCF FF2.7
00C8: CLRF FF7
00CA: ADDLW DC
00CC: MOVWF FF6
00CE: MOVLW 00
00D0: ADDWFC FF7,F
00D2: TBLRD*+
00D4: MOVF FF5,W
00D6: BTFSC 0E.7
00D8: BSF FF2.7
00DA: RETURN 0
00DC: DATA 4E,6F
00DE: DATA 20,43
00E0: DATA 46,20
00E2: DATA 66,6F
00E4: DATA 75,6E
00E6: DATA 64,21
00E8: DATA 0A,0D
00EA: DATA 00,00
*
18BC: CLRF x9E
18BE: MOVF x9E,W
18C0: MOVLB 0
18C2: CALL 00C2
18C6: MOVLB 2
18C8: INCF x9E,F
18CA: BTFSS F9E.4
18CC: GOTO 18CA
18D0: MOVWF FAD
18D2: MOVLW 0E
18D4: SUBWF x9E,W
18D6: BTFSS FD8.2
18D8: GOTO 18BE
.................... return NO_CF;
18DC: MOVLW 01
18DE: MOVWF 01
18E0: GOTO 18F6
18E4: MOVLB 0
.................... }
.................... output_high(CF_OE);
18E6: BSF F89.1
.................... output_high(CF_WE);
18E8: BSF F89.2
.................... set_tris_d(TRIS_D_INPUT);
18EA: MOVLW FF
18EC: MOVWF F95
.................... CF_isValid = true;
18EE: MOVLB 2
18F0: BSF x17.1
.................... return CF_OK;
18F2: MOVLW 00
18F4: MOVWF 01
18F6: MOVLB 0
18F8: RETLW 00
.................... }
....................
.................... /*********************/
....................
.................... void CF_Identify(void) {
.................... byte c;
....................
.................... if (!CF_isValid)
*
29F0: MOVLB 2
29F2: BTFSC x17.1
29F4: GOTO 29FC
.................... return;
29F8: GOTO 2B06
....................
.................... output_low(CF_CE);
29FC: BCF F8A.0
.................... printf("Identifying CF.. ");
*
00EC: MOVFF FF2,0E
00F0: BCF FF2.7
00F2: CLRF FF7
00F4: ADDLW 06
00F6: MOVWF FF6
00F8: MOVLW 01
00FA: ADDWFC FF7,F
00FC: TBLRD*+
00FE: MOVF FF5,W
0100: BTFSC 0E.7
0102: BSF FF2.7
0104: RETURN 0
0106: DATA 49,64
0108: DATA 65,6E
010A: DATA 74,69
010C: DATA 66,79
010E: DATA 69,6E
0110: DATA 67,20
0112: DATA 43,46
0114: DATA 2E,2E
0116: DATA 20,00
*
29FE: CLRF x9F
2A00: MOVF x9F,W
2A02: MOVLB 0
2A04: CALL 00EC
2A08: MOVLB 2
2A0A: INCF x9F,F
2A0C: BTFSS F9E.4
2A0E: GOTO 2A0C
2A12: MOVWF FAD
2A14: MOVLW 11
2A16: SUBWF x9F,W
2A18: BTFSS FD8.2
2A1A: GOTO 2A00
.................... while (CF_isBusy() && (!CF_isReady())) {
2A1E: MOVLB 0
2A20: CALL 1934
2A24: MOVF 01,F
2A26: BTFSC FD8.2
2A28: GOTO 2A4A
2A2C: CALL 1958
2A30: MOVF 01,F
2A32: BTFSS FD8.2
2A34: GOTO 2A4A
.................... delay_us(1);
2A38: NOP
2A3A: NOP
2A3C: NOP
2A3E: NOP
2A40: NOP
.................... //putc('.');
.................... }
2A42: MOVLB 2
2A44: GOTO 2A1E
2A48: MOVLB 0
....................
.................... // printf("set drive ");
.................... CF_taskFileWrite(6, 0xA0); // drive 0
2A4A: MOVLW 06
2A4C: MOVLB 2
2A4E: MOVWF xC2
2A50: MOVLW A0
2A52: MOVWF xC3
2A54: MOVLB 0
2A56: CALL 199A
.................... // printf("command id ");
.................... CF_taskFileWrite(REG_COMMAND, COMMAND_IDENTIFY); // identify drive command
2A5A: MOVLW 07
2A5C: MOVLB 2
2A5E: MOVWF xC2
2A60: MOVLW EC
2A62: MOVWF xC3
2A64: MOVLB 0
2A66: CALL 199A
....................
.................... while ((CF_ReadByte()&0x80)==0x80); // wait for ready
2A6A: CALL 18FA
2A6E: MOVF 01,W
2A70: ANDLW 80
2A72: SUBLW 80
2A74: BTFSS FD8.2
2A76: GOTO 2A7E
2A7A: GOTO 2A6A
....................
.................... CF_setAddr(0);
2A7E: MOVLB 2
2A80: CLRF xC4
2A82: MOVLB 0
2A84: CALL 17E8
....................
.................... for(c = 0; c < 0xFF; c++) {
2A88: MOVLB 2
2A8A: CLRF x9E
2A8C: INCFSZ x9E,W
2A8E: GOTO 2A96
2A92: GOTO 2AB2
.................... putc(cf_ReadByte());
2A96: MOVLB 0
2A98: CALL 18FA
2A9C: MOVFF 01,29F
2AA0: MOVLB 2
2AA2: MOVF 01,W
2AA4: BTFSS F9E.4
2AA6: GOTO 2AA4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -