Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Железо. Написание драйверов
Перезагрузить страницу Работа с дискетой через BIOS
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
yureckor yureckor вне форума
Member
 
Сообщений: 462
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.03.2004
По умолчанию Работа с дискетой через BIOS - 26.07.2005, 12:57

Нет ни у кого исходников по subj?
Интересует чтение/запись секторов, форматирование и т.п.
В инете не могу найти конкретный пример, одни справочники.
Ответить с цитированием
  (#2 (permalink)) Старый
LaMiK LaMiK вне форума
Member
 
Сообщений: 354
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2004
По умолчанию 26.07.2005, 16:01

Int 13h - Вроде как BIOS функция работы с HD/FD
имхо по данной теме без справочников не обойтись!

Могу тебе переслать ДРЕЕВНЮЮ книженцу 469k чистым
текстом (запаковал 7z... стало 90k) по BIOS прерываниям (на русском).
Качать отсюда: http://bobojet.narod.ru/bios_lamik.7z
Ответить с цитированием
  (#3 (permalink)) Старый
yureckor yureckor вне форума
Member
 
Сообщений: 462
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.03.2004
По умолчанию 26.07.2005, 16:51

спасибо, буду читать.
Ответить с цитированием
  (#4 (permalink)) Старый
kas kas вне форума
Member
 
Сообщений: 191
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.08.2003
По умолчанию 09.08.2005, 22:35

конкретный пример: запись бут сектора
(исходник на винте валялся...вроде должен работать)

Код:
#include <stdio.h>
#include <conio.h>

char buff[512], fname[8];

void main(){

printf("write name of file .. ");
scanf("%s", &fname);

for(int i=0; i<512; i++) buff[i]=0;

  FILE *f=fopen(fname, "rb");
       int err=fread(buff, 1, 512, f);
       if(err!=512) printf("error in read from file...n");
       else{
        printf("read from file okn");
        printf("press keyn");
    getch();
  fclose(f);
  asm{

    mov  ax, 0301h
    push ds
    pop  es
    mov  bx, offset buff
    xor  cx, cx
    or   cx, 1
    xor  dx, dx
    int 13h
    jc  err
    jmp end
  }
  goto end;
  err:
  printf("error put on diskn");
  end:
  printf("write ok");
  getch();
  }
}
Ответить с цитированием
  (#5 (permalink)) Старый
LaMiK LaMiK вне форума
Member
 
Сообщений: 354
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2004
По умолчанию 09.08.2005, 23:36

Код:
...
...
    jc  err 
    jmp end 
  } 
  goto end; 
  err: 
  printf("error put on diskn"); 
  end: 
  printf("write ok"); 
  getch();
обработка ошибки кажись глючит... или я
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
kas kas вне форума
Member
 
Сообщений: 191
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.08.2003
По умолчанию 10.08.2005, 19:37

Вас, LaMiK, смущает 'jc'?
дык так и должно быть, другое дело, что fread у меня почему-то не работает...
Ответить с цитированием
  (#7 (permalink)) Старый
LaMiK LaMiK вне форума
Member
 
Сообщений: 354
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2004
По умолчанию 11.08.2005, 01:16

Да нет, просто в случае ошибки вывод будет таким:
error put on disk
write ok ))
-------
по поводу fread:
if(err == 0) <--- вот это и будет настоящий error !!
Ответить с цитированием
  (#8 (permalink)) Старый
yureckor yureckor вне форума
Member
 
Сообщений: 462
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.03.2004
По умолчанию 11.08.2005, 09:44

Вот под ДОС (верней чтение через BIOS)
Код:
;---
;c, nc, dx->
read_buf proc
psh ax, bx, cx
 mov [rk_c1], 3
 @@rk1:
  mov ah, 02h  ;чтение
  mov ch, PB [wdorojka]
  mov cl, PB [wsektorov]
  mov dx, [wdisk]
  mov bx, OF buf
  mov al, LEN_KEY_S;сколько сектора
  int 13h
  mov dx, OF s_err0
  jnc @@rkkon
  cmp ah, 0
  stc
  jz @@rk100
  cmp ah, 11h
  stc
  jz @@rk100
  mov dx, OF s_err14
  cmp ah, 80h
  jz @@rk100
 dnz [rk_c1], @@rk1
 mov dx, OF s_err5
 stc
@@rkkon: cmc
@@rk100:
po ax, bx, cx
ret
rk_c1 dw ?
read_buf endp
Но я нашел как под Винду - http://www.wasm.ru/forum/index.php?action=...ic=10945&page=3
Ответить с цитированием
  (#9 (permalink)) Старый
kas kas вне форума
Member
 
Сообщений: 191
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.08.2003
По умолчанию 11.08.2005, 21:51

даю еще сырец:
Код:
.model Tiny
.code
    org 100h
.startup
    mov ah,9
    lea dx,Message
    int 21h

    mov ax,3D00h  ;Try to open file for read
    lea dx,File
    int 21h
    jnc OpenOK

    mov ah,9
    lea dx,OpenError
    int 21h
    jmp Exit
OpenOK:
    mov bx,ax     ;Try to read file
    mov ah,3Fh
    mov cx,512
    lea dx,buffer
    int 21h
    jnc ReadOK
    
    mov ah,9
    lea dx,ReadError
    int 21h
    jmp Exit
ReadOK:
    mov ah,9
    lea dx,OK
    int 21h
    mov ah,9
    lea dx,Message2
    int 21h

    push ds
    pop ax
    mov es,ax

    mov ax,0301h   ;Try to write boot sector
    xor dx,dx     ; dl=0 - disk A:
    mov cl,1
    xor ch,ch
    lea bx,buffer
    int 13h
    jnc WriteOK
    
    mov ah,9
    lea dx,WriteError
    int 21h
    jmp Exit
WriteOK:
    mov ah,9
    lea dx,OK
    int 21h
Exit:
    mov ax,4c00h
    int 21h

Message    db "Reading image from boot.com......$"
Message2   db "Writing loader to floppy.........$"
OpenError  db "Can not read boot.com (Posibly file is absent)",10,13,"$"
ReadError  db "Can not read boot.com",10,13,"$"
WriteError db "Can not write loader (Posibly floppy is bad)",10,13,"$"
OK         db "OK",10,13,"$"
File       db "Boot.com",0
Buffer     db 512 dup(?)

END

Цитата:
по поводу fread:
if(err == 0) <--- вот это и будет настоящий error !!
в том сырце надо было записать именно 512 байт. Иначе ошибка.
боот сектор пишем...если че....

Цитата:
Да нет, просто в случае ошибки вывод будет таким:
error put on disk
write ok ))
действительно...просто я при программировании не обращаю внимание на текстовые строки...гораздо важнее значения флагов ))
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При входе в BIOS комп выключается через 10-15 сек pulsar1000 БИОС 6 18.04.2012 00:43
не загружает через cd-rom при настройке в bios 1st boot device cd-rom pe4en4ik БИОС 0 19.09.2011 09:44
Как переустановить Windows через Bios x-stylex БИОС 19 11.05.2011 14:24
Как посмотреть температуру проца через BIOS DEPrecat Любые вопросы от новичков 4 14.01.2011 21:05
форматирование жесткого диска через BIOS Дмитрий БИОС 8 22.03.2010 14:21
Настрйка загрузки две системы Windows через BIOS Staind БИОС 2 24.03.2008 19:05
Работа с компонентами через указатели Niflheimr C++ Builder 4 11.06.2007 15:30
работа через прокси FlamerZ Visual Basic 1 14.03.2006 21:22
Работа с Excel через OLE denism C++ Builder 3 07.08.2005 21:05
Работа с реестром через API Anonymous WinAPI 24 31.12.2003 16:41
Работа с BIOS через С++ Сашка C++ Builder 0 25.07.2003 13:31



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов