00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _DF_H_
00014 #define _DF_H_
00015
00016
00017
00018 #include "config.h"
00019
00020
00021
00022
00023 #ifndef DF_SECTOR_SIZE
00024 #define DF_SECTOR_SIZE 512 //default sector size is 512 bytes
00025 #endif
00026
00027
00028 typedef struct
00029 {
00030 Uint16 nb_cylinder;
00031 Byte nb_head;
00032 Byte nb_sector;
00033 Byte nb_hidden_sector;
00034 Byte nb_sector_per_cluster;
00035 } s_format;
00036
00037 #define MEM_BSY 0
00038 #define MEM_OK 1
00039 #define MEM_KO 2
00040
00041
00042 #define DF_MSK_DENSITY ((Byte)0x3C)
00043 #define DF_MSK_BIT_BUSY ((Byte)0x80)
00044 #define DF_MEM_BUSY ((Byte)0x00)
00045
00046 #define DF_RD_STATUS ((Byte)0xD7)
00047 #define DF_PG_ERASE ((Byte)0x81)
00048 #define DF_BK_ERASE ((Byte)0x50)
00049
00050 #define DF_WR_BUF_1 ((Byte)0x84)
00051 #define DF_WR_BUF_2 ((Byte)0x87)
00052 #define DF_B1_MAIN ((Byte)0x83)
00053 #define DF_B2_MAIN ((Byte)0x86)
00054
00055 #define DF_RD_MAIN ((Byte)0xD2)
00056 #define DF_TF_BUF_1 ((Byte)0x53)
00057 #define DF_TF_BUF_2 ((Byte)0x55)
00058 #define DF_RD_BUF_1 ((Byte)0xD4)
00059 #define DF_RD_BUF_2 ((Byte)0xD6)
00060
00061
00062
00063 #define DF_SIZE_4MB ((Uint32)(8192 - 1))
00064 #define DF_SIZE_8MB ((Uint32)(16384 - 1))
00065 #define DF_SIZE_16MB ((Uint32)(32768 - 1))
00066 #define DF_SIZE_32MB ((Uint32)(65536 - 1))
00067 #define DF_SIZE_64MB ((Uint32)(131072 - 1))
00068
00069 #define DF_4MB ((Byte)0)
00070 #define DF_8MB ((Byte)1)
00071 #define DF_16MB ((Byte)2)
00072 #define DF_32MB ((Byte)3)
00073 #define DF_64MB ((Byte)4)
00074
00075
00076
00077
00078
00079 #define df_set_busy(i) (df_mem_busy |= (1<<i))
00080 #define df_release_busy(i) (df_mem_busy &= ~(1<<i))
00081 #define is_df_busy(i) (((df_mem_busy&(1<<i)) != 0) ? TRUE : FALSE)
00082
00083
00084 #define MEM_DF0 0x00
00085 #define MEM_DF1 0x01
00086 #define MEM_DF2 0x02
00087 #define MEM_DF3 0x03
00088
00089
00090
00091
00092 #ifdef DF_4_MB
00093 #define DF_SHFT_DFIDX (22)
00094
00095 #define DF_DENSITY ((Byte)0x34)
00096 #define DF_PG_BUF_1 ((Byte)0x82)
00097 #define DF_PG_BUF_2 ((Byte)0x85)
00098 #define DF_PAGE_SIZE (512)
00099 #define DF_PAGE_MASK ((Byte)0x01)
00100 #define DF_SHFT_B1 (1)
00101 #define DF_SHFT_B2 (7)
00102 #endif
00103
00104 #ifdef DF_8_MB
00105 #define DF_SHFT_DFIDX (23)
00106
00107 #define DF_DENSITY ((Byte)0x3C)
00108 #define DF_PG_BUF_1 ((Byte)0x82)
00109 #define DF_PG_BUF_2 ((Byte)0x85)
00110 #define DF_PAGE_SIZE (1024)
00111 #define DF_PAGE_MASK ((Byte)0x03)
00112 #define DF_SHFT_B1 (1)
00113 #define DF_SHFT_B2 (7)
00114 #endif
00115
00116
00117
00118
00119 bit df_init (void);
00120 bit df_mem_check(void);
00121 bit df_read_open (Uint32);
00122 void df_read_close (void);
00123 bit df_write_open (Uint32);
00124 void df_write_close (void);
00125
00127 bit df_write_sector (Uint16);
00128 bit df_read_sector (Uint16);
00129
00131 bit df_read_sector_2_ram(U8 *ram);
00132 bit df_write_sector_from_ram(U8 *ram);
00133
00134
00135 s_format * df_format (void);
00136
00137
00138
00139 #define Df_disk_size() ((Uint32)(DF_DISK_SIZE))
00140 #define Df_disk_size_0() ((Byte)(Df_disk_size() >> 24))
00141 #define Df_disk_size_1() ((Byte)(Df_disk_size() >> 16))
00142 #define Df_disk_size_2() ((Byte)(Df_disk_size() >> 8))
00143 #define Df_disk_size_3() ((Byte)(Df_disk_size()))
00144
00145
00146 #define Df_block_size() ((Uint32)512)
00147 #define Df_block_size_0() ((Byte)(Df_block_size() >> 24))
00148 #define Df_block_size_1() ((Byte)(Df_block_size() >> 16))
00149 #define Df_block_size_2() ((Byte)(Df_block_size() >> 8))
00150 #define Df_block_size_3() ((Byte)(Df_block_size()))
00151
00152
00153 #endif
00154
00155