Subversion Repositories Kolibri OS

Rev

Rev 129 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 129 Rev 384
Line 3... Line 3...
3
;**********************************************************
3
;**********************************************************
4
; Àâòîð èñõîäíîãî òåêñòà  Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷.
4
; Àâòîð èñõîäíîãî òåêñòà  Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷.
5
; Àäàïòàöèÿ è äîðàáîòêà Mario79
5
; Àäàïòàöèÿ è äîðàáîòêà Mario79
Line 6... Line 6...
6
 
6
 
7
give_back_application_data:  ; ïåðåñëàòü ïðèëîæåíèþ   
7
give_back_application_data:  ; ïåðåñëàòü ïðèëîæåíèþ
8
     mov edi,[0x3010]
8
     mov edi,[TASK_BASE]
9
     mov edi,[edi+TASKDATA.mem_start]
9
     mov edi,[edi+TASKDATA.mem_start]
10
     add edi,ecx
10
     add edi,ecx
11
give_back_application_data_1:
11
give_back_application_data_1:
12
     mov esi,0xD000   ;FDD_DataBuffer  ;0x40000
12
     mov esi,FDD_BUFF   ;FDD_DataBuffer  ;0x40000
13
     xor ecx,ecx
13
     xor ecx,ecx
14
     mov cx,128
14
     mov cx,128
15
     cld
15
     cld
16
     rep movsd
16
     rep movsd
Line 17... Line 17...
17
     ret
17
     ret
18
 
18
 
19
take_data_from_application:   ; âçÿòü èç ïðèëîæåíèÿ
19
take_data_from_application:   ; âçÿòü èç ïðèëîæåíè
20
     mov esi,[0x3010]
20
     mov esi,[TASK_BASE]
21
     mov esi,[esi+TASKDATA.mem_start]
21
     mov esi,[esi+TASKDATA.mem_start]
22
     add esi,ecx
22
     add esi,ecx
23
take_data_from_application_1:
23
take_data_from_application_1:
24
     mov edi,0xD000   ;FDD_DataBuffer  ;0x40000
24
     mov edi,FDD_BUFF   ;FDD_DataBuffer  ;0x40000
25
     xor ecx,ecx
25
     xor ecx,ecx
26
     mov cx,128
26
     mov cx,128
27
     cld
27
     cld
Line 64... Line 64...
64
FDC_ST2 DB ?
64
FDC_ST2 DB ?
65
FDC_C   DB ?
65
FDC_C   DB ?
66
FDC_H   DB ?
66
FDC_H   DB ?
67
FDC_R   DB ?
67
FDC_R   DB ?
68
FDC_N   DB ?
68
FDC_N   DB ?
69
; Ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíèÿ
69
; Ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíè
70
ReadRepCounter  DB ?
70
ReadRepCounter  DB ?
71
; Ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè
71
; Ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè
72
RecalRepCounter DB ?
72
RecalRepCounter DB ?
73
endg
73
endg
74
; Îáëàñòü ïàìÿòè äëÿ õðàíåíèÿ ïðî÷èòàííîãî ñåêòîðà
74
; Îáëàñòü ïàìÿòè äëÿ õðàíåíèÿ ïðî÷èòàííîãî ñåêòîðà
Line 172... Line 172...
172
 
172
 
173
;*********************************************
173
;*********************************************
174
;* ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÊÎÍÒÐÎËËÅÐÀ ÍÃÌÄ *
174
;* ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÊÎÍÒÐÎËËÅÐÀ ÍÃÌÄ *
175
;*********************************************
175
;*********************************************
176
FDCInterrupt:
176
FDCInterrupt:
177
; Óñòàíîâèòü ôëàã ïðåðûâàíèÿ
177
; Óñòàíîâèòü ôëàã ïðåðûâàíè
178
        mov     [FDD_IntFlag],1
178
        mov     [FDD_IntFlag],1
Line 179... Line 179...
179
        ret
179
        ret
Line 192... Line 192...
192
;*******************************************
192
;*******************************************
193
WaitFDCInterrupt:
193
WaitFDCInterrupt:
194
        pusha
194
        pusha
195
; Ñáðîñèòü áàéò ñîñòîÿíèÿ îïåðàöèè
195
; Ñáðîñèòü áàéò ñîñòîÿíèÿ îïåðàöèè
196
        mov     [FDC_Status],FDC_Normal
196
        mov     [FDC_Status],FDC_Normal
197
; Ñáðîñèòü ôëàã ïðåðûâàíèÿ
197
; Ñáðîñèòü ôëàã ïðåðûâàíè
198
        mov     [FDD_IntFlag],0
198
        mov     [FDD_IntFlag],0
199
; Îáíóëèòü ñ÷åò÷èê òèêîâ
199
; Îáíóëèòü ñ÷åò÷èê òèêîâ
200
        mov     eax,[timer_ticks]
