⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3.lst

📁 使用硬盘制作mp3的源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    025F 6042      ORI	R20,2
(0146) if (PORT_ATA_DATA1_IN & 0x08) wordin |= 0x4000;
    0260 9BCB      SBIS	0x19,3
    0261 C001      RJMP	0x0263
    0262 6450      ORI	R21,0x40
(0147) if (PORT_ATA_DATA1_IN & 0x10) wordin |= 0x0004;
    0263 9BCC      SBIS	0x19,4
    0264 C001      RJMP	0x0266
    0265 6044      ORI	R20,4
(0148) if (PORT_ATA_DATA1_IN & 0x20) wordin |= 0x2000;
    0266 9BCD      SBIS	0x19,5
    0267 C001      RJMP	0x0269
    0268 6250      ORI	R21,0x20
(0149) if (PORT_ATA_DATA1_IN & 0x40) wordin |= 0x0008;
    0269 9BCE      SBIS	0x19,6
    026A C001      RJMP	0x026C
    026B 6048      ORI	R20,0x8
(0150) if (PORT_ATA_DATA1_IN & 0x80) wordin |= 0x1000;
    026C 9BCF      SBIS	0x19,7
    026D C001      RJMP	0x026F
    026E 6150      ORI	R21,0x10
(0151) 
(0152) if (PORT_ATA_DATA2_IN & 0x01) wordin |= 0x0100;
    026F 9B98      SBIS	0x13,0
    0270 C001      RJMP	0x0272
    0271 6051      ORI	R21,1
(0153) if (PORT_ATA_DATA2_IN & 0x02) wordin |= 0x0080;
    0272 9B99      SBIS	0x13,1
    0273 C001      RJMP	0x0275
    0274 6840      ORI	R20,0x80
(0154) if (PORT_ATA_DATA2_IN & 0x04) wordin |= 0x0200;
    0275 9B9A      SBIS	0x13,2
    0276 C001      RJMP	0x0278
    0277 6052      ORI	R21,2
(0155) if (PORT_ATA_DATA2_IN & 0x08) wordin |= 0x0040;
    0278 9B9B      SBIS	0x13,3
    0279 C001      RJMP	0x027B
    027A 6440      ORI	R20,0x40
(0156) if (PORT_ATA_DATA2_IN & 0x10) wordin |= 0x0400;
    027B 9B9C      SBIS	0x13,4
    027C C001      RJMP	0x027E
    027D 6054      ORI	R21,4
(0157) if (PORT_ATA_DATA2_IN & 0x20) wordin |= 0x0020;
    027E 9B9D      SBIS	0x13,5
    027F C001      RJMP	0x0281
    0280 6240      ORI	R20,0x20
(0158) if (PORT_ATA_DATA2_IN & 0x40) wordin |= 0x0800;
    0281 9B9E      SBIS	0x13,6
    0282 C001      RJMP	0x0284
    0283 6058      ORI	R21,0x8
(0159) if (PORT_ATA_DATA2_IN & 0x80) wordin |= 0x0010;
    0284 9B9F      SBIS	0x13,7
    0285 C001      RJMP	0x0287
    0286 6140      ORI	R20,0x10
(0160) 
(0161) PORT_ATA_IO_CNTL |= ATA_IOR;
    0287 91800062  LDS	R24,0x62
    0289 6480      ORI	R24,0x40
    028A 93800062  STS	0x62,R24
(0162) return wordin;
    028C 018A      MOVW	R16,R20
    028D 940E15C5  CALL	pop_gset2
    028F 9508      RET
_ata_read_byte:
  reg                  --> R20
    0290 940E15D9  CALL	push_gset1
    0292 2F40      MOV	R20,R16
