source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/AccessDPT.asm @ 568

Last change on this file since 568 was 568, checked in by krille_n_@…, 9 years ago

Changes:

  • SerDrive: Using named pipe mode (serdrive -p) now works under Windows XP/2000/Server 2003.
  • checksum.pl: Added a compatibility fix for 3Com 3C503 cards.
  • XTIDECFG will now scan every possible segment address to find and load the BIOS and/or its settings from EEPROM. This should simplify things for people using combined option ROMs.
  • Fixed a bug from r521 in BootSector.asm where the BIOS would not display a timeout error if it failed to load the boot sector from harddrive.
  • Fixed a bug from r541 in CompatibleDPT.asm where CompatibleDPT_CreateDeviceParameterTableExtensionToESBXfromDPTinDSSI would generate an invalid checksum in the DPTE.
  • Optimizations and other fixes.
File size: 4.9 KB
Line 
1; Project name  :   XTIDE Universal BIOS
2; Description   :   Functions for accessing DPT data.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
7;
8; This program is free software; you can redistribute it and/or modify
9; it under the terms of the GNU General Public License as published by
10; the Free Software Foundation; either version 2 of the License, or
11; (at your option) any later version.
12;
13; This program is distributed in the hope that it will be useful,
14; but WITHOUT ANY WARRANTY; without even the implied warranty of
15; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16; GNU General Public License for more details.
17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; AccessDPT_GetDriveSelectByteToAL
25;   Parameters:
26;       DS:DI:  Ptr to Disk Parameter Table
27;   Returns:
28;       AL:     Drive Select Byte
29;   Corrupts registers:
30;       Nothing
31;--------------------------------------------------------------------
32ALIGN JUMP_ALIGN
33AccessDPT_GetDriveSelectByteToAL:
34    mov     al, [di+DPT.bFlagsLow]
35    and     al, FLGL_DPT_SLAVE | FLGL_DPT_LBA
36    or      al, MASK_DRVNHEAD_SET   ; Bits set to 1 for old drives
37    ret
38
39
40;--------------------------------------------------------------------
41; AccessDPT_GetDeviceControlByteToAL
42;   Parameters:
43;       DS:DI:  Ptr to Disk Parameter Table
44;   Returns:
45;       AL:     Device Control Byte
46;   Corrupts registers:
47;       Nothing
48;--------------------------------------------------------------------
49ALIGN JUMP_ALIGN
50AccessDPT_GetDeviceControlByteToAL:
51%ifdef MODULE_IRQ
52
53%ifndef USE_UNDOC_INTEL
54    xor     al, al
55%endif
56
57    test    BYTE [di+DPT.bFlagsLow], FLGL_DPT_ENABLE_IRQ    ; Clears CF
58
59%ifdef USE_UNDOC_INTEL
60    salc    ; Clears AL using CF while preserving flags
61%endif
62
63    jnz     SHORT .EnableDeviceIrq
64    or      al, FLG_DEVCONTROL_nIEN ; Disable IRQ
65.EnableDeviceIrq:
66%else
67    mov     al, FLG_DEVCONTROL_nIEN ; Disable IRQ
68%endif ; MODULE_IRQ
69    ret
70
71
72;--------------------------------------------------------------------
73; AccessDPT_GetLCHStoAXBLBH
74;   Parameters:
75;       DS:DI:  Ptr to Disk Parameter Table
76;   Returns:
77;       AX:     Number of L-CHS cylinders
78;       BL:     Number of L-CHS heads
79;       BH:     Number of L-CHS sectors per track
80;   Corrupts registers:
81;       Nothing
82;--------------------------------------------------------------------
83AccessDPT_GetLCHStoAXBLBH:
84    mov     ax, [di+DPT.wLchsCylinders]
85    mov     bx, [di+DPT.wLchsHeadsAndSectors]
86    ret
87
88
89%ifdef MODULE_8BIT_IDE_ADVANCED
90;--------------------------------------------------------------------
91; AccessDPT_IsThisDeviceXTCF
92;   Parameters:
93;       DS:DI:  Ptr to Disk Parameter Table
94;   Returns:
95;       AH:     Device Type
96;       ZF:     Set if XTCF
97;               Cleared if some other device
98;   Corrupts registers:
99;       Nothing
100;--------------------------------------------------------------------
101AccessDPT_IsThisDeviceXTCF:
102    mov     ah, [di+DPT_ATA.bDevice]
103    cmp     ah, DEVICE_8BIT_XTCF_PIO8
104    je      SHORT .DeviceIsXTCF
105    cmp     ah, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD
106    je      SHORT .DeviceIsXTCF
107    cmp     ah, DEVICE_8BIT_XTCF_DMA
108.DeviceIsXTCF:
109    ret
110%endif ; MODULE_8BIT_IDE_ADVANCED
111
112
113%ifdef MODULE_EBIOS
114;--------------------------------------------------------------------
115; AccessDPT_GetLbaSectorCountToBXDXAX
116;   Parameters:
117;       DS:DI:  Ptr to Disk Parameter Table
118;   Returns:
119;       BX:DX:AX:   48-bit sector count
120;   Corrupts registers:
121;       Nothing
122;--------------------------------------------------------------------
123AccessDPT_GetLbaSectorCountToBXDXAX:
124    mov     ax, [di+DPT.twLbaSectors]
125    mov     dx, [di+DPT.twLbaSectors+2]
126    mov     bx, [di+DPT.twLbaSectors+4]
127    ret
128%endif ; MODULE_EBIOS
129
130
131;--------------------------------------------------------------------
132; Returns pointer to DRVPARAMS for master or slave drive.
133;
134; AccessDPT_GetPointerToDRVPARAMStoCSBX
135;   Parameters:
136;       DS:DI:  Ptr to Disk Parameter Table
137;   Returns:
138;       CS:BX:  Ptr to DRVPARAMS
139;   Corrupts registers:
140;       Nothing
141;--------------------------------------------------------------------
142AccessDPT_GetPointerToDRVPARAMStoCSBX:
143    call    AccessDPT_GetIdevarsToCSBX
144    add     bx, BYTE IDEVARS.drvParamsMaster    ; CS:BX points to Master Drive DRVPARAMS
145    test    BYTE [di+DPT.bFlagsLow], FLGL_DPT_SLAVE
146    jz      SHORT .ReturnPointerToDRVPARAMS
147    add     bx, BYTE DRVPARAMS_size             ; CS:BX points to Slave Drive DRVPARAMS
148.ReturnPointerToDRVPARAMS:
149    ret
150
151
152;--------------------------------------------------------------------
153; Needed many times during initialization so it is better to
154; make it as a function to save bytes.
155;
156; AccessDPT_GetIdevarsToCSBX
157;   Parameters:
158;       DS:DI:  Ptr to Disk Parameter Table
159;   Returns:
160;       CS:BX:  Ptr to IDEVARS for the drive
161;   Corrupts registers:
162;       Nothing
163;--------------------------------------------------------------------
164AccessDPT_GetIdevarsToCSBX:
165    eMOVZX  bx, [di+DPT.bIdevarsOffset]
166    ret
167
Note: See TracBrowser for help on using the repository browser.