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

📄 writtest.c

📁 freedos32的源代码
💻 C
字号:
#include <stdlib.h> /* atexit */#include <time.h>#include <bios.h>#include <string.h>#include <stdio.h>#include <crt0.h>#include "blockio.h"#define LOG_PRINTF(x) printf xint _crt0_startup_flags = _CRT0_FLAG_LOCK_MEMORY;static Floppy drive0;FdcSetupCallback drive_detected;int drive_detected(Fdd *drive){    static unsigned k = 0;    if (drive->dp->cmos_type)    {        printf("Detected %s floppy drive \"fd%u\"\n", drive->dp->name, k);        drive0.fdd = drive;        drive0.buffers[0].data  = malloc(512 * 18 * 2);        drive0.buffers[0].start = (unsigned) -1;        drive0.buffers[0].flags = 0;    }    k++;    return 0;}static void dispose(void){    fdc_dispose();    fd32_event_done();}int main(){    unsigned k = 0;    BYTE     buffer[512];    unsigned long long start_time;    fd32_event_init();    if (fdc_setup(drive_detected) < 0) return -1;    atexit(dispose);    printf("Going to write some data in all sectors...\n");    getchar();    start_time = uclock();    do    {        memset(buffer, k, sizeof(buffer));        int res = floppy_write(&drive0, k, 1, buffer);        if (res == FDC_NODISK) break;        else if (res < 0) printf("Error on block %u\n", k);        if (k % (drive0.fdd->fmt->sec_per_trk * drive0.fdd->fmt->heads) == 0)            printf("%llu: block %u written\n", uclock() * 1000 / UCLOCKS_PER_SEC, k);    }    while (++k < drive0.fdd->fmt->size);    printf("Write test elapsed in %llu ms\n", (uclock() - start_time) * 1000 / UCLOCKS_PER_SEC);    puts("Going to read data from all sectors...\n");    getchar();    k = 0;    start_time = uclock();    do    {        BYTE check[512];        memset(check, k, sizeof(check));        int res = floppy_read(&drive0, k, 1, buffer);        if (res == FDC_NODISK) break;        else if (res < 0) printf("Error on block %u\n", k);        if (k % (drive0.fdd->fmt->sec_per_trk * drive0.fdd->fmt->heads) == 0)            printf("%llu: block %u read\n", uclock() * 1000 / UCLOCKS_PER_SEC, k);        if (memcmp(buffer, check, sizeof(buffer)))            printf("Block %u MISMATCH!\n", k);    }    while (++k < drive0.fdd->fmt->size);    printf("Read test elapsed in %llu ms\n", (uclock() - start_time) * 1000 / UCLOCKS_PER_SEC);    printf("All tests completed.\n");    return 0;}

⌨️ 快捷键说明

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