[turbo C][DOS] Operacje na FD w Dosie?

0

Czy można jakoś programowo sprawdzić czy dyskietka jest w FDD?
Myślałem że taki kod da rade:

FILE* plik = fopen("a:\xxx", "w");
if(plik) to_jest_dyskietka;

ale jeżeli dyskietki nie ma to wyskakują dosowe komunikaty które wieszają mi program.

0
#include <stdio.h>

int main(){
  signed short rax;  // 16 bit a czysty int nie zawsze musi miec :>
  asm{
    int 0x11
    mov [rax],ax
  }
  if(rax==-1){
    // Windows NT 4.0 i chyba nowsze zwraca ((signed)-1/0xffff)
    // mialem nt 4 i nawet mile go wspominam, ale int 11h nie chcialo mi lazic :>
    // to jest tylko zalozenie, jesli kom nie ma dyskietek, to nie mam zielonego
    // pojecia jak to sprawdzic...
    printf("konsola windowsa nt, zakladam, ze masz A:\n");
    // pod nt flop jest zawsze A:, B: nie istnieje, jesli nie ma 2 stacji, a zmiana powoduje blad
    // zmiana na nieistniejace ewentualnie A: tez zwroci blad, wiec mozna poprobowac z chdir
    // btw to tylko dywagacje ;p
  }else{
    if(rax & 1){
      // zapalony bit 0 swiadczy istnieniu systemie jakiejkolwiek stacji dyskietek
      // linux + dosemu + freedos tu wchodzi nawet gdy nie ma zadnego flopa
      // tez nie wiem, jak toto sprawdzic :>
      if(!((rax>>6)& 3)){
        // bity 6 i 7 to liczba stacji pomniejszona o 1 czyli dla zera w nich odpowiednio jedna
        printf("odkryta stacja %c:\n",*((char far*)0x00400104L)+'A');
        // *((char far*)0x00400104L) == *((char far*)MK_FP(0x0040,0x0104))
        // pod adresem 0040:0104 (hex) jest zapisany numer stacji pod dosem
        // odpowiednio 0 - A:, 1 - B: , ..., stad + 'A'
      }else{
        // tu sytuacja jasna, sa minimum 2 stacje/max 4, ale dos tylko 2 zamapuje : A: i B: 
        // reszty nie uzyje, wiec swobodnie mozna pisac:
        printf("odkryto stacje dyskietek A: i B:\n");
      }
    }else{
      printf("brak stacji dyskietek\n");
    }
  }
  return 0;
}
0

Z tego co widze to ten kod sprawdza jakie FDD są podłączone do kompa. A ja chce sprawdzić tylko czy w mojej jedynej stacji dyskietek jest dyskietka czy tez jej nie ma.

0

Moze po prostu sprobuj cos odczytac: http://www.ctyme.com/intr/rb-0607.htm

0

Dzięki za help'a. Troche pokombinowałem i zamiast asemblerowych wstawek udało mi się to osiągnąć cel przy pomosy funkcji biosdisk.

1 użytkowników online, w tym zalogowanych: 0, gości: 1