📄 mp3.lst
字号:
0374 8819 LDD R1,Y+17
0375 0C20 ADD R2,R0
0376 1C31 ADC R3,R1
0377 14E2 CP R14,R2
0378 04F3 CPC R15,R3
0379 F428 BCC 0x037F
037A 89EA LDD R30,Y+18
037B 89FB LDD R31,Y+19
037C 92A1 ST R10,Z+
037D 8BFB STD Y+19,R31
037E 8BEA STD Y+18,R30
(0263) j++;
037F 01C7 MOVW R24,R14
0380 9601 ADIW R24,1
0381 017C MOVW R14,R24
(0264) if ((j >= from) && (j < (from + qte))) *ptr++ = (unsigned char)(word >> 8);
0382 840E LDD R0,Y+14
0383 841F LDD R1,Y+15
0384 1580 CP R24,R0
0385 0591 CPC R25,R1
0386 F080 BCS 0x0397
0387 0110 MOVW R2,R0
0388 8808 LDD R0,Y+16
0389 8819 LDD R1,Y+17
038A 0C20 ADD R2,R0
038B 1C31 ADC R3,R1
038C 1582 CP R24,R2
038D 0593 CPC R25,R3
038E F440 BCC 0x0397
038F 0115 MOVW R2,R10
0390 2C23 MOV R2,R3
0391 2433 CLR R3
0392 89EA LDD R30,Y+18
0393 89FB LDD R31,Y+19
0394 9221 ST R2,Z+
0395 8BFB STD Y+19,R31
0396 8BEA STD Y+18,R30
(0265) j++;
0397 01C7 MOVW R24,R14
0398 9601 ADIW R24,1
0399 017C MOVW R14,R24
(0266) while(busy);
039A DF06 RCALL _ata_bsy
039B 2300 TST R16
039C F7E9 BNE 0x039A
039D 01C6 MOVW R24,R12
039E 9601 ADIW R24,1
039F 016C MOVW R12,R24
03A0 01C6 MOVW R24,R12
03A1 3080 CPI R24,0
03A2 E0E1 LDI R30,1
03A3 079E CPC R25,R30
03A4 F408 BCC 0x03A6
03A5 CFC4 RJMP 0x036A
03A6 940E15CE CALL pop_gset5
03A8 9622 ADIW R28,2
03A9 9508 RET
_ata_write_sector:
i --> R10
ptr --> R12
lbasector --> Y+8
device --> R10
03AA 933A ST R19,-Y
03AB 932A ST R18,-Y
03AC 940E15D3 CALL push_gset4
03AE 2EA0 MOV R10,R16
03AF 84CC LDD R12,Y+12
03B0 84DD LDD R13,Y+13
(0267) }
(0268) }
(0269)
(0270) //******************************************************************
(0271) //* WRITE A SECTOR
(0272) //* device = 0x00 or 0x01
(0273) //*
(0274) //******************************************************************
(0275) void ata_write_sector(unsigned char device, unsigned long lbasector, unsigned char *ptr)
(0276) {
(0277) unsigned int i;
(0278)
(0279) lbasector &= 0x0FFFFFFF;
03B1 EF4F LDI R20,0xFF
03B2 EF5F LDI R21,0xFF
03B3 EF6F LDI R22,0xFF
03B4 E07F LDI R23,0xF
03B5 01FE MOVW R30,R28
03B6 8420 LDD R2,Z+8
03B7 8431 LDD R3,Z+9
03B8 8442 LDD R4,Z+10
03B9 8453 LDD R5,Z+11
03BA 2224 AND R2,R20
03BB 2235 AND R3,R21
03BC 2246 AND R4,R22
03BD 2257 AND R5,R23
03BE 01FE MOVW R30,R28
03BF 8620 STD Z+8,R2
03C0 8631 STD Z+9,R3
03C1 8642 STD Z+10,R4
03C2 8653 STD Z+11,R5
(0280)
(0281) switch (device)
03C3 24BB CLR R11
03C4 20AA TST R10
03C5 F411 BNE 0x03C8
03C6 20BB TST R11
03C7 F031 BEQ 0x03CE
03C8 01C5 MOVW R24,R10
03C9 3081 CPI R24,1
03CA E0E0 LDI R30,0
03CB 079E CPC R25,R30
03CC F0D9 BEQ 0x03E8
03CD C034 RJMP 0x0402
(0282) {
(0283) case 0x00:
(0284) ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
03CE E188 LDI R24,0x18
03CF E090 LDI R25,0
03D0 01FE MOVW R30,R28
03D1 8420 LDD R2,Z+8
03D2 8431 LDD R3,Z+9
03D3 8442 LDD R4,Z+10
03D4 8453 LDD R5,Z+11
03D5 938A ST R24,-Y
03D6 0181 MOVW R16,R2
03D7 0192 MOVW R18,R4
03D8 940E1655 CALL lsr32
03DA 0118 MOVW R2,R16
03DB 0129 MOVW R4,R18
03DC EE40 LDI R20,0xE0
03DD E050 LDI R21,0
03DE E060 LDI R22,0
03DF E070 LDI R23,0
03E0 2A24 OR R2,R20
03E1 2A35 OR R3,R21
03E2 2A46 OR R4,R22
03E3 2A57 OR R5,R23
03E4 2D22 MOV R18,R2
03E5 EF05 LDI R16,0xF5
03E6 DE51 RCALL _ata_write_byte
(0285) break;
03E7 C033 RJMP 0x041B
(0286) case 0x01:
(0287) ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xF0);
03E8 E188 LDI R24,0x18
03E9 E090 LDI R25,0
03EA 01FE MOVW R30,R28
03EB 8420 LDD R2,Z+8
03EC 8431 LDD R3,Z+9
03ED 8442 LDD R4,Z+10
03EE 8453 LDD R5,Z+11
03EF 938A ST R24,-Y
03F0 0181 MOVW R16,R2
03F1 0192 MOVW R18,R4
03F2 940E1655 CALL lsr32
03F4 0118 MOVW R2,R16
03F5 0129 MOVW R4,R18
03F6 EF40 LDI R20,0xF0
03F7 E050 LDI R21,0
03F8 E060 LDI R22,0
03F9 E070 LDI R23,0
03FA 2A24 OR R2,R20
03FB 2A35 OR R3,R21
03FC 2A46 OR R4,R22
03FD 2A57 OR R5,R23
03FE 2D22 MOV R18,R2
03FF EF05 LDI R16,0xF5
0400 DE37 RCALL _ata_write_byte
(0288) break;
0401 C019 RJMP 0x041B
(0289) default:
(0290) ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
0402 E188 LDI R24,0x18
0403 E090 LDI R25,0
0404 01FE MOVW R30,R28
0405 8420 LDD R2,Z+8
0406 8431 LDD R3,Z+9
0407 8442 LDD R4,Z+10
0408 8453 LDD R5,Z+11
0409 938A ST R24,-Y
040A 0181 MOVW R16,R2
040B 0192 MOVW R18,R4
040C 940E1655 CALL lsr32
040E 0118 MOVW R2,R16
040F 0129 MOVW R4,R18
0410 EE40 LDI R20,0xE0
0411 E050 LDI R21,0
0412 E060 LDI R22,0
0413 E070 LDI R23,0
0414 2A24 OR R2,R20
0415 2A35 OR R3,R21
0416 2A46 OR R4,R22
0417 2A57 OR R5,R23
0418 2D22 MOV R18,R2
0419 EF05 LDI R16,0xF5
041A DE1D RCALL _ata_write_byte
(0291) break;
(0292) }
(0293) while(busy);
041B DE85 RCALL _ata_bsy
041C 2300 TST R16
041D F7E9 BNE 0x041B
(0294) ata_write_byte(ATA_IO_CYL_H,lbasector >> 16);
041E 01FE MOVW R30,R28
041F 8420 LDD R2,Z+8
0420 8431 LDD R3,Z+9
0421 8442 LDD R4,Z+10
0422 8453 LDD R5,Z+11
0423 0112 MOVW R2,R4
0424 2444 CLR R4
0425 2455 CLR R5
0426 2D22 MOV R18,R2
0427 ED0D LDI R16,0xDD
0428 DE0F RCALL _ata_write_byte
(0295) while(busy);
0429 DE77 RCALL _ata_bsy
042A 2300 TST R16
042B F7E9 BNE 0x0429
(0296) ata_write_byte(ATA_IO_CYL_L,lbasector >> 8);
042C E088 LDI R24,0x8
042D E090 LDI R25,0
042E 01FE MOVW R30,R28
042F 8420 LDD R2,Z+8
0430 8431 LDD R3,Z+9
0431 8442 LDD R4,Z+10
0432 8453 LDD R5,Z+11
0433 938A ST R24,-Y
0434 0181 MOVW R16,R2
0435 0192 MOVW R18,R4
0436 940E1655 CALL lsr32
0438 2F20 MOV R18,R16
0439 ED05 LDI R16,0xD5
043A DDFD RCALL _ata_write_byte
(0297) while(busy);
043B DE65 RCALL _ata_bsy
043C 2300 TST R16
043D F7E9 BNE 0x043B
(0298) ata_write_byte(ATA_IO_SECTORNUM,lbasector);
043E 01FE MOVW R30,R28
043F 8420 LDD R2,Z+8
0440 8431 LDD R3,Z+9
0441 8442 LDD R4,Z+10
0442 8453 LDD R5,Z+11
0443 2D22 MOV R18,R2
0444 EE0D LDI R16,0xED
0445 DDF2 RCALL _ata_write_byte
(0299) while(busy);
0446 DE5A RCALL _ata_bsy
0447 2300 TST R16
0448 F7E9 BNE 0x0446
(0300) ata_write_byte(ATA_IO_SECTORCNT,0x01);
0449 E021 LDI R18,1
044A EE05 LDI R16,0xE5
044B DDEC RCALL _ata_write_byte
(0301) while(busy);
044C DE54 RCALL _ata_bsy
044D 2300 TST R16
044E F7E9 BNE 0x044C
(0302) ata_write_byte(ATA_IO_CMD,CMD_WRITE_SECTORS);
044F E320 LDI R18,0x30
0450 EF0D LDI R16,0xFD
0451 DDE6 RCALL _ata_write_byte
(0303) while(busy);
0452 DE4E RCALL _ata_bsy
0453 2300 TST R16
0454 F7E9 BNE 0x0452
(0304) while(!drq);
0455 DE53 RCALL _ata_drq
0456 2300 TST R16
0457 F3E9 BEQ 0x0455
(0305)
(0306) for (i=0;i<256;i++)
0458 24AA CLR R10
0459 24BB CLR R11
045A C014 RJMP 0x046F
(0307) {
(0308) ata_write_word(ATA_IO_DATA,(unsigned int)(*(ptr+1)<<8)+*ptr);
045B 01F6 MOVW R30,R12
045C 8020 LDD R2,Z+0
045D 2433 CLR R3
045E 8121 LDD R18,Z+1
045F 2733 CLR R19
0460 2F32 MOV R19,R18
0461 2722 CLR R18
0462 0D22 ADD R18,R2
0463 1D33 ADC R19,R3
0464 EC05 LDI R16,0xC5
0465 DD91 RCALL _ata_write_word
(0309) ptr += 2;
0466 01C6 MOVW R24,R12
0467 9602 ADIW R24,2
0468 016C MOVW R12,R24
(0310) while(busy);
0469 DE37 RCALL _ata_bsy
046A 2300 TST R16
046B F7E9 BNE 0x0469
046C 01C5 MOVW R24,R10
046D 9601 ADIW R24,1
046E 015C MOVW R10,R24
046F 01C5 MOVW R24,R10
0470 3080 CPI R24,0
0471 E0E1 LDI R30,1
0472 079E CPC R25,R30
0473 F338 BCS 0x045B
0474 940E15CB CALL pop_gset4
0476 9622 ADIW R28,2
0477 9508 RET
_InitFat:
0478 940E15D7 CALL push_gset2
047A 9728 SBIW R28,0x8
FILE: G:\IccPro\Mp3Ide\fat.c
(0001) #include <iom128v.h>
(0002) #include <macros.h>
(0003) #include <string.h>
(0004) #include <stdio.h>
(0005) #include "vs1001.h"
(0006) #include "generic.h"
(0007) #include "remote.h"
(0008) #include "fat.h"
(0009) #include "ata.h"
(0010)
(0011) //******************************************************************
(0012) //* FAT Global Variable
(0013) //******************************************************************
(0014) struct PartRecord Part;
(0015) struct BootRecord Boot;
(0016) struct FileInfo File;
(0017) unsigned long FirstDataSector;
(0018)
(0019) //*************************************
(0020) // void init_fat(void)
(0021) //*************************************
(0022) void InitFat(void)
(0023) {
(0024) ata_read_sector_byte(0, 0, 446, sizeof(Part) , (unsigned char*)&Part);
047B E684 LDI R24,0x64
047C E093 LDI R25,3
047D 839F STD Y+7,R25
047E 838E STD Y+6,R24
047F E180 LDI R24,0x10
0480 E090 LDI R25,0
0481 839D STD Y+5,R25
0482 838C STD Y+4,R24
0483 EB8E LDI R24,0xBE
0484 E091 LDI R25,1
0485 839B STD Y+3,R25
0486 838A STD Y+2,R24
0487 E040 LDI R20,0
0488 E050 LDI R21,0
0489 E060 LDI R22,0
048A E070 LDI R23,0
048B 8368 STD Y+0,R22
048C 8379 STD Y+1,R23
048D 019A MOVW R18,R20
048E 2700 CLR R16
048F 940E02B9 CALL _ata_read_sector_byte
(0025) ata_read_sector_byte(0, Part.StartLBA, 0, sizeof(Boot) , (unsigned char*)&Boot);
0491 E380 LDI R24,0x30
0492 E093 LDI R25,3
0493 839F STD Y+7,R25
0494 838E STD Y+6,R24
0495 E384 LDI R24,0x34
0496 E090 LDI R25,0
0497 839D STD Y+5,R25
0498 838C STD Y+4,R24
0499 2422 CLR R2
049A 2433 CLR R3
049B 823B STD Y+3,R3
049C 822A STD Y+2,R2
049D 9040036E LDS R4,0x36E
049F 9050036F LDS R5,0x36F
04A1 9020036C LDS R2,0x36C
04A3 9030036D LDS R3,0x36D
04A5 8248 STD Y+0,R4
04A6 8259 STD Y+1,R5
04A7 0191 MOVW R18,R2
04A8 2700 CLR R16
04A9 940E02B9 CALL _ata_read_sector_byte
(0026) FirstDataSector = Part.StartLBA + Boot.ResSectors + (Boot.FATs * Boot.FATSize);
04AB 90400356 LDS R4,0x356
04AD 90500357 LDS R5,0x357
04AF 90200354 LDS R2,0x354
04B1 90300355 LDS R3,0x355
04B3 90600340 LDS R6,0x340
04B5 2477 CLR R7
04B6 2488 CLR R8
04B7 2499 CLR R9
04B8 925A ST R5,-Y
04B9 924A ST R4,-Y
04BA 923A ST R3,-Y
04BB 922A ST R2,-Y
04BC 0183 MOVW R16,R6
04BD 0194 MOVW R18,R8
04BE 940E1595 CALL empy32s
04C0 9020033E LDS R2,0x33E
04C2 9030033F LDS R3,0x33F
04C4 2444 CLR R4
04C5 2455 CLR R5
04C6 9080036E LDS R8,0x36E
04C8 9090036F LDS R9,0x36F
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -