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

Last change on this file since 589 was 589, checked in by Krister Nordvall, 9 years ago

Changes:

  • BIOS: Fixed a purely cosmetic bug from r542 where, in builds containing MODULE_EBIOS, the boot menu would display an incorrect drive size (0.4 kB with MODULE_STRINGS_COMPRESSED or 0.5 kB without) for old drives with no support for LBA.
  • Fixed a bug from r392 where Vision_DetectAndReturnIDinAXandPortInDXifControllerPresent would return the ID in AL instead of AH (if DANGEROUS_DETECTION had been defined).
  • Fixed a bug from r587 in AdvAtaInit.asm that would prevent detection of QDI Vision controllers.
  • Also changed how the QDI Vision IDs are defined (removed the need for shifting) to avoid confusion. This fixed a potential bug from r587 in AdvAtaInit.asm where some IDs were not being shifted.
  • Fixed a bug in PDC20x30.asm from r587 where GetPdcIDtoAX would not return with the IDE base port in DX so DisablePdcProgrammingMode would fail.
  • Made some changes to ModuleDependency.inc and other files so that MODULE_ADVANCED_ATA now requires USE_386. Consequently it is no longer included in the regular AT-builds, only in the 386_8k-build.
  • Moved the UNROLL_SECTORS_IN_CX_TO_xWORDS macros from IDE_8bit.inc to IdeIO.inc which means it's now possible to build a BIOS without MODULE_8BIT_IDE.
  • XTIDECFG: Added a minimum DOS version check (since it needs DOS version 2+) to allow the program to quit gracefully in the unlikely scenario where someone tries to run it under DOS version 1.
  • Made some changes to Drive.asm to improve drive enumeration. The old method using GET_DOS_DRIVE_PARAMETER_BLOCK_FOR_SPECIFIC_DRIVE worked well in Windows XP but not in Windows 98 SE (in Windows or in DOS mode). The two problems were; 1) The function call would access the drives which on single floppy drive systems would cause Windows to swap between A: and B: (throwing a blue screen asking the user to insert a disk etc). 2) Only floppy drives and FAT16 drives would be available in the list of drives, no FAT32/optical/network drives.
  • Improved code in IdeControllerMenu.asm so that the default port addresses for all IDE interfaces are now restored when (re-)selecting the (same) type of IDE device.
  • Also made it impossible to select a device type unless the required module is included in the loaded BIOS.
  • The version check done when loading a BIOS now uses the FLASH_SIGNATURE definition from Version.inc. Any changes affecting RomVars now only requires updating that definition. This means that changes to RomVars must be implemented in both the BIOS and XTIDECFG before being committed to the repository.
  • Added a compatibility fix for 3Com 3C503 cards to the ROM checksumming code in Buffers.asm (Buffers_GenerateChecksum).
  • SerDrive: Made some minor changes to file names and paths to improve compatibility with case sensitive environments.
  • BIOSDRVS: Made a minor size optimization which as a side effect also makes it compatible with all DOS versions including DOS version 1.
  • Library: Renamed the WAIT_RETRACE_IF_NECESSARY_THEN macro to CALL_WAIT_FOR_RETRACE_IF_NECESSARY_THEN and made a tail-call-optimized version of it (JMP_WAIT_FOR_RETRACE_IF_NECESSARY_THEN).
  • A speed optimization to the eRCL_IM macro for 386 and higher. This change breaks emulation in the sense that the macro will fail when given a memory operand as the first parameter.
  • Other minor optimizations and fixes.
