home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / lib4a86 / doc / diskll.doc < prev    next >
Text File  |  1992-02-02  |  7KB  |  148 lines

  1.   ─────────────────────────────────────────────────────────────────────────────
  2.   Dokumentation zur Datei: DISKLL.MAC
  3.  
  4.   ─────────────────────────────────────────────────────────────────────────────
  5.    
  6.     DISKLL.MAC   - MACROs und Definitionen zur Bearbeitung von Disketten/
  7.                    Platten auf Lowlevel-Ebene
  8.                    (für den Assembler A86)
  9.    
  10.                    (c) Bernd Schemmer 1990 - 1992
  11.                    Letzter Update: 02.02.1992
  12.    
  13.    
  14.     ■ Aufbau eines BPB
  15.    
  16.      BIOS_Parameter_Block STRUC [BX]
  17.       BPB_Bytes_Per_Sektor   dw ?            ; Anzahl Byte per Sektor
  18.       BPB_Sektor_Per_Cluster db ?            ; Anzahl Sektoren per Cluster
  19.       BPB_Reserved_Sektors   dw ?            ; Anzahl reservierter Sektoren
  20.       BPB_FATs               db ?            ; Anzahl FATs
  21.       BPB_RootDirEntrys      dw ?            ; max. Anzahl Einträge im Root-Dir
  22.       BPB_MaxSektors         dw ?            ; max. Anzahl Sektoren
  23.       BPB_MediaDeskriptor    db ?            ; Media-Deskriptor-Byte
  24.       BPB_Sektors_per_FAT    dw ?            ; Anzahl Sektoren/FAT
  25.       BPB_Sektors_per_Track  dw ?            ; Anzahl Sektoren/Spur
  26.       BPB_Heads              dw ?            ; Anzahl der Schreib/Lese-Köpfe
  27.       BPB_FirstSectorOffs    dd ?            ; Offset des ersten Sektors
  28.                                              ; (= Anzahl der versteckten Sektoren)
  29.       BPB_Unknown            db 0Bh dup ?
  30.  
  31.        *** ab DOS 4.0:
  32.  
  33.       BPB_MaxSektors1        dd ?            ; Gesamt-Anzahl der Sektoren falls
  34.                                              ; BPB_MaxSektors gleich 0 ist
  35.       BPB_Unknown1           db 7 dup ?
  36.                          ENDS
  37.    
  38.    
  39.     ■ Aufbau eines Disk-Boot-Blocks (DOS 3.3)
  40.    
  41.      DiskBootBlock3 STRUC [BX]
  42.       DiskBootBL3_JMP              db 3 dup ?     ; JMP-Kommando
  43.       DiskBootBL3_Name             db 8 dup ?     ; Name des Systems
  44.       DiskBootBL3_Bytes_Sector     dw ?           ; Anzahl Bytes/Sektor
  45.       DiskBootBL3_Sector_Cluster   db ?           ; Anzahl Sektoren/Cluster
  46.                                                  ; (Zweierpotenz!)
  47.       DiskBootBL3_Reserved_Sectors dw ?           ; Anzahl reservierter Sektoren
  48.       DiskBootBL3_FATS             db ?           ; Anzahl FATs
  49.       DiskBootBL3_RootDirEntrys    dw ?           ; max. Anzahl Root-Dir-Entrys
  50.       DiskBootBL3_MaxSektors       dw ?           ; max. Anzahl Sektoren
  51.       DiskBootBL3_MediaID          db ?           ; Media-Deskriptor-Byte
  52.       DiskBootBL3_Sektors_Fat      dw ?           ; Anzahl Sektoren/FAT
  53.       DiskBootBL3_Sektors_Track    dw ?           ; Anzahl Sektoren/Spur
  54.       DiskBootBL3_Heads            dw ?           ; Anzahl Schreib/Leseköpfe
  55.       DiskBootBL3_HiddenSektors    dw ?           ; Anzahl versteckter Sektoren
  56.                    ENDS
  57.    
  58.    
  59.     ■ Aufbau eines Disk-Boot-Blocks (DOS 4.xx)
  60.    
  61.      DiskBootBlock4 STRUC [BX]
  62.       DiskBootBL4_JMP              db 3 dup ?     ; JMP-Kommando
  63.       DiskBootBL4_Name             db 8 dup ?     ; Name des Systems
  64.       DiskBootBL4_Bytes_Sector     dw ?           ; Anzahl Bytes/Sektor
  65.       DiskBootBL4_Sector_Cluster   db ?           ; Anzahl Sektoren/Cluster
  66.                                                  ; (Zweierpotenz!)
  67.       DiskBootBL4_Reserved_Sectors dw ?           ; Anzahl reservierter Sektoren
  68.       DiskBootBL4_FATS             db ?           ; Anzahl FATs
  69.       DiskBootBL4_RootDirEntrys    dw ?           ; max. Anzahl Root-Dir-Entrys
  70.       DiskBootBL4_MaxSektors       dw ?           ; max. Anzahl Sektoren
  71.       DiskBootBL4_MediaID          db ?           ; Media-Deskriptor-Byte
  72.       DiskBootBL4_Sektors_Fat      dw ?           ; Anzahl Sektoren/FAT
  73.       DiskBootBL4_Sektors_Track    dw ?           ; Anzahl Sektoren/Spur
  74.       DiskBootBL4_Heads            dw ?           ; Anzahl Schreib/Leseköpfe
  75.       DiskBootBL4_HiddenSektors    dw ?           ; Anzahl versteckter Sektoren
  76.       DiskBootBL4_Unknown1         dw ?
  77.       DiskBootBL4_MaxSektors1      dd ?           ; max. Anzahl Sektoren, falls
  78.                                                   ; DiskBootBL4_MaxSektors = 0
  79.       DiskBootBL4_Physical_Drive   db ?           ; physikalische LW-Nummer
  80.       DiskBootBL4_Unknown2         db ?
  81.       DiskBootBL4_ID               db ?           ; erweiterter Urlader-Kennsatz
  82.       DiskBootBL4_IDNumber         dd ?           ; 32-Bit Seriennummer
  83.       DiskBootBL4_Name1            db 0Bh dup ?   ; Name des Datenträgers
  84.       DiskBootBL4_Unknown3         db 08h dup ?
  85.                     ENDS
  86.    
  87.     ----------------------------
  88.     GetDiskBootBlock
  89.    
  90.     Funktion:  Ermittelt den Disk-Boot-Block
  91.    
  92.     Aufruf:    GetDiskBootBlock
  93.    
  94.     Eingabe:   DL = Laufwerk (0 = A, 1 = B, usw.
  95.                               80h = 1. Festplattte  - wird nicht überprüft!)
  96.                ES:BX -> Puffer für den BootBlock
  97.    
  98.     Ausgabe:   CF = 0 ->> okay
  99.                           Puffer gefüllt
  100.                CF = 1 ->> Fehler
  101.                           AX = Fehlernummer des Interrupt 13h
  102.    
  103.      GetDiskBootBlock MACRO
  104.               mov ax,0201h         ; Lese einen Sektor
  105.               mov dh,0             ; Kopf 0
  106.               mov cx,1             ; Spur 0, Sektor 1
  107.               int 13h
  108.      #EM
  109.    
  110.    
  111.     ■ Aufbau einer Disk-Partitions-Tabelle
  112.    
  113.      DiskPartitionsTabelle STRUC [BX]
  114.       DPT_Status        db ?       ; Status der Partition (0 oder 080h = bootbar)
  115.       DPT_First_Head    db ?       ; erster Schreib/Lesekopf
  116.       DPT_First_Sektor  dw ?       ; erster Sektor
  117.       DPT_PartitionsTyp db ?       ; Partitions-Typ
  118.       DPT_Last_Head     db ?       ; letzter Schreib/Lesekopf
  119.       DPT_Last_Sektor   dw ?       ; letzter Sektor
  120.       DPT_FirstAbsSek   dd ?       ; erster absoluter Sektor
  121.       DPT_SektorCount   dd ?       ; Gesamt-Anzahl Sektoren
  122.                            ENDS
  123.    
  124.     ■ Offset des Master-Boot-Programms
  125.    
  126.     MasterBootProgramm EQU 0000h
  127.    
  128.     ■ Offsets der einzelnen Partitions-Tabellen:
  129.    
  130.     Partition1    EQU 01BEh
  131.     Partition2    EQU 01CEh
  132.     Partition3    EQU 01DEh
  133.     Partition4    EQU 01EEh
  134.    
  135.    
  136.     ■ Aufbau eines Directory-Eintrages
  137.    
  138.      DirEntry STRUC [BX]
  139.       DirEntry_Name     db 8 dup ?
  140.       DirEntry_Ext      db 3 dup ?
  141.       DirEntry_Attr     db ?
  142.       DirEntry_Reserved db 0Ah dup ?
  143.       DirEntry_Time     dw ?
  144.       DirEntry_Date     dw ?
  145.       DirEntry_Cluster  dw ?
  146.       DirEntry_Length   dd ?
  147.               ENDS
  148.