Rev 2 | Rev 75 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2 | Rev 19 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;********************************************************** |
1 | ;********************************************************** |
2 | ; ¥¯®á।á⢥ ï à ¡®â á ª®â஫«¥à®¬ £¨¡ª®£® ¤¨áª |
2 | ; Íåïîñðåäñòâåííàÿ ðàáîòà ñ êîíòðîëëåðîì ãèáêîãî äèñêà |
3 | ;********************************************************** |
3 | ;********************************************************** |
4 | ; ¢â®à ¨á室®£® ⥪áâ ã« ª®¢ « ¤¨¬¨à ¥ ¤ì¥¢¨ç. |
4 | ; Àâòîð èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷. |
5 | ; ¤ ¯â æ¨ï ¨ ¤®à ¡®âª Mario79 |
5 | ; Àäàïòàöèÿ è äîðàáîòêà Mario79 |
6 | fdd_read_and_write: |
- | |
7 | pusha |
- | |
8 | read_sector: |
- | |
9 | cmp eax,1 |
- | |
10 | jne write_sector |
- | |
11 | call save_HTS_values |
- | |
12 | call flp_readsector |
- | |
13 | call give_back_application_data |
- | |
14 | jmp fdd_read_end |
- | |
15 | write_sector: |
- | |
16 | cmp eax,2 |
- | |
17 | jne fdd_read_end |
- | |
18 | call save_HTS_values |
- | |
19 | call take_data_from_application |
- | |
20 | call flp_writesector |
- | |
21 | fdd_read_end: |
- | |
22 | popa |
- | |
23 | ret |
- | |
Line 24... | Line -... | ||
24 | - | ||
25 | save_HTS_values: |
- | |
26 | mov [FDD_Sector],bl |
- | |
27 | mov [FDD_Head],bh |
- | |
28 | shr ebx,16 |
- | |
29 | mov [FDD_Track],bl |
- | |
30 | mov [FDD_Type],bh |
- | |
31 | ret |
- | |
32 | 6 | ||
33 | give_back_application_data: ; ¯¥à¥á« âì ¯à¨«®¦¥¨î |
7 | give_back_application_data: ; ïåðåñëàòü ïðèëîæåíèþ |
34 | mov edi,[3010h] |
8 | mov edi,[3010h] |
35 | mov edi,[edi+10h] |
9 | mov edi,[edi+10h] |
36 | add edi,ecx |
10 | add edi,ecx |
37 | give_back_application_data_1: |
11 | give_back_application_data_1: |
Line 40... | Line 14... | ||
40 | mov cx,128 |
14 | mov cx,128 |
41 | cld |
15 | cld |
42 | rep movsd |
16 | rep movsd |
43 | ret |
17 | ret |
Line 44... | Line 18... | ||
44 | 18 | ||
45 | take_data_from_application: ; ¢§ïâì ¨§ ¯à¨«®¦¥¨ï |
19 | take_data_from_application: ; âçÿòü èç ïðèëîæåíèÿ |
46 | mov esi,[3010h] |
20 | mov esi,[3010h] |
47 | mov esi,[esi+10h] |
21 | mov esi,[esi+10h] |
48 | add esi,ecx |
22 | add esi,ecx |
49 | take_data_from_application_1: |
23 | take_data_from_application_1: |
Line 52... | Line 26... | ||
52 | mov cx,128 |
26 | mov cx,128 |
53 | cld |
27 | cld |
54 | rep movsd |
28 | rep movsd |
55 | ret |
29 | ret |
Line 56... | Line -... | ||
56 | - | ||
57 | flp_initialization: |
- | |
58 | ; áâ ®¢¨âì ®¢ë© ®¡à ¡®â稪 ¯à¥àë¢ ¨ï |
- | |
59 | call SetUserInterrupts |
- | |
60 | ; ª«îç¨âì ¬®â®à ¤¨áª®¢®¤ |
- | |
61 | call FDDMotorON |
- | |
62 | ; ¨æ¨ «¨§¨à®¢ âì ¯¥à¥¬¥ë¥ |
- | |
63 | ; mov [FDD_Track],0 |
- | |
64 | ; mov [FDD_Head],0 |
- | |
65 | ; mov [FDD_Sector],1 |
- | |
66 | ; ஢¥á⨠४ «¨¡à®¢ªã ¨ ¯®¨áª ã«¥¢®© ¤®à®¦ª¨ |
- | |
67 | call RecalibrateFDD |
- | |
68 | call SeekTrack |
- | |
69 | ret |
- | |
70 | - | ||
71 | flp_readsector: |
- | |
72 | call flp_initialization |
- | |
73 | ; à®ç¨â âì ᥪâ®à |
- | |
74 | call ReadSectWithRetr |
- | |
75 | ; call ReadSector |
- | |
76 | ; cmp [FDC_Status],0 |
- | |
77 | ; jne @@SectorNotFound |
- | |
78 | mov [fdc_irq_func],fdc_null |
- | |
79 | ; call FDDMotorOFF |
- | |
80 | ret |
- | |
81 | - | ||
82 | flp_writesector: |
- | |
83 | call flp_initialization |
- | |
84 | ; ¯¨á âì ᥪâ®à |
- | |
85 | call WriteSectWithRetr |
- | |
86 | ; call WriteSector |
- | |
87 | ; cmp [FDC_Status],0 |
- | |
88 | ; jne @@SectorNotFound |
- | |
89 | mov [fdc_irq_func],fdc_null |
- | |
90 | ; call FDDMotorOFF |
- | |
91 | ret |
- | |
92 | - | ||
93 | @@DiskNotFound: |
- | |
94 | ret |
- | |
95 | @@SectorNotFound: |
- | |
96 | ret |
- | |
97 | 30 | ||
98 | ; ®¤ë § ¢¥àè¥¨ï ®¯¥à 樨 á ª®â஫«¥à®¬ (FDC_Status) |
31 | ; Êîäû çàâåðøåíèÿ îïåðàöèè ñ êîíòðîëëåðîì (FDC_Status) |
99 | FDC_Normal equ 0 ;®à¬ «ì®¥ § ¢¥à襨¥ |
32 | FDC_Normal equ 0 ;íîðìàëüíîå çàâåðøåíèå |
100 | FDC_TimeOut equ 1 ;®è¨¡ª â ©¬- ãâ |
33 | FDC_TimeOut equ 1 ;îøèáêà òàéì-àóòà |
101 | FDC_DiskNotFound equ 2 ;¢ ¤¨áª®¢®¤¥ ¥â ¤¨áª |
34 | FDC_DiskNotFound equ 2 ;â äèñêîâîäå íåò äèñêà |
102 | FDC_TrackNotFound equ 3 ;¤®à®¦ª ¥ ©¤¥ |
35 | FDC_TrackNotFound equ 3 ;äîðîæêà íå íàéäåíà |
103 | FDC_SectorNotFound equ 4 ;ᥪâ®à ¥ ©¤¥ |
36 | FDC_SectorNotFound equ 4 ;ñåêòîð íå íàéäåí |
104 | 37 | ||
105 | ; ªá¨¬ «ìë¥ § ç¥¨ï ª®®à¤¨ â ᥪâ®à (§ ¤ ë¥ |
38 | ; Ìàêñèìàëüíûå çíà÷åíèÿ êîîðäèíàò ñåêòîðà (çàäàííûå |
106 | ; § 票ï ᮮ⢥âáâ¢ãîâ ¯ à ¬¥âà ¬ áâ ¤ à⮣® |
39 | ; çíà÷åíèÿ ñîîòâåòñòâóþò ïàðàìåòðàì ñòàíäàðòíîãî |
107 | ; âà¥å¤î©¬®¢®£® £¨¡ª®£® ¤¨áª ®¡ê¥¬®¬ 1,44 ¡) |
40 | ; òðåõäþéìîâîãî ãèáêîãî äèñêà îáúåìîì 1,44 Ìá) |
108 | MAX_Track equ 79 |
41 | MAX_Track equ 79 |
109 | MAX_Head equ 1 |
42 | MAX_Head equ 1 |
Line 110... | Line 43... | ||
110 | MAX_Sector equ 18 |
43 | MAX_Sector equ 18 |
111 | 44 | ||
112 | ; ç¥â稪 ⨪®¢ â ©¬¥à |
45 | ; Ñ÷åò÷èê òèêîâ òàéìåðà |
113 | TickCounter dd ? |
46 | TickCounter dd ? |
114 | ; ®¤ § ¢¥àè¥¨ï ®¯¥à 樨 á ª®â஫«¥à®¬ |
47 | ; Êîä çàâåðøåíèÿ îïåðàöèè ñ êîíòðîëëåðîì ÍÃÌÄ |
115 | FDC_Status DB ? |
48 | FDC_Status DB ? |
116 | ; « £ ¯à¥àë¢ ¨ï ®â |
49 | ; Ôëàã ïðåðûâàíèÿ îò ÍÃÌÄ |
117 | FDD_IntFlag DB ? |
50 | FDD_IntFlag DB ? |
118 | ; ®¬¥â ç « ¯®á«¥¤¥© ®¯¥à 樨 á |
51 | ; Ìîìåíò íà÷àëà ïîñëåäíåé îïåðàöèè ñ ÍÃÌÄ |
119 | FDD_Time DD ? |
52 | FDD_Time DD ? |
120 | ; ®¬¥à ¤¨áª®¢®¤ |
53 | ; Íîìåð äèñêîâîäà |
121 | FDD_Type db 0 |
54 | FDD_Type db 0 |
122 | ; ®®à¤¨ âë ᥪâ®à |
55 | ; Êîîðäèíàòû ñåêòîðà |
123 | FDD_Track DB ? |
56 | FDD_Track DB ? |
Line 124... | Line 57... | ||
124 | FDD_Head DB ? |
57 | FDD_Head DB ? |
125 | FDD_Sector DB ? |
58 | FDD_Sector DB ? |
126 | 59 | ||
127 | ; «®ª १ã«ìâ â ®¯¥à 樨 |
60 | ; Áëîê ðåçóëüòàòà îïåðàöèè |
128 | FDC_ST0 DB ? |
61 | FDC_ST0 DB ? |
129 | FDC_ST1 DB ? |
62 | FDC_ST1 DB ? |
130 | FDC_ST2 DB ? |
63 | FDC_ST2 DB ? |
131 | FDC_C DB ? |
64 | FDC_C DB ? |
132 | FDC_H DB ? |
65 | FDC_H DB ? |
133 | FDC_R DB ? |
66 | FDC_R DB ? |
134 | FDC_N DB ? |
67 | FDC_N DB ? |
135 | ; ç¥â稪 ¯®¢â®à¥¨ï ®¯¥à 樨 ç⥨ï |
68 | ; Ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíèÿ |
136 | ReadRepCounter DB ? |
69 | ReadRepCounter DB ? |
137 | ; ç¥â稪 ¯®¢â®à¥¨ï ®¯¥à 樨 ४ «¨¡à®¢ª¨ |
70 | ; Ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè |
138 | RecalRepCounter DB ? |
71 | RecalRepCounter DB ? |
139 | ; ¡« áâì ¯ ¬ï⨠¤«ï åà ¥¨ï ¯à®ç¨â ®£® ᥪâ®à |
72 | ; Îáëàñòü ïàìÿòè äëÿ õðàíåíèÿ ïðî÷èòàííîãî ñåêòîðà |
Line 140... | Line 73... | ||
140 | ;FDD_DataBuffer: times 512 db 0 ;DB 512 DUP (?) |
73 | ;FDD_DataBuffer: times 512 db 0 ;DB 512 DUP (?) |
141 | fdd_motor_status db 0 |
74 | fdd_motor_status db 0 |
142 | timer_fdd_motor dd 0 |
75 | timer_fdd_motor dd 0 |
143 | 76 | ||
144 | ;************************************* |
77 | ;************************************* |
145 | ;* * |
78 | ;* ÈÍÈÖÈÀËÈÇÀÖÈß ÐÅÆÈÌÀ ÏÄÏ ÄËß ÍÃÌÄ * |
146 | ;************************************* |
79 | ;************************************* |
Line 170... | Line 103... | ||
170 | out 0xa,al |
103 | out 0xa,al |
171 | popad |
104 | popad |
172 | ret |
105 | ret |
Line 173... | Line 106... | ||
173 | 106 | ||
174 | ;*********************************** |
107 | ;*********************************** |
175 | ;* FDC * |
108 | ;* ÇÀÏÈÑÀÒÜ ÁÀÉÒ Â ÏÎÐÒ ÄÀÍÍÛÕ FDC * |
176 | ;* à ¬¥âàë: * |
109 | ;* Ïàðàìåòðû: * |
177 | ;* AL - ¢ë¢®¤¨¬ë© ¡ ©â. * |
110 | ;* AL - âûâîäèìûé áàéò. * |
178 | ;*********************************** |
111 | ;*********************************** |
179 | FDCDataOutput: |
112 | FDCDataOutput: |
180 | ; pusha |
113 | ; pusha |
181 | push ax cx dx |
114 | push ax cx dx |
182 | mov AH,AL ;§ ¯®¬¨âì ¡ ©â ¢ AH |
115 | mov AH,AL ;çàïîìíèòü áàéò â AH |
183 | ; ¡à®á¨âì ¯¥à¥¬¥ãî á®áâ®ï¨ï ª®â஫«¥à |
116 | ; Ñáðîñèòü ïåðåìåííóþ ñîñòîÿíèÿ êîíòðîëëåðà |
184 | mov [FDC_Status],FDC_Normal |
117 | mov [FDC_Status],FDC_Normal |
185 | ; ஢¥à¨âì £®â®¢®áâì ª®â஫«¥à ª ¯à¨¥¬ã ¤ ëå |
118 | ; Ïðîâåðèòü ãîòîâíîñòü êîíòðîëëåðà ê ïðèåìó äàííûõ |
186 | mov DX,3F4h ;(¯®àâ á®áâ®ï¨ï FDC) |
119 | mov DX,3F4h ;(ïîðò ñîñòîÿíèÿ FDC) |
187 | xor CX,CX ;ãáâ ®¢¨âì áç¥â稪 â ©¬- ãâ |
120 | xor CX,CX ;óñòàíîâèòü ñ÷åò÷èê òàéì-àóòà |
188 | @@TestRS: |
121 | @@TestRS: |
189 | in AL,DX ;¯à®ç¨â âì ॣ¨áâà RS |
122 | in AL,DX ;ïðî÷èòàòü ðåãèñòð RS |
190 | and AL,0C0h ;¢ë¤¥«¨âì à §àï¤ë 6 ¨ 7 |
123 | and AL,0C0h ;âûäåëèòü ðàçðÿäû 6 è 7 |
191 | cmp AL,80h ;¯à®¢¥à¨âì à §àï¤ë 6 ¨ 7 |
124 | cmp AL,80h ;ïðîâåðèòü ðàçðÿäû 6 è 7 |
192 | je @@OutByteToFDC |
125 | je @@OutByteToFDC |
193 | loop @@TestRS |
126 | loop @@TestRS |
194 | ; 訡ª â ©¬- ãâ |
127 | ; Îøèáêà òàéì-àóòà |
195 | mov [FDC_Status],FDC_TimeOut |
128 | mov [FDC_Status],FDC_TimeOut |
196 | jmp @@End_5 |
129 | jmp @@End_5 |
197 | ; 뢥á⨠¡ ©â ¢ ¯®àâ ¤ ëå |
130 | ; Âûâåñòè áàéò â ïîðò äàííûõ |
198 | @@OutByteToFDC: |
131 | @@OutByteToFDC: |
199 | inc DX |
132 | inc DX |
200 | mov AL,AH |
133 | mov AL,AH |
201 | out DX,AL |
134 | out DX,AL |
202 | @@End_5: |
135 | @@End_5: |
203 | ; popa |
136 | ; popa |
204 | pop dx cx ax |
137 | pop dx cx ax |
Line 205... | Line 138... | ||
205 | ret |
138 | ret |
206 | 139 | ||
207 | ;****************************************** |
140 | ;****************************************** |
208 | ;* FDC * |
141 | ;* ÏÐÎ×ÈÒÀÒÜ ÁÀÉÒ ÈÇ ÏÎÐÒÀ ÄÀÍÍÛÕ FDC * |
209 | ;* à®æ¥¤ãà ¥ ¨¬¥¥â ¢å®¤ëå ¯ à ¬¥â஢. * |
142 | ;* Ïðîöåäóðà íå èìååò âõîäíûõ ïàðàìåòðîâ. * |
210 | ;* ëå®¤ë¥ ¤ ë¥: * |
143 | ;* Âûõîäíûå äàííûå: * |
211 | ;* AL - áç¨â ë© ¡ ©â. * |
144 | ;* AL - ñ÷èòàííûé áàéò. * |
212 | ;****************************************** |
145 | ;****************************************** |
213 | FDCDataInput: |
146 | FDCDataInput: |
214 | push ECX |
147 | push ECX |
215 | push DX |
148 | push DX |
216 | ; ¡à®á¨âì ¯¥à¥¬¥ãî á®áâ®ï¨ï ª®â஫«¥à |
149 | ; Ñáðîñèòü ïåðåìåííóþ ñîñòîÿíèÿ êîíòðîëëåðà |
217 | mov [FDC_Status],FDC_Normal |
150 | mov [FDC_Status],FDC_Normal |
218 | ; ஢¥à¨âì £®â®¢®áâì ª®â஫«¥à ª ¯¥à¥¤ ç¥ ¤ ëå |
151 | ; Ïðîâåðèòü ãîòîâíîñòü êîíòðîëëåðà ê ïåðåäà÷å äàííûõ |
219 | mov DX,3F4h ;(¯®àâ á®áâ®ï¨ï FDC) |
152 | mov DX,3F4h ;(ïîðò ñîñòîÿíèÿ FDC) |
220 | xor CX,CX ;ãáâ ®¢¨âì áç¥â稪 â ©¬- ãâ |
153 | xor CX,CX ;óñòàíîâèòü ñ÷åò÷èê òàéì-àóòà |
221 | @@TestRS_1: |
154 | @@TestRS_1: |
222 | in AL,DX ;¯à®ç¨â âì ॣ¨áâà RS |
155 | in AL,DX ;ïðî÷èòàòü ðåãèñòð RS |
223 | and AL,0C0h ;¢ë¤«¨âì à §àï¤ë 6 ¨ 7 |
156 | and AL,0C0h ;âûäëèòü ðàçðÿäû 6 è 7 |
224 | cmp AL,0C0h ;¯à®¢¥à¨âì à §àï¤ë 6 ¨ 7 |
157 | cmp AL,0C0h ;ïðîâåðèòü ðàçðÿäû 6 è 7 |
225 | je @@GetByteFromFDC |
158 | je @@GetByteFromFDC |
226 | loop @@TestRS_1 |
159 | loop @@TestRS_1 |
227 | ; 訡ª â ©¬- ãâ |
160 | ; Îøèáêà òàéì-àóòà |
228 | mov [FDC_Status],FDC_TimeOut |
161 | mov [FDC_Status],FDC_TimeOut |
229 | jmp @@End_6 |
162 | jmp @@End_6 |
230 | ; ¢¥á⨠¡ ©â ¨§ ¯®àâ ¤ ëå |
163 | ; Ââåñòè áàéò èç ïîðòà äàííûõ |
231 | @@GetByteFromFDC: |
164 | @@GetByteFromFDC: |
232 | inc DX |
165 | inc DX |
233 | in AL,DX |
166 | in AL,DX |
234 | @@End_6: pop DX |
167 | @@End_6: pop DX |
Line 235... | Line 168... | ||
235 | pop ECX |
168 | pop ECX |
236 | ret |
169 | ret |
237 | 170 | ||
238 | ;********************************************* |
171 | ;********************************************* |
239 | ;* * |
- | |
240 | ;********************************************* |
- | |
241 | FDCInterrupt: |
- | |
242 | ; §à¥è¨âì ¯à¥àë¢ ¨ï |
172 | ;* ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÊÎÍÒÐÎËËÅÐÀ ÍÃÌÄ * |
243 | ; sti |
173 | ;********************************************* |
244 | ; push AX |
- | |
245 | ; áâ ®¢¨âì ä« £ ¯à¥àë¢ ¨ï |
- | |
246 | mov [FDD_IntFlag],1 |
- | |
247 | ; ®á« âì ª®¬ ¤ã EOI ª®â஫«¥àã ¯à¥àë¢ ¨© |
- | |
248 | ; mov AL,20h |
174 | FDCInterrupt: |
Line 249... | Line 175... | ||
249 | ; out 20h,AL |
175 | ; Óñòàíîâèòü ôëàã ïðåðûâàíèÿ |
250 | ; pop AX |
176 | mov [FDD_IntFlag],1 |
251 | ret |
177 | ret |
252 | 178 | ||
253 | 179 | ||
254 | ;****************************************** |
180 | ;****************************************** |
255 | ;* * |
181 | ;* ÓÑÒÀÍÎÂÈÒÜ ÍÎÂÛÉ ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈÉ * |
Line 256... | Line 182... | ||
256 | ;* * |
182 | ;* ÍÃÌÄ * |
257 | ;****************************************** |
183 | ;****************************************** |
258 | SetUserInterrupts: |
184 | SetUserInterrupts: |
259 | mov [fdc_irq_func],FDCInterrupt |
185 | mov [fdc_irq_func],FDCInterrupt |
260 | ret |
186 | ret |
261 | 187 | ||
262 | ;******************************************* |
188 | ;******************************************* |
263 | ;* * |
189 | ;* ÎÆÈÄÀÍÈÅ ÏÐÅÐÛÂÀÍÈß ÎÒ ÊÎÍÒÐÎËËÅÐÀ ÍÃÌÄ * |
264 | ;******************************************* |
190 | ;******************************************* |
265 | WaitFDCInterrupt: |
191 | WaitFDCInterrupt: |
266 | pusha |
192 | pusha |
267 | ; ¡à®á¨âì ¡ ©â á®áâ®ï¨ï ®¯¥à 樨 |
193 | ; Ñáðîñèòü áàéò ñîñòîÿíèÿ îïåðàöèè |
268 | mov [FDC_Status],FDC_Normal |
194 | mov [FDC_Status],FDC_Normal |
269 | ; ¡à®á¨âì ä« £ ¯à¥àë¢ ¨ï |
195 | ; Ñáðîñèòü ôëàã ïðåðûâàíèÿ |
270 | mov [FDD_IntFlag],0 |
196 | mov [FDD_IntFlag],0 |
271 | ; ¡ã«¨âì áç¥â稪 ⨪®¢ |
197 | ; Îáíóëèòü ñ÷åò÷èê òèêîâ |
- | 198 | mov eax,[timer_ticks] |
|
272 | mov eax,[timer_ticks] |
199 | mov [TickCounter],eax |
273 | mov [TickCounter],eax |
200 | ; Îæèäàòü óñòàíîâêè ôëàãà ïðåðûâàíèÿ ÍÃÌÄ |
274 | ; ¦¨¤ âì ãáâ ®¢ª¨ ä« £ ¯à¥àë¢ ¨ï |
201 | @@TestRS_2: |
275 | @@TestRS_2: |
202 | cmp [FDD_IntFlag],0 |
276 | cmp [FDD_IntFlag],0 |
203 | jnz @@End_7 ;ïðåðûâàíèå ïðîèçîøëî |
277 | jnz @@End_7 ;¯à¥àë¢ ¨¥ ¯à®¨§®è«® |
204 | call change_task |
278 | mov eax,[timer_ticks] |
205 | mov eax,[timer_ticks] |
279 | sub eax,[TickCounter] |
206 | sub eax,[TickCounter] |
280 | cmp eax,50 ;25 ;5 ;®¦¨¤ âì 5 ⨪®¢ |
207 | cmp eax,50 ;25 ;5 ;îæèäàòü 5 òèêîâ |
281 | jb @@TestRS_2 |
208 | jb @@TestRS_2 |
Line 282... | Line 209... | ||
282 | ; jl @@TestRS_2 |
209 | ; jl @@TestRS_2 |
283 | ; 訡ª â ©¬- ãâ |
210 | ; Îøèáêà òàéì-àóòà |
284 | mov [FDC_Status],FDC_TimeOut |
211 | mov [FDC_Status],FDC_TimeOut |
285 | ; mov [flp_status],0 |
212 | ; mov [flp_status],0 |
286 | @@End_7: popa |
213 | @@End_7: popa |
287 | ret |
214 | ret |
288 | 215 | ||
289 | ;********************************* |
216 | ;********************************* |
290 | ;* "A:" * |
217 | ;* ÂÊËÞ×ÈÒÜ ÌÎÒÎÐ ÄÈÑÊÎÂÎÄÀ "A:" * |
291 | ;********************************* |
218 | ;********************************* |
292 | FDDMotorON: |
219 | FDDMotorON: |
293 | pusha |
220 | pusha |
294 | ; cmp [fdd_motor_status],1 |
221 | ; cmp [fdd_motor_status],1 |
295 | ; je fdd_motor_on |
222 | ; je fdd_motor_on |
296 | mov al,[flp_number] |
223 | mov al,[flp_number] |
297 | cmp [fdd_motor_status],al |
224 | cmp [fdd_motor_status],al |
298 | je fdd_motor_on |
225 | je fdd_motor_on |
299 | ; ந§¢¥á⨠á¡à®á ª®â஫«¥à |
226 | ; Ïðîèçâåñòè ñáðîñ êîíòðîëëåðà ÍÃÌÄ |
300 | mov DX,3F2h ;¯®àâ ã¯à ¢«¥¨ï ¤¢¨£ ⥫ﬨ |
227 | mov DX,3F2h ;ïîðò óïðàâëåíèÿ äâèãàòåëÿìè |
301 | mov AL,0 |
228 | mov AL,0 |
302 | out DX,AL |
229 | out DX,AL |
303 | ; ë¡à âì ¨ ¢ª«îç¨âì ¬®â®à ¤¨áª®¢®¤ |
230 | ; Âûáðàòü è âêëþ÷èòü ìîòîð äèñêîâîäà |
304 | cmp [flp_number],1 |
231 | cmp [flp_number],1 |
305 | jne FDDMotorON_B |
232 | jne FDDMotorON_B |
306 | ; call FDDMotorOFF_B |
233 | ; call FDDMotorOFF_B |
307 | mov AL,1Ch ; Floppy A |
234 | mov AL,1Ch ; Floppy A |
308 | jmp FDDMotorON_1 |
235 | jmp FDDMotorON_1 |
309 | FDDMotorON_B: |
236 | FDDMotorON_B: |
310 | ; call FDDMotorOFF_A |
237 | ; call FDDMotorOFF_A |
311 | mov AL,2Dh ; Floppy B |
238 | mov AL,2Dh ; Floppy B |
- | 239 | FDDMotorON_1: |
|
312 | FDDMotorON_1: |
240 | out DX,AL |
313 | out DX,AL |
241 | ; Îáíóëèòü ñ÷åò÷èê òèêîâ |
314 | ; ¡ã«¨âì áç¥â稪 ⨪®¢ |
242 | mov eax,[timer_ticks] |
315 | mov eax,[timer_ticks] |
243 | mov [TickCounter],eax |
316 | mov [TickCounter],eax |
244 | ; Îæèäàòü 0,5 ñ |
Line 330... | Line 258... | ||
330 | call save_timer_fdd_motor |
258 | call save_timer_fdd_motor |
331 | popa |
259 | popa |
332 | ret |
260 | ret |
Line 333... | Line 261... | ||
333 | 261 | ||
334 | ;***************************************** |
262 | ;***************************************** |
335 | ;* * |
263 | ;* ÑÎÕÐÀÍÅÍÈÅ ÓÊÀÇÀÒÅËß ÂÐÅÌÅÍÈ * |
336 | ;***************************************** |
264 | ;***************************************** |
337 | save_timer_fdd_motor: |
265 | save_timer_fdd_motor: |
338 | mov eax,[timer_ticks] |
266 | mov eax,[timer_ticks] |
339 | mov [timer_fdd_motor],eax |
267 | mov [timer_fdd_motor],eax |
Line 340... | Line 268... | ||
340 | ret |
268 | ret |
341 | 269 | ||
342 | ;***************************************** |
270 | ;***************************************** |
343 | ;* * |
271 | ;* ÏÐÎÂÅÐÊÀ ÇÀÄÅÐÆÊÈ ÂÛÊËÞ×ÅÍÈß ÌÎÒÎÐÀ * |
344 | ;***************************************** |
272 | ;***************************************** |
345 | check_fdd_motor_status: |
273 | check_fdd_motor_status: |
346 | cmp [fdd_motor_status],0 |
274 | cmp [fdd_motor_status],0 |
347 | je end_check_fdd_motor_status |
275 | je end_check_fdd_motor_status_1 |
348 | mov eax,[timer_ticks] |
276 | mov eax,[timer_ticks] |
349 | sub eax,[timer_fdd_motor] |
277 | sub eax,[timer_fdd_motor] |
350 | cmp eax,500 |
278 | cmp eax,500 |
351 | jb end_check_fdd_motor_status |
279 | jb end_check_fdd_motor_status |
- | 280 | call FDDMotorOFF |
|
- | 281 | mov [fdd_motor_status],0 |
|
352 | call FDDMotorOFF |
282 | end_check_fdd_motor_status_1: |
353 | mov [fdd_motor_status],0 |
283 | mov [flp_status],0 |
Line 354... | Line 284... | ||
354 | end_check_fdd_motor_status: |
284 | end_check_fdd_motor_status: |
355 | ret |
285 | ret |
356 | 286 | ||
357 | ;********************************** |
287 | ;********************************** |
358 | ;* * |
288 | ;* ÂÛÊËÞ×ÈÒÜ ÌÎÒÎÐ ÄÈÑÊÎÂÎÄÀ * |
359 | ;********************************** |
289 | ;********************************** |
360 | FDDMotorOFF: |
290 | FDDMotorOFF: |
Line 367... | Line 297... | ||
367 | FDDMotorOFF_1: |
297 | FDDMotorOFF_1: |
368 | call FDDMotorOFF_B |
298 | call FDDMotorOFF_B |
369 | FDDMotorOFF_2: |
299 | FDDMotorOFF_2: |
370 | pop DX |
300 | pop DX |
371 | pop AX |
301 | pop AX |
372 | ; á¡à®á ä« £®¢ ª¥è¨à®¢ ¨ï ¢ á¢ï§¨ á ãáâ ॢ ¨¥¬ ¨ä®à¬ 樨 |
302 | ; ñáðîñ ôëàãîâ êåøèðîâàíèÿ â ñâÿçè ñ óñòàðåâàíèåì èíôîðìàöèè |
373 | mov [root_read],0 |
303 | mov [root_read],0 |
374 | mov [flp_fat],0 |
304 | mov [flp_fat],0 |
375 | ret |
305 | ret |
Line 376... | Line 306... | ||
376 | 306 | ||
377 | FDDMotorOFF_A: |
307 | FDDMotorOFF_A: |
378 | mov DX,3F2h ;¯®àâ ã¯à ¢«¥¨ï ¤¢¨£ ⥫ﬨ |
308 | mov DX,3F2h ;ïîðò óïðàâëåíèÿ äâèãàòåëÿìè |
379 | mov AL,0Ch ; Floppy A |
309 | mov AL,0Ch ; Floppy A |
380 | out DX,AL |
310 | out DX,AL |
Line 381... | Line 311... | ||
381 | ret |
311 | ret |
382 | 312 | ||
383 | FDDMotorOFF_B: |
313 | FDDMotorOFF_B: |
384 | mov DX,3F2h ;¯®àâ ã¯à ¢«¥¨ï ¤¢¨£ ⥫ﬨ |
314 | mov DX,3F2h ;ïîðò óïðàâëåíèÿ äâèãàòåëÿìè |
385 | mov AL,5h ; Floppy B |
315 | mov AL,5h ; Floppy B |
Line 386... | Line 316... | ||
386 | out DX,AL |
316 | out DX,AL |
387 | ret |
317 | ret |
388 | 318 | ||
389 | ;******************************* |
319 | ;******************************* |
390 | ;* "A:" * |
320 | ;* ÐÅÊÀËÈÁÐÎÂÊÀ ÄÈÑÊÎÂÎÄÀ "A:" * |
391 | ;******************************* |
321 | ;******************************* |
392 | RecalibrateFDD: |
322 | RecalibrateFDD: |
393 | pusha |
323 | pusha |
394 | call save_timer_fdd_motor |
324 | call save_timer_fdd_motor |
395 | ; ®¤ âì ª®¬ ¤ã "¥ª «¨¡à®¢ª " |
325 | ; Ïîäàòü êîìàíäó "Ðåêàëèáðîâêà" |
396 | mov AL,07h |
326 | mov AL,07h |
397 | call FDCDataOutput |
327 | call FDCDataOutput |
398 | mov AL,00h |
328 | mov AL,00h |
399 | call FDCDataOutput |
329 | call FDCDataOutput |
400 | ; ¦¨¤ âì § ¢¥àè¥¨ï ®¯¥à 樨 |
330 | ; Îæèäàòü çàâåðøåíèÿ îïåðàöèè |
401 | call WaitFDCInterrupt |
331 | call WaitFDCInterrupt |
402 | ; cmp [FDC_Status],0 |
332 | ; cmp [FDC_Status],0 |
403 | ; je no_fdc_status_error |
333 | ; je no_fdc_status_error |
404 | ; mov [flp_status],0 |
334 | ; mov [flp_status],0 |
405 | ;no_fdc_status_error: |
335 | ;no_fdc_status_error: |
Line 406... | Line 336... | ||
406 | call save_timer_fdd_motor |
336 | call save_timer_fdd_motor |
407 | popa |
337 | popa |
408 | ret |
338 | ret |
409 | 339 | ||
410 | ;***************************************************** |
340 | ;***************************************************** |
411 | ;* * |
341 | ;* ÏÎÈÑÊ ÄÎÐÎÆÊÈ * |
412 | ;* à ¬¥âàë ¯¥à¥¤ îâáï ç¥à¥§ £«®¡ «ìë¥ ¯¥à¥¬¥ë¥: * |
342 | ;* Ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå ïåðåìåííûå: * |
413 | ;* FDD_Track - ®¬¥à ¤®à®¦ª¨ (0-79); * |
343 | ;* FDD_Track - íîìåð äîðîæêè (0-79); * |
414 | ;* FDD_Head - ®¬¥à £®«®¢ª¨ (0-1). * |
344 | ;* FDD_Head - íîìåð ãîëîâêè (0-1). * |
415 | ;* ¥§ã«ìâ â ®¯¥à 樨 § ®á¨âáï ¢ FDC_Status. * |
345 | ;* Ðåçóëüòàò îïåðàöèè çàíîñèòñÿ â FDC_Status. * |
416 | ;***************************************************** |
346 | ;***************************************************** |
417 | SeekTrack: |
347 | SeekTrack: |
418 | pusha |
348 | pusha |
419 | call save_timer_fdd_motor |
349 | call save_timer_fdd_motor |
420 | ; ®¤ âì ª®¬ ¤ã "®¨áª" |
350 | ; Ïîäàòü êîìàíäó "Ïîèñê" |
421 | mov AL,0Fh |
351 | mov AL,0Fh |
422 | call FDCDataOutput |
352 | call FDCDataOutput |
423 | ; ¥à¥¤ âì ¡ ©â ®¬¥à £®«®¢ª¨/ ª®¯¨â¥«ï |
353 | ; Ïåðåäàòü áàéò íîìåðà ãîëîâêè/íàêîïèòåëÿ |
424 | mov AL,[FDD_Head] |
354 | mov AL,[FDD_Head] |
425 | shl AL,2 |
355 | shl AL,2 |
426 | call FDCDataOutput |
356 | call FDCDataOutput |
427 | ; ¥à¥¤ âì ¡ ©â ®¬¥à ¤®à®¦ª¨ |
357 | ; Ïåðåäàòü áàéò íîìåðà äîðîæêè |
428 | mov AL,[FDD_Track] |
358 | mov AL,[FDD_Track] |
429 | call FDCDataOutput |
359 | call FDCDataOutput |
430 | ; ¦¨¤ âì § ¢¥àè¥¨ï ®¯¥à 樨 |
360 | ; Îæèäàòü çàâåðøåíèÿ îïåðàöèè |
431 | call WaitFDCInterrupt |
361 | call WaitFDCInterrupt |
432 | cmp [FDC_Status],FDC_Normal |
362 | cmp [FDC_Status],FDC_Normal |
433 | jne @@Exit |
363 | jne @@Exit |
434 | ; ®åà ¨âì १ã«ìâ â ¯®¨áª |
364 | ; Ñîõðàíèòü ðåçóëüòàò ïîèñêà |
435 | mov AL,08h |
365 | mov AL,08h |
436 | call FDCDataOutput |
366 | call FDCDataOutput |
437 | call FDCDataInput |
367 | call FDCDataInput |
438 | mov [FDC_ST0],AL |
368 | mov [FDC_ST0],AL |
439 | call FDCDataInput |
369 | call FDCDataInput |
440 | mov [FDC_C],AL |
370 | mov [FDC_C],AL |
441 | ; ஢¥à¨âì १ã«ìâ â ¯®¨áª |
371 | ; Ïðîâåðèòü ðåçóëüòàò ïîèñêà |
442 | ; ®¨áª § ¢¥àè¥? |
372 | ; Ïîèñê çàâåðøåí? |
443 | test [FDC_ST0],100000b |
373 | test [FDC_ST0],100000b |
444 | je @@Err |
374 | je @@Err |
445 | ; ¤ ë© â४ ©¤¥? |
375 | ; Çàäàííûé òðåê íàéäåí? |
446 | mov AL,[FDC_C] |
376 | mov AL,[FDC_C] |
447 | cmp AL,[FDD_Track] |
377 | cmp AL,[FDD_Track] |
448 | jne @@Err |
378 | jne @@Err |
449 | ; ®¬¥à £®«®¢ª¨ ᮢ¯ ¤ ¥â á § ¤ ë¬? |
379 | ; Íîìåð ãîëîâêè ñîâïàäàåò ñ çàäàííûì? |
450 | mov AL,[FDC_ST0] |
380 | mov AL,[FDC_ST0] |
451 | and AL,100b |
381 | and AL,100b |
452 | shr AL,2 |
382 | shr AL,2 |
453 | cmp AL,[FDD_Head] |
383 | cmp AL,[FDD_Head] |
454 | jne @@Err |
384 | jne @@Err |
455 | ; ¯¥à æ¨ï § ¢¥àè¥ ãá¯¥è® |
385 | ; Îïåðàöèÿ çàâåðøåíà óñïåøíî |
456 | mov [FDC_Status],FDC_Normal |
386 | mov [FDC_Status],FDC_Normal |
457 | jmp @@Exit |
387 | jmp @@Exit |
458 | @@Err: ; ४ ¥ ©¤¥ |
388 | @@Err: ; Òðåê íå íàéäåí |
459 | mov [FDC_Status],FDC_TrackNotFound |
389 | mov [FDC_Status],FDC_TrackNotFound |
460 | ; mov [flp_status],0 |
390 | ; mov [flp_status],0 |
Line 461... | Line 391... | ||
461 | @@Exit: |
391 | @@Exit: |
462 | call save_timer_fdd_motor |
392 | call save_timer_fdd_motor |
463 | popa |
393 | popa |
464 | ret |
394 | ret |
465 | 395 | ||
466 | ;******************************************************* |
396 | ;******************************************************* |
467 | ;* * |
397 | ;* ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ ÄÀÍÍÛÕ * |
468 | ;* à ¬¥âàë ¯¥à¥¤ îâáï ç¥à¥§ £«®¡ «ìë¥ ¯¥à¥¬¥ë¥: * |
398 | ;* Ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå ïåðåìåííûå: * |
469 | ;* FDD_Track - ®¬¥à ¤®à®¦ª¨ (0-79); * |
399 | ;* FDD_Track - íîìåð äîðîæêè (0-79); * |
470 | ;* FDD_Head - ®¬¥à £®«®¢ª¨ (0-1); * |
400 | ;* FDD_Head - íîìåð ãîëîâêè (0-1); * |
471 | ;* FDD_Sector - ®¬¥à ᥪâ®à (1-18). * |
401 | ;* FDD_Sector - íîìåð ñåêòîðà (1-18). * |
472 | ;* ¥§ã«ìâ â ®¯¥à 樨 § ®á¨âáï ¢ FDC_Status. * |
402 | ;* Ðåçóëüòàò îïåðàöèè çàíîñèòñÿ â FDC_Status. * |
473 | ;* á«ãç ¥ ãᯥ讣® ¢ë¯®«¥¨ï ®¯¥à 樨 ç⥨ï * |
403 | ;*  ñëó÷àå óñïåøíîãî âûïîëíåíèÿ îïåðàöèè ÷òåíèÿ * |
474 | ;* ᮤ¥à¦¨¬®¥ ᥪâ®à ¡ã¤¥â § ¥á¥® ¢ FDD_DataBuffer. * |
404 | ;* ñîäåðæèìîå ñåêòîðà áóäåò çàíåñåíî â FDD_DataBuffer. * |
475 | ;******************************************************* |
405 | ;******************************************************* |
476 | ReadSector: |
406 | ReadSector: |
477 | pushad |
407 | pushad |
478 | call save_timer_fdd_motor |
408 | call save_timer_fdd_motor |
479 | ; áâ ®¢¨âì ᪮à®áâì ¯¥à¥¤ ç¨ 500 ¡ ©â/á |
409 | ; Óñòàíîâèòü ñêîðîñòü ïåðåäà÷è 500 Êáàéò/ñ |
480 | mov AX,0 |
410 | mov AX,0 |
481 | mov DX,03F7h |
411 | mov DX,03F7h |
482 | out DX,AL |
412 | out DX,AL |
483 | ; ¨æ¨ «¨§¨à®¢ âì ª « ¯àאַ£® ¤®áâ㯠ª ¯ ¬ï⨠|
413 | ; Èíèöèàëèçèðîâàòü êàíàë ïðÿìîãî äîñòóïà ê ïàìÿòè |
484 | mov [dmamode],0x46 |
414 | mov [dmamode],0x46 |
485 | call Init_FDC_DMA |
415 | call Init_FDC_DMA |
486 | ; ®¤ âì ª®¬ ¤ã "⥨¥ ¤ ëå" |
416 | ; Ïîäàòü êîìàíäó "×òåíèå äàííûõ" |
487 | mov AL,0E6h ;ç⥨¥ ¢ ¬ã«ìâ¨â४®¢®¬ ०¨¬¥ |
417 | mov AL,0E6h ;÷òåíèå â ìóëüòèòðåêîâîì ðåæèìå |
488 | call FDCDataOutput |
418 | call FDCDataOutput |
489 | mov AL,[FDD_Head] |
419 | mov AL,[FDD_Head] |
490 | shl AL,2 |
420 | shl AL,2 |
491 | call FDCDataOutput |
421 | call FDCDataOutput |
492 | mov AL,[FDD_Track] |
422 | mov AL,[FDD_Track] |
493 | call FDCDataOutput |
423 | call FDCDataOutput |
494 | mov AL,[FDD_Head] |
424 | mov AL,[FDD_Head] |
495 | call FDCDataOutput |
425 | call FDCDataOutput |
496 | mov AL,[FDD_Sector] |
426 | mov AL,[FDD_Sector] |
497 | call FDCDataOutput |
427 | call FDCDataOutput |
498 | mov AL,2 ;ª®¤ à §¬¥à ᥪâ®à (512 ¡ ©â) |
428 | mov AL,2 ;êîä ðàçìåðà ñåêòîðà (512 áàéò) |
499 | call FDCDataOutput |
429 | call FDCDataOutput |
500 | mov AL,18 ;+1; 3Fh ;ç¨á«® ᥪâ®à®¢ ¤®à®¦ª¥ |
430 | mov AL,18 ;+1; 3Fh ;÷èñëî ñåêòîðîâ íà äîðîæêå |
501 | call FDCDataOutput |
- | |
502 | mov AL,1Bh ;§ 票¥ GPL |
431 | call FDCDataOutput |
503 | call FDCDataOutput |
432 | mov AL,1Bh ;çíà÷åíèå GPL |
504 | mov AL,0FFh ;§ 票¥ DTL |
433 | call FDCDataOutput |
505 | call FDCDataOutput |
434 | mov AL,0FFh ;çíà÷åíèå DTL |
506 | 435 | call FDCDataOutput |
|
507 | ; ¦¨¤ ¥¬ ¯à¥àë¢ ¨¥ ¯® § ¢¥à襨¨ ®¯¥à 樨 |
436 | ; Îæèäàåì ïðåðûâàíèå ïî çàâåðøåíèè îïåðàöèè |
508 | call WaitFDCInterrupt |
437 | call WaitFDCInterrupt |
509 | cmp [FDC_Status],FDC_Normal |
438 | cmp [FDC_Status],FDC_Normal |
510 | jne @@Exit_1 |
439 | jne @@Exit_1 |
511 | ; ç¨âë¢ ¥¬ áâ âãá § ¢¥àè¥¨ï ®¯¥à 樨 |
440 | ; Ñ÷èòûâàåì ñòàòóñ çàâåðøåíèÿ îïåðàöèè |
Line 520... | Line 449... | ||
520 | call save_timer_fdd_motor |
449 | call save_timer_fdd_motor |
521 | popad |
450 | popad |
522 | ret |
451 | ret |
Line 523... | Line 452... | ||
523 | 452 | ||
524 | ;******************************************************* |
453 | ;******************************************************* |
525 | ;* ( ) * |
454 | ;* ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ (Ñ ÏÎÂÒÎÐÅÍÈÅÌ ÎÏÅÐÀÖÈÈ ÏÐÈ ÑÁÎÅ) * |
526 | ;* à ¬¥âàë ¯¥à¥¤ îâáï ç¥à¥§ £«®¡ «ìë¥ ¯¥à¥¬¥ë¥: * |
455 | ;* Ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå ïåðåìåííûå: * |
527 | ;* FDD_Track - ®¬¥à ¤®à®¦ª¨ (0-79); * |
456 | ;* FDD_Track - íîìåð äîðîæêè (0-79); * |
528 | ;* FDD_Head - ®¬¥à £®«®¢ª¨ (0-1); * |
457 | ;* FDD_Head - íîìåð ãîëîâêè (0-1); * |
529 | ;* FDD_Sector - ®¬¥à ᥪâ®à (1-18). * |
458 | ;* FDD_Sector - íîìåð ñåêòîðà (1-18). * |
530 | ;* ¥§ã«ìâ â ®¯¥à 樨 § ®á¨âáï ¢ FDC_Status. * |
459 | ;* Ðåçóëüòàò îïåðàöèè çàíîñèòñÿ â FDC_Status. * |
531 | ;* á«ãç ¥ ãᯥ讣® ¢ë¯®«¥¨ï ®¯¥à 樨 ç⥨ï * |
460 | ;*  ñëó÷àå óñïåøíîãî âûïîëíåíèÿ îïåðàöèè ÷òåíèÿ * |
532 | ;* ᮤ¥à¦¨¬®¥ ᥪâ®à ¡ã¤¥â § ¥á¥® ¢ FDD_DataBuffer. * |
461 | ;* ñîäåðæèìîå ñåêòîðà áóäåò çàíåñåíî â FDD_DataBuffer. * |
533 | ;******************************************************* |
462 | ;******************************************************* |
534 | ReadSectWithRetr: |
463 | ReadSectWithRetr: |
535 | pusha |
464 | pusha |
536 | ; ¡ã«¨âì áç¥â稪 ¯®¢â®à¥¨ï ®¯¥à 樨 ४ «¨¡à®¢ª¨ |
465 | ; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè |
537 | mov [RecalRepCounter],0 |
466 | mov [RecalRepCounter],0 |
538 | @@TryAgain: |
467 | @@TryAgain: |
539 | ; ¡ã«¨âì áç¥â稪 ¯®¢â®à¥¨ï ®¯¥à 樨 ç⥨ï |
468 | ; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíèÿ |
540 | mov [ReadRepCounter],0 |
469 | mov [ReadRepCounter],0 |
541 | @@ReadSector_1: |
470 | @@ReadSector_1: |
542 | call ReadSector |
471 | call ReadSector |
543 | cmp [FDC_Status],0 |
472 | cmp [FDC_Status],0 |
544 | je @@Exit_2 |
473 | je @@Exit_2 |
545 | cmp [FDC_Status],1 |
474 | cmp [FDC_Status],1 |
546 | je @@Err_3 |
475 | je @@Err_3 |
547 | ; ஥ªà ⮥ ¯®¢â®à¥¨¥ ç⥨ï |
476 | ; Òðîåêðàòíîå ïîâòîðåíèå ÷òåíèÿ |
548 | inc [ReadRepCounter] |
477 | inc [ReadRepCounter] |
549 | cmp [ReadRepCounter],3 |
478 | cmp [ReadRepCounter],3 |
550 | jb @@ReadSector_1 |
479 | jb @@ReadSector_1 |
551 | ; ஥ªà ⮥ ¯®¢â®à¥¨¥ ४ «¨¡à®¢ª¨ |
480 | ; Òðîåêðàòíîå ïîâòîðåíèå ðåêàëèáðîâêè |
552 | call RecalibrateFDD |
481 | call RecalibrateFDD |
553 | call SeekTrack |
482 | call SeekTrack |
554 | inc [RecalRepCounter] |
483 | inc [RecalRepCounter] |
555 | cmp [RecalRepCounter],3 |
484 | cmp [RecalRepCounter],3 |
Line 562... | Line 491... | ||
562 | mov [flp_status],0 |
491 | mov [flp_status],0 |
563 | popa |
492 | popa |
564 | ret |
493 | ret |
Line 565... | Line 494... | ||
565 | 494 | ||
566 | ;******************************************************* |
495 | ;******************************************************* |
567 | ;* * |
496 | ;* ÇÀÏÈÑÜ ÑÅÊÒÎÐÀ ÄÀÍÍÛÕ * |
568 | ;* à ¬¥âàë ¯¥à¥¤ îâáï ç¥à¥§ £«®¡ «ìë¥ ¯¥à¥¬¥ë¥: * |
497 | ;* Ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå ïåðåìåííûå: * |
569 | ;* FDD_Track - ®¬¥à ¤®à®¦ª¨ (0-79); * |
498 | ;* FDD_Track - íîìåð äîðîæêè (0-79); * |
570 | ;* FDD_Head - ®¬¥à £®«®¢ª¨ (0-1); * |
499 | ;* FDD_Head - íîìåð ãîëîâêè (0-1); * |
571 | ;* FDD_Sector - ®¬¥à ᥪâ®à (1-18). * |
500 | ;* FDD_Sector - íîìåð ñåêòîðà (1-18). * |
572 | ;* ¥§ã«ìâ â ®¯¥à 樨 § ®á¨âáï ¢ FDC_Status. * |
501 | ;* Ðåçóëüòàò îïåðàöèè çàíîñèòñÿ â FDC_Status. * |
573 | ;* á«ãç ¥ ãᯥ讣® ¢ë¯®«¥¨ï ®¯¥à 樨 § ¯¨á¨ * |
502 | ;*  ñëó÷àå óñïåøíîãî âûïîëíåíèÿ îïåðàöèè çàïèñè * |
574 | ;* ᮤ¥à¦¨¬®¥ FDD_DataBuffer ¡ã¤¥â § ¥á¥® ¢ ᥪâ®à. * |
503 | ;* ñîäåðæèìîå FDD_DataBuffer áóäåò çàíåñåíî â ñåêòîð. * |
575 | ;******************************************************* |
504 | ;******************************************************* |
576 | WriteSector: |
505 | WriteSector: |
577 | pushad |
506 | pushad |
578 | call save_timer_fdd_motor |
507 | call save_timer_fdd_motor |
579 | ; áâ ®¢¨âì ᪮à®áâì ¯¥à¥¤ ç¨ 500 ¡ ©â/á |
508 | ; Óñòàíîâèòü ñêîðîñòü ïåðåäà÷è 500 Êáàéò/ñ |
580 | mov AX,0 |
509 | mov AX,0 |
581 | mov DX,03F7h |
510 | mov DX,03F7h |
582 | out DX,AL |
511 | out DX,AL |
583 | ; ¨æ¨ «¨§¨à®¢ âì ª « ¯àאַ£® ¤®áâ㯠ª ¯ ¬ï⨠|
512 | ; Èíèöèàëèçèðîâàòü êàíàë ïðÿìîãî äîñòóïà ê ïàìÿòè |
584 | mov [dmamode],0x4A |
513 | mov [dmamode],0x4A |
585 | call Init_FDC_DMA |
514 | call Init_FDC_DMA |
586 | ; ®¤ âì ª®¬ ¤ã " ¯¨áì ¤ ëå" |
515 | ; Ïîäàòü êîìàíäó "Çàïèñü äàííûõ" |
587 | mov AL,0xC5 ;0x45 ;§ ¯¨áì ¢ ¬ã«ìâ¨â४®¢®¬ ०¨¬¥ |
516 | mov AL,0xC5 ;0x45 ;çàïèñü â ìóëüòèòðåêîâîì ðåæèìå |
588 | call FDCDataOutput |
517 | call FDCDataOutput |
589 | mov AL,[FDD_Head] |
518 | mov AL,[FDD_Head] |
590 | shl AL,2 |
519 | shl AL,2 |
591 | call FDCDataOutput |
520 | call FDCDataOutput |
592 | mov AL,[FDD_Track] |
521 | mov AL,[FDD_Track] |
593 | call FDCDataOutput |
522 | call FDCDataOutput |
594 | mov AL,[FDD_Head] |
523 | mov AL,[FDD_Head] |
595 | call FDCDataOutput |
524 | call FDCDataOutput |
596 | mov AL,[FDD_Sector] |
525 | mov AL,[FDD_Sector] |
597 | call FDCDataOutput |
526 | call FDCDataOutput |
598 | mov AL,2 ;ª®¤ à §¬¥à ᥪâ®à (512 ¡ ©â) |
527 | mov AL,2 ;êîä ðàçìåðà ñåêòîðà (512 áàéò) |
599 | call FDCDataOutput |
528 | call FDCDataOutput |
600 | mov AL,18; 3Fh ;ç¨á«® ᥪâ®à®¢ ¤®à®¦ª¥ |
529 | mov AL,18; 3Fh ;÷èñëî ñåêòîðîâ íà äîðîæêå |
601 | call FDCDataOutput |
530 | call FDCDataOutput |
602 | mov AL,1Bh ;§ 票¥ GPL |
531 | mov AL,1Bh ;çíà÷åíèå GPL |
603 | call FDCDataOutput |
532 | call FDCDataOutput |
604 | mov AL,0FFh ;§ 票¥ DTL |
533 | mov AL,0FFh ;çíà÷åíèå DTL |
605 | call FDCDataOutput |
- | |
606 | 534 | call FDCDataOutput |
|
607 | ; ¦¨¤ ¥¬ ¯à¥àë¢ ¨¥ ¯® § ¢¥à襨¨ ®¯¥à 樨 |
535 | ; Îæèäàåì ïðåðûâàíèå ïî çàâåðøåíèè îïåðàöèè |
608 | call WaitFDCInterrupt |
536 | call WaitFDCInterrupt |
609 | cmp [FDC_Status],FDC_Normal |
537 | cmp [FDC_Status],FDC_Normal |
610 | jne @@Exit_3 |
538 | jne @@Exit_3 |
611 | ; ç¨âë¢ ¥¬ áâ âãá § ¢¥àè¥¨ï ®¯¥à 樨 |
539 | ; Ñ÷èòûâàåì ñòàòóñ çàâåðøåíèÿ îïåðàöèè |
612 | call GetStatusInfo |
540 | call GetStatusInfo |
613 | test [FDC_ST0],11000000b ;11011000b |
541 | test [FDC_ST0],11000000b ;11011000b |
614 | jnz @@Err_2 |
542 | jnz @@Err_2 |
615 | mov [FDC_Status],FDC_Normal |
543 | mov [FDC_Status],FDC_Normal |
Line 619... | Line 547... | ||
619 | call save_timer_fdd_motor |
547 | call save_timer_fdd_motor |
620 | popad |
548 | popad |
621 | ret |
549 | ret |
Line 622... | Line 550... | ||
622 | 550 | ||
623 | ;******************************************************* |
551 | ;******************************************************* |
624 | ;* ( ) * |
552 | ;* ÇÀÏÈÑÜ ÑÅÊÒÎÐÀ (Ñ ÏÎÂÒÎÐÅÍÈÅÌ ÎÏÅÐÀÖÈÈ ÏÐÈ ÑÁÎÅ) * |
625 | ;* à ¬¥âàë ¯¥à¥¤ îâáï ç¥à¥§ £«®¡ «ìë¥ ¯¥à¥¬¥ë¥: * |
553 | ;* Ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå ïåðåìåííûå: * |
626 | ;* FDD_Track - ®¬¥à ¤®à®¦ª¨ (0-79); * |
554 | ;* FDD_Track - íîìåð äîðîæêè (0-79); * |
627 | ;* FDD_Head - ®¬¥à £®«®¢ª¨ (0-1); * |
555 | ;* FDD_Head - íîìåð ãîëîâêè (0-1); * |
628 | ;* FDD_Sector - ®¬¥à ᥪâ®à (1-18). * |
556 | ;* FDD_Sector - íîìåð ñåêòîðà (1-18). * |
629 | ;* ¥§ã«ìâ â ®¯¥à 樨 § ®á¨âáï ¢ FDC_Status. * |
557 | ;* Ðåçóëüòàò îïåðàöèè çàíîñèòñÿ â FDC_Status. * |
630 | ;* á«ãç ¥ ãᯥ讣® ¢ë¯®«¥¨ï ®¯¥à 樨 § ¯¨á¨ * |
558 | ;*  ñëó÷àå óñïåøíîãî âûïîëíåíèÿ îïåðàöèè çàïèñè * |
631 | ;* ᮤ¥à¦¨¬®¥ FDD_DataBuffer ¡ã¤¥â § ¥á¥® ¢ ᥪâ®à. * |
559 | ;* ñîäåðæèìîå FDD_DataBuffer áóäåò çàíåñåíî â ñåêòîð. * |
632 | ;******************************************************* |
560 | ;******************************************************* |
633 | WriteSectWithRetr: |
561 | WriteSectWithRetr: |
634 | pusha |
562 | pusha |
635 | ; ¡ã«¨âì áç¥â稪 ¯®¢â®à¥¨ï ®¯¥à 樨 ४ «¨¡à®¢ª¨ |
563 | ; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè |
636 | mov [RecalRepCounter],0 |
564 | mov [RecalRepCounter],0 |
637 | @@TryAgain_1: |
565 | @@TryAgain_1: |
638 | ; ¡ã«¨âì áç¥â稪 ¯®¢â®à¥¨ï ®¯¥à 樨 ç⥨ï |
566 | ; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíèÿ |
639 | mov [ReadRepCounter],0 |
567 | mov [ReadRepCounter],0 |
640 | @@WriteSector_1: |
568 | @@WriteSector_1: |
641 | call WriteSector |
569 | call WriteSector |
642 | cmp [FDC_Status],0 |
570 | cmp [FDC_Status],0 |
643 | je @@Exit_4 |
571 | je @@Exit_4 |
644 | cmp [FDC_Status],1 |
572 | cmp [FDC_Status],1 |
645 | je @@Err_4 |
573 | je @@Err_4 |
646 | ; ஥ªà ⮥ ¯®¢â®à¥¨¥ ç⥨ï |
574 | ; Òðîåêðàòíîå ïîâòîðåíèå ÷òåíèÿ |
647 | inc [ReadRepCounter] |
575 | inc [ReadRepCounter] |
648 | cmp [ReadRepCounter],3 |
576 | cmp [ReadRepCounter],3 |
649 | jb @@WriteSector_1 |
577 | jb @@WriteSector_1 |
650 | ; ஥ªà ⮥ ¯®¢â®à¥¨¥ ४ «¨¡à®¢ª¨ |
578 | ; Òðîåêðàòíîå ïîâòîðåíèå ðåêàëèáðîâêè |
651 | call RecalibrateFDD |
579 | call RecalibrateFDD |
652 | call SeekTrack |
580 | call SeekTrack |
653 | inc [RecalRepCounter] |
581 | inc [RecalRepCounter] |
654 | cmp [RecalRepCounter],3 |
582 | cmp [RecalRepCounter],3 |
Line 660... | Line 588... | ||
660 | mov [flp_status],0 |
588 | mov [flp_status],0 |
661 | popa |
589 | popa |
662 | ret |
590 | ret |
Line 663... | Line 591... | ||
663 | 591 | ||
664 | ;********************************************* |
592 | ;********************************************* |
665 | ;* * |
593 | ;* ÏÎËÓ×ÈÒÜ ÈÍÔÎÐÌÀÖÈÞ Î ÐÅÇÓËÜÒÀÒÅ ÎÏÅÐÀÖÈÈ * |
666 | ;********************************************* |
594 | ;********************************************* |
667 | GetStatusInfo: |
595 | GetStatusInfo: |
668 | push AX |
596 | push AX |
669 | call FDCDataInput |
597 | call FDCDataInput |