(0163) }   
(0164) 
(0165) //******************************************************************
(0166) //*	READ BYTE FROM ATA DEVICE
(0167) //*  
(0168) //*   
(0169) //*
(0170) //******************************************************************										 									 									 
(0171) unsigned char ata_read_byte(unsigned char reg)
(0172) {
(0173) return (unsigned char)(ata_read_word(reg) & 0x00ff);
    0293 2F04      MOV	R16,R20
    0294 DFAE      RCALL	_ata_read_word
    0295 7010      ANDI	R17,0
    0296 940E15DC  CALL	pop_gset1
    0298 9508      RET
(0174) }	
(0175) 
(0176) //******************************************************************
(0177) //*	CHECK ATA READY BIT 
(0178) //*   Checks READY status bit.
(0179) //*   Returns 1 if device is ready.
(0180) //****************************************************************** 
(0181) unsigned char ata_rdy(void)
(0182) {
(0183) if (ata_read_byte(ATA_IO_STATUS) & ATA_STAT_RDY) return 1;
_ata_rdy:
    0299 EF0D      LDI	R16,0xFD
    029A DFF5      RCALL	_ata_read_byte
    029B FF06      SBRS	R16,6
    029C C002      RJMP	0x029F
    029D E001      LDI	R16,1
    029E C001      RJMP	0x02A0
(0184) else return 0;
    029F 2700      CLR	R16
    02A0 9508      RET
(0185) }
(0186) 
(0187) //******************************************************************
(0188) //*	CHECK ATA BUSY BIT 
(0189) //*   Checks READY status bit.
(0190) //*   Returns 1 if device is busy.
(0191) //****************************************************************** 
(0192) unsigned char ata_bsy(void)
(0193) {
(0194) if (ata_read_byte(ATA_IO_STATUS) & ATA_STAT_BSY) return 1;
_ata_bsy:
    02A1 EF0D      LDI	R16,0xFD
    02A2 DFED      RCALL	_ata_read_byte
    02A3 FF07      SBRS	R16,7
    02A4 C002      RJMP	0x02A7
    02A5 E001      LDI	R16,1
    02A6 C001      RJMP	0x02A8
(0195) else return 0;
    02A7 2700      CLR	R16
    02A8 9508      RET
(0196) }
(0197) 
(0198) //******************************************************************
(0199) //*	CHECK ATA DRQ BIT 
(0200) //*   Checks READY status bit.
(0201) //*   Returns 1 if device is requesting service.
(0202) //******************************************************************    
(0203) unsigned char ata_drq(void)
(0204) {
(0205) if (ata_read_byte(ATA_IO_STATUS) & ATA_STAT_DRQ) return 1;
_ata_drq:
    02A9 EF0D      LDI	R16,0xFD
    02AA DFE5      RCALL	_ata_read_byte
    02AB FF03      SBRS	R16,3
    02AC C002      RJMP	0x02AF
    02AD E001      LDI	R16,1
    02AE C001      RJMP	0x02B0
(0206) else return 0;
    02AF 2700      CLR	R16
    02B0 9508      RET
(0207) }
(0208) 
(0209) //******************************************************************
(0210) //*	CHECK ATA ERROR BIT 
(0211) //*   Checks READY status bit.
(0212) //*   Returns 1 if device is reporting an error condition.
(0213) //****************************************************************** 
(0214) unsigned char ata_err(void)
(0215) {
(0216) if (ata_read_byte(ATA_IO_STATUS) & ATA_STAT_ERR) return 1;
_ata_err:
    02B1 EF0D      LDI	R16,0xFD
    02B2 DFDD      RCALL	_ata_read_byte
    02B3 FF00      SBRS	R16,0
    02B4 C002      RJMP	0x02B7
    02B5 E001      LDI	R16,1
    02B6 C001      RJMP	0x02B8
(0217) else return 0;
    02B7 2700      CLR	R16
    02B8 9508      RET
_ata_read_sector_byte:
  word                 --> R10
  i                    --> R12
  j                    --> R14
  ptr                  --> Y+18
  qte                  --> Y+16
  from                 --> Y+14
  lbasector            --> Y+10
  device               --> R10
    02B9 933A      ST	R19,-Y
    02BA 932A      ST	R18,-Y
    02BB 940E15D1  CALL	push_gset5
    02BD 2EA0      MOV	R10,R16
(0218) }
(0219) 
(0220) //******************************************************************
(0221) //*	READ A PART of SECTOR 
(0222) //*   device = 0x00 or 0x01  
(0223) //*   
(0224) //******************************************************************  	
(0225) void ata_read_sector_byte(unsigned char device, unsigned long lbasector,  
(0226) 	 					  unsigned int from, unsigned int qte, 
(0227) 						  unsigned char *ptr)
(0228) {
(0229) unsigned int i,j,word;
(0230) 
(0231) lbasector &= 0x0FFFFFFF;
    02BE EF4F      LDI	R20,0xFF
    02BF EF5F      LDI	R21,0xFF
    02C0 EF6F      LDI	R22,0xFF
    02C1 E07F      LDI	R23,0xF
    02C2 01FE      MOVW	R30,R28
    02C3 8422      LDD	R2,Z+10
    02C4 8433      LDD	R3,Z+11
    02C5 8444      LDD	R4,Z+12
    02C6 8455      LDD	R5,Z+13
    02C7 2224      AND	R2,R20
    02C8 2235      AND	R3,R21
    02C9 2246      AND	R4,R22
    02CA 2257      AND	R5,R23
    02CB 01FE      MOVW	R30,R28
    02CC 8622      STD	Z+10,R2
    02CD 8633      STD	Z+11,R3
    02CE 8644      STD	Z+12,R4
    02CF 8655      STD	Z+13,R5
(0232) 
(0233) switch (device)
    02D0 24BB      CLR	R11
    02D1 20AA      TST	R10
    02D2 F411      BNE	0x02D5
    02D3 20BB      TST	R11
    02D4 F031      BEQ	0x02DB
    02D5 01C5      MOVW	R24,R10
    02D6 3081      CPI	R24,1
    02D7 E0E0      LDI	R30,0
    02D8 079E      CPC	R25,R30
    02D9 F0D9      BEQ	0x02F5
    02DA C034      RJMP	0x030F
(0234)  	{
(0235) 	case 0x00:
(0236)   	   ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
    02DB E188      LDI	R24,0x18
    02DC E090      LDI	R25,0
    02DD 01FE      MOVW	R30,R28
    02DE 8422      LDD	R2,Z+10
    02DF 8433      LDD	R3,Z+11
    02E0 8444      LDD	R4,Z+12
    02E1 8455      LDD	R5,Z+13
    02E2 938A      ST	R24,-Y
    02E3 0181      MOVW	R16,R2
    02E4 0192      MOVW	R18,R4
    02E5 940E1655  CALL	lsr32
    02E7 0118      MOVW	R2,R16
    02E8 0129      MOVW	R4,R18
    02E9 EE40      LDI	R20,0xE0
    02EA E050      LDI	R21,0
    02EB E060      LDI	R22,0
    02EC E070      LDI	R23,0
    02ED 2A24      OR	R2,R20
    02EE 2A35      OR	R3,R21
    02EF 2A46      OR	R4,R22
    02F0 2A57      OR	R5,R23
    02F1 2D22      MOV	R18,R2
    02F2 EF05      LDI	R16,0xF5
    02F3 DF44      RCALL	_ata_write_byte
(0237) 	   break;
    02F4 C033      RJMP	0x0328
(0238)   	case 0x01:
(0239)   	   ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xF0);
    02F5 E188      LDI	R24,0x18
    02F6 E090      LDI	R25,0
    02F7 01FE      MOVW	R30,R28
    02F8 8422      LDD	R2,Z+10
    02F9 8433      LDD	R3,Z+11
    02FA 8444      LDD	R4,Z+12
    02FB 8455      LDD	R5,Z+13
    02FC 938A      ST	R24,-Y
    02FD 0181      MOVW	R16,R2
    02FE 0192      MOVW	R18,R4
    02FF 940E1655  CALL	lsr32
    0301 0118      MOVW	R2,R16
    0302 0129      MOVW	R4,R18
    0303 EF40      LDI	R20,0xF0
    0304 E050      LDI	R21,0
    0305 E060      LDI	R22,0
    0306 E070      LDI	R23,0
    0307 2A24      OR	R2,R20
    0308 2A35      OR	R3,R21
    0309 2A46      OR	R4,R22
    030A 2A57      OR	R5,R23
    030B 2D22      MOV	R18,R2
    030C EF05      LDI	R16,0xF5
    030D DF2A      RCALL	_ata_write_byte
(0240) 	   break;
    030E C019      RJMP	0x0328
(0241)   	default:
(0242)   	   ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
    030F E188      LDI	R24,0x18
    0310 E090      LDI	R25,0
    0311 01FE      MOVW	R30,R28
    0312 8422      LDD	R2,Z+10
    0313 8433      LDD	R3,Z+11
    0314 8444      LDD	R4,Z+12
    0315 8455      LDD	R5,Z+13
    0316 938A      ST	R24,-Y
    0317 0181      MOVW	R16,R2
    0318 0192      MOVW	R18,R4
    0319 940E1655  CALL	lsr32
    031B 0118      MOVW	R2,R16
    031C 0129      MOVW	R4,R18
    031D EE40      LDI	R20,0xE0
    031E E050      LDI	R21,0
    031F E060      LDI	R22,0
    0320 E070      LDI	R23,0
    0321 2A24      OR	R2,R20
    0322 2A35      OR	R3,R21
    0323 2A46      OR	R4,R22
    0324 2A57      OR	R5,R23
    0325 2D22      MOV	R18,R2
    0326 EF05      LDI	R16,0xF5
    0327 DF10      RCALL	_ata_write_byte
(0243) 	   break; 
(0244)  	} 
(0245) while(busy);
    0328 DF78      RCALL	_ata_bsy
    0329 2300      TST	R16
    032A F7E9      BNE	0x0328
