MicrOS
floppy.h
Go to the documentation of this file.
1 #ifndef FLOPPY_H
2 #define FLOPPY_H
3 
4 #define DEVICE_NUMBER 0
5 #define IDLE_TIME 3000
6 
7 #define FLOPPY_DIGITAL_OUTPUT_REGISTER 0x3f2
8 #define FLOPPY_DIGITAL_INPUT_REGISTER 0x3f7
9 #define FLOPPY_MAIN_STAUTS_REGISTER 0x3f4
10 #define FLOPPY_DATA_REGISTER 0x3f5
11 #define FLOPPY_CONTROL_REGISTER 0x3f7
12 
13 #include <stdint.h>
14 #include <stdbool.h>
15 #include "cpu/pic/pic.h"
16 #include "cpu/idt/idt.h"
17 #include "assembly/io.h"
18 #include <stdlib.h>
19 #include <string.h>
20 #include "logger/logger.h"
21 #include "cpu/timer/timer.h"
22 #include "cpu/dma/dma.h"
24 #include <ktime.h>
25 
26 bool fdc_init();
27 bool floppy_init(int sectors_per_track);
28 bool fdc_is_present();
29 bool floppy_is_inserted();
30 void floppy_lba_to_chs(uint16_t lba, uint8_t *head, uint8_t *track, uint8_t *sector);
31 bool floppy_reset();
33 bool floppy_send_command(uint8_t cmd);
34 uint8_t floppy_read_data();
35 void floppy_confirm_interrupt(uint8_t *st0, uint8_t *cylinder);
36 void floppy_set_parameters(uint32_t step_rate, uint32_t head_load_time, uint32_t head_unload_time, bool dma);
37 bool floppy_calibrate();
38 uint8_t *floppy_read_sector(int device_number, int sector);
39 void floppy_write_sector(int device_number, int sector, uint8_t *content);
40 uint8_t *floppy_do_operation_on_sector(uint8_t head, uint8_t track, uint8_t sector, bool read);
41 void floppy_enable_motor();
43 bool floppy_seek(uint8_t cylinder, uint8_t head);
44 
46 bool floppy_interrupt();
48 
49 uint8_t* floppy_read_continous(int device_number, int sector, int count);
50 uint8_t* floppy_read_sectors(int device_number, uint8_t head, uint8_t track, uint8_t sector, uint32_t count);
51 uint8_t* read_track_from_floppy(int device_number, int head, int track);
52 
53 #endif
bool floppy_seek(uint8_t cylinder, uint8_t head)
Definition: floppy.c:440
uint8_t * floppy_read_sector(int device_number, int sector)
Definition: floppy.c:281
bool floppy_timer_interrupt()
Definition: floppy.c:517
bool floppy_is_inserted()
Definition: floppy.c:75
uint8_t * floppy_do_operation_on_sector(uint8_t head, uint8_t track, uint8_t sector, bool read)
Definition: floppy.c:301
uint8_t * floppy_read_continous(int device_number, int sector, int count)
Definition: floppy.c:531
void floppy_set_parameters(uint32_t step_rate, uint32_t head_load_time, uint32_t head_unload_time, bool dma)
Definition: floppy.c:199
bool fdc_is_present()
Definition: floppy.c:67
bool floppy_reset()
Definition: floppy.c:87
uint8_t floppy_read_data()
Definition: floppy.c:180
bool floppy_calibrate()
Definition: floppy.c:218
bool floppy_init(int sectors_per_track)
Definition: floppy.c:44
void floppy_write_sector(int device_number, int sector, uint8_t *content)
Definition: floppy.c:292
void floppy_enable_motor()
Definition: floppy.c:256
uint8_t * floppy_read_sectors(int device_number, uint8_t head, uint8_t track, uint8_t sector, uint32_t count)
Definition: floppy.c:570
void floppy_confirm_interrupt(uint8_t *st0, uint8_t *cylinder)
Definition: floppy.c:190
void floppy_lba_to_chs(uint16_t lba, uint8_t *head, uint8_t *track, uint8_t *sector)
Definition: floppy.c:80
bool fdc_init()
Definition: floppy.c:12
bool floppy_wait_until_ready()
Definition: floppy.c:152
bool floppy_send_command(uint8_t cmd)
Definition: floppy.c:169
bool floppy_interrupt()
Definition: floppy.c:511
void floppy_disable_motor()
Definition: floppy.c:270
size_t uint32_t
Unsigned integral type.
Definition: string.h:8
bool floppy_wait_for_interrupt()
Definition: floppy.c:481
uint8_t * read_track_from_floppy(int device_number, int head, int track)
Definition: floppy.c:713