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

📄 old.asm

📁 A MP3 Player Source Code, Enjoy it!
💻 ASM
📖 第 1 页 / 共 3 页
字号:
is_mp3_file:	mov	a, filename+0	jz	isfile_no	add	a, #256 - 0xE5	jz	isfile_no	mov	a, attrib	jb	acc.1, isfile_no	;ATTR_HIDDEN	jb	acc.2, isfile_no	;ATTR_SYSTEM	jb	acc.3, isfile_no	;ATTR_VOLUME_ID	jb	acc.4, isfile_no	;ATTR_DIRECTORY	mov	a, filename+8	cjne	a, #'M', isfile_no	mov	a, filename+9	cjne	a, #'P', isfile_no	mov	a, filename+10	cjne	a, #'3', isfile_no	setb	c	retisfile_no:	clr	c	ret	;print the filename, attrib, first cluster, and file sizeprint_filename:	mov	r0, #filenamepfn1:	mov	a, @r0	lcall	cout	inc	r0	cjne	r0, #filename+8, pfn1	mov	a, #'.'	lcall	coutpfn2:	mov	a, @r0	lcall	cout	inc	r0	cjne	r0, #filename+11, pfn2	mov	dptr, #mesg_attrib	lcall	pstr	mov	a, attrib	lcall	phex	mov	dptr, #mesg_cluster	lcall	pstr	mov	r0, #cluster	acall	phex32_at_r0	mov	dptr, #mesg_size	lcall	pstr	mov	r0, #size	acall	phex32_at_r0	lcall	newline	mov	r0, #dir_position_cluster	acall	phex32_at_r0	acall	space	mov	a, dir_position_sector	lcall	phex	acall	space	mov	a, dir_position_offset	lcall	phex	lcall	newline	ret	;convert "size" in bytes to the number of sectors.  It's	;just a divide by 512 with rounding upbytes_to_sectors:	mov	r2, size+0	;save lower 9 bits	mov	a, size+1	anl	a, #1	mov	r3, a	clr	c		;rotate right 1 bit	mov	a, size+3	rrc	a	mov	size+3, a	mov	a, size+2	rrc	a	mov	size+2, a	mov	a, size+1	rrc	a	mov	size+1, a	mov	size+0, size+1	;rotate another 8 bits	mov	size+1, size+2	mov	size+2, size+3	mov	size+3, #0	mov	a, r2	jnz	b2s_inc	mov	a, r3	jnz	b2s_inc	retb2s_inc:			;round up	mov	a, size+0	add	a, #1	mov	size+0, a	mov	a, size+1	addc	a, #0	mov	size+1, a	mov	a, size+2	addc	a, #0	mov	size+2, a	ret;*************************************************************;**                                                         **;**              IDE Disk Drive Driver Code                 **;**                                                         **;*************************************************************ide_read_sector:	lcall	ide_busy	mov	dptr, #ide_head	mov	a, lba+3	anl	a, #0x0F	orl	a, master_slave	movx	@dptr, a	mov	dptr, #ide_cyl_msb	mov	a, lba+2	movx	@dptr, a	mov	dptr, #ide_cyl_lsb	mov	a, lba+1	movx	@dptr, a	mov	dptr, #ide_sector	mov	a, lba+0	movx	@dptr, a	mov	dptr, #ide_sec_cnt	mov	a, #1	movx	@dptr, a	mov	dptr, #ide_command	mov	a, #ide_cmd_read	movx	@dptr, a	ret	;ask the drive to run in it's lowest current mode	;does this work?  Need to fiddle with it some more.ide_set_low_power:	;acall	ide_drq	mov	dptr, #ide_features	mov	a, #0x9A		;set current subcommand	movx	@dptr, a	mov	dptr, #ide_sec_cnt	mov	a, #1			;lowest available current	movx	@dptr, a	mov	dptr, #ide_command	mov	a, #ide_cmd_set_features	movx	@dptr, a	ret	;put the drive into sleep modeide_sleep:	; acall	ide_busy	mov	dptr, #ide_command	mov	a, #ide_cmd_sleep	movx	@dptr, a	;acall	ide_busy	mov	dptr, #ide_status	movx	a, @dptr	retide_reset:	mov	dptr, #0xFF32	mov	a, #255	movx	@dptr, a		;assert drive's reset pin	mov	r0, #0	djnz	r0, *	djnz	r0, *	djnz	r0, *	mov	a, #0	movx	@dptr, a		;de-assert drive's reset pin	djnz	r0, *	djnz	r0, *	djnz	r0, *	retide_init:ideiwait:	 mov	a, #'.'			;should slow down the printing of dots	 lcall	cout	 lcall	wait	mov	master_slave, #0xE0	acall	idei_get_status	jb	acc.7, idei_try_slave	;wait for BSY bit to be clear	jb	acc.6, idei_ready	;wait for RDY bit to be setidei_try_slave:	mov	master_slave, #0xF0	acall	idei_get_status	jb	acc.7, ideiwait		;wait for BSY bit to be clear	jnb	acc.6, ideiwait		;wait for RDY bit to be setidei_ready:         lcall  newline         mov    dptr, #msg_found_ide         lcall  pstr         mov    dptr, #msg_master         mov    a, master_slave         jnb    acc.4, idei2         mov    dptr, #msg_slaveidei2:   lcall  pstr	lcall	ide_busy	mov	dptr, #ide_command	mov	a, #ide_cmd_id	movx	@dptr, a		;ask for device ID data        lcall   ide_drq        lcall   grab_data		;fetch 512 bytes of ID data	 mov	dptr, #msg_cylinders	 lcall	pstr         mov	dptr, #sector_buffer + 2         movx	a, @dptr	 push	acc	 inc	dptr         movx	a, @dptr	 mov	dph, a	 pop	dpl	 lcall	pint16u	 mov	dptr, #msg_heads	 lcall	pstr         mov	dptr, #sector_buffer + 6         movx	a, @dptr	 lcall	pint8u	 mov	dptr, #msg_sectors	 lcall	pstr         mov	dptr, #sector_buffer + 12         movx	a, @dptr	 lcall	pint8u	 lcall	newline	lcall	ide_busy        mov     dptr, #sector_buffer + 6        movx    a, @dptr                ;read # of heads from ID info        dec     a        orl     a, master_slave        anl     a, #0xBF        mov     dptr, #ide_head        movx    @dptr, a        mov     dptr, #sector_buffer + 12        movx    a, @dptr                ;read # sector/track from ID info        mov     dptr, #ide_sec_cnt        movx    @dptr, a        mov     dptr, #ide_command        mov     a, #ide_cmd_initparms        movx    @dptr, a                ;do the init parameters command        lcall   ide_busy                ;make sure drive is ready	retidei_get_status:        mov     dptr, #ide_head        mov     a, master_slave        movx    @dptr, a                ;select the master or slave device        mov     dptr, #ide_status        movx    a, @dptr        retide_busy:	mov	dptr, #ide_status	movx	a, @dptr	  push	acc	  ;mov	a, #'.'	  ;lcall	cout	  lcall	wait	  pop	acc	jb	acc.7, ide_busy		;wait for BSY to be clear	retide_drq:	mov	dptr, #ide_status	movx	a, @dptr	  push	acc	  ;mov	a, #'_'	  ;lcall	cout	  lcall	wait	  pop	acc	jb	acc.7, ide_drq		;wait for BSY to be clear	jnb     acc.3, ide_drq          ;wait for DRQ to be set	retprint_sector_buffer:	push	acc	push	dpl	push	dph	mov	a, r0	push	acc	mov	a, r1	push	acc	mov	dptr, #mesg_sector_buffer	lcall	pstr	mov	r0, #32	mov	dptr, #sector_bufferpb1:	mov	r1, #16pb2:	movx	a, @dptr	inc	dptr	lcall	phex	lcall	space	djnz	r1, pb2	clr	c	mov	a, dpl	subb	a, #16	mov	dpl, a	mov	a, dph	subb	a, #0	mov	dph, a	mov	r1, #16pb3:	movx	a, @dptr	inc	dptr	anl	a, #0x7F	add	a, #224	jc	pb4	mov	a, #' ' - 32pb4:	add	a, #32	lcall	cout	djnz	r1, pb3	lcall	newline	djnz	r0, pb1	lcall	newline	pop	acc	mov	r1, a	pop	acc	mov	r0, a	pop	dph	pop	dpl	pop	acc	retgrab_data:	clr	a	mov	dptr, #0xFF31	movx	@dptr, a	;clear the address counter	mov	dptr, #0xFF30	movx	a, @dptr	;transfer bytes 0 to 31	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 32 to 63	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 64 to 95	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 96 to 127	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 128 to 159	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 160 to 191	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 192 to 223	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 224 to 255	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 256 to 287	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 288 to 319	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 320 to 351	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 352 to 383	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 384 to 415	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 416 to 447	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 448 to 479	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	;transfer bytes 480 to 511	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	movx	a, @dptr	retmesg_read_mbr:	.db	"Reading Master Boot Record",13,10,0mesg_bad_mbr:	.db	"MBR Signature Not Found",13,10,0msg_unknown_partion_type:	.db	"Unknown Partition Type: ",0mesg_partition_at:	.db	"Found FAT32 Partition at LBA = ",0mesg_read_vol_id:	.db	"Reading FAT32 Volume ID",13,10,0mesg_bad_vol_id:	.db	"Bad FAT32 Volume ID",13,10,0mesg_first_data_sec:	.db	"First Data Sector at LBA = ",0mesg_playing_file:	.db	"\\[Play: ",0mesg_vol_id_ok:	.db	"Volume ID looks ok",13,10,0mesg_sec_per_cluster:	.db	"Sectors per cluster: ",0mesg_root_dir_at_cluster:	.db	"Root directory starts at cluster # ",0mesg_sectors_for_fats:	.db	"Sectors used for FAT tables: ",0mesg_reserved_sectors:	.db	"Reserved Sectors: ",0mesg_attrib:	.db	13,10	.db	"\\]  Attrib=",0mesg_cluster:	.db	"  First_Cluster=",0mesg_size:	.db	"  Size=",0mesg_welcome:	.db	13,10,13,10,13,10	.db	"\\[\r\nVersion 0.1.3 (no SIMM)\r\n\\]",13,10	.db	"MP3 Player, Version 0.1.3, December 17, 2001",13,10	.db	"Copyright (C) 2000, PJRC.COM, LLC",10,13,10,13	.db	"Type 'QUIT' to return to the monitor",13,10,13,10,0mesg_begin:	.db	13,10,"\\[MP3 Player, Begin Play\r\n\\]",13,10,0mesg_xilinx_cfg:	.db	"Configuring Xilinx XCS10XL FPGA Chip: ",0mesg_ok:	.db	"Ok",13,10,0mesg_error:	.db	"Error!",13,10,0mesg_reset_ide:	.db	"Reseting IDE Devices",13,10,0mesg_sta013_cfg:	.db	"Configuring STA013 MP3 Decoder Chip: ",0mesg_ide_init:	.db	"Waiting for Hard Drive to be ready",13,10,0msg_found_ide:        .db     "Found IDE ",0msg_master:        .db     "Master",0msg_slave:        .db     "Slave",0msg_cylinders:	.db	", Cylinders=",0msg_heads:	.db	", Heads=",0msg_sectors:	.db	", Sectors=",0mesg_sector_buffer:	.db	13,10,"Current Sector Buffer Contents:",13,10,0mesg_play:	.db	"Play",13,10,0mesg_pause:	.db	"Pause",13,10,0mesg_next:	.db	"Next File",13,10,0mesg_prev:	.db	"Previous File",13,10,0mesg_rand:	.db	"Random O",0mesg_vol_up:	.db	"Vol Up",13,10,0mesg_vol_down:	.db	"Vol Down",13,10,0str_quit:	.db	4, "QUIT"str_play:	.db	4, "PLAY"str_next:	.db	4, "NEXT"str_previous:	.db	8, "PREVIOUS"

⌨️ 快捷键说明

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