(0246) ata_write_byte(ATA_IO_CYL_H,lbasector >> 16);
    032B 01FE      MOVW	R30,R28
    032C 8422      LDD	R2,Z+10
    032D 8433      LDD	R3,Z+11
    032E 8444      LDD	R4,Z+12
    032F 8455      LDD	R5,Z+13
    0330 0112      MOVW	R2,R4
    0331 2444      CLR	R4
    0332 2455      CLR	R5
    0333 2D22      MOV	R18,R2
    0334 ED0D      LDI	R16,0xDD
    0335 DF02      RCALL	_ata_write_byte
(0247) while(busy);
    0336 DF6A      RCALL	_ata_bsy
    0337 2300      TST	R16
    0338 F7E9      BNE	0x0336
(0248) ata_write_byte(ATA_IO_CYL_L,lbasector >> 8);
    0339 E088      LDI	R24,0x8
    033A E090      LDI	R25,0
    033B 01FE      MOVW	R30,R28
    033C 8422      LDD	R2,Z+10
    033D 8433      LDD	R3,Z+11
    033E 8444      LDD	R4,Z+12
    033F 8455      LDD	R5,Z+13
    0340 938A      ST	R24,-Y
    0341 0181      MOVW	R16,R2
    0342 0192      MOVW	R18,R4
    0343 940E1655  CALL	lsr32
    0345 2F20      MOV	R18,R16
    0346 ED05      LDI	R16,0xD5
    0347 DEF0      RCALL	_ata_write_byte