200
        mov     eax,[timer_ticks]
201
        mov     [TickCounter],eax
201
        mov     [TickCounter],eax
202
; Îæèäàòü óñòàíîâêè ôëàãà ïðåðûâàíèÿ ÍÃÌÄ
202
; Îæèäàòü óñòàíîâêè ôëàãà ïðåðûâàíèÿ ÍÃÌÄ
Line 350... Line 350...
350
        pusha
350
        pusha
351
        call    save_timer_fdd_motor
351
        call    save_timer_fdd_motor
352
; Ïîäàòü êîìàíäó "Ïîèñê"
352
; Ïîäàòü êîìàíäó "Ïîèñê"
353
        mov     AL,0Fh
353
        mov     AL,0Fh
354
        call    FDCDataOutput
354
        call    FDCDataOutput
355
        ; Ïåðåäàòü áàéò íîìåðà ãîëîâêè/íàêîïèòåëÿ
355
        ; Ïåðåäàòü áàéò íîìåðà ãîëîâêè/íàêîïèòåë
356
        mov     AL,[FDD_Head]
356
        mov     AL,[FDD_Head]
357
        shl     AL,2
357
        shl     AL,2
358
        call    FDCDataOutput
358
        call    FDCDataOutput
359
        ; Ïåðåäàòü áàéò íîìåðà äîðîæêè
359
        ; Ïåðåäàòü áàéò íîìåðà äîðîæêè
360
        mov     AL,[FDD_Track]
360
        mov     AL,[FDD_Track]
Line 465... Line 465...
465
ReadSectWithRetr:
465
ReadSectWithRetr:
466
        pusha
466
        pusha
467
; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè
467
; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè
468
        mov     [RecalRepCounter],0
468
        mov     [RecalRepCounter],0
469
@@TryAgain:
469
@@TryAgain:
470
; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíèÿ
470
; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíè
471
        mov     [ReadRepCounter],0
471
        mov     [ReadRepCounter],0
472
@@ReadSector_1:
472
@@ReadSector_1:
473
        call    ReadSector
473
        call    ReadSector
474
        cmp     [FDC_Status],0
474
        cmp     [FDC_Status],0
475
        je      @@Exit_2
475
        je      @@Exit_2
476
        cmp     [FDC_Status],1
476
        cmp     [FDC_Status],1
477
        je      @@Err_3 
477
        je      @@Err_3
478
        ; Òðîåêðàòíîå ïîâòîðåíèå ÷òåíèÿ
478
        ; Òðîåêðàòíîå ïîâòîðåíèå ÷òåíè
479
        inc     [ReadRepCounter]
479
        inc     [ReadRepCounter]
480
        cmp     [ReadRepCounter],3
480
        cmp     [ReadRepCounter],3
481
        jb      @@ReadSector_1
481
        jb      @@ReadSector_1
482
        ; Òðîåêðàòíîå ïîâòîðåíèå ðåêàëèáðîâêè
482
        ; Òðîåêðàòíîå ïîâòîðåíèå ðåêàëèáðîâêè
483
        call    RecalibrateFDD
483
        call    RecalibrateFDD
Line 563... Line 563...
563
WriteSectWithRetr:
563
WriteSectWithRetr:
564
        pusha
564
        pusha
565
; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè
565
; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ðåêàëèáðîâêè
566
        mov     [RecalRepCounter],0
566
        mov     [RecalRepCounter],0
567
@@TryAgain_1:
567
@@TryAgain_1:
568
; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíèÿ
568
; Îáíóëèòü ñ÷åò÷èê ïîâòîðåíèÿ îïåðàöèè ÷òåíè
569
        mov     [ReadRepCounter],0
569
        mov     [ReadRepCounter],0
570
@@WriteSector_1:
570
@@WriteSector_1:
571
        call    WriteSector
571
        call    WriteSector
572
        cmp     [FDC_Status],0
572
        cmp     [FDC_Status],0
573
        je      @@Exit_4
573
        je      @@Exit_4
574
        cmp     [FDC_Status],1
574
        cmp     [FDC_Status],1
575
        je      @@Err_4
575
        je      @@Err_4
576
        ; Òðîåêðàòíîå ïîâòîðåíèå ÷òåíèÿ
576
        ; Òðîåêðàòíîå ïîâòîðåíèå ÷òåíè
577
        inc     [ReadRepCounter]
577
        inc     [ReadRepCounter]
578
        cmp     [ReadRepCounter],3
578
        cmp     [ReadRepCounter],3
579
        jb      @@WriteSector_1
579
        jb      @@WriteSector_1
580
        ; Òðîåêðàòíîå ïîâòîðåíèå ðåêàëèáðîâêè
580
        ; Òðîåêðàòíîå ïîâòîðåíèå ðåêàëèáðîâêè
581
        call    RecalibrateFDD
581
        call    RecalibrateFDD