📄 ata.lis
字号:
0138 51FD sbrc R21,1
013A .dbline 101
013A AA9A sbi 0x15,2
013C L47:
013C .dbline 102
013C ; if (wordout & 0x0400) PORT_ATA_DATA2_OUT |= 0x10;
013C 52FD sbrc R21,2
013E .dbline 102
013E AC9A sbi 0x15,4
0140 L49:
0140 .dbline 103
0140 ; if (wordout & 0x0800) PORT_ATA_DATA2_OUT |= 0x40;
0140 53FD sbrc R21,3
0142 .dbline 103
0142 AE9A sbi 0x15,6
0144 L51:
0144 .dbline 104
0144 ; if (wordout & 0x1000) PORT_ATA_DATA1_OUT |= 0x80;
0144 54FD sbrc R21,4
0146 .dbline 104
0146 DF9A sbi 0x1b,7
0148 L53:
0148 .dbline 105
0148 ; if (wordout & 0x2000) PORT_ATA_DATA1_OUT |= 0x20;
0148 55FD sbrc R21,5
014A .dbline 105
014A DD9A sbi 0x1b,5
014C L55:
014C .dbline 106
014C ; if (wordout & 0x4000) PORT_ATA_DATA1_OUT |= 0x08;
014C 56FD sbrc R21,6
014E .dbline 106
014E DB9A sbi 0x1b,3
0150 L57:
0150 .dbline 107
0150 ; if (wordout & 0x8000) PORT_ATA_DATA1_OUT |= 0x02;
0150 57FD sbrc R21,7
0152 .dbline 107
0152 D99A sbi 0x1b,1
0154 L59:
0154 .dbline 109
0154 ;
0154 ; ata_write_pulse;
0154 80916200 lds R24,98
0158 8F77 andi R24,127
015A 80936200 sts 98,R24
015E .dbline 109
015E 01E0 ldi R16,1
0160 10E0 ldi R17,0
0162 0E940000 xcall _delay_us
0166 .dbline 109
0166 80916200 lds R24,98
016A 8068 ori R24,128
016C 80936200 sts 98,R24
0170 .dbline 109
0170 .dbline 111
0170 ;
0170 ; ata_databus_in;
0170 2224 clr R2
0172 2ABA out 0x1a,R2
0174 .dbline 111
0174 24BA out 0x14,R2
0176 .dbline 111
0176 .dbline -2
0176 .dbline 112
0176 ; }
0176 L28:
0176 0E940000 xcall pop_gset2
017A .dbline 0 ; func end
017A 0895 ret
017C .dbsym r wordout 20 i
017C .dbsym r reg 22 c
017C .dbend
017C .dbfunc e ata_write_byte _ata_write_byte fV
017C ; byteout -> R22
017C ; reg -> R20
.even
017C _ata_write_byte::
017C 0E940000 xcall push_gset2
0180 622F mov R22,R18
0182 402F mov R20,R16
0184 .dbline -1
0184 .dbline 120
0184 ;
0184 ; //******************************************************************
0184 ; //* WRITE BYTE TO ATA DEVICE
0184 ; //*
0184 ; //*
0184 ; //******************************************************************
0184 ; void ata_write_byte(unsigned char reg,unsigned char byteout)
0184 ; {
0184 .dbline 121
0184 ; ata_write_word(reg,(unsigned int)byteout);
0184 262F mov R18,R22
0186 3327 clr R19
0188 042F mov R16,R20
018A B7DF xcall _ata_write_word
018C .dbline -2
018C .dbline 122
018C ; }
018C L61:
018C 0E940000 xcall pop_gset2
0190 .dbline 0 ; func end
0190 0895 ret
0192 .dbsym r byteout 22 c
0192 .dbsym r reg 20 c
0192 .dbend
0192 .dbfunc e ata_read_word _ata_read_word fi
0192 ; wordin -> R20,R21
0192 ; reg -> R22
.even
0192 _ata_read_word::
0192 0E940000 xcall push_gset2
0196 602F mov R22,R16
0198 .dbline -1
0198 .dbline 132
0198 ;
0198 ; //******************************************************************
0198 ; //* READ WORD FROM ATA DEVICE
0198 ; //*
0198 ; //*
0198 ; //* Mapping : D0-PA0,D1-PA2,D2-PA4,D3-PA6,D4-PC7,D5-PC5,D7-PC3,D7-PC1
0198 ; //* D8-PC0,D9-PC2,D10-PC4,D11-PC6,D12-PA7,D13-PA5,D14-PA3,D15-PA1
0198 ; //******************************************************************
0198 ; unsigned int ata_read_word(unsigned char reg)
0198 ; {
0198 .dbline 133
0198 ; unsigned int wordin = 0;
0198 4427 clr R20
019A 5527 clr R21
019C .dbline 135
019C ;
019C ; WDR();
019C A895 wdr
019E .dbline 136
019E ; PORT_ATA_IO_CNTL = reg;
019E 60936200 sts 98,R22
01A2 .dbline 138
01A2 ;
01A2 ; ata_databus_in;
01A2 2224 clr R2
01A4 2ABA out 0x1a,R2
01A6 .dbline 138
01A6 24BA out 0x14,R2
01A8 .dbline 138
01A8 .dbline 140
01A8 ;
01A8 ; PORT_ATA_IO_CNTL &= ~ATA_IOR;
01A8 80916200 lds R24,98
01AC 8F7B andi R24,191
01AE 80936200 sts 98,R24
01B2 .dbline 141
01B2 ; delay_us(1);
01B2 01E0 ldi R16,1
01B4 10E0 ldi R17,0
01B6 0E940000 xcall _delay_us
01BA .dbline 143
01BA ;
01BA ; if (PORT_ATA_DATA1_IN & 0x01) wordin |= 0x0001;
01BA C89B sbis 0x19,0
01BC 01C0 rjmp L63
01BE .dbline 143
01BE 4160 ori R20,1
01C0 L63:
01C0 .dbline 144
01C0 ; if (PORT_ATA_DATA1_IN & 0x02) wordin |= 0x8000;
01C0 C99B sbis 0x19,1
01C2 01C0 rjmp L65
01C4 .dbline 144
01C4 5068 ori R21,128
01C6 L65:
01C6 .dbline 145
01C6 ; if (PORT_ATA_DATA1_IN & 0x04) wordin |= 0x0002;
01C6 CA9B sbis 0x19,2
01C8 01C0 rjmp L67
01CA .dbline 145
01CA 4260 ori R20,2
01CC L67:
01CC .dbline 146
01CC ; if (PORT_ATA_DATA1_IN & 0x08) wordin |= 0x4000;
01CC CB9B sbis 0x19,3
01CE 01C0 rjmp L69
01D0 .dbline 146
01D0 5064 ori R21,64
01D2 L69:
01D2 .dbline 147
01D2 ; if (PORT_ATA_DATA1_IN & 0x10) wordin |= 0x0004;
01D2 CC9B sbis 0x19,4
01D4 01C0 rjmp L71
01D6 .dbline 147
01D6 4460 ori R20,4
01D8 L71:
01D8 .dbline 148
01D8 ; if (PORT_ATA_DATA1_IN & 0x20) wordin |= 0x2000;
01D8 CD9B sbis 0x19,5
01DA 01C0 rjmp L73
01DC .dbline 148
01DC 5062 ori R21,32
01DE L73:
01DE .dbline 149
01DE ; if (PORT_ATA_DATA1_IN & 0x40) wordin |= 0x0008;
01DE CE9B sbis 0x19,6
01E0 01C0 rjmp L75
01E2 .dbline 149
01E2 4860 ori R20,8
01E4 L75:
01E4 .dbline 150
01E4 ; if (PORT_ATA_DATA1_IN & 0x80) wordin |= 0x1000;
01E4 CF9B sbis 0x19,7
01E6 01C0 rjmp L77
01E8 .dbline 150
01E8 5061 ori R21,16
01EA L77:
01EA .dbline 152
01EA ;
01EA ; if (PORT_ATA_DATA2_IN & 0x01) wordin |= 0x0100;
01EA 989B sbis 0x13,0
01EC 01C0 rjmp L79
01EE .dbline 152
01EE 5160 ori R21,1
01F0 L79:
01F0 .dbline 153
01F0 ; if (PORT_ATA_DATA2_IN & 0x02) wordin |= 0x0080;
01F0 999B sbis 0x13,1
01F2 01C0 rjmp L81
01F4 .dbline 153
01F4 4068 ori R20,128
01F6 L81:
01F6 .dbline 154
01F6 ; if (PORT_ATA_DATA2_IN & 0x04) wordin |= 0x0200;
01F6 9A9B sbis 0x13,2
01F8 01C0 rjmp L83
01FA .dbline 154
01FA 5260 ori R21,2
01FC L83:
01FC .dbline 155
01FC ; if (PORT_ATA_DATA2_IN & 0x08) wordin |= 0x0040;
01FC 9B9B sbis 0x13,3
01FE 01C0 rjmp L85
0200 .dbline 155
0200 4064 ori R20,64
0202 L85:
0202 .dbline 156
0202 ; if (PORT_ATA_DATA2_IN & 0x10) wordin |= 0x0400;
0202 9C9B sbis 0x13,4
0204 01C0 rjmp L87
0206 .dbline 156
0206 5460 ori R21,4
0208 L87:
0208 .dbline 157
0208 ; if (PORT_ATA_DATA2_IN & 0x20) wordin |= 0x0020;
0208 9D9B sbis 0x13,5
020A 01C0 rjmp L89
020C .dbline 157
020C 4062 ori R20,32
020E L89:
020E .dbline 158
020E ; if (PORT_ATA_DATA2_IN & 0x40) wordin |= 0x0800;
020E 9E9B sbis 0x13,6
0210 01C0 rjmp L91
0212 .dbline 158
0212 5860 ori R21,8
0214 L91:
0214 .dbline 159
0214 ; if (PORT_ATA_DATA2_IN & 0x80) wordin |= 0x0010;
0214 9F9B sbis 0x13,7
0216 01C0 rjmp L93
0218 .dbline 159
0218 4061 ori R20,16
021A L93:
021A .dbline 161
021A ;
021A ; PORT_ATA_IO_CNTL |= ATA_IOR;
021A 80916200 lds R24,98
021E 8064 ori R24,64
0220 80936200 sts 98,R24
0224 .dbline 162
0224 ; return wordin;
0224 8A01 movw R16,R20
0226 .dbline -2
0226 L62:
0226 0E940000 xcall pop_gset2
022A .dbline 0 ; func end
022A 0895 ret
022C .dbsym r wordin 20 i
022C .dbsym r reg 22 c
022C .dbend
022C .dbfunc e ata_read_byte _ata_read_byte fc
022C ; reg -> R20
.even
022C _ata_read_byte::
022C 0E940000 xcall push_gset1
0230 402F mov R20,R16
0232 .dbline -1
0232 .dbline 172
0232 ; }
0232 ;
0232 ; //******************************************************************
0232 ; //* READ BYTE FROM ATA DEVICE
0232 ; //*
0232 ; //*
0232 ; //*
0232 ; //******************************************************************
0232 ; unsigned char ata_read_byte(unsigned char reg)
0232 ; {
0232 .dbline 173
0232 ; return (unsigned char)(ata_read_word(reg) & 0x00ff);
0232 042F mov R16,R20
0234 AEDF xcall _ata_read_word
0236 1070 andi R17,0
0238 .dbline -2
0238 L95:
0238 0E940000 xcall pop_gset1
023C .dbline 0 ; func end
023C 0895 ret
023E .dbsym r reg 20 c
023E .dbend
023E .dbfunc e ata_rdy _ata_rdy fc
.even
023E _ata_rdy::
023E .dbline -1
023E .dbline 182
023E ; }
023E ;
023E ; //******************************************************************
023E ; //* CHECK ATA READY BIT
023E ; //* Checks READY status bit.
023E ; //* Returns 1 if device is ready.
023E ; //******************************************************************
023E ; unsigned char ata_rdy(void)
023E ; {
023E .dbline 183
023E ; if (ata_read_byte(ATA_IO_STATUS) & ATA_STAT_RDY) return 1;
023E 0DEF ldi R16,253
0240 F5DF xcall _ata_read_byte
0242 06FF sbrs R16,6
0244 02C0 rjmp L97
0246 .dbline 183
0246 01E0 ldi R16,1
0248 01C0 xjmp L96
024A L97:
024A .dbline 184
024A ; else return 0;
024A 0027 clr R16
024C .dbline -2
024C L96:
024C .dbline 0 ; func end
024C 0895 ret
024E .dbend
024E .dbfunc e ata_bsy _ata_bsy fc
.even
024E _ata_bsy::
024E .dbline -1
024E .dbline 193
024E ; }
024E ;
024E ; //******************************************************************
024E ; //* CHECK ATA BUSY BIT
024E ; //* Checks READY status bit.
024E ; //* Returns 1 if device is busy.
024E ; //******************************************************************
024E ; unsigned char ata_bsy(void)
024E ; {
024E .dbline 194
024E ; if (ata_read_byte(ATA_IO_STATUS) & ATA_STAT_BSY) return 1;
024E 0DEF ldi R16,253
0250 EDDF xcall _ata_read_byte
0252 07FF sbrs R16,7
0254 02C0 rjmp L100
0256 .dbline 194
0256 01E0 ldi R16,1
0258 01C0 xjmp L99
025A L100:
025A .dbline 195
025A ; else return 0;
025A 0027 clr R16
025C .dbline -2
025C L99:
025C .dbline 0 ; func end
025C 0895 ret
025E .dbend
025E .dbfunc e ata_drq _ata_drq fc
.even
025E _ata_drq::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -