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