Commit 7e6c3f34bf800da6a8db461a6099047905c34f3a

Authored by bellard
1 parent 39d22439

new bochs BIOS - 16 bit APM support (initial patch by Struan Bartlett)


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