Statistics
| Branch: | Revision:

root / pc-bios / bios.diff @ 977d5710

History | View | Annotate | Download (3.8 kB)

1 3f433d2c bellard
Index: rombios.c
2 3f433d2c bellard
===================================================================
3 3f433d2c bellard
RCS file: /cvsroot/bochs/bochs/bios/rombios.c,v
4 678f2df6 bellard
retrieving revision 1.110
5 678f2df6 bellard
diff -u -w -r1.110 rombios.c
6 678f2df6 bellard
--- rombios.c        31 May 2004 13:11:27 -0000        1.110
7 a4c4785b bellard
+++ rombios.c        7 Oct 2004 21:23:50 -0000
8 678f2df6 bellard
@@ -137,6 +137,7 @@
9 678f2df6 bellard
 #define DEBUG_INT16        0
10 678f2df6 bellard
 #define DEBUG_INT1A        0
11 678f2df6 bellard
 #define DEBUG_INT74        0
12 678f2df6 bellard
+#define DEBUG_APM          0
13 3f433d2c bellard
 
14 678f2df6 bellard
 #define BX_CPU           3
15 678f2df6 bellard
 #define BX_USE_PS2_MOUSE 1
16 678f2df6 bellard
@@ -145,6 +146,7 @@
17 678f2df6 bellard
 #define BX_SUPPORT_FLOPPY 1
18 678f2df6 bellard
 #define BX_FLOPPY_ON_CNT 37   // 2 seconds
19 678f2df6 bellard
 #define BX_PCIBIOS       1
20 678f2df6 bellard
+#define BX_APM           1
21 5b1214a4 bellard
 
22 678f2df6 bellard
 #define BX_USE_ATADRV    1
23 678f2df6 bellard
 #define BX_ELTORITO_BOOT 1
24 678f2df6 bellard
@@ -230,17 +232,6 @@
25 678f2df6 bellard
   out dx,ax
26 678f2df6 bellard
 MEND
27 3f433d2c bellard
 
28 678f2df6 bellard
-MACRO HALT2
29 678f2df6 bellard
-  ;; the HALT macro is called with the line number of the HALT call.
30 678f2df6 bellard
-  ;; The line number is then sent to the PANIC_PORT, causing Bochs/Plex
31 678f2df6 bellard
-  ;; to print a BX_PANIC message.  This will normally halt the simulation
32 678f2df6 bellard
-  ;; with a message such as "BIOS panic at rombios.c, line 4091".
33 678f2df6 bellard
-  ;; However, users can choose to make panics non-fatal and continue.
34 678f2df6 bellard
-  mov dx,#PANIC_PORT2
35 678f2df6 bellard
-  mov ax,#?1
36 678f2df6 bellard
-  out dx,ax
37 678f2df6 bellard
-MEND
38 678f2df6 bellard
-
39 678f2df6 bellard
 MACRO JMP_AP
40 678f2df6 bellard
   db 0xea
41 678f2df6 bellard
   dw ?2
42 678f2df6 bellard
@@ -1543,15 +1534,12 @@
43 3f433d2c bellard
     }
44 3f433d2c bellard
 
45 678f2df6 bellard
   if (action & BIOS_PRINTF_HALT) {
46 678f2df6 bellard
-    // freeze in a busy loop.  If I do a HLT instruction, then in versions
47 678f2df6 bellard
-    // 1.3.pre1 and earlier, it will panic without ever updating the VGA
48 678f2df6 bellard
-    // display, so the panic message will not be visible.  By waiting
49 678f2df6 bellard
-    // forever, you are certain to see the panic message on screen.
50 678f2df6 bellard
-    // After a few more versions have passed, we can turn this back into
51 678f2df6 bellard
-    // a halt or something.
52 678f2df6 bellard
-    // do {} while (1);
53 678f2df6 bellard
+    // freeze in a busy loop.  
54 678f2df6 bellard
 ASM_START
55 678f2df6 bellard
-    HALT2(__LINE__)
56 678f2df6 bellard
+    cli
57 678f2df6 bellard
+ halt2_loop:
58 678f2df6 bellard
+    hlt
59 678f2df6 bellard
+    jmp halt2_loop
60 678f2df6 bellard
 ASM_END
61 678f2df6 bellard
     }
62 678f2df6 bellard
 }
63 a4c4785b bellard
@@ -5412,8 +5400,8 @@
64 a4c4785b bellard
         case 0x03: SET_BL( 0x06 ); break;
65 a4c4785b bellard
         }
66 a4c4785b bellard
 
67 a4c4785b bellard
-      DI = 0xefc7;
68 a4c4785b bellard
-      ES = 0xf000;
69 a4c4785b bellard
+      DI = read_word(0x00, 0x1e*4); // INT vector 0x1E
70 a4c4785b bellard
+      ES = read_word(0x00, 0x1e*4+2);
71 a4c4785b bellard
       goto int13_success;
72 a4c4785b bellard
       break;
73 a4c4785b bellard
 
74 a4c4785b bellard
@@ -6984,8 +6972,8 @@
75 a4c4785b bellard
         }
76 a4c4785b bellard
 
77 a4c4785b bellard
       /* set es & di to point to 11 byte diskette param table in ROM */
