Commit 777428f2d23cfc62326933398c009b7955eed011

Authored by bellard
1 parent 5b60212f

fixed 2.88 MB boot (aka FreeBSD 5.2.1 boot fix)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@849 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 25 additions and 29 deletions
@@ -76,6 +76,30 @@ static inline int to_bcd(RTCState *s, int a) @@ -76,6 +76,30 @@ static inline int to_bcd(RTCState *s, int a)
76 return ((a / 10) << 4) | (a % 10); 76 return ((a / 10) << 4) | (a % 10);
77 } 77 }
78 78
  79 +static int cmos_get_fd_drive_type(int fd0)
  80 +{
  81 + int val;
  82 +
  83 + switch (fd0) {
  84 + case 0:
  85 + /* 1.44 Mb 3"5 drive */
  86 + val = 4;
  87 + break;
  88 + case 1:
  89 + /* 2.88 Mb 3"5 drive */
  90 + val = 5;
  91 + break;
  92 + case 2:
  93 + /* 1.2 Mb 5"5 drive */
  94 + val = 2;
  95 + break;
  96 + default:
  97 + val = 0;
  98 + break;
  99 + }
  100 + return val;
  101 +}
  102 +
79 static void cmos_init(int ram_size, int boot_device) 103 static void cmos_init(int ram_size, int boot_device)
80 { 104 {
81 RTCState *s = rtc_state; 105 RTCState *s = rtc_state;
@@ -133,35 +157,7 @@ static void cmos_init(int ram_size, int boot_device) @@ -133,35 +157,7 @@ static void cmos_init(int ram_size, int boot_device)
133 fd0 = fdctrl_get_drive_type(floppy_controller, 0); 157 fd0 = fdctrl_get_drive_type(floppy_controller, 0);
134 fd1 = fdctrl_get_drive_type(floppy_controller, 1); 158 fd1 = fdctrl_get_drive_type(floppy_controller, 1);
135 159
136 - val = 0;  
137 - switch (fd0) {  
138 - case 0:  
139 - /* 1.44 Mb 3"5 drive */  
140 - val |= 0x40;  
141 - break;  
142 - case 1:  
143 - /* 2.88 Mb 3"5 drive */  
144 - val |= 0x60;  
145 - break;  
146 - case 2:  
147 - /* 1.2 Mb 5"5 drive */  
148 - val |= 0x20;  
149 - break;  
150 - }  
151 - switch (fd1) {  
152 - case 0:  
153 - /* 1.44 Mb 3"5 drive */  
154 - val |= 0x04;  
155 - break;  
156 - case 1:  
157 - /* 2.88 Mb 3"5 drive */  
158 - val |= 0x06;  
159 - break;  
160 - case 2:  
161 - /* 1.2 Mb 5"5 drive */  
162 - val |= 0x02;  
163 - break;  
164 - } 160 + val = (cmos_get_fd_drive_type(fd0) << 4) | cmos_get_fd_drive_type(fd1);
165 rtc_set_memory(s, 0x10, val); 161 rtc_set_memory(s, 0x10, val);
166 162
167 val = 0; 163 val = 0;