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

Last change on this file since 154 was 150, checked in by Tomi Tilli, 13 years ago

Changes to XTIDE Universal BIOS:

  • Redesigned Disk Parameter Tables.
  • Code generalizations for supporting non-IDE devices in the future.
File size: 3.8 KB
RevLine 
[99]1; Project name : XTIDE Universal BIOS
[3]2; Description : Functions for accessing DPT data.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
[150]8; AccessDPT_GetDriveSelectByteToAL
9; Parameters:
10; DS:DI: Ptr to Disk Parameter Table
11; Returns:
12; AL: Drive Select Byte
13; Corrupts registers:
14; Nothing
15;--------------------------------------------------------------------
16ALIGN JUMP_ALIGN
17AccessDPT_GetDriveSelectByteToAL:
18 mov al, [di+DPT.wFlags]
19 and al, FLG_DRVNHEAD_LBA | FLG_DRVNHEAD_DRV
20 or al, MASK_DRVNHEAD_SET ; Bits set to 1 for old drives
21 ret
22
23
24;--------------------------------------------------------------------
25; AccessDPT_GetDeviceControlByteToAL
26; Parameters:
27; DS:DI: Ptr to Disk Parameter Table
28; Returns:
29; AL: Device Control Byte
30; Corrupts registers:
31; Nothing
32;--------------------------------------------------------------------
33ALIGN JUMP_ALIGN
34AccessDPT_GetDeviceControlByteToAL:
35 xor al, al
36 test BYTE [di+DPT.wFlags], FLG_DPT_ENABLE_IRQ
37 jnz SHORT .EnableDeviceIrq
38 or al, FLG_DEVCONTROL_nIEN ; Disable IRQ
39.EnableDeviceIrq:
40 ret
41
42
43;--------------------------------------------------------------------
44; AccessDPT_GetAddressingModeForWordLookToBX
45; Parameters:
46; DS:DI: Ptr to Disk Parameter Table
47; Returns:
48; BX: Addressing Mode (L-CHS, P-CHS, LBA28, LBA48) shifted for WORD lookup
49; Corrupts registers:
50; Nothing
51;--------------------------------------------------------------------
52ALIGN JUMP_ALIGN
53AccessDPT_GetAddressingModeForWordLookToBX:
54 mov bl, [di+DPT.wFlags]
55 and bx, BYTE MASK_DPT_ADDRESSING_MODE
56 eSHR_IM bx, ADDRESSING_MODE_FIELD_POSITION-1
57 ret
58
59
60;--------------------------------------------------------------------
[3]61; AccessDPT_GetLCHSfromPCHS
62; Parameters:
63; DS:DI: Ptr to Disk Parameter Table
64; Returns:
65; AX: Number of L-CHS sectors per track
66; BX: Number of L-CHS cylinders
67; DX: Number of L-CHS heads
68; Corrupts registers:
69; Nothing
70;--------------------------------------------------------------------
71ALIGN JUMP_ALIGN
72AccessDPT_GetLCHSfromPCHS:
73 xchg ax, cx
[150]74 mov cl, [di+DPT.wFlags]
75 and cl, MASK_DPT_CHS_SHIFT_COUNT ; Load shift count
76 mov bx, [di+DPT.wPchsCylinders] ; Load P-CHS cylinders
77 shr bx, cl ; Shift to L-CHS cylinders
[3]78 xchg cx, ax
[150]79 eMOVZX dx, BYTE [di+DPT.bLchsHeads] ; Load L-CHS heads
80 eMOVZX ax, BYTE [di+DPT.bPchsSectors] ; Load Sectors per track
[3]81 ret
82
83
84;--------------------------------------------------------------------
85; AccessDPT_TestIdeVarsFlagsForMasterOrSlaveDrive
86; Parameters:
87; AX: Bitmask to test DRVPARAMS.wFlags
88; DS:DI: Ptr to Disk Parameter Table
89; Returns:
90; ZF: Set if tested bit was zero
91; Cleared if tested bit was non-zero
92; CF: 0
93; Corrupts registers:
94; BX
95;--------------------------------------------------------------------
96ALIGN JUMP_ALIGN
97AccessDPT_TestIdeVarsFlagsForMasterOrSlaveDrive:
98 call AccessDPT_GetPointerToDRVPARAMStoCSBX
99 test [cs:bx+DRVPARAMS.wFlags], ax
100 ret
101
102;--------------------------------------------------------------------
103; Returns pointer to DRVPARAMS for master or slave drive.
104;
105; AccessDPT_GetPointerToDRVPARAMStoCSBX
106; Parameters:
107; DS:DI: Ptr to Disk Parameter Table
108; Returns:
109; CS:BX: Ptr to DRVPARAMS
110; Corrupts registers:
111; Nothing
112;--------------------------------------------------------------------
113ALIGN JUMP_ALIGN
114AccessDPT_GetPointerToDRVPARAMStoCSBX:
[150]115 eMOVZX bx, [di+DPT.bIdevarsOffset] ; CS:BX points to IDEVARS
116 add bx, BYTE IDEVARS.drvParamsMaster ; CS:BX points to Master Drive DRVPARAMS
117 test BYTE [di+DPT.wFlags], FLG_DPT_SLAVE
118 jz SHORT .ReturnPointerToDRVPARAMS
119 add bx, BYTE DRVPARAMS_size ; CS:BX points to Slave Drive DRVPARAMS
120.ReturnPointerToDRVPARAMS:
[3]121 ret
Note: See TracBrowser for help on using the repository browser.