📄 ata.lis
字号:
0424 9305 cpc R25,R3
0426 40F4 brsh L141
0428 .dbline 264
0428 1701 movw R2,R14
042A 232C mov R2,R3
042C 3324 clr R3
042E EA89 ldd R30,y+18
0430 FB89 ldd R31,y+19
0432 2192 st Z+,R2
0434 FB8B std y+19,R31
0436 EA8B std y+18,R30
0438 L141:
0438 .dbline 265
0438 ; j++;
0438 C601 movw R24,R12
043A 0196 adiw R24,1
043C 6C01 movw R12,R24
043E L143:
043E .dbline 266
043E L144:
043E .dbline 266
043E 07DF xcall _ata_bsy
0440 0023 tst R16
0442 E9F7 brne L143
0444 .dbline 267
0444 L136:
0444 .dbline 259
0444 C501 movw R24,R10
0446 0196 adiw R24,1
0448 5C01 movw R10,R24
044A L138:
044A .dbline 259
044A C501 movw R24,R10
044C 8030 cpi R24,0
044E E1E0 ldi R30,1
0450 9E07 cpc R25,R30
0452 08F4 brsh X6
0454 C4CF xjmp L135
0456 X6:
0456 .dbline -2
0456 .dbline 268
0456 ; while(busy);
0456 ; }
0456 ; }
0456 L108:
0456 0E940000 xcall pop_gset5
045A 2296 adiw R28,2
045C .dbline 0 ; func end
045C 0895 ret
045E .dbsym r word 14 i
045E .dbsym r i 10 i
045E .dbsym r j 12 i
045E .dbsym l ptr 18 pc
045E .dbsym l qte 16 i
045E .dbsym l from 14 i
045E .dbsym l lbasector 10 l
045E .dbsym r device 10 c
045E .dbend
045E .dbfunc e ata_write_sector _ata_write_sector fV
045E ; i -> R12,R13
045E ; ptr -> R10,R11
045E ; lbasector -> y+8
045E ; device -> R12
.even
045E _ata_write_sector::
045E 3A93 st -y,r19
0460 2A93 st -y,r18
0462 0E940000 xcall push_gset4
0466 C02E mov R12,R16
0468 AC84 ldd R10,y+12
046A BD84 ldd R11,y+13
046C .dbline -1
046C .dbline 276
046C ;
046C ; //******************************************************************
046C ; //* WRITE A SECTOR
046C ; //* device = 0x00 or 0x01
046C ; //*
046C ; //******************************************************************
046C ; void ata_write_sector(unsigned char device, unsigned long lbasector, unsigned char *ptr)
046C ; {
046C .dbline 279
046C ; unsigned int i;
046C ;
046C ; lbasector &= 0x0FFFFFFF;
046C 4FEF ldi R20,255
046E 5FEF ldi R21,255
0470 6FEF ldi R22,255
0472 7FE0 ldi R23,15
0474 FE01 movw R30,R28
0476 2084 ldd R2,z+8
0478 3184 ldd R3,z+9
047A 4284 ldd R4,z+10
047C 5384 ldd R5,z+11
047E 2422 and R2,R20
0480 3522 and R3,R21
0482 4622 and R4,R22
0484 5722 and R5,R23
0486 2086 std z+8,R2
0488 3186 std z+9,R3
048A 4286 std z+10,R4
048C 5386 std z+11,R5
048E .dbline 281
048E ;
048E ; switch (device)
048E DD24 clr R13
0490 CC20 tst R12
0492 11F4 brne X7
0494 DD20 tst R13
0496 31F0 breq L150
0498 X7:
0498 C601 movw R24,R12
049A 8130 cpi R24,1
049C E0E0 ldi R30,0
049E 9E07 cpc R25,R30
04A0 D9F0 breq L151
04A2 34C0 xjmp L147
04A4 X8:
04A4 .dbline 282
04A4 ; {
04A4 L150:
04A4 .dbline 284
04A4 ; case 0x00:
04A4 ; ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
04A4 88E1 ldi R24,24
04A6 90E0 ldi R25,0
04A8 FE01 movw R30,R28
04AA 2084 ldd R2,z+8
04AC 3184 ldd R3,z+9
04AE 4284 ldd R4,z+10
04B0 5384 ldd R5,z+11
04B2 8A93 st -y,R24
04B4 8101 movw R16,R2
04B6 9201 movw R18,R4
04B8 0E940000 xcall lsr32
04BC 1801 movw R2,R16
04BE 2901 movw R4,R18
04C0 40EE ldi R20,224
04C2 50E0 ldi R21,0
04C4 60E0 ldi R22,0
04C6 70E0 ldi R23,0
04C8 242A or R2,R20
04CA 352A or R3,R21
04CC 462A or R4,R22
04CE 572A or R5,R23
04D0 222D mov R18,R2
04D2 05EF ldi R16,245
04D4 53DE xcall _ata_write_byte
04D6 .dbline 285
04D6 ; break;
04D6 33C0 xjmp L153
04D8 L151:
04D8 .dbline 287
04D8 ; case 0x01:
04D8 ; ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xF0);
04D8 88E1 ldi R24,24
04DA 90E0 ldi R25,0
04DC FE01 movw R30,R28
04DE 2084 ldd R2,z+8
04E0 3184 ldd R3,z+9
04E2 4284 ldd R4,z+10
04E4 5384 ldd R5,z+11
04E6 8A93 st -y,R24
04E8 8101 movw R16,R2
04EA 9201 movw R18,R4
04EC 0E940000 xcall lsr32
04F0 1801 movw R2,R16
04F2 2901 movw R4,R18
04F4 40EF ldi R20,240
04F6 50E0 ldi R21,0
04F8 60E0 ldi R22,0
04FA 70E0 ldi R23,0
04FC 242A or R2,R20
04FE 352A or R3,R21
0500 462A or R4,R22
0502 572A or R5,R23
0504 222D mov R18,R2
0506 05EF ldi R16,245
0508 39DE xcall _ata_write_byte
050A .dbline 288
050A ; break;
050A 19C0 xjmp L153
050C L147:
050C .dbline 290
050C ; default:
050C ; ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
050C 88E1 ldi R24,24
050E 90E0 ldi R25,0
0510 FE01 movw R30,R28
0512 2084 ldd R2,z+8
0514 3184 ldd R3,z+9
0516 4284 ldd R4,z+10
0518 5384 ldd R5,z+11
051A 8A93 st -y,R24
051C 8101 movw R16,R2
051E 9201 movw R18,R4
0520 0E940000 xcall lsr32
0524 1801 movw R2,R16
0526 2901 movw R4,R18
0528 40EE ldi R20,224
052A 50E0 ldi R21,0
052C 60E0 ldi R22,0
052E 70E0 ldi R23,0
0530 242A or R2,R20
0532 352A or R3,R21
0534 462A or R4,R22
0536 572A or R5,R23
0538 222D mov R18,R2
053A 05EF ldi R16,245
053C 1FDE xcall _ata_write_byte
053E .dbline 291
053E ; break;
053E L152:
053E .dbline 293
053E L153:
053E .dbline 293
053E ; }
053E ; while(busy);
053E 87DE xcall _ata_bsy
0540 0023 tst R16
0542 E9F7 brne L152
0544 .dbline 294
0544 ; ata_write_byte(ATA_IO_CYL_H,lbasector >> 16);
0544 FE01 movw R30,R28
0546 2084 ldd R2,z+8
0548 3184 ldd R3,z+9
054A 4284 ldd R4,z+10
054C 5384 ldd R5,z+11
054E 1201 movw R2,R4
0550 4424 clr R4
0552 5524 clr R5
0554 222D mov R18,R2
0556 0DED ldi R16,221
0558 11DE xcall _ata_write_byte
055A L155:
055A .dbline 295
055A L156:
055A .dbline 295
055A ; while(busy);
055A 79DE xcall _ata_bsy
055C 0023 tst R16
055E E9F7 brne L155
0560 .dbline 296
0560 ; ata_write_byte(ATA_IO_CYL_L,lbasector >> 8);
0560 88E0 ldi R24,8
0562 90E0 ldi R25,0
0564 FE01 movw R30,R28
0566 2084 ldd R2,z+8
0568 3184 ldd R3,z+9
056A 4284 ldd R4,z+10
056C 5384 ldd R5,z+11
056E 8A93 st -y,R24
0570 8101 movw R16,R2
0572 9201 movw R18,R4
0574 0E940000 xcall lsr32
0578 202F mov R18,R16
057A 05ED ldi R16,213
057C FFDD xcall _ata_write_byte
057E L158:
057E .dbline 297
057E L159:
057E .dbline 297
057E ; while(busy);
057E 67DE xcall _ata_bsy
0580 0023 tst R16
0582 E9F7 brne L158
0584 .dbline 298
0584 ; ata_write_byte(ATA_IO_SECTORNUM,lbasector);
0584 FE01 movw R30,R28
0586 2084 ldd R2,z+8
0588 3184 ldd R3,z+9
058A 4284 ldd R4,z+10
058C 5384 ldd R5,z+11
058E 222D mov R18,R2
0590 0DEE ldi R16,237
0592 F4DD xcall _ata_write_byte
0594 L161:
0594 .dbline 299
0594 L162:
0594 .dbline 299
0594 ; while(busy);
0594 5CDE xcall _ata_bsy
0596 0023 tst R16
0598 E9F7 brne L161
059A .dbline 300
059A ; ata_write_byte(ATA_IO_SECTORCNT,0x01);
059A 21E0 ldi R18,1
059C 05EE ldi R16,229
059E EEDD xcall _ata_write_byte
05A0 L164:
05A0 .dbline 301
05A0 L165:
05A0 .dbline 301
05A0 ; while(busy);
05A0 56DE xcall _ata_bsy
05A2 0023 tst R16
05A4 E9F7 brne L164
05A6 .dbline 302
05A6 ; ata_write_byte(ATA_IO_CMD,CMD_WRITE_SECTORS);
05A6 20E3 ldi R18,48
05A8 0DEF ldi R16,253
05AA E8DD xcall _ata_write_byte
05AC L167:
05AC .dbline 303
05AC L168:
05AC .dbline 303
05AC ; while(busy);
05AC 50DE xcall _ata_bsy
05AE 0023 tst R16
05B0 E9F7 brne L167
05B2 L170:
05B2 .dbline 304
05B2 L171:
05B2 .dbline 304
05B2 ; while(!drq);
05B2 55DE xcall _ata_drq
05B4 0023 tst R16
05B6 E9F3 breq L170
05B8 .dbline 306
05B8 ;
05B8 ; for (i=0;i<256;i++)
05B8 CC24 clr R12
05BA DD24 clr R13
05BC 14C0 xjmp L176
05BE L173:
05BE .dbline 307
05BE ; {
05BE .dbline 308
05BE ; ata_write_word(ATA_IO_DATA,(unsigned int)(*(ptr+1)<<8)+*ptr);
05BE F501 movw R30,R10
05C0 2080 ldd R2,z+0
05C2 3324 clr R3
05C4 2181 ldd R18,z+1
05C6 3327 clr R19
05C8 322F mov R19,R18
05CA 2227 clr R18
05CC 220D add R18,R2
05CE 331D adc R19,R3
05D0 05EC ldi R16,197
05D2 93DD xcall _ata_write_word
05D4 .dbline 309
05D4 ; ptr += 2;
05D4 C501 movw R24,R10
05D6 0296 adiw R24,2
05D8 5C01 movw R10,R24
05DA L177:
05DA .dbline 310
05DA L178:
05DA .dbline 310
05DA 39DE xcall _ata_bsy
05DC 0023 tst R16
05DE E9F7 brne L177
05E0 .dbline 311
05E0 L174:
05E0 .dbline 306
05E0 C601 movw R24,R12
05E2 0196 adiw R24,1
05E4 6C01 movw R12,R24
05E6 L176:
05E6 .dbline 306
05E6 C601 movw R24,R12
05E8 8030 cpi R24,0
05EA E1E0 ldi R30,1
05EC 9E07 cpc R25,R30
05EE 38F3 brlo L173
05F0 .dbline -2
05F0 .dbline 312
05F0 ; while(busy);
05F0 ; }
05F0 ; }
05F0 L146:
05F0 0E940000 xcall pop_gset4
05F4 2296 adiw R28,2
05F6 .dbline 0 ; func end
05F6 0895 ret
05F8 .dbsym r i 12 i
05F8 .dbsym r ptr 10 pc
05F8 .dbsym l lbasector 8 l
05F8 .dbsym r device 12 c
05F8 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -