source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Menus/DriveXlate.asm@ 492

Last change on this file since 492 was 492, checked in by gregli@…, 12 years ago

Removed the dependency between MODULE_BOOT_MENU and MODULE_HOTKEYS. With these changes, 0, 1, or 2 of them can be included in a build. This change also means that the hotkeys don't work while the menu is up. But the most important hotkey there was for Rom Boot, and that has been added to the menu as a choice proper. Lots of changes across the board in the hotkeys code - even if we eventually back this change out (becaue, for example we want hotkeys to work in the menu) we should probably start from this base and add that functionality back in, as these changes results in approximately 120 bytes of savings and includes new functionality, such as the Rom Boot menu item and the Com Detect hotkey.

File size: 5.1 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Functions for swapping drive letters.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 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; DriveXlate_ConvertDriveLetterInDLtoDriveNumber
25; Parameters:
26; DS: RAMVARS segment
27; DL: Drive letter ('A'...)
28; Returns:
29; DL: Drive number (0xh for Floppy Drives, 8xh for Hard Drives)
30; Corrupts registers:
31; AX
32;--------------------------------------------------------------------
33DriveXlate_ConvertDriveLetterInDLtoDriveNumber:
34 call DriveXlate_GetLetterForFirstHardDriveToAX
35 cmp dl, al
36 jb SHORT .ConvertLetterInDLtoFloppyDriveNumber
37
38 ; Convert letter in DL to Hard Drive number
39 sub dl, al
40 or dl, 80h
41 ret
42
43.ConvertLetterInDLtoFloppyDriveNumber:
44 sub dl, DEFAULT_FLOPPY_DRIVE_LETTER
45 ret
46
47%ifdef MODULE_HOTKEY
48%if HotkeyBar_FallThroughTo_DriveXlate_ConvertDriveLetterInDLtoDriveNumber <> DriveXlate_ConvertDriveLetterInDLtoDriveNumber
49 %error "DriveXlate_ConvertDriveLetterInDLtoDriveNumber must be at the top of DriveXlate.asm, and that file must immediately follow HotKeys.asm"
50%endif
51%endif
52
53;--------------------------------------------------------------------
54; DriveXlate_ConvertDriveNumberFromDLtoDriveLetter
55; Parameters:
56; DL: Drive number (0xh for Floppy Drives, 8xh for Hard Drives)
57; DS: RAMVARS Segment
58; Returns:
59; DL: Drive letter ('A'...)
60; CF: Set if Hard Drive
61; Clear if Floppy Drive
62; Corrupts registers:
63; AX
64;--------------------------------------------------------------------
65DriveXlate_ConvertDriveNumberFromDLtoDriveLetter:
66 test dl, dl
67 jns SHORT .GetDefaultFloppyDrive
68
69 ; Store default hard drive to boot from
70 call DriveXlate_GetLetterForFirstHardDriveToAX
71 sub dl, 80h
72 add dl, al
73 stc
74 ret
75
76.GetDefaultFloppyDrive:
77 add dl, DEFAULT_FLOPPY_DRIVE_LETTER ; Clears CF
78 ret
79
80
81;--------------------------------------------------------------------
82; Returns letter for first hard disk. Usually it will be 'C' but it
83; can be higher if more than two floppy drives are found.
84;
85; DriveXlate_GetLetterForFirstHardDriveToAX
86; Parameters:
87; DS: RAMVARS segment
88; Returns:
89; AX: Upper case letter for first hard disk
90; Corrupts registers:
91; Nothing
92;--------------------------------------------------------------------
93DriveXlate_GetLetterForFirstHardDriveToAX:
94 call FloppyDrive_GetCountToAX
95 add al, DEFAULT_FLOPPY_DRIVE_LETTER
96 MAX_U al, DEFAULT_HARD_DRIVE_LETTER
97 ret
98
99
100;--------------------------------------------------------------------
101; DriveXlate_ToOrBack
102; Parameters:
103; DL: Drive number to be possibly translated
104; DS: RAMVARS segment
105; Returns:
106; DL: Translated drive number
107; Corrupts registers:
108; DI
109;--------------------------------------------------------------------
110ALIGN JUMP_ALIGN
111DriveXlate_ToOrBack:
112 xchg di, ax ; Backup AX
113
114 mov ah, 80h ; Assume hard disk
115 mov al, [RAMVARS.xlateVars+XLATEVARS.bHDSwap]
116 test dl, ah ; Hard disk?
117 jnz SHORT .SwapDrive ; If so, jump to swap
118 mov al, [RAMVARS.xlateVars+XLATEVARS.bFDSwap]
119 cbw
120
121ALIGN JUMP_ALIGN
122.SwapDrive:
123 cmp ah, dl ; Swap DL from 00h/80h to xxh?
124 je SHORT .SwapToXXhInAL
125 cmp al, dl ; Swap DL from xxh to 00h/80h?
126 jne SHORT .RestoreAXandReturn
127 mov al, ah
128ALIGN JUMP_ALIGN
129.SwapToXXhInAL:
130 mov dl, al
131ALIGN JUMP_ALIGN
132.RestoreAXandReturn:
133 xchg ax, di ; Restore AX
134 ret
135
136
137;--------------------------------------------------------------------
138; Resets drive swapping variables to defaults (no swapping).
139;
140; DriveXlate_Reset
141; Parameters:
142; DS: RAMVARS segment
143; Returns:
144; Nothing
145; Corrupts registers:
146; Nothing
147;--------------------------------------------------------------------
148DriveXlate_Reset:
149 mov WORD [RAMVARS.xlateVars+XLATEVARS.wFDandHDswap], 8000h
150 ret
151
152
153;--------------------------------------------------------------------
154; Stores drive to be swapped.
155;
156; DriveXlate_SetDriveToSwap
157; Parameters:
158; DL: Drive to swap to 00h or 80h
159; DS: RAMVARS segment
160; Returns:
161; Nothing
162; Corrupts registers:
163; Nothing
164;--------------------------------------------------------------------
165DriveXlate_SetDriveToSwap:
166 test dl, dl ; Floppy drive?
167 js SHORT .SetHardDriveToSwap
168
169 ; Set Floppy Drive to swap
170 mov [RAMVARS.xlateVars+XLATEVARS.bFDSwap], dl
171 ret
172
173.SetHardDriveToSwap:
174 mov [RAMVARS.xlateVars+XLATEVARS.bHDSwap], dl
175 ret
Note: See TracBrowser for help on using the repository browser.