(0249) while(busy);
    0348 DF58      RCALL	_ata_bsy
    0349 2300      TST	R16
    034A F7E9      BNE	0x0348
(0250) ata_write_byte(ATA_IO_SECTORNUM,lbasector);
    034B 01FE      MOVW	R30,R28
    034C 8422      LDD	R2,Z+10
    034D 8433      LDD	R3,Z+11
    034E 8444      LDD	R4,Z+12
    034F 8455      LDD	R5,Z+13
    0350 2D22      MOV	R18,R2
    0351 EE0D      LDI	R16,0xED
    0352 DEE5      RCALL	_ata_write_byte
(0251) while(busy);
    0353 DF4D      RCALL	_ata_bsy
    0354 2300      TST	R16
    0355 F7E9      BNE	0x0353
(0252) ata_write_byte(ATA_IO_SECTORCNT,0x01);
    0356 E021      LDI	R18,1
    0357 EE05      LDI	R16,0xE5
    0358 DEDF      RCALL	_ata_write_byte
(0253) while(busy);
    0359 DF47      RCALL	_ata_bsy
    035A 2300      TST	R16
    035B F7E9      BNE	0x0359
(0254) ata_write_byte(ATA_IO_CMD,CMD_READ_SECTORS);
    035C E220      LDI	R18,0x20
    035D EF0D      LDI	R16,0xFD
    035E DED9      RCALL	_ata_write_byte
(0255) while(busy);
    035F DF41      RCALL	_ata_bsy
    0360 2300      TST	R16
    0361 F7E9      BNE	0x035F
(0256) while(!drq);
    0362 DF46      RCALL	_ata_drq
    0363 2300      TST	R16
    0364 F3E9      BEQ	0x0362
(0257) 
(0258) j = 0;
    0365 24EE      CLR	R14
    0366 24FF      CLR	R15
(0259) for (i=0;i<256;i++)
    0367 24CC      CLR	R12
    0368 24DD      CLR	R13
    0369 C036      RJMP	0x03A0
(0260)     {
(0261) 	word = ata_read_word(ATA_IO_DATA);
    036A EC05      LDI	R16,0xC5
    036B DED7      RCALL	_ata_read_word
    036C 0158      MOVW	R10,R16
(0262) 	if ((j >= from) && (j < (from + qte))) *ptr++ = (unsigned char)(word);
    036D 840E      LDD	R0,Y+14
    036E 841F      LDD	R1,Y+15
    036F 14E0      CP	R14,R0
    0370 04F1      CPC	R15,R1
    0371 F068      BCS	0x037F
    0372 0110      MOVW	R2,R0
    0373 8808      LDD	R0,Y+16

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -