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