78 a4c4785b bellard
-      DI = 0xefc7;
79 a4c4785b bellard
-      ES = 0xf000;
80 a4c4785b bellard
+      DI = read_word(0x00, 0x1e*4); // INT vector 0x1E
81 a4c4785b bellard
+      ES = read_word(0x00, 0x1e*4+2);
82 a4c4785b bellard
       CLEAR_CF(); // success
83 a4c4785b bellard
       /* disk status not changed upon success */
84 a4c4785b bellard
       return;
85 a5ba1ca6 bellard
@@ -7880,7 +7868,7 @@
86 a5ba1ca6 bellard
   mov  al, #0x02
87 a5ba1ca6 bellard
   out  #0x0a, al   ;; clear DMA-1 channel 2 mask bit
88 a5ba1ca6 bellard
 
89 a5ba1ca6 bellard
-  SET_INT_VECTOR(0x1E, #0xF000, #diskette_param_table)
90 a5ba1ca6 bellard
+  SET_INT_VECTOR(0x1E, #0xF000, #diskette_param_table2)
91 a5ba1ca6 bellard
   SET_INT_VECTOR(0x40, #0xF000, #int13_diskette)
92 a5ba1ca6 bellard
   SET_INT_VECTOR(0x0E, #0xF000, #int0e_handler) ;; IRQ 6
93 a5ba1ca6 bellard
 
94 678f2df6 bellard
@@ -8344,6 +8332,19 @@
95 678f2df6 bellard
   pop   ax
96 678f2df6 bellard
   iret
97 e58a7c24 bellard
 
98 678f2df6 bellard
+
99 678f2df6 bellard
+;--------------------
100 678f2df6 bellard
+#if BX_APM
101 678f2df6 bellard
+use32 386
102 678f2df6 bellard
+#define APM_PROT32
103 678f2df6 bellard
+#include "apmbios.S"
104 678f2df6 bellard
+use16 386
105 678f2df6 bellard
+
106 678f2df6 bellard
+#define APM_REAL
107 678f2df6 bellard
+#include "apmbios.S"
108 678f2df6 bellard
+
109 678f2df6 bellard
+#endif
110 678f2df6 bellard
+
111 678f2df6 bellard
 ;--------------------
112 678f2df6 bellard
 #if BX_PCIBIOS
113 678f2df6 bellard
 use32 386
114 a5ba1ca6 bellard
@@ -9515,6 +9516,26 @@
115 a5ba1ca6 bellard
   pop  ds
116 a5ba1ca6 bellard
   iret
117 a5ba1ca6 bellard
 
118 a5ba1ca6 bellard
+diskette_param_table2:
119 a5ba1ca6 bellard
+;;  New diskette parameter table adding 3 parameters from IBM
120 a5ba1ca6 bellard
+;;  Since no provisions are made for multiple drive types, most
121 a5ba1ca6 bellard
+;;  values in this table are ignored.  I set parameters for 1.44M
122 a5ba1ca6 bellard
+;;  floppy here
123 a5ba1ca6 bellard
+db  0xAF
124 a5ba1ca6 bellard
+db  0x02 ;; head load time 0000001, DMA used
125 a5ba1ca6 bellard
+db  0x25
126 a5ba1ca6 bellard
+db  0x02
127 a5ba1ca6 bellard
+db    18
128 a5ba1ca6 bellard
+db  0x1B
129 a5ba1ca6 bellard
+db  0xFF
130 a5ba1ca6 bellard
+db  0x6C
131 a5ba1ca6 bellard
+db  0xF6
132 a5ba1ca6 bellard
+db  0x0F
133 a5ba1ca6 bellard
+db  0x08
134 a5ba1ca6 bellard
+db    79 ;; maximum track
135 a5ba1ca6 bellard
+db     0 ;; data transfer rate
136 a5ba1ca6 bellard
+db     4 ;; drive type in cmos
137 a5ba1ca6 bellard
+
138 a5ba1ca6 bellard
 .org 0xf045 ; INT 10 Functions 0-Fh Entry Point
139 a5ba1ca6 bellard
   HALT(__LINE__)
140 a5ba1ca6 bellard
   iret
141 a5ba1ca6 bellard
@@ -9560,6 +9581,10 @@
142 678f2df6 bellard
 .org 0xf859 ; INT 15h System Services Entry Point
143 678f2df6 bellard
 int15_handler:
144 678f2df6 bellard
   pushf
145 678f2df6 bellard
+#if BX_APM
146 678f2df6 bellard
+  cmp ah, #0x53
147 678f2df6 bellard
+  je apm_call
148 678f2df6 bellard
+#endif
149 e58a7c24 bellard
   push  ds
150 678f2df6 bellard
   push  es
151 678f2df6 bellard
   pushad
152 a5ba1ca6 bellard
@@ -9570,6 +9595,10 @@
153 e58a7c24 bellard
   popf
154 678f2df6 bellard
   //JMPL(iret_modify_cf)
155 678f2df6 bellard
   jmp iret_modify_cf
156 678f2df6 bellard
+#if BX_APM
157 678f2df6 bellard
+apm_call:
158 678f2df6 bellard
+  jmp _apmreal_entry
159 678f2df6 bellard
+#endif
160 fb9f9444 bellard
 
161 678f2df6 bellard
 ;; Protected mode IDT descriptor
162 678f2df6 bellard
 ;;