提交 777428f2 编写于 作者: B bellard

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
上级 5b60212f
...@@ -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)
return ((a / 10) << 4) | (a % 10); return ((a / 10) << 4) | (a % 10);
} }
static int cmos_get_fd_drive_type(int fd0)
{
int val;
switch (fd0) {
case 0:
/* 1.44 Mb 3"5 drive */
val = 4;
break;
case 1:
/* 2.88 Mb 3"5 drive */
val = 5;
break;
case 2:
/* 1.2 Mb 5"5 drive */
val = 2;
break;
default:
val = 0;
break;
}
return val;
}
static void cmos_init(int ram_size, int boot_device) static void cmos_init(int ram_size, int boot_device)
{ {
RTCState *s = rtc_state; 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)
fd0 = fdctrl_get_drive_type(floppy_controller, 0); fd0 = fdctrl_get_drive_type(floppy_controller, 0);
fd1 = fdctrl_get_drive_type(floppy_controller, 1); fd1 = fdctrl_get_drive_type(floppy_controller, 1);
val = 0; val = (cmos_get_fd_drive_type(fd0) << 4) | cmos_get_fd_drive_type(fd1);
switch (fd0) {
case 0:
/* 1.44 Mb 3"5 drive */
val |= 0x40;
break;
case 1:
/* 2.88 Mb 3"5 drive */
val |= 0x60;
break;
case 2:
/* 1.2 Mb 5"5 drive */
val |= 0x20;
break;
}
switch (fd1) {
case 0:
/* 1.44 Mb 3"5 drive */
val |= 0x04;
break;
case 1:
/* 2.88 Mb 3"5 drive */
val |= 0x06;
break;
case 2:
/* 1.2 Mb 5"5 drive */
val |= 0x02;
break;
}
rtc_set_memory(s, 0x10, val); rtc_set_memory(s, 0x10, val);
val = 0; val = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册