source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13hMFMcompatibility.asm@ 614

Last change on this file since 614 was 596, checked in by Krister Nordvall, 6 years ago

Changes:

  • Made changes to HotkeyBar.asm to give the Boot Menu and Hotkey Bar a more consistent look. It will probably seem a bit strange at first to people used to the classic theme.
  • Added the missing parts of USE_NEC_V that should have been committed with the rest in r593.
  • Removed DEFINES_ALL_FEATURES from the BIOS makefile. It didn't work anymore and never really made sense anyway. Added all the official builds to 'make unused' instead which actually uncovered some unused code in the Tiny build.
  • XTIDECFG will no longer load color themes from unrecognized versions of the BIOS.
  • Other fixes in comments and some minor optimizations.
File size: 2.4 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Int 13h handler that is used by MODULE_MFM_COMPATIBILITY.
3; It is placed between XUB Int 13h handler and system INT 13h handler
4; to hide XUB from MFM controllers whose BIOS assumes they handle
5; all hard drives on the system.
6
7;
8; XTIDE Universal BIOS and Associated Tools
9; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
10;
11; This program is free software; you can redistribute it and/or modify
12; it under the terms of the GNU General Public License as published by
13; the Free Software Foundation; either version 2 of the License, or
14; (at your option) any later version.
15;
16; This program is distributed in the hope that it will be useful,
17; but WITHOUT ANY WARRANTY; without even the implied warranty of
18; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19; GNU General Public License for more details.
20; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21;
22
23; Section containing code
24SECTION .text
25
26
27;--------------------------------------------------------------------
28; Int 13h software interrupt handler for MFM compatibility.
29;
30; Some MFM controllers require that BDA drive count is what they have set.
31; The purpose for this handler is to restore BDA drive count to what MFM controller
32; expects and then call MFM controller INT 13h.
33;
34; Int13hMFMcompatibilityHandler
35; Parameters:
36; Any INT 13h function and parameters
37;--------------------------------------------------------------------
38ALIGN JUMP_ALIGN
39Int13hMFMcompatibilityHandler:
40 eENTER 6, 0
41 push es
42 push ds
43 push di
44
45 LOAD_BDA_SEGMENT_TO es, di
46 call RamVars_GetSegmentToDS
47
48 ; Remove our drives from BDA drive count
49 push ax
50 mov al, [RAMVARS.bDrvCnt]
51 mov [bp-2], al ; Store our drive count for later use
52 sub [es:HDBDA.bHDCount], al
53 pop ax
54
55 ; Copy MFM controller INT 13h address to stack
56 les di, [RAMVARS.fpMFMint13h]
57 mov [bp-4], es
58 mov [bp-6], di
59
60 ; Restore registers so we can call MFM int 13h
61 pop di
62 pop ds
63 pop es
64
65 pushf ; Push flags to simulate INT
66 call FAR [bp-6]
67
68 ; Now we can restore BDA drive count
69 push ds
70 push ax
71 lahf ; Get return flags to AH
72 mov [bp-12], ah ; Store return flags to be popped by iret
73 LOAD_BDA_SEGMENT_TO ds, ax
74 mov al, [bp-2]
75 add [HDBDA.bHDCount], al
76 pop ax
77 pop ds
78
79 ; Return from this handler
80 eLEAVE
81 iret
Note: See TracBrowser for help on using the repository browser.