📄 main.lss
字号:
85e: 85 e0 ldi r24, 0x05 ; 5
860: 0e 94 34 02 call 0x468
WriteReg(4,(lba>>8));
864: 89 81 ldd r24, Y+1 ; 0x01
866: 9a 81 ldd r25, Y+2 ; 0x02
868: ab 81 ldd r26, Y+3 ; 0x03
86a: bc 81 ldd r27, Y+4 ; 0x04
86c: 89 2f mov r24, r25
86e: 9a 2f mov r25, r26
870: ab 2f mov r26, r27
872: bb 27 eor r27, r27
874: 68 2f mov r22, r24
876: 84 e0 ldi r24, 0x04 ; 4
878: 0e 94 34 02 call 0x468
WriteReg(3,(lba));
87c: 69 81 ldd r22, Y+1 ; 0x01
87e: 83 e0 ldi r24, 0x03 ; 3
880: 0e 94 34 02 call 0x468
WriteReg(2,1);
884: 61 e0 ldi r22, 0x01 ; 1
886: 82 e0 ldi r24, 0x02 ; 2
888: 0e 94 34 02 call 0x468
88c: 24 96 adiw r28, 0x04 ; 4
88e: 0f b6 in r0, 0x3f ; 63
890: f8 94 cli
892: de bf out 0x3e, r29 ; 62
894: 0f be out 0x3f, r0 ; 63
896: cd bf out 0x3d, r28 ; 61
898: df 91 pop r29
89a: cf 91 pop r28
89c: 08 95 ret
0000089e <WriteCHS>:
}
/************************************************************
*函数名称:void WriteCHS(uint iCylinder,byte byHead,byte bySector,byte byReadCount)*
*用途:CHS寻址 *
************************************************************/
void WriteCHS(uint iCylinder,byte byHead,byte bySector,byte byReadCount)
{
89e: cf 93 push r28
8a0: df 93 push r29
8a2: cd b7 in r28, 0x3d ; 61
8a4: de b7 in r29, 0x3e ; 62
8a6: 25 97 sbiw r28, 0x05 ; 5
8a8: 0f b6 in r0, 0x3f ; 63
8aa: f8 94 cli
8ac: de bf out 0x3e, r29 ; 62
8ae: 0f be out 0x3f, r0 ; 63
8b0: cd bf out 0x3d, r28 ; 61
8b2: 89 83 std Y+1, r24 ; 0x01
8b4: 9a 83 std Y+2, r25 ; 0x02
8b6: 6b 83 std Y+3, r22 ; 0x03
8b8: 4c 83 std Y+4, r20 ; 0x04
8ba: 2d 83 std Y+5, r18 ; 0x05
WaitBSY();
8bc: 0e 94 65 02 call 0x4ca
WriteReg(_DeviceAndHead,0x40|byHead);
8c0: 8b 81 ldd r24, Y+3 ; 0x03
8c2: 80 64 ori r24, 0x40 ; 64
8c4: 68 2f mov r22, r24
8c6: 86 e0 ldi r24, 0x06 ; 6
8c8: 0e 94 34 02 call 0x468
//WriteReg(_DeviceAndHead,byHead);
WriteReg(_CylinderH,(byte)(iCylinder>>8));
8cc: 89 81 ldd r24, Y+1 ; 0x01
8ce: 9a 81 ldd r25, Y+2 ; 0x02
8d0: 89 2f mov r24, r25
8d2: 99 27 eor r25, r25
8d4: 68 2f mov r22, r24
8d6: 85 e0 ldi r24, 0x05 ; 5
8d8: 0e 94 34 02 call 0x468
WriteReg(_CylinderL,(byte)(iCylinder&0x00ff));
8dc: 69 81 ldd r22, Y+1 ; 0x01
8de: 84 e0 ldi r24, 0x04 ; 4
8e0: 0e 94 34 02 call 0x468
WriteReg(_SecNum,bySector);
8e4: 6c 81 ldd r22, Y+4 ; 0x04
8e6: 83 e0 ldi r24, 0x03 ; 3
8e8: 0e 94 34 02 call 0x468
WriteReg(_SecCount,byReadCount);
8ec: 6d 81 ldd r22, Y+5 ; 0x05
8ee: 82 e0 ldi r24, 0x02 ; 2
8f0: 0e 94 34 02 call 0x468
8f4: 25 96 adiw r28, 0x05 ; 5
8f6: 0f b6 in r0, 0x3f ; 63
8f8: f8 94 cli
8fa: de bf out 0x3e, r29 ; 62
8fc: 0f be out 0x3f, r0 ; 63
8fe: cd bf out 0x3d, r28 ; 61
900: df 91 pop r29
902: cf 91 pop r28
904: 08 95 ret
00000906 <ReadSectorData>:
}
/************************************************************
*函数名称:void ReadSectorData(ulong lSectorAdd) *
*用途:读一个扇区的数据 *
************************************************************/
void ReadSectorData(ulong lSectorAdd)
{
906: cf 93 push r28
908: df 93 push r29
90a: cd b7 in r28, 0x3d ; 61
90c: de b7 in r29, 0x3e ; 62
90e: 28 97 sbiw r28, 0x08 ; 8
910: 0f b6 in r0, 0x3f ; 63
912: f8 94 cli
914: de bf out 0x3e, r29 ; 62
916: 0f be out 0x3f, r0 ; 63
918: cd bf out 0x3d, r28 ; 61
91a: 69 83 std Y+1, r22 ; 0x01
91c: 7a 83 std Y+2, r23 ; 0x02
91e: 8b 83 std Y+3, r24 ; 0x03
920: 9c 83 std Y+4, r25 ; 0x04
uint temp,iAddend=0;
922: 1f 82 std Y+7, r1 ; 0x07
924: 18 86 std Y+8, r1 ; 0x08
LBA(lSectorAdd);
926: 69 81 ldd r22, Y+1 ; 0x01
928: 7a 81 ldd r23, Y+2 ; 0x02
92a: 8b 81 ldd r24, Y+3 ; 0x03
92c: 9c 81 ldd r25, Y+4 ; 0x04
92e: 0e 94 0c 04 call 0x818
WriteReg(_Status_AND_Command,CMD_READ_SECTORS);//0x20
932: 60 e2 ldi r22, 0x20 ; 32
934: 87 e0 ldi r24, 0x07 ; 7
936: 0e 94 34 02 call 0x468
for(temp=0;temp<256;temp++)
93a: 1d 82 std Y+5, r1 ; 0x05
93c: 1e 82 std Y+6, r1 ; 0x06
93e: 8d 81 ldd r24, Y+5 ; 0x05
940: 9e 81 ldd r25, Y+6 ; 0x06
942: 8f 3f cpi r24, 0xFF ; 255
944: 91 05 cpc r25, r1
946: 09 f0 breq .+2 ; 0x94a
948: 58 f5 brcc .+86 ; 0x9a0
{
WaitDRQ();
94a: 0e 94 78 02 call 0x4f0
ReadData();
94e: 0e 94 d1 01 call 0x3a2
HDSectorDATA[iAddend++]=HDDATAL;
952: de 01 movw r26, r28
954: 17 96 adiw r26, 0x07 ; 7
956: 2d 91 ld r18, X+
958: 3c 91 ld r19, X
95a: 11 97 sbiw r26, 0x01 ; 1
95c: c9 01 movw r24, r18
95e: fc 01 movw r30, r24
960: ef 59 subi r30, 0x9F ; 159
962: ff 4f sbci r31, 0xFF ; 255
964: 80 91 61 02 lds r24, 0x0261
968: 80 83 st Z, r24
96a: 2f 5f subi r18, 0xFF ; 255
96c: 3f 4f sbci r19, 0xFF ; 255
96e: 2d 93 st X+, r18
970: 3c 93 st X, r19
HDSectorDATA[iAddend++]=HDDATAH;
972: de 01 movw r26, r28
974: 17 96 adiw r26, 0x07 ; 7
976: 2d 91 ld r18, X+
978: 3c 91 ld r19, X
97a: 11 97 sbiw r26, 0x01 ; 1
97c: c9 01 movw r24, r18
97e: fc 01 movw r30, r24
980: ef 59 subi r30, 0x9F ; 159
982: ff 4f sbci r31, 0xFF ; 255
984: 80 91 62 02 lds r24, 0x0262
988: 80 83 st Z, r24
98a: 2f 5f subi r18, 0xFF ; 255
98c: 3f 4f sbci r19, 0xFF ; 255
98e: 2d 93 st X+, r18
990: 3c 93 st X, r19
992: 11 97 sbiw r26, 0x01 ; 1
994: 8d 81 ldd r24, Y+5 ; 0x05
996: 9e 81 ldd r25, Y+6 ; 0x06
998: 01 96 adiw r24, 0x01 ; 1
99a: 8d 83 std Y+5, r24 ; 0x05
99c: 9e 83 std Y+6, r25 ; 0x06
99e: cf cf rjmp .-98 ; 0x93e
9a0: 28 96 adiw r28, 0x08 ; 8
9a2: 0f b6 in r0, 0x3f ; 63
9a4: f8 94 cli
9a6: de bf out 0x3e, r29 ; 62
9a8: 0f be out 0x3f, r0 ; 63
9aa: cd bf out 0x3d, r28 ; 61
9ac: df 91 pop r29
9ae: cf 91 pop r28
9b0: 08 95 ret
000009b2 <WriteSectorData>:
}
}
/************************************************************
*函数名称:void WriteSectorData(ulong lSectorAdd) *
*用途:写一个扇区的数据 *
************************************************************/
void WriteSectorData(ulong lSectorAdd)
{
9b2: cf 93 push r28
9b4: df 93 push r29
9b6: cd b7 in r28, 0x3d ; 61
9b8: de b7 in r29, 0x3e ; 62
9ba: 28 97 sbiw r28, 0x08 ; 8
9bc: 0f b6 in r0, 0x3f ; 63
9be: f8 94 cli
9c0: de bf out 0x3e, r29 ; 62
9c2: 0f be out 0x3f, r0 ; 63
9c4: cd bf out 0x3d, r28 ; 61
9c6: 69 83 std Y+1, r22 ; 0x01
9c8: 7a 83 std Y+2, r23 ; 0x02
9ca: 8b 83 std Y+3, r24 ; 0x03
9cc: 9c 83 std Y+4, r25 ; 0x04
uint temp,iAddend=0;
9ce: 1f 82 std Y+7, r1 ; 0x07
9d0: 18 86 std Y+8, r1 ; 0x08
LBA(lSectorAdd);
9d2: 69 81 ldd r22, Y+1 ; 0x01
9d4: 7a 81 ldd r23, Y+2 ; 0x02
9d6: 8b 81 ldd r24, Y+3 ; 0x03
9d8: 9c 81 ldd r25, Y+4 ; 0x04
9da: 0e 94 0c 04 call 0x818
WriteReg(_Status_AND_Command,CMD_WRITE_SECTORS);//0x30
9de: 60 e3 ldi r22, 0x30 ; 48
9e0: 87 e0 ldi r24, 0x07 ; 7
9e2: 0e 94 34 02 call 0x468
for(temp=0;temp<256;temp++)
9e6: 1d 82 std Y+5, r1 ; 0x05
9e8: 1e 82 std Y+6, r1 ; 0x06
9ea: 8d 81 ldd r24, Y+5 ; 0x05
9ec: 9e 81 ldd r25, Y+6 ; 0x06
9ee: 8f 3f cpi r24, 0xFF ; 255
9f0: 91 05 cpc r25, r1
9f2: 09 f0 breq .+2 ; 0x9f6
9f4: 50 f5 brcc .+84 ; 0xa4a
{
HDDATAL=HDSectorDATA[iAddend++];
9f6: fe 01 movw r30, r28
9f8: 37 96 adiw r30, 0x07 ; 7
9fa: 80 81 ld r24, Z
9fc: 91 81 ldd r25, Z+1 ; 0x01
9fe: 9c 01 movw r18, r24
a00: d9 01 movw r26, r18
a02: af 59 subi r26, 0x9F ; 159
a04: bf 4f sbci r27, 0xFF ; 255
a06: 01 96 adiw r24, 0x01 ; 1
a08: 80 83 st Z, r24
a0a: 91 83 std Z+1, r25 ; 0x01
a0c: 8c 91 ld r24, X
a0e: 80 93 61 02 sts 0x0261, r24
HDDATAH=HDSectorDATA[iAddend++];
a12: fe 01 movw r30, r28
a14: 37 96 adiw r30, 0x07 ; 7
a16: 80 81 ld r24, Z
a18: 91 81 ldd r25, Z+1 ; 0x01
a1a: 9c 01 movw r18, r24
a1c: d9 01 movw r26, r18
a1e: af 59 subi r26, 0x9F ; 159
a20: bf 4f sbci r27, 0xFF ; 255
a22: 01 96 adiw r24, 0x01 ; 1
a24: 80 83 st Z, r24
a26: 91 83 std Z+1, r25 ; 0x01
a28: 8c 91 ld r24, X
a2a: 80 93 62 02 sts 0x0262, r24
WaitDRQ();
a2e: 0e 94 78 02 call 0x4f0
WriteData(HDDATAL,HDDATAH);
a32: 60 91 62 02 lds r22, 0x0262
a36: 80 91 61 02 lds r24, 0x0261
a3a: 0e 94 fd 01 call 0x3fa
a3e: 8d 81 ldd r24, Y+5 ; 0x05
a40: 9e 81 ldd r25, Y+6 ; 0x06
a42: 01 96 adiw r24, 0x01 ; 1
a44: 8d 83 std Y+5, r24 ; 0x05
a46: 9e 83 std Y+6, r25 ; 0x06
a48: d0 cf rjmp .-96 ; 0x9ea
a4a: 28 96 adiw r28, 0x08 ; 8
a4c: 0f b6 in r0, 0x3f ; 63
a4e: f8 94 cli
a50: de bf out 0x3e, r29 ; 62
a52: 0f be out 0x3f, r0 ; 63
a54: cd bf out 0x3d, r28 ; 61
a56: df 91 pop r29
a58: cf 91 pop r28
a5a: 08 95 ret
00000a5c <ReversalData>:
}
}
/************************************************************
*函数名称:byte ReversalData(byte byReversal) *
*用途:颠倒数据,0位换到7位,7位换到0位 *
************************************************************/
byte ReversalData(byte byReversal)
{
a5c: cf 93 push r28
a5e: df 93 push r29
a60: cd b7 in r28, 0x3d ; 61
a62: de b7 in r29, 0x3e ; 62
a64: 22 97 sbiw r28, 0x02 ; 2
a66: 0f b6 in r0, 0x3f ; 63
a68: f8 94 cli
a6a: de bf out 0x3e, r29 ; 62
a6c: 0f be out 0x3f, r0 ; 63
a6e: cd bf out 0x3d, r28 ; 61
a70: 89 83 std Y+1, r24 ; 0x01
byte temp;
temp=byReversal<<7;
a72: 89 81 ldd r24, Y+1 ; 0x01
a74: 87 95 ror r24
a76: 88 27 eor r24, r24
a78: 87 95 ror r24
a7a: 8a 83 std Y+2, r24 ; 0x02
temp=temp+((byReversal&0x2)<<5);
a7c: 89 81 ldd r24, Y+1 ; 0x01
a7e: 99 27 eor r25, r25
a80: 82 70 andi r24, 0x02 ; 2
a82: 90 70 andi r25, 0x00 ; 0
a84: 88 0f add r24, r24
a86: 99 1f adc r25, r25
a88: 82 95 swap r24
a8a: 92 95 swap r25
a8c: 90 7f andi r25, 0xF0 ; 240
a8e: 98 27 eor r25, r24
a90: 80 7f andi r24, 0xF0 ; 240
a92: 98 27 eor r25, r24
a94: 2a 81 ldd r18, Y+2 ; 0x02
a96: 82 0f add r24, r18
a98: 8a 83 std Y+2, r24 ; 0x02
temp=temp+((byReversal&0x4)<<3);
a9a: 89 81 ldd r24, Y+1 ; 0x01
a9c: 99 27 eor r25, r25
a9e: 84 70 andi r24, 0x04 ; 4
aa0: 90 70 andi r25, 0x00 ; 0
aa2: 88 0f add r24, r24
aa4: 99 1f adc r25, r25
aa6: 88 0f add r24, r24
aa8: 99 1f adc r25, r25
aaa: 88 0f add r24, r24
aac: 99 1f adc r25, r25
aae: 2a 81 ldd r18, Y+2 ; 0x02
ab0: 82 0f add r24, r18
ab2: 8a 83 std Y+2, r24 ; 0x02
temp=temp+((byReversal&0x8)<<1);
ab4: 89 81 ldd r24, Y+1 ; 0x01
ab6: 99 27 eor r25, r25
ab8: 88 70 andi r24, 0x08 ; 8
aba: 90 70 andi r25, 0x00 ; 0
abc: 88 0f add r24, r24
abe: 99 1f adc r25, r25
ac0: 2a 81 ldd r18, Y+2 ; 0x02
ac2: 82 0f add r24, r18
ac4: 8a 83 std Y+2, r24 ; 0x02
temp=temp+(byReversal>>7);
ac6: 89 81 ldd r24, Y+1 ; 0x01
ac8: 98 2f mov r25, r24
aca: 99 1f adc r25, r25
acc: 99 27 eor r25, r25
ace: 99 1f adc r25, r25
ad0: 8a 81 ldd r24, Y+2 ; 0x02
ad2: 89 0f add r24, r25
ad4: 8a 83 std Y+2, r24 ; 0x02
temp=temp+((byReversal&0x40)>>5);
ad6: 89 81 ldd r24, Y+1 ; 0x01
ad8: 99 27 eor r25, r25
ada: 80 74 andi r24, 0x40 ; 64
adc: 90 70 andi r25, 0x00 ; 0
ade: 95 95 asr r25
ae0: 87 95 ror r24
ae2: 95 95 asr r25
ae4: 87 95 ror r24
ae6: 95 95 asr r25
ae8: 87 95 ror r24
aea: 95 95 asr r25
aec: 87 95 ror r24
aee: 95 95 asr r25
af0: 87 95 ror r24
af2: 2a 81 ldd r18, Y+2 ; 0x02
af4: 82 0f add r24, r18
af6: 8a 83 std Y+2, r24 ; 0x02
temp=temp+((byReversal&0x20)>>3);
af8: 89 81 ldd r24, Y+1 ; 0x01
afa: 99 27 eor r25, r25
afc: 80 72 andi r24, 0x20 ; 32
afe: 90 70 andi r25, 0x00 ; 0
b00: 95 95 asr r25
b02: 87 95 ror r24
b04: 95 95 asr r25
b06: 87 95 ror r24
b08: 95 95 asr r25
b0a: 87 95 ror r24
b0c: 2a 81 ldd r18, Y+2 ; 0x02
b0e: 82 0f add r24, r18
b10: 8a 83 std Y+2, r24 ; 0x02
temp=temp+((byReversal&0x10)>>1);
b12: 89 81 ldd r24, Y+1 ; 0x01
b14: 99 27 eor r25, r25
b16: 80 71 andi r24, 0x10 ; 16
b18: 90 70 andi r25, 0x00 ; 0
b1a: 95 95 asr r25
b1c: 87 95 ror r24
b1e: 2a 81 ldd r18, Y+2 ; 0x02
b20: 82 0f add r24, r18
b22: 8a 83 std Y+2, r24 ; 0x02
return temp;
b24: 8a 81 ldd r24, Y+2 ; 0x02
b26: 99 27 eor r25, r25
b28: 22 96 adiw r28, 0x02 ; 2
b2a: 0f b6 in r0, 0x3f ; 63
b2c: f8 94 cli
b2e: de bf out 0x3e, r29 ; 62
b30: 0f be out 0x3f, r0 ; 63
b32: cd bf out 0x3d, r28 ; 61
b34: df 91 pop r29
b36: cf 91 pop r28
b38: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -