source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH23h_HFeatures.asm@ 615

Last change on this file since 615 was 615, checked in by Tomi Tilli, 4 years ago
  • COMMAND_IDLE was not enough to disable standby timer from 1,8" Toshiba HDD. Apparently idle mode is the default mode. Added COMMAND_STAND_BY and that does what COMMAND_IDLE was supposed to do. Without COMMAND_STAND_BY the 1,8" Toshiba HDD experienced some random pauses (=>retry/abort... prompts) especially with Freedos 1.3RC4 but MS-DOS 7.10 (Win98) was mostly OK.
  • Added FEATURE_ENABLE_ADVANCED_POWER_MANAGEMENT command to set drive to maximum performance mode when standby timer is disabled. This feature needs a bit more work. See TODO comments in sources.
File size: 5.1 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Int 13h function AH=23h,
3; Set Controller Features Register.
4
5;
6; XTIDE Universal BIOS and Associated Tools
7; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
8;
9; This program is free software; you can redistribute it and/or modify
10; it under the terms of the GNU General Public License as published by
11; the Free Software Foundation; either version 2 of the License, or
12; (at your option) any later version.
13;
14; This program is distributed in the hope that it will be useful,
15; but WITHOUT ANY WARRANTY; without even the implied warranty of
16; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17; GNU General Public License for more details.
18; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19;
20
21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
25; Int 13h function AH=23h, Set Controller Features Register.
26;
27; AH23h_HandlerForSetControllerFeatures
28; Parameters:
29; AL, CX: Same as in INTPACK
30; DL: Translated Drive number
31; DS:DI: Ptr to DPT (in RAMVARS segment)
32; SS:BP: Ptr to IDEPACK
33; Parameters on INTPACK:
34; AL: Feature Number (parameter to Features Register = subcommand)
35; (Parameter registers are undocumented, these are specific for this BIOS):
36; BL: Parameter to Sector Count Register (subcommand specific)
37; BH: Parameter to LBA Low / Sector Number Register (subcommand specific)
38; CL: Parameter to LBA Middle / Cylinder Low Register (subcommand specific)
39; CH: Parameter to LBA High / Cylinder High Register (subcommand specific)
40; Returns with INTPACK:
41; AH: Int 13h return status
42; CF: 0 if successful, 1 if error
43;--------------------------------------------------------------------
44AH23h_HandlerForSetControllerFeatures:
45 xchg si, ax ; SI = Feature Number
46 mov dx, [bp+IDEPACK.intpack+INTPACK.bx]
47%ifndef USE_186
48 call AH23h_SetControllerFeatures
49 jmp Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
50%else
51 push Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
52 ; Fall to AH23h_SetControllerFeatures
53%endif
54
55
56;--------------------------------------------------------------------
57; AH23h_SetControllerFeatures
58; Parameters:
59; DL: Parameter to Sector Count Register (subcommand specific)
60; DH: Parameter to LBA Low / Sector Number Register (subcommand specific)
61; CL: Parameter to LBA Middle / Cylinder Low Register (subcommand specific)
62; CH: Parameter to LBA High / Cylinder High Register (subcommand specific)
63; SI: Feature Number (parameter to Features Register = subcommand)
64; DS:DI: Ptr to DPT (in RAMVARS segment)
65; SS:BP: Ptr to IDEPACK
66; Returns:
67; AH: Int 13h return status
68; CF: 0 if successful, 1 if error
69; Corrupts registers:
70; AL, BX, CX, DX
71;--------------------------------------------------------------------
72AH23h_SetControllerFeatures:
73 mov al, COMMAND_SET_FEATURES
74 mov bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_BSY, FLG_STATUS_BSY)
75 jmp Idepack_StoreNonExtParametersAndIssueCommandFromAL
76
77
78;--------------------------------------------------------------------
79; AH23h_Enable8bitPioMode
80; AH23h_Disable8bitPioMode
81; Parameters:
82; DS:DI: Ptr to DPT (in RAMVARS segment)
83; SS:BP: Ptr to IDEPACK
84; Returns:
85; AH: Int 13h return status
86; CF: 0 if successful, 1 if error
87; Corrupts registers:
88; AL, BX, CX, DX, SI
89;--------------------------------------------------------------------
90%ifdef MODULE_8BIT_IDE
91AH23h_Enable8bitPioMode:
92 mov si, FEATURE_ENABLE_8BIT_PIO_TRANSFER_MODE
93 jmp SHORT AH23h_SetControllerFeatures
94
95%ifdef MODULE_8BIT_IDE_ADVANCED
96AH23h_Disable8bitPioMode:
97 mov si, FEATURE_DISABLE_8BIT_PIO_TRANSFER_MODE
98 call AH23h_SetControllerFeatures
99 xor ah, ah ; Clear error since modern drives might not understand the command and are
100 ret ; always in 16-bit mode anyway
101%endif ; MODULE_8BIT_IDE_ADVANCED
102%endif ; MODULE_8BIT_IDE
103
104
105;--------------------------------------------------------------------
106; Enable/disable advanced power management command can be used to scale
107; power consumption and performance. Drive supporting Enable APM might not
108; support Disable AMP so we set the drive to max performance if stand by
109; timer value is 0 (idle/standby disabled)
110;
111;
112; AH23h_EnableOrDisableAdvancedPowerManagement
113; Parameters:
114; DL: Stand By timer value (0=disable APM)
115; DS:DI: Ptr to DPT (in RAMVARS segment)
116; SS:BP: Ptr to IDEPACK
117; Returns:
118; AH: Int 13h return status
119; CF: 0 if successful, 1 if error
120; Corrupts registers:
121; AL, BX, CX, DX, SI
122;--------------------------------------------------------------------
123%ifdef MODULE_POWER_MANAGEMENT
124AH23h_EnableOrDisableAdvancedPowerManagement:
125 mov si, FEATURE_ENABLE_ADVANCED_POWER_MANAGEMENT
126 test dl, dl
127 jnz SHORT .EnablePowerSave
128 dec dx
129 dec dx ; DL = FEh = Maximum performance
130 jmp AH23h_SetControllerFeatures
131
132; TODO: We should add power management level to IDEVARS to be adjustable with xtidecfg
133.EnablePowerSave:
134 mov dl, 0BFh ; For Toshiba 1.8" HDD: 80h...BFh = Mode 1
135 jmp AH23h_SetControllerFeatures
136%endif ; %ifdef MODULE_POWER_MANAGEMENT
Note: See TracBrowser for help on using the repository browser.