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

📄 final_target.a51

📁 8051控制CDROM驱动
💻 A51
📖 第 1 页 / 共 2 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; onhold version 0 (A Simple 8051 based ATAPI CDROM audio controller); Copyright (C) 2000 Jason Nunn <jsno@downunder.net.au>; August 2000;; This software comes under the GNU public license agreement. See the COPYING; file in this distribution.;; If you use this code (or parts) of it, then please credit me.;; This program is free software; you can redistribute it and/or modify; it under the terms of the GNU General Public License as published by; the Free Software Foundation; either version 2 of the License, or; (at your option) any later version.;; This program is distributed in the hope that it will be useful,; but WITHOUT ANY WARRANTY; without even the implied warranty of; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the; GNU General Public License for more details.;; Snail: 32 Rothdale Rd;        Moil NT 0810;        Australia;;   WWW: jsno.downunder.net.au;; If you use this code (or parts) of it, then please credit me.;; coded to parse by LA51 assembler (ASM51); current target: DARMICON development board (SAB80C537 @ 12Mhz);                 (by Felino MOLINA & Howard PULLEN- www.ntu.edu.au);; ====================================================================;; designed for one device only (set to master);; design references:;; - ATA/ATAPI-5 (T13/1321D R3) (www.t10.org); - ATA packet interface for CDROM's (SFF-8020i) (fission.dt.wdc.com);; other references used:;; - linux 2.2.x source code (/usr/src/linux/drivers/ide*);   (had to be referred to seens that the SFF-8020i spec is so shitty);; - ATAPI references & Black magic in ATA/ATAPI;   by Constantine Sapuntzakis <csapuntz@stanford.edu>;   http://www.stanford.edu/~csapuntz/ide.html;   http://www.stanford.edu/~csapuntz/blackmagic.html;; - 8052 Basic project page (IDE logger section);   by Sergey Zorin <zorinsn@rs-pribor.ru>;   http://www.nomad.ee/micros/8052bas.html;   (nb/ very very helpful);; - General ATAPI info (including some source code);   Hale Landis's ATAPI pages http://www.ata-atapi.com;   (a good introduction to it all, as i knew nothing when i first started;   this project);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CODE_BASE = 0000hSTACK_START = 3fh;ctrl bus;;  7   6   5   4   3   2   1   0;+DA2+DA1+DA0+CS1+CS0+---+---+---+;| X | X | X | X | X |   |   |   |;+---+---+---+---+---+---+---+---+;ATA_ADDR        data  p2;ctrlATA_nDIOR       bit   p0.0 ;read strobeATA_nDIOW       bit   p0.1 ;write strobeATA_nRESET      bit   p0.2ATA_INTRQ       bit   p0.3 ;irq;data busATA_DATA_LS     data  p1ATA_DATA_MS     data  p3;LED flags;F_ERROR         bit   p0.4F_PLAYING       bit   p0.5; variable data;play_blink      bit   0hpacket_size     data  08hstart_track     data  09htmp0            data  0ahtmp1            data  0bhtmp2            data  0chtmp3            data  0dhstart_M         data  0ehstart_S         data  0fhstart_F         data  10hend_M           data  11hend_S           data  12hend_F           data  13haudio_status    data  14hpacket_tab      idata 70hpacket_cmd      data  70hpacket_1        data  71hpacket_2        data  72hpacket_3        data  73hpacket_4        data  74hpacket_5        data  75hpacket_6        data  76hpacket_7        data  77hpacket_8        data  78hpacket_9        data  79hpacket_10       data  7ahpacket_11       data  7bhpacket_12       data  7chpacket_13       data  7dhpacket_14       data  7ehpacket_15       data  7fhorg CODE_BASE  ajmp  start  db 'Copyright (C) 2000 Jason Nunn <jsno@downunder.net.au>.';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; atomic routines;; Nb/ code assumes 1us clock cycle (12Mhz xtal clock);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_100000us:  mov   r7,#0c8hdelay_100000us_l0:  mov   r6,#0f8hdelay_100000us_l1:  djnz  r6,delay_100000us_l1  nop  djnz  r7,delay_100000us_l0  ret;r5 = secondsdelay:  acall delay_100000us  acall delay_100000us  acall delay_100000us  acall delay_100000us  acall delay_100000us  acall delay_100000us  acall delay_100000us  acall delay_100000us  acall delay_100000us  acall delay_100000us  djnz  r5,delay  retread_cycle:  mov   ATA_DATA_LS,#0ffh  mov   ATA_DATA_MS,#0ffh  clr   ATA_nDIOR  mov   a,ATA_DATA_LS  mov   b,ATA_DATA_MS  setb  ATA_nDIOR  retread_cycle_ls:  mov   ATA_DATA_LS,#0ffh  clr   ATA_nDIOR  mov   a,ATA_DATA_LS  setb  ATA_nDIOR  retwrite_cycle:  mov   ATA_DATA_LS,a  mov   ATA_DATA_MS,b  clr   ATA_nDIOW  nop  setb  ATA_nDIOW  retwrite_cycle_ls:  mov   ATA_DATA_LS,a  clr   ATA_nDIOW  nop  setb  ATA_nDIOW  retwait_irq:  setb  ATA_INTRQ  jnb   ATA_INTRQ,wait_irq  ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cylinder register;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;get_cyl_high_register:  mov   ATA_ADDR,#10110000b  acall read_cycle_ls  retget_cyl_low_register:  mov   ATA_ADDR,#10010000b  acall read_cycle_ls  retset_cyl_high_register:  mov   ATA_ADDR,#10110000b  acall write_cycle_ls  retset_cyl_low_register:  mov   ATA_ADDR,#10010000b  acall write_cycle_ls  ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; a = cmd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;set_cmd_register:  mov   ATA_ADDR,#11110000b  acall write_cycle_ls  ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; data register;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ret: a = ls  b = msget_data:  mov   ATA_ADDR,#00010000b  acall read_cycle  ret; a = ls  b = msset_data:  mov   ATA_ADDR,#00010000b  acall write_cycle  ret; a = lsset_data_ls:  mov   ATA_ADDR,#00010000b  acall write_cycle_ls  ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; device/head register;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;get_devhead_register:  mov   ATA_ADDR,#11010000b  acall read_cycle_ls  retset_devhead_register:  mov   ATA_ADDR,#11010000b  acall write_cycle_ls  ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; error register;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ERROR_REG_AMNF  bit acc.0ERROR_REG_TK0NF bit acc.1ERROR_REG_ABRT  bit acc.2ERROR_REG_MCR   bit acc.3ERROR_REG_IDNF  bit acc.4ERROR_REG_MC    bit acc.5ERROR_REG_UNC   bit acc.6ERROR_REG_RES   bit acc.7get_error_register:  mov   ATA_ADDR,#00110000b  acall read_cycle_ls  ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; sector register's;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;get_sector_c_register:  mov   ATA_ADDR,#01010000b  acall read_cycle_ls  retget_sector_n_register:  mov   ATA_ADDR,#01110000b  acall read_cycle_ls  ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; status register;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;STATUS_REG_ERR  bit acc.0STATUS_REG_IDX  bit acc.1STATUS_REG_CORR bit acc.2STATUS_REG_DRQ  bit acc.3STATUS_REG_DSC  bit acc.4STATUS_REG_DF   bit acc.5STATUS_REG_DRDY bit acc.6STATUS_REG_BSY  bit acc.7get_status_register:  mov   ATA_ADDR,#11110000b  acall read_cycle_ls  retbsy_wait:  nop  nop  nop  nop  acall get_status_register  jb    STATUS_REG_BSY,bsy_wait  retbsy_drdy_wait:  nop  nop  nop  nop  acall delay_100000us  acall get_status_register  jb    STATUS_REG_BSY,bsy_drdy_wait  jnb   STATUS_REG_DRDY,bsy_drdy_wait  retdrq_wait:  nop  nop  nop  nop  acall get_status_register  jb    STATUS_REG_BSY,drq_wait  jnb   STATUS_REG_DRQ,drq_wait  retndrq_wait:  nop  nop  nop  nop  acall get_status_register

⌨️ 快捷键说明

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