File size: 16.3 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Int 13h BIOS functions (Floppy and Hard disk).
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; Int 13h software interrupt handler.
25; This handler changes stack to top of stolen conventional memory
26; and then calls the actual INT 13h handler (Int13h_DiskFunctionsHandler).
27;
28; Int13h_DiskFunctionsHandlerWithStackChange
29; Parameters:
30; AH: Bios function
31; DL: Drive number
32; Other: Depends on function
33; Returns:
34; Depends on function
35;--------------------------------------------------------------------
36%ifdef RELOCATE_INT13H_STACK
37ALIGN JUMP_ALIGN
38Int13h_DiskFunctionsHandlerWithStackChange:
39 sti ; Enable interrupts
40 ; TODO: Maybe we need to save Flags (DF) as well?
41 push ds ; Save DS:DI on the original stack
42 push di
43 call RamVars_GetSegmentToDS
44
45 ; Store entry registers to RAMVARS
46%ifdef USE_386
47 pop DWORD [RAMVARS.dwStackChangeDSDI]
48%else
49 pop WORD [RAMVARS.wStackChangeDI] ; Pop DS:DI to the top of what
50 pop WORD [RAMVARS.wStackChangeDS] ; is to become the new stack
51%endif
52 mov [RAMVARS.fpInt13hEntryStack], sp
53 mov [RAMVARS.fpInt13hEntryStack+2], ss
54
55 ; Load new stack and restore DS and DI
56 mov di, ds ; We can save 2 bytes by using PUSH/POP but it's slower
57 mov ss, di ; No need to wrap with CLI/STI since this is for AT only (286+)
58 mov sp, RAMVARS.rgbTopOfStack-4
59 pop di ; DI before stack change
60 pop ds ; DS before stack change
61
62 ; Call INT 13h
63 pushf
64 push cs
65 call Int13h_DiskFunctionsHandler
66
67 ; Restore stack (we must not corrupt FLAGS!)
68%ifdef USE_386
69 lss sp, [ss:RAMVARS.fpInt13hEntryStack]
70%else
71 cli
72 mov sp, [ss:RAMVARS.fpInt13hEntryStack]
73 mov ss, [ss:RAMVARS.fpInt13hEntryStack+2]
74 sti
75%endif
76 retf 2 ; Skip FLAGS from stack
77%endif ; RELOCATE_INT13H_STACK
78
79
80;--------------------------------------------------------------------
81; Int 13h software interrupt handler.
82; Jumps to specific function defined in AH.
83;
84; Note to developers: Do not make recursive INT 13h calls!
85;
86; Int13h_DiskFunctionsHandler
87; Parameters:
88; AH: Bios function
89; DL: Drive number
90; Other: Depends on function
91; Returns:
92; Depends on function
93;--------------------------------------------------------------------
94ALIGN JUMP_ALIGN
95Int13h_DiskFunctionsHandler:
96%ifndef RELOCATE_INT13H_STACK
97 sti ; Enable interrupts
98%endif
99 cld ; String instructions to increment pointers
100 ePUSHA
101 push ds
102 push es
103%ifdef USE_386
104; push fs
105; push gs
106%endif
107 sub sp, BYTE SIZE_OF_IDEPACK_WITHOUT_INTPACK
108 mov bp, sp
109 call RamVars_GetSegmentToDS
110
111%ifdef MODULE_DRIVEXLATE
112 call DriveXlate_ToOrBack
113%endif
114 call FindDPT_ForDriveNumberInDL ; DS:DI points to our DPT, or NULL if not our drive
115 jc SHORT .NotOurDrive ; DPT not found so this is not one of our drives
116
117.OurFunction:
118 ; Jump to correct BIOS function
119 eMOVZX bx, ah
120 eSHL_IM bx, 1
121 cmp ah, 25h ; Possible EBIOS function?
122%ifndef MODULE_EBIOS
123 ja SHORT UnsupportedFunction
124 jmp [cs:bx+g_rgw13hFuncJump] ; Jump to BIOS function
125
126%else ; If using MODULE_EBIOS
127 ja SHORT .JumpToEbiosFunction
128 jmp [cs:bx+g_rgw13hFuncJump] ; Jump to BIOS function
129
130ALIGN JUMP_ALIGN
131.JumpToEbiosFunction:
132 test BYTE [di+DPT.bFlagsLow], FLGL_DPT_LBA
133 jz SHORT UnsupportedFunction ; No eINT 13h for CHS drives
134 sub bl, 41h<<1 ; BX = Offset to eINT 13h jump table
135 jb SHORT UnsupportedFunction
136 cmp ah, 48h
137 ja SHORT UnsupportedFunction
138 jmp [cs:bx+g_rgwEbiosFunctionJumpTable]
139%endif ; MODULE_EBIOS
140
141
142ALIGN JUMP_ALIGN
143.NotOurDrive:
144 test ah, ah
145 jz SHORT .OurFunction ; We handle all function 0h requests (resets)
146
147%ifndef MODULE_SERIAL_FLOPPY
148; Without floppy support, we handle only hard disk traffic for function 08h.
149 test dl, dl
150 jns SHORT Int13h_DirectCallToAnotherBios
151%endif
152; With floppy support, we handle all traffic for function 08h, as we need to wrap both hard disk and floppy drive counts.
153 cmp ah, GET_DRIVE_PARAMETERS
154 je SHORT .OurFunction
155 ; Fall to Int13h_DirectCallToAnotherBios
156
157
158;--------------------------------------------------------------------
159; UnsupportedFunction
160; Int13h_DirectCallToAnotherBios
161; Parameters:
162; DL: Translated drive number
163; DS: RAMVARS segment
164; SS:BP: Ptr to IDEPACK
165; BX, DI: Corrupted on Int13h_DiskFunctionsHandler
166; Other: Function specific INT 13h parameters
167; Returns:
168; Depends on function
169; Corrupts registers:
170; Flags
171;--------------------------------------------------------------------
172ALIGN JUMP_ALIGN
173UnsupportedFunction:
174Int13h_DirectCallToAnotherBios:
175%ifdef MODULE_DRIVEXLATE
176 ; Disable drive number translations in case of recursive INT 13h calls
177 mov [RAMVARS.xlateVars+XLATEVARS.bXlatedDrv], dl
178 push WORD [RAMVARS.xlateVars+XLATEVARS.wFDandHDswap]
179 call DriveXlate_Reset ; No translation
180%endif
181
182 push bp ; Store offset to IDEPACK (SS:SP now points it)
183
184 ; Simulate INT by pushing flags and return address
185 push WORD [bp+IDEPACK.intpack+INTPACK.flags]
186%if 0
187 ; No standard INT 13h function uses FLAGS as parameters so no need to restore them
188 popf
189 pushf
190%endif
191 push cs
192 ePUSH_T di, .ReturnFromAnotherBios ; Can not corrupt flags
193
194 ; Push old INT 13h handler and restore registers
195 push WORD [RAMVARS.fpOldI13h+2]
196 push WORD [RAMVARS.fpOldI13h]
197 mov bx, [bp+IDEPACK.intpack+INTPACK.bx]
198 mov di, [bp+IDEPACK.intpack+INTPACK.di]
199 mov ds, [bp+IDEPACK.intpack+INTPACK.ds]
200 mov bp, [bp+IDEPACK.intpack+INTPACK.bp]
201 retf ; "Return" to old INT 13h
202.ReturnFromAnotherBios:
203
204%if 0
205 ; We need to restore our pointer to IDEPACK but we cannot corrupt any register
206 push ax ; Dummy WORD
207 cli
208 xchg bp, sp
209 mov [bp], sp ; Replace dummy WORD with returned BP
210 mov sp, [bp+2] ; Load offset to IDEPACK
211 xchg sp, bp
212 sti ; We would have set IF anyway when exiting INT 13h
213 pop WORD [bp+IDEPACK.intpack+INTPACK.bp]
214%endif
215 ; Actually we can corrupt BP since no standard INT 13h function uses it as return
216 ; register. Above code is kept here just in case if there is some non-standard function.
217 ; POP BP below also belongs to the above code.
218 pop bp ; Clean IDEPACK offset from stack
219
220 ; Store remaining returned values to INTPACK
221%ifdef USE_386
222; We do not use GS or FS at the moment
223; mov [bp+IDEPACK.intpack+INTPACK.gs], gs
224; mov [bp+IDEPACK.intpack+INTPACK.fs], fs
225%endif
226 mov [bp+IDEPACK.intpack+INTPACK.es], es
227 mov [bp+IDEPACK.intpack+INTPACK.ds], ds
228 mov [bp+IDEPACK.intpack+INTPACK.di], di
229 mov [bp+IDEPACK.intpack+INTPACK.si], si
230 mov [bp+IDEPACK.intpack+INTPACK.bx], bx
231%ifdef MODULE_DRIVEXLATE
232 mov [bp+IDEPACK.intpack+INTPACK.dh], dh
233%else
234 mov [bp+IDEPACK.intpack+INTPACK.dx], dx
235%endif
236 mov [bp+IDEPACK.intpack+INTPACK.cx], cx
237 mov [bp+IDEPACK.intpack+INTPACK.ax], ax
238 pushf
239 pop WORD [bp+IDEPACK.intpack+INTPACK.flags]
240 call RamVars_GetSegmentToDS
241
242%ifdef MODULE_DRIVEXLATE
243 ; Restore drive number translation back to what it was
244 pop WORD [RAMVARS.xlateVars+XLATEVARS.wFDandHDswap]
245 cmp dl, [RAMVARS.xlateVars+XLATEVARS.bXlatedDrv] ; DL is still drive number?
246 je SHORT Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
247 mov [bp+IDEPACK.intpack+INTPACK.dl], dl ; Something is returned in DL
248%endif
249 jmp SHORT Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
250
251
252%ifdef MODULE_SERIAL_FLOPPY
253;--------------------------------------------------------------------
254; Int13h_ReturnSuccessForFloppy
255;
256; Some operations, such as format of a floppy disk track, should just
257; return success, while for hard disks it should be treated as unsupported.
258;--------------------------------------------------------------------
259ALIGN JUMP_ALIGN
260Int13h_ReturnSuccessForFloppy:
261 test dl, dl
262 js SHORT UnsupportedFunction
263 xor ah, ah
264 jmp SHORT Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
265%endif
266
267
268;--------------------------------------------------------------------
269; Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAHandTransferredSectorsFromCL
270; Parameters:
271; AH: BIOS Error code
272; CL: Number of sectors actually transferred
273; SS:BP: Ptr to IDEPACK
274; Returns:
275; All registers are loaded from INTPACK
276;--------------------------------------------------------------------
277ALIGN JUMP_ALIGN
278Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAHandTransferredSectorsFromCL:
279 mov [bp+IDEPACK.intpack+INTPACK.al], cl
280 ; Fall to Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
281
282
283;--------------------------------------------------------------------
284; Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
285; Int13h_ReturnFromHandlerWithoutStoringErrorCode
286; Parameters:
287; AH: BIOS Error code
288; SS:BP: Ptr to IDEPACK
289; Returns:
290; All registers are loaded from INTPACK
291;--------------------------------------------------------------------
292ALIGN JUMP_ALIGN
293Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH:
294%ifdef MODULE_SERIAL_FLOPPY
295 mov al, [bp+IDEPACK.intpack+INTPACK.dl]
296Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH_ALHasDriveNumber:
297 call Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH_ALHasDriveNumber
298
299%else
300 call Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH
301%endif
302
303Int13h_ReturnFromHandlerWithoutStoringErrorCode:
304 ; Always return with interrupts enabled since there are programs that rely
305 ; on INT 13h to enable interrupts.
306 or BYTE [bp+IDEPACK.intpack+INTPACK.flags+1], (FLG_FLAGS_IF>>8)
307
308 lea sp, [bp+SIZE_OF_IDEPACK_WITHOUT_INTPACK]
309%ifdef USE_386
310; pop gs
311; pop fs
312%endif
313 pop es
314 pop ds
315 ePOPA
316 iret
317
318
319;--------------------------------------------------------------------
320; Int13h_CallPreviousInt13hHandler
321; Parameters:
322; AH: INT 13h function to call
323; DL: Drive number
324; DS: RAMVARS segment
325; Returns:
326; Depends on function
327; NOTE: ES:DI needs to be returned from the previous interrupt
328; handler, for floppy DPT in function 08h
329; Corrupts registers:
330; None
331;--------------------------------------------------------------------
332ALIGN JUMP_ALIGN
333Int13h_CallPreviousInt13hHandler:
334 pushf ; Simulate INT by pushing flags
335 call far [RAMVARS.fpOldI13h]
336 ret
337
338
339;--------------------------------------------------------------------
340; Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH_ALHasDriveNumber
341; Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH
342; Int13h_SetErrorCodeToIntpackInSSBPfromAH
343; Parameters:
344; AH: BIOS error code (00h = no error)
345; SS:BP: Ptr to IDEPACK
346; Returns:
347; SS:BP: Ptr to IDEPACK with error condition set
348; Corrupts registers:
349; DS, BX, DI
350;--------------------------------------------------------------------
351ALIGN JUMP_ALIGN
352%ifdef MODULE_SERIAL_FLOPPY
353Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH_ALHasDriveNumber:
354 ; Store error code to BDA
355 mov bx, BDA.bHDLastSt
356 test al, al
357 js SHORT .HardDisk
358 mov bl, BDA.bFDRetST & 0xff
359.HardDisk:
360 LOAD_BDA_SEGMENT_TO ds, di
361 mov [bx], ah
362 ; Fall to Int13h_SetErrorCodeToIntpackInSSBPfromAH
363
364%else
365Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH:
366 ; Store error code to BDA
367 LOAD_BDA_SEGMENT_TO ds, di
368 mov [BDA.bHDLastSt], ah
369 ; Fall to Int13h_SetErrorCodeToIntpackInSSBPfromAH
370%endif
371
372 ; Store error code to INTPACK
373Int13h_SetErrorCodeToIntpackInSSBPfromAH:
374 mov [bp+IDEPACK.intpack+INTPACK.ah], ah
375 test ah, ah
376 jnz SHORT .SetCFtoIntpack
377 and BYTE [bp+IDEPACK.intpack+INTPACK.flags], ~FLG_FLAGS_CF
378 ret
379.SetCFtoIntpack:
380 or BYTE [bp+IDEPACK.intpack+INTPACK.flags], FLG_FLAGS_CF
381 ret
382
383
384; Jump table for correct BIOS function
385ALIGN WORD_ALIGN
386g_rgw13hFuncJump:
387 dw AH0h_HandlerForDiskControllerReset ; 00h, Disk Controller Reset (All)
388 dw AH1h_HandlerForReadDiskStatus ; 01h, Read Disk Status (All)
389 dw AH2h_HandlerForReadDiskSectors ; 02h, Read Disk Sectors (All)
390 dw AH3h_HandlerForWriteDiskSectors ; 03h, Write Disk Sectors (All)
391 dw AH4h_HandlerForVerifyDiskSectors ; 04h, Verify Disk Sectors (All)
392%ifdef MODULE_SERIAL_FLOPPY
393 dw Int13h_ReturnSuccessForFloppy ; 05h, Format Disk Track (XT, AT, EISA)
394%else
395 dw UnsupportedFunction ; 05h, Format Disk Track (XT, AT, EISA)
396%endif
397 dw UnsupportedFunction ; 06h, Format Disk Track with Bad Sectors (XT)
398 dw UnsupportedFunction ; 07h, Format Multiple Cylinders (XT)
399 dw AH8h_HandlerForReadDiskDriveParameters ; 08h, Read Disk Drive Parameters (All)
400 dw AH9h_HandlerForInitializeDriveParameters ; 09h, Initialize Drive Parameters (All)
401 dw UnsupportedFunction ; 0Ah, Read Disk Sectors with ECC (XT, AT, EISA)
402 dw UnsupportedFunction ; 0Bh, Write Disk Sectors with ECC (XT, AT, EISA)
403 dw AHCh_HandlerForSeek ; 0Ch, Seek (All)
404 dw AH9h_HandlerForInitializeDriveParameters ; 0Dh, Alternate Disk Reset (All)
405 dw UnsupportedFunction ; 0Eh, Read Sector Buffer (XT, PS/1), ESDI Undocumented Diagnostic (PS/2)
406 dw UnsupportedFunction ; 0Fh, Write Sector Buffer (XT, PS/1), ESDI Undocumented Diagnostic (PS/2)
407 dw AH10h_HandlerForCheckDriveReady ; 10h, Check Drive Ready (All)
408 dw AH11h_HandlerForRecalibrate ; 11h, Recalibrate (All)
409 dw UnsupportedFunction ; 12h, Controller RAM Diagnostic (XT)
410 dw UnsupportedFunction ; 13h, Drive Diagnostic (XT)
411 dw AH10h_HandlerForCheckDriveReady ; 14h, Controller Internal Diagnostic (All)
412 dw AH15h_HandlerForReadDiskDriveSize ; 15h, Read Disk Drive Size (AT+)
413 dw UnsupportedFunction ; 16h,
414 dw UnsupportedFunction ; 17h,
415 dw UnsupportedFunction ; 18h,
416 dw UnsupportedFunction ; 19h, Park Heads (PS/2)
417 dw UnsupportedFunction ; 1Ah, Format ESDI Drive (PS/2)
418 dw UnsupportedFunction ; 1Bh, Get ESDI Manufacturing Header (PS/2)
419 dw UnsupportedFunction ; 1Ch, ESDI Special Functions (PS/2)
420 dw UnsupportedFunction ; 1Dh,
421%ifdef MODULE_8BIT_IDE_ADVANCED
422 dw AH1Eh_HandlerForXTCFfeatures ; 1Eh, Lo-tech XT-CF features (XTIDE Universal BIOS)
423%else
424 dw UnsupportedFunction ; 1Eh,
425%endif
426 dw UnsupportedFunction ; 1Fh,
427 dw UnsupportedFunction ; 20h,
428 dw UnsupportedFunction ; 21h, Read Disk Sectors, Multiple Blocks (PS/1)
429 dw UnsupportedFunction ; 22h, Write Disk Sectors, Multiple Blocks (PS/1)
430 dw AH23h_HandlerForSetControllerFeatures ; 23h, Set Controller Features Register (PS/1)
431 dw AH24h_HandlerForSetMultipleBlocks ; 24h, Set Multiple Blocks (PS/1)
432 dw AH25h_HandlerForGetDriveInformation ; 25h, Get Drive Information (PS/1)
433
434%ifdef MODULE_EBIOS
435g_rgwEbiosFunctionJumpTable:
436 dw AH41h_HandlerForCheckIfExtensionsPresent ; 41h, Check if Extensions Present (EBIOS)*
437 dw AH42h_HandlerForExtendedReadSectors ; 42h, Extended Read Sectors (EBIOS)*
438 dw AH43h_HandlerForExtendedWriteSectors ; 43h, Extended Write Sectors (EBIOS)*
439 dw AH44h_HandlerForExtendedVerifySectors ; 44h, Extended Verify Sectors (EBIOS)*
440 dw UnsupportedFunction ; 45h, Lock and Unlock Drive (EBIOS)***
441 dw UnsupportedFunction ; 46h, Eject Media Request (EBIOS)***
442 dw AH47h_HandlerForExtendedSeek ; 47h, Extended Seek (EBIOS)*
443 dw AH48h_HandlerForGetExtendedDriveParameters ; 48h, Get Extended Drive Parameters (EBIOS)*
444; dw UnsupportedFunction ; 49h, Get Extended Disk Change Status (EBIOS)***
445; dw UnsupportedFunction ; 4Ah, Initiate Disk Emulation (Bootable CD-ROM)
446; dw UnsupportedFunction ; 4Bh, Terminate Disk Emulation (Bootable CD-ROM)
447; dw UnsupportedFunction ; 4Ch, Initiate Disk Emulation and Boot (Bootable CD-ROM)
448; dw UnsupportedFunction ; 4Dh, Return Boot Catalog (Bootable CD-ROM)
449; dw UnsupportedFunction ; 4Eh, Set Hardware Configuration (EBIOS)**
450;
451; * = Enhanced Drive Access Support (minimum required EBIOS functions)
452; ** = Enhanced Disk Drive (EDD) Support
453; *** = Drive Locking and Ejecting Support
454%endif
Note: See TracBrowser for help on using the repository browser.