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

Last change on this file since 590 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
RevLine 
[90]1; Project name : XTIDE Universal BIOS
[3]2; Description : Int 13h BIOS functions (Floppy and Hard disk).
3
[376]4;
[445]5; XTIDE Universal BIOS and Associated Tools
[526]6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]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.
[445]12;
[376]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
[445]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
[445]18;
[376]19
[3]20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; Int 13h software interrupt handler.
[417]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:
[525]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
[417]42 push di
43 call RamVars_GetSegmentToDS
44
45 ; Store entry registers to RAMVARS
[525]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
[417]52 mov [RAMVARS.fpInt13hEntryStack], sp
53 mov [RAMVARS.fpInt13hEntryStack+2], ss
54
55 ; Load new stack and restore DS and DI
[525]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
[417]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
[525]71 cli
[417]72 mov sp, [ss:RAMVARS.fpInt13hEntryStack]
73 mov ss, [ss:RAMVARS.fpInt13hEntryStack+2]
[525]74 sti
[417]75%endif
76 retf 2 ; Skip FLAGS from stack
77%endif ; RELOCATE_INT13H_STACK
78
79
80;--------------------------------------------------------------------
81; Int 13h software interrupt handler.
[3]82; Jumps to specific function defined in AH.
83;
[148]84; Note to developers: Do not make recursive INT 13h calls!
85;
86; Int13h_DiskFunctionsHandler
[3]87; Parameters:
88; AH: Bios function
89; DL: Drive number
[148]90; Other: Depends on function
[3]91; Returns:
92; Depends on function
93;--------------------------------------------------------------------
94ALIGN JUMP_ALIGN
[148]95Int13h_DiskFunctionsHandler:
[525]96%ifndef RELOCATE_INT13H_STACK
[3]97 sti ; Enable interrupts
[556]98%endif
[150]99 cld ; String instructions to increment pointers
[589]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
[3]109 call RamVars_GetSegmentToDS
[294]110
[493]111%ifdef MODULE_DRIVEXLATE
[148]112 call DriveXlate_ToOrBack
[395]113%endif
[322]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
[258]116
[294]117.OurFunction:
[3]118 ; Jump to correct BIOS function
[148]119 eMOVZX bx, ah
[445]120 eSHL_IM bx, 1
[165]121 cmp ah, 25h ; Possible EBIOS function?
[417]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
[165]127 ja SHORT .JumpToEbiosFunction
[148]128 jmp [cs:bx+g_rgw13hFuncJump] ; Jump to BIOS function
[3]129
[165]130ALIGN JUMP_ALIGN
131.JumpToEbiosFunction:
[542]132 test BYTE [di+DPT.bFlagsLow], FLGL_DPT_LBA
[417]133 jz SHORT UnsupportedFunction ; No eINT 13h for CHS drives
[322]134 sub bl, 41h<<1 ; BX = Offset to eINT 13h jump table
[417]135 jb SHORT UnsupportedFunction
[167]136 cmp ah, 48h
[417]137 ja SHORT UnsupportedFunction
[165]138 jmp [cs:bx+g_rgwEbiosFunctionJumpTable]
[417]139%endif ; MODULE_EBIOS
[3]140
[417]141
[322]142ALIGN JUMP_ALIGN
143.NotOurDrive:
144 test ah, ah
145 jz SHORT .OurFunction ; We handle all function 0h requests (resets)
[260]146
[556]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
[322]154 je SHORT .OurFunction
155 ; Fall to Int13h_DirectCallToAnotherBios
156
[417]157
[3]158;--------------------------------------------------------------------
[417]159; UnsupportedFunction
[3]160; Int13h_DirectCallToAnotherBios
161; Parameters:
[148]162; DL: Translated drive number
[3]163; DS: RAMVARS segment
[150]164; SS:BP: Ptr to IDEPACK
[148]165; BX, DI: Corrupted on Int13h_DiskFunctionsHandler
[161]166; Other: Function specific INT 13h parameters
[3]167; Returns:
168; Depends on function
169; Corrupts registers:
170; Flags
171;--------------------------------------------------------------------
172ALIGN JUMP_ALIGN
[417]173UnsupportedFunction:
[3]174Int13h_DirectCallToAnotherBios:
[557]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]
[558]179 call DriveXlate_Reset ; No translation
[557]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]
[561]186%if 0
187 ; No standard INT 13h function uses FLAGS as parameters so no need to restore them
[557]188 popf
[561]189 pushf
190%endif
[557]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]
[150]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]
[557]201 retf ; "Return" to old INT 13h
202.ReturnFromAnotherBios:
[3]203
[557]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
[556]219
[557]220 ; Store remaining returned values to INTPACK
[148]221%ifdef USE_386
[557]222; We do not use GS or FS at the moment
[322]223; mov [bp+IDEPACK.intpack+INTPACK.gs], gs
224; mov [bp+IDEPACK.intpack+INTPACK.fs], fs
[148]225%endif
[150]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
[493]231%ifdef MODULE_DRIVEXLATE
[150]232 mov [bp+IDEPACK.intpack+INTPACK.dh], dh
[414]233%else
234 mov [bp+IDEPACK.intpack+INTPACK.dx], dx
235%endif
[150]236 mov [bp+IDEPACK.intpack+INTPACK.cx], cx
237 mov [bp+IDEPACK.intpack+INTPACK.ax], ax
[148]238 pushf
[150]239 pop WORD [bp+IDEPACK.intpack+INTPACK.flags]
[148]240 call RamVars_GetSegmentToDS
[414]241
[493]242%ifdef MODULE_DRIVEXLATE
[557]243 ; Restore drive number translation back to what it was
244 pop WORD [RAMVARS.xlateVars+XLATEVARS.wFDandHDswap]
[414]245 cmp dl, [RAMVARS.xlateVars+XLATEVARS.bXlatedDrv] ; DL is still drive number?
[557]246 je SHORT Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
[414]247 mov [bp+IDEPACK.intpack+INTPACK.dl], dl ; Something is returned in DL
248%endif
[249]249 jmp SHORT Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
[3]250
[417]251
[260]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
[417]262 js SHORT UnsupportedFunction
[294]263 xor ah, ah
[417]264 jmp SHORT Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
[260]265%endif
[3]266
[417]267
[3]268;--------------------------------------------------------------------
[249]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
[417]282
[249]283;--------------------------------------------------------------------
[148]284; Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
285; Int13h_ReturnFromHandlerWithoutStoringErrorCode
[32]286; Parameters:
[148]287; AH: BIOS Error code
[150]288; SS:BP: Ptr to IDEPACK
[32]289; Returns:
[148]290; All registers are loaded from INTPACK
[32]291;--------------------------------------------------------------------
292ALIGN JUMP_ALIGN
[148]293Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH:
[258]294%ifdef MODULE_SERIAL_FLOPPY
295 mov al, [bp+IDEPACK.intpack+INTPACK.dl]
[294]296Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH_ALHasDriveNumber:
[258]297 call Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH_ALHasDriveNumber
[414]298
[258]299%else
[150]300 call Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH
[258]301%endif
[414]302
[148]303Int13h_ReturnFromHandlerWithoutStoringErrorCode:
[417]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)
[32]307
[589]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
[32]317
[589]318
[32]319;--------------------------------------------------------------------
[148]320; Int13h_CallPreviousInt13hHandler
[3]321; Parameters:
[148]322; AH: INT 13h function to call
323; DL: Drive number
324; DS: RAMVARS segment
[3]325; Returns:
326; Depends on function
[567]327; NOTE: ES:DI needs to be returned from the previous interrupt
328; handler, for floppy DPT in function 08h
[3]329; Corrupts registers:
[258]330; None
[3]331;--------------------------------------------------------------------
332ALIGN JUMP_ALIGN
[148]333Int13h_CallPreviousInt13hHandler:
[557]334 pushf ; Simulate INT by pushing flags
335 call far [RAMVARS.fpOldI13h]
[148]336 ret
[28]337
[35]338
[150]339;--------------------------------------------------------------------
[568]340; Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH_ALHasDriveNumber
[150]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:
[568]349; DS, BX, DI
[150]350;--------------------------------------------------------------------
351ALIGN JUMP_ALIGN
[258]352%ifdef MODULE_SERIAL_FLOPPY
353Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH_ALHasDriveNumber:
354 ; Store error code to BDA
355 mov bx, BDA.bHDLastSt
356 test al, al
[414]357 js SHORT .HardDisk
[258]358 mov bl, BDA.bFDRetST & 0xff
359.HardDisk:
360 LOAD_BDA_SEGMENT_TO ds, di
[294]361 mov [bx], ah
[417]362 ; Fall to Int13h_SetErrorCodeToIntpackInSSBPfromAH
363
[258]364%else
[150]365Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH:
366 ; Store error code to BDA
[294]367 LOAD_BDA_SEGMENT_TO ds, di
[150]368 mov [BDA.bHDLastSt], ah
[417]369 ; Fall to Int13h_SetErrorCodeToIntpackInSSBPfromAH
[258]370%endif
[35]371
[150]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
[3]384; Jump table for correct BIOS function
385ALIGN WORD_ALIGN
386g_rgw13hFuncJump:
[417]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)
[260]392%ifdef MODULE_SERIAL_FLOPPY
[417]393 dw Int13h_ReturnSuccessForFloppy ; 05h, Format Disk Track (XT, AT, EISA)
[260]394%else
[417]395 dw UnsupportedFunction ; 05h, Format Disk Track (XT, AT, EISA)
[260]396%endif
[417]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)
[507]404 dw AH9h_HandlerForInitializeDriveParameters ; 0Dh, Alternate Disk Reset (All)
[417]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)
[540]411 dw AH10h_HandlerForCheckDriveReady ; 14h, Controller Internal Diagnostic (All)
[417]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,
[493]421%ifdef MODULE_8BIT_IDE_ADVANCED
[471]422 dw AH1Eh_HandlerForXTCFfeatures ; 1Eh, Lo-tech XT-CF features (XTIDE Universal BIOS)
423%else
[525]424 dw UnsupportedFunction ; 1Eh,
[471]425%endif
[417]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)
[165]433
[176]434%ifdef MODULE_EBIOS
[165]435g_rgwEbiosFunctionJumpTable:
[417]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)**
[150]450;
451; * = Enhanced Drive Access Support (minimum required EBIOS functions)
452; ** = Enhanced Disk Drive (EDD) Support
453; *** = Drive Locking and Ejecting Support
[181]454%endif
Note: See TracBrowser for help on using the repository browser.