summaryrefslogtreecommitdiff
path: root/src/VBox/Devices/PC/BIOS
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2014-03-26 19:21:20 +0000
committer <>2014-05-08 15:03:54 +0000
commitfb123f93f9f5ce42c8e5785d2f8e0edaf951740e (patch)
treec2103d76aec5f1f10892cd1d3a38e24f665ae5db /src/VBox/Devices/PC/BIOS
parent58ed4748338f9466599adfc8a9171280ed99e23f (diff)
downloadVirtualBox-master.tar.gz
Imported from /home/lorry/working-area/delta_VirtualBox/VirtualBox-4.3.10.tar.bz2.HEADVirtualBox-4.3.10master
Diffstat (limited to 'src/VBox/Devices/PC/BIOS')
-rw-r--r--src/VBox/Devices/PC/BIOS/Makefile.kmk13
-rw-r--r--src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm12261
-rw-r--r--src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum2
-rw-r--r--src/VBox/Devices/PC/BIOS/ahci.c45
-rw-r--r--src/VBox/Devices/PC/BIOS/apm.c2
-rw-r--r--src/VBox/Devices/PC/BIOS/ata.c243
-rw-r--r--src/VBox/Devices/PC/BIOS/bios.c22
-rw-r--r--src/VBox/Devices/PC/BIOS/biosint.h5
-rw-r--r--src/VBox/Devices/PC/BIOS/boot.c56
-rw-r--r--src/VBox/Devices/PC/BIOS/disk.c95
-rw-r--r--src/VBox/Devices/PC/BIOS/ebda.h17
-rw-r--r--src/VBox/Devices/PC/BIOS/eltorito.c173
-rw-r--r--src/VBox/Devices/PC/BIOS/floppy.c425
-rw-r--r--src/VBox/Devices/PC/BIOS/floppyt.c104
-rw-r--r--src/VBox/Devices/PC/BIOS/inlines.h9
-rw-r--r--src/VBox/Devices/PC/BIOS/invop.c222
-rw-r--r--src/VBox/Devices/PC/BIOS/keyboard.c78
-rw-r--r--src/VBox/Devices/PC/BIOS/logo.c8
-rw-r--r--src/VBox/Devices/PC/BIOS/makefile9
-rw-r--r--src/VBox/Devices/PC/BIOS/notes.txt30
-rw-r--r--src/VBox/Devices/PC/BIOS/orgs.asm259
-rw-r--r--src/VBox/Devices/PC/BIOS/parallel.c4
-rw-r--r--src/VBox/Devices/PC/BIOS/pcibios.c18
-rw-r--r--src/VBox/Devices/PC/BIOS/pcibios.inc2
-rw-r--r--src/VBox/Devices/PC/BIOS/pciutil.c2
-rw-r--r--src/VBox/Devices/PC/BIOS/pirq.inc2
-rw-r--r--src/VBox/Devices/PC/BIOS/print.c13
-rw-r--r--src/VBox/Devices/PC/BIOS/ps2mouse.c50
-rw-r--r--src/VBox/Devices/PC/BIOS/scsi.c399
-rw-r--r--src/VBox/Devices/PC/BIOS/serial.c4
-rw-r--r--src/VBox/Devices/PC/BIOS/smidmi.inc2
-rw-r--r--src/VBox/Devices/PC/BIOS/system.c86
-rw-r--r--src/VBox/Devices/PC/BIOS/timepci.c40
-rw-r--r--src/VBox/Devices/PC/BIOS/vbdmismi.inc1
-rw-r--r--src/VBox/Devices/PC/BIOS/vds.c4
-rw-r--r--src/VBox/Devices/PC/BIOS/vds.h2
36 files changed, 8217 insertions, 6490 deletions
diff --git a/src/VBox/Devices/PC/BIOS/Makefile.kmk b/src/VBox/Devices/PC/BIOS/Makefile.kmk
index 9bbea38d..fa46f376 100644
--- a/src/VBox/Devices/PC/BIOS/Makefile.kmk
+++ b/src/VBox/Devices/PC/BIOS/Makefile.kmk
@@ -45,12 +45,14 @@ ifdef VBOX_WITH_OPEN_WATCOM
print.c \
ata.c \
floppy.c \
+ floppyt.c \
eltorito.c \
boot.c \
keyboard.c \
disk.c \
serial.c \
system.c \
+ invop.c \
timepci.c \
ps2mouse.c \
parallel.c \
@@ -130,5 +132,16 @@ else
$(QUIET)$(RM) -f -- $$(PcBiosBin_0_OUTDIR)/VBoxPcBios.rom
endif
+
+ifdef VBOX_WITH_OPEN_WATCOM
+ #
+ # Install the symbol file for the BIOS.
+ #
+ INSTALLS += VBoxPcBiosSym
+ VBoxPcBiosSym_TEMPLATE = VBoxDbgSyms
+ VBoxPcBiosSym_SOURCES = $(basename $(VBoxPcBios_1_TARGET)).sym
+endif
+
+
include $(FILE_KBUILD_SUB_FOOTER)
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
index 280355a6..068c36e7 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
@@ -7,7 +7,7 @@
; Source file: bios.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -91,7 +91,7 @@
; Source file: ata.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -133,7 +133,7 @@
; Source file: floppy.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -172,10 +172,28 @@
;
;
+; Source file: floppyt.c
+;
+; $Id: VBoxBiosAlternative.asm $
+; Floppy drive tables.
+;
+;
+;
+; Copyright (C) 2011-2013 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+
+;
; Source file: eltorito.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2013 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -217,7 +235,7 @@
; Source file: boot.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -259,7 +277,7 @@
; Source file: keyboard.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -301,7 +319,7 @@
; Source file: disk.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -343,7 +361,7 @@
; Source file: serial.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -385,7 +403,7 @@
; Source file: system.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2013 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -424,10 +442,28 @@
;
;
+; Source file: invop.c
+;
+; $Id: VBoxBiosAlternative.asm $
+; Real mode invalid opcode handler.
+;
+;
+;
+; Copyright (C) 2013 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+
+;
; Source file: timepci.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -511,7 +547,7 @@
; Source file: parallel.c
;
;
-; Copyright (C) 2006-2011 Oracle Corporation
+; Copyright (C) 2006-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -557,7 +593,7 @@
;
;
;
-; Copyright (C) 2004-2011 Oracle Corporation
+; Copyright (C) 2004-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -575,7 +611,7 @@
;
;
;
-; Copyright (C) 2004-2011 Oracle Corporation
+; Copyright (C) 2004-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -593,7 +629,7 @@
;
;
;
-; Copyright (C) 2011 Oracle Corporation
+; Copyright (C) 2011-2012 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
@@ -791,13 +827,26 @@
-section _DATA progbits vstart=0x0 align=1 ; size=0x30 class=DATA group=DGROUP
-_dskacc: ; 0xf0000 LB 0x30
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 027h, 0d0h, 027h, 000h, 000h, 000h, 000h
- db 038h, 073h, 0dah, 073h, 055h, 07eh, 0e6h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 05fh, 033h, 032h, 05fh, 000h, 0dah, 00fh, 000h, 000h, 001h, 0f3h, 000h, 000h, 000h, 000h, 000h
+section _DATA progbits vstart=0x0 align=1 ; size=0xb0 class=DATA group=DGROUP
+_fd_parm: ; 0xf0000 LB 0x5b
+ db 0dfh, 002h, 025h, 002h, 009h, 02ah, 0ffh, 050h, 0f6h, 00fh, 008h, 027h, 080h, 0dfh, 002h, 025h
+ db 002h, 009h, 02ah, 0ffh, 050h, 0f6h, 00fh, 008h, 027h, 040h, 0dfh, 002h, 025h, 002h, 00fh, 01bh
+ db 0ffh, 054h, 0f6h, 00fh, 008h, 04fh, 000h, 0dfh, 002h, 025h, 002h, 009h, 02ah, 0ffh, 050h, 0f6h
+ db 00fh, 008h, 04fh, 080h, 0afh, 002h, 025h, 002h, 012h, 01bh, 0ffh, 06ch, 0f6h, 00fh, 008h, 04fh
+ db 000h, 0afh, 002h, 025h, 002h, 024h, 01bh, 0ffh, 054h, 0f6h, 00fh, 008h, 04fh, 0c0h, 0afh, 002h
+ db 025h, 002h, 0ffh, 01bh, 0ffh, 054h, 0f6h, 00fh, 008h, 0ffh, 000h
+_fd_map: ; 0xf005b LB 0xf
+ db 001h, 000h, 002h, 002h, 003h, 003h, 004h, 004h, 005h, 005h, 00eh, 006h, 00fh, 006h, 000h
+_pktacc: ; 0xf006a LB 0xc
+ db 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 028h, 0e2h, 078h, 0aah, 086h
+_softrst: ; 0xf0076 LB 0xc
+ db 000h, 000h, 000h, 000h, 000h, 000h, 027h, 02bh, 037h, 036h, 037h, 036h
+_dskacc: ; 0xf0082 LB 0x2e
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 088h, 027h, 002h, 028h, 000h, 000h, 000h, 000h
+ db 076h, 077h, 02ch, 078h, 0a6h, 085h, 03ah, 086h, 000h, 000h, 000h, 000h, 000h, 000h, 05fh, 033h
+ db 032h, 05fh, 000h, 0dah, 00fh, 000h, 000h, 001h, 0f3h, 000h, 000h, 000h, 000h, 000h
-section CONST progbits vstart=0x30 align=1 ; size=0xc94 class=DATA group=DGROUP
+section CONST progbits vstart=0xb0 align=1 ; size=0xcf8 class=DATA group=DGROUP
db 'NMI Handler called', 00ah, 000h
db 'INT18: BOOT FAILURE', 00ah, 000h
db '%s', 00ah, 000h, 000h
@@ -820,12 +869,11 @@ section CONST progbits vstart=0x30 align=1 ; size=0xc94 class=DATA group=DGROUP
db 'int13_diskette_function', 000h
db '%s: drive>1 || head>1 ...', 00ah, 000h
db '%s: ctrl not ready', 00ah, 000h
- db '%s: read error', 00ah, 000h
db '%s: write error', 00ah, 000h
db '%s: bad floppy type', 00ah, 000h
db '%s: unsupported AH=%02x', 00ah, 000h, 000h
db 'int13_eltorito', 000h
- db '%s: call with AX=%04x. Please report', 00ah, 000h
+ db '%s: call with AX=%04x not implemented.', 00ah, 000h
db '%s: unsupported AH=%02x', 00ah, 000h
db 'int13_cdemu', 000h
db '%s: function %02x, emulation not active for DL= %02x', 00ah, 000h
@@ -874,10 +922,11 @@ section CONST progbits vstart=0x30 align=1 ; size=0xc94 class=DATA group=DGROUP
db 'INT 15h C2 AL=6, BH=%02x', 00ah, 000h
db 'INT 15h C2 default case entered', 00ah, 000h, 000h
db 'Key pressed: %x', 00ah, 000h
- db 00ah, 00ah, 'AHCI controller:', 00ah, 000h
+ db 00ah, 00ah, ' AHCI controller:', 000h
db 00ah, ' %d) Hard disk', 000h
- db 00ah, 00ah, 'SCSI controller:', 00ah, 000h
- db 'IDE controller:', 00ah, 000h
+ db 00ah, 00ah, ' SCSI controller:', 000h
+ db ' IDE controller:', 000h
+ db 00ah, 00ah, 'AHCI controller:', 00ah, 000h
db 00ah, ' %d) ', 000h
db 'Secondary ', 000h
db 'Primary ', 000h
@@ -891,12 +940,17 @@ section CONST progbits vstart=0x30 align=1 ; size=0xc94 class=DATA group=DGROUP
db 00ah, 'Other boot devices:', 00ah, ' f) Floppy', 00ah, ' c) CD-ROM', 00ah
db ' l) LAN', 00ah, 00ah, ' b) Continue booting', 00ah, 000h
db 'Delaying boot for %d seconds:', 000h
- db ' %d', 000h
+ db ' %d', 000h, 000h
db 'scsi_read_sectors: device_id out of range %d', 00ah, 000h
db 'scsi_write_sectors: device_id out of range %d', 00ah, 000h
- db 'scsi_enumerate_attached_devices: SCSI_INQUIRY failed', 00ah, 000h
- db 'scsi_enumerate_attached_devices: SCSI_READ_CAPACITY failed', 00ah, 000h
- db 'Disk %d has an unsupported sector size of %u', 00ah, 000h, 000h
+ db 'scsi_cmd_packet', 000h
+ db '%s: DATA_OUT not supported yet', 00ah, 000h
+ db 'scsi_enumerate_attached_devices', 000h
+ db '%s: SCSI_INQUIRY failed', 00ah, 000h
+ db '%s: SCSI_READ_CAPACITY failed', 00ah, 000h
+ db 'Disk %d has an unsupported sector size of %u', 00ah, 000h
+ db 'SCSI %d-ID#%d: LCHS=%u/%u/%u %ld sectors', 00ah, 000h
+ db 'SCSI %d-ID#%d: CD/DVD-ROM', 00ah, 000h
db 'ahci_read_sectors', 000h
db '%s: device_id out of range %d', 00ah, 000h
db 'ahci_write_sectors', 000h
@@ -909,20 +963,20 @@ section CONST progbits vstart=0x30 align=1 ; size=0xc94 class=DATA group=DGROUP
db 'APM: Unsupported function AX=%04X BX=%04X called', 00ah, 000h, 000h
db 'PCI: Unsupported function AX=%04X BX=%04X called', 00ah, 000h
-section CONST2 progbits vstart=0xcc4 align=1 ; size=0x3fa class=DATA group=DGROUP
-_bios_cvs_version_string: ; 0xf0cc4 LB 0x12
- db 'VirtualBox 4.2.4', 000h, 000h
-_bios_prefix_string: ; 0xf0cd6 LB 0x8
+section CONST2 progbits vstart=0xda8 align=1 ; size=0x3fa class=DATA group=DGROUP
+_bios_cvs_version_string: ; 0xf0da8 LB 0x12
+ db 'VirtualBox 4.3.10', 000h
+_bios_prefix_string: ; 0xf0dba LB 0x8
db 'BIOS: ', 000h, 000h
-_isotag: ; 0xf0cde LB 0x6
+_isotag: ; 0xf0dc2 LB 0x6
db 'CD001', 000h
-_eltorito: ; 0xf0ce4 LB 0x18
+_eltorito: ; 0xf0dc8 LB 0x18
db 'EL TORITO SPECIFICATION', 000h
-_drivetypes: ; 0xf0cfc LB 0x28
+_drivetypes: ; 0xf0de0 LB 0x28
db 046h, 06ch, 06fh, 070h, 070h, 079h, 000h, 000h, 000h, 000h, 048h, 061h, 072h, 064h, 020h, 044h
db 069h, 073h, 06bh, 000h, 043h, 044h, 02dh, 052h, 04fh, 04dh, 000h, 000h, 000h, 000h, 04ch, 041h
db 04eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_scan_to_scanascii: ; 0xf0d24 LB 0x37a
+_scan_to_scanascii: ; 0xf0e08 LB 0x37a
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01bh, 001h, 01bh, 001h, 01bh, 001h
db 000h, 001h, 000h, 000h, 031h, 002h, 021h, 002h, 000h, 000h, 000h, 078h, 000h, 000h, 032h, 003h
db 040h, 003h, 000h, 003h, 000h, 079h, 000h, 000h, 033h, 004h, 023h, 004h, 000h, 000h, 000h, 07ah
@@ -979,13 +1033,13 @@ _scan_to_scanascii: ; 0xf0d24 LB 0x37a
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 05ch, 056h, 07ch, 056h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 085h, 000h, 087h, 000h, 089h, 000h, 08bh, 000h, 000h
db 000h, 086h, 000h, 088h, 000h, 08ah, 000h, 08ch, 000h, 000h
-_panic_msg_keyb_buffer_full: ; 0xf109e LB 0x20
+_panic_msg_keyb_buffer_full: ; 0xf1182 LB 0x20
db '%s: keyboard input buffer full', 00ah, 000h
- ; Padding 0x542 bytes at 0xf10be
- times 1346 db 0
+ ; Padding 0x45e bytes at 0xf11a2
+ times 1118 db 0
-section _TEXT progbits vstart=0x1600 align=1 ; size=0x7735 class=CODE group=AUTO
+section _TEXT progbits vstart=0x1600 align=1 ; size=0x7f15 class=CODE group=AUTO
read_byte_: ; 0xf1600 LB 0xe
push bx ; 53
push bp ; 55
@@ -1048,32 +1102,48 @@ write_dword_: ; 0xf164a LB 0x12
pop bp ; 5d
pop si ; 5e
retn ; c3
-inb_cmos_: ; 0xf165c LB 0x11
- push dx ; 52
+inb_cmos_: ; 0xf165c LB 0x1d
push bp ; 55
mov bp, sp ; 89 e5
- mov dx, strict word 00070h ; ba 70 00
+ push dx ; 52
+ mov AH, strict byte 070h ; b4 70
+ cmp AL, strict byte 080h ; 3c 80
+ jc short 01668h ; 72 02
+ mov AH, strict byte 072h ; b4 72
+ movzx dx, ah ; 0f b6 d4
out DX, AL ; ee
- mov dx, strict word 00071h ; ba 71 00
+ movzx dx, ah ; 0f b6 d4
+ inc dx ; 42
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop dx ; 5a
+ pop bp ; 5d
retn ; c3
-outb_cmos_: ; 0xf166d LB 0x11
+outb_cmos_: ; 0xf1679 LB 0x1f
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
mov ah, dl ; 88 d4
- mov dx, strict word 00070h ; ba 70 00
+ mov BL, strict byte 070h ; b3 70
+ cmp AL, strict byte 080h ; 3c 80
+ jc short 01687h ; 72 02
+ mov BL, strict byte 072h ; b3 72
+ movzx dx, bl ; 0f b6 d3
out DX, AL ; ee
+ movzx dx, bl ; 0f b6 d3
+ inc dx ; 42
mov al, ah ; 88 e0
- mov dx, strict word 00071h ; ba 71 00
out DX, AL ; ee
+ lea sp, [bp-002h] ; 8d 66 fe
+ pop bx ; 5b
pop bp ; 5d
retn ; c3
-_dummy_isr_function: ; 0xf167e LB 0x69
- enter 00002h, 000h ; c8 02 00 00
+_dummy_isr_function: ; 0xf1698 LB 0x6b
+ push bp ; 55
+ mov bp, sp ; 89 e5
+ push ax ; 50
mov CL, strict byte 0ffh ; b1 ff
mov AL, strict byte 00bh ; b0 0b
mov dx, strict word 00020h ; ba 20 00
@@ -1084,7 +1154,7 @@ _dummy_isr_function: ; 0xf167e LB 0x69
mov bx, ax ; 89 c3
mov byte [bp-002h], al ; 88 46 fe
test al, al ; 84 c0
- je short 016d9h ; 74 43
+ je short 016f3h ; 74 43
mov AL, strict byte 00bh ; b0 0b
mov dx, 000a0h ; ba a0 00
out DX, AL ; ee
@@ -1093,7 +1163,7 @@ _dummy_isr_function: ; 0xf167e LB 0x69
; sub ah, ah ; 2a e4
mov cx, ax ; 89 c1
test al, al ; 84 c0
- je short 016bbh ; 74 16
+ je short 016d5h ; 74 16
mov dx, 000a1h ; ba a1 00
in AL, DX ; ec
db 02ah, 0e4h
@@ -1105,7 +1175,7 @@ _dummy_isr_function: ; 0xf167e LB 0x69
mov AL, strict byte 020h ; b0 20
mov dx, 000a0h ; ba a0 00
out DX, AL ; ee
- jmp short 016d0h ; eb 15
+ jmp short 016eah ; eb 15
mov dx, strict word 00021h ; ba 21 00
in AL, DX ; ec
db 02ah, 0e4h
@@ -1123,509 +1193,528 @@ _dummy_isr_function: ; 0xf167e LB 0x69
movzx bx, cl ; 0f b6 d9
mov dx, strict word 0006bh ; ba 6b 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 29 ff
- leave ; c9
+ call 0160eh ; e8 0f ff
+ mov sp, bp ; 89 ec
+ pop bp ; 5d
retn ; c3
-_nmi_handler_msg: ; 0xf16e7 LB 0x10
+_nmi_handler_msg: ; 0xf1703 LB 0x12
push bp ; 55
mov bp, sp ; 89 e5
- push strict word 00030h ; 68 30 00
+ push 000b0h ; 68 b0 00
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 f7 01
+ call 01922h ; e8 14 02
add sp, strict byte 00004h ; 83 c4 04
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-_int18_panic_msg: ; 0xf16f7 LB 0x10
+_int18_panic_msg: ; 0xf1715 LB 0x12
push bp ; 55
mov bp, sp ; 89 e5
- push strict word 00044h ; 68 44 00
+ push 000c4h ; 68 c4 00
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 e7 01
+ call 01922h ; e8 02 02
add sp, strict byte 00004h ; 83 c4 04
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-_log_bios_start: ; 0xf1707 LB 0x1e
+_log_bios_start: ; 0xf1727 LB 0x20
push bp ; 55
mov bp, sp ; 89 e5
- mov bx, 00cd6h ; bb d6 0c
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 99 01
- push 00cc4h ; 68 c4 0c
- push strict word 00059h ; 68 59 00
+ call 018e1h ; e8 ac 01
+ push 00da8h ; 68 a8 0d
+ push 000d9h ; 68 d9 00
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 c9 01
+ call 01922h ; e8 e2 01
add sp, strict byte 00006h ; 83 c4 06
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-_print_bios_banner: ; 0xf1725 LB 0x2c
+_print_bios_banner: ; 0xf1747 LB 0x2e
push bp ; 55
mov bp, sp ; 89 e5
mov dx, strict word 00072h ; ba 72 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 eb fe
+ call 0161ch ; e8 c9 fe
mov cx, ax ; 89 c1
xor bx, bx ; 31 db
mov dx, strict word 00072h ; ba 72 00
mov ax, strict word 00040h ; b8 40 00
- call 0162ah ; e8 ec fe
+ call 0162ah ; e8 ca fe
cmp cx, 01234h ; 81 f9 34 12
- jne short 0174ch ; 75 08
+ jne short 0176eh ; 75 08
mov AL, strict byte 003h ; b0 03
mov AH, strict byte 000h ; b4 00
int 010h ; cd 10
+ jmp short 01771h ; eb 03
+ call 07385h ; e8 14 5c
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
- call 06feeh ; e8 9f 58
- pop bp ; 5d
- retn ; c3
-send_: ; 0xf1751 LB 0x38
- push bx ; 53
- push cx ; 51
+send_: ; 0xf1775 LB 0x3b
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push cx ; 51
mov bx, ax ; 89 c3
mov cl, dl ; 88 d1
test AL, strict byte 008h ; a8 08
- je short 01764h ; 74 06
+ je short 01788h ; 74 06
mov al, dl ; 88 d0
mov dx, 00403h ; ba 03 04
out DX, AL ; ee
test bl, 004h ; f6 c3 04
- je short 0176fh ; 74 06
+ je short 01793h ; 74 06
mov al, cl ; 88 c8
mov dx, 00504h ; ba 04 05
out DX, AL ; ee
test bl, 002h ; f6 c3 02
- je short 01785h ; 74 11
+ je short 017a9h ; 74 11
cmp cl, 00ah ; 80 f9 0a
- jne short 0177fh ; 75 06
+ jne short 017a3h ; 75 06
mov AL, strict byte 00dh ; b0 0d
mov AH, strict byte 00eh ; b4 0e
int 010h ; cd 10
mov al, cl ; 88 c8
mov AH, strict byte 00eh ; b4 0e
int 010h ; cd 10
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-put_int_: ; 0xf1789 LB 0x5b
+put_int_: ; 0xf17b0 LB 0x5f
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
+ push ax ; 50
+ push ax ; 50
mov si, ax ; 89 c6
- mov word [bp-004h], dx ; 89 56 fc
+ mov word [bp-008h], dx ; 89 56 f8
mov di, strict word 0000ah ; bf 0a 00
mov ax, dx ; 89 d0
cwd ; 99
idiv di ; f7 ff
- mov word [bp-002h], ax ; 89 46 fe
+ mov word [bp-006h], ax ; 89 46 fa
test ax, ax ; 85 c0
- je short 017adh ; 74 0a
+ je short 017d5h ; 74 0a
dec bx ; 4b
mov dx, ax ; 89 c2
mov ax, si ; 89 f0
- call 01789h ; e8 de ff
- jmp short 017c8h ; eb 1b
+ call 017b0h ; e8 dd ff
+ jmp short 017f0h ; eb 1b
dec bx ; 4b
test bx, bx ; 85 db
- jle short 017bch ; 7e 0a
+ jle short 017e4h ; 7e 0a
mov dx, strict word 00020h ; ba 20 00
mov ax, si ; 89 f0
- call 01751h ; e8 97 ff
- jmp short 017adh ; eb f1
+ call 01775h ; e8 93 ff
+ jmp short 017d5h ; eb f1
test cx, cx ; 85 c9
- je short 017c8h ; 74 08
+ je short 017f0h ; 74 08
mov dx, strict word 0002dh ; ba 2d 00
mov ax, si ; 89 f0
- call 01751h ; e8 89 ff
- mov al, byte [bp-002h] ; 8a 46 fe
+ call 01775h ; e8 85 ff
+ mov al, byte [bp-006h] ; 8a 46 fa
mov DL, strict byte 00ah ; b2 0a
mul dl ; f6 e2
- mov dl, byte [bp-004h] ; 8a 56 fc
+ mov dl, byte [bp-008h] ; 8a 56 f8
sub dl, al ; 28 c2
mov al, dl ; 88 d0
add AL, strict byte 030h ; 04 30
movzx dx, al ; 0f b6 d0
mov ax, si ; 89 f0
- call 01751h ; e8 71 ff
- leave ; c9
+ call 01775h ; e8 6d ff
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-put_uint_: ; 0xf17e4 LB 0x5c
+put_uint_: ; 0xf180f LB 0x60
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
+ push ax ; 50
+ push ax ; 50
mov si, ax ; 89 c6
- mov word [bp-004h], dx ; 89 56 fc
+ mov word [bp-008h], dx ; 89 56 f8
mov ax, dx ; 89 d0
xor dx, dx ; 31 d2
mov di, strict word 0000ah ; bf 0a 00
div di ; f7 f7
- mov word [bp-002h], ax ; 89 46 fe
+ mov word [bp-006h], ax ; 89 46 fa
test ax, ax ; 85 c0
- je short 01809h ; 74 0a
+ je short 01835h ; 74 0a
dec bx ; 4b
mov dx, ax ; 89 c2
mov ax, si ; 89 f0
- call 017e4h ; e8 dd ff
- jmp short 01824h ; eb 1b
+ call 0180fh ; e8 dc ff
+ jmp short 01850h ; eb 1b
dec bx ; 4b
test bx, bx ; 85 db
- jle short 01818h ; 7e 0a
+ jle short 01844h ; 7e 0a
mov dx, strict word 00020h ; ba 20 00
mov ax, si ; 89 f0
- call 01751h ; e8 3b ff
- jmp short 01809h ; eb f1
+ call 01775h ; e8 33 ff
+ jmp short 01835h ; eb f1
test cx, cx ; 85 c9
- je short 01824h ; 74 08
+ je short 01850h ; 74 08
mov dx, strict word 0002dh ; ba 2d 00
mov ax, si ; 89 f0
- call 01751h ; e8 2d ff
- mov al, byte [bp-002h] ; 8a 46 fe
+ call 01775h ; e8 25 ff
+ mov al, byte [bp-006h] ; 8a 46 fa
mov DL, strict byte 00ah ; b2 0a
mul dl ; f6 e2
- mov dl, byte [bp-004h] ; 8a 56 fc
+ mov dl, byte [bp-008h] ; 8a 56 f8
sub dl, al ; 28 c2
mov al, dl ; 88 d0
add AL, strict byte 030h ; 04 30
movzx dx, al ; 0f b6 d0
mov ax, si ; 89 f0
- call 01751h ; e8 15 ff
- leave ; c9
+ call 01775h ; e8 0d ff
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-put_luint_: ; 0xf1840 LB 0x6e
+put_luint_: ; 0xf186f LB 0x72
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
+ push ax ; 50
+ push ax ; 50
mov si, ax ; 89 c6
- mov word [bp-002h], bx ; 89 5e fe
+ mov word [bp-006h], bx ; 89 5e fa
mov di, dx ; 89 d7
mov ax, bx ; 89 d8
mov dx, cx ; 89 ca
mov bx, strict word 0000ah ; bb 0a 00
xor cx, cx ; 31 c9
- call 08c40h ; e8 e7 73
- mov word [bp-004h], ax ; 89 46 fc
+ call 09420h ; e8 97 7b
+ mov word [bp-008h], ax ; 89 46 f8
mov cx, dx ; 89 d1
mov dx, ax ; 89 c2
or dx, cx ; 09 ca
- je short 01873h ; 74 0f
- push word [bp+008h] ; ff 76 08
+ je short 018a3h ; 74 0f
+ push word [bp+004h] ; ff 76 04
lea dx, [di-001h] ; 8d 55 ff
mov bx, ax ; 89 c3
mov ax, si ; 89 f0
- call 01840h ; e8 cf ff
- jmp short 01890h ; eb 1d
+ call 0186fh ; e8 ce ff
+ jmp short 018c0h ; eb 1d
dec di ; 4f
test di, di ; 85 ff
- jle short 01882h ; 7e 0a
+ jle short 018b2h ; 7e 0a
mov dx, strict word 00020h ; ba 20 00
mov ax, si ; 89 f0
- call 01751h ; e8 d1 fe
- jmp short 01873h ; eb f1
- cmp word [bp+008h], strict byte 00000h ; 83 7e 08 00
- je short 01890h ; 74 08
+ call 01775h ; e8 c5 fe
+ jmp short 018a3h ; eb f1
+ cmp word [bp+004h], strict byte 00000h ; 83 7e 04 00
+ je short 018c0h ; 74 08
mov dx, strict word 0002dh ; ba 2d 00
mov ax, si ; 89 f0
- call 01751h ; e8 c1 fe
- mov al, byte [bp-004h] ; 8a 46 fc
+ call 01775h ; e8 b5 fe
+ mov al, byte [bp-008h] ; 8a 46 f8
mov DL, strict byte 00ah ; b2 0a
mul dl ; f6 e2
- mov dl, byte [bp-002h] ; 8a 56 fe
+ mov dl, byte [bp-006h] ; 8a 56 fa
sub dl, al ; 28 c2
mov al, dl ; 88 d0
add AL, strict byte 030h ; 04 30
movzx dx, al ; 0f b6 d0
mov ax, si ; 89 f0
- call 01751h ; e8 a9 fe
- leave ; c9
+ call 01775h ; e8 9d fe
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 00002h ; c2 02 00
-put_str_: ; 0xf18ae LB 0x1e
- push dx ; 52
- push si ; 56
+put_str_: ; 0xf18e1 LB 0x21
push bp ; 55
mov bp, sp ; 89 e5
+ push dx ; 52
+ push si ; 56
mov si, ax ; 89 c6
mov es, cx ; 8e c1
mov dl, byte [es:bx] ; 26 8a 17
test dl, dl ; 84 d2
- je short 018c8h ; 74 0a
+ je short 018fbh ; 74 0a
xor dh, dh ; 30 f6
mov ax, si ; 89 f0
- call 01751h ; e8 8c fe
+ call 01775h ; e8 7d fe
inc bx ; 43
- jmp short 018b5h ; eb ed
- pop bp ; 5d
+ jmp short 018e8h ; eb ed
+ lea sp, [bp-004h] ; 8d 66 fc
pop si ; 5e
pop dx ; 5a
+ pop bp ; 5d
retn ; c3
-put_str_near_: ; 0xf18cc LB 0x1d
- push bx ; 53
- push cx ; 51
+put_str_near_: ; 0xf1902 LB 0x20
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push cx ; 51
mov cx, ax ; 89 c1
mov bx, dx ; 89 d3
mov dl, byte [bx] ; 8a 17
test dl, dl ; 84 d2
- je short 018e5h ; 74 0a
+ je short 0191bh ; 74 0a
xor dh, dh ; 30 f6
mov ax, cx ; 89 c8
- call 01751h ; e8 6f fe
+ call 01775h ; e8 5d fe
inc bx ; 43
- jmp short 018d5h ; eb f0
- pop bp ; 5d
+ jmp short 0190bh ; eb f0
+ lea sp, [bp-004h] ; 8d 66 fc
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-bios_printf_: ; 0xf18e9 LB 0x23c
+bios_printf_: ; 0xf1922 LB 0x23b
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- enter 00008h, 000h ; c8 08 00 00
- lea bx, [bp+012h] ; 8d 5e 12
- mov word [bp-008h], bx ; 89 5e f8
- mov [bp-006h], ss ; 8c 56 fa
+ sub sp, strict byte 00008h ; 83 ec 08
+ lea bx, [bp+008h] ; 8d 5e 08
+ mov word [bp-012h], bx ; 89 5e ee
+ mov [bp-010h], ss ; 8c 56 f0
xor cx, cx ; 31 c9
xor si, si ; 31 f6
- mov ax, word [bp+00eh] ; 8b 46 0e
+ mov ax, word [bp+004h] ; 8b 46 04
and ax, strict word 00007h ; 25 07 00
cmp ax, strict word 00007h ; 3d 07 00
- jne short 0191bh ; 75 11
- xor al, al ; 30 c0
- mov dx, 00401h ; ba 01 04
- out DX, AL ; ee
- push strict word 0005eh ; 68 5e 00
+ jne short 01950h ; 75 0b
+ push 000deh ; 68 de 00
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 d1 ff
+ call 01922h ; e8 d5 ff
add sp, strict byte 00004h ; 83 c4 04
- mov bx, word [bp+010h] ; 8b 5e 10
+ mov bx, word [bp+006h] ; 8b 5e 06
mov dl, byte [bx] ; 8a 17
test dl, dl ; 84 d2
- je near 01b0ch ; 0f 84 e6 01
+ je near 01b41h ; 0f 84 e6 01
cmp dl, 025h ; 80 fa 25
- jne short 01933h ; 75 08
+ jne short 01968h ; 75 08
mov cx, strict word 00001h ; b9 01 00
xor si, si ; 31 f6
- jmp near 01b06h ; e9 d3 01
+ jmp near 01b3bh ; e9 d3 01
test cx, cx ; 85 c9
- je near 01afeh ; 0f 84 c5 01
+ je near 01b33h ; 0f 84 c5 01
cmp dl, 030h ; 80 fa 30
- jc short 01951h ; 72 13
+ jc short 01986h ; 72 13
cmp dl, 039h ; 80 fa 39
- jnbe short 01951h ; 77 0e
+ jnbe short 01986h ; 77 0e
movzx ax, dl ; 0f b6 c2
imul si, si, strict byte 0000ah ; 6b f6 0a
sub ax, strict word 00030h ; 2d 30 00
add si, ax ; 01 c6
- jmp near 01b06h ; e9 b5 01
- mov ax, word [bp-006h] ; 8b 46 fa
- mov word [bp-006h], ax ; 89 46 fa
- add word [bp-008h], strict byte 00002h ; 83 46 f8 02
- les bx, [bp-008h] ; c4 5e f8
+ jmp near 01b3bh ; e9 b5 01
+ mov ax, word [bp-010h] ; 8b 46 f0
+ mov word [bp-010h], ax ; 89 46 f0
+ add word [bp-012h], strict byte 00002h ; 83 46 ee 02
+ les bx, [bp-012h] ; c4 5e ee
mov ax, word [es:bx-002h] ; 26 8b 47 fe
- mov word [bp-002h], ax ; 89 46 fe
+ mov word [bp-00ch], ax ; 89 46 f4
cmp dl, 078h ; 80 fa 78
- je short 0196fh ; 74 05
+ je short 019a4h ; 74 05
cmp dl, 058h ; 80 fa 58
- jne short 019b8h ; 75 49
+ jne short 019edh ; 75 49
test si, si ; 85 f6
- jne short 01976h ; 75 03
+ jne short 019abh ; 75 03
mov si, strict word 00004h ; be 04 00
cmp dl, 078h ; 80 fa 78
- jne short 01980h ; 75 05
+ jne short 019b5h ; 75 05
mov di, strict word 00061h ; bf 61 00
- jmp short 01983h ; eb 03
+ jmp short 019b8h ; eb 03
mov di, strict word 00041h ; bf 41 00
lea bx, [si-001h] ; 8d 5c ff
test bx, bx ; 85 db
- jl near 01afah ; 0f 8c 6e 01
+ jl near 01b2fh ; 0f 8c 6e 01
mov cx, bx ; 89 d9
sal cx, 002h ; c1 e1 02
- mov ax, word [bp-002h] ; 8b 46 fe
+ mov ax, word [bp-00ch] ; 8b 46 f4
shr ax, CL ; d3 e8
xor ah, ah ; 30 e4
and AL, strict byte 00fh ; 24 0f
cmp ax, strict word 00009h ; 3d 09 00
- jnbe short 019a6h ; 77 07
+ jnbe short 019dbh ; 77 07
mov dx, ax ; 89 c2
add dx, strict byte 00030h ; 83 c2 30
- jmp short 019adh ; eb 07
+ jmp short 019e2h ; eb 07
mov dx, ax ; 89 c2
sub dx, strict byte 0000ah ; 83 ea 0a
add dx, di ; 01 fa
xor dh, dh ; 30 f6
- mov ax, word [bp+00eh] ; 8b 46 0e
- call 01751h ; e8 9c fd
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 01775h ; e8 8b fd
dec bx ; 4b
- jmp short 01986h ; eb ce
+ jmp short 019bbh ; eb ce
cmp dl, 075h ; 80 fa 75
- jne short 019cch ; 75 0f
+ jne short 01a01h ; 75 0f
xor cx, cx ; 31 c9
mov bx, si ; 89 f3
mov dx, ax ; 89 c2
- mov ax, word [bp+00eh] ; 8b 46 0e
- call 017e4h ; e8 1b fe
- jmp near 01afah ; e9 2e 01
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0180fh ; e8 11 fe
+ jmp near 01b2fh ; e9 2e 01
lea bx, [si-001h] ; 8d 5c ff
cmp dl, 06ch ; 80 fa 6c
- jne near 01a88h ; 0f 85 b2 00
- inc word [bp+010h] ; ff 46 10
- mov di, word [bp+010h] ; 8b 7e 10
+ jne near 01abdh ; 0f 85 b2 00
+ inc word [bp+006h] ; ff 46 06
+ mov di, word [bp+006h] ; 8b 7e 06
mov dl, byte [di] ; 8a 15
- mov ax, word [bp-006h] ; 8b 46 fa
- mov word [bp-006h], ax ; 89 46 fa
- add word [bp-008h], strict byte 00002h ; 83 46 f8 02
- les di, [bp-008h] ; c4 7e f8
+ mov ax, word [bp-010h] ; 8b 46 f0
+ mov word [bp-010h], ax ; 89 46 f0
+ add word [bp-012h], strict byte 00002h ; 83 46 ee 02
+ les di, [bp-012h] ; c4 7e ee
mov ax, word [es:di-002h] ; 26 8b 45 fe
- mov word [bp-004h], ax ; 89 46 fc
+ mov word [bp-00eh], ax ; 89 46 f2
cmp dl, 064h ; 80 fa 64
- jne short 01a24h ; 75 2d
- test byte [bp-003h], 080h ; f6 46 fd 80
- je short 01a12h ; 74 15
+ jne short 01a59h ; 75 2d
+ test byte [bp-00dh], 080h ; f6 46 f3 80
+ je short 01a47h ; 74 15
push strict byte 00001h ; 6a 01
- mov ax, word [bp-002h] ; 8b 46 fe
- mov cx, word [bp-004h] ; 8b 4e fc
+ mov ax, word [bp-00ch] ; 8b 46 f4
+ mov cx, word [bp-00eh] ; 8b 4e f2
neg cx ; f7 d9
neg ax ; f7 d8
sbb cx, strict byte 00000h ; 83 d9 00
mov dx, bx ; 89 da
mov bx, ax ; 89 c3
- jmp short 01a1bh ; eb 09
+ jmp short 01a50h ; eb 09
push strict byte 00000h ; 6a 00
- mov bx, word [bp-002h] ; 8b 5e fe
+ mov bx, word [bp-00ch] ; 8b 5e f4
mov dx, si ; 89 f2
mov cx, ax ; 89 c1
- mov ax, word [bp+00eh] ; 8b 46 0e
- call 01840h ; e8 1f fe
- jmp near 01afah ; e9 d6 00
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0186fh ; e8 19 fe
+ jmp near 01b2fh ; e9 d6 00
cmp dl, 075h ; 80 fa 75
- jne short 01a2bh ; 75 02
- jmp short 01a12h ; eb e7
+ jne short 01a60h ; 75 02
+ jmp short 01a47h ; eb e7
cmp dl, 078h ; 80 fa 78
- je short 01a37h ; 74 07
+ je short 01a6ch ; 74 07
cmp dl, 058h ; 80 fa 58
- jne near 01afah ; 0f 85 c3 00
+ jne near 01b2fh ; 0f 85 c3 00
test si, si ; 85 f6
- jne short 01a3eh ; 75 03
+ jne short 01a73h ; 75 03
mov si, strict word 00008h ; be 08 00
cmp dl, 078h ; 80 fa 78
- jne short 01a48h ; 75 05
+ jne short 01a7dh ; 75 05
mov di, strict word 00061h ; bf 61 00
- jmp short 01a4bh ; eb 03
+ jmp short 01a80h ; eb 03
mov di, strict word 00041h ; bf 41 00
lea bx, [si-001h] ; 8d 5c ff
test bx, bx ; 85 db
- jl near 01afah ; 0f 8c a6 00
- mov ax, word [bp-002h] ; 8b 46 fe
+ jl near 01b2fh ; 0f 8c a6 00
+ mov ax, word [bp-00ch] ; 8b 46 f4
mov cx, bx ; 89 d9
sal cx, 002h ; c1 e1 02
- mov dx, word [bp-004h] ; 8b 56 fc
- jcxz 01a67h ; e3 06
+ mov dx, word [bp-00eh] ; 8b 56 f2
+ jcxz 01a9ch ; e3 06
shr dx, 1 ; d1 ea
rcr ax, 1 ; d1 d8
- loop 01a61h ; e2 fa
+ loop 01a96h ; e2 fa
and ax, strict word 0000fh ; 25 0f 00
cmp ax, strict word 00009h ; 3d 09 00
- jnbe short 01a76h ; 77 07
+ jnbe short 01aabh ; 77 07
mov dx, ax ; 89 c2
add dx, strict byte 00030h ; 83 c2 30
- jmp short 01a7dh ; eb 07
+ jmp short 01ab2h ; eb 07
mov dx, ax ; 89 c2
sub dx, strict byte 0000ah ; 83 ea 0a
add dx, di ; 01 fa
xor dh, dh ; 30 f6
- mov ax, word [bp+00eh] ; 8b 46 0e
- call 01751h ; e8 cc fc
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 01775h ; e8 bb fc
dec bx ; 4b
- jmp short 01a4eh ; eb c6
+ jmp short 01a83h ; eb c6
cmp dl, 064h ; 80 fa 64
- jne short 01aaah ; 75 1d
- test byte [bp-001h], 080h ; f6 46 ff 80
- je short 01a9ch ; 74 09
+ jne short 01adfh ; 75 1d
+ test byte [bp-00bh], 080h ; f6 46 f5 80
+ je short 01ad1h ; 74 09
mov dx, ax ; 89 c2
neg dx ; f7 da
mov cx, strict word 00001h ; b9 01 00
- jmp short 01aa2h ; eb 06
+ jmp short 01ad7h ; eb 06
xor cx, cx ; 31 c9
mov bx, si ; 89 f3
mov dx, ax ; 89 c2
- mov ax, word [bp+00eh] ; 8b 46 0e
- call 01789h ; e8 e1 fc
- jmp short 01afah ; eb 50
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 017b0h ; e8 d3 fc
+ jmp short 01b2fh ; eb 50
cmp dl, 073h ; 80 fa 73
- jne short 01abbh ; 75 0c
+ jne short 01af0h ; 75 0c
mov cx, ds ; 8c d9
mov bx, ax ; 89 c3
- mov ax, word [bp+00eh] ; 8b 46 0e
- call 018aeh ; e8 f5 fd
- jmp short 01afah ; eb 3f
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 018e1h ; e8 f3 fd
+ jmp short 01b2fh ; eb 3f
cmp dl, 053h ; 80 fa 53
- jne short 01adeh ; 75 1e
- mov word [bp-004h], ax ; 89 46 fc
- mov ax, word [bp-006h] ; 8b 46 fa
- mov word [bp-006h], ax ; 89 46 fa
- add word [bp-008h], strict byte 00002h ; 83 46 f8 02
- les bx, [bp-008h] ; c4 5e f8
+ jne short 01b13h ; 75 1e
+ mov word [bp-00eh], ax ; 89 46 f2
+ mov ax, word [bp-010h] ; 8b 46 f0
+ mov word [bp-010h], ax ; 89 46 f0
+ add word [bp-012h], strict byte 00002h ; 83 46 ee 02
+ les bx, [bp-012h] ; c4 5e ee
mov ax, word [es:bx-002h] ; 26 8b 47 fe
- mov word [bp-002h], ax ; 89 46 fe
+ mov word [bp-00ch], ax ; 89 46 f4
mov bx, ax ; 89 c3
- mov cx, word [bp-004h] ; 8b 4e fc
- jmp short 01ab3h ; eb d5
+ mov cx, word [bp-00eh] ; 8b 4e f2
+ jmp short 01ae8h ; eb d5
cmp dl, 063h ; 80 fa 63
- jne short 01aefh ; 75 0c
- movzx dx, byte [bp-002h] ; 0f b6 56 fe
- mov ax, word [bp+00eh] ; 8b 46 0e
- call 01751h ; e8 64 fc
- jmp short 01afah ; eb 0b
- push strict word 00066h ; 68 66 00
+ jne short 01b24h ; 75 0c
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 01775h ; e8 53 fc
+ jmp short 01b2fh ; eb 0b
+ push 000e6h ; 68 e6 00
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 f2 fd
+ call 01922h ; e8 f6 fd
add sp, strict byte 00004h ; 83 c4 04
xor cx, cx ; 31 c9
- jmp short 01b06h ; eb 08
+ jmp short 01b3bh ; eb 08
xor dh, dh ; 30 f6
- mov ax, word [bp+00eh] ; 8b 46 0e
- call 01751h ; e8 4b fc
- inc word [bp+010h] ; ff 46 10
- jmp near 0191bh ; e9 0f fe
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 01775h ; e8 3a fc
+ inc word [bp+006h] ; ff 46 06
+ jmp near 01950h ; e9 0f fe
xor ax, ax ; 31 c0
- mov word [bp-008h], ax ; 89 46 f8
- mov word [bp-006h], ax ; 89 46 fa
- test byte [bp+00eh], 001h ; f6 46 0e 01
- je short 01b1eh ; 74 04
+ mov word [bp-012h], ax ; 89 46 ee
+ mov word [bp-010h], ax ; 89 46 f0
+ test byte [bp+004h], 001h ; f6 46 04 01
+ je short 01b53h ; 74 04
cli ; fa
hlt ; f4
- jmp short 01b1bh ; eb fd
- leave ; c9
+ jmp short 01b50h ; eb fd
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-_ata_init: ; 0xf1b25 LB 0xc1
- push si ; 56
+_ata_init: ; 0xf1b5d LB 0xc4
push bp ; 55
mov bp, sp ; 89 e5
+ push si ; 56
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 ea fa
+ call 0161ch ; e8 b2 fa
mov si, 00122h ; be 22 01
mov dx, ax ; 89 c2
xor al, al ; 30 c0
- jmp short 01b3fh ; eb 04
+ jmp short 01b77h ; eb 04
cmp AL, strict byte 004h ; 3c 04
- jnc short 01b63h ; 73 24
+ jnc short 01b9bh ; 73 24
movzx bx, al ; 0f b6 d8
imul bx, bx, strict byte 00006h ; 6b db 06
mov es, dx ; 8e c2
@@ -1636,11 +1725,11 @@ _ata_init: ; 0xf1b25 LB 0xc1
mov byte [es:bx+001c1h], 000h ; 26 c6 87 c1 01 00
db 0feh, 0c0h
; inc al ; fe c0
- jmp short 01b3bh ; eb d8
+ jmp short 01b73h ; eb d8
xor al, al ; 30 c0
- jmp short 01b6bh ; eb 04
+ jmp short 01ba3h ; eb 04
cmp AL, strict byte 008h ; 3c 08
- jnc short 01bb6h ; 73 4b
+ jnc short 01beeh ; 73 4b
movzx bx, al ; 0f b6 d8
imul bx, bx, strict byte 00018h ; 6b db 18
mov es, dx ; 8e c2
@@ -1660,11 +1749,11 @@ _ata_init: ; 0xf1b25 LB 0xc1
; mov dword [es:bx+032h], strict dword 000000000h ; 66 26 c7 47 32 00 00 00 00
db 0feh, 0c0h
; inc al ; fe c0
- jmp short 01b67h ; eb b1
+ jmp short 01b9fh ; eb b1
xor al, al ; 30 c0
- jmp short 01bbeh ; eb 04
+ jmp short 01bf6h ; eb 04
cmp AL, strict byte 010h ; 3c 10
- jnc short 01bd5h ; 73 17
+ jnc short 01c0dh ; 73 17
movzx bx, al ; 0f b6 d8
mov es, dx ; 8e c2
add bx, si ; 01 f3
@@ -1672,31 +1761,35 @@ _ata_init: ; 0xf1b25 LB 0xc1
mov byte [es:bx+001b0h], 010h ; 26 c6 87 b0 01 10
db 0feh, 0c0h
; inc al ; fe c0
- jmp short 01bbah ; eb e5
+ jmp short 01bf2h ; eb e5
mov es, dx ; 8e c2
mov byte [es:si+0019eh], 000h ; 26 c6 84 9e 01 00
mov byte [es:si+001afh], 000h ; 26 c6 84 af 01 00
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-ata_reset_: ; 0xf1be6 LB 0xda
+ata_reset_: ; 0xf1c21 LB 0xde
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
+ push ax ; 50
+ push ax ; 50
push ax ; 50
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 23 fa
- mov word [bp-004h], 00122h ; c7 46 fc 22 01
+ call 0161ch ; e8 e7 f9
+ mov word [bp-00eh], 00122h ; c7 46 f2 22 01
mov di, ax ; 89 c7
- mov bx, word [bp-006h] ; 8b 5e fa
+ mov bx, word [bp-010h] ; 8b 5e f0
shr bx, 1 ; d1 eb
- mov dl, byte [bp-006h] ; 8a 56 fa
+ mov dl, byte [bp-010h] ; 8a 56 f0
and dl, 001h ; 80 e2 01
- mov byte [bp-002h], dl ; 88 56 fe
+ mov byte [bp-00ch], dl ; 88 56 f4
xor bh, bh ; 30 ff
imul bx, bx, strict byte 00006h ; 6b db 06
mov es, ax ; 8e c0
@@ -1709,26 +1802,26 @@ ata_reset_: ; 0xf1be6 LB 0xda
mov bx, 000ffh ; bb ff 00
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 01c3dh ; 76 0c
+ jbe short 01c79h ; 76 0c
mov dx, cx ; 89 ca
add dx, strict byte 00007h ; 83 c2 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 080h ; a8 80
- je short 01c2ch ; 74 ef
+ je short 01c68h ; 74 ef
lea dx, [si+006h] ; 8d 54 06
mov AL, strict byte 00ah ; b0 0a
out DX, AL ; ee
- imul bx, word [bp-006h], strict byte 00018h ; 6b 5e fa 18
+ imul bx, word [bp-010h], strict byte 00018h ; 6b 5e f0 18
mov es, di ; 8e c7
- add bx, word [bp-004h] ; 03 5e fc
+ add bx, word [bp-00eh] ; 03 5e f2
cmp byte [es:bx+01eh], 000h ; 26 80 7f 1e 00
- je short 01c9fh ; 74 4c
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- je short 01c5eh ; 74 05
+ je short 01cdbh ; 74 4c
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00
+ je short 01c9ah ; 74 05
mov ax, 000b0h ; b8 b0 00
- jmp short 01c61h ; eb 03
+ jmp short 01c9dh ; eb 03
mov ax, 000a0h ; b8 a0 00
mov dx, cx ; 89 ca
add dx, strict byte 00006h ; 83 c2 06
@@ -1746,156 +1839,159 @@ ata_reset_: ; 0xf1be6 LB 0xda
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp bl, 001h ; 80 fb 01
- jne short 01c9fh ; 75 22
+ jne short 01cdbh ; 75 22
cmp al, bl ; 38 d8
- jne short 01c9fh ; 75 1e
+ jne short 01cdbh ; 75 1e
mov bx, strict word 0ffffh ; bb ff ff
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 01c9fh ; 76 16
+ jbe short 01cdbh ; 76 16
mov dx, cx ; 89 ca
add dx, strict byte 00007h ; 83 c2 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 080h ; a8 80
- je short 01c9fh ; 74 0a
+ je short 01cdbh ; 74 0a
mov ax, strict word 0ffffh ; b8 ff ff
dec ax ; 48
test ax, ax ; 85 c0
- jnbe short 01c98h ; 77 fb
- jmp short 01c84h ; eb e5
+ jnbe short 01cd4h ; 77 fb
+ jmp short 01cc0h ; eb e5
mov bx, strict word 00010h ; bb 10 00
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 01cb3h ; 76 0c
+ jbe short 01cefh ; 76 0c
mov dx, cx ; 89 ca
add dx, strict byte 00007h ; 83 c2 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 040h ; a8 40
- je short 01ca2h ; 74 ef
+ je short 01cdeh ; 74 ef
lea dx, [si+006h] ; 8d 54 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
- leave ; c9
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-ata_cmd_data_in_: ; 0xf1cc0 LB 0x263
+ata_cmd_data_in_: ; 0xf1cff LB 0x258
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0001ch, 000h ; c8 1c 00 00
+ sub sp, strict byte 0001ch ; 83 ec 1c
mov si, ax ; 89 c6
- mov word [bp-006h], dx ; 89 56 fa
- mov word [bp-012h], bx ; 89 5e ee
- mov word [bp-010h], cx ; 89 4e f0
+ mov word [bp-00ah], dx ; 89 56 f6
+ mov word [bp-016h], bx ; 89 5e ea
+ mov word [bp-014h], cx ; 89 4e ec
mov es, dx ; 8e c2
movzx ax, byte [es:si+008h] ; 26 0f b6 44 08
mov dx, ax ; 89 c2
shr dx, 1 ; d1 ea
mov dh, al ; 88 c6
and dh, 001h ; 80 e6 01
- mov byte [bp-004h], dh ; 88 76 fc
+ mov byte [bp-008h], dh ; 88 76 f8
movzx di, dl ; 0f b6 fa
imul di, di, strict byte 00006h ; 6b ff 06
add di, si ; 01 f7
mov bx, word [es:di+001c2h] ; 26 8b 9d c2 01
mov dx, word [es:di+001c4h] ; 26 8b 95 c4 01
- mov word [bp-018h], dx ; 89 56 e8
+ mov word [bp-01ch], dx ; 89 56 e4
imul ax, ax, strict byte 00018h ; 6b c0 18
mov di, si ; 89 f7
add di, ax ; 01 c7
mov al, byte [es:di+022h] ; 26 8a 45 22
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
mov ax, word [es:di+024h] ; 26 8b 45 24
- mov word [bp-008h], ax ; 89 46 f8
+ mov word [bp-00ch], ax ; 89 46 f4
test ax, ax ; 85 c0
- jne short 01d26h ; 75 14
- cmp byte [bp-002h], 001h ; 80 7e fe 01
- jne short 01d1fh ; 75 07
- mov word [bp-008h], 04000h ; c7 46 f8 00 40
- jmp short 01d35h ; eb 16
- mov word [bp-008h], 08000h ; c7 46 f8 00 80
- jmp short 01d35h ; eb 0f
- cmp byte [bp-002h], 001h ; 80 7e fe 01
- jne short 01d32h ; 75 06
- shr word [bp-008h], 002h ; c1 6e f8 02
- jmp short 01d35h ; eb 03
- shr word [bp-008h], 1 ; d1 6e f8
+ jne short 01d67h ; 75 14
+ cmp byte [bp-006h], 001h ; 80 7e fa 01
+ jne short 01d60h ; 75 07
+ mov word [bp-00ch], 04000h ; c7 46 f4 00 40
+ jmp short 01d76h ; eb 16
+ mov word [bp-00ch], 08000h ; c7 46 f4 00 80
+ jmp short 01d76h ; eb 0f
+ cmp byte [bp-006h], 001h ; 80 7e fa 01
+ jne short 01d73h ; 75 06
+ shr word [bp-00ch], 002h ; c1 6e f4 02
+ jmp short 01d76h ; eb 03
+ shr word [bp-00ch], 1 ; d1 6e f4
lea dx, [bx+007h] ; 8d 57 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 080h ; a8 80
- je short 01d4eh ; 74 0f
- mov dx, word [bp-018h] ; 8b 56 e8
+ je short 01d8fh ; 74 0f
+ mov dx, word [bp-01ch] ; 8b 56 e4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00001h ; ba 01 00
- jmp near 01f0dh ; e9 bf 01
- mov es, [bp-006h] ; 8e 46 fa
+ jmp near 01f4eh ; e9 bf 01
+ mov es, [bp-00ah] ; 8e 46 f6
mov ax, word [es:si] ; 26 8b 04
- mov word [bp-01ch], ax ; 89 46 e4
+ mov word [bp-020h], ax ; 89 46 e0
mov ax, word [es:si+002h] ; 26 8b 44 02
- mov word [bp-01ah], ax ; 89 46 e6
+ mov word [bp-01eh], ax ; 89 46 e2
mov di, word [es:si+004h] ; 26 8b 7c 04
mov ax, word [es:si+006h] ; 26 8b 44 06
- mov word [bp-00ah], ax ; 89 46 f6
+ mov word [bp-00eh], ax ; 89 46 f2
mov ax, word [es:si+012h] ; 26 8b 44 12
- mov word [bp-00ch], ax ; 89 46 f4
+ mov word [bp-010h], ax ; 89 46 f0
mov ax, word [es:si+00eh] ; 26 8b 44 0e
- mov word [bp-00eh], ax ; 89 46 f2
+ mov word [bp-012h], ax ; 89 46 ee
mov ax, word [es:si+010h] ; 26 8b 44 10
- mov word [bp-014h], ax ; 89 46 ec
- mov ax, word [bp-00ch] ; 8b 46 f4
+ mov word [bp-018h], ax ; 89 46 e8
+ mov ax, word [bp-010h] ; 8b 46 f0
test ax, ax ; 85 c0
- jne short 01dech ; 75 67
- mov dx, word [bp-01ch] ; 8b 56 e4
- add dx, word [bp-010h] ; 03 56 f0
- adc ax, word [bp-01ah] ; 13 46 e6
+ jne short 01e2dh ; 75 67
+ mov dx, word [bp-020h] ; 8b 56 e0
+ add dx, word [bp-014h] ; 03 56 ec
+ adc ax, word [bp-01eh] ; 13 46 e2
cmp ax, 01000h ; 3d 00 10
- jnbe short 01d95h ; 77 02
- jne short 01dc0h ; 75 2b
- mov ax, word [bp-01ah] ; 8b 46 e6
+ jnbe short 01dd6h ; 77 02
+ jne short 01e01h ; 75 2b
+ mov ax, word [bp-01eh] ; 8b 46 e2
xor al, al ; 30 c0
shr ax, 008h ; c1 e8 08
- mov word [bp-00ch], ax ; 89 46 f4
- mov ax, word [bp-010h] ; 8b 46 f0
+ mov word [bp-010h], ax ; 89 46 f0
+ mov ax, word [bp-014h] ; 8b 46 ec
xor al, al ; 30 c0
shr ax, 008h ; c1 e8 08
lea dx, [bx+002h] ; 8d 57 02
out DX, AL ; ee
lea dx, [bx+003h] ; 8d 57 03
- mov al, byte [bp-00ch] ; 8a 46 f4
+ mov al, byte [bp-010h] ; 8a 46 f0
out DX, AL ; ee
lea dx, [bx+004h] ; 8d 57 04
xor al, al ; 30 c0
out DX, AL ; ee
lea dx, [bx+005h] ; 8d 57 05
out DX, AL ; ee
- mov byte [bp-019h], al ; 88 46 e7
- mov ax, word [bp-01ch] ; 8b 46 e4
+ mov byte [bp-01dh], al ; 88 46 e3
+ mov ax, word [bp-020h] ; 8b 46 e0
xor ah, ah ; 30 e4
- mov word [bp-00ch], ax ; 89 46 f4
+ mov word [bp-010h], ax ; 89 46 f0
mov cx, strict word 00008h ; b9 08 00
- shr word [bp-01ah], 1 ; d1 6e e6
- rcr word [bp-01ch], 1 ; d1 5e e4
- loop 01dcbh ; e2 f8
- mov ax, word [bp-01ch] ; 8b 46 e4
- mov word [bp-00eh], ax ; 89 46 f2
- mov ax, word [bp-01ah] ; 8b 46 e6
- mov word [bp-01ch], ax ; 89 46 e4
- mov word [bp-01ah], strict word 00000h ; c7 46 e6 00 00
+ shr word [bp-01eh], 1 ; d1 6e e2
+ rcr word [bp-020h], 1 ; d1 5e e0
+ loop 01e0ch ; e2 f8
+ mov ax, word [bp-020h] ; 8b 46 e0
+ mov word [bp-012h], ax ; 89 46 ee
+ mov ax, word [bp-01eh] ; 8b 46 e2
+ mov word [bp-020h], ax ; 89 46 e0
+ mov word [bp-01eh], strict word 00000h ; c7 46 e2 00 00
and ax, strict word 0000fh ; 25 0f 00
or AL, strict byte 040h ; 0c 40
- mov word [bp-014h], ax ; 89 46 ec
- mov dx, word [bp-018h] ; 8b 56 e8
+ mov word [bp-018h], ax ; 89 46 e8
+ mov dx, word [bp-01ch] ; 8b 56 e4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 00ah ; b0 0a
out DX, AL ; ee
@@ -1903,519 +1999,519 @@ ata_cmd_data_in_: ; 0xf1cc0 LB 0x263
xor al, al ; 30 c0
out DX, AL ; ee
lea dx, [bx+002h] ; 8d 57 02
- mov al, byte [bp-010h] ; 8a 46 f0
+ mov al, byte [bp-014h] ; 8a 46 ec
out DX, AL ; ee
lea dx, [bx+003h] ; 8d 57 03
- mov al, byte [bp-00ch] ; 8a 46 f4
+ mov al, byte [bp-010h] ; 8a 46 f0
out DX, AL ; ee
- mov ax, word [bp-00eh] ; 8b 46 f2
+ mov ax, word [bp-012h] ; 8b 46 ee
lea dx, [bx+004h] ; 8d 57 04
out DX, AL ; ee
shr ax, 008h ; c1 e8 08
lea dx, [bx+005h] ; 8d 57 05
out DX, AL ; ee
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 01e22h ; 74 05
+ cmp byte [bp-008h], 000h ; 80 7e f8 00
+ je short 01e63h ; 74 05
mov ax, 000b0h ; b8 b0 00
- jmp short 01e25h ; eb 03
+ jmp short 01e66h ; eb 03
mov ax, 000a0h ; b8 a0 00
- movzx dx, byte [bp-014h] ; 0f b6 56 ec
+ movzx dx, byte [bp-018h] ; 0f b6 56 e8
or ax, dx ; 09 d0
lea dx, [bx+006h] ; 8d 57 06
out DX, AL ; ee
lea dx, [bx+007h] ; 8d 57 07
- mov al, byte [bp-012h] ; 8a 46 ee
+ mov al, byte [bp-016h] ; 8a 46 ea
out DX, AL ; ee
- mov ax, word [bp-012h] ; 8b 46 ee
+ mov ax, word [bp-016h] ; 8b 46 ea
cmp ax, 000c4h ; 3d c4 00
- je short 01e43h ; 74 05
+ je short 01e84h ; 74 05
cmp ax, strict word 00029h ; 3d 29 00
- jne short 01e50h ; 75 0d
- mov ax, word [bp-010h] ; 8b 46 f0
- mov word [bp-016h], ax ; 89 46 ea
- mov word [bp-010h], strict word 00001h ; c7 46 f0 01 00
- jmp short 01e55h ; eb 05
- mov word [bp-016h], strict word 00001h ; c7 46 ea 01 00
+ jne short 01e91h ; 75 0d
+ mov ax, word [bp-014h] ; 8b 46 ec
+ mov word [bp-01ah], ax ; 89 46 e6
+ mov word [bp-014h], strict word 00001h ; c7 46 ec 01 00
+ jmp short 01e96h ; eb 05
+ mov word [bp-01ah], strict word 00001h ; c7 46 e6 01 00
lea dx, [bx+007h] ; 8d 57 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
mov dl, al ; 88 c2
test AL, strict byte 080h ; a8 80
- jne short 01e55h ; 75 f4
+ jne short 01e96h ; 75 f4
test AL, strict byte 001h ; a8 01
- je short 01e74h ; 74 0f
- mov dx, word [bp-018h] ; 8b 56 e8
+ je short 01eb5h ; 74 0f
+ mov dx, word [bp-01ch] ; 8b 56 e4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00002h ; ba 02 00
- jmp near 01f0dh ; e9 99 00
+ jmp near 01f4eh ; e9 99 00
test dl, 008h ; f6 c2 08
- jne short 01e88h ; 75 0f
- mov dx, word [bp-018h] ; 8b 56 e8
+ jne short 01ec9h ; 75 0f
+ mov dx, word [bp-01ch] ; 8b 56 e4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00003h ; ba 03 00
- jmp near 01f0dh ; e9 85 00
+ jmp near 01f4eh ; e9 85 00
sti ; fb
cmp di, 0f800h ; 81 ff 00 f8
- jc short 01e9ch ; 72 0d
+ jc short 01eddh ; 72 0d
sub di, 00800h ; 81 ef 00 08
- mov ax, word [bp-00ah] ; 8b 46 f6
+ mov ax, word [bp-00eh] ; 8b 46 f2
add ax, 00080h ; 05 80 00
- mov word [bp-00ah], ax ; 89 46 f6
- cmp byte [bp-002h], 001h ; 80 7e fe 01
- jne short 01eafh ; 75 0d
+ mov word [bp-00eh], ax ; 89 46 f2
+ cmp byte [bp-006h], 001h ; 80 7e fa 01
+ jne short 01ef0h ; 75 0d
mov dx, bx ; 89 da
- mov cx, word [bp-008h] ; 8b 4e f8
- mov es, [bp-00ah] ; 8e 46 f6
+ mov cx, word [bp-00ch] ; 8b 4e f4
+ mov es, [bp-00eh] ; 8e 46 f2
db 0f3h, 066h, 06dh
; rep insd ; f3 66 6d
- jmp short 01eb9h ; eb 0a
+ jmp short 01efah ; eb 0a
mov dx, bx ; 89 da
- mov cx, word [bp-008h] ; 8b 4e f8
- mov es, [bp-00ah] ; 8e 46 f6
+ mov cx, word [bp-00ch] ; 8b 4e f4
+ mov es, [bp-00eh] ; 8e 46 f2
rep insw ; f3 6d
- mov ax, word [bp-016h] ; 8b 46 ea
- mov es, [bp-006h] ; 8e 46 fa
+ mov ax, word [bp-01ah] ; 8b 46 e6
+ mov es, [bp-00ah] ; 8e 46 f6
add word [es:si+014h], ax ; 26 01 44 14
- dec word [bp-010h] ; ff 4e f0
+ dec word [bp-014h] ; ff 4e ec
lea dx, [bx+007h] ; 8d 57 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
mov dl, al ; 88 c2
test AL, strict byte 080h ; a8 80
- jne short 01ec6h ; 75 f4
- cmp word [bp-010h], strict byte 00000h ; 83 7e f0 00
- jne short 01eech ; 75 14
+ jne short 01f07h ; 75 f4
+ cmp word [bp-014h], strict byte 00000h ; 83 7e ec 00
+ jne short 01f2dh ; 75 14
and AL, strict byte 0c9h ; 24 c9
cmp AL, strict byte 040h ; 3c 40
- je short 01f02h ; 74 24
- mov dx, word [bp-018h] ; 8b 56 e8
+ je short 01f43h ; 74 24
+ mov dx, word [bp-01ch] ; 8b 56 e4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00004h ; ba 04 00
- jmp short 01f0dh ; eb 21
+ jmp short 01f4eh ; eb 21
mov al, dl ; 88 d0
and AL, strict byte 0c9h ; 24 c9
cmp AL, strict byte 048h ; 3c 48
- je short 01e89h ; 74 95
- mov dx, word [bp-018h] ; 8b 56 e8
+ je short 01ecah ; 74 95
+ mov dx, word [bp-01ch] ; 8b 56 e4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00005h ; ba 05 00
- jmp short 01f0dh ; eb 0b
- mov dx, word [bp-018h] ; 8b 56 e8
+ jmp short 01f4eh ; eb 0b
+ mov dx, word [bp-01ch] ; 8b 56 e4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
xor dx, dx ; 31 d2
mov ax, dx ; 89 d0
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
- dec bp ; 4d
- and word [di-076dfh], ax ; 21 85 21 89
- and word [di-06edfh], cx ; 21 8d 21 91
- and word [di-066dfh], dx ; 21 95 21 99
- db 021h
- popfw ; 9d
- db 021h
-_ata_detect: ; 0xf1f23 LB 0x621
+_ata_detect: ; 0xf1f57 LB 0x617
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0025ah, 000h ; c8 5a 02 00
+ sub sp, 0025ch ; 81 ec 5c 02
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 ea f6
- mov word [bp-022h], ax ; 89 46 de
- mov bx, 00122h ; bb 22 01
+ call 0161ch ; e8 b3 f6
+ mov word [bp-024h], ax ; 89 46 dc
+ mov di, 00122h ; bf 22 01
mov es, ax ; 8e c0
- mov si, bx ; 89 de
+ mov word [bp-028h], di ; 89 7e d8
mov word [bp-026h], ax ; 89 46 da
- mov byte [es:bx+001c0h], 000h ; 26 c6 87 c0 01 00
- db 066h, 026h, 0c7h, 087h, 0c2h, 001h, 0f0h, 001h, 0f0h, 003h
- ; mov dword [es:bx+001c2h], strict dword 003f001f0h ; 66 26 c7 87 c2 01 f0 01 f0 03
- mov byte [es:bx+001c1h], 00eh ; 26 c6 87 c1 01 0e
- mov byte [es:bx+001c6h], 000h ; 26 c6 87 c6 01 00
- db 066h, 026h, 0c7h, 087h, 0c8h, 001h, 070h, 001h, 070h, 003h
- ; mov dword [es:bx+001c8h], strict dword 003700170h ; 66 26 c7 87 c8 01 70 01 70 03
- mov byte [es:bx+001c7h], 00fh ; 26 c6 87 c7 01 0f
+ mov byte [es:di+001c0h], 000h ; 26 c6 85 c0 01 00
+ db 066h, 026h, 0c7h, 085h, 0c2h, 001h, 0f0h, 001h, 0f0h, 003h
+ ; mov dword [es:di+001c2h], strict dword 003f001f0h ; 66 26 c7 85 c2 01 f0 01 f0 03
+ mov byte [es:di+001c1h], 00eh ; 26 c6 85 c1 01 0e
+ mov byte [es:di+001c6h], 000h ; 26 c6 85 c6 01 00
+ db 066h, 026h, 0c7h, 085h, 0c8h, 001h, 070h, 001h, 070h, 003h
+ ; mov dword [es:di+001c8h], strict dword 003700170h ; 66 26 c7 85 c8 01 70 01 70 03
+ mov byte [es:di+001c7h], 00fh ; 26 c6 85 c7 01 0f
xor al, al ; 30 c0
+ mov byte [bp-00ah], al ; 88 46 f6
mov byte [bp-006h], al ; 88 46 fa
- mov byte [bp-014h], al ; 88 46 ec
- mov byte [bp-016h], al ; 88 46 ea
- jmp near 024cfh ; e9 56 05
+ mov byte [bp-00eh], al ; 88 46 f2
+ jmp near 024f9h ; e9 48 05
mov ax, 000a0h ; b8 a0 00
- lea dx, [bx+006h] ; 8d 57 06
+ lea dx, [si+006h] ; 8d 54 06
out DX, AL ; ee
- lea di, [bx+002h] ; 8d 7f 02
+ lea di, [si+002h] ; 8d 7c 02
mov AL, strict byte 055h ; b0 55
mov dx, di ; 89 fa
out DX, AL ; ee
- lea cx, [bx+003h] ; 8d 4f 03
+ lea bx, [si+003h] ; 8d 5c 03
mov AL, strict byte 0aah ; b0 aa
- mov dx, cx ; 89 ca
+ mov dx, bx ; 89 da
out DX, AL ; ee
mov dx, di ; 89 fa
out DX, AL ; ee
mov AL, strict byte 055h ; b0 55
- mov dx, cx ; 89 ca
+ mov dx, bx ; 89 da
out DX, AL ; ee
mov dx, di ; 89 fa
out DX, AL ; ee
mov AL, strict byte 0aah ; b0 aa
- mov dx, cx ; 89 ca
+ mov dx, bx ; 89 da
out DX, AL ; ee
mov dx, di ; 89 fa
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov word [bp-028h], ax ; 89 46 d8
- mov dx, cx ; 89 ca
+ mov cx, ax ; 89 c1
+ mov dx, bx ; 89 da
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- cmp byte [bp-028h], 055h ; 80 7e d8 55
- jne near 02084h ; 0f 85 cf 00
+ cmp cl, 055h ; 80 f9 55
+ jne near 020abh ; 0f 85 c0 00
cmp AL, strict byte 0aah ; 3c aa
- jne near 02084h ; 0f 85 c9 00
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
+ jne near 020abh ; 0f 85 ba 00
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
imul ax, ax, strict byte 00018h ; 6b c0 18
- mov es, [bp-026h] ; 8e 46 da
- mov di, si ; 89 f7
- add di, ax ; 01 c7
- mov byte [es:di+01eh], 001h ; 26 c6 45 1e 01
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
- call 01be6h ; e8 11 fc
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 01fe0h ; 74 05
+ les bx, [bp-028h] ; c4 5e d8
+ add bx, ax ; 01 c3
+ mov byte [es:bx+01eh], 001h ; 26 c6 47 1e 01
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ call 01c21h ; e8 18 fc
+ cmp byte [bp-008h], 000h ; 80 7e f8 00
+ je short 02014h ; 74 05
mov ax, 000b0h ; b8 b0 00
- jmp short 01fe3h ; eb 03
+ jmp short 02017h ; eb 03
mov ax, 000a0h ; b8 a0 00
- lea dx, [bx+006h] ; 8d 57 06
+ lea dx, [si+006h] ; 8d 54 06
out DX, AL ; ee
- lea dx, [bx+002h] ; 8d 57 02
+ lea dx, [si+002h] ; 8d 54 02
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov cx, ax ; 89 c1
- lea dx, [bx+003h] ; 8d 57 03
+ mov bx, ax ; 89 c3
+ lea dx, [si+003h] ; 8d 54 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- cmp cl, 001h ; 80 f9 01
- jne near 02084h ; 0f 85 88 00
- cmp al, cl ; 38 c8
- jne near 02084h ; 0f 85 82 00
- lea dx, [bx+004h] ; 8d 57 04
+ cmp bl, 001h ; 80 fb 01
+ jne near 020abh ; 0f 85 7b 00
+ cmp al, bl ; 38 d8
+ jne near 020abh ; 0f 85 75 00
+ lea dx, [si+004h] ; 8d 54 04
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov word [bp-028h], ax ; 89 46 d8
- mov al, byte [bp-028h] ; 8a 46 d8
- mov byte [bp-00ch], al ; 88 46 f4
- lea dx, [bx+005h] ; 8d 57 05
+ mov bx, ax ; 89 c3
+ mov bh, al ; 88 c7
+ lea dx, [si+005h] ; 8d 54 05
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
mov cx, ax ; 89 c1
- mov byte [bp-00ah], al ; 88 46 f6
- lea dx, [bx+007h] ; 8d 57 07
+ mov byte [bp-00ch], al ; 88 46 f4
+ lea dx, [si+007h] ; 8d 54 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- cmp byte [bp-028h], 014h ; 80 7e d8 14
- jne short 02040h ; 75 18
+ cmp bl, 014h ; 80 fb 14
+ jne short 0206eh ; 75 18
cmp cl, 0ebh ; 80 f9 eb
- jne short 02040h ; 75 13
- movzx bx, byte [bp-016h] ; 0f b6 5e ea
- imul bx, bx, strict byte 00018h ; 6b db 18
- mov es, [bp-026h] ; 8e 46 da
- add bx, si ; 01 f3
+ jne short 0206eh ; 75 13
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ les bx, [bp-028h] ; c4 5e d8
+ add bx, ax ; 01 c3
mov byte [es:bx+01eh], 003h ; 26 c6 47 1e 03
- jmp short 02084h ; eb 44
+ jmp short 020abh ; eb 3d
+ test bh, bh ; 84 ff
+ jne short 02090h ; 75 1e
cmp byte [bp-00ch], 000h ; 80 7e f4 00
- jne short 02065h ; 75 1f
- cmp byte [bp-00ah], 000h ; 80 7e f6 00
- jne short 02065h ; 75 19
+ jne short 02090h ; 75 18
test al, al ; 84 c0
- je short 02065h ; 74 15
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
- imul ax, ax, strict byte 00018h ; 6b c0 18
+ je short 02090h ; 74 14
+ movzx bx, byte [bp-00eh] ; 0f b6 5e f2
+ imul bx, bx, strict byte 00018h ; 6b db 18
mov es, [bp-026h] ; 8e 46 da
- mov bx, si ; 89 f3
- add bx, ax ; 01 c3
+ add bx, word [bp-028h] ; 03 5e d8
mov byte [es:bx+01eh], 002h ; 26 c6 47 1e 02
- jmp short 02084h ; eb 1f
- cmp byte [bp-00ch], 0ffh ; 80 7e f4 ff
- jne short 02084h ; 75 19
- cmp byte [bp-00ah], 0ffh ; 80 7e f6 ff
- jne short 02084h ; 75 13
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
+ jmp short 020abh ; eb 1b
+ cmp bh, 0ffh ; 80 ff ff
+ jne short 020abh ; 75 16
+ cmp bh, byte [bp-00ch] ; 3a 7e f4
+ jne short 020abh ; 75 11
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
imul ax, ax, strict byte 00018h ; 6b c0 18
- mov es, [bp-026h] ; 8e 46 da
- mov bx, si ; 89 f3
+ les bx, [bp-028h] ; c4 5e d8
add bx, ax ; 01 c3
mov byte [es:bx+01eh], 000h ; 26 c6 47 1e 00
mov dx, word [bp-02ch] ; 8b 56 d4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
- imul ax, ax, strict byte 00018h ; 6b c0 18
+ movzx si, byte [bp-00eh] ; 0f b6 76 f2
+ imul si, si, strict byte 00018h ; 6b f6 18
mov es, [bp-026h] ; 8e 46 da
- mov bx, si ; 89 f3
- add bx, ax ; 01 c3
- mov al, byte [es:bx+01eh] ; 26 8a 47 1e
- mov byte [bp-002h], al ; 88 46 fe
+ add si, word [bp-028h] ; 03 76 d8
+ mov al, byte [es:si+01eh] ; 26 8a 44 1e
+ mov byte [bp-010h], al ; 88 46 f0
cmp AL, strict byte 002h ; 3c 02
- jne near 022a3h ; 0f 85 fb 01
- mov byte [es:bx+01fh], 0ffh ; 26 c6 47 1f ff
- mov byte [es:bx+022h], 000h ; 26 c6 47 22 00
- lea dx, [bp-0025ah] ; 8d 96 a6 fd
- mov word [es:si+004h], dx ; 26 89 54 04
- mov [es:si+006h], ss ; 26 8c 54 06
- mov al, byte [bp-016h] ; 8a 46 ea
- mov byte [es:si+008h], al ; 26 88 44 08
+ jne near 022d1h ; 0f 85 03 02
+ mov byte [es:si+01fh], 0ffh ; 26 c6 44 1f ff
+ mov byte [es:si+022h], 000h ; 26 c6 44 22 00
+ lea dx, [bp-00260h] ; 8d 96 a0 fd
+ mov bx, word [bp-028h] ; 8b 5e d8
+ mov word [es:bx+004h], dx ; 26 89 57 04
+ mov [es:bx+006h], ss ; 26 8c 57 06
+ mov al, byte [bp-00eh] ; 8a 46 f2
+ mov byte [es:bx+008h], al ; 26 88 47 08
mov cx, strict word 00001h ; b9 01 00
mov bx, 000ech ; bb ec 00
- mov ax, si ; 89 f0
+ mov ax, word [bp-028h] ; 8b 46 d8
mov dx, es ; 8c c2
- call 01cc0h ; e8 ee fb
+ call 01cffh ; e8 03 fc
test ax, ax ; 85 c0
- je short 020e1h ; 74 0b
- push 00084h ; 68 84 00
+ je short 0210bh ; 74 0b
+ push 00104h ; 68 04 01
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 0b f8
+ call 01922h ; e8 1a f8
add sp, strict byte 00004h ; 83 c4 04
- test byte [bp-0025ah], 080h ; f6 86 a6 fd 80
+ test byte [bp-00260h], 080h ; f6 86 a0 fd 80
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
xor ah, ah ; 30 e4
- mov byte [bp-008h], al ; 88 46 f8
- cmp byte [bp-001fah], 000h ; 80 be 06 fe 00
+ mov byte [bp-014h], al ; 88 46 ec
+ cmp byte [bp-00200h], 000h ; 80 be 00 fe 00
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
xor ah, ah ; 30 e4
- mov byte [bp-00eh], al ; 88 46 f2
- mov word [bp-024h], 00200h ; c7 46 dc 00 02
- mov ax, word [bp-00258h] ; 8b 86 a8 fd
- mov word [bp-01eh], ax ; 89 46 e2
- mov ax, word [bp-00254h] ; 8b 86 ac fd
+ mov byte [bp-016h], al ; 88 46 ea
+ mov word [bp-022h], 00200h ; c7 46 de 00 02
+ mov ax, word [bp-0025eh] ; 8b 86 a2 fd
+ mov word [bp-01ah], ax ; 89 46 e6
+ mov ax, word [bp-0025ah] ; 8b 86 a6 fd
mov word [bp-01ch], ax ; 89 46 e4
- mov ax, word [bp-0024eh] ; 8b 86 b2 fd
- mov word [bp-018h], ax ; 89 46 e8
- mov ax, word [bp-001e2h] ; 8b 86 1e fe
+ mov ax, word [bp-00254h] ; 8b 86 ac fd
+ mov word [bp-01eh], ax ; 89 46 e2
+ mov ax, word [bp-001e8h] ; 8b 86 18 fe
mov word [bp-020h], ax ; 89 46 e0
- mov ax, word [bp-001e0h] ; 8b 86 20 fe
- mov word [bp-02ah], ax ; 89 46 d6
- cmp ax, 00fffh ; 3d ff 0f
- jne short 0213ch ; 75 14
- cmp word [bp-020h], strict byte 0ffffh ; 83 7e e0 ff
- jne short 0213ch ; 75 0e
- mov ax, word [bp-00192h] ; 8b 86 6e fe
+ mov si, word [bp-001e6h] ; 8b b6 1a fe
+ cmp si, 00fffh ; 81 fe ff 0f
+ jne short 02160h ; 75 10
+ cmp ax, strict word 0ffffh ; 3d ff ff
+ jne short 02160h ; 75 0b
+ mov ax, word [bp-00198h] ; 8b 86 68 fe
mov word [bp-020h], ax ; 89 46 e0
- mov ax, word [bp-00190h] ; 8b 86 70 fe
- mov word [bp-02ah], ax ; 89 46 d6
- mov al, byte [bp-016h] ; 8a 46 ea
- cmp AL, strict byte 007h ; 3c 07
- jnbe short 021a1h ; 77 5e
- movzx bx, al ; 0f b6 d8
- add bx, bx ; 01 db
- jmp word [cs:bx+01f13h] ; 2e ff a7 13 1f
+ mov si, word [bp-00196h] ; 8b b6 6a fe
+ mov al, byte [bp-00eh] ; 8a 46 f2
+ cmp AL, strict byte 001h ; 3c 01
+ jc short 02173h ; 72 0c
+ jbe short 0217bh ; 76 12
+ cmp AL, strict byte 003h ; 3c 03
+ je short 02183h ; 74 16
+ cmp AL, strict byte 002h ; 3c 02
+ je short 0217fh ; 74 0e
+ jmp short 021c0h ; eb 4d
+ test al, al ; 84 c0
+ jne short 021c0h ; 75 49
mov BL, strict byte 01eh ; b3 1e
+ jmp short 02185h ; eb 0a
+ mov BL, strict byte 026h ; b3 26
+ jmp short 02185h ; eb 06
+ mov BL, strict byte 067h ; b3 67
+ jmp short 02185h ; eb 02
+ mov BL, strict byte 070h ; b3 70
mov al, bl ; 88 d8
db 0feh, 0c0h
; inc al ; fe c0
xor ah, ah ; 30 e4
- call 0165ch ; e8 04 f5
+ call 0165ch ; e8 ce f4
xor ah, ah ; 30 e4
- mov di, ax ; 89 c7
- sal di, 008h ; c1 e7 08
+ mov dx, ax ; 89 c2
+ sal dx, 008h ; c1 e2 08
movzx ax, bl ; 0f b6 c3
- call 0165ch ; e8 f7 f4
+ call 0165ch ; e8 c1 f4
xor ah, ah ; 30 e4
- add di, ax ; 01 c7
+ add ax, dx ; 01 d0
+ mov word [bp-034h], ax ; 89 46 cc
mov al, bl ; 88 d8
add AL, strict byte 002h ; 04 02
xor ah, ah ; 30 e4
- call 0165ch ; e8 ea f4
- movzx dx, al ; 0f b6 d0
+ call 0165ch ; e8 b1 f4
+ xor ah, ah ; 30 e4
+ mov word [bp-036h], ax ; 89 46 ca
mov al, bl ; 88 d8
add AL, strict byte 007h ; 04 07
xor ah, ah ; 30 e4
- call 0165ch ; e8 de f4
+ call 0165ch ; e8 a3 f4
xor ah, ah ; 30 e4
- mov word [bp-01ah], ax ; 89 46 e6
- jmp short 021a8h ; eb 23
- mov BL, strict byte 026h ; b3 26
- jmp short 0214fh ; eb c6
- mov BL, strict byte 067h ; b3 67
- jmp short 0214fh ; eb c2
- mov BL, strict byte 070h ; b3 70
- jmp short 0214fh ; eb be
- mov BL, strict byte 040h ; b3 40
- jmp short 0214fh ; eb ba
- mov BL, strict byte 048h ; b3 48
- jmp short 0214fh ; eb b6
- mov BL, strict byte 050h ; b3 50
- jmp short 0214fh ; eb b2
- mov BL, strict byte 058h ; b3 58
- jmp short 0214fh ; eb ae
- xor di, di ; 31 ff
- xor dx, dx ; 31 d2
- mov word [bp-01ah], di ; 89 7e e6
- mov bx, 00cd6h ; bb d6 0c
+ mov word [bp-032h], ax ; 89 46 ce
+ jmp short 021cdh ; eb 0d
+ mov bx, word [bp-020h] ; 8b 5e e0
+ mov cx, si ; 89 f1
+ mov dx, ss ; 8c d2
+ lea ax, [bp-036h] ; 8d 46 ca
+ call 05341h ; e8 74 31
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 fb f6
+ call 018e1h ; e8 09 f7
+ mov ax, word [bp-032h] ; 8b 46 ce
+ push ax ; 50
+ mov ax, word [bp-036h] ; 8b 46 ca
+ push ax ; 50
+ mov ax, word [bp-034h] ; 8b 46 cc
+ push ax ; 50
+ push word [bp-01eh] ; ff 76 e2
+ push word [bp-01ch] ; ff 76 e4
push word [bp-01ah] ; ff 76 e6
- push dx ; 52
- push di ; 57
- push word [bp-018h] ; ff 76 e8
- push dword [bp-01eh] ; 66 ff 76 e2
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
push ax ; 50
- movzx ax, byte [bp-012h] ; 0f b6 46 ee
+ movzx ax, byte [bp-018h] ; 0f b6 46 e8
push ax ; 50
- push 000adh ; 68 ad 00
+ push 0012dh ; 68 2d 01
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 18 f7
+ call 01922h ; e8 23 f7
add sp, strict byte 00014h ; 83 c4 14
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
imul ax, ax, strict byte 00018h ; 6b c0 18
- mov es, [bp-026h] ; 8e 46 da
- mov bx, si ; 89 f3
- add bx, ax ; 01 c3
- mov byte [es:bx+01fh], 0ffh ; 26 c6 47 1f ff
- mov al, byte [bp-008h] ; 8a 46 f8
- mov byte [es:bx+020h], al ; 26 88 47 20
- mov al, byte [bp-00eh] ; 8a 46 f2
- mov byte [es:bx+022h], al ; 26 88 47 22
- mov ax, word [bp-024h] ; 8b 46 dc
- mov word [es:bx+024h], ax ; 26 89 47 24
+ les di, [bp-028h] ; c4 7e d8
+ add di, ax ; 01 c7
+ mov byte [es:di+01fh], 0ffh ; 26 c6 45 1f ff
+ mov al, byte [bp-014h] ; 8a 46 ec
+ mov byte [es:di+020h], al ; 26 88 45 20
+ mov al, byte [bp-016h] ; 8a 46 ea
+ mov byte [es:di+022h], al ; 26 88 45 22
+ mov ax, word [bp-022h] ; 8b 46 de
+ mov word [es:di+024h], ax ; 26 89 45 24
mov ax, word [bp-01ch] ; 8b 46 e4
- mov word [es:bx+02ch], ax ; 26 89 47 2c
+ mov word [es:di+02ch], ax ; 26 89 45 2c
+ mov ax, word [bp-01ah] ; 8b 46 e6
+ mov word [es:di+02eh], ax ; 26 89 45 2e
mov ax, word [bp-01eh] ; 8b 46 e2
- mov word [es:bx+02eh], ax ; 26 89 47 2e
- mov ax, word [bp-018h] ; 8b 46 e8
- mov word [es:bx+030h], ax ; 26 89 47 30
+ mov word [es:di+030h], ax ; 26 89 45 30
mov ax, word [bp-020h] ; 8b 46 e0
- mov word [es:bx+032h], ax ; 26 89 47 32
- mov ax, word [bp-02ah] ; 8b 46 d6
- mov word [es:bx+034h], ax ; 26 89 47 34
- mov word [es:bx+026h], dx ; 26 89 57 26
- mov word [es:bx+028h], di ; 26 89 7f 28
- mov ax, word [bp-01ah] ; 8b 46 e6
- mov word [es:bx+02ah], ax ; 26 89 47 2a
- mov al, byte [bp-016h] ; 8a 46 ea
+ mov word [es:di+032h], ax ; 26 89 45 32
+ mov word [es:di+034h], si ; 26 89 75 34
+ lea di, [di+026h] ; 8d 7d 26
+ push DS ; 1e
+ push SS ; 16
+ pop DS ; 1f
+ lea si, [bp-036h] ; 8d 76 ca
+ movsw ; a5
+ movsw ; a5
+ movsw ; a5
+ pop DS ; 1f
+ mov al, byte [bp-00eh] ; 8a 46 f2
cmp AL, strict byte 002h ; 3c 02
- jnc short 0228fh ; 73 5a
+ jnc short 022bch ; 73 60
test al, al ; 84 c0
- jne short 0223eh ; 75 05
- mov bx, strict word 0003dh ; bb 3d 00
- jmp short 02241h ; eb 03
- mov bx, strict word 0004dh ; bb 4d 00
- mov cx, word [bp-022h] ; 8b 4e de
- mov es, cx ; 8e c1
- mov word [es:bx], di ; 26 89 3f
- mov byte [es:bx+002h], dl ; 26 88 57 02
- mov byte [es:bx+003h], 0a0h ; 26 c6 47 03 a0
- mov al, byte [bp-018h] ; 8a 46 e8
- mov byte [es:bx+004h], al ; 26 88 47 04
- mov ax, word [bp-01eh] ; 8b 46 e2
- mov word [es:bx+009h], ax ; 26 89 47 09
+ jne short 02265h ; 75 05
+ mov di, strict word 0003dh ; bf 3d 00
+ jmp short 02268h ; eb 03
+ mov di, strict word 0004dh ; bf 4d 00
+ mov dx, word [bp-024h] ; 8b 56 dc
+ mov ax, word [bp-034h] ; 8b 46 cc
+ mov es, dx ; 8e c2
+ mov word [es:di], ax ; 26 89 05
+ mov al, byte [bp-036h] ; 8a 46 ca
+ mov byte [es:di+002h], al ; 26 88 45 02
+ mov byte [es:di+003h], 0a0h ; 26 c6 45 03 a0
+ mov al, byte [bp-01eh] ; 8a 46 e2
+ mov byte [es:di+004h], al ; 26 88 45 04
+ mov ax, word [bp-01ah] ; 8b 46 e6
+ mov word [es:di+009h], ax ; 26 89 45 09
mov al, byte [bp-01ch] ; 8a 46 e4
- mov byte [es:bx+00bh], al ; 26 88 47 0b
- mov al, byte [bp-018h] ; 8a 46 e8
- mov byte [es:bx+00eh], al ; 26 88 47 0e
+ mov byte [es:di+00bh], al ; 26 88 45 0b
+ mov al, byte [bp-01eh] ; 8a 46 e2
+ mov byte [es:di+00eh], al ; 26 88 45 0e
xor al, al ; 30 c0
xor ah, ah ; 30 e4
- jmp short 02279h ; eb 05
+ jmp short 022a6h ; eb 05
cmp ah, 00fh ; 80 fc 0f
- jnc short 02287h ; 73 0e
- movzx di, ah ; 0f b6 fc
- mov es, cx ; 8e c1
- add di, bx ; 01 df
- add al, byte [es:di] ; 26 02 05
+ jnc short 022b4h ; 73 0e
+ movzx bx, ah ; 0f b6 dc
+ mov es, dx ; 8e c2
+ add bx, di ; 01 fb
+ add al, byte [es:bx] ; 26 02 07
db 0feh, 0c4h
; inc ah ; fe c4
- jmp short 02274h ; eb ed
+ jmp short 022a1h ; eb ed
neg al ; f6 d8
- mov es, cx ; 8e c1
- mov byte [es:bx+00fh], al ; 26 88 47 0f
- movzx bx, byte [bp-014h] ; 0f b6 5e ec
+ mov es, dx ; 8e c2
+ mov byte [es:di+00fh], al ; 26 88 45 0f
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
mov es, [bp-026h] ; 8e 46 da
- add bx, si ; 01 f3
- mov al, byte [bp-016h] ; 8a 46 ea
+ add bx, word [bp-028h] ; 03 5e d8
+ mov al, byte [bp-00eh] ; 8a 46 f2
mov byte [es:bx+0019fh], al ; 26 88 87 9f 01
- inc byte [bp-014h] ; fe 46 ec
- cmp byte [bp-002h], 003h ; 80 7e fe 03
- jne near 0233eh ; 0f 85 93 00
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
+ inc byte [bp-006h] ; fe 46 fa
+ cmp byte [bp-010h], 003h ; 80 7e f0 03
+ jne near 02371h ; 0f 85 98 00
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
imul ax, ax, strict byte 00018h ; 6b c0 18
- mov es, [bp-026h] ; 8e 46 da
- mov bx, si ; 89 f3
+ les bx, [bp-028h] ; c4 5e d8
add bx, ax ; 01 c3
mov byte [es:bx+01fh], 005h ; 26 c6 47 1f 05
mov byte [es:bx+022h], 000h ; 26 c6 47 22 00
- lea dx, [bp-0025ah] ; 8d 96 a6 fd
- mov word [es:si+004h], dx ; 26 89 54 04
- mov [es:si+006h], ss ; 26 8c 54 06
- mov al, byte [bp-016h] ; 8a 46 ea
- mov byte [es:si+008h], al ; 26 88 44 08
+ lea dx, [bp-00260h] ; 8d 96 a0 fd
+ mov bx, word [bp-028h] ; 8b 5e d8
+ mov word [es:bx+004h], dx ; 26 89 57 04
+ mov [es:bx+006h], ss ; 26 8c 57 06
+ mov al, byte [bp-00eh] ; 8a 46 f2
+ mov byte [es:bx+008h], al ; 26 88 47 08
mov cx, strict word 00001h ; b9 01 00
mov bx, 000a1h ; bb a1 00
- mov ax, si ; 89 f0
+ mov ax, word [bp-028h] ; 8b 46 d8
mov dx, es ; 8c c2
- call 01cc0h ; e8 dd f9
+ call 01cffh ; e8 ec f9
test ax, ax ; 85 c0
- je short 022f2h ; 74 0b
- push 000d4h ; 68 d4 00
+ je short 02322h ; 74 0b
+ push 00154h ; 68 54 01
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 fa f5
+ call 01922h ; e8 03 f6
add sp, strict byte 00004h ; 83 c4 04
- mov dl, byte [bp-00259h] ; 8a 96 a7 fd
- and dl, 01fh ; 80 e2 1f
- test byte [bp-0025ah], 080h ; f6 86 a6 fd 80
+ mov cl, byte [bp-0025fh] ; 8a 8e a1 fd
+ and cl, 01fh ; 80 e1 1f
+ test byte [bp-00260h], 080h ; f6 86 a0 fd 80
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
xor ah, ah ; 30 e4
- mov cx, ax ; 89 c1
- cmp byte [bp-001fah], 000h ; 80 be 06 fe 00
+ mov dx, ax ; 89 c2
+ cmp byte [bp-00200h], 000h ; 80 be 00 fe 00
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
xor ah, ah ; 30 e4
- movzx bx, byte [bp-016h] ; 0f b6 5e ea
- imul bx, bx, strict byte 00018h ; 6b db 18
- mov es, [bp-026h] ; 8e 46 da
- add bx, si ; 01 f3
- mov byte [es:bx+01fh], dl ; 26 88 57 1f
- mov byte [es:bx+020h], cl ; 26 88 4f 20
- mov byte [es:bx+022h], al ; 26 88 47 22
- mov word [es:bx+024h], 00800h ; 26 c7 47 24 00 08
- movzx bx, byte [bp-006h] ; 0f b6 5e fa
- add bx, si ; 01 f3
- mov al, byte [bp-016h] ; 8a 46 ea
+ mov bx, ax ; 89 c3
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ les si, [bp-028h] ; c4 76 d8
+ add si, ax ; 01 c6
+ mov byte [es:si+01fh], cl ; 26 88 4c 1f
+ mov byte [es:si+020h], dl ; 26 88 54 20
+ mov byte [es:si+022h], bl ; 26 88 5c 22
+ mov word [es:si+024h], 00800h ; 26 c7 44 24 00 08
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6
+ add bx, word [bp-028h] ; 03 5e d8
+ mov al, byte [bp-00eh] ; 8a 46 f2
mov byte [es:bx+001b0h], al ; 26 88 87 b0 01
- inc byte [bp-006h] ; fe 46 fa
- mov al, byte [bp-002h] ; 8a 46 fe
+ inc byte [bp-00ah] ; fe 46 f6
+ mov al, byte [bp-010h] ; 8a 46 f0
cmp AL, strict byte 003h ; 3c 03
- je short 02372h ; 74 2d
+ je short 023a4h ; 74 2c
cmp AL, strict byte 002h ; 3c 02
- jne near 023d7h ; 0f 85 8c 00
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
- imul ax, ax, strict byte 00018h ; 6b c0 18
+ jne near 02407h ; 0f 85 89 00
+ movzx bx, byte [bp-00eh] ; 0f b6 5e f2
+ imul bx, bx, strict byte 00018h ; 6b db 18
mov es, [bp-026h] ; 8e 46 da
- mov bx, si ; 89 f3
- add bx, ax ; 01 c3
+ add bx, word [bp-028h] ; 03 5e d8
mov ax, word [es:bx+032h] ; 26 8b 47 32
mov word [bp-030h], ax ; 89 46 d0
mov ax, word [es:bx+034h] ; 26 8b 47 34
@@ -2423,285 +2519,283 @@ _ata_detect: ; 0xf1f23 LB 0x621
mov cx, strict word 0000bh ; b9 0b 00
shr word [bp-02eh], 1 ; d1 6e d2
rcr word [bp-030h], 1 ; d1 5e d0
- loop 0236ah ; e2 f8
- movzx dx, byte [bp-001b9h] ; 0f b6 96 47 fe
+ loop 0239ch ; e2 f8
+ movzx dx, byte [bp-001bfh] ; 0f b6 96 41 fe
sal dx, 008h ; c1 e2 08
- movzx ax, byte [bp-001bah] ; 0f b6 86 46 fe
+ movzx ax, byte [bp-001c0h] ; 0f b6 86 40 fe
or dx, ax ; 09 c2
- mov byte [bp-010h], 00fh ; c6 46 f0 0f
- jmp short 02390h ; eb 09
- dec byte [bp-010h] ; fe 4e f0
- cmp byte [bp-010h], 000h ; 80 7e f0 00
- jbe short 0239dh ; 76 0d
- movzx cx, byte [bp-010h] ; 0f b6 4e f0
+ mov byte [bp-012h], 00fh ; c6 46 ee 0f
+ jmp short 023c2h ; eb 09
+ dec byte [bp-012h] ; fe 4e ee
+ cmp byte [bp-012h], 000h ; 80 7e ee 00
+ jbe short 023cfh ; 76 0d
+ movzx cx, byte [bp-012h] ; 0f b6 4e ee
mov ax, strict word 00001h ; b8 01 00
sal ax, CL ; d3 e0
test dx, ax ; 85 c2
- je short 02387h ; 74 ea
- xor bx, bx ; 31 db
- jmp short 023a6h ; eb 05
- cmp bx, strict byte 00014h ; 83 fb 14
- jnl short 023bbh ; 7d 15
- mov di, bx ; 89 df
- add di, bx ; 01 df
- mov al, byte [bp+di-00223h] ; 8a 83 dd fd
- mov byte [bp+di-05ah], al ; 88 43 a6
- mov al, byte [bp+di-00224h] ; 8a 83 dc fd
- mov byte [bp+di-059h], al ; 88 43 a7
- inc bx ; 43
- jmp short 023a1h ; eb e6
- mov byte [bp-032h], 000h ; c6 46 ce 00
- mov bx, strict word 00027h ; bb 27 00
- jmp short 023c9h ; eb 05
- dec bx ; 4b
- test bx, bx ; 85 db
- jle short 023d7h ; 7e 0e
- mov di, bx ; 89 df
- cmp byte [bp+di-05ah], 020h ; 80 7b a6 20
- jne short 023d7h ; 75 06
- mov byte [bp+di-05ah], 000h ; c6 43 a6 00
- jmp short 023c4h ; eb ed
- mov al, byte [bp-002h] ; 8a 46 fe
+ je short 023b9h ; 74 ea
+ xor di, di ; 31 ff
+ jmp short 023d8h ; eb 05
+ cmp di, strict byte 00014h ; 83 ff 14
+ jnl short 023edh ; 7d 15
+ mov si, di ; 89 fe
+ add si, di ; 01 fe
+ mov al, byte [bp+si-00229h] ; 8a 82 d7 fd
+ mov byte [bp+si-060h], al ; 88 42 a0
+ mov al, byte [bp+si-0022ah] ; 8a 82 d6 fd
+ mov byte [bp+si-05fh], al ; 88 42 a1
+ inc di ; 47
+ jmp short 023d3h ; eb e6
+ mov byte [bp-038h], 000h ; c6 46 c8 00
+ mov di, strict word 00027h ; bf 27 00
+ jmp short 023fbh ; eb 05
+ dec di ; 4f
+ test di, di ; 85 ff
+ jle short 02407h ; 7e 0c
+ cmp byte [bp+di-060h], 020h ; 80 7b a0 20
+ jne short 02407h ; 75 06
+ mov byte [bp+di-060h], 000h ; c6 43 a0 00
+ jmp short 023f6h ; eb ef
+ mov al, byte [bp-010h] ; 8a 46 f0
cmp AL, strict byte 003h ; 3c 03
- je short 0243ch ; 74 5e
+ je short 0246ah ; 74 5c
cmp AL, strict byte 002h ; 3c 02
- je short 023ebh ; 74 09
+ je short 0241bh ; 74 09
cmp AL, strict byte 001h ; 3c 01
- je near 024a7h ; 0f 84 bf 00
- jmp near 024c6h ; e9 db 00
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 023f6h ; 74 05
- mov ax, 000ffh ; b8 ff 00
- jmp short 023f9h ; eb 03
- mov ax, 00106h ; b8 06 01
+ je near 024d1h ; 0f 84 b9 00
+ jmp near 024f0h ; e9 d5 00
+ cmp byte [bp-008h], 000h ; 80 7e f8 00
+ je short 02426h ; 74 05
+ mov ax, 0017fh ; b8 7f 01
+ jmp short 02429h ; eb 03
+ mov ax, 00186h ; b8 86 01
push ax ; 50
- movzx ax, byte [bp-012h] ; 0f b6 46 ee
+ movzx ax, byte [bp-018h] ; 0f b6 46 e8
push ax ; 50
- push 0010dh ; 68 0d 01
+ push 0018dh ; 68 8d 01
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 e2 f4
+ call 01922h ; e8 eb f4
add sp, strict byte 00008h ; 83 c4 08
- xor bx, bx ; 31 db
- mov di, bx ; 89 df
- movzx ax, byte [bp+di-05ah] ; 0f b6 43 a6
- inc bx ; 43
+ xor di, di ; 31 ff
+ movzx ax, byte [bp+di-060h] ; 0f b6 43 a0
+ inc di ; 47
test ax, ax ; 85 c0
- je short 02425h ; 74 0e
+ je short 02453h ; 74 0e
push ax ; 50
- push 00118h ; 68 18 01
+ push 00198h ; 68 98 01
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 c9 f4
+ call 01922h ; e8 d4 f4
add sp, strict byte 00006h ; 83 c4 06
- jmp short 0240ch ; eb e7
+ jmp short 0243ch ; eb e9
push dword [bp-030h] ; 66 ff 76 d0
- movzx ax, byte [bp-010h] ; 0f b6 46 f0
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee
push ax ; 50
- push 0011bh ; 68 1b 01
+ push 0019bh ; 68 9b 01
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 b3 f4
+ call 01922h ; e8 be f4
add sp, strict byte 0000ah ; 83 c4 0a
- jmp near 024c6h ; e9 8a 00
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 02447h ; 74 05
- mov ax, 000ffh ; b8 ff 00
- jmp short 0244ah ; eb 03
- mov ax, 00106h ; b8 06 01
+ jmp near 024f0h ; e9 86 00
+ cmp byte [bp-008h], 000h ; 80 7e f8 00
+ je short 02475h ; 74 05
+ mov ax, 0017fh ; b8 7f 01
+ jmp short 02478h ; eb 03
+ mov ax, 00186h ; b8 86 01
push ax ; 50
- movzx ax, byte [bp-012h] ; 0f b6 46 ee
+ movzx ax, byte [bp-018h] ; 0f b6 46 e8
push ax ; 50
- push 0010dh ; 68 0d 01
+ push 0018dh ; 68 8d 01
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 91 f4
+ call 01922h ; e8 9c f4
add sp, strict byte 00008h ; 83 c4 08
- xor bx, bx ; 31 db
- mov di, bx ; 89 df
- movzx ax, byte [bp+di-05ah] ; 0f b6 43 a6
- inc bx ; 43
+ xor di, di ; 31 ff
+ movzx ax, byte [bp+di-060h] ; 0f b6 43 a0
+ inc di ; 47
test ax, ax ; 85 c0
- je short 02476h ; 74 0e
+ je short 024a2h ; 74 0e
push ax ; 50
- push 00118h ; 68 18 01
+ push 00198h ; 68 98 01
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 78 f4
+ call 01922h ; e8 85 f4
add sp, strict byte 00006h ; 83 c4 06
- jmp short 0245dh ; eb e7
- movzx ax, byte [bp-016h] ; 0f b6 46 ea
+ jmp short 0248bh ; eb e9
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
imul ax, ax, strict byte 00018h ; 6b c0 18
- mov es, [bp-026h] ; 8e 46 da
- mov bx, si ; 89 f3
+ les bx, [bp-028h] ; c4 5e d8
add bx, ax ; 01 c3
cmp byte [es:bx+01fh], 005h ; 26 80 7f 1f 05
- jne short 02495h ; 75 0a
- movzx ax, byte [bp-010h] ; 0f b6 46 f0
+ jne short 024bfh ; 75 0a
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee
push ax ; 50
- push 0013bh ; 68 3b 01
- jmp short 0249dh ; eb 08
- movzx ax, byte [bp-010h] ; 0f b6 46 f0
+ push 001bbh ; 68 bb 01
+ jmp short 024c7h ; eb 08
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee
push ax ; 50
- push 00155h ; 68 55 01
+ push 001d5h ; 68 d5 01
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 47 f4
+ call 01922h ; e8 56 f4
add sp, strict byte 00006h ; 83 c4 06
- jmp short 024c6h ; eb 1f
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 024b2h ; 74 05
- mov ax, 000ffh ; b8 ff 00
- jmp short 024b5h ; eb 03
- mov ax, 00106h ; b8 06 01
+ jmp short 024f0h ; eb 1f
+ cmp byte [bp-008h], 000h ; 80 7e f8 00
+ je short 024dch ; 74 05
+ mov ax, 0017fh ; b8 7f 01
+ jmp short 024dfh ; eb 03
+ mov ax, 00186h ; b8 86 01
push ax ; 50
- movzx ax, byte [bp-012h] ; 0f b6 46 ee
+ movzx ax, byte [bp-018h] ; 0f b6 46 e8
push ax ; 50
- push 00167h ; 68 67 01
+ push 001e7h ; 68 e7 01
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 26 f4
+ call 01922h ; e8 35 f4
add sp, strict byte 00008h ; 83 c4 08
- inc byte [bp-016h] ; fe 46 ea
- cmp byte [bp-016h], 008h ; 80 7e ea 08
- jnc short 02520h ; 73 51
- movzx bx, byte [bp-016h] ; 0f b6 5e ea
+ inc byte [bp-00eh] ; fe 46 f2
+ cmp byte [bp-00eh], 008h ; 80 7e f2 08
+ jnc short 02547h ; 73 4e
+ movzx bx, byte [bp-00eh] ; 0f b6 5e f2
mov ax, bx ; 89 d8
cwd ; 99
db 02bh, 0c2h
; sub ax, dx ; 2b c2
sar ax, 1 ; d1 f8
- mov cx, ax ; 89 c1
- mov byte [bp-012h], al ; 88 46 ee
+ mov word [bp-02ah], ax ; 89 46 d6
+ mov al, byte [bp-02ah] ; 8a 46 d6
+ mov byte [bp-018h], al ; 88 46 e8
mov ax, bx ; 89 d8
cwd ; 99
mov bx, strict word 00002h ; bb 02 00
idiv bx ; f7 fb
- mov word [bp-028h], dx ; 89 56 d8
- mov al, byte [bp-028h] ; 8a 46 d8
- mov byte [bp-004h], al ; 88 46 fc
- movzx ax, cl ; 0f b6 c1
+ mov cx, dx ; 89 d1
+ mov byte [bp-008h], dl ; 88 56 f8
+ movzx ax, byte [bp-02ah] ; 0f b6 46 d6
imul ax, ax, strict byte 00006h ; 6b c0 06
- mov es, [bp-026h] ; 8e 46 da
- mov di, si ; 89 f7
- add di, ax ; 01 c7
- mov bx, word [es:di+001c2h] ; 26 8b 9d c2 01
- mov ax, word [es:di+001c4h] ; 26 8b 85 c4 01
+ les bx, [bp-028h] ; c4 5e d8
+ add bx, ax ; 01 c3
+ mov si, word [es:bx+001c2h] ; 26 8b b7 c2 01
+ mov ax, word [es:bx+001c4h] ; 26 8b 87 c4 01
mov word [bp-02ch], ax ; 89 46 d4
mov dx, ax ; 89 c2
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 00ah ; b0 0a
out DX, AL ; ee
- cmp byte [bp-028h], 000h ; 80 7e d8 00
- je near 01f79h ; 0f 84 5f fa
+ test cl, cl ; 84 c9
+ je near 01fb1h ; 0f 84 70 fa
mov ax, 000b0h ; b8 b0 00
- jmp near 01f7ch ; e9 5c fa
- mov al, byte [bp-014h] ; 8a 46 ec
- mov es, [bp-026h] ; 8e 46 da
- mov byte [es:si+0019eh], al ; 26 88 84 9e 01
+ jmp near 01fb4h ; e9 6d fa
mov al, byte [bp-006h] ; 8a 46 fa
- mov byte [es:si+001afh], al ; 26 88 84 af 01
- movzx bx, byte [bp-014h] ; 0f b6 5e ec
+ les bx, [bp-028h] ; c4 5e d8
+ mov byte [es:bx+0019eh], al ; 26 88 87 9e 01
+ mov al, byte [bp-00ah] ; 8a 46 f6
+ mov byte [es:bx+001afh], al ; 26 88 87 af 01
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
mov dx, strict word 00075h ; ba 75 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 ce f0
- leave ; c9
+ call 0160eh ; e8 a7 f0
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-ata_cmd_data_out_: ; 0xf2544 LB 0x215
+ata_cmd_data_out_: ; 0xf256e LB 0x21a
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0001ah, 000h ; c8 1a 00 00
+ sub sp, strict byte 0001ah ; 83 ec 1a
mov di, ax ; 89 c7
- mov word [bp-006h], dx ; 89 56 fa
- mov word [bp-016h], bx ; 89 5e ea
- mov word [bp-00ah], cx ; 89 4e f6
+ mov word [bp-00ah], dx ; 89 56 f6
+ mov word [bp-01ah], bx ; 89 5e e6
+ mov word [bp-00eh], cx ; 89 4e f2
mov es, dx ; 8e c2
movzx ax, byte [es:di+008h] ; 26 0f b6 45 08
mov dx, ax ; 89 c2
shr dx, 1 ; d1 ea
mov dh, al ; 88 c6
and dh, 001h ; 80 e6 01
- mov byte [bp-002h], dh ; 88 76 fe
+ mov byte [bp-006h], dh ; 88 76 fa
movzx si, dl ; 0f b6 f2
imul si, si, strict byte 00006h ; 6b f6 06
add si, di ; 01 fe
mov bx, word [es:si+001c2h] ; 26 8b 9c c2 01
mov dx, word [es:si+001c4h] ; 26 8b 94 c4 01
- mov word [bp-008h], dx ; 89 56 f8
+ mov word [bp-00ch], dx ; 89 56 f4
imul ax, ax, strict byte 00018h ; 6b c0 18
mov si, di ; 89 fe
add si, ax ; 01 c6
mov al, byte [es:si+022h] ; 26 8a 44 22
- mov byte [bp-004h], al ; 88 46 fc
+ mov byte [bp-008h], al ; 88 46 f8
cmp AL, strict byte 001h ; 3c 01
- jne short 02596h ; 75 07
- mov word [bp-00eh], 00080h ; c7 46 f2 80 00
- jmp short 0259bh ; eb 05
- mov word [bp-00eh], 00100h ; c7 46 f2 00 01
+ jne short 025c2h ; 75 07
+ mov word [bp-012h], 00080h ; c7 46 ee 80 00
+ jmp short 025c7h ; eb 05
+ mov word [bp-012h], 00100h ; c7 46 ee 00 01
lea dx, [bx+007h] ; 8d 57 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 080h ; a8 80
- je short 025b4h ; 74 0f
- mov dx, word [bp-008h] ; 8b 56 f8
+ je short 025e0h ; 74 0f
+ mov dx, word [bp-00ch] ; 8b 56 f4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00001h ; ba 01 00
- jmp near 02753h ; e9 9f 01
- mov es, [bp-006h] ; 8e 46 fa
+ jmp near 0277fh ; e9 9f 01
+ mov es, [bp-00ah] ; 8e 46 f6
mov ax, word [es:di] ; 26 8b 05
- mov word [bp-01ah], ax ; 89 46 e6
+ mov word [bp-01eh], ax ; 89 46 e2
mov ax, word [es:di+002h] ; 26 8b 45 02
- mov word [bp-018h], ax ; 89 46 e8
+ mov word [bp-01ch], ax ; 89 46 e4
mov si, word [es:di+004h] ; 26 8b 75 04
mov ax, word [es:di+006h] ; 26 8b 45 06
- mov word [bp-014h], ax ; 89 46 ec
+ mov word [bp-018h], ax ; 89 46 e8
mov ax, word [es:di+012h] ; 26 8b 45 12
- mov word [bp-00ch], ax ; 89 46 f4
+ mov word [bp-010h], ax ; 89 46 f0
mov ax, word [es:di+00eh] ; 26 8b 45 0e
- mov word [bp-012h], ax ; 89 46 ee
+ mov word [bp-016h], ax ; 89 46 ea
mov ax, word [es:di+010h] ; 26 8b 45 10
- mov word [bp-010h], ax ; 89 46 f0
- mov ax, word [bp-00ch] ; 8b 46 f4
+ mov word [bp-014h], ax ; 89 46 ec
+ mov ax, word [bp-010h] ; 8b 46 f0
test ax, ax ; 85 c0
- jne short 02652h ; 75 67
- mov dx, word [bp-01ah] ; 8b 56 e6
- add dx, word [bp-00ah] ; 03 56 f6
- adc ax, word [bp-018h] ; 13 46 e8
+ jne short 0267eh ; 75 67
+ mov dx, word [bp-01eh] ; 8b 56 e2
+ add dx, word [bp-00eh] ; 03 56 f2
+ adc ax, word [bp-01ch] ; 13 46 e4
cmp ax, 01000h ; 3d 00 10
- jnbe short 025fbh ; 77 02
- jne short 02626h ; 75 2b
- mov ax, word [bp-018h] ; 8b 46 e8
+ jnbe short 02627h ; 77 02
+ jne short 02652h ; 75 2b
+ mov ax, word [bp-01ch] ; 8b 46 e4
xor al, al ; 30 c0
shr ax, 008h ; c1 e8 08
- mov word [bp-00ch], ax ; 89 46 f4
- mov ax, word [bp-00ah] ; 8b 46 f6
+ mov word [bp-010h], ax ; 89 46 f0
+ mov ax, word [bp-00eh] ; 8b 46 f2
xor al, al ; 30 c0
shr ax, 008h ; c1 e8 08
lea dx, [bx+002h] ; 8d 57 02
out DX, AL ; ee
lea dx, [bx+003h] ; 8d 57 03
- mov al, byte [bp-00ch] ; 8a 46 f4
+ mov al, byte [bp-010h] ; 8a 46 f0
out DX, AL ; ee
lea dx, [bx+004h] ; 8d 57 04
xor al, al ; 30 c0
out DX, AL ; ee
lea dx, [bx+005h] ; 8d 57 05
out DX, AL ; ee
- mov byte [bp-017h], al ; 88 46 e9
- mov ax, word [bp-01ah] ; 8b 46 e6
+ mov byte [bp-01bh], al ; 88 46 e5
+ mov ax, word [bp-01eh] ; 8b 46 e2
xor ah, ah ; 30 e4
- mov word [bp-00ch], ax ; 89 46 f4
+ mov word [bp-010h], ax ; 89 46 f0
mov cx, strict word 00008h ; b9 08 00
- shr word [bp-018h], 1 ; d1 6e e8
- rcr word [bp-01ah], 1 ; d1 5e e6
- loop 02631h ; e2 f8
- mov ax, word [bp-01ah] ; 8b 46 e6
- mov word [bp-012h], ax ; 89 46 ee
- mov ax, word [bp-018h] ; 8b 46 e8
- mov word [bp-01ah], ax ; 89 46 e6
- mov word [bp-018h], strict word 00000h ; c7 46 e8 00 00
+ shr word [bp-01ch], 1 ; d1 6e e4
+ rcr word [bp-01eh], 1 ; d1 5e e2
+ loop 0265dh ; e2 f8
+ mov ax, word [bp-01eh] ; 8b 46 e2
+ mov word [bp-016h], ax ; 89 46 ea
+ mov ax, word [bp-01ch] ; 8b 46 e4
+ mov word [bp-01eh], ax ; 89 46 e2
+ mov word [bp-01ch], strict word 00000h ; c7 46 e4 00 00
and ax, strict word 0000fh ; 25 0f 00
or AL, strict byte 040h ; 0c 40
- mov word [bp-010h], ax ; 89 46 f0
- mov dx, word [bp-008h] ; 8b 56 f8
+ mov word [bp-014h], ax ; 89 46 ec
+ mov dx, word [bp-00ch] ; 8b 56 f4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 00ah ; b0 0a
out DX, AL ; ee
@@ -2709,28 +2803,28 @@ ata_cmd_data_out_: ; 0xf2544 LB 0x215
xor al, al ; 30 c0
out DX, AL ; ee
lea dx, [bx+002h] ; 8d 57 02
- mov al, byte [bp-00ah] ; 8a 46 f6
+ mov al, byte [bp-00eh] ; 8a 46 f2
out DX, AL ; ee
lea dx, [bx+003h] ; 8d 57 03
- mov al, byte [bp-00ch] ; 8a 46 f4
+ mov al, byte [bp-010h] ; 8a 46 f0
out DX, AL ; ee
- mov ax, word [bp-012h] ; 8b 46 ee
+ mov ax, word [bp-016h] ; 8b 46 ea
lea dx, [bx+004h] ; 8d 57 04
out DX, AL ; ee
shr ax, 008h ; c1 e8 08
lea dx, [bx+005h] ; 8d 57 05
out DX, AL ; ee
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- je short 02688h ; 74 05
+ cmp byte [bp-006h], 000h ; 80 7e fa 00
+ je short 026b4h ; 74 05
mov ax, 000b0h ; b8 b0 00
- jmp short 0268bh ; eb 03
+ jmp short 026b7h ; eb 03
mov ax, 000a0h ; b8 a0 00
- movzx dx, byte [bp-010h] ; 0f b6 56 f0
+ movzx dx, byte [bp-014h] ; 0f b6 56 ec
or ax, dx ; 09 d0
lea dx, [bx+006h] ; 8d 57 06
out DX, AL ; ee
lea dx, [bx+007h] ; 8d 57 07
- mov al, byte [bp-016h] ; 8a 46 ea
+ mov al, byte [bp-01ah] ; 8a 46 e6
out DX, AL ; ee
lea dx, [bx+007h] ; 8d 57 07
in AL, DX ; ec
@@ -2738,212 +2832,219 @@ ata_cmd_data_out_: ; 0xf2544 LB 0x215
; sub ah, ah ; 2a e4
mov dl, al ; 88 c2
test AL, strict byte 080h ; a8 80
- jne short 0269ch ; 75 f4
+ jne short 026c8h ; 75 f4
test AL, strict byte 001h ; a8 01
- je short 026bbh ; 74 0f
- mov dx, word [bp-008h] ; 8b 56 f8
+ je short 026e7h ; 74 0f
+ mov dx, word [bp-00ch] ; 8b 56 f4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00002h ; ba 02 00
- jmp near 02753h ; e9 98 00
+ jmp near 0277fh ; e9 98 00
test dl, 008h ; f6 c2 08
- jne short 026cfh ; 75 0f
- mov dx, word [bp-008h] ; 8b 56 f8
+ jne short 026fbh ; 75 0f
+ mov dx, word [bp-00ch] ; 8b 56 f4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00003h ; ba 03 00
- jmp near 02753h ; e9 84 00
+ jmp near 0277fh ; e9 84 00
sti ; fb
cmp si, 0f800h ; 81 fe 00 f8
- jc short 026e3h ; 72 0d
+ jc short 0270fh ; 72 0d
sub si, 00800h ; 81 ee 00 08
- mov ax, word [bp-014h] ; 8b 46 ec
+ mov ax, word [bp-018h] ; 8b 46 e8
add ax, 00080h ; 05 80 00
- mov word [bp-014h], ax ; 89 46 ec
- cmp byte [bp-004h], 001h ; 80 7e fc 01
- jne short 026f7h ; 75 0e
+ mov word [bp-018h], ax ; 89 46 e8
+ cmp byte [bp-008h], 001h ; 80 7e f8 01
+ jne short 02723h ; 75 0e
mov dx, bx ; 89 da
- mov cx, word [bp-00eh] ; 8b 4e f2
- mov es, [bp-014h] ; 8e 46 ec
+ mov cx, word [bp-012h] ; 8b 4e ee
+ mov es, [bp-018h] ; 8e 46 e8
db 0f3h, 066h, 026h, 06fh
; rep es outsd ; f3 66 26 6f
- jmp short 02702h ; eb 0b
+ jmp short 0272eh ; eb 0b
mov dx, bx ; 89 da
- mov cx, word [bp-00eh] ; 8b 4e f2
- mov es, [bp-014h] ; 8e 46 ec
+ mov cx, word [bp-012h] ; 8b 4e ee
+ mov es, [bp-018h] ; 8e 46 e8
db 0f3h, 026h, 06fh
; rep es outsw ; f3 26 6f
- mov es, [bp-006h] ; 8e 46 fa
+ mov es, [bp-00ah] ; 8e 46 f6
inc word [es:di+014h] ; 26 ff 45 14
- dec word [bp-00ah] ; ff 4e f6
+ dec word [bp-00eh] ; ff 4e f2
lea dx, [bx+007h] ; 8d 57 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
mov dl, al ; 88 c2
test AL, strict byte 080h ; a8 80
- jne short 0270ch ; 75 f4
- cmp word [bp-00ah], strict byte 00000h ; 83 7e f6 00
- jne short 02732h ; 75 14
+ jne short 02738h ; 75 f4
+ cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00
+ jne short 0275eh ; 75 14
and AL, strict byte 0e9h ; 24 e9
cmp AL, strict byte 040h ; 3c 40
- je short 02748h ; 74 24
- mov dx, word [bp-008h] ; 8b 56 f8
+ je short 02774h ; 74 24
+ mov dx, word [bp-00ch] ; 8b 56 f4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00006h ; ba 06 00
- jmp short 02753h ; eb 21
+ jmp short 0277fh ; eb 21
mov al, dl ; 88 d0
and AL, strict byte 0c9h ; 24 c9
cmp AL, strict byte 048h ; 3c 48
- je short 026d0h ; 74 96
- mov dx, word [bp-008h] ; 8b 56 f8
+ je short 026fch ; 74 96
+ mov dx, word [bp-00ch] ; 8b 56 f4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00007h ; ba 07 00
- jmp short 02753h ; eb 0b
- mov dx, word [bp-008h] ; 8b 56 f8
+ jmp short 0277fh ; eb 0b
+ mov dx, word [bp-00ch] ; 8b 56 f4
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
xor dx, dx ; 31 d2
mov ax, dx ; 89 d0
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-@ata_read_sectors: ; 0xf2759 LB 0x77
+@ata_read_sectors: ; 0xf2788 LB 0x7a
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00002h, 000h ; c8 02 00 00
- mov si, word [bp+008h] ; 8b 76 08
- mov es, [bp+00ah] ; 8e 46 0a
+ push ax ; 50
+ mov si, word [bp+004h] ; 8b 76 04
+ mov es, [bp+006h] ; 8e 46 06
mov bl, byte [es:si+008h] ; 26 8a 5c 08
mov cx, word [es:si+00ah] ; 26 8b 4c 0a
mov dx, cx ; 89 ca
sal dx, 009h ; c1 e2 09
mov ax, word [es:si+012h] ; 26 8b 44 12
test ax, ax ; 85 c0
- je short 02787h ; 74 0d
+ je short 027b6h ; 74 0d
movzx di, bl ; 0f b6 fb
imul di, di, strict byte 00018h ; 6b ff 18
- mov [bp-002h], es ; 8c 46 fe
+ mov [bp-006h], es ; 8c 46 fa
add di, si ; 01 f7
- jmp short 027b3h ; eb 2c
+ jmp short 027e2h ; eb 2c
mov di, word [es:si] ; 26 8b 3c
add di, cx ; 01 cf
- mov word [bp-002h], di ; 89 7e fe
+ mov word [bp-006h], di ; 89 7e fa
adc ax, word [es:si+002h] ; 26 13 44 02
cmp ax, 01000h ; 3d 00 10
- jnbe short 0279ah ; 77 02
- jne short 027a6h ; 75 0c
+ jnbe short 027c9h ; 77 02
+ jne short 027d5h ; 75 0c
mov bx, strict word 00024h ; bb 24 00
mov ax, si ; 89 f0
mov dx, es ; 8c c2
- call 01cc0h ; e8 1c f5
- jmp short 027cah ; eb 24
+ call 01cffh ; e8 2c f5
+ jmp short 027f9h ; eb 24
movzx ax, bl ; 0f b6 c3
imul ax, ax, strict byte 00018h ; 6b c0 18
- mov [bp-002h], es ; 8c 46 fe
+ mov [bp-006h], es ; 8c 46 fa
mov di, si ; 89 f7
add di, ax ; 01 c7
mov word [es:di+024h], dx ; 26 89 55 24
mov bx, 000c4h ; bb c4 00
mov ax, si ; 89 f0
mov dx, es ; 8c c2
- call 01cc0h ; e8 ff f4
- mov es, [bp-002h] ; 8e 46 fe
+ call 01cffh ; e8 0f f5
+ mov es, [bp-006h] ; 8e 46 fa
mov word [es:di+024h], 00200h ; 26 c7 45 24 00 02
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 00004h ; c2 04 00
-@ata_write_sectors: ; 0xf27d0 LB 0x3a
- push si ; 56
+@ata_write_sectors: ; 0xf2802 LB 0x3d
push bp ; 55
mov bp, sp ; 89 e5
- les si, [bp+006h] ; c4 76 06
+ push si ; 56
+ les si, [bp+004h] ; c4 76 04
mov cx, word [es:si+00ah] ; 26 8b 4c 0a
cmp word [es:si+012h], strict byte 00000h ; 26 83 7c 12 00
- je short 027eeh ; 74 0c
+ je short 02820h ; 74 0c
mov bx, strict word 00030h ; bb 30 00
mov ax, si ; 89 f0
mov dx, es ; 8c c2
- call 02544h ; e8 58 fd
- jmp short 02805h ; eb 17
+ call 0256eh ; e8 50 fd
+ jmp short 02837h ; eb 17
xor ax, ax ; 31 c0
mov dx, word [es:si] ; 26 8b 14
add dx, cx ; 01 ca
adc ax, word [es:si+002h] ; 26 13 44 02
cmp ax, 01000h ; 3d 00 10
- jnbe short 02800h ; 77 02
- jne short 027e2h ; 75 e2
+ jnbe short 02832h ; 77 02
+ jne short 02814h ; 75 e2
mov bx, strict word 00034h ; bb 34 00
- jmp short 027e5h ; eb e0
- pop bp ; 5d
+ jmp short 02817h ; eb e0
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn 00004h ; c2 04 00
-ata_cmd_packet_: ; 0xf280a LB 0x2e3
+ata_cmd_packet_: ; 0xf283f LB 0x2e8
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00014h, 000h ; c8 14 00 00
+ sub sp, strict byte 00014h ; 83 ec 14
push ax ; 50
- mov byte [bp-004h], dl ; 88 56 fc
+ mov byte [bp-008h], dl ; 88 56 f8
mov di, bx ; 89 df
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 fd ed
- mov word [bp-00eh], 00122h ; c7 46 f2 22 01
- mov word [bp-00ah], ax ; 89 46 f6
- mov ax, word [bp-016h] ; 8b 46 ea
+ call 0161ch ; e8 c6 ed
+ mov word [bp-012h], 00122h ; c7 46 ee 22 01
+ mov word [bp-00eh], ax ; 89 46 f2
+ mov ax, word [bp-01ah] ; 8b 46 e6
shr ax, 1 ; d1 e8
- mov ah, byte [bp-016h] ; 8a 66 ea
+ mov ah, byte [bp-01ah] ; 8a 66 e6
and ah, 001h ; 80 e4 01
- mov byte [bp-002h], ah ; 88 66 fe
- cmp byte [bp+00eh], 002h ; 80 7e 0e 02
- jne short 0285ah ; 75 1f
- mov bx, 00cd6h ; bb d6 0c
+ mov byte [bp-006h], ah ; 88 66 fa
+ cmp byte [bp+00ah], 002h ; 80 7e 0a 02
+ jne short 02891h ; 75 1f
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 68 f0
- push 00181h ; 68 81 01
- push 00190h ; 68 90 01
+ call 018e1h ; e8 64 f0
+ push 00201h ; 68 01 02
+ push 00210h ; 68 10 02
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 98 f0
+ call 01922h ; e8 9a f0
add sp, strict byte 00006h ; 83 c4 06
mov dx, strict word 00001h ; ba 01 00
- jmp near 02ae5h ; e9 8b 02
- test byte [bp+008h], 001h ; f6 46 08 01
- jne short 02854h ; 75 f4
+ jmp near 02b1ch ; e9 8b 02
+ test byte [bp+004h], 001h ; f6 46 04 01
+ jne short 0288bh ; 75 f4
xor ah, ah ; 30 e4
imul ax, ax, strict byte 00006h ; 6b c0 06
- mov es, [bp-00ah] ; 8e 46 f6
- mov si, word [bp-00eh] ; 8b 76 f2
+ mov es, [bp-00eh] ; 8e 46 f2
+ mov si, word [bp-012h] ; 8b 76 ee
add si, ax ; 01 c6
mov bx, word [es:si+001c2h] ; 26 8b 9c c2 01
mov ax, word [es:si+001c4h] ; 26 8b 84 c4 01
- mov word [bp-00ch], ax ; 89 46 f4
- imul si, word [bp-016h], strict byte 00018h ; 6b 76 ea 18
- add si, word [bp-00eh] ; 03 76 f2
+ mov word [bp-010h], ax ; 89 46 f0
+ imul si, word [bp-01ah], strict byte 00018h ; 6b 76 e6 18
+ add si, word [bp-012h] ; 03 76 ee
mov al, byte [es:si+022h] ; 26 8a 44 22
- mov byte [bp-006h], al ; 88 46 fa
+ mov byte [bp-00ah], al ; 88 46 f6
xor ax, ax ; 31 c0
- mov word [bp-014h], ax ; 89 46 ec
- mov word [bp-012h], ax ; 89 46 ee
- mov al, byte [bp-004h] ; 8a 46 fc
+ mov word [bp-018h], ax ; 89 46 e8
+ mov word [bp-016h], ax ; 89 46 ea
+ mov al, byte [bp-008h] ; 8a 46 f8
cmp AL, strict byte 00ch ; 3c 0c
- jnc short 0289dh ; 73 06
- mov byte [bp-004h], 00ch ; c6 46 fc 0c
- jmp short 028a3h ; eb 06
- jbe short 028a3h ; 76 04
- mov byte [bp-004h], 010h ; c6 46 fc 10
- shr byte [bp-004h], 1 ; d0 6e fc
- mov es, [bp-00ah] ; 8e 46 f6
- mov si, word [bp-00eh] ; 8b 76 f2
+ jnc short 028d4h ; 73 06
+ mov byte [bp-008h], 00ch ; c6 46 f8 0c
+ jmp short 028dah ; eb 06
+ jbe short 028dah ; 76 04
+ mov byte [bp-008h], 010h ; c6 46 f8 10
+ shr byte [bp-008h], 1 ; d0 6e f8
+ mov es, [bp-00eh] ; 8e 46 f2
+ mov si, word [bp-012h] ; 8b 76 ee
db 066h, 026h, 0c7h, 044h, 014h, 000h, 000h, 000h, 000h
; mov dword [es:si+014h], strict dword 000000000h ; 66 26 c7 44 14 00 00 00 00
mov word [es:si+018h], strict word 00000h ; 26 c7 44 18 00 00
@@ -2952,10 +3053,10 @@ ata_cmd_packet_: ; 0xf280a LB 0x2e3
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 080h ; a8 80
- je short 028cbh ; 74 06
+ je short 02902h ; 74 06
mov dx, strict word 00002h ; ba 02 00
- jmp near 02ae5h ; e9 1a 02
- mov dx, word [bp-00ch] ; 8b 56 f4
+ jmp near 02b1ch ; e9 1a 02
+ mov dx, word [bp-010h] ; 8b 56 f0
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 00ah ; b0 0a
out DX, AL ; ee
@@ -2965,10 +3066,10 @@ ata_cmd_packet_: ; 0xf280a LB 0x2e3
lea dx, [bx+005h] ; 8d 57 05
mov AL, strict byte 0ffh ; b0 ff
out DX, AL ; ee
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- je short 028ebh ; 74 05
+ cmp byte [bp-006h], 000h ; 80 7e fa 00
+ je short 02922h ; 74 05
mov ax, 000b0h ; b8 b0 00
- jmp short 028eeh ; eb 03
+ jmp short 02925h ; eb 03
mov ax, 000a0h ; b8 a0 00
lea dx, [bx+006h] ; 8d 57 06
out DX, AL ; ee
@@ -2981,75 +3082,75 @@ ata_cmd_packet_: ; 0xf280a LB 0x2e3
; sub ah, ah ; 2a e4
mov dl, al ; 88 c2
test AL, strict byte 080h ; a8 80
- jne short 028f8h ; 75 f4
+ jne short 0292fh ; 75 f4
test AL, strict byte 001h ; a8 01
- je short 02917h ; 74 0f
- mov dx, word [bp-00ch] ; 8b 56 f4
+ je short 0294eh ; 74 0f
+ mov dx, word [bp-010h] ; 8b 56 f0
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00003h ; ba 03 00
- jmp near 02ae5h ; e9 ce 01
+ jmp near 02b1ch ; e9 ce 01
test dl, 008h ; f6 c2 08
- jne short 0292bh ; 75 0f
- mov dx, word [bp-00ch] ; 8b 56 f4
+ jne short 02962h ; 75 0f
+ mov dx, word [bp-010h] ; 8b 56 f0
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
mov dx, strict word 00004h ; ba 04 00
- jmp near 02ae5h ; e9 ba 01
+ jmp near 02b1ch ; e9 ba 01
sti ; fb
mov ax, di ; 89 f8
shr ax, 004h ; c1 e8 04
add ax, cx ; 01 c8
mov si, di ; 89 fe
and si, strict byte 0000fh ; 83 e6 0f
- movzx cx, byte [bp-004h] ; 0f b6 4e fc
+ movzx cx, byte [bp-008h] ; 0f b6 4e f8
mov dx, bx ; 89 da
mov es, ax ; 8e c0
db 0f3h, 026h, 06fh
; rep es outsw ; f3 26 6f
- cmp byte [bp+00eh], 000h ; 80 7e 0e 00
- jne short 02954h ; 75 0b
+ cmp byte [bp+00ah], 000h ; 80 7e 0a 00
+ jne short 0298bh ; 75 0b
lea dx, [bx+007h] ; 8d 57 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
mov dl, al ; 88 c2
- jmp near 02ac6h ; e9 72 01
+ jmp near 02afdh ; e9 72 01
lea dx, [bx+007h] ; 8d 57 07
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
mov dl, al ; 88 c2
test AL, strict byte 080h ; a8 80
- jne short 02954h ; 75 f4
+ jne short 0298bh ; 75 f4
test AL, strict byte 088h ; a8 88
- je near 02ac6h ; 0f 84 60 01
+ je near 02afdh ; 0f 84 60 01
test AL, strict byte 001h ; a8 01
- je short 02975h ; 74 0b
- mov dx, word [bp-00ch] ; 8b 56 f4
+ je short 029ach ; 74 0b
+ mov dx, word [bp-010h] ; 8b 56 f0
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
- jmp short 02911h ; eb 9c
+ jmp short 02948h ; eb 9c
mov al, dl ; 88 d0
and AL, strict byte 0c9h ; 24 c9
cmp AL, strict byte 048h ; 3c 48
- je short 02988h ; 74 0b
- mov dx, word [bp-00ch] ; 8b 56 f4
+ je short 029bfh ; 74 0b
+ mov dx, word [bp-010h] ; 8b 56 f0
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
- jmp short 02925h ; eb 9d
- mov ax, word [bp+010h] ; 8b 46 10
+ jmp short 0295ch ; eb 9d
+ mov ax, word [bp+00ch] ; 8b 46 0c
shr ax, 004h ; c1 e8 04
- mov dx, word [bp+012h] ; 8b 56 12
+ mov dx, word [bp+00eh] ; 8b 56 0e
add dx, ax ; 01 c2
- mov ax, word [bp+010h] ; 8b 46 10
+ mov ax, word [bp+00ch] ; 8b 46 0c
and ax, strict word 0000fh ; 25 0f 00
- mov word [bp+010h], ax ; 89 46 10
- mov word [bp+012h], dx ; 89 56 12
+ mov word [bp+00ch], ax ; 89 46 0c
+ mov word [bp+00eh], dx ; 89 56 0e
lea dx, [bx+005h] ; 8d 57 05
in AL, DX ; ec
db 02ah, 0e4h
@@ -3061,171 +3162,293 @@ ata_cmd_packet_: ; 0xf280a LB 0x2e3
db 02ah, 0e4h
; sub ah, ah ; 2a e4
add cx, ax ; 01 c1
- mov word [bp-010h], cx ; 89 4e f0
- mov ax, word [bp+008h] ; 8b 46 08
+ mov word [bp-014h], cx ; 89 4e ec
+ mov ax, word [bp+004h] ; 8b 46 04
cmp ax, cx ; 39 c8
- jbe short 029c8h ; 76 0c
+ jbe short 029ffh ; 76 0c
mov ax, cx ; 89 c8
- sub word [bp+008h], cx ; 29 4e 08
+ sub word [bp+004h], cx ; 29 4e 04
xor ax, cx ; 31 c8
- mov word [bp-010h], ax ; 89 46 f0
- jmp short 029d2h ; eb 0a
+ mov word [bp-014h], ax ; 89 46 ec
+ jmp short 02a09h ; eb 0a
mov cx, ax ; 89 c1
- mov word [bp+008h], strict word 00000h ; c7 46 08 00 00
- sub word [bp-010h], ax ; 29 46 f0
+ mov word [bp+004h], strict word 00000h ; c7 46 04 00 00
+ sub word [bp-014h], ax ; 29 46 ec
xor ax, ax ; 31 c0
- cmp word [bp+00ch], strict byte 00000h ; 83 7e 0c 00
- jne short 029fbh ; 75 21
- mov dx, word [bp-010h] ; 8b 56 f0
- cmp dx, word [bp+00ah] ; 3b 56 0a
- jbe short 029fbh ; 76 19
- mov ax, word [bp-010h] ; 8b 46 f0
- sub ax, word [bp+00ah] ; 2b 46 0a
- mov word [bp-008h], ax ; 89 46 f8
- mov ax, word [bp+00ah] ; 8b 46 0a
- mov word [bp-010h], ax ; 89 46 f0
+ cmp word [bp+008h], strict byte 00000h ; 83 7e 08 00
+ jne short 02a32h ; 75 21
+ mov dx, word [bp-014h] ; 8b 56 ec
+ cmp dx, word [bp+006h] ; 3b 56 06
+ jbe short 02a32h ; 76 19
+ mov ax, word [bp-014h] ; 8b 46 ec
+ sub ax, word [bp+006h] ; 2b 46 06
+ mov word [bp-00ch], ax ; 89 46 f4
+ mov ax, word [bp+006h] ; 8b 46 06
+ mov word [bp-014h], ax ; 89 46 ec
xor ax, ax ; 31 c0
- mov word [bp+00ah], ax ; 89 46 0a
- mov word [bp+00ch], ax ; 89 46 0c
- jmp short 02a07h ; eb 0c
- mov word [bp-008h], ax ; 89 46 f8
- mov dx, word [bp-010h] ; 8b 56 f0
- sub word [bp+00ah], dx ; 29 56 0a
- sbb word [bp+00ch], ax ; 19 46 0c
- mov si, word [bp-010h] ; 8b 76 f0
- mov al, byte [bp-006h] ; 8a 46 fa
+ mov word [bp+006h], ax ; 89 46 06
+ mov word [bp+008h], ax ; 89 46 08
+ jmp short 02a3eh ; eb 0c
+ mov word [bp-00ch], ax ; 89 46 f4
+ mov dx, word [bp-014h] ; 8b 56 ec
+ sub word [bp+006h], dx ; 29 56 06
+ sbb word [bp+008h], ax ; 19 46 08
+ mov si, word [bp-014h] ; 8b 76 ec
+ mov al, byte [bp-00ah] ; 8a 46 f6
test cl, 003h ; f6 c1 03
- je short 02a14h ; 74 02
+ je short 02a4bh ; 74 02
xor al, al ; 30 c0
- test byte [bp-010h], 003h ; f6 46 f0 03
- je short 02a1ch ; 74 02
+ test byte [bp-014h], 003h ; f6 46 ec 03
+ je short 02a53h ; 74 02
xor al, al ; 30 c0
- test byte [bp-008h], 003h ; f6 46 f8 03
- je short 02a24h ; 74 02
+ test byte [bp-00ch], 003h ; f6 46 f4 03
+ je short 02a5bh ; 74 02
xor al, al ; 30 c0
- test byte [bp-010h], 001h ; f6 46 f0 01
- je short 02a3ch ; 74 12
- inc word [bp-010h] ; ff 46 f0
- cmp word [bp-008h], strict byte 00000h ; 83 7e f8 00
- jbe short 02a3ch ; 76 09
- test byte [bp-008h], 001h ; f6 46 f8 01
- je short 02a3ch ; 74 03
- dec word [bp-008h] ; ff 4e f8
+ test byte [bp-014h], 001h ; f6 46 ec 01
+ je short 02a73h ; 74 12
+ inc word [bp-014h] ; ff 46 ec
+ cmp word [bp-00ch], strict byte 00000h ; 83 7e f4 00
+ jbe short 02a73h ; 76 09
+ test byte [bp-00ch], 001h ; f6 46 f4 01
+ je short 02a73h ; 74 03
+ dec word [bp-00ch] ; ff 4e f4
cmp AL, strict byte 001h ; 3c 01
- jne short 02a4dh ; 75 0d
- shr word [bp-010h], 002h ; c1 6e f0 02
+ jne short 02a84h ; 75 0d
+ shr word [bp-014h], 002h ; c1 6e ec 02
shr cx, 002h ; c1 e9 02
- shr word [bp-008h], 002h ; c1 6e f8 02
- jmp short 02a55h ; eb 08
- shr word [bp-010h], 1 ; d1 6e f0
+ shr word [bp-00ch], 002h ; c1 6e f4 02
+ jmp short 02a8ch ; eb 08
+ shr word [bp-014h], 1 ; d1 6e ec
shr cx, 1 ; d1 e9
- shr word [bp-008h], 1 ; d1 6e f8
+ shr word [bp-00ch], 1 ; d1 6e f4
cmp AL, strict byte 001h ; 3c 01
- jne short 02a85h ; 75 2c
+ jne short 02abch ; 75 2c
test cx, cx ; 85 c9
- je short 02a67h ; 74 0a
+ je short 02a9eh ; 74 0a
mov dx, bx ; 89 da
push eax ; 66 50
in eax, DX ; 66 ed
- loop 02a61h ; e2 fc
+ loop 02a98h ; e2 fc
pop eax ; 66 58
mov dx, bx ; 89 da
- mov cx, word [bp-010h] ; 8b 4e f0
- les di, [bp+010h] ; c4 7e 10
+ mov cx, word [bp-014h] ; 8b 4e ec
+ les di, [bp+00ch] ; c4 7e 0c
db 0f3h, 066h, 06dh
; rep insd ; f3 66 6d
- mov ax, word [bp-008h] ; 8b 46 f8
+ mov ax, word [bp-00ch] ; 8b 46 f4
test ax, ax ; 85 c0
- je short 02aa4h ; 74 2b
+ je short 02adbh ; 74 2b
mov cx, ax ; 89 c1
push eax ; 66 50
in eax, DX ; 66 ed
- loop 02a7dh ; e2 fc
+ loop 02ab4h ; e2 fc
pop eax ; 66 58
- jmp short 02aa4h ; eb 1f
+ jmp short 02adbh ; eb 1f
test cx, cx ; 85 c9
- je short 02a8eh ; 74 05
+ je short 02ac5h ; 74 05
mov dx, bx ; 89 da
in ax, DX ; ed
- loop 02a8bh ; e2 fd
+ loop 02ac2h ; e2 fd
mov dx, bx ; 89 da
- mov cx, word [bp-010h] ; 8b 4e f0
- les di, [bp+010h] ; c4 7e 10
+ mov cx, word [bp-014h] ; 8b 4e ec
+ les di, [bp+00ch] ; c4 7e 0c
rep insw ; f3 6d
- mov ax, word [bp-008h] ; 8b 46 f8
+ mov ax, word [bp-00ch] ; 8b 46 f4
test ax, ax ; 85 c0
- je short 02aa4h ; 74 05
+ je short 02adbh ; 74 05
mov cx, ax ; 89 c1
in ax, DX ; ed
- loop 02aa1h ; e2 fd
- add word [bp+010h], si ; 01 76 10
+ loop 02ad8h ; e2 fd
+ add word [bp+00ch], si ; 01 76 0c
xor ax, ax ; 31 c0
- add word [bp-014h], si ; 01 76 ec
- adc word [bp-012h], ax ; 11 46 ee
- mov ax, word [bp-014h] ; 8b 46 ec
- mov es, [bp-00ah] ; 8e 46 f6
- mov si, word [bp-00eh] ; 8b 76 f2
+ add word [bp-018h], si ; 01 76 e8
+ adc word [bp-016h], ax ; 11 46 ea
+ mov ax, word [bp-018h] ; 8b 46 e8
+ mov es, [bp-00eh] ; 8e 46 f2
+ mov si, word [bp-012h] ; 8b 76 ee
mov word [es:si+016h], ax ; 26 89 44 16
- mov ax, word [bp-012h] ; 8b 46 ee
+ mov ax, word [bp-016h] ; 8b 46 ea
mov word [es:si+018h], ax ; 26 89 44 18
- jmp near 02954h ; e9 8e fe
+ jmp near 0298bh ; e9 8e fe
mov al, dl ; 88 d0
and AL, strict byte 0e9h ; 24 e9
cmp AL, strict byte 040h ; 3c 40
- je short 02adah ; 74 0c
- mov dx, word [bp-00ch] ; 8b 56 f4
+ je short 02b11h ; 74 0c
+ mov dx, word [bp-010h] ; 8b 56 f0
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
- jmp near 02925h ; e9 4b fe
- mov dx, word [bp-00ch] ; 8b 56 f4
+ jmp near 0295ch ; e9 4b fe
+ mov dx, word [bp-010h] ; 8b 56 f0
add dx, strict byte 00006h ; 83 c2 06
mov AL, strict byte 008h ; b0 08
out DX, AL ; ee
xor dx, dx ; 31 d2
mov ax, dx ; 89 d0
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 0000ch ; c2 0c 00
-set_diskette_ret_status_: ; 0xf2aed LB 0x15
+ata_soft_reset_: ; 0xf2b27 LB 0x80
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
+ push cx ; 51
push dx ; 52
+ push ax ; 50
+ mov bx, ax ; 89 c3
+ mov dx, strict word 0000eh ; ba 0e 00
+ mov ax, strict word 00040h ; b8 40 00
+ call 0161ch ; e8 e3 ea
+ mov dx, bx ; 89 da
+ shr dx, 1 ; d1 ea
+ and bl, 001h ; 80 e3 01
+ mov byte [bp-008h], bl ; 88 5e f8
+ xor dh, dh ; 30 f6
+ imul bx, dx, strict byte 00006h ; 6b da 06
+ mov es, ax ; 8e c0
+ add bx, 00122h ; 81 c3 22 01
+ mov cx, word [es:bx+001c2h] ; 26 8b 8f c2 01
+ mov bx, word [es:bx+001c4h] ; 26 8b 9f c4 01
+ lea dx, [bx+006h] ; 8d 57 06
+ mov AL, strict byte 00ah ; b0 0a
+ out DX, AL ; ee
+ cmp byte [bp-008h], 000h ; 80 7e f8 00
+ je short 02b69h ; 74 05
+ mov ax, 000b0h ; b8 b0 00
+ jmp short 02b6ch ; eb 03
+ mov ax, 000a0h ; b8 a0 00
+ mov dx, cx ; 89 ca
+ add dx, strict byte 00006h ; 83 c2 06
+ out DX, AL ; ee
+ mov dx, cx ; 89 ca
+ add dx, strict byte 00007h ; 83 c2 07
+ mov AL, strict byte 008h ; b0 08
+ out DX, AL ; ee
+ mov dx, cx ; 89 ca
+ add dx, strict byte 00007h ; 83 c2 07
+ in AL, DX ; ec
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4
+ test AL, strict byte 080h ; a8 80
+ jne short 02b7ah ; 75 f4
+ and AL, strict byte 0e9h ; 24 e9
+ cmp AL, strict byte 040h ; 3c 40
+ je short 02b97h ; 74 0b
+ lea dx, [bx+006h] ; 8d 57 06
+ mov AL, strict byte 008h ; b0 08
+ out DX, AL ; ee
+ mov ax, strict word 00001h ; b8 01 00
+ jmp short 02b9fh ; eb 08
+ lea dx, [bx+006h] ; 8d 57 06
+ mov AL, strict byte 008h ; b0 08
+ out DX, AL ; ee
+ xor ax, ax ; 31 c0
+ lea sp, [bp-006h] ; 8d 66 fa
+ pop dx ; 5a
+ pop cx ; 59
+ pop bx ; 5b
+ pop bp ; 5d
+ retn ; c3
+set_diskette_ret_status_: ; 0xf2ba7 LB 0x18
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push dx ; 52
movzx bx, al ; 0f b6 d8
mov dx, strict word 00041h ; ba 41 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 10 eb
- pop bp ; 5d
+ call 0160eh ; e8 56 ea
+ lea sp, [bp-004h] ; 8d 66 fc
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-set_diskette_current_cyl_: ; 0xf2b02 LB 0x2a
- push bx ; 53
+set_diskette_current_cyl_: ; 0xf2bbf LB 0x2d
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
mov bl, al ; 88 c3
cmp AL, strict byte 001h ; 3c 01
- jbe short 02b17h ; 76 0b
- push 001b0h ; 68 b0 01
+ jbe short 02bd4h ; 76 0b
+ push 00230h ; 68 30 02
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 d5 ed
+ call 01922h ; e8 51 ed
add sp, strict byte 00004h ; 83 c4 04
movzx ax, dl ; 0f b6 c2
movzx dx, bl ; 0f b6 d3
add dx, 00094h ; 81 c2 94 00
mov bx, ax ; 89 c3
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 e5 ea
- pop bp ; 5d
+ call 0160eh ; e8 28 ea
+ lea sp, [bp-002h] ; 8d 66 fe
pop bx ; 5b
+ pop bp ; 5d
+ retn ; c3
+floppy_wait_for_interrupt_: ; 0xf2bec LB 0x21
+ push bp ; 55
+ mov bp, sp ; 89 e5
+ push dx ; 52
+ cli ; fa
+ mov dx, strict word 0003eh ; ba 3e 00
+ mov ax, strict word 00040h ; b8 40 00
+ call 01600h ; e8 06 ea
+ test AL, strict byte 080h ; a8 80
+ je short 02c02h ; 74 04
+ and AL, strict byte 080h ; 24 80
+ jmp short 02c07h ; eb 05
+ sti ; fb
+ hlt ; f4
+ cli ; fa
+ jmp short 02bf1h ; eb ea
+ lea sp, [bp-002h] ; 8d 66 fe
+ pop dx ; 5a
+ pop bp ; 5d
retn ; c3
-floppy_reset_controller_: ; 0xf2b2c LB 0x28
+floppy_wait_for_interrupt_or_timeout_: ; 0xf2c0d LB 0x46
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
+ push cx ; 51
push dx ; 52
+ cli ; fa
+ mov dx, strict word 00040h ; ba 40 00
+ mov ax, dx ; 89 d0
+ call 01600h ; e8 e4 e9
+ test al, al ; 84 c0
+ jne short 02c25h ; 75 05
+ sti ; fb
+ xor cl, cl ; 30 c9
+ jmp short 02c49h ; eb 24
+ mov dx, strict word 0003eh ; ba 3e 00
+ mov ax, strict word 00040h ; b8 40 00
+ call 01600h ; e8 d2 e9
+ mov cl, al ; 88 c1
+ test AL, strict byte 080h ; a8 80
+ je short 02c44h ; 74 10
+ and AL, strict byte 07fh ; 24 7f
+ movzx bx, al ; 0f b6 d8
+ mov dx, strict word 0003eh ; ba 3e 00
+ mov ax, strict word 00040h ; b8 40 00
+ call 0160eh ; e8 cc e9
+ jmp short 02c49h ; eb 05
+ sti ; fb
+ hlt ; f4
+ cli ; fa
+ jmp short 02c14h ; eb cb
+ mov al, cl ; 88 c8
+ lea sp, [bp-006h] ; 8d 66 fa
+ pop dx ; 5a
+ pop cx ; 59
+ pop bx ; 5b
+ pop bp ; 5d
+ retn ; c3
+floppy_reset_controller_: ; 0xf2c53 LB 0x2b
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push dx ; 52
mov dx, 003f2h ; ba f2 03
in AL, DX ; ec
db 02ah, 0e4h
@@ -3243,35 +3466,38 @@ floppy_reset_controller_: ; 0xf2b2c LB 0x28
; sub ah, ah ; 2a e4
and AL, strict byte 0c0h ; 24 c0
cmp AL, strict byte 080h ; 3c 80
- jne short 02b44h ; 75 f4
- pop bp ; 5d
+ jne short 02c6bh ; 75 f4
+ lea sp, [bp-004h] ; 8d 66 fc
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-floppy_prepare_controller_: ; 0xf2b54 LB 0x8c
+floppy_prepare_controller_: ; 0xf2c7e LB 0x81
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
- enter 00002h, 000h ; c8 02 00 00
+ push ax ; 50
mov cx, ax ; 89 c1
mov dx, strict word 0003eh ; ba 3e 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 9a ea
+ call 01600h ; e8 70 e9
and AL, strict byte 07fh ; 24 7f
movzx bx, al ; 0f b6 d8
mov dx, strict word 0003eh ; ba 3e 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 9a ea
+ call 0160eh ; e8 70 e9
mov dx, 003f2h ; ba f2 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
and AL, strict byte 004h ; 24 04
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-008h], al ; 88 46 f8
test cx, cx ; 85 c9
- je short 02b87h ; 74 04
+ je short 02cb1h ; 74 04
mov AL, strict byte 020h ; b0 20
- jmp short 02b89h ; eb 02
+ jmp short 02cb3h ; eb 02
mov AL, strict byte 010h ; b0 10
or AL, strict byte 00ch ; 0c 0c
or al, cl ; 08 c8
@@ -3280,10 +3506,10 @@ floppy_prepare_controller_: ; 0xf2b54 LB 0x8c
mov bx, strict word 00025h ; bb 25 00
mov dx, strict word 00040h ; ba 40 00
mov ax, dx ; 89 d0
- call 0160eh ; e8 72 ea
+ call 0160eh ; e8 48 e9
mov dx, 0008bh ; ba 8b 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 5b ea
+ call 01600h ; e8 31 e9
shr al, 006h ; c0 e8 06
mov dx, 003f7h ; ba f7 03
out DX, AL ; ee
@@ -3293,238 +3519,213 @@ floppy_prepare_controller_: ; 0xf2b54 LB 0x8c
; sub ah, ah ; 2a e4
and AL, strict byte 0c0h ; 24 c0
cmp AL, strict byte 080h ; 3c 80
- jne short 02bach ; 75 f4
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- jne short 02bdbh ; 75 1d
- sti ; fb
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 38 ea
- test AL, strict byte 080h ; a8 80
- je short 02bbfh ; 74 f3
- and AL, strict byte 07fh ; 24 7f
- cli ; fa
+ jne short 02cd6h ; 75 f4
+ cmp byte [bp-008h], 000h ; 80 7e f8 00
+ jne short 02cf7h ; 75 0f
+ call 02bech ; e8 01 ff
movzx bx, al ; 0f b6 d8
mov dx, strict word 0003eh ; ba 3e 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 33 ea
- leave ; c9
+ call 0160eh ; e8 17 e9
+ lea sp, [bp-006h] ; 8d 66 fa
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-floppy_media_known_: ; 0xf2be0 LB 0x40
- push bx ; 53
- push dx ; 52
+floppy_media_known_: ; 0xf2cff LB 0x43
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push dx ; 52
mov bx, ax ; 89 c3
mov dx, strict word 0003eh ; ba 3e 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 10 ea
+ call 01600h ; e8 f1 e8
mov ah, al ; 88 c4
test bx, bx ; 85 db
- je short 02bf8h ; 74 02
+ je short 02d17h ; 74 02
shr al, 1 ; d0 e8
and AL, strict byte 001h ; 24 01
- jne short 02c00h ; 75 04
+ jne short 02d1fh ; 75 04
xor ah, ah ; 30 e4
- jmp short 02c1ch ; eb 1c
+ jmp short 02d3bh ; eb 1c
mov dx, 00090h ; ba 90 00
test bx, bx ; 85 db
- je short 02c0ah ; 74 03
+ je short 02d29h ; 74 03
mov dx, 00091h ; ba 91 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 f0 e9
+ call 01600h ; e8 d1 e8
xor ah, ah ; 30 e4
sar ax, 004h ; c1 f8 04
and AL, strict byte 001h ; 24 01
- je short 02bfch ; 74 e3
+ je short 02d1bh ; 74 e3
mov ax, strict word 00001h ; b8 01 00
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-floppy_read_id_: ; 0xf2c20 LB 0x49
+floppy_read_id_: ; 0xf2d42 LB 0x40
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push dx ; 52
push si ; 56
- enter 00008h, 000h ; c8 08 00 00
+ sub sp, strict byte 00008h ; 83 ec 08
mov bx, ax ; 89 c3
- call 02b54h ; e8 28 ff
+ call 02c7eh ; e8 2e ff
mov AL, strict byte 04ah ; b0 4a
mov dx, 003f5h ; ba f5 03
out DX, AL ; ee
mov al, bl ; 88 d8
out DX, AL ; ee
- sti ; fb
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 c1 e9
- and AL, strict byte 080h ; 24 80
- test al, al ; 84 c0
- je short 02c36h ; 74 f1
- cli ; fa
+ call 02bech ; e8 90 fe
xor si, si ; 31 f6
- jmp short 02c4fh ; eb 05
+ jmp short 02d65h ; eb 05
cmp si, strict byte 00007h ; 83 fe 07
- jnl short 02c5bh ; 7d 0c
+ jnl short 02d71h ; 7d 0c
mov dx, 003f5h ; ba f5 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+si-008h], al ; 88 42 f8
+ mov byte [bp+si-00eh], al ; 88 42 f2
inc si ; 46
- jmp short 02c4ah ; eb ef
- test byte [bp-008h], 0c0h ; f6 46 f8 c0
+ jmp short 02d60h ; eb ef
+ test byte [bp-00eh], 0c0h ; f6 46 f2 c0
db 00fh, 094h, 0c0h
; sete al ; 0f 94 c0
xor ah, ah ; 30 e4
- leave ; c9
+ lea sp, [bp-006h] ; 8d 66 fa
pop si ; 5e
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-floppy_drive_recal_: ; 0xf2c69 LB 0x5e
+floppy_drive_recal_: ; 0xf2d82 LB 0x48
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
- push bp ; 55
- mov bp, sp ; 89 e5
mov bx, ax ; 89 c3
- call 02b54h ; e8 e0 fe
+ call 02c7eh ; e8 f1 fe
mov AL, strict byte 007h ; b0 07
mov dx, 003f5h ; ba f5 03
out DX, AL ; ee
mov al, bl ; 88 d8
out DX, AL ; ee
- sti ; fb
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 79 e9
- and AL, strict byte 080h ; 24 80
- test al, al ; 84 c0
- je short 02c7eh ; 74 f1
- cli ; fa
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 69 e9
- and AL, strict byte 07fh ; 24 7f
+ call 02bech ; e8 53 fe
test bx, bx ; 85 db
- je short 02ca4h ; 74 07
+ je short 02da4h ; 74 07
or AL, strict byte 002h ; 0c 02
mov cx, 00095h ; b9 95 00
- jmp short 02ca9h ; eb 05
+ jmp short 02da9h ; eb 05
or AL, strict byte 001h ; 0c 01
mov cx, 00094h ; b9 94 00
movzx bx, al ; 0f b6 d8
mov dx, strict word 0003eh ; ba 3e 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 59 e9
+ call 0160eh ; e8 59 e8
xor bx, bx ; 31 db
mov dx, cx ; 89 ca
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 4f e9
+ call 0160eh ; e8 4f e8
mov ax, strict word 00001h ; b8 01 00
- pop bp ; 5d
+ lea sp, [bp-006h] ; 8d 66 fa
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-floppy_media_sense_: ; 0xf2cc7 LB 0xfa
+floppy_media_sense_: ; 0xf2dca LB 0xf0
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- push bp ; 55
- mov bp, sp ; 89 e5
mov di, ax ; 89 c7
- call 02c69h ; e8 95 ff
+ call 02d82h ; e8 ab ff
test ax, ax ; 85 c0
- jne short 02cddh ; 75 05
+ jne short 02de0h ; 75 05
xor cx, cx ; 31 c9
- jmp near 02db8h ; e9 db 00
+ jmp near 02eaeh ; e9 ce 00
mov ax, strict word 00010h ; b8 10 00
- call 0165ch ; e8 79 e9
+ call 0165ch ; e8 76 e8
test di, di ; 85 ff
- jne short 02ceeh ; 75 07
+ jne short 02df1h ; 75 07
mov cl, al ; 88 c1
shr cl, 004h ; c0 e9 04
- jmp short 02cf3h ; eb 05
+ jmp short 02df6h ; eb 05
mov cl, al ; 88 c1
and cl, 00fh ; 80 e1 0f
cmp cl, 001h ; 80 f9 01
- jne short 02d01h ; 75 09
+ jne short 02e04h ; 75 09
xor cl, cl ; 30 c9
mov CH, strict byte 015h ; b5 15
mov si, strict word 00001h ; be 01 00
- jmp short 02d4ch ; eb 4b
+ jmp short 02e42h ; eb 3e
cmp cl, 002h ; 80 f9 02
- jne short 02d0ch ; 75 06
+ jne short 02e0fh ; 75 06
xor cl, cl ; 30 c9
mov CH, strict byte 035h ; b5 35
- jmp short 02cfch ; eb f0
+ jmp short 02dffh ; eb f0
cmp cl, 003h ; 80 f9 03
- jne short 02d17h ; 75 06
+ jne short 02e1ah ; 75 06
xor cl, cl ; 30 c9
mov CH, strict byte 017h ; b5 17
- jmp short 02cfch ; eb e5
+ jmp short 02dffh ; eb e5
cmp cl, 004h ; 80 f9 04
- jne short 02d22h ; 75 06
+ jne short 02e25h ; 75 06
xor cl, cl ; 30 c9
mov CH, strict byte 017h ; b5 17
- jmp short 02cfch ; eb da
+ jmp short 02dffh ; eb da
cmp cl, 005h ; 80 f9 05
- jne short 02d2dh ; 75 06
+ jne short 02e30h ; 75 06
mov CL, strict byte 0cch ; b1 cc
mov CH, strict byte 0d7h ; b5 d7
- jmp short 02cfch ; eb cf
- cmp cl, 006h ; 80 f9 06
- jne short 02d38h ; 75 06
- xor cl, cl ; 30 c9
- mov CH, strict byte 027h ; b5 27
- jmp short 02cfch ; eb c4
- cmp cl, 007h ; 80 f9 07
- jne short 02d3fh ; 75 02
- jmp short 02d32h ; eb f3
- cmp cl, 008h ; 80 f9 08
- jne short 02d46h ; 75 02
- jmp short 02d32h ; eb ec
+ jmp short 02dffh ; eb cf
+ cmp cl, 00eh ; 80 f9 0e
+ je short 02e3ah ; 74 05
+ cmp cl, 00fh ; 80 f9 0f
+ jne short 02e3ch ; 75 02
+ jmp short 02e2ah ; eb ee
xor cl, cl ; 30 c9
xor ch, ch ; 30 ed
xor si, si ; 31 f6
movzx bx, cl ; 0f b6 d9
mov dx, 0008bh ; ba 8b 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 b6 e8
+ call 0160eh ; e8 c0 e7
mov ax, di ; 89 f8
- call 02c20h ; e8 c3 fe
+ call 02d42h ; e8 ef fe
test ax, ax ; 85 c0
- jne short 02d93h ; 75 32
+ jne short 02e89h ; 75 32
mov al, cl ; 88 c8
and AL, strict byte 0c0h ; 24 c0
cmp AL, strict byte 080h ; 3c 80
- je short 02d93h ; 74 2a
+ je short 02e89h ; 74 2a
mov al, cl ; 88 c8
and AL, strict byte 0c0h ; 24 c0
cmp AL, strict byte 0c0h ; 3c c0
- je short 02d80h ; 74 0f
+ je short 02e76h ; 74 0f
mov ah, cl ; 88 cc
and ah, 03fh ; 80 e4 3f
cmp AL, strict byte 040h ; 3c 40
- je short 02d8ch ; 74 12
+ je short 02e82h ; 74 12
test al, al ; 84 c0
- je short 02d85h ; 74 07
- jmp short 02d4ch ; eb cc
+ je short 02e7bh ; 74 07
+ jmp short 02e42h ; eb cc
and cl, 03fh ; 80 e1 3f
- jmp short 02d4ch ; eb c7
+ jmp short 02e42h ; eb c7
mov cl, ah ; 88 e1
or cl, 040h ; 80 c9 40
- jmp short 02d4ch ; eb c0
+ jmp short 02e42h ; eb c0
mov cl, ah ; 88 e1
or cl, 080h ; 80 c9 80
- jmp short 02d4ch ; eb b9
+ jmp short 02e42h ; eb b9
test di, di ; 85 ff
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
@@ -3533,225 +3734,221 @@ floppy_media_sense_: ; 0xf2cc7 LB 0xfa
movzx bx, cl ; 0f b6 d9
mov dx, 0008bh ; ba 8b 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 63 e8
+ call 0160eh ; e8 6d e7
movzx bx, ch ; 0f b6 dd
mov dx, di ; 89 fa
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 58 e8
+ call 0160eh ; e8 62 e7
mov cx, si ; 89 f1
mov ax, cx ; 89 c8
- pop bp ; 5d
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-floppy_drive_exists_: ; 0xf2dc1 LB 0x33
- push dx ; 52
+floppy_drive_exists_: ; 0xf2eba LB 0x24
push bp ; 55
mov bp, sp ; 89 e5
+ push dx ; 52
mov dx, ax ; 89 c2
mov ax, strict word 00010h ; b8 10 00
- call 0165ch ; e8 8f e8
+ call 0165ch ; e8 96 e7
test dx, dx ; 85 d2
- jne short 02dd6h ; 75 05
+ jne short 02ecfh ; 75 05
shr al, 004h ; c0 e8 04
- jmp short 02dd8h ; eb 02
+ jmp short 02ed1h ; eb 02
and AL, strict byte 00fh ; 24 0f
test al, al ; 84 c0
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
xor ah, ah ; 30 e4
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop dx ; 5a
+ pop bp ; 5d
retn ; c3
- test AL, strict byte 034h ; a8 34
- mov BL, strict byte 034h ; b3 34
- mov bp, 0c434h ; bd 34 c4
- xor AL, strict byte 0cbh ; 34 cb
- xor AL, strict byte 0d2h ; 34 d2
- xor AL, strict byte 0d9h ; 34 d9
- xor AL, strict byte 0e3h ; 34 e3
- xor AL, strict byte 0eah ; 34 ea
- db 034h
-_int13_diskette_function: ; 0xf2df4 LB 0x799
+_int13_diskette_function: ; 0xf2ede LB 0x72a
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00012h, 000h ; c8 12 00 00
- mov bx, word [bp+01ah] ; 8b 5e 1a
+ sub sp, strict byte 00012h ; 83 ec 12
+ mov bx, word [bp+016h] ; 8b 5e 16
shr bx, 008h ; c1 eb 08
mov ch, bl ; 88 dd
- mov si, word [bp+01ah] ; 8b 76 1a
+ mov si, word [bp+016h] ; 8b 76 16
and si, 000ffh ; 81 e6 ff 00
- mov ah, byte [bp+012h] ; 8a 66 12
+ mov ah, byte [bp+00eh] ; 8a 66 0e
cmp bl, 008h ; 80 fb 08
- jc short 02e4bh ; 72 3a
- mov dx, word [bp+020h] ; 8b 56 20
+ jc short 02f37h ; 72 3a
+ mov dx, word [bp+01ch] ; 8b 56 1c
or dl, 001h ; 80 ca 01
cmp bl, 008h ; 80 fb 08
- jbe near 03429h ; 0f 86 0b 06
+ jbe near 03487h ; 0f 86 7d 05
cmp bl, 016h ; 80 fb 16
- jc short 02e41h ; 72 1e
+ jc short 02f2dh ; 72 1e
or si, 00100h ; 81 ce 00 01
mov cx, si ; 89 f1
cmp bl, 016h ; 80 fb 16
- jbe near 03548h ; 0f 86 18 07
+ jbe near 035c3h ; 0f 86 a7 06
cmp bl, 018h ; 80 fb 18
- je near 0354dh ; 0f 84 16 07
+ je near 035c8h ; 0f 84 a5 06
cmp bl, 017h ; 80 fb 17
- je near 0354dh ; 0f 84 0f 07
- jmp near 0356ah ; e9 29 07
+ je near 035c8h ; 0f 84 9e 06
+ jmp near 035e5h ; e9 b8 06
cmp bl, 015h ; 80 fb 15
- je near 0350ch ; 0f 84 c4 06
- jmp near 0356ah ; e9 1f 07
+ je near 0357dh ; 0f 84 49 06
+ jmp near 035e5h ; e9 ae 06
cmp bl, 001h ; 80 fb 01
- jc short 02e65h ; 72 15
- jbe near 02edbh ; 0f 86 87 00
+ jc short 02f51h ; 72 15
+ jbe near 02fcah ; 0f 86 8a 00
cmp bl, 005h ; 80 fb 05
- je near 03282h ; 0f 84 27 04
+ je near 0330dh ; 0f 84 c6 03
cmp bl, 004h ; 80 fb 04
- jbe near 02ef9h ; 0f 86 97 00
- jmp near 0356ah ; e9 05 07
+ jbe near 02fe8h ; 0f 86 9a 00
+ jmp near 035e5h ; e9 94 06
test bl, bl ; 84 db
- jne near 0356ah ; 0f 85 ff 06
- mov al, byte [bp+012h] ; 8a 46 12
- mov byte [bp-00ah], al ; 88 46 f6
+ jne near 035e5h ; 0f 85 8e 06
+ mov al, byte [bp+00eh] ; 8a 46 0e
+ mov byte [bp-00eh], al ; 88 46 f2
cmp AL, strict byte 001h ; 3c 01
- jbe short 02e89h ; 76 14
- mov ax, word [bp+01ah] ; 8b 46 1a
+ jbe short 02f75h ; 76 14
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, strict word 00001h ; b8 01 00
- call 02aedh ; e8 67 fc
- jmp near 03254h ; e9 cb 03
+ call 02ba7h ; e8 35 fc
+ jmp near 032e9h ; e9 74 03
mov ax, strict word 00010h ; b8 10 00
- call 0165ch ; e8 cd e7
- cmp byte [bp-00ah], 000h ; 80 7e f6 00
- jne short 02e9ch ; 75 07
- mov bl, al ; 88 c3
- shr bl, 004h ; c0 eb 04
- jmp short 02ea1h ; eb 05
- mov bl, al ; 88 c3
- and bl, 00fh ; 80 e3 0f
- test bl, bl ; 84 db
- jne short 02eb5h ; 75 10
- mov ax, word [bp+01ah] ; 8b 46 1a
+ call 0165ch ; e8 e1 e6
+ cmp byte [bp-00eh], 000h ; 80 7e f2 00
+ jne short 02f88h ; 75 07
+ mov dl, al ; 88 c2
+ shr dl, 004h ; c0 ea 04
+ jmp short 02f8dh ; eb 05
+ mov dl, al ; 88 c2
+ and dl, 00fh ; 80 e2 0f
+ test dl, dl ; 84 d2
+ jne short 02fa1h ; 75 10
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 080h ; 80 cc 80
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, 00080h ; b8 80 00
- jmp short 02e83h ; eb ce
+ jmp short 02f6fh ; eb ce
xor bx, bx ; 31 db
mov dx, strict word 0003eh ; ba 3e 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 4e e7
+ call 0160eh ; e8 62 e6
xor al, al ; 30 c0
- mov byte [bp+01bh], al ; 88 46 1b
+ mov byte [bp+017h], al ; 88 46 17
xor ah, ah ; 30 e4
- call 02aedh ; e8 23 fc
- and byte [bp+020h], 0feh ; 80 66 20 fe
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ call 02ba7h ; e8 f1 fb
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
xor dx, dx ; 31 d2
- call 02b02h ; e8 2b fc
- leave ; c9
+ call 02bbfh ; e8 fc fb
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
- and byte [bp+020h], 0feh ; 80 66 20 fe
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
mov dx, 00441h ; ba 41 04
xor ax, ax ; 31 c0
- call 01600h ; e8 19 e7
+ call 01600h ; e8 2a e6
movzx dx, al ; 0f b6 d0
sal dx, 008h ; c1 e2 08
or si, dx ; 09 d6
- mov word [bp+01ah], si ; 89 76 1a
+ mov word [bp+016h], si ; 89 76 16
test al, al ; 84 c0
- je short 02ed7h ; 74 e1
- jmp near 03254h ; e9 5b 03
- mov al, byte [bp+01ah] ; 8a 46 1a
- mov byte [bp-008h], al ; 88 46 f8
- mov dx, word [bp+018h] ; 8b 56 18
+ je short 02fc3h ; 74 de
+ jmp near 032e9h ; e9 01 03
+ mov al, byte [bp+016h] ; 8a 46 16
+ mov byte [bp-00ch], al ; 88 46 f4
+ mov dx, word [bp+014h] ; 8b 56 14
shr dx, 008h ; c1 ea 08
- mov byte [bp-004h], dl ; 88 56 fc
- mov al, byte [bp+018h] ; 8a 46 18
- mov byte [bp-006h], al ; 88 46 fa
- mov dx, word [bp+016h] ; 8b 56 16
+ mov byte [bp-008h], dl ; 88 56 f8
+ mov al, byte [bp+014h] ; 8a 46 14
+ mov byte [bp-00ah], al ; 88 46 f6
+ mov dx, word [bp+012h] ; 8b 56 12
shr dx, 008h ; c1 ea 08
- mov byte [bp-002h], dl ; 88 56 fe
- mov byte [bp-00ah], ah ; 88 66 f6
+ mov byte [bp-006h], dl ; 88 56 fa
+ mov byte [bp-00eh], ah ; 88 66 f2
cmp ah, 001h ; 80 fc 01
- jnbe short 02f2fh ; 77 10
+ jnbe short 0301eh ; 77 10
cmp dl, 001h ; 80 fa 01
- jnbe short 02f2fh ; 77 0b
- mov al, byte [bp-008h] ; 8a 46 f8
+ jnbe short 0301eh ; 77 0b
+ mov al, byte [bp-00ch] ; 8a 46 f4
test al, al ; 84 c0
- je short 02f2fh ; 74 04
+ je short 0301eh ; 74 04
cmp AL, strict byte 048h ; 3c 48
- jbe short 02f58h ; 76 29
- mov bx, 00cd6h ; bb d6 0c
+ jbe short 03047h ; 76 29
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 74 e9
- push 001d5h ; 68 d5 01
- push 001edh ; 68 ed 01
+ call 018e1h ; e8 b8 e8
+ push 00255h ; 68 55 02
+ push 0026dh ; 68 6d 02
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 a4 e9
+ call 01922h ; e8 ee e8
add sp, strict byte 00006h ; 83 c4 06
- mov ax, word [bp+01ah] ; 8b 46 1a
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, strict word 00001h ; b8 01 00
- jmp short 02fc9h ; eb 71
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
- call 02dc1h ; e8 62 fe
+ jmp short 030b8h ; eb 71
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ call 02ebah ; e8 6c fe
test ax, ax ; 85 c0
- je near 03062h ; 0f 84 fd 00
- movzx dx, byte [bp-00ah] ; 0f b6 56 f6
+ je near 0314bh ; 0f 84 f7 00
+ movzx dx, byte [bp-00eh] ; 0f b6 56 f2
mov ax, dx ; 89 d0
- call 02be0h ; e8 72 fc
+ call 02cffh ; e8 a2 fc
test ax, ax ; 85 c0
- jne short 02f8bh ; 75 19
+ jne short 0307ah ; 75 19
mov ax, dx ; 89 d0
- call 02cc7h ; e8 50 fd
+ call 02dcah ; e8 64 fd
test ax, ax ; 85 c0
- jne short 02f8bh ; 75 10
- mov ax, word [bp+01ah] ; 8b 46 1a
+ jne short 0307ah ; 75 10
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 00ch ; 80 cc 0c
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, strict word 0000ch ; b8 0c 00
- jmp short 02fc9h ; eb 3e
+ jmp short 030b8h ; eb 3e
cmp ch, 002h ; 80 fd 02
- jne near 03120h ; 0f 85 8e 01
- mov dx, word [bp+00ah] ; 8b 56 0a
+ jne near 031e2h ; 0f 85 61 01
+ mov dx, word [bp+006h] ; 8b 56 06
shr dx, 00ch ; c1 ea 0c
mov ah, dl ; 88 d4
- mov cx, word [bp+00ah] ; 8b 4e 0a
+ mov cx, word [bp+006h] ; 8b 4e 06
sal cx, 004h ; c1 e1 04
- mov bx, word [bp+014h] ; 8b 5e 14
+ mov bx, word [bp+010h] ; 8b 5e 10
add bx, cx ; 01 cb
cmp bx, cx ; 39 cb
- jnc short 02fabh ; 73 02
+ jnc short 0309ah ; 73 02
db 0feh, 0c4h
; inc ah ; fe c4
- movzx cx, byte [bp-008h] ; 0f b6 4e f8
+ movzx cx, byte [bp-00ch] ; 0f b6 4e f4
sal cx, 009h ; c1 e1 09
dec cx ; 49
mov dx, bx ; 89 da
add dx, cx ; 01 ca
cmp dx, bx ; 39 da
- jnc short 02fd3h ; 73 18
- mov ax, word [bp+01ah] ; 8b 46 1a
+ jnc short 030c2h ; 73 18
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 009h ; 80 cc 09
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, strict word 00009h ; b8 09 00
- call 02aedh ; e8 21 fb
- mov byte [bp+01ah], 000h ; c6 46 1a 00
- jmp near 03254h ; e9 81 02
+ call 02ba7h ; e8 ec fa
+ mov byte [bp+016h], 000h ; c6 46 16 00
+ jmp near 032e9h ; e9 27 02
mov AL, strict byte 006h ; b0 06
mov dx, strict word 0000ah ; ba 0a 00
out DX, AL ; ee
@@ -3783,27 +3980,27 @@ _int13_diskette_function: ; 0xf2df4 LB 0x799
mov dx, strict word 0000ah ; ba 0a 00
out DX, AL ; ee
out DX, AL ; ee
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
- call 02b54h ; e8 3d fb
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ call 02c7eh ; e8 78 fb
mov AL, strict byte 0e6h ; b0 e6
mov dx, 003f5h ; ba f5 03
out DX, AL ; ee
- movzx dx, byte [bp-002h] ; 0f b6 56 fe
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa
sal dx, 002h ; c1 e2 02
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
or ax, dx ; 09 d0
mov dx, 003f5h ; ba f5 03
out DX, AL ; ee
- mov al, byte [bp-004h] ; 8a 46 fc
- out DX, AL ; ee
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov al, byte [bp-008h] ; 8a 46 f8
out DX, AL ; ee
mov al, byte [bp-006h] ; 8a 46 fa
out DX, AL ; ee
+ mov al, byte [bp-00ah] ; 8a 46 f6
+ out DX, AL ; ee
mov AL, strict byte 002h ; b0 02
out DX, AL ; ee
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- movzx dx, byte [bp-008h] ; 0f b6 56 f8
+ movzx dx, byte [bp-00ah] ; 0f b6 56 f6
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
add ax, dx ; 01 d0
dec ax ; 48
mov dx, 003f5h ; ba f5 03
@@ -3812,110 +4009,92 @@ _int13_diskette_function: ; 0xf2df4 LB 0x799
out DX, AL ; ee
mov AL, strict byte 0ffh ; b0 ff
out DX, AL ; ee
- sti ; fb
- mov dx, strict word 00040h ; ba 40 00
- mov ax, dx ; 89 d0
- call 01600h ; e8 a5 e5
+ call 02c0dh ; e8 c9 fa
test al, al ; 84 c0
- jne short 03073h ; 75 14
- call 02b2ch ; e8 ca fa
- mov ax, word [bp+01ah] ; 8b 46 1a
+ jne short 0315ch ; 75 14
+ call 02c53h ; e8 08 fb
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 080h ; 80 cc 80
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, 00080h ; b8 80 00
- jmp near 02fc9h ; e9 56 ff
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 84 e5
- and AL, strict byte 080h ; 24 80
- test al, al ; 84 c0
- je short 03053h ; 74 d1
- cli ; fa
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 74 e5
- and AL, strict byte 07fh ; 24 7f
- movzx bx, al ; 0f b6 d8
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 74 e5
+ jmp near 030b8h ; e9 5c ff
mov dx, 003f4h ; ba f4 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
and AL, strict byte 0c0h ; 24 c0
cmp AL, strict byte 0c0h ; 3c c0
- je short 030b4h ; 74 0e
- push 001d5h ; 68 d5 01
- push 00208h ; 68 08 02
+ je short 03176h ; 74 0e
+ push 00255h ; 68 55 02
+ push 00288h ; 68 88 02
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 38 e8
+ call 01922h ; e8 af e7
add sp, strict byte 00006h ; 83 c4 06
xor si, si ; 31 f6
- jmp short 030bdh ; eb 05
+ jmp short 0317fh ; eb 05
cmp si, strict byte 00007h ; 83 fe 07
- jnl short 030d5h ; 7d 18
+ jnl short 03197h ; 7d 18
mov dx, 003f5h ; ba f5 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+si-012h], al ; 88 42 ee
+ mov byte [bp+si-016h], al ; 88 42 ea
movzx bx, al ; 0f b6 d8
lea dx, [si+042h] ; 8d 54 42
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 3c e5
+ call 0160eh ; e8 7a e4
inc si ; 46
- jmp short 030b8h ; eb e3
- test byte [bp-012h], 0c0h ; f6 46 ee c0
- je short 030ech ; 74 11
- mov ax, word [bp+01ah] ; 8b 46 1a
+ jmp short 0317ah ; eb e3
+ test byte [bp-016h], 0c0h ; f6 46 ea c0
+ je short 031aeh ; 74 11
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 020h ; 80 cc 20
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, strict word 00020h ; b8 20 00
- jmp near 02fc9h ; e9 dd fe
- movzx ax, byte [bp-008h] ; 0f b6 46 f8
+ jmp near 030b8h ; e9 0a ff
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
sal ax, 009h ; c1 e0 09
cwd ; 99
db 02bh, 0c2h
; sub ax, dx ; 2b c2
sar ax, 1 ; d1 f8
mov cx, ax ; 89 c1
- mov si, word [bp+014h] ; 8b 76 14
- mov dx, word [bp+00ah] ; 8b 56 0a
+ mov si, word [bp+010h] ; 8b 76 10
+ mov dx, word [bp+006h] ; 8b 56 06
mov di, si ; 89 f7
mov es, dx ; 8e c2
push DS ; 1e
mov ds, dx ; 8e da
rep movsw ; f3 a5
pop DS ; 1f
- movzx dx, byte [bp-004h] ; 0f b6 56 fc
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
- call 02b02h ; e8 ed f9
- mov byte [bp+01bh], 000h ; c6 46 1b 00
- and byte [bp+020h], 0feh ; 80 66 20 fe
- jmp near 02ed7h ; e9 b7 fd
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ call 02bbfh ; e8 e8 f9
+ mov byte [bp+017h], 000h ; c6 46 17 00
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
+ jmp near 02fc3h ; e9 e1 fd
cmp ch, 003h ; 80 fd 03
- jne near 0326ch ; 0f 85 45 01
- mov dx, word [bp+00ah] ; 8b 56 0a
- shr dx, 00ch ; c1 ea 0c
- mov ah, dl ; 88 d4
- mov cx, word [bp+00ah] ; 8b 4e 0a
- sal cx, 004h ; c1 e1 04
- mov bx, word [bp+014h] ; 8b 5e 14
- add bx, cx ; 01 cb
- cmp bx, cx ; 39 cb
- jnc short 03140h ; 73 02
+ jne near 032f7h ; 0f 85 0e 01
+ mov cx, word [bp+006h] ; 8b 4e 06
+ shr cx, 00ch ; c1 e9 0c
+ mov ah, cl ; 88 cc
+ mov dx, word [bp+006h] ; 8b 56 06
+ sal dx, 004h ; c1 e2 04
+ mov bx, word [bp+010h] ; 8b 5e 10
+ add bx, dx ; 01 d3
+ cmp bx, dx ; 39 d3
+ jnc short 03202h ; 73 02
db 0feh, 0c4h
; inc ah ; fe c4
- movzx cx, byte [bp-008h] ; 0f b6 4e f8
+ movzx cx, byte [bp-00ch] ; 0f b6 4e f4
sal cx, 009h ; c1 e1 09
dec cx ; 49
mov dx, bx ; 89 da
add dx, cx ; 01 ca
cmp dx, bx ; 39 da
- jc near 02fbbh ; 0f 82 69 fe
+ jc near 030aah ; 0f 82 96 fe
mov AL, strict byte 006h ; b0 06
mov dx, strict word 0000ah ; ba 0a 00
out DX, AL ; ee
@@ -3946,27 +4125,27 @@ _int13_diskette_function: ; 0xf2df4 LB 0x799
mov AL, strict byte 002h ; b0 02
mov dx, strict word 0000ah ; ba 0a 00
out DX, AL ; ee
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
- call 02b54h ; e8 bf f9
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ call 02c7eh ; e8 27 fa
mov AL, strict byte 0c5h ; b0 c5
mov dx, 003f5h ; ba f5 03
out DX, AL ; ee
- movzx dx, byte [bp-002h] ; 0f b6 56 fe
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa
sal dx, 002h ; c1 e2 02
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
or ax, dx ; 09 d0
mov dx, 003f5h ; ba f5 03
out DX, AL ; ee
- mov al, byte [bp-004h] ; 8a 46 fc
- out DX, AL ; ee
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov al, byte [bp-008h] ; 8a 46 f8
out DX, AL ; ee
mov al, byte [bp-006h] ; 8a 46 fa
out DX, AL ; ee
+ mov al, byte [bp-00ah] ; 8a 46 f6
+ out DX, AL ; ee
mov AL, strict byte 002h ; b0 02
out DX, AL ; ee
- movzx dx, byte [bp-006h] ; 0f b6 56 fa
- movzx ax, byte [bp-008h] ; 0f b6 46 f8
+ movzx dx, byte [bp-00ah] ; 0f b6 56 f6
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
add ax, dx ; 01 d0
dec ax ; 48
mov dx, 003f5h ; ba f5 03
@@ -3975,131 +4154,109 @@ _int13_diskette_function: ; 0xf2df4 LB 0x799
out DX, AL ; ee
mov AL, strict byte 0ffh ; b0 ff
out DX, AL ; ee
- sti ; fb
- mov dx, strict word 00040h ; ba 40 00
- mov ax, dx ; 89 d0
- call 01600h ; e8 27 e4
- test al, al ; 84 c0
- je near 0305fh ; 0f 84 80 fe
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 18 e4
- and AL, strict byte 080h ; 24 80
+ call 02c0dh ; e8 78 f9
test al, al ; 84 c0
- je short 031d1h ; 74 e3
- cli ; fa
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 08 e4
- and AL, strict byte 07fh ; 24 7f
- movzx bx, al ; 0f b6 d8
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 08 e4
+ je near 03148h ; 0f 84 ad fe
mov dx, 003f4h ; ba f4 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
and AL, strict byte 0c0h ; 24 c0
cmp AL, strict byte 0c0h ; 3c c0
- je short 03220h ; 74 0e
- push 001d5h ; 68 d5 01
- push 00208h ; 68 08 02
+ je short 032b5h ; 74 0e
+ push 00255h ; 68 55 02
+ push 00288h ; 68 88 02
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 cc e6
+ call 01922h ; e8 70 e6
add sp, strict byte 00006h ; 83 c4 06
xor si, si ; 31 f6
- jmp short 03229h ; eb 05
+ jmp short 032beh ; eb 05
cmp si, strict byte 00007h ; 83 fe 07
- jnl short 03241h ; 7d 18
+ jnl short 032d6h ; 7d 18
mov dx, 003f5h ; ba f5 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+si-012h], al ; 88 42 ee
+ mov byte [bp+si-016h], al ; 88 42 ea
movzx bx, al ; 0f b6 d8
lea dx, [si+042h] ; 8d 54 42
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 d0 e3
+ call 0160eh ; e8 3b e3
inc si ; 46
- jmp short 03224h ; eb e3
- test byte [bp-012h], 0c0h ; f6 46 ee c0
- je near 0310ah ; 0f 84 c1 fe
- test byte [bp-011h], 002h ; f6 46 ef 02
- je short 0325bh ; 74 0c
- mov word [bp+01ah], 00300h ; c7 46 1a 00 03
- or byte [bp+020h], 001h ; 80 4e 20 01
- jmp near 02ed7h ; e9 7c fc
- push 001d5h ; 68 d5 01
- push 0021ch ; 68 1c 02
- push strict byte 00007h ; 6a 07
- call 018e9h ; e8 83 e6
- add sp, strict byte 00006h ; 83 c4 06
- jmp near 0310ah ; e9 9e fe
- movzx dx, byte [bp-004h] ; 0f b6 56 fc
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
- call 02b02h ; e8 8b f8
- and byte [bp+020h], 0feh ; 80 66 20 fe
- mov byte [bp+01bh], 000h ; c6 46 1b 00
- jmp near 02ed7h ; e9 55 fc
- mov al, byte [bp+01ah] ; 8a 46 1a
- mov byte [bp-008h], al ; 88 46 f8
- mov dx, word [bp+018h] ; 8b 56 18
+ jmp short 032b9h ; eb e3
+ test byte [bp-016h], 0c0h ; f6 46 ea c0
+ je near 031cch ; 0f 84 ee fe
+ test byte [bp-015h], 002h ; f6 46 eb 02
+ je short 032f0h ; 74 0c
+ mov word [bp+016h], 00300h ; c7 46 16 00 03
+ or byte [bp+01ch], 001h ; 80 4e 1c 01
+ jmp near 02fc3h ; e9 d3 fc
+ mov word [bp+016h], 00100h ; c7 46 16 00 01
+ jmp short 032e9h ; eb f2
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ call 02bbfh ; e8 bd f8
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
+ mov byte [bp+017h], 000h ; c6 46 17 00
+ jmp near 02fc3h ; e9 b6 fc
+ mov al, byte [bp+016h] ; 8a 46 16
+ mov byte [bp-00ch], al ; 88 46 f4
+ mov dx, word [bp+014h] ; 8b 56 14
shr dx, 008h ; c1 ea 08
- mov ax, word [bp+016h] ; 8b 46 16
+ mov ax, word [bp+012h] ; 8b 46 12
shr ax, 008h ; c1 e8 08
- mov byte [bp-002h], al ; 88 46 fe
- mov bl, byte [bp+012h] ; 8a 5e 12
- mov byte [bp-00ah], bl ; 88 5e f6
+ mov byte [bp-006h], al ; 88 46 fa
+ mov bl, byte [bp+00eh] ; 8a 5e 0e
+ mov byte [bp-00eh], bl ; 88 5e f2
cmp bl, 001h ; 80 fb 01
- jnbe short 032b6h ; 77 14
+ jnbe short 03341h ; 77 14
cmp AL, strict byte 001h ; 3c 01
- jnbe short 032b6h ; 77 10
+ jnbe short 03341h ; 77 10
cmp dl, 04fh ; 80 fa 4f
- jnbe short 032b6h ; 77 0b
- mov al, byte [bp-008h] ; 8a 46 f8
+ jnbe short 03341h ; 77 0b
+ mov al, byte [bp-00ch] ; 8a 46 f4
test al, al ; 84 c0
- je short 032b6h ; 74 04
+ je short 03341h ; 74 04
cmp AL, strict byte 012h ; 3c 12
- jbe short 032cbh ; 76 15
- mov ax, word [bp+01ah] ; 8b 46 1a
+ jbe short 03356h ; 76 15
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, strict word 00001h ; b8 01 00
- call 02aedh ; e8 26 f8
- or byte [bp+020h], 001h ; 80 4e 20 01
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
- call 02dc1h ; e8 ef fa
+ call 02ba7h ; e8 55 f8
+ or byte [bp+01ch], 001h ; 80 4e 1c 01
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ call 02ebah ; e8 5d fb
test ax, ax ; 85 c0
- je near 02ea5h ; 0f 84 cd fb
- movzx dx, byte [bp-00ah] ; 0f b6 56 f6
+ je near 02f91h ; 0f 84 2e fc
+ movzx dx, byte [bp-00eh] ; 0f b6 56 f2
mov ax, dx ; 89 d0
- call 02be0h ; e8 ff f8
+ call 02cffh ; e8 93 f9
test ax, ax ; 85 c0
- jne short 032f0h ; 75 0b
+ jne short 0337bh ; 75 0b
mov ax, dx ; 89 d0
- call 02cc7h ; e8 dd f9
+ call 02dcah ; e8 55 fa
test ax, ax ; 85 c0
- je near 02f7bh ; 0f 84 8b fc
- mov dx, word [bp+00ah] ; 8b 56 0a
+ je near 0306ah ; 0f 84 ef fc
+ mov dx, word [bp+006h] ; 8b 56 06
shr dx, 00ch ; c1 ea 0c
mov ah, dl ; 88 d4
- mov cx, word [bp+00ah] ; 8b 4e 0a
+ mov cx, word [bp+006h] ; 8b 4e 06
sal cx, 004h ; c1 e1 04
- mov bx, word [bp+014h] ; 8b 5e 14
+ mov bx, word [bp+010h] ; 8b 5e 10
add bx, cx ; 01 cb
cmp bx, cx ; 39 cb
- jnc short 03309h ; 73 02
+ jnc short 03394h ; 73 02
db 0feh, 0c4h
; inc ah ; fe c4
- movzx cx, byte [bp-008h] ; 0f b6 4e f8
+ movzx cx, byte [bp-00ch] ; 0f b6 4e f4
sal cx, 002h ; c1 e1 02
dec cx ; 49
mov dx, bx ; 89 da
add dx, cx ; 01 ca
cmp dx, bx ; 39 da
- jc near 02fbbh ; 0f 82 a0 fc
+ jc near 030aah ; 0f 82 04 fd
mov AL, strict byte 006h ; b0 06
mov dx, strict word 0000ah ; ba 0a 00
out DX, AL ; ee
@@ -4130,905 +4287,889 @@ _int13_diskette_function: ; 0xf2df4 LB 0x799
mov AL, strict byte 002h ; b0 02
mov dx, strict word 0000ah ; ba 0a 00
out DX, AL ; ee
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
- call 02b54h ; e8 f6 f7
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
+ call 02c7eh ; e8 95 f8
mov AL, strict byte 04dh ; b0 4d
mov dx, 003f5h ; ba f5 03
out DX, AL ; ee
- movzx dx, byte [bp-002h] ; 0f b6 56 fe
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa
sal dx, 002h ; c1 e2 02
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
or ax, dx ; 09 d0
mov dx, 003f5h ; ba f5 03
out DX, AL ; ee
mov AL, strict byte 002h ; b0 02
out DX, AL ; ee
- mov al, byte [bp-008h] ; 8a 46 f8
+ mov al, byte [bp-00ch] ; 8a 46 f4
out DX, AL ; ee
xor al, al ; 30 c0
out DX, AL ; ee
mov AL, strict byte 0f6h ; b0 f6
out DX, AL ; ee
- sti ; fb
- mov dx, strict word 00040h ; ba 40 00
- mov ax, dx ; 89 d0
- call 01600h ; e8 75 e2
- test al, al ; 84 c0
- jne short 03395h ; 75 06
- call 02b2ch ; e8 9a f7
- jmp near 02ea5h ; e9 10 fb
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 62 e2
- and AL, strict byte 080h ; 24 80
+ call 02c0dh ; e8 fd f7
test al, al ; 84 c0
- je short 03383h ; 74 df
- cli ; fa
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 52 e2
- and AL, strict byte 07fh ; 24 7f
- movzx bx, al ; 0f b6 d8
- mov dx, strict word 0003eh ; ba 3e 00
- mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 52 e2
+ jne short 0341ah ; 75 06
+ call 02c53h ; e8 3c f8
+ jmp near 02f91h ; e9 77 fb
mov dx, 003f4h ; ba f4 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
and AL, strict byte 0c0h ; 24 c0
cmp AL, strict byte 0c0h ; 3c c0
- je short 033d6h ; 74 0e
- push 001d5h ; 68 d5 01
- push 00208h ; 68 08 02
+ je short 03434h ; 74 0e
+ push 00255h ; 68 55 02
+ push 00288h ; 68 88 02
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 16 e5
+ call 01922h ; e8 f1 e4
add sp, strict byte 00006h ; 83 c4 06
xor si, si ; 31 f6
- jmp short 033dfh ; eb 05
+ jmp short 0343dh ; eb 05
cmp si, strict byte 00007h ; 83 fe 07
- jnl short 033f7h ; 7d 18
+ jnl short 03455h ; 7d 18
mov dx, 003f5h ; ba f5 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+si-012h], al ; 88 42 ee
+ mov byte [bp+si-016h], al ; 88 42 ea
movzx bx, al ; 0f b6 d8
lea dx, [si+042h] ; 8d 54 42
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 1a e2
+ call 0160eh ; e8 bc e1
inc si ; 46
- jmp short 033dah ; eb e3
- test byte [bp-012h], 0c0h ; f6 46 ee c0
- je short 03413h ; 74 16
- test byte [bp-011h], 002h ; f6 46 ef 02
- jne near 0324fh ; 0f 85 4a fe
- push 001d5h ; 68 d5 01
- push 0022ch ; 68 2c 02
+ jmp short 03438h ; eb e3
+ test byte [bp-016h], 0c0h ; f6 46 ea c0
+ je short 03471h ; 74 16
+ test byte [bp-015h], 002h ; f6 46 eb 02
+ jne near 032e4h ; 0f 85 81 fe
+ push 00255h ; 68 55 02
+ push 0029ch ; 68 9c 02
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 d9 e4
+ call 01922h ; e8 b4 e4
add sp, strict byte 00006h ; 83 c4 06
xor al, al ; 30 c0
- mov byte [bp+01bh], al ; 88 46 1b
+ mov byte [bp+017h], al ; 88 46 17
xor ah, ah ; 30 e4
- call 02aedh ; e8 d0 f6
- movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ call 02ba7h ; e8 2c f7
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2
xor dx, dx ; 31 d2
- call 02b02h ; e8 dc f6
- jmp near 03119h ; e9 f0 fc
- mov byte [bp-00ah], ah ; 88 66 f6
+ call 02bbfh ; e8 3b f7
+ jmp near 031dbh ; e9 54 fd
+ mov byte [bp-00eh], ah ; 88 66 f2
cmp ah, 001h ; 80 fc 01
- jbe short 03451h ; 76 20
+ jbe short 034afh ; 76 20
xor ax, ax ; 31 c0
- mov word [bp+01ah], ax ; 89 46 1a
- mov word [bp+014h], ax ; 89 46 14
- mov word [bp+018h], ax ; 89 46 18
mov word [bp+016h], ax ; 89 46 16
- mov word [bp+00ah], ax ; 89 46 0a
- mov word [bp+00ch], ax ; 89 46 0c
+ mov word [bp+010h], ax ; 89 46 10
+ mov word [bp+014h], ax ; 89 46 14
+ mov word [bp+012h], ax ; 89 46 12
+ mov word [bp+006h], ax ; 89 46 06
+ mov word [bp+008h], ax ; 89 46 08
movzx ax, cl ; 0f b6 c1
- mov word [bp+016h], ax ; 89 46 16
- mov word [bp+020h], dx ; 89 56 20
- jmp near 02ed7h ; e9 86 fa
+ mov word [bp+012h], ax ; 89 46 12
+ mov word [bp+01ch], dx ; 89 56 1c
+ jmp near 02fc3h ; e9 14 fb
mov ax, strict word 00010h ; b8 10 00
- call 0165ch ; e8 05 e2
- mov bl, al ; 88 c3
+ call 0165ch ; e8 a7 e1
+ mov dl, al ; 88 c2
xor cl, cl ; 30 c9
test AL, strict byte 0f0h ; a8 f0
- je short 03461h ; 74 02
+ je short 034bfh ; 74 02
mov CL, strict byte 001h ; b1 01
- test bl, 00fh ; f6 c3 0f
- je short 03468h ; 74 02
+ test dl, 00fh ; f6 c2 0f
+ je short 034c6h ; 74 02
db 0feh, 0c1h
; inc cl ; fe c1
- cmp byte [bp-00ah], 000h ; 80 7e f6 00
- jne short 03473h ; 75 05
- shr bl, 004h ; c0 eb 04
- jmp short 03476h ; eb 03
- and bl, 00fh ; 80 e3 0f
- xor al, al ; 30 c0
- mov byte [bp+015h], al ; 88 46 15
- movzx si, bl ; 0f b6 f3
- mov word [bp+014h], si ; 89 76 14
- xor ah, ah ; 30 e4
- mov word [bp+01ah], ax ; 89 46 1a
- mov dx, word [bp+016h] ; 8b 56 16
- xor dl, dl ; 30 d2
+ cmp byte [bp-00eh], 000h ; 80 7e f2 00
+ jne short 034d1h ; 75 05
+ shr dl, 004h ; c0 ea 04
+ jmp short 034d4h ; eb 03
+ and dl, 00fh ; 80 e2 0f
+ mov byte [bp+011h], 000h ; c6 46 11 00
+ movzx ax, dl ; 0f b6 c2
+ mov word [bp+010h], ax ; 89 46 10
+ mov word [bp+016h], strict word 00000h ; c7 46 16 00 00
+ mov bx, word [bp+012h] ; 8b 5e 12
+ xor bl, bl ; 30 db
movzx ax, cl ; 0f b6 c1
- or dx, ax ; 09 c2
- mov word [bp+016h], dx ; 89 56 16
- cmp bl, 008h ; 80 fb 08
- jnbe short 034f1h ; 77 59
- add si, si ; 01 f6
- mov ax, dx ; 89 d0
- xor ah, dh ; 30 f4
- mov bx, ax ; 89 c3
- or bh, 001h ; 80 cf 01
- jmp word [cs:si+02de2h] ; 2e ff a4 e2 2d
- mov word [bp+018h], strict word 00000h ; c7 46 18 00 00
- mov byte [bp+017h], 000h ; c6 46 17 00
- jmp short 034ffh ; eb 4c
- mov word [bp+018h], 02709h ; c7 46 18 09 27
- mov word [bp+016h], bx ; 89 5e 16
- jmp short 034ffh ; eb 42
- mov word [bp+018h], 04f0fh ; c7 46 18 0f 4f
- jmp short 034b8h ; eb f4
- mov word [bp+018h], 04f09h ; c7 46 18 09 4f
- jmp short 034b8h ; eb ed
- mov word [bp+018h], 04f12h ; c7 46 18 12 4f
- jmp short 034b8h ; eb e6
- mov word [bp+018h], 04f24h ; c7 46 18 24 4f
- jmp short 034b8h ; eb df
- mov word [bp+018h], 02708h ; c7 46 18 08 27
- mov word [bp+016h], ax ; 89 46 16
- jmp short 034ffh ; eb 1c
- mov word [bp+018h], 02709h ; c7 46 18 09 27
- jmp short 034deh ; eb f4
- mov word [bp+018h], 02708h ; c7 46 18 08 27
- jmp short 034b8h ; eb c7
- push 001d5h ; 68 d5 01
- push 0023dh ; 68 3d 02
+ or bx, ax ; 09 c3
+ mov word [bp+012h], bx ; 89 5e 12
+ mov ax, bx ; 89 d8
+ xor ah, bh ; 30 fc
+ or ah, 001h ; 80 cc 01
+ mov word [bp+012h], ax ; 89 46 12
+ cmp dl, 003h ; 80 fa 03
+ jc short 03514h ; 72 15
+ jbe short 0353bh ; 76 3a
+ cmp dl, 005h ; 80 fa 05
+ jc short 03542h ; 72 3c
+ jbe short 03549h ; 76 41
+ cmp dl, 00fh ; 80 fa 0f
+ je short 03557h ; 74 4a
+ cmp dl, 00eh ; 80 fa 0e
+ je short 03550h ; 74 3e
+ jmp short 0355eh ; eb 4a
+ cmp dl, 002h ; 80 fa 02
+ je short 03534h ; 74 1b
+ cmp dl, 001h ; 80 fa 01
+ je short 0352dh ; 74 0f
+ test dl, dl ; 84 d2
+ jne short 0355eh ; 75 3c
+ mov word [bp+014h], strict word 00000h ; c7 46 14 00 00
+ mov byte [bp+013h], 000h ; c6 46 13 00
+ jmp short 0356ch ; eb 3f
+ mov word [bp+014h], 02709h ; c7 46 14 09 27
+ jmp short 0356ch ; eb 38
+ mov word [bp+014h], 04f0fh ; c7 46 14 0f 4f
+ jmp short 0356ch ; eb 31
+ mov word [bp+014h], 04f09h ; c7 46 14 09 4f
+ jmp short 0356ch ; eb 2a
+ mov word [bp+014h], 04f12h ; c7 46 14 12 4f
+ jmp short 0356ch ; eb 23
+ mov word [bp+014h], 04f24h ; c7 46 14 24 4f
+ jmp short 0356ch ; eb 1c
+ mov word [bp+014h], 0fe3fh ; c7 46 14 3f fe
+ jmp short 0356ch ; eb 15
+ mov word [bp+014h], 0feffh ; c7 46 14 ff fe
+ jmp short 0356ch ; eb 0e
+ push 00255h ; 68 55 02
+ push 002adh ; 68 ad 02
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 ed e3
+ call 01922h ; e8 b9 e3
add sp, strict byte 00006h ; 83 c4 06
- mov word [bp+00ah], 0f000h ; c7 46 0a 00 f0
- mov word [bp+00ch], 0efc7h ; c7 46 0c c7 ef
- jmp near 03119h ; e9 0d fc
- mov byte [bp-00ah], ah ; 88 66 f6
+ mov word [bp+006h], 0f000h ; c7 46 06 00 f0
+ movzx ax, dl ; 0f b6 c2
+ call 03608h ; e8 91 00
+ mov word [bp+008h], ax ; 89 46 08
+ jmp near 031dbh ; e9 5e fc
+ mov byte [bp-00eh], ah ; 88 66 f2
cmp ah, 001h ; 80 fc 01
- jbe short 0351ah ; 76 06
- mov word [bp+01ah], si ; 89 76 1a
- jmp near 0344bh ; e9 31 ff
+ jbe short 0358bh ; 76 06
+ mov word [bp+016h], si ; 89 76 16
+ jmp near 034a9h ; e9 1e ff
mov ax, strict word 00010h ; b8 10 00
- call 0165ch ; e8 3c e1
- cmp byte [bp-00ah], 000h ; 80 7e f6 00
- jne short 0352dh ; 75 07
- mov bl, al ; 88 c3
- shr bl, 004h ; c0 eb 04
- jmp short 03532h ; eb 05
- mov bl, al ; 88 c3
- and bl, 00fh ; 80 e3 0f
- and byte [bp+020h], 0feh ; 80 66 20 fe
- mov ax, word [bp+01ah] ; 8b 46 1a
- xor ah, ah ; 30 e4
- test bl, bl ; 84 db
- je short 03542h ; 74 03
- or ah, 001h ; 80 cc 01
- mov word [bp+01ah], ax ; 89 46 1a
- jmp near 02ed7h ; e9 8f f9
+ call 0165ch ; e8 cb e0
+ cmp byte [bp-00eh], 000h ; 80 7e f2 00
+ jne short 0359eh ; 75 07
+ mov dl, al ; 88 c2
+ shr dl, 004h ; c0 ea 04
+ jmp short 035a3h ; eb 05
+ mov dl, al ; 88 c2
+ and dl, 00fh ; 80 e2 0f
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
+ mov bx, word [bp+016h] ; 8b 5e 16
+ xor bh, bh ; 30 ff
+ test dl, dl ; 84 d2
+ je short 035bdh ; 74 0d
+ cmp dl, 001h ; 80 fa 01
+ jbe short 035bah ; 76 05
+ or bh, 002h ; 80 cf 02
+ jmp short 035bdh ; eb 03
+ or bh, 001h ; 80 cf 01
+ mov word [bp+016h], bx ; 89 5e 16
+ jmp near 02fc3h ; e9 00 fa
cmp ah, 001h ; 80 fc 01
- jbe short 03559h ; 76 0c
- mov word [bp+01ah], si ; 89 76 1a
+ jbe short 035d4h ; 76 0c
+ mov word [bp+016h], si ; 89 76 16
mov ax, strict word 00001h ; b8 01 00
- call 02aedh ; e8 97 f5
- jmp near 0344bh ; e9 f2 fe
- mov ax, word [bp+01ah] ; 8b 46 1a
+ call 02ba7h ; e8 d6 f5
+ jmp near 034a9h ; e9 d5 fe
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 006h ; 80 cc 06
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov ax, strict word 00006h ; b8 06 00
- jmp near 02e83h ; e9 19 f9
- mov bx, 00cd6h ; bb d6 0c
+ jmp near 02f6fh ; e9 8a f9
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 39 e3
- mov ax, word [bp+01ah] ; 8b 46 1a
+ call 018e1h ; e8 f1 e2
+ mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 001d5h ; 68 d5 01
- push 00252h ; 68 52 02
+ push 00255h ; 68 55 02
+ push 002c2h ; 68 c2 02
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 62 e3
+ call 01922h ; e8 20 e3
add sp, strict byte 00008h ; 83 c4 08
- jmp near 02e75h ; e9 e8 f8
-_cdemu_init: ; 0xf358d LB 0x16
+ jmp near 02f61h ; e9 59 f9
+get_floppy_dpt_: ; 0xf3608 LB 0x2f
+ push bx ; 53
+ push dx ; 52
+ push bp ; 55
+ mov bp, sp ; 89 e5
+ mov dl, al ; 88 c2
+ xor ax, ax ; 31 c0
+ jmp short 03619h ; eb 06
+ inc ax ; 40
+ cmp ax, strict word 00007h ; 3d 07 00
+ jnc short 03630h ; 73 17
+ mov bx, ax ; 89 c3
+ add bx, ax ; 01 c3
+ cmp dl, byte [word bx+0005bh] ; 3a 97 5b 00
+ jne short 03613h ; 75 f0
+ movzx ax, byte [word bx+0005ch] ; 0f b6 87 5c 00
+ imul ax, ax, strict byte 0000dh ; 6b c0 0d
+ add ax, strict word 00000h ; 05 00 00
+ jmp short 03633h ; eb 03
+ mov ax, strict word 00041h ; b8 41 00
+ pop bp ; 5d
+ pop dx ; 5a
+ pop bx ; 5b
+ retn ; c3
+dummy_soft_reset_: ; 0xf3637 LB 0x7
+ push bp ; 55
+ mov bp, sp ; 89 e5
+ xor ax, ax ; 31 c0
+ pop bp ; 5d
+ retn ; c3
+_cdemu_init: ; 0xf363e LB 0x18
push bp ; 55
mov bp, sp ; 89 e5
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 83 e0
+ call 0161ch ; e8 d2 df
xor bx, bx ; 31 db
mov dx, 00322h ; ba 22 03
- call 0160eh ; e8 6d e0
+ call 0160eh ; e8 bc df
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-_cdemu_isactive: ; 0xf35a3 LB 0x14
+_cdemu_isactive: ; 0xf3656 LB 0x16
push bp ; 55
mov bp, sp ; 89 e5
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 6d e0
+ call 0161ch ; e8 ba df
mov dx, 00322h ; ba 22 03
- call 01600h ; e8 4b e0
+ call 01600h ; e8 98 df
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-_cdemu_emulated_drive: ; 0xf35b7 LB 0x14
+_cdemu_emulated_drive: ; 0xf366c LB 0x16
push bp ; 55
mov bp, sp ; 89 e5
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 59 e0
+ call 0161ch ; e8 a4 df
mov dx, 00324h ; ba 24 03
- call 01600h ; e8 37 e0
+ call 01600h ; e8 82 df
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-_int13_eltorito: ; 0xf35cb LB 0x17d
- push si ; 56
- push di ; 57
+_int13_eltorito: ; 0xf3682 LB 0x189
push bp ; 55
mov bp, sp ; 89 e5
+ push si ; 56
+ push di ; 57
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 43 e0
+ call 0161ch ; e8 8c df
mov si, 00322h ; be 22 03
mov di, ax ; 89 c7
- mov ax, word [bp+01ah] ; 8b 46 1a
+ mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
cmp ax, strict word 0004bh ; 3d 4b 00
- jc short 035f3h ; 72 0a
- jbe short 0360eh ; 76 23
+ jc short 036aah ; 72 0a
+ jbe short 036d0h ; 76 2e
cmp ax, strict word 0004dh ; 3d 4d 00
- jbe short 035fah ; 76 0a
- jmp near 0370ah ; e9 17 01
+ jbe short 036b1h ; 76 0a
+ jmp near 037cfh ; e9 25 01
cmp ax, strict word 0004ah ; 3d 4a 00
- jne near 0370ah ; 0f 85 10 01
- push word [bp+01ah] ; ff 76 1a
- push 0026ch ; 68 6c 02
- push 0027bh ; 68 7b 02
- push strict byte 00007h ; 6a 07
- call 018e9h ; e8 e1 e2
+ jne near 037cfh ; 0f 85 1e 01
+ mov bx, 00dbah ; bb ba 0d
+ mov cx, ds ; 8c d9
+ mov ax, strict word 00004h ; b8 04 00
+ call 018e1h ; e8 25 e2
+ push word [bp+016h] ; ff 76 16
+ push 002dch ; 68 dc 02
+ push 002ebh ; 68 eb 02
+ push strict byte 00004h ; 6a 04
+ call 01922h ; e8 58 e2
add sp, strict byte 00008h ; 83 c4 08
- jmp near 03727h ; e9 19 01
- mov dx, word [bp+00eh] ; 8b 56 0e
- mov ax, word [bp+008h] ; 8b 46 08
+ jmp near 037eah ; e9 1a 01
+ mov dx, word [bp+00ah] ; 8b 56 0a
+ mov ax, word [bp+004h] ; 8b 46 04
mov bx, strict word 00013h ; bb 13 00
- call 0160eh ; e8 f4 df
+ call 0160eh ; e8 32 df
mov es, di ; 8e c7
movzx bx, byte [es:si+001h] ; 26 0f b6 5c 01
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
inc dx ; 42
- mov ax, word [bp+008h] ; 8b 46 08
- call 0160eh ; e8 e3 df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0160eh ; e8 21 df
mov es, di ; 8e c7
movzx bx, byte [es:si+002h] ; 26 0f b6 5c 02
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
inc dx ; 42
inc dx ; 42
- mov ax, word [bp+008h] ; 8b 46 08
- call 0160eh ; e8 d1 df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0160eh ; e8 0f df
mov es, di ; 8e c7
movzx bx, byte [es:si+003h] ; 26 0f b6 5c 03
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 00003h ; 83 c2 03
- mov ax, word [bp+008h] ; 8b 46 08
- call 0160eh ; e8 be df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0160eh ; e8 fc de
mov es, di ; 8e c7
mov bx, word [es:si+008h] ; 26 8b 5c 08
mov cx, word [es:si+00ah] ; 26 8b 4c 0a
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 00004h ; 83 c2 04
- mov ax, word [bp+008h] ; 8b 46 08
- call 0164ah ; e8 e4 df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0164ah ; e8 22 df
mov es, di ; 8e c7
mov bx, word [es:si+004h] ; 26 8b 5c 04
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 00008h ; 83 c2 08
- mov ax, word [bp+008h] ; 8b 46 08
- call 0162ah ; e8 b2 df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0162ah ; e8 f0 de
mov es, di ; 8e c7
mov bx, word [es:si+006h] ; 26 8b 5c 06
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 0000ah ; 83 c2 0a
- mov ax, word [bp+008h] ; 8b 46 08
- call 0162ah ; e8 a0 df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0162ah ; e8 de de
mov es, di ; 8e c7
mov bx, word [es:si+00ch] ; 26 8b 5c 0c
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 0000ch ; 83 c2 0c
- mov ax, word [bp+008h] ; 8b 46 08
- call 0162ah ; e8 8e df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0162ah ; e8 cc de
mov es, di ; 8e c7
mov bx, word [es:si+00eh] ; 26 8b 5c 0e
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 0000eh ; 83 c2 0e
- mov ax, word [bp+008h] ; 8b 46 08
- call 0162ah ; e8 7c df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0162ah ; e8 ba de
mov es, di ; 8e c7
movzx bx, byte [es:si+012h] ; 26 0f b6 5c 12
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 00010h ; 83 c2 10
- mov ax, word [bp+008h] ; 8b 46 08
- call 0160eh ; e8 4d df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0160eh ; e8 8b de
mov es, di ; 8e c7
movzx bx, byte [es:si+014h] ; 26 0f b6 5c 14
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 00011h ; 83 c2 11
- mov ax, word [bp+008h] ; 8b 46 08
- call 0160eh ; e8 3a df
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0160eh ; e8 78 de
mov es, di ; 8e c7
movzx bx, byte [es:si+010h] ; 26 0f b6 5c 10
- mov dx, word [bp+00eh] ; 8b 56 0e
+ mov dx, word [bp+00ah] ; 8b 56 0a
add dx, strict byte 00012h ; 83 c2 12
- mov ax, word [bp+008h] ; 8b 46 08
- call 0160eh ; e8 27 df
- test byte [bp+01ah], 0ffh ; f6 46 1a ff
- jne short 036f3h ; 75 06
+ mov ax, word [bp+004h] ; 8b 46 04
+ call 0160eh ; e8 65 de
+ test byte [bp+016h], 0ffh ; f6 46 16 ff
+ jne short 037b5h ; 75 06
mov es, di ; 8e c7
mov byte [es:si], 000h ; 26 c6 04 00
- mov byte [bp+01bh], 000h ; c6 46 1b 00
+ mov byte [bp+017h], 000h ; c6 46 17 00
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 0c df
- and byte [bp+020h], 0feh ; 80 66 20 fe
- pop bp ; 5d
+ call 0160eh ; e8 4a de
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
- mov bx, 00cd6h ; bb d6 0c
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 99 e1
- mov ax, word [bp+01ah] ; 8b 46 1a
+ call 018e1h ; e8 07 e1
+ mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 0026ch ; 68 6c 02
- push 002a1h ; 68 a1 02
- push strict byte 00004h ; 6a 04
- jmp near 03605h ; e9 de fe
- mov ax, word [bp+01ah] ; 8b 46 1a
+ push 002dch ; 68 dc 02
+ push 00313h ; 68 13 03
+ jmp near 036c5h ; e9 db fe
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
- mov word [bp+01ah], ax ; 89 46 1a
+ mov word [bp+016h], ax ; 89 46 16
mov bx, ax ; 89 c3
shr bx, 008h ; c1 eb 08
xor bh, bh ; 30 ff
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 cc de
- or byte [bp+020h], 001h ; 80 4e 20 01
- jmp short 03706h ; eb be
-device_is_cdrom_: ; 0xf3748 LB 0x32
- push bx ; 53
- push dx ; 52
+ call 0160eh ; e8 09 de
+ or byte [bp+01ch], 001h ; 80 4e 1c 01
+ jmp short 037c8h ; eb bd
+device_is_cdrom_: ; 0xf380b LB 0x35
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push dx ; 52
mov bl, al ; 88 c3
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 c4 de
+ call 0161ch ; e8 01 de
cmp bl, 010h ; 80 fb 10
- jc short 03761h ; 72 04
+ jc short 03824h ; 72 04
xor ax, ax ; 31 c0
- jmp short 03776h ; eb 15
+ jmp short 03839h ; eb 15
xor bh, bh ; 30 ff
imul bx, bx, strict byte 00018h ; 6b db 18
mov es, ax ; 8e c0
add bx, 00122h ; 81 c3 22 01
cmp byte [es:bx+01fh], 005h ; 26 80 7f 1f 05
- jne short 0375dh ; 75 ea
+ jne short 03820h ; 75 ea
mov ax, strict word 00001h ; b8 01 00
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-cdrom_boot_: ; 0xf377a LB 0x42f
+cdrom_boot_: ; 0xf3840 LB 0x416
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- enter 0081ah, 000h ; c8 1a 08 00
+ sub sp, 0081ch ; 81 ec 1c 08
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 90 de
- mov word [bp-00ch], ax ; 89 46 f4
+ call 0161ch ; e8 c7 dd
+ mov word [bp-018h], ax ; 89 46 e8
mov si, 00322h ; be 22 03
- mov word [bp-00eh], ax ; 89 46 f2
- mov word [bp-008h], 00122h ; c7 46 f8 22 01
- mov word [bp-006h], ax ; 89 46 fa
- mov byte [bp-004h], 000h ; c6 46 fc 00
- jmp short 037ach ; eb 09
- inc byte [bp-004h] ; fe 46 fc
- cmp byte [bp-004h], 010h ; 80 7e fc 10
- jnc short 037b7h ; 73 0b
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
- call 03748h ; e8 95 ff
+ mov word [bp-010h], ax ; 89 46 f0
+ mov word [bp-014h], 00122h ; c7 46 ec 22 01
+ mov word [bp-012h], ax ; 89 46 ee
+ mov byte [bp-00ch], 000h ; c6 46 f4 00
+ jmp short 03875h ; eb 09
+ inc byte [bp-00ch] ; fe 46 f4
+ cmp byte [bp-00ch], 010h ; 80 7e f4 10
+ jnc short 03880h ; 73 0b
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
+ call 0380bh ; e8 8f ff
test ax, ax ; 85 c0
- je short 037a3h ; 74 ec
- cmp byte [bp-004h], 010h ; 80 7e fc 10
- jc short 037c3h ; 72 06
+ je short 0386ch ; 74 ec
+ cmp byte [bp-00ch], 010h ; 80 7e f4 10
+ jc short 0388ch ; 72 06
mov ax, strict word 00002h ; b8 02 00
- jmp near 03b49h ; e9 86 03
+ jmp near 03bf3h ; e9 67 03
mov cx, strict word 0000ch ; b9 0c 00
xor bx, bx ; 31 db
mov dx, ss ; 8c d2
- lea ax, [bp-01ah] ; 8d 46 e6
- call 08caah ; e8 da 54
- mov word [bp-01ah], strict word 00028h ; c7 46 e6 28 00
+ lea ax, [bp-026h] ; 8d 46 da
+ call 0948ah ; e8 f1 5b
+ mov word [bp-026h], strict word 00028h ; c7 46 da 28 00
mov ax, strict word 00011h ; b8 11 00
xor dx, dx ; 31 d2
xchg ah, al ; 86 c4
xchg dh, dl ; 86 d6
xchg dx, ax ; 92
- mov word [bp-018h], ax ; 89 46 e8
- mov word [bp-016h], dx ; 89 56 ea
+ mov word [bp-024h], ax ; 89 46 dc
+ mov word [bp-022h], dx ; 89 56 de
mov ax, strict word 00001h ; b8 01 00
xchg ah, al ; 86 c4
- mov word [bp-013h], ax ; 89 46 ed
- les bx, [bp-008h] ; c4 5e f8
+ mov word [bp-01fh], ax ; 89 46 e1
+ les bx, [bp-014h] ; c4 5e ec
db 066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 008h
; mov dword [es:bx+00ah], strict dword 008000001h ; 66 26 c7 47 0a 01 00 00 08
- mov byte [bp-002h], 000h ; c6 46 fe 00
- jmp short 0382ah ; eb 2b
- lea dx, [bp-0081ah] ; 8d 96 e6 f7
+ mov byte [bp-00eh], 000h ; c6 46 f2 00
+ jmp short 038d1h ; eb 09
+ inc byte [bp-00eh] ; fe 46 f2
+ cmp byte [bp-00eh], 004h ; 80 7e f2 04
+ jnbe short 03908h ; 77 37
+ movzx di, byte [bp-00ch] ; 0f b6 7e f4
+ imul di, di, strict byte 00018h ; 6b ff 18
+ mov es, [bp-012h] ; 8e 46 ee
+ add di, word [bp-014h] ; 03 7e ec
+ movzx di, byte [es:di+01eh] ; 26 0f b6 7d 1e
+ add di, di ; 01 ff
+ lea dx, [bp-00826h] ; 8d 96 da f7
push SS ; 16
push dx ; 52
push strict byte 00001h ; 6a 01
push strict byte 00000h ; 6a 00
push 00800h ; 68 00 08
push strict byte 00000h ; 6a 00
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
mov cx, ss ; 8c d1
- lea bx, [bp-01ah] ; 8d 5e e6
+ lea bx, [bp-026h] ; 8d 5e da
mov dx, strict word 0000ch ; ba 0c 00
- call 0280ah ; e8 ed ef
+ call word [word di+0006ah] ; ff 95 6a 00
test ax, ax ; 85 c0
- je short 03850h ; 74 2f
- inc byte [bp-002h] ; fe 46 fe
- cmp byte [bp-002h], 004h ; 80 7e fe 04
- jnbe short 03850h ; 77 26
- cmp byte [bp-004h], 008h ; 80 7e fc 08
- jbe short 037ffh ; 76 cf
- lea dx, [bp-0081ah] ; 8d 96 e6 f7
- push SS ; 16
- push dx ; 52
- push strict byte 00001h ; 6a 01
- push strict byte 00000h ; 6a 00
- push 00800h ; 68 00 08
- push strict byte 00000h ; 6a 00
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
- mov cx, ss ; 8c d1
- lea bx, [bp-01ah] ; 8d 5e e6
- mov dx, strict word 0000ch ; ba 0c 00
- call 07f53h ; e8 05 47
- jmp short 0381dh ; eb cd
+ jne short 038c8h ; 75 c0
test ax, ax ; 85 c0
- je short 0385ah ; 74 06
+ je short 03912h ; 74 06
mov ax, strict word 00003h ; b8 03 00
- jmp near 03b49h ; e9 ef 02
- cmp byte [bp-0081ah], 000h ; 80 be e6 f7 00
- je short 03867h ; 74 06
+ jmp near 03bf3h ; e9 e1 02
+ cmp byte [bp-00826h], 000h ; 80 be da f7 00
+ je short 0391fh ; 74 06
mov ax, strict word 00004h ; b8 04 00
- jmp near 03b49h ; e9 e2 02
+ jmp near 03bf3h ; e9 d4 02
xor di, di ; 31 ff
- jmp short 03871h ; eb 06
+ jmp short 03929h ; eb 06
inc di ; 47
cmp di, strict byte 00005h ; 83 ff 05
- jnc short 03881h ; 73 10
- mov al, byte [bp+di-00819h] ; 8a 83 e7 f7
- cmp al, byte [di+00cdeh] ; 3a 85 de 0c
- je short 0386bh ; 74 f0
+ jnc short 03939h ; 73 10
+ mov al, byte [bp+di-00825h] ; 8a 83 db f7
+ cmp al, byte [di+00dc2h] ; 3a 85 c2 0d
+ je short 03923h ; 74 f0
mov ax, strict word 00005h ; b8 05 00
- jmp near 03b49h ; e9 c8 02
+ jmp near 03bf3h ; e9 ba 02
xor di, di ; 31 ff
- jmp short 0388bh ; eb 06
+ jmp short 03943h ; eb 06
inc di ; 47
cmp di, strict byte 00017h ; 83 ff 17
- jnc short 0389bh ; 73 10
- mov al, byte [bp+di-00813h] ; 8a 83 ed f7
- cmp al, byte [di+00ce4h] ; 3a 85 e4 0c
- je short 03885h ; 74 f0
+ jnc short 03953h ; 73 10
+ mov al, byte [bp+di-0081fh] ; 8a 83 e1 f7
+ cmp al, byte [di+00dc8h] ; 3a 85 c8 0d
+ je short 0393dh ; 74 f0
mov ax, strict word 00006h ; b8 06 00
- jmp near 03b49h ; e9 ae 02
- mov ax, word [bp-007d3h] ; 8b 86 2d f8
- mov dx, word [bp-007d1h] ; 8b 96 2f f8
- mov word [bp-01ah], strict word 00028h ; c7 46 e6 28 00
+ jmp near 03bf3h ; e9 a0 02
+ mov ax, word [bp-007dfh] ; 8b 86 21 f8
+ mov dx, word [bp-007ddh] ; 8b 96 23 f8
+ mov word [bp-026h], strict word 00028h ; c7 46 da 28 00
xchg ah, al ; 86 c4
xchg dh, dl ; 86 d6
xchg dx, ax ; 92
- mov word [bp-018h], ax ; 89 46 e8
- mov word [bp-016h], dx ; 89 56 ea
+ mov word [bp-024h], ax ; 89 46 dc
+ mov word [bp-022h], dx ; 89 56 de
mov ax, strict word 00001h ; b8 01 00
xchg ah, al ; 86 c4
- mov word [bp-013h], ax ; 89 46 ed
- cmp byte [bp-004h], 008h ; 80 7e fc 08
- jbe short 038e1h ; 76 20
- lea dx, [bp-0081ah] ; 8d 96 e6 f7
- push SS ; 16
- push dx ; 52
- push strict byte 00001h ; 6a 01
- push strict byte 00000h ; 6a 00
- push 00800h ; 68 00 08
- push strict byte 00000h ; 6a 00
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
- mov cx, ss ; 8c d1
- lea bx, [bp-01ah] ; 8d 5e e6
- mov dx, strict word 0000ch ; ba 0c 00
- call 07f53h ; e8 74 46
- jmp short 038ffh ; eb 1e
- lea dx, [bp-0081ah] ; 8d 96 e6 f7
+ mov word [bp-01fh], ax ; 89 46 e1
+ movzx di, byte [bp-00ch] ; 0f b6 7e f4
+ imul di, di, strict byte 00018h ; 6b ff 18
+ mov es, [bp-012h] ; 8e 46 ee
+ add di, word [bp-014h] ; 03 7e ec
+ movzx di, byte [es:di+01eh] ; 26 0f b6 7d 1e
+ add di, di ; 01 ff
+ lea dx, [bp-00826h] ; 8d 96 da f7
push SS ; 16
push dx ; 52
push strict byte 00001h ; 6a 01
push strict byte 00000h ; 6a 00
push 00800h ; 68 00 08
push strict byte 00000h ; 6a 00
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
mov cx, ss ; 8c d1
- lea bx, [bp-01ah] ; 8d 5e e6
+ lea bx, [bp-026h] ; 8d 5e da
mov dx, strict word 0000ch ; ba 0c 00
- call 0280ah ; e8 0b ef
+ call word [word di+0006ah] ; ff 95 6a 00
test ax, ax ; 85 c0
- je short 03909h ; 74 06
+ je short 039b0h ; 74 06
mov ax, strict word 00007h ; b8 07 00
- jmp near 03b49h ; e9 40 02
- cmp byte [bp-0081ah], 001h ; 80 be e6 f7 01
- je short 03916h ; 74 06
+ jmp near 03bf3h ; e9 43 02
+ cmp byte [bp-00826h], 001h ; 80 be da f7 01
+ je short 039bdh ; 74 06
mov ax, strict word 00008h ; b8 08 00
- jmp near 03b49h ; e9 33 02
- cmp byte [bp-00819h], 000h ; 80 be e7 f7 00
- je short 03923h ; 74 06
+ jmp near 03bf3h ; e9 36 02
+ cmp byte [bp-00825h], 000h ; 80 be db f7 00
+ je short 039cah ; 74 06
mov ax, strict word 00009h ; b8 09 00
- jmp near 03b49h ; e9 26 02
- cmp byte [bp-007fch], 055h ; 80 be 04 f8 55
- je short 03930h ; 74 06
+ jmp near 03bf3h ; e9 29 02
+ cmp byte [bp-00808h], 055h ; 80 be f8 f7 55
+ je short 039d7h ; 74 06
mov ax, strict word 0000ah ; b8 0a 00
- jmp near 03b49h ; e9 19 02
- cmp byte [bp-007fbh], 0aah ; 80 be 05 f8 aa
- jne short 0392ah ; 75 f3
- cmp byte [bp-007fah], 088h ; 80 be 06 f8 88
- je short 03944h ; 74 06
+ jmp near 03bf3h ; e9 1c 02
+ cmp byte [bp-00807h], 0aah ; 80 be f9 f7 aa
+ jne short 039d1h ; 75 f3
+ cmp byte [bp-00806h], 088h ; 80 be fa f7 88
+ je short 039ebh ; 74 06
mov ax, strict word 0000bh ; b8 0b 00
- jmp near 03b49h ; e9 05 02
- mov al, byte [bp-007f9h] ; 8a 86 07 f8
- mov es, [bp-00eh] ; 8e 46 f2
+ jmp near 03bf3h ; e9 08 02
+ mov al, byte [bp-00805h] ; 8a 86 fb f7
+ mov es, [bp-010h] ; 8e 46 f0
mov byte [es:si+001h], al ; 26 88 44 01
- cmp byte [bp-007f9h], 000h ; 80 be 07 f8 00
- jne short 0395dh ; 75 07
+ cmp byte [bp-00805h], 000h ; 80 be fb f7 00
+ jne short 03a04h ; 75 07
mov byte [es:si+002h], 0e0h ; 26 c6 44 02 e0
- jmp short 03970h ; eb 13
- cmp byte [bp-007f9h], 004h ; 80 be 07 f8 04
- jnc short 0396bh ; 73 07
+ jmp short 03a17h ; eb 13
+ cmp byte [bp-00805h], 004h ; 80 be fb f7 04
+ jnc short 03a12h ; 73 07
mov byte [es:si+002h], 000h ; 26 c6 44 02 00
- jmp short 03970h ; eb 05
+ jmp short 03a17h ; eb 05
mov byte [es:si+002h], 080h ; 26 c6 44 02 80
- movzx di, byte [bp-004h] ; 0f b6 7e fc
+ movzx di, byte [bp-00ch] ; 0f b6 7e f4
mov ax, di ; 89 f8
cwd ; 99
db 02bh, 0c2h
; sub ax, dx ; 2b c2
sar ax, 1 ; d1 f8
- mov es, [bp-00eh] ; 8e 46 f2
+ mov es, [bp-010h] ; 8e 46 f0
mov byte [es:si+003h], al ; 26 88 44 03
mov ax, di ; 89 f8
cwd ; 99
mov bx, strict word 00002h ; bb 02 00
idiv bx ; f7 fb
mov word [es:si+004h], dx ; 26 89 54 04
- mov di, word [bp-007f8h] ; 8b be 08 f8
- test di, di ; 85 ff
- jne short 03999h ; 75 03
- mov di, 007c0h ; bf c0 07
- mov es, [bp-00eh] ; 8e 46 f2
- mov word [es:si+00ch], di ; 26 89 7c 0c
+ mov ax, word [bp-00804h] ; 8b 86 fc f7
+ mov word [bp-016h], ax ; 89 46 ea
+ test ax, ax ; 85 c0
+ jne short 03a45h ; 75 05
+ mov word [bp-016h], 007c0h ; c7 46 ea c0 07
+ mov ax, word [bp-016h] ; 8b 46 ea
+ mov es, [bp-010h] ; 8e 46 f0
+ mov word [es:si+00ch], ax ; 26 89 44 0c
mov word [es:si+006h], strict word 00000h ; 26 c7 44 06 00 00
- mov ax, word [bp-007f4h] ; 8b 86 0c f8
- mov word [bp-00ah], ax ; 89 46 f6
- mov word [es:si+00eh], ax ; 26 89 44 0e
- mov ax, word [bp-007f2h] ; 8b 86 0e f8
- mov dx, word [bp-007f0h] ; 8b 96 10 f8
+ mov di, word [bp-00800h] ; 8b be 00 f8
+ mov word [es:si+00eh], di ; 26 89 7c 0e
+ test di, di ; 85 ff
+ je short 03a67h ; 74 06
+ cmp di, 00400h ; 81 ff 00 04
+ jbe short 03a6dh ; 76 06
+ mov ax, strict word 0000ch ; b8 0c 00
+ jmp near 03bf3h ; e9 86 01
+ mov ax, word [bp-007feh] ; 8b 86 02 f8
+ mov dx, word [bp-007fch] ; 8b 96 04 f8
mov word [es:si+008h], ax ; 26 89 44 08
mov word [es:si+00ah], dx ; 26 89 54 0a
- mov word [bp-01ah], strict word 00028h ; c7 46 e6 28 00
+ mov word [bp-026h], strict word 00028h ; c7 46 da 28 00
xchg ah, al ; 86 c4
xchg dh, dl ; 86 d6
xchg dx, ax ; 92
- mov word [bp-018h], ax ; 89 46 e8
- mov word [bp-016h], dx ; 89 56 ea
- mov dx, word [bp-00ah] ; 8b 56 f6
- dec dx ; 4a
+ mov word [bp-024h], ax ; 89 46 dc
+ mov word [bp-022h], dx ; 89 56 de
+ lea dx, [di-001h] ; 8d 55 ff
shr dx, 002h ; c1 ea 02
inc dx ; 42
mov ax, dx ; 89 d0
xchg ah, al ; 86 c4
- mov word [bp-013h], ax ; 89 46 ed
- les bx, [bp-008h] ; c4 5e f8
+ mov word [bp-01fh], ax ; 89 46 e1
+ les bx, [bp-014h] ; c4 5e ec
mov word [es:bx+00ah], dx ; 26 89 57 0a
mov word [es:bx+00ch], 00200h ; 26 c7 47 0c 00 02
- mov ax, word [bp-00ah] ; 8b 46 f6
+ mov ax, di ; 89 f8
sal ax, 009h ; c1 e0 09
- and ah, 007h ; 80 e4 07
mov dx, 00800h ; ba 00 08
sub dx, ax ; 29 c2
- mov word [es:bx+01ch], dx ; 26 89 57 1c
- cmp byte [bp-004h], 008h ; 80 7e fc 08
- jbe short 03a2ch ; 76 27
- push di ; 57
+ mov ax, dx ; 89 d0
+ and ah, 007h ; 80 e4 07
+ mov word [es:bx+01ch], ax ; 26 89 47 1c
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ add bx, ax ; 01 c3
+ movzx ax, byte [es:bx+01eh] ; 26 0f b6 47 1e
+ add ax, ax ; 01 c0
+ mov word [bp-01ah], ax ; 89 46 e6
+ push word [bp-016h] ; ff 76 ea
push dword 000000001h ; 66 6a 01
- mov ax, word [bp-00ah] ; 8b 46 f6
- xor dx, dx ; 31 d2
+ mov ax, di ; 89 f8
+ xor di, di ; 31 ff
mov cx, strict word 00009h ; b9 09 00
sal ax, 1 ; d1 e0
- rcl dx, 1 ; d1 d2
- loop 03a11h ; e2 fa
- push dx ; 52
- push ax ; 50
- push strict byte 00000h ; 6a 00
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
- mov cx, ss ; 8c d1
- lea bx, [bp-01ah] ; 8d 5e e6
- mov dx, strict word 0000ch ; ba 0c 00
- call 07f53h ; e8 29 45
- jmp short 03a51h ; eb 25
+ rcl di, 1 ; d1 d7
+ loop 03adbh ; e2 fa
push di ; 57
- push dword 000000001h ; 66 6a 01
- mov ax, word [bp-00ah] ; 8b 46 f6
- xor dx, dx ; 31 d2
- mov cx, strict word 00009h ; b9 09 00
- sal ax, 1 ; d1 e0
- rcl dx, 1 ; d1 d2
- loop 03a38h ; e2 fa
- push dx ; 52
push ax ; 50
push strict byte 00000h ; 6a 00
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
mov cx, ss ; 8c d1
- lea bx, [bp-01ah] ; 8d 5e e6
+ lea bx, [bp-026h] ; 8d 5e da
mov dx, strict word 0000ch ; ba 0c 00
- call 0280ah ; e8 b9 ed
- les bx, [bp-008h] ; c4 5e f8
+ mov di, word [bp-01ah] ; 8b 7e e6
+ call word [word di+0006ah] ; ff 95 6a 00
+ les bx, [bp-014h] ; c4 5e ec
mov word [es:bx+01ch], strict word 00000h ; 26 c7 47 1c 00 00
test ax, ax ; 85 c0
- je short 03a64h ; 74 06
- mov ax, strict word 0000ch ; b8 0c 00
- jmp near 03b49h ; e9 e5 00
- mov es, [bp-00eh] ; 8e 46 f2
+ je short 03b0bh ; 74 06
+ mov ax, strict word 0000dh ; b8 0d 00
+ jmp near 03bf3h ; e9 e8 00
+ mov es, [bp-010h] ; 8e 46 f0
mov al, byte [es:si+001h] ; 26 8a 44 01
cmp AL, strict byte 002h ; 3c 02
- jc short 03a7ch ; 72 0d
- jbe short 03a94h ; 76 23
+ jc short 03b23h ; 72 0d
+ jbe short 03b3bh ; 76 23
cmp AL, strict byte 004h ; 3c 04
- je short 03aaah ; 74 35
+ je short 03b51h ; 74 35
cmp AL, strict byte 003h ; 3c 03
- je short 03a9fh ; 74 26
- jmp near 03af2h ; e9 76 00
+ je short 03b46h ; 74 26
+ jmp near 03b9ch ; e9 79 00
cmp AL, strict byte 001h ; 3c 01
- jne short 03af2h ; 75 72
- mov es, [bp-00eh] ; 8e 46 f2
+ jne short 03b9ch ; 75 75
+ mov es, [bp-010h] ; 8e 46 f0
db 066h, 026h, 0c7h, 044h, 012h, 050h, 000h, 00fh, 000h
; mov dword [es:si+012h], strict dword 0000f0050h ; 66 26 c7 44 12 50 00 0f 00
mov word [es:si+010h], strict word 00002h ; 26 c7 44 10 02 00
- jmp short 03af2h ; eb 5e
+ jmp short 03b9ch ; eb 61
db 066h, 026h, 0c7h, 044h, 012h, 050h, 000h, 012h, 000h
; mov dword [es:si+012h], strict dword 000120050h ; 66 26 c7 44 12 50 00 12 00
- jmp short 03a8ch ; eb ed
+ jmp short 03b33h ; eb ed
db 066h, 026h, 0c7h, 044h, 012h, 050h, 000h, 024h, 000h
; mov dword [es:si+012h], strict dword 000240050h ; 66 26 c7 44 12 50 00 24 00
- jmp short 03a8ch ; eb e2
+ jmp short 03b33h ; eb e2
mov dx, 001c4h ; ba c4 01
- mov ax, di ; 89 f8
- call 01600h ; e8 4e db
+ mov ax, word [bp-016h] ; 8b 46 ea
+ call 01600h ; e8 a6 da
and AL, strict byte 03fh ; 24 3f
xor ah, ah ; 30 e4
- mov es, [bp-00eh] ; 8e 46 f2
+ mov es, [bp-010h] ; 8e 46 f0
mov word [es:si+014h], ax ; 26 89 44 14
mov dx, 001c4h ; ba c4 01
- mov ax, di ; 89 f8
- call 01600h ; e8 3b db
- xor ah, ah ; 30 e4
- mov bx, ax ; 89 c3
+ mov ax, word [bp-016h] ; 8b 46 ea
+ call 01600h ; e8 92 da
+ movzx bx, al ; 0f b6 d8
sal bx, 002h ; c1 e3 02
mov dx, 001c5h ; ba c5 01
- mov ax, di ; 89 f8
- call 01600h ; e8 2c db
+ mov ax, word [bp-016h] ; 8b 46 ea
+ call 01600h ; e8 83 da
xor ah, ah ; 30 e4
add ax, bx ; 01 d8
inc ax ; 40
- mov es, [bp-00eh] ; 8e 46 f2
+ mov es, [bp-010h] ; 8e 46 f0
mov word [es:si+012h], ax ; 26 89 44 12
mov dx, 001c3h ; ba c3 01
- mov ax, di ; 89 f8
- call 01600h ; e8 18 db
+ mov ax, word [bp-016h] ; 8b 46 ea
+ call 01600h ; e8 6e da
xor ah, ah ; 30 e4
inc ax ; 40
- mov es, [bp-00eh] ; 8e 46 f2
+ mov es, [bp-010h] ; 8e 46 f0
mov word [es:si+010h], ax ; 26 89 44 10
- mov es, [bp-00eh] ; 8e 46 f2
+ mov es, [bp-010h] ; 8e 46 f0
cmp byte [es:si+001h], 000h ; 26 80 7c 01 00
- je short 03b30h ; 74 34
+ je short 03bdah ; 74 34
cmp byte [es:si+002h], 000h ; 26 80 7c 02 00
- jne short 03b19h ; 75 16
+ jne short 03bc3h ; 75 16
mov dx, strict word 00010h ; ba 10 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 f4 da
+ call 01600h ; e8 4a da
or AL, strict byte 041h ; 0c 41
movzx bx, al ; 0f b6 d8
mov dx, strict word 00010h ; ba 10 00
mov ax, strict word 00040h ; b8 40 00
- jmp short 03b2dh ; eb 14
+ jmp short 03bd7h ; eb 14
mov dx, 002c0h ; ba c0 02
- mov ax, word [bp-00ch] ; 8b 46 f4
- call 01600h ; e8 de da
+ mov ax, word [bp-018h] ; 8b 46 e8
+ call 01600h ; e8 34 da
db 0feh, 0c0h
; inc al ; fe c0
movzx bx, al ; 0f b6 d8
mov dx, 002c0h ; ba c0 02
- mov ax, word [bp-00ch] ; 8b 46 f4
- call 0160eh ; e8 de da
- mov es, [bp-00eh] ; 8e 46 f2
+ mov ax, word [bp-018h] ; 8b 46 e8
+ call 0160eh ; e8 34 da
+ mov es, [bp-010h] ; 8e 46 f0
cmp byte [es:si+001h], 000h ; 26 80 7c 01 00
- je short 03b3eh ; 74 04
+ je short 03be8h ; 74 04
mov byte [es:si], 001h ; 26 c6 04 01
- mov es, [bp-00eh] ; 8e 46 f2
+ mov es, [bp-010h] ; 8e 46 f0
movzx ax, byte [es:si+002h] ; 26 0f b6 44 02
sal ax, 008h ; c1 e0 08
- leave ; c9
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
- push ax ; 50
- dec si ; 4e
- dec cx ; 49
- dec ax ; 48
- inc di ; 47
- inc si ; 46
- inc bp ; 45
- inc sp ; 44
- inc bx ; 43
- inc dx ; 42
- inc cx ; 41
- sbb byte [01415h], dl ; 18 16 15 14
- adc word [bx+si], dx ; 11 10
- or ax, 00b0ch ; 0d 0c 0b
- or cl, byte [bx+di] ; 0a 09
- or byte [di], al ; 08 05
- add AL, strict byte 003h ; 04 03
- add al, byte [bx+di] ; 02 01
- add byte [di], ch ; 00 2d
- aas ; 3f
- push CS ; 0e
- aas ; 3f
- pop ax ; 58
- cmp AL, strict byte 082h ; 3c 82
- cmp AL, strict byte 04dh ; 3c 4d
- cmp AL, strict byte 082h ; 3c 82
- cmp AL, strict byte 04dh ; 3c 4d
- cmp AL, strict byte 074h ; 3c 74
- db 03eh, 00eh
- ; ds push CS ; 3e 0e
- aas ; 3f
- sub ax, 02d3fh ; 2d 3f 2d
- aas ; 3f
- push CS ; 0e
- aas ; 3f
- push CS ; 0e
- aas ; 3f
- push CS ; 0e
- aas ; 3f
- push CS ; 0e
- aas ; 3f
- push CS ; 0e
- aas ; 3f
- and ax, 00e3fh ; 25 3f 0e
- aas ; 3f
- sub ax, 02d3fh ; 2d 3f 2d
- aas ; 3f
- sub ax, 02d3fh ; 2d 3f 2d
- aas ; 3f
- sub ax, 02d3fh ; 2d 3f 2d
- aas ; 3f
- sub ax, 02d3fh ; 2d 3f 2d
- aas ; 3f
- sub ax, 02d3fh ; 2d 3f 2d
- aas ; 3f
- sub ax, 02d3fh ; 2d 3f 2d
- aas ; 3f
-_int13_cdemu: ; 0xf3ba9 LB 0x41f
+ db 050h, 04eh, 049h, 048h, 047h, 046h, 045h, 044h, 043h, 042h, 041h, 018h, 016h, 015h, 014h, 011h
+ db 010h, 00dh, 00ch, 00bh, 00ah, 009h, 008h, 005h, 004h, 003h, 002h, 001h, 000h, 0eeh, 03fh, 0fch
+ db 03ch, 046h, 03dh, 06eh, 03dh, 03bh, 03dh, 06eh, 03dh, 03bh, 03dh, 044h, 03fh, 021h, 03dh, 0eeh
+ db 03fh, 0eeh, 03fh, 021h, 03dh, 021h, 03dh, 021h, 03dh, 021h, 03dh, 021h, 03dh, 0e5h, 03fh, 021h
+ db 03dh, 0eeh, 03fh, 0eeh, 03fh, 0eeh, 03fh, 0eeh, 03fh, 0eeh, 03fh, 0eeh, 03fh, 0eeh, 03fh, 0eeh
+ db 03fh, 0eeh, 03fh, 0eeh, 03fh, 0eeh, 03fh, 0eeh, 03fh
+_int13_cdemu: ; 0xf3c56 LB 0x434
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0002ah, 000h ; c8 2a 00 00
+ sub sp, strict byte 0002ah ; 83 ec 2a
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 64 da
+ call 0161ch ; e8 b5 d9
mov di, 00322h ; bf 22 03
mov cx, ax ; 89 c1
mov si, di ; 89 fe
- mov word [bp-004h], ax ; 89 46 fc
- mov word [bp-008h], 00122h ; c7 46 f8 22 01
- mov word [bp-006h], ax ; 89 46 fa
+ mov word [bp-008h], ax ; 89 46 f8
+ mov word [bp-00eh], 00122h ; c7 46 f2 22 01
+ mov word [bp-00ch], ax ; 89 46 f4
mov es, ax ; 8e c0
mov al, byte [es:di+003h] ; 26 8a 45 03
add al, al ; 00 c0
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
mov al, byte [es:di+004h] ; 26 8a 45 04
- add byte [bp-002h], al ; 00 46 fe
+ add byte [bp-006h], al ; 00 46 fa
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 27 da
+ call 0160eh ; e8 78 d9
mov es, cx ; 8e c1
cmp byte [es:di], 000h ; 26 80 3d 00
- je short 03bfdh ; 74 0e
- movzx ax, byte [es:di+002h] ; 26 0f b6 45 02
- mov dx, word [bp+016h] ; 8b 56 16
- xor dh, dh ; 30 f6
- cmp ax, dx ; 39 d0
- je short 03c26h ; 74 29
- mov bx, 00cd6h ; bb d6 0c
+ je short 03cach ; 74 0e
+ movzx dx, byte [es:di+002h] ; 26 0f b6 55 02
+ mov ax, word [bp+012h] ; 8b 46 12
+ xor ah, ah ; 30 e4
+ cmp dx, ax ; 39 c2
+ je short 03cd5h ; 74 29
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 a6 dc
- mov ax, word [bp+016h] ; 8b 46 16
+ call 018e1h ; e8 2a dc
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
push ax ; 50
- mov ax, word [bp+01ah] ; 8b 46 1a
+ mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 002bah ; 68 ba 02
- push 002c6h ; 68 c6 02
+ push 0032ch ; 68 2c 03
+ push 00338h ; 68 38 03
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 c9 dc
+ call 01922h ; e8 53 dc
add sp, strict byte 0000ah ; 83 c4 0a
- jmp near 03f4dh ; e9 27 03
- mov ax, word [bp+01ah] ; 8b 46 1a
+ jmp near 0400eh ; e9 39 03
+ mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
cmp ax, strict word 00050h ; 3d 50 00
- jnbe near 03f2dh ; 0f 87 fa 02
+ jnbe near 03feeh ; 0f 87 0c 03
push CS ; 0e
pop ES ; 07
mov cx, strict word 0001eh ; b9 1e 00
- mov di, 03b50h ; bf 50 3b
+ mov di, 03bfdh ; bf fd 3b
repne scasb ; f2 ae
sal cx, 1 ; d1 e1
mov di, cx ; 89 cf
- mov ax, word [cs:di+03b6dh] ; 2e 8b 85 6d 3b
- mov bx, word [bp+01ah] ; 8b 5e 1a
+ mov ax, word [cs:di+03c1ah] ; 2e 8b 85 1a 3c
+ mov bx, word [bp+016h] ; 8b 5e 16
xor bh, bh ; 30 ff
jmp ax ; ff e0
- mov ax, word [bp+01ah] ; 8b 46 1a
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
+ imul bx, bx, strict byte 00018h ; 6b db 18
+ mov es, [bp-00ch] ; 8e 46 f4
+ add bx, word [bp-00eh] ; 03 5e f2
+ movzx bx, byte [es:bx+01eh] ; 26 0f b6 5f 1e
+ add bx, bx ; 01 db
+ cmp word [word bx+0006ah], strict byte 00000h ; 83 bf 6a 00 00
+ je near 03d21h ; 0f 84 08 00
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ call word [word bx+00076h] ; ff 97 76 00
+ mov byte [bp+017h], 000h ; c6 46 17 00
+ xor bx, bx ; 31 db
+ mov dx, strict word 00074h ; ba 74 00
+ mov ax, strict word 00040h ; b8 40 00
+ call 0160eh ; e8 de d8
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
+ lea sp, [bp-004h] ; 8d 66 fc
+ pop di ; 5f
+ pop si ; 5e
+ pop bp ; 5d
+ retn ; c3
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 003h ; 80 cc 03
- jmp near 03f55h ; e9 fd 02
+ jmp near 04016h ; e9 d0 02
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 9f d9
+ call 01600h ; e8 b1 d8
mov cl, al ; 88 c1
movzx ax, cl ; 0f b6 c1
sal ax, 008h ; c1 e0 08
or bx, ax ; 09 c3
- mov word [bp+01ah], bx ; 89 5e 1a
+ mov word [bp+016h], bx ; 89 5e 16
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 95 d9
+ call 0160eh ; e8 a7 d8
test cl, cl ; 84 c9
- je near 03f12h ; 0f 84 93 02
- jmp near 03f69h ; e9 e7 02
- mov es, [bp-004h] ; 8e 46 fc
+ je short 03d25h ; 74 ba
+ jmp near 0402ah ; e9 bc 02
+ mov es, [bp-008h] ; 8e 46 f8
mov di, word [es:si+014h] ; 26 8b 7c 14
mov dx, word [es:si+012h] ; 26 8b 54 12
mov bx, word [es:si+010h] ; 26 8b 5c 10
@@ -5036,639 +5177,561 @@ _int13_cdemu: ; 0xf3ba9 LB 0x41f
mov word [bp-014h], ax ; 89 46 ec
mov ax, word [es:si+00ah] ; 26 8b 44 0a
mov word [bp-012h], ax ; 89 46 ee
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
and ax, strict word 0003fh ; 25 3f 00
mov word [bp-010h], ax ; 89 46 f0
- mov ax, word [bp+018h] ; 8b 46 18
- xor ah, ah ; 30 e4
- and AL, strict byte 0c0h ; 24 c0
- sal ax, 002h ; c1 e0 02
- mov cx, word [bp+018h] ; 8b 4e 18
- shr cx, 008h ; c1 e9 08
+ mov cx, word [bp+014h] ; 8b 4e 14
+ and cx, 000c0h ; 81 e1 c0 00
+ sal cx, 002h ; c1 e1 02
+ mov ax, word [bp+014h] ; 8b 46 14
+ shr ax, 008h ; c1 e8 08
or ax, cx ; 09 c8
- mov si, word [bp+016h] ; 8b 76 16
+ mov si, word [bp+012h] ; 8b 76 12
shr si, 008h ; c1 ee 08
- mov cx, word [bp+01ah] ; 8b 4e 1a
+ mov cx, word [bp+016h] ; 8b 4e 16
xor ch, ch ; 30 ed
mov word [bp-00ah], cx ; 89 4e f6
test cx, cx ; 85 c9
- je near 03f0eh ; 0f 84 40 02
+ jne short 03dbbh ; 75 03
+ jmp near 03d21h ; e9 66 ff
cmp di, word [bp-010h] ; 3b 7e f0
- jc near 03f4dh ; 0f 82 78 02
+ jc near 0400eh ; 0f 82 4c 02
cmp ax, dx ; 39 d0
- jnc near 03f4dh ; 0f 83 72 02
+ jnc near 0400eh ; 0f 83 46 02
cmp si, bx ; 39 de
- jnc near 03f4dh ; 0f 83 6c 02
- mov dx, word [bp+01ah] ; 8b 56 1a
+ jnc near 0400eh ; 0f 83 40 02
+ mov dx, word [bp+016h] ; 8b 56 16
shr dx, 008h ; c1 ea 08
cmp dx, strict byte 00004h ; 83 fa 04
- je near 03f0eh ; 0f 84 20 02
- mov dx, word [bp+014h] ; 8b 56 14
+ jne short 03ddch ; 75 03
+ jmp near 03d21h ; e9 45 ff
+ mov dx, word [bp+010h] ; 8b 56 10
shr dx, 004h ; c1 ea 04
- mov cx, word [bp+00ah] ; 8b 4e 0a
+ mov cx, word [bp+006h] ; 8b 4e 06
add cx, dx ; 01 d1
- mov word [bp-00eh], cx ; 89 4e f2
- mov dx, word [bp+014h] ; 8b 56 14
+ mov word [bp-016h], cx ; 89 4e ea
+ mov dx, word [bp+010h] ; 8b 56 10
and dx, strict byte 0000fh ; 83 e2 0f
- mov word [bp-00ch], dx ; 89 56 f4
+ mov word [bp-01ch], dx ; 89 56 e4
xor dl, dl ; 30 d2
xor cx, cx ; 31 c9
- call 08c79h ; e8 6d 4f
+ call 09459h ; e8 5f 56
xor bx, bx ; 31 db
add ax, si ; 01 f0
adc dx, bx ; 11 da
mov bx, di ; 89 fb
xor cx, cx ; 31 c9
- call 08c79h ; e8 60 4f
- mov bx, word [bp-010h] ; 8b 5e f0
- dec bx ; 4b
+ call 09459h ; e8 52 56
+ mov bx, ax ; 89 c3
+ mov ax, word [bp-010h] ; 8b 46 f0
+ dec ax ; 48
xor cx, cx ; 31 c9
add ax, bx ; 01 d8
adc dx, cx ; 11 ca
- mov bx, word [bp+01ah] ; 8b 5e 1a
+ mov bx, word [bp+016h] ; 8b 5e 16
xor bl, bl ; 30 db
mov cx, word [bp-00ah] ; 8b 4e f6
or cx, bx ; 09 d9
- mov word [bp+01ah], cx ; 89 4e 1a
+ mov word [bp+016h], cx ; 89 4e 16
mov si, ax ; 89 c6
mov di, dx ; 89 d7
shr di, 1 ; d1 ef
rcr si, 1 ; d1 de
shr di, 1 ; d1 ef
rcr si, 1 ; d1 de
- mov word [bp-01ah], di ; 89 7e e6
+ mov word [bp-01eh], di ; 89 7e e2
mov di, ax ; 89 c7
and di, strict byte 00003h ; 83 e7 03
xor bh, bh ; 30 ff
add ax, word [bp-00ah] ; 03 46 f6
adc dx, bx ; 11 da
- mov bx, ax ; 89 c3
- add bx, strict byte 0ffffh ; 83 c3 ff
- mov ax, dx ; 89 d0
- adc ax, strict word 0ffffh ; 15 ff ff
- mov word [bp-01eh], bx ; 89 5e e2
- mov word [bp-01ch], ax ; 89 46 e4
- shr word [bp-01ch], 1 ; d1 6e e4
- rcr word [bp-01eh], 1 ; d1 5e e2
- shr word [bp-01ch], 1 ; d1 6e e4
- rcr word [bp-01eh], 1 ; d1 5e e2
+ add ax, strict word 0ffffh ; 05 ff ff
+ adc dx, strict byte 0ffffh ; 83 d2 ff
+ mov word [bp-022h], ax ; 89 46 de
+ mov word [bp-020h], dx ; 89 56 e0
+ shr word [bp-020h], 1 ; d1 6e e0
+ rcr word [bp-022h], 1 ; d1 5e de
+ shr word [bp-020h], 1 ; d1 6e e0
+ rcr word [bp-022h], 1 ; d1 5e de
mov cx, strict word 0000ch ; b9 0c 00
- xor bx, bx ; 31 db
mov dx, ss ; 8c d2
- lea ax, [bp-02ah] ; 8d 46 d6
- call 08caah ; e8 36 4f
- mov word [bp-02ah], strict word 00028h ; c7 46 d6 28 00
+ lea ax, [bp-02eh] ; 8d 46 d2
+ call 0948ah ; e8 2c 56
+ mov word [bp-02eh], strict word 00028h ; c7 46 d2 28 00
mov ax, word [bp-014h] ; 8b 46 ec
add ax, si ; 01 f0
mov dx, word [bp-012h] ; 8b 56 ee
- adc dx, word [bp-01ah] ; 13 56 e6
+ adc dx, word [bp-01eh] ; 13 56 e2
xchg ah, al ; 86 c4
xchg dh, dl ; 86 d6
xchg dx, ax ; 92
- mov word [bp-028h], ax ; 89 46 d8
- mov word [bp-026h], dx ; 89 56 da
- mov dx, word [bp-01eh] ; 8b 56 e2
- sub dx, si ; 29 f2
- inc dx ; 42
- mov ax, dx ; 89 d0
+ mov word [bp-02ch], ax ; 89 46 d4
+ mov word [bp-02ah], dx ; 89 56 d6
+ mov ax, word [bp-022h] ; 8b 46 de
+ sub ax, si ; 29 f0
+ inc ax ; 40
xchg ah, al ; 86 c4
- mov word [bp-023h], ax ; 89 46 dd
- les bx, [bp-008h] ; c4 5e f8
- mov word [es:bx+00ah], dx ; 26 89 57 0a
+ mov word [bp-027h], ax ; 89 46 d9
+ mov ax, word [bp-00ah] ; 8b 46 f6
+ les bx, [bp-00eh] ; c4 5e f2
+ mov word [es:bx+00ah], ax ; 26 89 47 0a
mov word [es:bx+00ch], 00200h ; 26 c7 47 0c 00 02
mov ax, di ; 89 f8
sal ax, 009h ; c1 e0 09
mov word [es:bx+01ah], ax ; 26 89 47 1a
mov dx, word [bp-00ah] ; 8b 56 f6
- sal dx, 009h ; c1 e2 09
- and dh, 007h ; 80 e6 07
- mov bx, 00800h ; bb 00 08
+ xor dh, dh ; 30 f6
+ and dl, 003h ; 80 e2 03
+ mov bx, strict word 00004h ; bb 04 00
sub bx, dx ; 29 d3
mov dx, bx ; 89 da
- mov bx, word [bp-008h] ; 8b 5e f8
- mov bx, word [es:bx+01ah] ; 26 8b 5f 1a
- sub dx, bx ; 29 da
- mov bx, word [bp-008h] ; 8b 5e f8
+ sub dx, di ; 29 fa
+ sal dx, 009h ; c1 e2 09
+ and dh, 007h ; 80 e6 07
+ mov bx, word [bp-00eh] ; 8b 5e f2
mov word [es:bx+01ch], dx ; 26 89 57 1c
- cmp byte [bp-002h], 008h ; 80 7e fe 08
- jbe short 03e02h ; 76 2a
- push word [bp-00eh] ; ff 76 f2
- push word [bp-00ch] ; ff 76 f4
- push strict byte 00001h ; 6a 01
- mov si, word [bp-00ah] ; 8b 76 f6
- xor di, di ; 31 ff
- mov cx, strict word 00009h ; b9 09 00
- sal si, 1 ; d1 e6
- rcl di, 1 ; d1 d7
- loop 03de8h ; e2 fa
- push di ; 57
- push si ; 56
- push ax ; 50
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
- mov cx, ss ; 8c d1
- lea bx, [bp-02ah] ; 8d 5e d6
- mov dx, strict word 0000ch ; ba 0c 00
- call 07f53h ; e8 53 41
- jmp short 03e2ah ; eb 28
- push word [bp-00eh] ; ff 76 f2
- push word [bp-00ch] ; ff 76 f4
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa
+ imul dx, dx, strict byte 00018h ; 6b d2 18
+ add bx, dx ; 01 d3
+ movzx dx, byte [es:bx+01eh] ; 26 0f b6 57 1e
+ add dx, dx ; 01 d2
+ mov word [bp-01ah], dx ; 89 56 e6
+ push word [bp-016h] ; ff 76 ea
+ push word [bp-01ch] ; ff 76 e4
push strict byte 00001h ; 6a 01
mov si, word [bp-00ah] ; 8b 76 f6
xor di, di ; 31 ff
mov cx, strict word 00009h ; b9 09 00
sal si, 1 ; d1 e6
rcl di, 1 ; d1 d7
- loop 03e12h ; e2 fa
+ loop 03edeh ; e2 fa
push di ; 57
push si ; 56
push ax ; 50
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa
mov cx, ss ; 8c d1
- lea bx, [bp-02ah] ; 8d 5e d6
+ lea bx, [bp-02eh] ; 8d 5e d2
mov dx, strict word 0000ch ; ba 0c 00
- call 0280ah ; e8 e0 e9
- mov dl, al ; 88 c2
- les bx, [bp-008h] ; c4 5e f8
+ mov si, word [bp-01ah] ; 8b 76 e6
+ call word [word si+0006ah] ; ff 94 6a 00
+ mov dx, ax ; 89 c2
+ les bx, [bp-00eh] ; c4 5e f2
db 066h, 026h, 0c7h, 047h, 01ah, 000h, 000h, 000h, 000h
; mov dword [es:bx+01ah], strict dword 000000000h ; 66 26 c7 47 1a 00 00 00 00
- test dl, dl ; 84 d2
- je near 03f0eh ; 0f 84 d0 00
- mov bx, 00cd6h ; bb d6 0c
+ test al, al ; 84 c0
+ je near 03d21h ; 0f 84 13 fe
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 65 da
+ call 018e1h ; e8 c8 d9
movzx ax, dl ; 0f b6 c2
push ax ; 50
- mov ax, word [bp+01ah] ; 8b 46 1a
+ mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 002bah ; 68 ba 02
- push 002fch ; 68 fc 02
+ push 0032ch ; 68 2c 03
+ push 0036eh ; 68 6e 03
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 8a da
+ call 01922h ; e8 f3 d9
add sp, strict byte 0000ah ; 83 c4 0a
- mov ax, word [bp+01ah] ; 8b 46 1a
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 002h ; 80 cc 02
- mov word [bp+01ah], ax ; 89 46 1a
- mov byte [bp+01ah], 000h ; c6 46 1a 00
- jmp near 03f58h ; e9 e4 00
- mov es, [bp-004h] ; 8e 46 fc
+ mov word [bp+016h], ax ; 89 46 16
+ mov byte [bp+016h], 000h ; c6 46 16 00
+ jmp near 04019h ; e9 d5 00
+ mov es, [bp-008h] ; 8e 46 f8
mov di, word [es:si+014h] ; 26 8b 7c 14
mov dx, word [es:si+012h] ; 26 8b 54 12
dec dx ; 4a
mov bx, word [es:si+010h] ; 26 8b 5c 10
dec bx ; 4b
- mov byte [bp+01ah], 000h ; c6 46 1a 00
- mov ax, word [bp+014h] ; 8b 46 14
+ mov byte [bp+016h], 000h ; c6 46 16 00
+ mov ax, word [bp+010h] ; 8b 46 10
xor al, al ; 30 c0
- mov cx, word [bp+018h] ; 8b 4e 18
+ mov cx, word [bp+014h] ; 8b 4e 14
xor ch, ch ; 30 ed
- mov word [bp-018h], cx ; 89 4e e8
+ mov word [bp-01ah], cx ; 89 4e e6
mov cx, dx ; 89 d1
xor ch, dh ; 30 f5
sal cx, 008h ; c1 e1 08
- mov word [bp-016h], cx ; 89 4e ea
- mov cx, word [bp-018h] ; 8b 4e e8
- or cx, word [bp-016h] ; 0b 4e ea
- mov word [bp+018h], cx ; 89 4e 18
+ mov word [bp-018h], cx ; 89 4e e8
+ mov cx, word [bp-01ah] ; 8b 4e e6
+ or cx, word [bp-018h] ; 0b 4e e8
+ mov word [bp+014h], cx ; 89 4e 14
shr dx, 002h ; c1 ea 02
xor dh, dh ; 30 f6
and dl, 0c0h ; 80 e2 c0
- mov word [bp-016h], dx ; 89 56 ea
- mov dx, di ; 89 fa
- xor dh, dh ; 30 f6
- and dl, 03fh ; 80 e2 3f
- or dx, word [bp-016h] ; 0b 56 ea
+ and di, strict byte 0003fh ; 83 e7 3f
+ or dx, di ; 09 fa
xor cl, cl ; 30 c9
or cx, dx ; 09 d1
- mov word [bp+018h], cx ; 89 4e 18
- mov dx, word [bp+016h] ; 8b 56 16
+ mov word [bp+014h], cx ; 89 4e 14
+ mov dx, word [bp+012h] ; 8b 56 12
xor dh, dh ; 30 f6
sal bx, 008h ; c1 e3 08
or dx, bx ; 09 da
- mov word [bp+016h], dx ; 89 56 16
+ mov word [bp+012h], dx ; 89 56 12
xor dl, dl ; 30 d2
or dl, 002h ; 80 ca 02
- mov word [bp+016h], dx ; 89 56 16
+ mov word [bp+012h], dx ; 89 56 12
mov dl, byte [es:si+001h] ; 26 8a 54 01
- mov word [bp+014h], ax ; 89 46 14
+ mov word [bp+010h], ax ; 89 46 10
cmp dl, 003h ; 80 fa 03
- je short 03f00h ; 74 1a
+ je short 03fc8h ; 74 1a
cmp dl, 002h ; 80 fa 02
- je short 03efch ; 74 11
+ je short 03fc4h ; 74 11
cmp dl, 001h ; 80 fa 01
- jne short 03f04h ; 75 14
- mov ax, word [bp+014h] ; 8b 46 14
+ jne short 03fcch ; 75 14
+ mov ax, word [bp+010h] ; 8b 46 10
xor al, al ; 30 c0
or AL, strict byte 002h ; 0c 02
- mov word [bp+014h], ax ; 89 46 14
- jmp short 03f04h ; eb 08
+ mov word [bp+010h], ax ; 89 46 10
+ jmp short 03fcch ; eb 08
or AL, strict byte 004h ; 0c 04
- jmp short 03ef7h ; eb f7
- or AL, strict byte 006h ; 0c 06
- jmp short 03ef7h ; eb f3
- mov word [bp+00ch], 0efc7h ; c7 46 0c c7 ef
- mov word [bp+00ah], 0f000h ; c7 46 0a 00 f0
- mov byte [bp+01bh], 000h ; c6 46 1b 00
- xor bx, bx ; 31 db
- mov dx, strict word 00074h ; ba 74 00
- mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 f1 d6
- and byte [bp+020h], 0feh ; 80 66 20 fe
- leave ; c9
- pop di ; 5f
- pop si ; 5e
- retn ; c3
+ jmp short 03fbfh ; eb f7
+ or AL, strict byte 005h ; 0c 05
+ jmp short 03fbfh ; eb f3
+ mov es, [bp-008h] ; 8e 46 f8
+ cmp byte [es:si+001h], 004h ; 26 80 7c 01 04
+ jnc near 03d21h ; 0f 83 49 fd
+ mov word [bp+008h], 0efc7h ; c7 46 08 c7 ef
+ mov word [bp+006h], 0f000h ; c7 46 06 00 f0
+ jmp near 03d21h ; e9 3c fd
or bh, 003h ; 80 cf 03
- mov word [bp+01ah], bx ; 89 5e 1a
- jmp short 03f12h ; eb e5
- mov bx, 00cd6h ; bb d6 0c
+ mov word [bp+016h], bx ; 89 5e 16
+ jmp near 03d25h ; e9 37 fd
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 76 d9
- mov ax, word [bp+01ah] ; 8b 46 1a
+ call 018e1h ; e8 e8 d8
+ mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 002bah ; 68 ba 02
- push 0031dh ; 68 1d 03
+ push 0032ch ; 68 2c 03
+ push 0038fh ; 68 8f 03
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 9f d9
+ call 01922h ; e8 17 d9
add sp, strict byte 00008h ; 83 c4 08
- mov ax, word [bp+01ah] ; 8b 46 1a
+ mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
- mov word [bp+01ah], ax ; 89 46 1a
- mov bx, word [bp+01ah] ; 8b 5e 1a
+ mov word [bp+016h], ax ; 89 46 16
+ mov bx, word [bp+016h] ; 8b 5e 16
shr bx, 008h ; c1 eb 08
xor bh, bh ; 30 ff
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 a5 d6
- or byte [bp+020h], 001h ; 80 4e 20 01
- jmp short 03f21h ; eb b2
- push ax ; 50
- dec si ; 4e
- dec cx ; 49
- dec ax ; 48
- inc di ; 47
- inc si ; 46
- inc bp ; 45
- inc sp ; 44
- inc bx ; 43
- inc dx ; 42
- inc cx ; 41
- sbb byte [01415h], dl ; 18 16 15 14
- adc word [bx+si], dx ; 11 10
- or ax, 00b0ch ; 0d 0c 0b
- or cl, byte [bx+di] ; 0a 09
- or byte [di], al ; 08 05
- add AL, strict byte 003h ; 04 03
- add al, byte [bx+di] ; 02 01
- add byte [bx+si], bl ; 00 18
- inc bp ; 45
- xchg si, ax ; 96
- inc dx ; 42
- jnc short 03fd2h ; 73 40
- sbb byte [di+068h], al ; 18 45 68
- inc ax ; 40
- sbb byte [di+068h], al ; 18 45 68
- inc ax ; 40
- sbb byte [di-06ah], al ; 18 45 96
- inc dx ; 42
- sbb byte [di+018h], al ; 18 45 18
- inc bp ; 45
- xchg si, ax ; 96
- inc dx ; 42
- xchg si, ax ; 96
- inc dx ; 42
- xchg si, ax ; 96
- inc dx ; 42
- xchg si, ax ; 96
- inc dx ; 42
- xchg si, ax ; 96
- inc dx ; 42
- popfw ; 9d
- inc ax ; 40
- xchg si, ax ; 96
- inc dx ; 42
- sbb byte [di-05ah], al ; 18 45 a6
- inc ax ; 40
- mov cx, 06840h ; b9 40 68
- inc ax ; 40
- mov cx, 00740h ; b9 40 07
- inc dx ; 42
- lodsw ; ad
- inc dx ; 42
- mov cx, 0d840h ; b9 40 d8
- inc dx ; 42
- rol word [si-027h], 1 ; d1 44 d9
- inc sp ; 44
- db 018h
- inc bp ; 45
-_int13_cdrom: ; 0xf3fc8 LB 0x56d
+ call 0160eh ; e8 e4 d5
+ or byte [bp+01ch], 001h ; 80 4e 1c 01
+ jmp near 03d34h ; e9 03 fd
+ db 050h, 04eh, 049h, 048h, 047h, 046h, 045h, 044h, 043h, 042h, 041h, 018h, 016h, 015h, 014h, 011h
+ db 010h, 00dh, 00ch, 00bh, 00ah, 009h, 008h, 005h, 004h, 003h, 002h, 001h, 000h, 0cfh, 045h, 04bh
+ db 043h, 037h, 041h, 0cfh, 045h, 02ch, 041h, 0cfh, 045h, 02ch, 041h, 0cfh, 045h, 04bh, 043h, 0cfh
+ db 045h, 0cfh, 045h, 04bh, 043h, 04bh, 043h, 04bh, 043h, 04bh, 043h, 04bh, 043h, 061h, 041h, 04bh
+ db 043h, 0cfh, 045h, 06ah, 041h, 07dh, 041h, 02ch, 041h, 07dh, 041h, 0abh, 042h, 065h, 043h, 07dh
+ db 041h, 08ch, 043h, 088h, 045h, 090h, 045h, 0cfh, 045h
+_int13_cdrom: ; 0xf408a LB 0x562
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00028h, 000h ; c8 28 00 00
+ sub sp, strict byte 00028h ; 83 ec 28
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 45 d6
- mov word [bp-018h], ax ; 89 46 e8
+ call 0161ch ; e8 81 d5
+ mov word [bp-01ah], ax ; 89 46 e6
mov si, 00122h ; be 22 01
- mov word [bp-00ah], ax ; 89 46 f6
+ mov word [bp-00ch], ax ; 89 46 f4
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 23 d6
- mov ax, word [bp+014h] ; 8b 46 14
+ call 0160eh ; e8 5f d5
+ mov ax, word [bp+010h] ; 8b 46 10
xor ah, ah ; 30 e4
cmp ax, 000e0h ; 3d e0 00
- jc short 03ffah ; 72 05
+ jc short 040beh ; 72 05
cmp ax, 000f0h ; 3d f0 00
- jc short 04018h ; 72 1e
- mov ax, word [bp+014h] ; 8b 46 14
+ jc short 040dch ; 72 1e
+ mov ax, word [bp+010h] ; 8b 46 10
xor ah, ah ; 30 e4
push ax ; 50
- mov ax, word [bp+01ch] ; 8b 46 1c
+ mov ax, word [bp+018h] ; 8b 46 18
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 0034dh ; 68 4d 03
- push 00359h ; 68 59 03
+ push 003bfh ; 68 bf 03
+ push 003cbh ; 68 cb 03
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 d7 d8
+ call 01922h ; e8 4c d8
add sp, strict byte 0000ah ; 83 c4 0a
- jmp near 044f5h ; e9 dd 04
- mov ax, word [bp+014h] ; 8b 46 14
+ jmp near 045ach ; e9 d0 04
+ mov ax, word [bp+010h] ; 8b 46 10
xor ah, ah ; 30 e4
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-00ch] ; 8e 46 f4
mov bx, si ; 89 f3
add bx, ax ; 01 c3
mov dl, byte [es:bx+000d0h] ; 26 8a 97 d0 00
- mov byte [bp-006h], dl ; 88 56 fa
+ mov byte [bp-008h], dl ; 88 56 f8
cmp dl, 010h ; 80 fa 10
- jc short 04041h ; 72 10
+ jc short 04105h ; 72 10
push ax ; 50
- mov ax, word [bp+01ch] ; 8b 46 1c
+ mov ax, word [bp+018h] ; 8b 46 18
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 0034dh ; 68 4d 03
- push 00384h ; 68 84 03
- jmp short 0400dh ; eb cc
- mov ax, word [bp+01ch] ; 8b 46 1c
+ push 003bfh ; 68 bf 03
+ push 003f6h ; 68 f6 03
+ jmp short 040d1h ; eb cc
+ mov ax, word [bp+018h] ; 8b 46 18
shr ax, 008h ; c1 e8 08
cmp ax, strict word 00050h ; 3d 50 00
- jnbe near 04518h ; 0f 87 ca 04
+ jnbe near 045cfh ; 0f 87 bd 04
push CS ; 0e
pop ES ; 07
mov cx, strict word 0001eh ; b9 1e 00
- mov di, 03f6fh ; bf 6f 3f
+ mov di, 04031h ; bf 31 40
repne scasb ; f2 ae
sal cx, 1 ; d1 e1
mov di, cx ; 89 cf
- mov ax, word [cs:di+03f8ch] ; 2e 8b 85 8c 3f
- mov bx, word [bp+01ch] ; 8b 5e 1c
+ mov ax, word [cs:di+0404eh] ; 2e 8b 85 4e 40
+ mov bx, word [bp+018h] ; 8b 5e 18
xor bh, bh ; 30 ff
jmp ax ; ff e0
- mov ax, word [bp+01ch] ; 8b 46 1c
+ mov ax, word [bp+018h] ; 8b 46 18
xor ah, ah ; 30 e4
or ah, 003h ; 80 cc 03
- jmp near 044fdh ; e9 8a 04
+ jmp near 045b4h ; e9 7d 04
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 84 d5
+ call 01600h ; e8 c0 d4
mov cl, al ; 88 c1
movzx ax, cl ; 0f b6 c1
sal ax, 008h ; c1 e0 08
or bx, ax ; 09 c3
- mov word [bp+01ch], bx ; 89 5e 1c
+ mov word [bp+018h], bx ; 89 5e 18
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 7a d5
+ call 0160eh ; e8 b6 d4
test cl, cl ; 84 c9
- je near 0429ah ; 0f 84 00 02
- jmp near 04511h ; e9 74 04
+ je near 0434fh ; 0f 84 f1 01
+ jmp near 045c8h ; e9 67 04
or bh, 002h ; 80 cf 02
- mov word [bp+01ch], bx ; 89 5e 1c
- jmp near 04500h ; e9 5a 04
- mov word [bp+016h], 0aa55h ; c7 46 16 55 aa
+ mov word [bp+018h], bx ; 89 5e 18
+ jmp near 045b7h ; e9 4d 04
+ mov word [bp+012h], 0aa55h ; c7 46 12 55 aa
or bh, 030h ; 80 cf 30
- mov word [bp+01ch], bx ; 89 5e 1c
- mov word [bp+01ah], strict word 00007h ; c7 46 1a 07 00
- jmp near 0429ah ; e9 e1 01
- mov bx, word [bp+010h] ; 8b 5e 10
- mov es, [bp+00ah] ; 8e 46 0a
- mov di, bx ; 89 df
+ mov word [bp+018h], bx ; 89 5e 18
+ mov word [bp+016h], strict word 00007h ; c7 46 16 07 00
+ jmp near 0434fh ; e9 d2 01
+ mov bx, word [bp+00ch] ; 8b 5e 0c
+ mov es, [bp+006h] ; 8e 46 06
+ mov word [bp-014h], bx ; 89 5e ec
mov [bp-012h], es ; 8c 46 ee
mov ax, word [es:bx+002h] ; 26 8b 47 02
- mov word [bp-00ch], ax ; 89 46 f4
+ mov word [bp-010h], ax ; 89 46 f0
mov ax, word [es:bx+006h] ; 26 8b 47 06
- mov word [bp-014h], ax ; 89 46 ec
+ mov word [bp-01ch], ax ; 89 46 e4
mov ax, word [es:bx+004h] ; 26 8b 47 04
- mov word [bp-016h], ax ; 89 46 ea
+ mov word [bp-020h], ax ; 89 46 e0
mov ax, word [es:bx+00ch] ; 26 8b 47 0c
- mov word [bp-010h], ax ; 89 46 f0
- mov ax, word [es:bx+00eh] ; 26 8b 47 0e
- mov word [bp-01ch], ax ; 89 46 e4
- or ax, word [bp-010h] ; 0b 46 f0
- je short 04104h ; 74 18
- mov ax, word [bp+01ch] ; 8b 46 1c
+ mov word [bp-018h], ax ; 89 46 e8
+ mov di, word [es:bx+00eh] ; 26 8b 7f 0e
+ or di, ax ; 09 c7
+ je short 041c5h ; 74 18
+ mov ax, word [bp+018h] ; 8b 46 18
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 0034dh ; 68 4d 03
- push 003b6h ; 68 b6 03
+ push 003bfh ; 68 bf 03
+ push 00428h ; 68 28 04
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 eb d7
+ call 01922h ; e8 63 d7
add sp, strict byte 00008h ; 83 c4 08
- jmp near 044f5h ; e9 f1 03
- mov es, [bp-012h] ; 8e 46 ee
- mov ax, word [es:di+008h] ; 26 8b 45 08
- mov word [bp-010h], ax ; 89 46 f0
- mov ax, word [es:di+00ah] ; 26 8b 45 0a
- mov word [bp-01ch], ax ; 89 46 e4
- mov ax, word [bp+01ch] ; 8b 46 1c
+ jmp near 045ach ; e9 e7 03
+ les bx, [bp-014h] ; c4 5e ec
+ mov ax, word [es:bx+008h] ; 26 8b 47 08
+ mov word [bp-018h], ax ; 89 46 e8
+ mov di, bx ; 89 df
+ mov di, word [es:di+00ah] ; 26 8b 7d 0a
+ mov ax, word [bp+018h] ; 8b 46 18
shr ax, 008h ; c1 e8 08
+ mov word [bp-016h], ax ; 89 46 ea
cmp ax, strict word 00044h ; 3d 44 00
- je near 04296h ; 0f 84 74 01
+ je near 0434bh ; 0f 84 66 01
cmp ax, strict word 00047h ; 3d 47 00
- je near 04296h ; 0f 84 6d 01
+ je near 0434bh ; 0f 84 5f 01
mov cx, strict word 0000ch ; b9 0c 00
xor bx, bx ; 31 db
mov dx, ss ; 8c d2
- lea ax, [bp-028h] ; 8d 46 d8
- call 08caah ; e8 74 4b
- mov word [bp-028h], strict word 00028h ; c7 46 d8 28 00
- mov ax, word [bp-010h] ; 8b 46 f0
- mov dx, word [bp-01ch] ; 8b 56 e4
+ lea ax, [bp-02ch] ; 8d 46 d4
+ call 0948ah ; e8 91 52
+ mov word [bp-02ch], strict word 00028h ; c7 46 d4 28 00
+ mov ax, word [bp-018h] ; 8b 46 e8
+ mov dx, di ; 89 fa
xchg ah, al ; 86 c4
xchg dh, dl ; 86 d6
xchg dx, ax ; 92
- mov word [bp-026h], ax ; 89 46 da
- mov word [bp-024h], dx ; 89 56 dc
- mov ax, word [bp-00ch] ; 8b 46 f4
+ mov word [bp-02ah], ax ; 89 46 d6
+ mov word [bp-028h], dx ; 89 56 d8
+ mov ax, word [bp-010h] ; 8b 46 f0
xchg ah, al ; 86 c4
- mov word [bp-021h], ax ; 89 46 df
- les ax, [bp-00ch] ; c4 46 f4
+ mov word [bp-025h], ax ; 89 46 db
+ mov ax, word [bp-010h] ; 8b 46 f0
+ mov es, [bp-00ch] ; 8e 46 f4
mov word [es:si+00ah], ax ; 26 89 44 0a
mov word [es:si+00ch], 00800h ; 26 c7 44 0c 00 08
- cmp byte [bp-006h], 008h ; 80 7e fa 08
- jbe short 0418dh ; 76 26
- push dword [bp-016h] ; 66 ff 76 ea
- push strict byte 00001h ; 6a 01
- xor bx, bx ; 31 db
- mov cx, strict word 0000bh ; b9 0b 00
- sal ax, 1 ; d1 e0
- rcl bx, 1 ; d1 d3
- loop 04172h ; e2 fa
- push bx ; 53
- push ax ; 50
- push strict byte 00000h ; 6a 00
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- mov cx, ss ; 8c d1
- lea bx, [bp-028h] ; 8d 5e d8
- mov dx, strict word 0000ch ; ba 0c 00
- call 07f53h ; e8 c8 3d
- jmp short 041b1h ; eb 24
- push dword [bp-016h] ; 66 ff 76 ea
+ movzx bx, byte [bp-008h] ; 0f b6 5e f8
+ imul bx, bx, strict byte 00018h ; 6b db 18
+ add bx, si ; 01 f3
+ movzx di, byte [es:bx+01eh] ; 26 0f b6 7f 1e
+ add di, di ; 01 ff
+ push word [bp-01ch] ; ff 76 e4
+ push word [bp-020h] ; ff 76 e0
push strict byte 00001h ; 6a 01
xor bx, bx ; 31 db
mov cx, strict word 0000bh ; b9 0b 00
sal ax, 1 ; d1 e0
rcl bx, 1 ; d1 d3
- loop 04198h ; e2 fa
+ loop 04243h ; e2 fa
push bx ; 53
push ax ; 50
push strict byte 00000h ; 6a 00
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
mov cx, ss ; 8c d1
- lea bx, [bp-028h] ; 8d 5e d8
+ lea bx, [bp-02ch] ; 8d 5e d4
mov dx, strict word 0000ch ; ba 0c 00
- call 0280ah ; e8 59 e6
- mov byte [bp-004h], al ; 88 46 fc
- mov es, [bp-00ah] ; 8e 46 f6
+ call word [word di+0006ah] ; ff 95 6a 00
+ mov dx, ax ; 89 c2
+ mov es, [bp-00ch] ; 8e 46 f4
mov ax, word [es:si+016h] ; 26 8b 44 16
- mov bx, word [es:si+018h] ; 26 8b 5c 18
+ mov di, word [es:si+018h] ; 26 8b 7c 18
mov cx, strict word 0000bh ; b9 0b 00
- shr bx, 1 ; d1 eb
+ shr di, 1 ; d1 ef
rcr ax, 1 ; d1 d8
- loop 041c2h ; e2 fa
- mov es, [bp-012h] ; 8e 46 ee
- mov word [es:di+002h], ax ; 26 89 45 02
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je near 04296h ; 0f 84 bf 00
- mov bx, 00cd6h ; bb d6 0c
+ loop 0426dh ; e2 fa
+ les bx, [bp-014h] ; c4 5e ec
+ mov word [es:bx+002h], ax ; 26 89 47 02
+ test dl, dl ; 84 d2
+ je near 0434bh ; 0f 84 cb 00
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 cc d6
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
- push ax ; 50
- mov ax, word [bp+01ch] ; 8b 46 1c
- shr ax, 008h ; c1 e8 08
+ call 018e1h ; e8 56 d6
+ movzx ax, dl ; 0f b6 c2
push ax ; 50
- push 0034dh ; 68 4d 03
- push 003dfh ; 68 df 03
+ push word [bp-016h] ; ff 76 ea
+ push 003bfh ; 68 bf 03
+ push 00451h ; 68 51 04
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 f0 d6
+ call 01922h ; e8 85 d6
add sp, strict byte 0000ah ; 83 c4 0a
- mov ax, word [bp+01ch] ; 8b 46 1c
+ mov ax, word [bp+018h] ; 8b 46 18
xor ah, ah ; 30 e4
or ah, 00ch ; 80 cc 0c
- jmp near 044fdh ; e9 f6 02
+ jmp near 045b4h ; e9 09 03
cmp bx, strict byte 00002h ; 83 fb 02
- jnbe near 044f5h ; 0f 87 e7 02
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ jnbe near 045ach ; 0f 87 fa 02
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
imul ax, ax, strict byte 00018h ; 6b c0 18
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-00ch] ; 8e 46 f4
mov di, si ; 89 f7
add di, ax ; 01 c7
mov al, byte [es:di+021h] ; 26 8a 45 21
cmp bx, strict byte 00002h ; 83 fb 02
- je short 04287h ; 74 62
+ je short 0433ch ; 74 73
cmp bx, strict byte 00001h ; 83 fb 01
- je short 04265h ; 74 3b
+ je short 04309h ; 74 3b
test bx, bx ; 85 db
- jne near 04296h ; 0f 85 66 00
+ jne near 0434bh ; 0f 85 77 00
cmp AL, strict byte 0ffh ; 3c ff
- jne short 04246h ; 75 12
- mov ax, word [bp+01ch] ; 8b 46 1c
+ jne short 042eah ; 75 12
+ mov ax, word [bp+018h] ; 8b 46 18
xor ah, ah ; 30 e4
or ah, 0b4h ; 80 cc b4
- mov word [bp+01ch], ax ; 89 46 1c
+ mov word [bp+018h], ax ; 89 46 18
xor al, al ; 30 c0
or AL, strict byte 001h ; 0c 01
- jmp near 044fdh ; e9 b7 02
- movzx dx, byte [bp-006h] ; 0f b6 56 fa
+ jmp near 045b4h ; e9 ca 02
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8
imul dx, dx, strict byte 00018h ; 6b d2 18
db 0feh, 0c0h
; inc al ; fe c0
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-00ch] ; 8e 46 f4
add si, dx ; 01 d6
mov byte [es:si+021h], al ; 26 88 44 21
- mov ax, word [bp+01ch] ; 8b 46 1c
+ mov ax, word [bp+018h] ; 8b 46 18
xor al, al ; 30 c0
or AL, strict byte 001h ; 0c 01
- mov word [bp+01ch], ax ; 89 46 1c
- jmp near 04296h ; e9 31 00
+ mov word [bp+018h], ax ; 89 46 18
+ jmp near 0434bh ; e9 42 00
test al, al ; 84 c0
- jne short 04275h ; 75 0c
+ jne short 04319h ; 75 0c
or bh, 0b0h ; 80 cf b0
- mov word [bp+01ch], bx ; 89 5e 1c
- mov byte [bp+01ch], al ; 88 46 1c
- jmp near 04500h ; e9 8b 02
- movzx dx, byte [bp-006h] ; 0f b6 56 fa
+ mov word [bp+018h], bx ; 89 5e 18
+ mov byte [bp+018h], al ; 88 46 18
+ jmp near 045b7h ; e9 9e 02
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8
imul dx, dx, strict byte 00018h ; 6b d2 18
db 0feh, 0c8h
; dec al ; fe c8
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-00ch] ; 8e 46 f4
add si, dx ; 01 d6
mov byte [es:si+021h], al ; 26 88 44 21
test al, al ; 84 c0
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
+ movzx dx, al ; 0f b6 d0
+ mov ax, word [bp+018h] ; 8b 46 18
+ xor al, al ; 30 c0
+ or ax, dx ; 09 d0
+ jmp short 04303h ; eb c7
+ test al, al ; 84 c0
+ db 00fh, 095h, 0c0h
+ ; setne al ; 0f 95 c0
xor ah, ah ; 30 e4
- mov dx, word [bp+01ch] ; 8b 56 1c
+ mov dx, word [bp+018h] ; 8b 56 18
mov dl, al ; 88 c2
- mov word [bp+01ch], dx ; 89 56 1c
- mov byte [bp+01dh], 000h ; c6 46 1d 00
+ mov word [bp+018h], dx ; 89 56 18
+ mov byte [bp+019h], 000h ; c6 46 19 00
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 69 d3
- and byte [bp+022h], 0feh ; 80 66 22 fe
- leave ; c9
+ call 0160eh ; e8 b4 d2
+ and byte [bp+01eh], 0feh ; 80 66 1e fe
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
imul ax, ax, strict byte 00018h ; 6b c0 18
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-00ch] ; 8e 46 f4
add si, ax ; 01 c6
mov al, byte [es:si+021h] ; 26 8a 44 21
test al, al ; 84 c0
- je short 042c7h ; 74 06
+ je short 0437fh ; 74 06
or bh, 0b1h ; 80 cf b1
- jmp near 040a0h ; e9 d9 fd
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 04296h ; 74 c9
- mov ax, word [bp+01ch] ; 8b 46 1c
+ jmp near 04164h ; e9 e5 fd
+ je short 0434bh ; 74 ca
+ mov ax, word [bp+018h] ; 8b 46 18
xor ah, ah ; 30 e4
or ah, 0b1h ; 80 cc b1
- jmp near 044fdh ; e9 25 02
- mov dx, word [bp+010h] ; 8b 56 10
- mov cx, word [bp+00ah] ; 8b 4e 0a
+ jmp near 045b4h ; e9 28 02
+ mov dx, word [bp+00ch] ; 8b 56 0c
+ mov cx, word [bp+006h] ; 8b 4e 06
mov bx, dx ; 89 d3
- mov word [bp-008h], cx ; 89 4e f8
+ mov word [bp-00ah], cx ; 89 4e f6
mov es, cx ; 8e c1
mov di, dx ; 89 d7
mov ax, word [es:di] ; 26 8b 05
mov word [bp-00eh], ax ; 89 46 f2
cmp ax, strict word 0001ah ; 3d 1a 00
- jc near 044f5h ; 0f 82 01 02
- jc short 04343h ; 72 4d
- movzx di, byte [bp-006h] ; 0f b6 7e fa
- imul di, di, strict byte 00018h ; 6b ff 18
- mov es, [bp-00ah] ; 8e 46 f6
- add di, si ; 01 f7
+ jc near 045ach ; 0f 82 04 02
+ jc short 043f9h ; 72 4f
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ mov es, [bp-00ch] ; 8e 46 f4
+ mov di, si ; 89 f7
+ add di, ax ; 01 c7
mov ax, word [es:di+024h] ; 26 8b 45 24
mov es, cx ; 8e c1
mov di, dx ; 89 d7
@@ -5686,28 +5749,27 @@ _int13_cdrom: ; 0xf3fc8 LB 0x56d
db 066h, 026h, 0c7h, 045h, 014h, 0ffh, 0ffh, 0ffh, 0ffh
; mov dword [es:di+014h], strict dword 0ffffffffh ; 66 26 c7 45 14 ff ff ff ff
cmp word [bp-00eh], strict byte 0001eh ; 83 7e f2 1e
- jc near 04419h ; 0f 82 ce 00
- mov es, [bp-008h] ; 8e 46 f8
+ jc near 044d0h ; 0f 82 cf 00
+ mov es, [bp-00ah] ; 8e 46 f6
mov word [es:bx], strict word 0001eh ; 26 c7 07 1e 00
- mov ax, word [bp-018h] ; 8b 46 e8
+ mov ax, word [bp-01ah] ; 8b 46 e6
mov word [es:bx+01ch], ax ; 26 89 47 1c
mov word [es:bx+01ah], 00312h ; 26 c7 47 1a 12 03
- movzx cx, byte [bp-006h] ; 0f b6 4e fa
+ movzx cx, byte [bp-008h] ; 0f b6 4e f8
mov ax, cx ; 89 c8
cwd ; 99
db 02bh, 0c2h
; sub ax, dx ; 2b c2
sar ax, 1 ; d1 f8
- xor ah, ah ; 30 e4
- imul ax, ax, strict byte 00006h ; 6b c0 06
- mov es, [bp-00ah] ; 8e 46 f6
- mov di, si ; 89 f7
- add di, ax ; 01 c7
- mov dx, word [es:di+001c2h] ; 26 8b 95 c2 01
- mov ax, word [es:di+001c4h] ; 26 8b 85 c4 01
- mov word [bp-01ah], ax ; 89 46 e6
+ movzx di, al ; 0f b6 f8
+ imul di, di, strict byte 00006h ; 6b ff 06
+ mov es, [bp-00ch] ; 8e 46 f4
+ add di, si ; 01 f7
+ mov ax, word [es:di+001c2h] ; 26 8b 85 c2 01
+ mov word [bp-01eh], ax ; 89 46 e2
+ mov dx, word [es:di+001c4h] ; 26 8b 95 c4 01
mov al, byte [es:di+001c1h] ; 26 8a 85 c1 01
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
imul cx, cx, strict byte 00018h ; 6b c9 18
mov di, si ; 89 f7
add di, cx ; 01 cf
@@ -5718,18 +5780,19 @@ _int13_cdrom: ; 0xf3fc8 LB 0x56d
xor ah, ah ; 30 e4
or AL, strict byte 070h ; 0c 70
mov di, ax ; 89 c7
- mov word [es:si+001f0h], dx ; 26 89 94 f0 01
- mov ax, word [bp-01ah] ; 8b 46 e6
- mov word [es:si+001f2h], ax ; 26 89 84 f2 01
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ mov ax, word [bp-01eh] ; 8b 46 e2
+ mov word [es:si+001f0h], ax ; 26 89 84 f0 01
+ mov word [es:si+001f2h], dx ; 26 89 94 f2 01
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
cwd ; 99
mov cx, strict word 00002h ; b9 02 00
idiv cx ; f7 f9
or dl, 00eh ; 80 ca 0e
- sal dx, 004h ; c1 e2 04
- mov byte [es:si+001f4h], dl ; 26 88 94 f4 01
+ mov ax, dx ; 89 d0
+ sal ax, 004h ; c1 e0 04
+ mov byte [es:si+001f4h], al ; 26 88 84 f4 01
mov byte [es:si+001f5h], 0cbh ; 26 c6 84 f5 01 cb
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov al, byte [bp-006h] ; 8a 46 fa
mov byte [es:si+001f6h], al ; 26 88 84 f6 01
mov word [es:si+001f7h], strict word 00001h ; 26 c7 84 f7 01 01 00
mov byte [es:si+001f9h], 000h ; 26 c6 84 f9 01 00
@@ -5738,389 +5801,394 @@ _int13_cdrom: ; 0xf3fc8 LB 0x56d
mov byte [es:si+001feh], 011h ; 26 c6 84 fe 01 11
xor cl, cl ; 30 c9
xor ch, ch ; 30 ed
- jmp short 043fch ; eb 05
+ jmp short 044b3h ; eb 05
cmp ch, 00fh ; 80 fd 0f
- jnc short 0440fh ; 73 13
+ jnc short 044c6h ; 73 13
movzx dx, ch ; 0f b6 d5
add dx, 00312h ; 81 c2 12 03
- mov ax, word [bp-018h] ; 8b 46 e8
- call 01600h ; e8 f7 d1
+ mov ax, word [bp-01ah] ; 8b 46 e6
+ call 01600h ; e8 40 d1
add cl, al ; 00 c1
db 0feh, 0c5h
; inc ch ; fe c5
- jmp short 043f7h ; eb e8
+ jmp short 044aeh ; eb e8
neg cl ; f6 d9
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-00ch] ; 8e 46 f4
mov byte [es:si+001ffh], cl ; 26 88 8c ff 01
cmp word [bp-00eh], strict byte 00042h ; 83 7e f2 42
- jc near 04296h ; 0f 82 75 fe
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ jc near 0434bh ; 0f 82 73 fe
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
cwd ; 99
db 02bh, 0c2h
; sub ax, dx ; 2b c2
sar ax, 1 ; d1 f8
xor ah, ah ; 30 e4
imul ax, ax, strict byte 00006h ; 6b c0 06
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-00ch] ; 8e 46 f4
add si, ax ; 01 c6
mov al, byte [es:si+001c0h] ; 26 8a 84 c0 01
mov dx, word [es:si+001c2h] ; 26 8b 94 c2 01
- mov es, [bp-008h] ; 8e 46 f8
+ mov es, [bp-00ah] ; 8e 46 f6
mov word [es:bx], strict word 00042h ; 26 c7 07 42 00
db 066h, 026h, 0c7h, 047h, 01eh, 0ddh, 0beh, 024h, 000h
; mov dword [es:bx+01eh], strict dword 00024beddh ; 66 26 c7 47 1e dd be 24 00
mov word [es:bx+022h], strict word 00000h ; 26 c7 47 22 00 00
test al, al ; 84 c0
- jne short 04462h ; 75 09
+ jne short 04519h ; 75 09
db 066h, 026h, 0c7h, 047h, 024h, 049h, 053h, 041h, 020h
; mov dword [es:bx+024h], strict dword 020415349h ; 66 26 c7 47 24 49 53 41 20
- mov es, [bp-008h] ; 8e 46 f8
+ mov es, [bp-00ah] ; 8e 46 f6
db 066h, 026h, 0c7h, 047h, 028h, 041h, 054h, 041h, 020h
; mov dword [es:bx+028h], strict dword 020415441h ; 66 26 c7 47 28 41 54 41 20
db 066h, 026h, 0c7h, 047h, 02ch, 020h, 020h, 020h, 020h
; mov dword [es:bx+02ch], strict dword 020202020h ; 66 26 c7 47 2c 20 20 20 20
test al, al ; 84 c0
- jne short 0448eh ; 75 13
+ jne short 04545h ; 75 13
mov word [es:bx+030h], dx ; 26 89 57 30
db 066h, 026h, 0c7h, 047h, 032h, 000h, 000h, 000h, 000h
; mov dword [es:bx+032h], strict dword 000000000h ; 66 26 c7 47 32 00 00 00 00
mov word [es:bx+036h], strict word 00000h ; 26 c7 47 36 00 00
- mov al, byte [bp-006h] ; 8a 46 fa
+ mov al, byte [bp-008h] ; 8a 46 f8
and AL, strict byte 001h ; 24 01
xor ah, ah ; 30 e4
- mov es, [bp-008h] ; 8e 46 f8
+ mov es, [bp-00ah] ; 8e 46 f6
mov word [es:bx+038h], ax ; 26 89 47 38
db 066h, 026h, 0c7h, 047h, 03ah, 000h, 000h, 000h, 000h
; mov dword [es:bx+03ah], strict dword 000000000h ; 66 26 c7 47 3a 00 00 00 00
mov word [es:bx+03eh], strict word 00000h ; 26 c7 47 3e 00 00
xor al, al ; 30 c0
mov AH, strict byte 01eh ; b4 1e
- jmp short 044b6h ; eb 05
+ jmp short 0456dh ; eb 05
cmp ah, 040h ; 80 fc 40
- jnc short 044c5h ; 73 0f
+ jnc short 0457ch ; 73 0f
movzx si, ah ; 0f b6 f4
- mov es, [bp-008h] ; 8e 46 f8
+ mov es, [bp-00ah] ; 8e 46 f6
add si, bx ; 01 de
add al, byte [es:si] ; 26 02 04
db 0feh, 0c4h
; inc ah ; fe c4
- jmp short 044b1h ; eb ec
+ jmp short 04568h ; eb ec
neg al ; f6 d8
- mov es, [bp-008h] ; 8e 46 f8
+ mov es, [bp-00ah] ; 8e 46 f6
mov byte [es:bx+041h], al ; 26 88 47 41
- jmp near 04296h ; e9 c5 fd
+ jmp near 0434bh ; e9 c3 fd
or bh, 006h ; 80 cf 06
- mov word [bp+01ch], bx ; 89 5e 1c
- jmp short 04511h ; eb 38
+ mov word [bp+018h], bx ; 89 5e 18
+ jmp short 045c8h ; eb 38
cmp bx, strict byte 00006h ; 83 fb 06
- je near 04296h ; 0f 84 b6 fd
+ je near 0434bh ; 0f 84 b4 fd
cmp bx, strict byte 00001h ; 83 fb 01
- jc short 044f5h ; 72 10
- jbe near 04296h ; 0f 86 ad fd
+ jc short 045ach ; 72 10
+ jbe near 0434bh ; 0f 86 ab fd
cmp bx, strict byte 00003h ; 83 fb 03
- jc short 044f5h ; 72 07
+ jc short 045ach ; 72 07
cmp bx, strict byte 00004h ; 83 fb 04
- jbe near 04296h ; 0f 86 a1 fd
- mov ax, word [bp+01ch] ; 8b 46 1c
+ jbe near 0434bh ; 0f 86 9f fd
+ mov ax, word [bp+018h] ; 8b 46 18
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
- mov word [bp+01ch], ax ; 89 46 1c
- mov bx, word [bp+01ch] ; 8b 5e 1c
+ mov word [bp+018h], ax ; 89 46 18
+ mov bx, word [bp+018h] ; 8b 5e 18
shr bx, 008h ; c1 eb 08
xor bh, bh ; 30 ff
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 fd d0
- or byte [bp+022h], 001h ; 80 4e 22 01
- jmp near 042a9h ; e9 91 fd
- mov bx, 00cd6h ; bb d6 0c
+ call 0160eh ; e8 46 d0
+ or byte [bp+01eh], 001h ; 80 4e 1e 01
+ jmp near 0435eh ; e9 8f fd
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 8b d3
- mov ax, word [bp+01ch] ; 8b 46 1c
+ call 018e1h ; e8 07 d3
+ mov ax, word [bp+018h] ; 8b 46 18
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 0034dh ; 68 4d 03
- push 002a1h ; 68 a1 02
+ push 003bfh ; 68 bf 03
+ push 00313h ; 68 13 03
push strict byte 00004h ; 6a 04
- jmp near 040fbh ; e9 c6 fb
-print_boot_device_: ; 0xf4535 LB 0x48
- push cx ; 51
+ jmp near 041bch ; e9 d0 fb
+print_boot_device_: ; 0xf45ec LB 0x4b
push bp ; 55
mov bp, sp ; 89 e5
+ push cx ; 51
test al, al ; 84 c0
- je short 04542h ; 74 05
+ je short 045f9h ; 74 05
mov dx, strict word 00002h ; ba 02 00
- jmp short 0455ch ; eb 1a
+ jmp short 04613h ; eb 1a
test dl, dl ; 84 d2
- je short 0454bh ; 74 05
+ je short 04602h ; 74 05
mov dx, strict word 00003h ; ba 03 00
- jmp short 0455ch ; eb 11
+ jmp short 04613h ; eb 11
test bl, 080h ; f6 c3 80
- jne short 04554h ; 75 04
+ jne short 0460bh ; 75 04
xor dh, dh ; 30 f6
- jmp short 0455ch ; eb 08
+ jmp short 04613h ; eb 08
test bl, 080h ; f6 c3 80
- je short 0457ah ; 74 21
+ je short 04631h ; 74 21
mov dx, strict word 00001h ; ba 01 00
- mov bx, 00cd6h ; bb d6 0c
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 47 d3
+ call 018e1h ; e8 c3 d2
imul dx, dx, strict byte 0000ah ; 6b d2 0a
- add dx, 00cfch ; 81 c2 fc 0c
+ add dx, 00de0h ; 81 c2 e0 0d
push dx ; 52
- push 00402h ; 68 02 04
+ push 00474h ; 68 74 04
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 72 d3
+ call 01922h ; e8 f4 d2
add sp, strict byte 00006h ; 83 c4 06
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-print_boot_failure_: ; 0xf457d LB 0x90
- push si ; 56
+print_boot_failure_: ; 0xf4637 LB 0x93
push bp ; 55
mov bp, sp ; 89 e5
+ push si ; 56
mov dh, cl ; 88 ce
mov ah, bl ; 88 dc
and ah, 07fh ; 80 e4 7f
movzx si, ah ; 0f b6 f4
test al, al ; 84 c0
- je short 045aah ; 74 1b
- mov bx, 00cd6h ; bb d6 0c
+ je short 04664h ; 74 1b
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 14 d3
- push 00d10h ; 68 10 0d
- push 00416h ; 68 16 04
+ call 018e1h ; e8 8d d2
+ push 00df4h ; 68 f4 0d
+ push 00488h ; 68 88 04
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 44 d3
+ call 01922h ; e8 c3 d2
add sp, strict byte 00006h ; 83 c4 06
- jmp short 045eeh ; eb 44
+ jmp short 046a8h ; eb 44
test dl, dl ; 84 d2
- je short 045beh ; 74 10
- mov bx, 00cd6h ; bb d6 0c
+ je short 04678h ; 74 10
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 f5 d2
- push 00d1ah ; 68 1a 0d
- jmp short 0459dh ; eb df
+ call 018e1h ; e8 6e d2
+ push 00dfeh ; 68 fe 0d
+ jmp short 04657h ; eb df
test bl, 080h ; f6 c3 80
- je short 045d4h ; 74 11
- mov bx, 00cd6h ; bb d6 0c
+ je short 0468eh ; 74 11
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 e0 d2
+ call 018e1h ; e8 59 d2
push si ; 56
- push 00d06h ; 68 06 0d
- jmp short 045e3h ; eb 0f
- mov bx, 00cd6h ; bb d6 0c
+ push 00deah ; 68 ea 0d
+ jmp short 0469dh ; eb 0f
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 cf d2
+ call 018e1h ; e8 48 d2
push si ; 56
- push 00cfch ; 68 fc 0c
- push 0042bh ; 68 2b 04
+ push 00de0h ; 68 e0 0d
+ push 0049dh ; 68 9d 04
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 fe d2
+ call 01922h ; e8 7d d2
add sp, strict byte 00008h ; 83 c4 08
- cmp byte [bp+006h], 001h ; 80 7e 06 01
- jne short 04608h ; 75 14
+ cmp byte [bp+004h], 001h ; 80 7e 04 01
+ jne short 046c2h ; 75 14
test dh, dh ; 84 f6
- jne short 045fdh ; 75 05
- push 00443h ; 68 43 04
- jmp short 04600h ; eb 03
- push 0046dh ; 68 6d 04
+ jne short 046b7h ; 75 05
+ push 004b5h ; 68 b5 04
+ jmp short 046bah ; eb 03
+ push 004dfh ; 68 df 04
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 e4 d2
+ call 01922h ; e8 63 d2
add sp, strict byte 00004h ; 83 c4 04
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn 00002h ; c2 02 00
-print_cdromboot_failure_: ; 0xf460d LB 0x24
+print_cdromboot_failure_: ; 0xf46ca LB 0x27
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
- push bp ; 55
- mov bp, sp ; 89 e5
mov dx, ax ; 89 c2
- mov bx, 00cd6h ; bb d6 0c
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 8e d2
+ call 018e1h ; e8 04 d2
push dx ; 52
- push 004a2h ; 68 a2 04
+ push 00514h ; 68 14 05
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 c0 d2
+ call 01922h ; e8 3c d2
add sp, strict byte 00006h ; 83 c4 06
- pop bp ; 5d
+ lea sp, [bp-006h] ; 8d 66 fa
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-_int19_function: ; 0xf4631 LB 0x251
+_int19_function: ; 0xf46f1 LB 0x256
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0000eh, 000h ; c8 0e 00 00
+ sub sp, strict byte 0000eh ; 83 ec 0e
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 dc cf
+ call 0161ch ; e8 1a cf
mov bx, ax ; 89 c3
- mov word [bp-00ah], ax ; 89 46 f6
- mov byte [bp-004h], 000h ; c6 46 fc 00
+ mov word [bp-00eh], ax ; 89 46 f2
+ mov byte [bp-008h], 000h ; c6 46 f8 00
mov ax, strict word 0003dh ; b8 3d 00
- call 0165ch ; e8 0d d0
+ call 0165ch ; e8 4b cf
movzx si, al ; 0f b6 f0
mov ax, strict word 00038h ; b8 38 00
- call 0165ch ; e8 04 d0
+ call 0165ch ; e8 42 cf
and AL, strict byte 0f0h ; 24 f0
xor ah, ah ; 30 e4
sal ax, 004h ; c1 e0 04
or si, ax ; 09 c6
mov ax, strict word 0003ch ; b8 3c 00
- call 0165ch ; e8 f5 cf
+ call 0165ch ; e8 33 cf
and AL, strict byte 00fh ; 24 0f
xor ah, ah ; 30 e4
sal ax, 00ch ; c1 e0 0c
or si, ax ; 09 c6
mov dx, 00339h ; ba 39 03
mov ax, bx ; 89 d8
- call 01600h ; e8 88 cf
+ call 01600h ; e8 c6 ce
test al, al ; 84 c0
- je short 04687h ; 74 0b
+ je short 04749h ; 74 0b
mov dx, 00339h ; ba 39 03
mov ax, bx ; 89 d8
- call 01600h ; e8 7c cf
+ call 01600h ; e8 ba ce
movzx si, al ; 0f b6 f0
- cmp byte [bp+008h], 001h ; 80 7e 08 01
- jne short 0469dh ; 75 10
+ cmp byte [bp+004h], 001h ; 80 7e 04 01
+ jne short 0475fh ; 75 10
mov ax, strict word 0003ch ; b8 3c 00
- call 0165ch ; e8 c9 cf
+ call 0165ch ; e8 07 cf
and AL, strict byte 0f0h ; 24 f0
xor ah, ah ; 30 e4
sar ax, 004h ; c1 f8 04
- call 0720dh ; e8 70 2b
- cmp byte [bp+008h], 002h ; 80 7e 08 02
- jne short 046a6h ; 75 03
+ call 075a9h ; e8 4a 2e
+ cmp byte [bp+004h], 002h ; 80 7e 04 02
+ jne short 04768h ; 75 03
shr si, 004h ; c1 ee 04
- cmp byte [bp+008h], 003h ; 80 7e 08 03
- jne short 046afh ; 75 03
+ cmp byte [bp+004h], 003h ; 80 7e 04 03
+ jne short 04771h ; 75 03
shr si, 008h ; c1 ee 08
- cmp byte [bp+008h], 004h ; 80 7e 08 04
- jne short 046b8h ; 75 03
+ cmp byte [bp+004h], 004h ; 80 7e 04 04
+ jne short 0477ah ; 75 03
shr si, 00ch ; c1 ee 0c
cmp si, strict byte 00010h ; 83 fe 10
- jnc short 046c1h ; 73 04
- mov byte [bp-004h], 001h ; c6 46 fc 01
+ jnc short 04783h ; 73 04
+ mov byte [bp-008h], 001h ; c6 46 f8 01
xor al, al ; 30 c0
- mov byte [bp-002h], al ; 88 46 fe
mov byte [bp-006h], al ; 88 46 fa
- mov byte [bp-008h], al ; 88 46 f8
- mov bx, 00cd6h ; bb d6 0c
+ mov byte [bp-00ah], al ; 88 46 f6
+ mov byte [bp-00ch], al ; 88 46 f4
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 d7 d1
+ call 018e1h ; e8 48 d1
push si ; 56
- movzx ax, byte [bp+008h] ; 0f b6 46 08
+ movzx ax, byte [bp+004h] ; 0f b6 46 04
push ax ; 50
- push 004c2h ; 68 c2 04
+ push 00534h ; 68 34 05
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 04 d2
+ call 01922h ; e8 7b d1
add sp, strict byte 00008h ; 83 c4 08
and si, strict byte 0000fh ; 83 e6 0f
cmp si, strict byte 00002h ; 83 fe 02
- jc short 046feh ; 72 0e
- jbe short 0470dh ; 76 1b
+ jc short 047c0h ; 72 0e
+ jbe short 047cfh ; 76 1b
cmp si, strict byte 00004h ; 83 fe 04
- je short 0472bh ; 74 34
+ je short 047edh ; 74 34
cmp si, strict byte 00003h ; 83 fe 03
- je short 04721h ; 74 25
- jmp short 04758h ; eb 5a
+ je short 047e3h ; 74 25
+ jmp short 0481ah ; eb 5a
cmp si, strict byte 00001h ; 83 fe 01
- jne short 04758h ; 75 55
+ jne short 0481ah ; 75 55
xor al, al ; 30 c0
- mov byte [bp-002h], al ; 88 46 fe
mov byte [bp-006h], al ; 88 46 fa
- jmp short 04770h ; eb 63
+ mov byte [bp-00ah], al ; 88 46 f6
+ jmp short 04832h ; eb 63
mov dx, 00338h ; ba 38 03
- mov ax, word [bp-00ah] ; 8b 46 f6
- call 01600h ; e8 ea ce
+ mov ax, word [bp-00eh] ; 8b 46 f2
+ call 01600h ; e8 28 ce
add AL, strict byte 080h ; 04 80
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
+ mov byte [bp-00ah], 000h ; c6 46 f6 00
+ jmp short 04832h ; eb 4f
mov byte [bp-006h], 000h ; c6 46 fa 00
- jmp short 04770h ; eb 4f
- mov byte [bp-002h], 000h ; c6 46 fe 00
- mov byte [bp-006h], 001h ; c6 46 fa 01
- jmp short 04735h ; eb 0a
- mov byte [bp-008h], 001h ; c6 46 f8 01
- cmp byte [bp-006h], 000h ; 80 7e fa 00
- je short 04770h ; 74 3b
- call 0377ah ; e8 42 f0
+ mov byte [bp-00ah], 001h ; c6 46 f6 01
+ jmp short 047f7h ; eb 0a
+ mov byte [bp-00ch], 001h ; c6 46 f4 01
+ cmp byte [bp-00ah], 000h ; 80 7e f6 00
+ je short 04832h ; 74 3b
+ call 03840h ; e8 46 f0
mov bx, ax ; 89 c3
test AL, strict byte 0ffh ; a8 ff
- je short 0475fh ; 74 21
- call 0460dh ; e8 cc fe
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
+ je short 04821h ; 74 21
+ call 046cah ; e8 c7 fe
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
push ax ; 50
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
- movzx dx, byte [bp-008h] ; 0f b6 56 f8
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
mov cx, strict word 00001h ; b9 01 00
- call 0457dh ; e8 25 fe
+ call 04637h ; e8 1d fe
xor ax, ax ; 31 c0
xor dx, dx ; 31 d2
- jmp near 0487eh ; e9 1f 01
+ jmp near 04940h ; e9 1f 01
mov dx, 0032eh ; ba 2e 03
- mov ax, word [bp-00ah] ; 8b 46 f6
- call 0161ch ; e8 b4 ce
+ mov ax, word [bp-00eh] ; 8b 46 f2
+ call 0161ch ; e8 f2 cd
mov di, ax ; 89 c7
shr bx, 008h ; c1 eb 08
- mov byte [bp-002h], bl ; 88 5e fe
- cmp byte [bp-008h], 001h ; 80 7e f8 01
- jne near 047ech ; 0f 85 74 00
+ mov byte [bp-006h], bl ; 88 5e fa
+ cmp byte [bp-00ch], 001h ; 80 7e f4 01
+ jne near 048aeh ; 0f 85 74 00
xor si, si ; 31 f6
mov ax, 0e200h ; b8 00 e2
mov es, ax ; 8e c0
cmp word [es:si], 0aa55h ; 26 81 3c 55 aa
- jne short 04741h ; 75 bb
+ jne short 04803h ; 75 bb
mov cx, ax ; 89 c1
mov si, word [es:si+01ah] ; 26 8b 74 1a
cmp word [es:si+002h], 0506eh ; 26 81 7c 02 6e 50
- jne short 04741h ; 75 ad
+ jne short 04803h ; 75 ad
cmp word [es:si], 05024h ; 26 81 3c 24 50
- jne short 04741h ; 75 a6
+ jne short 04803h ; 75 a6
mov di, word [es:si+00eh] ; 26 8b 7c 0e
mov dx, word [es:di] ; 26 8b 15
mov ax, word [es:di+002h] ; 26 8b 45 02
cmp ax, 06568h ; 3d 68 65
- jne short 047cah ; 75 1f
+ jne short 0488ch ; 75 1f
cmp dx, 07445h ; 81 fa 45 74
- jne short 047cah ; 75 19
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
- movzx dx, byte [bp-008h] ; 0f b6 56 f8
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- call 04535h ; e8 75 fd
- mov word [bp-00eh], strict word 00006h ; c7 46 f2 06 00
- mov word [bp-00ch], cx ; 89 4e f4
- jmp short 047e6h ; eb 1c
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
- movzx dx, byte [bp-008h] ; 0f b6 56 f8
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- call 04535h ; e8 5c fd
+ jne short 0488ch ; 75 19
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ call 045ech ; e8 6a fd
+ mov word [bp-012h], strict word 00006h ; c7 46 ee 06 00
+ mov word [bp-010h], cx ; 89 4e f0
+ jmp short 048a8h ; eb 1c
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ call 045ech ; e8 51 fd
sti ; fb
- mov word [bp-00ch], cx ; 89 4e f4
+ mov word [bp-010h], cx ; 89 4e f0
mov es, cx ; 8e c1
mov ax, word [es:si+01ah] ; 26 8b 44 1a
- mov word [bp-00eh], ax ; 89 46 f2
- call far [bp-00eh] ; ff 5e f2
- jmp near 04741h ; e9 55 ff
- cmp byte [bp-006h], 000h ; 80 7e fa 00
- jne short 04818h ; 75 26
- cmp byte [bp-008h], 000h ; 80 7e f8 00
- jne short 04818h ; 75 20
+ mov word [bp-012h], ax ; 89 46 ee
+ call far [bp-012h] ; ff 5e ee
+ jmp near 04803h ; e9 55 ff
+ cmp byte [bp-00ah], 000h ; 80 7e f6 00
+ jne short 048dah ; 75 26
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00
+ jne short 048dah ; 75 20
mov di, 007c0h ; bf c0 07
mov es, di ; 8e c7
- mov dl, byte [bp-002h] ; 8a 56 fe
+ mov dl, byte [bp-006h] ; 8a 56 fa
mov ax, 00201h ; b8 01 02
mov DH, strict byte 000h ; b6 00
mov cx, strict word 00001h ; b9 01 00
@@ -6130,60 +6198,62 @@ _int19_function: ; 0xf4631 LB 0x251
mov ax, strict word 00000h ; b8 00 00
sbb ax, strict byte 00000h ; 83 d8 00
test ax, ax ; 85 c0
- jne near 04741h ; 0f 85 29 ff
- cmp byte [bp-002h], 000h ; 80 7e fe 00
+ jne near 04803h ; 0f 85 29 ff
+ cmp byte [bp-006h], 000h ; 80 7e fa 00
db 00fh, 094h, 0c1h
; sete cl ; 0f 94 c1
- cmp byte [bp-006h], 000h ; 80 7e fa 00
- je short 04827h ; 74 02
+ cmp byte [bp-00ah], 000h ; 80 7e f6 00
+ je short 048e9h ; 74 02
mov CL, strict byte 001h ; b1 01
xor dx, dx ; 31 d2
mov ax, di ; 89 f8
- call 0161ch ; e8 ee cd
+ call 0161ch ; e8 2c cd
mov bx, ax ; 89 c3
mov dx, strict word 00002h ; ba 02 00
mov ax, di ; 89 f8
- call 0161ch ; e8 e4 cd
+ call 0161ch ; e8 22 cd
cmp bx, ax ; 39 c3
- je short 0484dh ; 74 11
+ je short 0490fh ; 74 11
test cl, cl ; 84 c9
- jne short 04863h ; 75 23
+ jne short 04925h ; 75 23
mov dx, 001feh ; ba fe 01
mov ax, di ; 89 f8
- call 0161ch ; e8 d4 cd
+ call 0161ch ; e8 12 cd
cmp ax, 0aa55h ; 3d 55 aa
- je short 04863h ; 74 16
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
+ je short 04925h ; 74 16
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
push ax ; 50
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
- movzx dx, byte [bp-008h] ; 0f b6 56 f8
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
xor cx, cx ; 31 c9
- jmp near 04755h ; e9 f2 fe
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
- movzx dx, byte [bp-008h] ; 0f b6 56 f8
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- call 04535h ; e8 c3 fc
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
+ jmp near 04817h ; e9 f2 fe
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ call 045ech ; e8 b8 fc
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
xor dx, dx ; 31 d2
xor ax, ax ; 31 c0
add ax, di ; 01 f8
adc dx, bx ; 11 da
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-keyboard_panic_: ; 0xf4882 LB 0x11
+keyboard_panic_: ; 0xf4947 LB 0x13
push bp ; 55
mov bp, sp ; 89 e5
push ax ; 50
- push 004e2h ; 68 e2 04
+ push 00554h ; 68 54 05
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 5b d0
+ call 01922h ; e8 cf cf
add sp, strict byte 00006h ; 83 c4 06
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-_keyboard_init: ; 0xf4893 LB 0x27a
+_keyboard_init: ; 0xf495a LB 0x27c
push bp ; 55
mov bp, sp ; 89 e5
mov AL, strict byte 0aah ; b0 aa
@@ -6195,44 +6265,44 @@ _keyboard_init: ; 0xf4893 LB 0x27a
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 048b6h ; 74 0d
+ je short 0497dh ; 74 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 048b6h ; 76 08
+ jbe short 0497dh ; 76 08
xor al, al ; 30 c0
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 0489fh ; eb e9
+ jmp short 04966h ; eb e9
test bx, bx ; 85 db
- jne short 048bfh ; 75 05
+ jne short 04986h ; 75 05
xor ax, ax ; 31 c0
- call 04882h ; e8 c3 ff
+ call 04947h ; e8 c1 ff
mov bx, strict word 0ffffh ; bb ff ff
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 048d9h ; 75 0d
+ jne short 049a0h ; 75 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 048d9h ; 76 08
+ jbe short 049a0h ; 76 08
mov AL, strict byte 001h ; b0 01
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 048c2h ; eb e9
+ jmp short 04989h ; eb e9
test bx, bx ; 85 db
- jne short 048e3h ; 75 06
+ jne short 049aah ; 75 06
mov ax, strict word 00001h ; b8 01 00
- call 04882h ; e8 9f ff
+ call 04947h ; e8 9d ff
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp ax, strict word 00055h ; 3d 55 00
- je short 048f4h ; 74 06
+ je short 049bbh ; 74 06
mov ax, 003dfh ; b8 df 03
- call 04882h ; e8 8e ff
+ call 04947h ; e8 8c ff
mov AL, strict byte 0abh ; b0 ab
mov dx, strict word 00064h ; ba 64 00
out DX, AL ; ee
@@ -6242,44 +6312,44 @@ _keyboard_init: ; 0xf4893 LB 0x27a
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 04914h ; 74 0d
+ je short 049dbh ; 74 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04914h ; 76 08
+ jbe short 049dbh ; 76 08
mov AL, strict byte 010h ; b0 10
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 048fdh ; eb e9
+ jmp short 049c4h ; eb e9
test bx, bx ; 85 db
- jne short 0491eh ; 75 06
+ jne short 049e5h ; 75 06
mov ax, strict word 0000ah ; b8 0a 00
- call 04882h ; e8 64 ff
+ call 04947h ; e8 62 ff
mov bx, strict word 0ffffh ; bb ff ff
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 04938h ; 75 0d
+ jne short 049ffh ; 75 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04938h ; 76 08
+ jbe short 049ffh ; 76 08
mov AL, strict byte 011h ; b0 11
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 04921h ; eb e9
+ jmp short 049e8h ; eb e9
test bx, bx ; 85 db
- jne short 04942h ; 75 06
+ jne short 04a09h ; 75 06
mov ax, strict word 0000bh ; b8 0b 00
- call 04882h ; e8 40 ff
+ call 04947h ; e8 3e ff
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test ax, ax ; 85 c0
- je short 04952h ; 74 06
+ je short 04a19h ; 74 06
mov ax, 003e0h ; b8 e0 03
- call 04882h ; e8 30 ff
+ call 04947h ; e8 2e ff
mov AL, strict byte 0ffh ; b0 ff
mov dx, strict word 00060h ; ba 60 00
out DX, AL ; ee
@@ -6289,75 +6359,75 @@ _keyboard_init: ; 0xf4893 LB 0x27a
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 04972h ; 74 0d
+ je short 04a39h ; 74 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04972h ; 76 08
+ jbe short 04a39h ; 76 08
mov AL, strict byte 020h ; b0 20
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 0495bh ; eb e9
+ jmp short 04a22h ; eb e9
test bx, bx ; 85 db
- jne short 0497ch ; 75 06
+ jne short 04a43h ; 75 06
mov ax, strict word 00014h ; b8 14 00
- call 04882h ; e8 06 ff
+ call 04947h ; e8 04 ff
mov bx, strict word 0ffffh ; bb ff ff
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 04996h ; 75 0d
+ jne short 04a5dh ; 75 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04996h ; 76 08
+ jbe short 04a5dh ; 76 08
mov AL, strict byte 021h ; b0 21
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 0497fh ; eb e9
+ jmp short 04a46h ; eb e9
test bx, bx ; 85 db
- jne short 049a0h ; 75 06
+ jne short 04a67h ; 75 06
mov ax, strict word 00015h ; b8 15 00
- call 04882h ; e8 e2 fe
+ call 04947h ; e8 e0 fe
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp ax, 000fah ; 3d fa 00
- je short 049b1h ; 74 06
+ je short 04a78h ; 74 06
mov ax, 003e1h ; b8 e1 03
- call 04882h ; e8 d1 fe
+ call 04947h ; e8 cf fe
mov bx, strict word 0ffffh ; bb ff ff
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 049cbh ; 75 0d
+ jne short 04a92h ; 75 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 049cbh ; 76 08
+ jbe short 04a92h ; 76 08
mov AL, strict byte 031h ; b0 31
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 049b4h ; eb e9
+ jmp short 04a7bh ; eb e9
test bx, bx ; 85 db
- jne short 049d5h ; 75 06
+ jne short 04a9ch ; 75 06
mov ax, strict word 0001fh ; b8 1f 00
- call 04882h ; e8 ad fe
+ call 04947h ; e8 ab fe
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp ax, 000aah ; 3d aa 00
- je short 049eeh ; 74 0e
+ je short 04ab5h ; 74 0e
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp ax, 000aah ; 3d aa 00
- je short 049eeh ; 74 06
+ je short 04ab5h ; 74 06
mov ax, 003e2h ; b8 e2 03
- call 04882h ; e8 94 fe
+ call 04947h ; e8 92 fe
mov AL, strict byte 0f5h ; b0 f5
mov dx, strict word 00060h ; ba 60 00
out DX, AL ; ee
@@ -6367,44 +6437,44 @@ _keyboard_init: ; 0xf4893 LB 0x27a
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 04a0eh ; 74 0d
+ je short 04ad5h ; 74 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04a0eh ; 76 08
+ jbe short 04ad5h ; 76 08
mov AL, strict byte 040h ; b0 40
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 049f7h ; eb e9
+ jmp short 04abeh ; eb e9
test bx, bx ; 85 db
- jne short 04a18h ; 75 06
+ jne short 04adfh ; 75 06
mov ax, strict word 00028h ; b8 28 00
- call 04882h ; e8 6a fe
+ call 04947h ; e8 68 fe
mov bx, strict word 0ffffh ; bb ff ff
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 04a32h ; 75 0d
+ jne short 04af9h ; 75 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04a32h ; 76 08
+ jbe short 04af9h ; 76 08
mov AL, strict byte 041h ; b0 41
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 04a1bh ; eb e9
+ jmp short 04ae2h ; eb e9
test bx, bx ; 85 db
- jne short 04a3ch ; 75 06
+ jne short 04b03h ; 75 06
mov ax, strict word 00029h ; b8 29 00
- call 04882h ; e8 46 fe
+ call 04947h ; e8 44 fe
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp ax, 000fah ; 3d fa 00
- je short 04a4dh ; 74 06
+ je short 04b14h ; 74 06
mov ax, 003e3h ; b8 e3 03
- call 04882h ; e8 35 fe
+ call 04947h ; e8 33 fe
mov AL, strict byte 060h ; b0 60
mov dx, strict word 00064h ; ba 64 00
out DX, AL ; ee
@@ -6414,18 +6484,18 @@ _keyboard_init: ; 0xf4893 LB 0x27a
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 04a6dh ; 74 0d
+ je short 04b34h ; 74 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04a6dh ; 76 08
+ jbe short 04b34h ; 76 08
mov AL, strict byte 050h ; b0 50
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 04a56h ; eb e9
+ jmp short 04b1dh ; eb e9
test bx, bx ; 85 db
- jne short 04a77h ; 75 06
+ jne short 04b3eh ; 75 06
mov ax, strict word 00032h ; b8 32 00
- call 04882h ; e8 0b fe
+ call 04947h ; e8 09 fe
mov AL, strict byte 065h ; b0 65
mov dx, strict word 00060h ; ba 60 00
out DX, AL ; ee
@@ -6435,18 +6505,18 @@ _keyboard_init: ; 0xf4893 LB 0x27a
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 04a97h ; 74 0d
+ je short 04b5eh ; 74 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04a97h ; 76 08
+ jbe short 04b5eh ; 76 08
mov AL, strict byte 060h ; b0 60
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 04a80h ; eb e9
+ jmp short 04b47h ; eb e9
test bx, bx ; 85 db
- jne short 04aa1h ; 75 06
+ jne short 04b68h ; 75 06
mov ax, strict word 0003ch ; b8 3c 00
- call 04882h ; e8 e1 fd
+ call 04947h ; e8 df fd
mov AL, strict byte 0f4h ; b0 f4
mov dx, strict word 00060h ; ba 60 00
out DX, AL ; ee
@@ -6456,93 +6526,97 @@ _keyboard_init: ; 0xf4893 LB 0x27a
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 04ac1h ; 74 0d
+ je short 04b88h ; 74 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04ac1h ; 76 08
+ jbe short 04b88h ; 76 08
mov AL, strict byte 070h ; b0 70
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 04aaah ; eb e9
+ jmp short 04b71h ; eb e9
test bx, bx ; 85 db
- jne short 04acbh ; 75 06
+ jne short 04b92h ; 75 06
mov ax, strict word 00046h ; b8 46 00
- call 04882h ; e8 b7 fd
+ call 04947h ; e8 b5 fd
mov bx, strict word 0ffffh ; bb ff ff
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 04ae5h ; 75 0d
+ jne short 04bach ; 75 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 04ae5h ; 76 08
+ jbe short 04bach ; 76 08
mov AL, strict byte 071h ; b0 71
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 04aceh ; eb e9
+ jmp short 04b95h ; eb e9
test bx, bx ; 85 db
- jne short 04aefh ; 75 06
+ jne short 04bb6h ; 75 06
mov ax, strict word 00046h ; b8 46 00
- call 04882h ; e8 93 fd
+ call 04947h ; e8 91 fd
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp ax, 000fah ; 3d fa 00
- je short 04b00h ; 74 06
+ je short 04bc7h ; 74 06
mov ax, 003e4h ; b8 e4 03
- call 04882h ; e8 82 fd
+ call 04947h ; e8 80 fd
mov AL, strict byte 0a8h ; b0 a8
mov dx, strict word 00064h ; ba 64 00
out DX, AL ; ee
xor ax, ax ; 31 c0
- call 05cf1h ; e8 e6 11
+ call 05e41h ; e8 6f 12
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-enqueue_key_: ; 0xf4b0d LB 0x90
+enqueue_key_: ; 0xf4bd6 LB 0x93
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push si ; 56
push di ; 57
- enter 00002h, 000h ; c8 02 00 00
- mov byte [bp-002h], al ; 88 46 fe
+ push ax ; 50
+ mov byte [bp-00ah], al ; 88 46 f6
mov bl, dl ; 88 d3
mov dx, strict word 0001ah ; ba 1a 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 f9 ca
+ call 0161ch ; e8 30 ca
mov di, ax ; 89 c7
mov dx, strict word 0001ch ; ba 1c 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 ee ca
+ call 0161ch ; e8 25 ca
mov si, ax ; 89 c6
lea cx, [si+002h] ; 8d 4c 02
cmp cx, strict byte 0003eh ; 83 f9 3e
- jc short 04b3bh ; 72 03
+ jc short 04c04h ; 72 03
mov cx, strict word 0001eh ; b9 1e 00
cmp cx, di ; 39 f9
- jne short 04b43h ; 75 04
+ jne short 04c0ch ; 75 04
xor ax, ax ; 31 c0
- jmp short 04b68h ; eb 25
+ jmp short 04c31h ; eb 25
xor bh, bh ; 30 ff
mov dx, si ; 89 f2
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 c1 ca
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
+ call 0160eh ; e8 f8 c9
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6
lea dx, [si+001h] ; 8d 54 01
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 b4 ca
+ call 0160eh ; e8 eb c9
mov bx, cx ; 89 cb
mov dx, strict word 0001ch ; ba 1c 00
mov ax, strict word 00040h ; b8 40 00
- call 0162ah ; e8 c5 ca
+ call 0162ah ; e8 fc c9
mov ax, strict word 00001h ; b8 01 00
- leave ; c9
+ lea sp, [bp-008h] ; 8d 66 f8
pop di ; 5f
pop si ; 5e
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
db 0c6h, 0c5h, 0bah
; mov ch, 0bah ; c6 c5 ba
@@ -6553,405 +6627,420 @@ enqueue_key_: ; 0xf4b0d LB 0x90
inc bp ; 45
cmp bh, byte [bx+si] ; 3a 38
sub bl, byte [ss:di] ; 36 2a 1d
- aad 04dh ; d5 4d
- bound cx, [si+031h] ; 62 4c 31
- dec sp ; 4c
- xor word [si-01ch], cx ; 31 4c e4
- dec sp ; 4c
- or cl, byte [si+056h] ; 0a 4c 56
- dec bp ; 4d
- movsw ; a5
+ mov word [0304eh], ax ; a3 4e 30
dec bp ; 4d
- enter 0a34dh, 04ch ; c8 4d a3 4c
- xor word [si+031h], cx ; 31 4c 31
+ dec word [si-001h] ; ff 4c ff
dec sp ; 4c
- sbb ax, 0234dh ; 1d 4d 23
+ mov DL, strict byte 04dh ; b2 4d
+ fmul dword [si+024h] ; d8 4c 24
+ dec si ; 4e
+ jnc short 04ca7h ; 73 4e
+ xchg si, ax ; 96
+ dec si ; 4e
+ jno short 04caah ; 71 4d
+ dec word [si-001h] ; ff 4c ff
dec sp ; 4c
- xchg byte [di-03fh], cl ; 86 4d c1
- dec bp ; 4d
-_int09_function: ; 0xf4b9d LB 0x358
+ jmp short 04cb0h ; eb 4d
+ db 0f1h
+ dec sp ; 4c
+ push sp ; 54
+ dec si ; 4e
+ db 08fh
+ dec si ; 4e
+_int09_function: ; 0xf4c69 LB 0x35d
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0000ch, 000h ; c8 0c 00 00
- mov al, byte [bp+018h] ; 8a 46 18
- mov byte [bp-006h], al ; 88 46 fa
+ sub sp, strict byte 0000ch ; 83 ec 0c
+ mov al, byte [bp+014h] ; 8a 46 14
+ mov byte [bp-00ah], al ; 88 46 f6
test al, al ; 84 c0
- jne short 04bc6h ; 75 19
- mov bx, 00cd6h ; bb d6 0c
+ jne short 04c94h ; 75 19
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 f6 cc
- push 004f5h ; 68 f5 04
+ call 018e1h ; e8 5b cc
+ push 00567h ; 68 67 05
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 29 cd
+ call 01922h ; e8 94 cc
add sp, strict byte 00004h ; 83 c4 04
- jmp near 04ef1h ; e9 2b 03
+ jmp near 04fbfh ; e9 2b 03
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 31 ca
- mov byte [bp-00ah], al ; 88 46 f6
+ call 01600h ; e8 63 c9
+ mov byte [bp-00eh], al ; 88 46 f2
mov bl, al ; 88 c3
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 23 ca
+ call 01600h ; e8 55 c9
+ mov byte [bp-010h], al ; 88 46 f0
mov byte [bp-00ch], al ; 88 46 f4
- mov byte [bp-008h], al ; 88 46 f8
mov dx, 00096h ; ba 96 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 14 ca
- mov byte [bp-004h], al ; 88 46 fc
- mov byte [bp-002h], al ; 88 46 fe
- mov al, byte [bp-006h] ; 8a 46 fa
+ call 01600h ; e8 46 c9
+ mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-006h], al ; 88 46 fa
+ mov al, byte [bp-00ah] ; 8a 46 f6
push CS ; 0e
pop ES ; 07
mov cx, strict word 00010h ; b9 10 00
- mov di, 04b6eh ; bf 6e 4b
+ mov di, 04c3ah ; bf 3a 4c
repne scasb ; f2 ae
sal cx, 1 ; d1 e1
mov di, cx ; 89 cf
- mov ax, word [cs:di+04b7dh] ; 2e 8b 85 7d 4b
+ mov ax, word [cs:di+04c49h] ; 2e 8b 85 49 4c
jmp ax ; ff e0
xor bl, 040h ; 80 f3 40
xor bh, bh ; 30 ff
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 f6 c9
- or byte [bp-008h], 040h ; 80 4e f8 40
- movzx bx, byte [bp-008h] ; 0f b6 5e f8
- jmp near 04d99h ; e9 76 01
- mov al, byte [bp-00ch] ; 8a 46 f4
+ call 0160eh ; e8 28 c9
+ or byte [bp-00ch], 040h ; 80 4e f4 40
+ movzx bx, byte [bp-00ch] ; 0f b6 5e f4
+ jmp near 04e67h ; e9 76 01
+ mov al, byte [bp-010h] ; 8a 46 f0
and AL, strict byte 0bfh ; 24 bf
- mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-00ch], al ; 88 46 f4
movzx bx, al ; 0f b6 d8
- jmp near 04d99h ; e9 68 01
- test byte [bp-002h], 002h ; f6 46 fe 02
- jne near 04ed3h ; 0f 85 9a 02
- mov al, byte [bp-006h] ; 8a 46 fa
+ jmp near 04e67h ; e9 68 01
+ test byte [bp-006h], 002h ; f6 46 fa 02
+ jne near 04fa1h ; 0f 85 9a 02
+ mov al, byte [bp-00ah] ; 8a 46 f6
and AL, strict byte 07fh ; 24 7f
cmp AL, strict byte 02ah ; 3c 2a
db 00fh, 094h, 0c0h
; sete al ; 0f 94 c0
xor ah, ah ; 30 e4
inc ax ; 40
- test byte [bp-006h], 080h ; f6 46 fa 80
- je short 04c52h ; 74 06
+ test byte [bp-00ah], 080h ; f6 46 f6 80
+ je short 04d20h ; 74 06
not al ; f6 d0
and bl, al ; 20 c3
- jmp short 04c54h ; eb 02
+ jmp short 04d22h ; eb 02
or bl, al ; 08 c3
xor bh, bh ; 30 ff
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 af c9
- jmp near 04ed3h ; e9 71 02
- test byte [bp-004h], 001h ; f6 46 fc 01
- jne near 04ed3h ; 0f 85 69 02
+ call 0160eh ; e8 e1 c8
+ jmp near 04fa1h ; e9 71 02
+ test byte [bp-008h], 001h ; f6 46 f8 01
+ jne near 04fa1h ; 0f 85 69 02
or bl, 004h ; 80 cb 04
xor bh, bh ; 30 ff
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 96 c9
- mov al, byte [bp-004h] ; 8a 46 fc
+ call 0160eh ; e8 c8 c8
+ mov al, byte [bp-008h] ; 8a 46 f8
test AL, strict byte 002h ; a8 02
- je short 04c8ch ; 74 0d
+ je short 04d5ah ; 74 0d
or AL, strict byte 004h ; 0c 04
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
movzx bx, al ; 0f b6 d8
mov dx, 00096h ; ba 96 00
- jmp short 04c9ah ; eb 0e
- mov al, byte [bp-00ch] ; 8a 46 f4
+ jmp short 04d68h ; eb 0e
+ mov al, byte [bp-010h] ; 8a 46 f0
or AL, strict byte 001h ; 0c 01
- mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-00ch], al ; 88 46 f4
movzx bx, al ; 0f b6 d8
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 6e c9
- jmp near 04ed3h ; e9 30 02
- test byte [bp-004h], 001h ; f6 46 fc 01
- jne near 04ed3h ; 0f 85 28 02
+ call 0160eh ; e8 a0 c8
+ jmp near 04fa1h ; e9 30 02
+ test byte [bp-008h], 001h ; f6 46 f8 01
+ jne near 04fa1h ; 0f 85 28 02
and bl, 0fbh ; 80 e3 fb
xor bh, bh ; 30 ff
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 55 c9
- mov al, byte [bp-004h] ; 8a 46 fc
+ call 0160eh ; e8 87 c8
+ mov al, byte [bp-008h] ; 8a 46 f8
test AL, strict byte 002h ; a8 02
- je short 04ccdh ; 74 0d
+ je short 04d9bh ; 74 0d
and AL, strict byte 0fbh ; 24 fb
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
movzx bx, al ; 0f b6 d8
mov dx, 00096h ; ba 96 00
- jmp short 04cdbh ; eb 0e
- mov al, byte [bp-00ch] ; 8a 46 f4
+ jmp short 04da9h ; eb 0e
+ mov al, byte [bp-010h] ; 8a 46 f0
and AL, strict byte 0feh ; 24 fe
- mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-00ch], al ; 88 46 f4
movzx bx, al ; 0f b6 d8
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 2d c9
- jmp near 04ed3h ; e9 ef 01
+ call 0160eh ; e8 5f c8
+ jmp near 04fa1h ; e9 ef 01
or bl, 008h ; 80 cb 08
xor bh, bh ; 30 ff
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 1c c9
- mov al, byte [bp-004h] ; 8a 46 fc
+ call 0160eh ; e8 4e c8
+ mov al, byte [bp-008h] ; 8a 46 f8
test AL, strict byte 002h ; a8 02
- je short 04d06h ; 74 0d
+ je short 04dd4h ; 74 0d
or AL, strict byte 008h ; 0c 08
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
movzx bx, al ; 0f b6 d8
mov dx, 00096h ; ba 96 00
- jmp short 04d14h ; eb 0e
- mov al, byte [bp-00ch] ; 8a 46 f4
+ jmp short 04de2h ; eb 0e
+ mov al, byte [bp-010h] ; 8a 46 f0
or AL, strict byte 002h ; 0c 02
- mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-00ch], al ; 88 46 f4
movzx bx, al ; 0f b6 d8
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 f4 c8
- jmp near 04ed3h ; e9 b6 01
+ call 0160eh ; e8 26 c8
+ jmp near 04fa1h ; e9 b6 01
and bl, 0f7h ; 80 e3 f7
xor bh, bh ; 30 ff
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 e3 c8
- mov al, byte [bp-004h] ; 8a 46 fc
+ call 0160eh ; e8 15 c8
+ mov al, byte [bp-008h] ; 8a 46 f8
test AL, strict byte 002h ; a8 02
- je short 04d3fh ; 74 0d
+ je short 04e0dh ; 74 0d
and AL, strict byte 0f7h ; 24 f7
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
movzx bx, al ; 0f b6 d8
mov dx, 00096h ; ba 96 00
- jmp short 04d4dh ; eb 0e
- mov al, byte [bp-00ch] ; 8a 46 f4
+ jmp short 04e1bh ; eb 0e
+ mov al, byte [bp-010h] ; 8a 46 f0
and AL, strict byte 0fdh ; 24 fd
- mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-00ch], al ; 88 46 f4
movzx bx, al ; 0f b6 d8
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 bb c8
- jmp near 04ed3h ; e9 7d 01
- test byte [bp-004h], 003h ; f6 46 fc 03
- jne near 04ed3h ; 0f 85 75 01
- mov al, byte [bp-00ch] ; 8a 46 f4
+ call 0160eh ; e8 ed c7
+ jmp near 04fa1h ; e9 7d 01
+ test byte [bp-008h], 003h ; f6 46 f8 03
+ jne near 04fa1h ; 0f 85 75 01
+ mov al, byte [bp-010h] ; 8a 46 f0
or AL, strict byte 020h ; 0c 20
- mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-00ch], al ; 88 46 f4
movzx bx, al ; 0f b6 d8
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 9c c8
- mov bl, byte [bp-00ah] ; 8a 5e f6
+ call 0160eh ; e8 ce c7
+ mov bl, byte [bp-00eh] ; 8a 5e f2
xor bl, 020h ; 80 f3 20
xor bh, bh ; 30 ff
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 8b c8
- jmp near 04ed3h ; e9 4d 01
- test byte [bp-004h], 003h ; f6 46 fc 03
- jne near 04ed3h ; 0f 85 45 01
- mov al, byte [bp-00ch] ; 8a 46 f4
+ call 0160eh ; e8 bd c7
+ jmp near 04fa1h ; e9 4d 01
+ test byte [bp-008h], 003h ; f6 46 f8 03
+ jne near 04fa1h ; 0f 85 45 01
+ mov al, byte [bp-010h] ; 8a 46 f0
and AL, strict byte 0dfh ; 24 df
- mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-00ch], al ; 88 46 f4
movzx bx, al ; 0f b6 d8
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 6c c8
- jmp near 04ed3h ; e9 2e 01
- mov al, byte [bp-00ch] ; 8a 46 f4
+ call 0160eh ; e8 9e c7
+ jmp near 04fa1h ; e9 2e 01
+ mov al, byte [bp-010h] ; 8a 46 f0
or AL, strict byte 010h ; 0c 10
- mov byte [bp-008h], al ; 88 46 f8
+ mov byte [bp-00ch], al ; 88 46 f4
movzx bx, al ; 0f b6 d8
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 55 c8
- mov bl, byte [bp-00ah] ; 8a 5e f6
+ call 0160eh ; e8 87 c7
+ mov bl, byte [bp-00eh] ; 8a 5e f2
xor bl, 010h ; 80 f3 10
- jmp short 04d78h ; eb b7
- mov al, byte [bp-00ch] ; 8a 46 f4
+ jmp short 04e46h ; eb b7
+ mov al, byte [bp-010h] ; 8a 46 f0
and AL, strict byte 0efh ; 24 ef
- jmp short 04d93h ; eb cb
+ jmp short 04e61h ; eb cb
mov al, bl ; 88 d8
and AL, strict byte 00ch ; 24 0c
cmp AL, strict byte 00ch ; 3c 0c
- jne short 04dd5h ; 75 05
+ jne short 04ea3h ; 75 05
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0
- test byte [bp-006h], 080h ; f6 46 fa 80
- jne near 04ed3h ; 0f 85 f6 00
- cmp byte [bp-006h], 058h ; 80 7e fa 58
- jbe short 04e01h ; 76 1e
- mov bx, 00cd6h ; bb d6 0c
+ test byte [bp-00ah], 080h ; f6 46 f6 80
+ jne near 04fa1h ; 0f 85 f6 00
+ cmp byte [bp-00ah], 058h ; 80 7e f6 58
+ jbe short 04ecfh ; 76 1e
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 c0 ca
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ call 018e1h ; e8 25 ca
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
push ax ; 50
- push 0050fh ; 68 0f 05
+ push 00581h ; 68 81 05
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 ee ca
+ call 01922h ; e8 59 ca
add sp, strict byte 00006h ; 83 c4 06
- jmp near 04ef1h ; e9 f0 00
+ jmp near 04fbfh ; e9 f0 00
test bl, 008h ; f6 c3 08
- je short 04e18h ; 74 12
- movzx si, byte [bp-006h] ; 0f b6 76 fa
+ je short 04ee6h ; 74 12
+ movzx si, byte [bp-00ah] ; 0f b6 76 f6
imul si, si, strict byte 0000ah ; 6b f6 0a
- mov dl, byte [si+00d2ah] ; 8a 94 2a 0d
- mov ax, word [si+00d2ah] ; 8b 84 2a 0d
- jmp near 04ea4h ; e9 8c 00
+ mov dl, byte [si+00e0eh] ; 8a 94 0e 0e
+ mov ax, word [si+00e0eh] ; 8b 84 0e 0e
+ jmp near 04f72h ; e9 8c 00
test bl, 004h ; f6 c3 04
- je short 04e2fh ; 74 12
- movzx si, byte [bp-006h] ; 0f b6 76 fa
+ je short 04efdh ; 74 12
+ movzx si, byte [bp-00ah] ; 0f b6 76 f6
imul si, si, strict byte 0000ah ; 6b f6 0a
- mov dl, byte [si+00d28h] ; 8a 94 28 0d
- mov ax, word [si+00d28h] ; 8b 84 28 0d
- jmp near 04ea4h ; e9 75 00
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov dl, byte [si+00e0ch] ; 8a 94 0c 0e
+ mov ax, word [si+00e0ch] ; 8b 84 0c 0e
+ jmp near 04f72h ; e9 75 00
+ mov al, byte [bp-006h] ; 8a 46 fa
and AL, strict byte 002h ; 24 02
test al, al ; 84 c0
- jbe short 04e4dh ; 76 15
- mov al, byte [bp-006h] ; 8a 46 fa
+ jbe short 04f1bh ; 76 15
+ mov al, byte [bp-00ah] ; 8a 46 f6
cmp AL, strict byte 047h ; 3c 47
- jc short 04e4dh ; 72 0e
+ jc short 04f1bh ; 72 0e
cmp AL, strict byte 053h ; 3c 53
- jnbe short 04e4dh ; 77 0a
+ jnbe short 04f1bh ; 77 0a
mov DL, strict byte 0e0h ; b2 e0
movzx si, al ; 0f b6 f0
imul si, si, strict byte 0000ah ; 6b f6 0a
- jmp short 04ea0h ; eb 53
+ jmp short 04f6eh ; eb 53
test bl, 003h ; f6 c3 03
- je short 04e7fh ; 74 2d
- movzx si, byte [bp-006h] ; 0f b6 76 fa
+ je short 04f4dh ; 74 2d
+ movzx si, byte [bp-00ah] ; 0f b6 76 f6
imul si, si, strict byte 0000ah ; 6b f6 0a
- movzx ax, byte [si+00d2ch] ; 0f b6 84 2c 0d
+ movzx ax, byte [si+00e10h] ; 0f b6 84 10 0e
movzx dx, bl ; 0f b6 d3
test dx, ax ; 85 c2
- je short 04e6fh ; 74 0a
- mov dl, byte [si+00d24h] ; 8a 94 24 0d
- mov ax, word [si+00d24h] ; 8b 84 24 0d
- jmp short 04e77h ; eb 08
- mov dl, byte [si+00d26h] ; 8a 94 26 0d
- mov ax, word [si+00d26h] ; 8b 84 26 0d
+ je short 04f3dh ; 74 0a
+ mov dl, byte [si+00e08h] ; 8a 94 08 0e
+ mov ax, word [si+00e08h] ; 8b 84 08 0e
+ jmp short 04f45h ; eb 08
+ mov dl, byte [si+00e0ah] ; 8a 94 0a 0e
+ mov ax, word [si+00e0ah] ; 8b 84 0a 0e
shr ax, 008h ; c1 e8 08
- mov byte [bp-006h], al ; 88 46 fa
- jmp short 04eaah ; eb 2b
- movzx si, byte [bp-006h] ; 0f b6 76 fa
+ mov byte [bp-00ah], al ; 88 46 f6
+ jmp short 04f78h ; eb 2b
+ movzx si, byte [bp-00ah] ; 0f b6 76 f6
imul si, si, strict byte 0000ah ; 6b f6 0a
- movzx ax, byte [si+00d2ch] ; 0f b6 84 2c 0d
+ movzx ax, byte [si+00e10h] ; 0f b6 84 10 0e
movzx dx, bl ; 0f b6 d3
test dx, ax ; 85 c2
- je short 04e9ch ; 74 0a
- mov dl, byte [si+00d26h] ; 8a 94 26 0d
- mov ax, word [si+00d26h] ; 8b 84 26 0d
- jmp short 04ea4h ; eb 08
- mov dl, byte [si+00d24h] ; 8a 94 24 0d
- mov ax, word [si+00d24h] ; 8b 84 24 0d
+ je short 04f6ah ; 74 0a
+ mov dl, byte [si+00e0ah] ; 8a 94 0a 0e
+ mov ax, word [si+00e0ah] ; 8b 84 0a 0e
+ jmp short 04f72h ; eb 08
+ mov dl, byte [si+00e08h] ; 8a 94 08 0e
+ mov ax, word [si+00e08h] ; 8b 84 08 0e
shr ax, 008h ; c1 e8 08
- mov byte [bp-006h], al ; 88 46 fa
- cmp byte [bp-006h], 000h ; 80 7e fa 00
- jne short 04ecah ; 75 1a
+ mov byte [bp-00ah], al ; 88 46 f6
+ cmp byte [bp-00ah], 000h ; 80 7e f6 00
+ jne short 04f98h ; 75 1a
test dl, dl ; 84 d2
- jne short 04ecah ; 75 16
- mov bx, 00cd6h ; bb d6 0c
+ jne short 04f98h ; 75 16
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 ef c9
- push 00546h ; 68 46 05
+ call 018e1h ; e8 54 c9
+ push 005b8h ; 68 b8 05
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 22 ca
+ call 01922h ; e8 8d c9
add sp, strict byte 00004h ; 83 c4 04
xor dh, dh ; 30 f6
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- call 04b0dh ; e8 3a fc
- mov al, byte [bp-006h] ; 8a 46 fa
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ call 04bd6h ; e8 35 fc
+ mov al, byte [bp-00ah] ; 8a 46 f6
and AL, strict byte 07fh ; 24 7f
cmp AL, strict byte 01dh ; 3c 1d
- je short 04ee0h ; 74 04
- and byte [bp-002h], 0feh ; 80 66 fe fe
- and byte [bp-002h], 0fdh ; 80 66 fe fd
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
+ je short 04faeh ; 74 04
+ and byte [bp-006h], 0feh ; 80 66 fa fe
+ and byte [bp-006h], 0fdh ; 80 66 fa fd
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
mov dx, 00096h ; ba 96 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 1d c7
- leave ; c9
+ call 0160eh ; e8 4f c6
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-dequeue_key_: ; 0xf4ef5 LB 0x90
+dequeue_key_: ; 0xf4fc6 LB 0x94
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
+ push ax ; 50
+ push ax ; 50
mov di, ax ; 89 c7
- mov word [bp-002h], dx ; 89 56 fe
+ mov word [bp-006h], dx ; 89 56 fa
mov si, bx ; 89 de
- mov word [bp-004h], cx ; 89 4e fc
+ mov word [bp-008h], cx ; 89 4e f8
mov dx, strict word 0001ah ; ba 1a 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 0e c7
+ call 0161ch ; e8 3c c6
mov bx, ax ; 89 c3
mov dx, strict word 0001ch ; ba 1c 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 03 c7
+ call 0161ch ; e8 31 c6
cmp bx, ax ; 39 c3
- je short 04f5ah ; 74 3d
+ je short 0502ch ; 74 3d
mov dx, bx ; 89 da
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 db c6
+ call 01600h ; e8 09 c6
mov cl, al ; 88 c1
lea dx, [bx+001h] ; 8d 57 01
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 d0 c6
- mov es, [bp-004h] ; 8e 46 fc
+ call 01600h ; e8 fe c5
+ mov es, [bp-008h] ; 8e 46 f8
mov byte [es:si], cl ; 26 88 0c
- mov es, [bp-002h] ; 8e 46 fe
+ mov es, [bp-006h] ; 8e 46 fa
mov byte [es:di], al ; 26 88 05
- cmp word [bp+008h], strict byte 00000h ; 83 7e 08 00
- je short 04f55h ; 74 13
+ cmp word [bp+004h], strict byte 00000h ; 83 7e 04 00
+ je short 05027h ; 74 13
inc bx ; 43
inc bx ; 43
cmp bx, strict byte 0003eh ; 83 fb 3e
- jc short 04f4ch ; 72 03
+ jc short 0501eh ; 72 03
mov bx, strict word 0001eh ; bb 1e 00
mov dx, strict word 0001ah ; ba 1a 00
mov ax, strict word 00040h ; b8 40 00
- call 0162ah ; e8 d5 c6
+ call 0162ah ; e8 03 c6
mov ax, strict word 00001h ; b8 01 00
- jmp short 04f5ch ; eb 02
+ jmp short 0502eh ; eb 02
xor ax, ax ; 31 c0
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 00002h ; c2 02 00
mov byte [01292h], AL ; a2 92 12
adc word [bx+si], dx ; 11 10
or cl, byte [bx+di] ; 0a 09
add ax, 00102h ; 05 02 01
- add byte [bx+di], ah ; 00 21
+ add al, bh ; 00 f8
push dx ; 52
- aaa ; 37
- push ax ; 50
- jle short 04fc3h ; 7e 50
- retf 0da50h ; ca 50 da
- push ax ; 50
- add AL, strict byte 051h ; 04 51
- or ax, 07e51h ; 0d 51 7e
+ push CS ; 0e
push cx ; 51
- scasw ; af
+ push bp ; 55
push cx ; 51
- fcom qword [bx+di+016h] ; dc 51 16
+ mov ax, word [0b151h] ; a1 51 b1
+ push cx ; 51
+ fist dword [bx+di-01ch] ; db 51 e4
+ push cx ; 51
+ push bp ; 55
+ push dx ; 52
+ xchg byte [bp+si-04dh], dl ; 86 52 b3
push dx ; 52
- db 064h, 052h
- ; fs push dx ; 64 52
-_int16_function: ; 0xf4f85 LB 0x314
+ in ax, DX ; ed
+ push dx ; 52
+ db 03bh
+ push bx ; 53
+_int16_function: ; 0xf505a LB 0x2e7
+ push bp ; 55
+ mov bp, sp ; 89 e5
push di ; 57
- enter 00006h, 000h ; c8 06 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 6d c6
+ call 01600h ; e8 96 c5
mov cl, al ; 88 c1
mov bh, al ; 88 c7
mov dx, 00097h ; ba 97 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 60 c6
+ call 01600h ; e8 89 c5
mov bl, al ; 88 c3
movzx dx, cl ; 0f b6 d1
sar dx, 004h ; c1 fa 04
@@ -6960,7 +7049,7 @@ _int16_function: ; 0xf4f85 LB 0x314
xor ah, ah ; 30 e4
xor al, dl ; 30 d0
test ax, ax ; 85 c0
- je short 05015h ; 74 60
+ je short 050ech ; 74 60
cli ; fa
mov AL, strict byte 0edh ; b0 ed
mov dx, strict word 00060h ; ba 60 00
@@ -6970,17 +7059,17 @@ _int16_function: ; 0xf4f85 LB 0x314
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 04fceh ; 75 08
+ jne short 050a5h ; 75 08
mov AL, strict byte 021h ; b0 21
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 04fbch ; eb ee
+ jmp short 05093h ; eb ee
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp ax, 000fah ; 3d fa 00
- jne short 05014h ; 75 3b
+ jne short 050ebh ; 75 3b
and bl, 0f8h ; 80 e3 f8
movzx ax, bh ; 0f b6 c7
sar ax, 004h ; c1 f8 04
@@ -6996,11 +7085,11 @@ _int16_function: ; 0xf4f85 LB 0x314
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 05003h ; 75 08
+ jne short 050dah ; 75 08
mov AL, strict byte 021h ; b0 21
mov dx, 00080h ; ba 80 00
out DX, AL ; ee
- jmp short 04ff1h ; eb ee
+ jmp short 050c8h ; eb ee
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
@@ -7008,107 +7097,97 @@ _int16_function: ; 0xf4f85 LB 0x314
xor bh, bh ; 30 ff
mov dx, 00097h ; ba 97 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 fa c5
+ call 0160eh ; e8 23 c5
sti ; fb
- mov ax, word [bp+014h] ; 8b 46 14
+ mov ax, word [bp+012h] ; 8b 46 12
shr ax, 008h ; c1 e8 08
cmp ax, 000a2h ; 3d a2 00
- jnbe near 05221h ; 0f 87 ff 01
+ jnbe near 052f8h ; 0f 87 ff 01
push CS ; 0e
pop ES ; 07
mov cx, strict word 0000ch ; b9 0c 00
- mov di, 04f62h ; bf 62 4f
+ mov di, 05037h ; bf 37 50
repne scasb ; f2 ae
sal cx, 1 ; d1 e1
mov di, cx ; 89 cf
- mov ax, word [cs:di+04f6dh] ; 2e 8b 85 6d 4f
+ mov ax, word [cs:di+05042h] ; 2e 8b 85 42 50
jmp ax ; ff e0
push strict byte 00001h ; 6a 01
mov cx, ss ; 8c d1
- lea bx, [bp-006h] ; 8d 5e fa
+ lea bx, [bp-008h] ; 8d 5e f8
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 04ef5h ; e8 af fe
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 04fc6h ; e8 a9 fe
test ax, ax ; 85 c0
- jne short 05055h ; 75 0b
- push 0057dh ; 68 7d 05
+ jne short 0512ch ; 75 0b
+ push 005efh ; 68 ef 05
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 97 c8
+ call 01922h ; e8 f9 c7
add sp, strict byte 00004h ; 83 c4 04
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 05061h ; 74 06
- cmp byte [bp-006h], 0f0h ; 80 7e fa f0
- je short 05067h ; 74 06
- cmp byte [bp-006h], 0e0h ; 80 7e fa e0
- jne short 0506bh ; 75 04
- mov byte [bp-006h], 000h ; c6 46 fa 00
- movzx dx, byte [bp-004h] ; 0f b6 56 fc
+ cmp byte [bp-006h], 000h ; 80 7e fa 00
+ je short 05138h ; 74 06
+ cmp byte [bp-008h], 0f0h ; 80 7e f8 f0
+ je short 0513eh ; 74 06
+ cmp byte [bp-008h], 0e0h ; 80 7e f8 e0
+ jne short 05142h ; 75 04
+ mov byte [bp-008h], 000h ; c6 46 f8 00
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa
sal dx, 008h ; c1 e2 08
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
or dx, ax ; 09 c2
- mov word [bp+014h], dx ; 89 56 14
- leave ; c9
- pop di ; 5f
- retn ; c3
- or word [bp+01eh], 00200h ; 81 4e 1e 00 02
+ mov word [bp+012h], dx ; 89 56 12
+ jmp near 0533bh ; e9 e6 01
+ or word [bp+01ch], 00200h ; 81 4e 1c 00 02
push strict byte 00000h ; 6a 00
mov cx, ss ; 8c d1
- lea bx, [bp-006h] ; 8d 5e fa
+ lea bx, [bp-008h] ; 8d 5e f8
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 04ef5h ; e8 63 fe
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 04fc6h ; e8 5d fe
test ax, ax ; 85 c0
- jne short 0509dh ; 75 07
- or word [bp+01eh], strict byte 00040h ; 83 4e 1e 40
- leave ; c9
- pop di ; 5f
- retn ; c3
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 050a9h ; 74 06
- cmp byte [bp-006h], 0f0h ; 80 7e fa f0
- je short 050afh ; 74 06
- cmp byte [bp-006h], 0e0h ; 80 7e fa e0
- jne short 050b3h ; 75 04
- mov byte [bp-006h], 000h ; c6 46 fa 00
- movzx dx, byte [bp-004h] ; 0f b6 56 fc
+ jne short 05174h ; 75 07
+ or word [bp+01ch], strict byte 00040h ; 83 4e 1c 40
+ jmp near 0533bh ; e9 c7 01
+ cmp byte [bp-006h], 000h ; 80 7e fa 00
+ je short 05180h ; 74 06
+ cmp byte [bp-008h], 0f0h ; 80 7e f8 f0
+ je short 05186h ; 74 06
+ cmp byte [bp-008h], 0e0h ; 80 7e f8 e0
+ jne short 0518ah ; 75 04
+ mov byte [bp-008h], 000h ; c6 46 f8 00
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa
sal dx, 008h ; c1 e2 08
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
or dx, ax ; 09 c2
- mov word [bp+014h], dx ; 89 56 14
- and word [bp+01eh], strict byte 0ffbfh ; 83 66 1e bf
- leave ; c9
- pop di ; 5f
- retn ; c3
+ mov word [bp+012h], dx ; 89 56 12
+ and word [bp+01ch], strict byte 0ffbfh ; 83 66 1c bf
+ jmp near 0533bh ; e9 9a 01
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 2d c5
- mov dx, word [bp+014h] ; 8b 56 14
+ call 01600h ; e8 56 c4
+ mov dx, word [bp+012h] ; 8b 56 12
mov dl, al ; 88 c2
- jmp short 05078h ; eb 9e
- mov al, byte [bp+012h] ; 8a 46 12
+ jmp short 0514fh ; eb 9e
+ mov al, byte [bp+010h] ; 8a 46 10
movzx dx, al ; 0f b6 d0
- mov ax, word [bp+012h] ; 8b 46 12
+ mov ax, word [bp+010h] ; 8b 46 10
shr ax, 008h ; c1 e8 08
xor ah, ah ; 30 e4
- call 04b0dh ; e8 22 fa
+ call 04bd6h ; e8 14 fa
test ax, ax ; 85 c0
- jne short 050fch ; 75 0d
- mov ax, word [bp+014h] ; 8b 46 14
+ jne short 051d3h ; 75 0d
+ mov ax, word [bp+012h] ; 8b 46 12
xor al, al ; 30 c0
or AL, strict byte 001h ; 0c 01
- mov word [bp+014h], ax ; 89 46 14
- leave ; c9
- pop di ; 5f
- retn ; c3
- and word [bp+014h], 0ff00h ; 81 66 14 00 ff
- leave ; c9
- pop di ; 5f
- retn ; c3
- mov ax, word [bp+014h] ; 8b 46 14
+ mov word [bp+012h], ax ; 89 46 12
+ jmp near 0533bh ; e9 68 01
+ and word [bp+012h], 0ff00h ; 81 66 12 00 ff
+ jmp near 0533bh ; e9 60 01
+ mov ax, word [bp+012h] ; 8b 46 12
xor al, al ; 30 c0
or AL, strict byte 030h ; 0c 30
- jmp short 050f6h ; eb e9
- mov byte [bp-002h], 002h ; c6 46 fe 02
+ jmp short 051cdh ; eb e9
+ mov byte [bp-004h], 002h ; c6 46 fc 02
xor cx, cx ; 31 c9
cli ; fa
mov AL, strict byte 0f2h ; b0 f2
@@ -7120,40 +7199,40 @@ _int16_function: ; 0xf4f85 LB 0x314
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 05134h ; 75 0d
+ jne short 0520bh ; 75 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 05134h ; 76 08
+ jbe short 0520bh ; 76 08
mov dx, 00080h ; ba 80 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- jmp short 0511dh ; eb e9
+ jmp short 051f4h ; eb e9
test bx, bx ; 85 db
- jbe short 05178h ; 76 40
+ jbe short 0524fh ; 76 40
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp ax, 000fah ; 3d fa 00
- jne short 05178h ; 75 35
+ jne short 0524fh ; 75 35
mov bx, strict word 0ffffh ; bb ff ff
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 0515dh ; 75 0d
+ jne short 05234h ; 75 0d
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 0515dh ; 76 08
+ jbe short 05234h ; 76 08
mov dx, 00080h ; ba 80 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- jmp short 05146h ; eb e9
+ jmp short 0521dh ; eb e9
test bx, bx ; 85 db
- jbe short 0516fh ; 76 0e
+ jbe short 05246h ; 76 0e
shr cx, 008h ; c1 e9 08
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
@@ -7161,157 +7240,207 @@ _int16_function: ; 0xf4f85 LB 0x314
; sub ah, ah ; 2a e4
sal ax, 008h ; c1 e0 08
or cx, ax ; 09 c1
- dec byte [bp-002h] ; fe 4e fe
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- jnbe short 05143h ; 77 cb
- mov word [bp+00eh], cx ; 89 4e 0e
- leave ; c9
- pop di ; 5f
- retn ; c3
+ dec byte [bp-004h] ; fe 4e fc
+ cmp byte [bp-004h], 000h ; 80 7e fc 00
+ jnbe short 0521ah ; 77 cb
+ mov word [bp+00ch], cx ; 89 4e 0c
+ jmp near 0533bh ; e9 e6 00
push strict byte 00001h ; 6a 01
mov cx, ss ; 8c d1
- lea bx, [bp-006h] ; 8d 5e fa
+ lea bx, [bp-008h] ; 8d 5e f8
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 04ef5h ; e8 68 fd
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 04fc6h ; e8 62 fd
test ax, ax ; 85 c0
- jne short 0519ch ; 75 0b
- push 0057dh ; 68 7d 05
+ jne short 05273h ; 75 0b
+ push 005efh ; 68 ef 05
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 50 c7
+ call 01922h ; e8 b2 c6
add sp, strict byte 00004h ; 83 c4 04
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je near 0506bh ; 0f 84 c7 fe
- cmp byte [bp-006h], 0f0h ; 80 7e fa f0
- je near 05067h ; 0f 84 bb fe
- jmp near 0506bh ; e9 bc fe
- or word [bp+01eh], 00200h ; 81 4e 1e 00 02
+ cmp byte [bp-006h], 000h ; 80 7e fa 00
+ je near 05142h ; 0f 84 c7 fe
+ cmp byte [bp-008h], 0f0h ; 80 7e f8 f0
+ je near 0513eh ; 0f 84 bb fe
+ jmp near 05142h ; e9 bc fe
+ or word [bp+01ch], 00200h ; 81 4e 1c 00 02
push strict byte 00000h ; 6a 00
mov cx, ss ; 8c d1
- lea bx, [bp-006h] ; 8d 5e fa
+ lea bx, [bp-008h] ; 8d 5e f8
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 04ef5h ; e8 32 fd
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 04fc6h ; e8 2c fd
test ax, ax ; 85 c0
- je near 05096h ; 0f 84 cd fe
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je near 050b3h ; 0f 84 e2 fe
- cmp byte [bp-006h], 0f0h ; 80 7e fa f0
- je near 050afh ; 0f 84 d6 fe
- jmp near 050b3h ; e9 d7 fe
+ je near 0516dh ; 0f 84 cd fe
+ cmp byte [bp-006h], 000h ; 80 7e fa 00
+ je near 0518ah ; 0f 84 e2 fe
+ cmp byte [bp-008h], 0f0h ; 80 7e f8 f0
+ je near 05186h ; 0f 84 d6 fe
+ jmp near 0518ah ; e9 d7 fe
mov dx, strict word 00017h ; ba 17 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 1b c4
- mov dx, word [bp+014h] ; 8b 56 14
+ call 01600h ; e8 44 c3
+ mov dx, word [bp+012h] ; 8b 56 12
mov dl, al ; 88 c2
- mov word [bp+014h], dx ; 89 56 14
+ mov word [bp+012h], dx ; 89 56 12
mov dx, strict word 00018h ; ba 18 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 0a c4
+ call 01600h ; e8 33 c3
mov bh, al ; 88 c7
and bh, 073h ; 80 e7 73
mov dx, 00096h ; ba 96 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 fc c3
+ call 01600h ; e8 25 c3
and AL, strict byte 00ch ; 24 0c
or bh, al ; 08 c7
- mov dx, word [bp+014h] ; 8b 56 14
+ mov dx, word [bp+012h] ; 8b 56 12
xor dh, dh ; 30 f6
movzx ax, bh ; 0f b6 c7
sal ax, 008h ; c1 e0 08
- jmp near 05076h ; e9 60 fe
- mov ax, word [bp+014h] ; 8b 46 14
+ jmp near 0514dh ; e9 60 fe
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
or ah, 080h ; 80 cc 80
- jmp near 050f6h ; e9 d5 fe
- mov bx, 00cd6h ; bb d6 0c
+ jmp near 051cdh ; e9 d5 fe
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 82 c6
- mov ax, word [bp+014h] ; 8b 46 14
+ call 018e1h ; e8 de c5
+ mov ax, word [bp+012h] ; 8b 46 12
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 005a1h ; 68 a1 05
+ push 00613h ; 68 13 06
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 ae c6
+ call 01922h ; e8 10 c6
add sp, strict byte 00006h ; 83 c4 06
- mov bx, 00cd6h ; bb d6 0c
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 65 c6
- mov ax, word [bp+010h] ; 8b 46 10
+ call 018e1h ; e8 c1 c5
+ mov ax, word [bp+00eh] ; 8b 46 0e
push ax ; 50
- mov ax, word [bp+012h] ; 8b 46 12
+ mov ax, word [bp+010h] ; 8b 46 10
push ax ; 50
- mov ax, word [bp+00eh] ; 8b 46 0e
+ mov ax, word [bp+00ch] ; 8b 46 0c
push ax ; 50
- mov ax, word [bp+014h] ; 8b 46 14
+ mov ax, word [bp+012h] ; 8b 46 12
push ax ; 50
- push 005c9h ; 68 c9 05
+ push 0063bh ; 68 3b 06
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 88 c6
+ call 01922h ; e8 ea c5
add sp, strict byte 0000ch ; 83 c4 0c
- leave ; c9
+ lea sp, [bp-002h] ; 8d 66 fe
pop di ; 5f
+ pop bp ; 5d
retn ; c3
- and word [bp+di+045h], dx ; 21 53 45
- push bx ; 53
- jc short 052c0h ; 72 53
- jc short 052c2h ; 72 53
- jc short 052c4h ; 72 53
- dec dx ; 4a
- push bp ; 55
- js short 052cbh ; 78 56
- js short 052cdh ; 78 56
- arpl word [di+055h], dx ; 63 55 55
+set_geom_lba_: ; 0xf5341 LB 0x9e
push si ; 56
- js short 052d3h ; 78 56
- js short 052d5h ; 78 56
- push bp ; 55
- push si ; 56
- push bp ; 55
+ push di ; 57
+ enter 00004h, 000h ; c8 04 00 00
+ mov si, ax ; 89 c6
+ mov es, dx ; 8e c2
+ mov word [bp-004h], bx ; 89 5e fc
+ mov word [bp-002h], cx ; 89 4e fe
+ xor ax, ax ; 31 c0
+ mov dx, strict word 0007eh ; ba 7e 00
+ mov di, 000ffh ; bf ff 00
+ xor bx, bx ; 31 db
+ jmp short 05362h ; eb 05
+ cmp bx, strict byte 00004h ; 83 fb 04
+ jnl short 05378h ; 7d 16
+ cmp dx, word [bp-002h] ; 3b 56 fe
+ jnbe short 0536eh ; 77 07
+ jne short 05371h ; 75 08
+ cmp ax, word [bp-004h] ; 3b 46 fc
+ jc short 05371h ; 72 03
+ inc di ; 47
+ shr di, 1 ; d1 ef
+ shr dx, 1 ; d1 ea
+ rcr ax, 1 ; d1 d8
+ inc bx ; 43
+ jmp short 0535dh ; eb e5
+ mov ax, di ; 89 f8
+ xor dx, dx ; 31 d2
+ mov bx, strict word 0003fh ; bb 3f 00
+ xor cx, cx ; 31 c9
+ call 09459h ; e8 d5 40
+ mov bx, ax ; 89 c3
+ mov cx, dx ; 89 d1
+ mov ax, word [bp-004h] ; 8b 46 fc
+ mov dx, word [bp-002h] ; 8b 56 fe
+ call 09420h ; e8 8f 40
+ mov word [es:si+002h], ax ; 26 89 44 02
+ cmp ax, 00400h ; 3d 00 04
+ jbe short 053a0h ; 76 06
+ mov word [es:si+002h], 00400h ; 26 c7 44 02 00 04
+ mov word [es:si], di ; 26 89 3c
+ mov word [es:si+004h], strict word 0003fh ; 26 c7 44 04 3f 00
+ leave ; c9
+ pop di ; 5f
+ pop si ; 5e
+ retn ; c3
+ imul dx, word [si-071h], 0bc54h ; 69 54 8f 54 bc
+ push sp ; 54
+ mov sp, 0bc54h ; bc 54 bc
+ push sp ; 54
+ xchg sp, ax ; 94
push si ; 56
- js short 052dbh ; 78 56
- js short 052ddh ; 78 56
- fst dword [di+055h] ; d9 55 55
+ retn 0c257h ; c2 57 c2
+ push di ; 57
+ lodsw ; ad
push si ; 56
- js short 052e3h ; 78 56
- js short 052e5h ; 78 56
+ lahf ; 9f
+ push di ; 57
+ retn 0c257h ; c2 57 c2
+ push di ; 57
+ lahf ; 9f
+ push di ; 57
+ lahf ; 9f
+ push di ; 57
+ retn 0c257h ; c2 57 c2
+ push di ; 57
+ and dx, word [bx-061h] ; 23 57 9f
+ push di ; 57
+ retn 0c257h ; c2 57 c2
+ push di ; 57
+ lahf ; 9f
+ push di ; 57
+ push bx ; 53
+ push di ; 57
+ retn 0c257h ; c2 57 c2
+ push di ; 57
+ db 0c2h
+ push di ; 57
+_int13_harddisk: ; 0xf53df LB 0x441
push bp ; 55
- push si ; 56
- or word [bp+078h], dx ; 09 56 78
- push si ; 56
- js short 052edh ; 78 56
- js short 052efh ; 78 56
-_int13_harddisk: ; 0xf5299 LB 0x43c
- enter 00010h, 000h ; c8 10 00 00
+ mov bp, sp ; 89 e5
+ sub sp, strict byte 00010h ; 83 ec 10
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 76 c3
+ call 0161ch ; e8 2e c2
mov si, 00122h ; be 22 01
mov word [bp-004h], ax ; 89 46 fc
xor bx, bx ; 31 db
mov dx, 0008eh ; ba 8e 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 57 c3
+ call 0160eh ; e8 0f c2
mov ax, word [bp+00eh] ; 8b 46 0e
xor ah, ah ; 30 e4
cmp ax, 00080h ; 3d 80 00
- jc short 052c6h ; 72 05
+ jc short 0540eh ; 72 05
cmp ax, 00090h ; 3d 90 00
- jc short 052e4h ; 72 1e
+ jc short 0542ch ; 72 1e
mov ax, word [bp+00eh] ; 8b 46 0e
xor ah, ah ; 30 e4
push ax ; 50
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 005ech ; 68 ec 05
- push 005fbh ; 68 fb 05
+ push 0065eh ; 68 5e 06
+ push 0066dh ; 68 6d 06
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 0b c6
+ call 01922h ; e8 fc c4
add sp, strict byte 0000ah ; 83 c4 0a
- jmp near 05693h ; e9 af 03
+ jmp near 057ddh ; e9 b1 03
mov ax, word [bp+00eh] ; 8b 46 0e
xor ah, ah ; 30 e4
mov es, [bp-004h] ; 8e 46 fc
@@ -7320,35 +7449,36 @@ _int13_harddisk: ; 0xf5299 LB 0x43c
mov dl, byte [es:bx+0011fh] ; 26 8a 97 1f 01
mov byte [bp-002h], dl ; 88 56 fe
cmp dl, 010h ; 80 fa 10
- jc short 0530dh ; 72 10
+ jc short 05455h ; 72 10
push ax ; 50
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 005ech ; 68 ec 05
- push 00626h ; 68 26 06
- jmp short 052d9h ; eb cc
+ push 0065eh ; 68 5e 06
+ push 00698h ; 68 98 06
+ jmp short 05421h ; eb cc
mov bx, word [bp+016h] ; 8b 5e 16
shr bx, 008h ; c1 eb 08
cmp bx, strict byte 00018h ; 83 fb 18
- jnbe near 05678h ; 0f 87 5e 03
+ jnbe near 057c2h ; 0f 87 60 03
add bx, bx ; 01 db
- jmp word [cs:bx+05267h] ; 2e ff a7 67 52
+ jmp word [cs:bx+053adh] ; 2e ff a7 ad 53
cmp byte [bp-002h], 008h ; 80 7e fe 08
- jnc near 05330h ; 0f 83 07 00
+ jnc near 05478h ; 0f 83 07 00
movzx ax, byte [bp-002h] ; 0f b6 46 fe
- call 01be6h ; e8 b6 c8
+ call 01c21h ; e8 a9 c7
mov byte [bp+017h], 000h ; c6 46 17 00
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 cf c2
+ call 0160eh ; e8 87 c1
and byte [bp+01ch], 0feh ; 80 66 1c fe
- leave ; c9
+ mov sp, bp ; 89 ec
+ pop bp ; 5d
retn ; c3
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 b2 c2
+ call 01600h ; e8 68 c1
mov cl, al ; 88 c1
mov dx, word [bp+016h] ; 8b 56 16
xor dh, dh ; 30 f6
@@ -7359,10 +7489,10 @@ _int13_harddisk: ; 0xf5299 LB 0x43c
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 a3 c2
+ call 0160eh ; e8 59 c1
test cl, cl ; 84 c9
- je short 05334h ; 74 c5
- jmp near 056afh ; e9 3d 03
+ je short 0547ch ; 74 c3
+ jmp near 057f9h ; e9 3d 03
mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
mov word [bp-00ch], ax ; 89 46 f4
@@ -7382,22 +7512,22 @@ _int13_harddisk: ; 0xf5299 LB 0x43c
mov word [bp-008h], ax ; 89 46 f8
mov ax, word [bp-00ch] ; 8b 46 f4
cmp ax, 00080h ; 3d 80 00
- jnbe short 053adh ; 77 04
+ jnbe short 054f7h ; 77 04
test ax, ax ; 85 c0
- jne short 053d0h ; 75 23
- mov bx, 00cd6h ; bb d6 0c
+ jne short 0551ah ; 75 23
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 f6 c4
+ call 018e1h ; e8 df c3
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 005ech ; 68 ec 05
- push 00658h ; 68 58 06
+ push 0065eh ; 68 5e 06
+ push 006cah ; 68 ca 06
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 1f c5
+ call 01922h ; e8 0e c4
add sp, strict byte 00008h ; 83 c4 08
- jmp near 05693h ; e9 c3 02
+ jmp near 057ddh ; e9 c3 02
movzx ax, byte [bp-002h] ; 0f b6 46 fe
imul ax, ax, strict byte 00018h ; 6b c0 18
mov es, [bp-004h] ; 8e 46 fc
@@ -7408,16 +7538,16 @@ _int13_harddisk: ; 0xf5299 LB 0x43c
mov dx, word [es:bx+02ah] ; 26 8b 57 2a
mov word [bp-00ah], dx ; 89 56 f6
cmp di, ax ; 39 c7
- jnc short 053fdh ; 73 0c
+ jnc short 05547h ; 73 0c
cmp cx, word [bp-008h] ; 3b 4e f8
- jbe short 053fdh ; 76 07
+ jbe short 05547h ; 76 07
mov ax, word [bp-006h] ; 8b 46 fa
cmp ax, dx ; 39 d0
- jbe short 0542bh ; 76 2e
- mov bx, 00cd6h ; bb d6 0c
+ jbe short 05575h ; 76 2e
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 a6 c4
+ call 018e1h ; e8 8f c3
push dword [bp-008h] ; 66 ff 76 f8
push di ; 57
mov ax, word [bp+012h] ; 8b 46 12
@@ -7426,112 +7556,295 @@ _int13_harddisk: ; 0xf5299 LB 0x43c
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 005ech ; 68 ec 05
- push 00680h ; 68 80 06
+ push 0065eh ; 68 5e 06
+ push 006f2h ; 68 f2 06
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 c4 c4
+ call 01922h ; e8 b3 c3
add sp, strict byte 00010h ; 83 c4 10
- jmp near 05693h ; e9 68 02
+ jmp near 057ddh ; e9 68 02
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
cmp ax, strict word 00004h ; 3d 04 00
- jne short 05439h ; 75 03
- jmp near 05330h ; e9 f7 fe
+ jne short 05583h ; 75 03
+ jmp near 05478h ; e9 f5 fe
movzx bx, byte [bp-002h] ; 0f b6 5e fe
imul bx, bx, strict byte 00018h ; 6b db 18
mov es, [bp-004h] ; 8e 46 fc
add bx, si ; 01 f3
cmp cx, word [es:bx+02ch] ; 26 3b 4f 2c
- jne short 0545ah ; 75 0f
+ jne short 055a4h ; 75 0f
mov ax, word [es:bx+030h] ; 26 8b 47 30
cmp ax, word [bp-00ah] ; 3b 46 f6
- jne short 0545ah ; 75 06
+ jne short 055a4h ; 75 06
cmp byte [bp-002h], 008h ; 80 7e fe 08
- jc short 0548ah ; 72 30
+ jc short 055d4h ; 72 30
mov ax, di ; 89 f8
xor dx, dx ; 31 d2
mov bx, cx ; 89 cb
xor cx, cx ; 31 c9
- call 08c79h ; e8 14 38
+ call 09459h ; e8 aa 3e
xor bx, bx ; 31 db
add ax, word [bp-008h] ; 03 46 f8
adc dx, bx ; 11 da
mov bx, word [bp-00ah] ; 8b 5e f6
xor cx, cx ; 31 c9
- call 08c79h ; e8 05 38
+ call 09459h ; e8 9b 3e
xor bx, bx ; 31 db
add ax, word [bp-006h] ; 03 46 fa
- db 011h, 0dah, 005h, 0ffh, 0ffh, 089h, 046h, 0f0h, 083h, 0d2h, 0ffh, 089h, 056h, 0f2h, 089h, 05eh
- db 0fah, 08eh, 046h, 0fch, 066h, 026h, 0c7h, 044h, 014h, 000h, 000h, 000h, 000h, 026h, 0c7h, 044h
- db 018h, 000h, 000h, 08bh, 046h, 0f0h, 026h, 089h, 004h, 08bh, 046h, 0f2h, 026h, 089h, 044h, 002h
- db 08bh, 046h, 010h, 08bh, 056h, 006h, 026h, 089h, 044h, 004h, 026h, 089h, 054h, 006h, 08bh, 046h
- db 0f4h, 026h, 089h, 044h, 00ah, 026h, 0c7h, 044h, 00ch, 000h, 002h, 026h, 089h, 07ch, 00eh, 08bh
- db 046h, 0f8h, 026h, 089h, 044h, 010h, 08bh, 046h, 0fah, 026h, 089h, 044h, 012h, 08ah, 046h, 0feh
- db 026h, 088h, 044h, 008h, 00fh, 0b6h, 046h, 0feh, 06bh, 0c0h, 018h, 089h, 0f3h, 001h, 0c3h, 026h
- db 00fh, 0b6h, 047h, 01eh, 089h, 0c3h, 0c1h, 0e3h, 002h, 08bh, 046h, 016h, 0c1h, 0e8h, 008h, 001h
- db 0c0h, 001h, 0c3h, 006h, 056h, 0ffh, 097h, 0fch, 0ffh, 089h, 0c2h, 08bh, 046h, 016h, 030h, 0c0h
- db 08eh, 046h, 0fch, 026h, 08bh, 05ch, 014h, 009h, 0c3h, 089h, 05eh, 016h, 084h, 0d2h, 00fh, 084h
- db 015h, 0feh, 0bbh, 0d6h, 00ch, 08ch, 0d9h, 0b8h, 004h, 000h, 0e8h, 088h, 0c3h, 00fh, 0b6h, 0c2h
- db 050h, 08bh, 046h, 016h, 0c1h, 0e8h, 008h, 050h, 068h, 0ech, 005h, 068h, 0c7h, 006h, 06ah, 004h
- db 0e8h, 0adh, 0c3h, 083h, 0c4h, 00ah, 08bh, 046h, 016h, 030h, 0e4h, 080h, 0cch, 00ch, 0e9h, 051h
- db 001h, 0bbh, 0d6h, 00ch, 08ch, 0d9h, 0b8h, 004h, 000h, 0e8h, 059h, 0c3h, 068h, 0e8h, 006h, 06ah
- db 004h, 0e8h, 08ch, 0c3h, 083h, 0c4h, 004h, 0e9h, 0cdh, 0fdh, 00fh, 0b6h, 046h, 0feh, 06bh, 0c0h
- db 018h, 08eh, 046h, 0fch, 089h, 0f3h, 001h, 0c3h, 026h, 08bh, 07fh, 028h, 026h, 08bh, 04fh, 026h
- db 026h, 08bh, 047h, 02ah, 089h, 046h, 0f6h, 026h, 00fh, 0b6h, 084h, 09eh, 001h, 089h, 046h, 0f4h
- db 0c6h, 046h, 016h, 000h, 08bh, 056h, 014h, 030h, 0f6h, 04fh, 089h, 0f8h, 030h, 0e4h, 0c1h, 0e0h
- db 008h, 009h, 0c2h, 089h, 056h, 014h, 0c1h, 0efh, 002h, 081h, 0e7h, 0c0h, 000h, 08bh, 046h, 0f6h
- db 030h, 0e4h, 024h, 03fh, 009h, 0c7h, 089h, 0d0h, 030h, 0d0h, 009h, 0f8h, 089h, 046h, 014h, 08bh
- db 056h, 012h, 030h, 0f6h, 089h, 0c8h, 0c1h, 0e0h, 008h, 02dh, 000h, 001h, 009h, 0c2h, 089h, 056h
- db 012h, 089h, 0d0h, 030h, 0d0h, 08bh, 056h, 0f4h, 009h, 0c2h, 089h, 056h, 012h, 0e9h, 057h, 0fdh
- db 00fh, 0b6h, 046h, 0feh, 099h, 02bh, 0c2h, 0d1h, 0f8h, 06bh, 0c0h, 006h, 08eh, 046h, 0fch, 001h
- db 0c6h, 026h, 08bh, 094h, 0c2h, 001h, 083h, 0c2h, 007h, 0ech, 02ah, 0e4h, 024h, 0c0h, 03ch, 040h
- db 075h, 003h, 0e9h, 032h, 0fdh, 08bh, 046h, 016h, 030h, 0e4h, 080h, 0cch, 0aah, 0e9h, 092h, 000h
- db 00fh, 0b6h, 046h, 0feh, 06bh, 0c0h, 018h, 08eh, 046h, 0fch, 001h, 0c6h, 026h, 08bh, 07ch, 02eh
- db 026h, 08bh, 044h, 02ch, 089h, 046h, 0f8h, 026h, 08bh, 044h, 030h, 089h, 046h, 0fah, 089h, 0f8h
- db 031h, 0d2h, 08bh, 05eh, 0f8h, 031h, 0c9h, 0e8h, 046h, 036h, 08bh, 05eh, 0fah, 031h, 0c9h, 0e8h
- db 03eh, 036h, 089h, 046h, 0f0h, 089h, 056h, 0f2h, 089h, 056h, 014h, 089h, 046h, 012h, 08bh, 046h
- db 016h, 030h, 0e4h, 080h, 0cch, 003h, 089h, 046h, 016h, 0e9h, 0dfh, 0fch, 0bbh, 0d6h, 00ch, 08ch
- db 0d9h, 0b8h, 004h, 000h, 0e8h, 04eh, 0c2h, 08bh, 046h, 016h, 0c1h, 0e8h, 008h, 050h, 068h, 0ech
- db 005h, 068h, 002h, 007h, 06ah, 004h, 0e8h, 077h, 0c2h, 083h, 0c4h, 008h, 0e9h, 0b8h, 0fch, 0bbh
- db 0d6h, 00ch, 08ch, 0d9h, 0b8h, 004h, 000h, 0e8h, 02bh, 0c2h, 08bh, 046h, 016h, 0c1h, 0e8h, 008h
- db 050h, 068h, 0ech, 005h, 068h, 035h, 007h, 0e9h, 032h, 0fdh, 08bh, 046h, 016h, 030h, 0e4h, 080h
- db 0cch, 001h, 089h, 046h, 016h, 08bh, 05eh, 016h, 0c1h, 0ebh, 008h, 030h, 0ffh, 0bah, 074h, 000h
- db 0b8h, 040h, 000h, 0e8h, 05fh, 0bfh, 080h, 04eh, 01ch, 001h, 0c9h, 0c3h, 06eh, 057h, 086h, 057h
- db 086h, 057h, 086h, 057h, 035h, 05bh, 0c9h, 058h, 086h, 057h, 0cfh, 058h, 035h, 05bh, 082h, 05bh
- db 082h, 05bh, 082h, 05bh, 082h, 05bh, 04ah, 05bh, 082h, 05bh, 082h, 05bh
-_int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
- enter 00028h, 000h ; c8 28 00 00
+ adc dx, bx ; 11 da
+ add ax, strict word 0ffffh ; 05 ff ff
+ mov word [bp-010h], ax ; 89 46 f0
+ adc dx, strict byte 0ffffh ; 83 d2 ff
+ mov word [bp-00eh], dx ; 89 56 f2
+ mov word [bp-006h], bx ; 89 5e fa
+ mov es, [bp-004h] ; 8e 46 fc
+ db 066h, 026h, 0c7h, 044h, 014h, 000h, 000h, 000h, 000h
+ ; mov dword [es:si+014h], strict dword 000000000h ; 66 26 c7 44 14 00 00 00 00
+ mov word [es:si+018h], strict word 00000h ; 26 c7 44 18 00 00
+ mov ax, word [bp-010h] ; 8b 46 f0
+ mov word [es:si], ax ; 26 89 04
+ mov ax, word [bp-00eh] ; 8b 46 f2
+ mov word [es:si+002h], ax ; 26 89 44 02
+ mov ax, word [bp+010h] ; 8b 46 10
+ mov dx, word [bp+006h] ; 8b 56 06
+ mov word [es:si+004h], ax ; 26 89 44 04
+ mov word [es:si+006h], dx ; 26 89 54 06
+ mov ax, word [bp-00ch] ; 8b 46 f4
+ mov word [es:si+00ah], ax ; 26 89 44 0a
+ mov word [es:si+00ch], 00200h ; 26 c7 44 0c 00 02
+ mov word [es:si+00eh], di ; 26 89 7c 0e
+ mov ax, word [bp-008h] ; 8b 46 f8
+ mov word [es:si+010h], ax ; 26 89 44 10
+ mov ax, word [bp-006h] ; 8b 46 fa
+ mov word [es:si+012h], ax ; 26 89 44 12
+ mov al, byte [bp-002h] ; 8a 46 fe
+ mov byte [es:si+008h], al ; 26 88 44 08
+ movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ mov bx, si ; 89 f3
+ add bx, ax ; 01 c3
+ movzx ax, byte [es:bx+01eh] ; 26 0f b6 47 1e
+ mov bx, ax ; 89 c3
+ sal bx, 002h ; c1 e3 02
+ mov ax, word [bp+016h] ; 8b 46 16
+ shr ax, 008h ; c1 e8 08
+ add ax, ax ; 01 c0
+ add bx, ax ; 01 c3
+ push ES ; 06
+ push si ; 56
+ call word [word bx+0007eh] ; ff 97 7e 00
+ mov dx, ax ; 89 c2
+ mov ax, word [bp+016h] ; 8b 46 16
+ xor al, al ; 30 c0
+ mov es, [bp-004h] ; 8e 46 fc
+ mov bx, word [es:si+014h] ; 26 8b 5c 14
+ or bx, ax ; 09 c3
+ mov word [bp+016h], bx ; 89 5e 16
+ test dl, dl ; 84 d2
+ je near 05478h ; 0f 84 13 fe
+ mov bx, 00dbah ; bb ba 0d
+ mov cx, ds ; 8c d9
+ mov ax, strict word 00004h ; b8 04 00
+ call 018e1h ; e8 71 c2
+ movzx ax, dl ; 0f b6 c2
+ push ax ; 50
+ mov ax, word [bp+016h] ; 8b 46 16
+ shr ax, 008h ; c1 e8 08
+ push ax ; 50
+ push 0065eh ; 68 5e 06
+ push 00739h ; 68 39 07
+ push strict byte 00004h ; 6a 04
+ call 01922h ; e8 9c c2
+ add sp, strict byte 0000ah ; 83 c4 0a
+ mov ax, word [bp+016h] ; 8b 46 16
+ xor ah, ah ; 30 e4
+ or ah, 00ch ; 80 cc 0c
+ jmp near 057e5h ; e9 51 01
+ mov bx, 00dbah ; bb ba 0d
+ mov cx, ds ; 8c d9
+ mov ax, strict word 00004h ; b8 04 00
+ call 018e1h ; e8 42 c2
+ push 0075ah ; 68 5a 07
+ push strict byte 00004h ; 6a 04
+ call 01922h ; e8 7b c2
+ add sp, strict byte 00004h ; 83 c4 04
+ jmp near 05478h ; e9 cb fd
+ movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ mov es, [bp-004h] ; 8e 46 fc
+ mov bx, si ; 89 f3
+ add bx, ax ; 01 c3
+ mov di, word [es:bx+028h] ; 26 8b 7f 28
+ mov cx, word [es:bx+026h] ; 26 8b 4f 26
+ mov ax, word [es:bx+02ah] ; 26 8b 47 2a
+ mov word [bp-00ah], ax ; 89 46 f6
+ movzx ax, byte [es:si+0019eh] ; 26 0f b6 84 9e 01
+ mov word [bp-00ch], ax ; 89 46 f4
+ mov byte [bp+016h], 000h ; c6 46 16 00
+ mov dx, word [bp+014h] ; 8b 56 14
+ xor dh, dh ; 30 f6
+ dec di ; 4f
+ mov ax, di ; 89 f8
+ xor ah, ah ; 30 e4
+ sal ax, 008h ; c1 e0 08
+ or dx, ax ; 09 c2
+ mov word [bp+014h], dx ; 89 56 14
+ shr di, 002h ; c1 ef 02
+ and di, 000c0h ; 81 e7 c0 00
+ mov ax, word [bp-00ah] ; 8b 46 f6
+ xor ah, ah ; 30 e4
+ and AL, strict byte 03fh ; 24 3f
+ or di, ax ; 09 c7
+ mov ax, dx ; 89 d0
+ xor al, dl ; 30 d0
+ or ax, di ; 09 f8
+ mov word [bp+014h], ax ; 89 46 14
+ mov dx, word [bp+012h] ; 8b 56 12
+ xor dh, dh ; 30 f6
+ mov ax, cx ; 89 c8
+ sal ax, 008h ; c1 e0 08
+ sub ax, 00100h ; 2d 00 01
+ or dx, ax ; 09 c2
+ mov word [bp+012h], dx ; 89 56 12
+ mov ax, dx ; 89 d0
+ xor al, dl ; 30 d0
+ mov dx, word [bp-00ch] ; 8b 56 f4
+ or dx, ax ; 09 c2
+ mov word [bp+012h], dx ; 89 56 12
+ jmp near 05478h ; e9 55 fd
+ movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ cwd ; 99
+ db 02bh, 0c2h
+ ; sub ax, dx ; 2b c2
+ sar ax, 1 ; d1 f8
+ imul ax, ax, strict byte 00006h ; 6b c0 06
+ mov es, [bp-004h] ; 8e 46 fc
+ add si, ax ; 01 c6
+ mov dx, word [es:si+001c2h] ; 26 8b 94 c2 01
+ add dx, strict byte 00007h ; 83 c2 07
+ in AL, DX ; ec
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4
+ and AL, strict byte 0c0h ; 24 c0
+ cmp AL, strict byte 040h ; 3c 40
+ jne short 05748h ; 75 03
+ jmp near 05478h ; e9 30 fd
+ mov ax, word [bp+016h] ; 8b 46 16
+ xor ah, ah ; 30 e4
+ or ah, 0aah ; 80 cc aa
+ jmp near 057e5h ; e9 92 00
+ movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ mov es, [bp-004h] ; 8e 46 fc
+ add si, ax ; 01 c6
+ mov di, word [es:si+02eh] ; 26 8b 7c 2e
+ mov ax, word [es:si+02ch] ; 26 8b 44 2c
+ mov word [bp-008h], ax ; 89 46 f8
+ mov ax, word [es:si+030h] ; 26 8b 44 30
+ mov word [bp-006h], ax ; 89 46 fa
+ mov ax, di ; 89 f8
+ xor dx, dx ; 31 d2
+ mov bx, word [bp-008h] ; 8b 5e f8
+ xor cx, cx ; 31 c9
+ call 09459h ; e8 dc 3c
+ mov bx, word [bp-006h] ; 8b 5e fa
+ xor cx, cx ; 31 c9
+ call 09459h ; e8 d4 3c
+ mov word [bp-010h], ax ; 89 46 f0
+ mov word [bp-00eh], dx ; 89 56 f2
+ mov word [bp+014h], dx ; 89 56 14
+ mov word [bp+012h], ax ; 89 46 12
+ mov ax, word [bp+016h] ; 8b 46 16
+ xor ah, ah ; 30 e4
+ or ah, 003h ; 80 cc 03
+ mov word [bp+016h], ax ; 89 46 16
+ jmp near 0547ch ; e9 dd fc
+ mov bx, 00dbah ; bb ba 0d
+ mov cx, ds ; 8c d9
+ mov ax, strict word 00004h ; b8 04 00
+ call 018e1h ; e8 37 c1
+ mov ax, word [bp+016h] ; 8b 46 16
+ shr ax, 008h ; c1 e8 08
+ push ax ; 50
+ push 0065eh ; 68 5e 06
+ push 00774h ; 68 74 07
+ push strict byte 00004h ; 6a 04
+ call 01922h ; e8 66 c1
+ add sp, strict byte 00008h ; 83 c4 08
+ jmp near 05478h ; e9 b6 fc
+ mov bx, 00dbah ; bb ba 0d
+ mov cx, ds ; 8c d9
+ mov ax, strict word 00004h ; b8 04 00
+ call 018e1h ; e8 14 c1
+ mov ax, word [bp+016h] ; 8b 46 16
+ shr ax, 008h ; c1 e8 08
+ push ax ; 50
+ push 0065eh ; 68 5e 06
+ push 007a7h ; 68 a7 07
+ jmp near 0550fh ; e9 32 fd
+ mov ax, word [bp+016h] ; 8b 46 16
+ xor ah, ah ; 30 e4
+ or ah, 001h ; 80 cc 01
+ mov word [bp+016h], ax ; 89 46 16
+ mov bx, word [bp+016h] ; 8b 5e 16
+ shr bx, 008h ; c1 eb 08
+ xor bh, bh ; 30 ff
+ mov dx, strict word 00074h ; ba 74 00
+ mov ax, strict word 00040h ; b8 40 00
+ call 0160eh ; e8 15 be
+ or byte [bp+01ch], 001h ; 80 4e 1c 01
+ jmp near 0548bh ; e9 8b fc
+ mov bx, 0d358h ; bb 58 d3
+ pop ax ; 58
+ rcr word [bx+si-02dh], CL ; d3 58 d3
+ pop ax ; 58
+ db 082h, 05ch, 016h, 05ah
+ ; sbb byte [si+016h], 05ah ; 82 5c 16 5a
+ rcr word [bx+si+01ch], CL ; d3 58 1c
+ pop dx ; 5a
+ db 082h, 05ch, 0d1h, 05ch
+ ; sbb byte [si-02fh], 05ch ; 82 5c d1 5c
+ rcr word [si-02fh], 1 ; d1 5c d1
+ pop sp ; 5c
+ rcr word [si-067h], 1 ; d1 5c 99
+ pop sp ; 5c
+ rcr word [si-02fh], 1 ; d1 5c d1
+ pop sp ; 5c
+_int13_harddisk_ext: ; 0xf5820 LB 0x4cc
+ push bp ; 55
+ mov bp, sp ; 89 e5
+ sub sp, strict byte 00028h ; 83 ec 28
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 3a bf
+ call 0161ch ; e8 ed bd
mov word [bp-014h], ax ; 89 46 ec
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 2e bf
+ call 0161ch ; e8 e1 bd
mov si, 00122h ; be 22 01
mov word [bp-026h], ax ; 89 46 da
xor bx, bx ; 31 db
mov dx, 0008eh ; ba 8e 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 0f bf
+ call 0160eh ; e8 c2 bd
mov ax, word [bp+00eh] ; 8b 46 0e
xor ah, ah ; 30 e4
cmp ax, 00080h ; 3d 80 00
- jc short 0570eh ; 72 05
+ jc short 0585bh ; 72 05
cmp ax, 00090h ; 3d 90 00
- jc short 0572ch ; 72 1e
+ jc short 05879h ; 72 1e
mov ax, word [bp+00eh] ; 8b 46 0e
xor ah, ah ; 30 e4
push ax ; 50
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 00763h ; 68 63 07
- push 005fbh ; 68 fb 05
+ push 007d5h ; 68 d5 07
+ push 0066dh ; 68 6d 06
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 c3 c1
+ call 01922h ; e8 af c0
add sp, strict byte 0000ah ; 83 c4 0a
- jmp near 05b60h ; e9 34 04
+ jmp near 05cafh ; e9 36 04
mov ax, word [bp+00eh] ; 8b 46 0e
xor ah, ah ; 30 e4
mov es, [bp-026h] ; 8e 46 da
@@ -7539,30 +7852,30 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
add bx, ax ; 01 c3
mov cl, byte [es:bx+0011fh] ; 26 8a 8f 1f 01
cmp cl, 010h ; 80 f9 10
- jc short 05752h ; 72 10
+ jc short 0589fh ; 72 10
push ax ; 50
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 00763h ; 68 63 07
- push 00626h ; 68 26 06
- jmp short 05721h ; eb cf
+ push 007d5h ; 68 d5 07
+ push 00698h ; 68 98 06
+ jmp short 0586eh ; eb cf
mov bx, word [bp+016h] ; 8b 5e 16
shr bx, 008h ; c1 eb 08
sub bx, strict byte 00041h ; 83 eb 41
cmp bx, strict byte 0000fh ; 83 fb 0f
- jnbe near 05b82h ; 0f 87 20 04
+ jnbe near 05cd1h ; 0f 87 22 04
add bx, bx ; 01 db
mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
- jmp word [cs:bx+056b5h] ; 2e ff a7 b5 56
+ jmp word [cs:bx+05800h] ; 2e ff a7 00 58
mov word [bp+010h], 0aa55h ; c7 46 10 55 aa
mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 030h ; 80 cc 30
mov word [bp+016h], ax ; 89 46 16
mov word [bp+014h], strict word 00007h ; c7 46 14 07 00
- jmp near 05b39h ; e9 b3 03
+ jmp near 05c86h ; e9 b3 03
mov bx, word [bp+00ah] ; 8b 5e 0a
mov es, [bp+004h] ; 8e 46 04
mov di, bx ; 89 df
@@ -7577,14 +7890,14 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
mov word [bp-00ah], ax ; 89 46 f6
mov ax, word [es:bx+00eh] ; 26 8b 47 0e
or ax, word [bp-00ah] ; 0b 46 f6
- je short 057c7h ; 74 11
+ je short 05914h ; 74 11
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 00763h ; 68 63 07
- push 00776h ; 68 76 07
+ push 007d5h ; 68 d5 07
+ push 007e8h ; 68 e8 07
push strict byte 00007h ; 6a 07
- jmp short 05811h ; eb 4a
+ jmp short 0595eh ; eb 4a
mov es, [bp-010h] ; 8e 46 f0
mov ax, word [es:di+008h] ; 26 8b 45 08
mov word [bp-00ah], ax ; 89 46 f6
@@ -7596,31 +7909,31 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
add bx, dx ; 01 d3
mov ch, byte [es:bx+01eh] ; 26 8a 6f 1e
cmp ax, word [es:bx+034h] ; 26 3b 47 34
- jnbe short 057f7h ; 77 0b
- jne short 0581ah ; 75 2c
+ jnbe short 05944h ; 77 0b
+ jne short 05967h ; 75 2c
mov dx, word [bp-00ah] ; 8b 56 f6
cmp dx, word [es:bx+032h] ; 26 3b 57 32
- jc short 0581ah ; 72 23
- mov bx, 00cd6h ; bb d6 0c
+ jc short 05967h ; 72 23
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 ac c0
+ call 018e1h ; e8 92 bf
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 00763h ; 68 63 07
- push 0079fh ; 68 9f 07
+ push 007d5h ; 68 d5 07
+ push 00811h ; 68 11 08
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 d5 c0
+ call 01922h ; e8 c1 bf
add sp, strict byte 00008h ; 83 c4 08
- jmp near 05b60h ; e9 46 03
+ jmp near 05cafh ; e9 48 03
mov dx, word [bp+016h] ; 8b 56 16
shr dx, 008h ; c1 ea 08
mov word [bp-00ch], dx ; 89 56 f4
cmp dx, strict byte 00044h ; 83 fa 44
- je near 05b35h ; 0f 84 0b 03
+ je near 05c82h ; 0f 84 0b 03
cmp dx, strict byte 00047h ; 83 fa 47
- je near 05b35h ; 0f 84 04 03
+ je near 05c82h ; 0f 84 04 03
mov es, [bp-026h] ; 8e 46 da
db 066h, 026h, 0c7h, 044h, 014h, 000h, 000h, 000h, 000h
; mov dword [es:si+014h], strict dword 000000000h ; 66 26 c7 44 14 00 00 00 00
@@ -7644,7 +7957,7 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
add bx, ax ; 01 c3
push ES ; 06
push si ; 56
- call word [bx-00084h] ; ff 97 7c ff
+ call word [word bx-00002h] ; ff 97 fe ff
mov dx, ax ; 89 c2
mov es, [bp-026h] ; 8e 46 da
mov ax, word [es:si+014h] ; 26 8b 44 14
@@ -7652,25 +7965,25 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
mov es, [bp-010h] ; 8e 46 f0
mov word [es:di+002h], ax ; 26 89 45 02
test dl, dl ; 84 d2
- je near 05b35h ; 0f 84 97 02
- mov bx, 00cd6h ; bb d6 0c
+ je near 05c82h ; 0f 84 97 02
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 05 c0
+ call 018e1h ; e8 eb be
movzx ax, dl ; 0f b6 c2
push ax ; 50
push word [bp-00ch] ; ff 76 f4
- push 00763h ; 68 63 07
- push 006c7h ; 68 c7 06
+ push 007d5h ; 68 d5 07
+ push 00739h ; 68 39 07
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 2e c0
+ call 01922h ; e8 1a bf
add sp, strict byte 0000ah ; 83 c4 0a
mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 00ch ; 80 cc 0c
- jmp near 05b68h ; e9 9f 02
+ jmp near 05cb7h ; e9 a1 02
or ah, 0b2h ; 80 cc b2
- jmp near 05b68h ; e9 99 02
+ jmp near 05cb7h ; e9 9b 02
mov bx, word [bp+00ah] ; 8b 5e 0a
mov ax, word [bp+004h] ; 8b 46 04
mov word [bp-006h], ax ; 89 46 fa
@@ -7680,8 +7993,8 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
mov ax, word [es:di] ; 26 8b 05
mov word [bp-00eh], ax ; 89 46 f2
cmp ax, strict word 0001ah ; 3d 1a 00
- jc near 05b60h ; 0f 82 74 02
- jc near 05973h ; 0f 82 83 00
+ jc near 05cafh ; 0f 82 76 02
+ jc near 05ac0h ; 0f 82 83 00
movzx ax, cl ; 0f b6 c1
imul ax, ax, strict byte 00018h ; 6b c0 18
mov es, [bp-026h] ; 8e 46 da
@@ -7719,7 +8032,7 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
db 066h, 026h, 0c7h, 045h, 014h, 000h, 000h, 000h, 000h
; mov dword [es:di+014h], strict dword 000000000h ; 66 26 c7 45 14 00 00 00 00
cmp word [bp-00eh], strict byte 0001eh ; 83 7e f2 1e
- jc near 05a7fh ; 0f 82 04 01
+ jc near 05bcch ; 0f 82 04 01
mov es, [bp-004h] ; 8e 46 fc
mov word [es:bx], strict word 0001eh ; 26 c7 07 1e 00
mov ax, word [bp-014h] ; 8b 46 ec
@@ -7745,9 +8058,9 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
mov ah, byte [es:di+022h] ; 26 8a 65 22
mov al, byte [es:di+023h] ; 26 8a 45 23
test al, al ; 84 c0
- jne short 059d1h ; 75 04
+ jne short 05b1eh ; 75 04
xor dx, dx ; 31 d2
- jmp short 059d4h ; eb 03
+ jmp short 05b21h ; eb 03
mov dx, strict word 00008h ; ba 08 00
or dl, 010h ; 80 ca 10
mov word [bp-008h], dx ; 89 56 f8
@@ -7762,9 +8075,9 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
movzx dx, ah ; 0f b6 d4
or word [bp-008h], dx ; 09 56 f8
cmp AL, strict byte 003h ; 3c 03
- jne short 059fah ; 75 05
+ jne short 05b47h ; 75 05
mov ax, strict word 00003h ; b8 03 00
- jmp short 059fch ; eb 02
+ jmp short 05b49h ; eb 02
xor ax, ax ; 31 c0
or word [bp-008h], ax ; 09 46 f8
mov ax, word [bp-01ah] ; 8b 46 e6
@@ -7789,21 +8102,21 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
mov byte [es:si+001feh], 011h ; 26 c6 84 fe 01 11
xor ch, ch ; 30 ed
mov byte [bp-002h], ch ; 88 6e fe
- jmp short 05a60h ; eb 06
+ jmp short 05badh ; eb 06
cmp byte [bp-002h], 00fh ; 80 7e fe 0f
- jnc short 05a75h ; 73 15
+ jnc short 05bc2h ; 73 15
movzx dx, byte [bp-002h] ; 0f b6 56 fe
add dx, 00312h ; 81 c2 12 03
mov ax, word [bp-014h] ; 8b 46 ec
- call 01600h ; e8 92 bb
+ call 01600h ; e8 45 ba
add ch, al ; 00 c5
inc byte [bp-002h] ; fe 46 fe
- jmp short 05a5ah ; eb e5
+ jmp short 05ba7h ; eb e5
neg ch ; f6 dd
mov es, [bp-026h] ; 8e 46 da
mov byte [es:si+001ffh], ch ; 26 88 ac ff 01
cmp word [bp-00eh], strict byte 00042h ; 83 7e f2 42
- jc near 05b35h ; 0f 82 ae 00
+ jc near 05c82h ; 0f 82 ae 00
movzx ax, cl ; 0f b6 c1
cwd ; 99
db 02bh, 0c2h
@@ -7821,7 +8134,7 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
; mov dword [es:bx+01eh], strict dword 00024beddh ; 66 26 c7 47 1e dd be 24 00
mov word [es:bx+022h], strict word 00000h ; 26 c7 47 22 00 00
test al, al ; 84 c0
- jne short 05ac7h ; 75 09
+ jne short 05c14h ; 75 09
db 066h, 026h, 0c7h, 047h, 024h, 049h, 053h, 041h, 020h
; mov dword [es:bx+024h], strict dword 020415349h ; 66 26 c7 47 24 49 53 41 20
mov es, [bp-004h] ; 8e 46 fc
@@ -7830,7 +8143,7 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
db 066h, 026h, 0c7h, 047h, 02ch, 020h, 020h, 020h, 020h
; mov dword [es:bx+02ch], strict dword 020202020h ; 66 26 c7 47 2c 20 20 20 20
test al, al ; 84 c0
- jne short 05af3h ; 75 13
+ jne short 05c40h ; 75 13
mov word [es:bx+030h], dx ; 26 89 57 30
db 066h, 026h, 0c7h, 047h, 032h, 000h, 000h, 000h, 000h
; mov dword [es:bx+032h], strict dword 000000000h ; 66 26 c7 47 32 00 00 00 00
@@ -7845,17 +8158,17 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
mov word [es:bx+03eh], strict word 00000h ; 26 c7 47 3e 00 00
xor cl, cl ; 30 c9
mov CH, strict byte 01eh ; b5 1e
- jmp short 05b1ah ; eb 05
+ jmp short 05c67h ; eb 05
cmp ch, 040h ; 80 fd 40
- jnc short 05b2ch ; 73 12
+ jnc short 05c79h ; 73 12
movzx dx, ch ; 0f b6 d5
add dx, word [bp+00ah] ; 03 56 0a
mov ax, word [bp+004h] ; 8b 46 04
- call 01600h ; e8 da ba
+ call 01600h ; e8 8d b9
add cl, al ; 00 c1
db 0feh, 0c5h
; inc ch ; fe c5
- jmp short 05b15h ; eb e9
+ jmp short 05c62h ; eb e9
neg cl ; f6 d9
mov es, [bp-004h] ; 8e 46 fc
mov byte [es:bx+041h], cl ; 26 88 4f 41
@@ -7863,19 +8176,20 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
xor bx, bx ; 31 db
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 ca ba
+ call 0160eh ; e8 7d b9
and byte [bp+01ch], 0feh ; 80 66 1c fe
- leave ; c9
+ mov sp, bp ; 89 ec
+ pop bp ; 5d
retn ; c3
cmp ax, strict word 00006h ; 3d 06 00
- je short 05b35h ; 74 e6
+ je short 05c82h ; 74 e4
cmp ax, strict word 00001h ; 3d 01 00
- jc short 05b60h ; 72 0c
- jbe short 05b35h ; 76 df
+ jc short 05cafh ; 72 0c
+ jbe short 05c82h ; 76 dd
cmp ax, strict word 00003h ; 3d 03 00
- jc short 05b60h ; 72 05
+ jc short 05cafh ; 72 05
cmp ax, strict word 00004h ; 3d 04 00
- jbe short 05b35h ; 76 d5
+ jbe short 05c82h ; 76 d3
mov ax, word [bp+016h] ; 8b 46 16
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
@@ -7885,58 +8199,57 @@ _int13_harddisk_ext: ; 0xf56d5 LB 0x4c8
xor bh, bh ; 30 ff
mov dx, strict word 00074h ; ba 74 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 92 ba
+ call 0160eh ; e8 43 b9
or byte [bp+01ch], 001h ; 80 4e 1c 01
- leave ; c9
- retn ; c3
- mov bx, 00cd6h ; bb d6 0c
+ jmp short 05c95h ; eb c4
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 21 bd
+ call 018e1h ; e8 05 bc
mov ax, word [bp+016h] ; 8b 46 16
shr ax, 008h ; c1 e8 08
push ax ; 50
- push 00763h ; 68 63 07
- push 00735h ; 68 35 07
- jmp near 0580fh ; e9 72 fc
-_int14_function: ; 0xf5b9d LB 0x154
- push si ; 56
+ push 007d5h ; 68 d5 07
+ push 007a7h ; 68 a7 07
+ jmp near 0595ch ; e9 70 fc
+_int14_function: ; 0xf5cec LB 0x155
push bp ; 55
mov bp, sp ; 89 e5
+ push si ; 56
sti ; fb
- mov dx, word [bp+010h] ; 8b 56 10
+ mov dx, word [bp+00eh] ; 8b 56 0e
add dx, dx ; 01 d2
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 6f ba
+ call 0161ch ; e8 20 b9
mov si, ax ; 89 c6
mov bx, ax ; 89 c3
- mov dx, word [bp+010h] ; 8b 56 10
+ mov dx, word [bp+00eh] ; 8b 56 0e
add dx, strict byte 0007ch ; 83 c2 7c
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 43 ba
+ call 01600h ; e8 f4 b8
mov cl, al ; 88 c1
- cmp word [bp+010h], strict byte 00004h ; 83 7e 10 04
- jnc near 05ceah ; 0f 83 23 01
+ cmp word [bp+00eh], strict byte 00004h ; 83 7e 0e 04
+ jnc near 05e37h ; 0f 83 21 01
test si, si ; 85 f6
- jbe near 05ceah ; 0f 86 1d 01
- mov al, byte [bp+015h] ; 8a 46 15
+ jbe near 05e37h ; 0f 86 1b 01
+ mov al, byte [bp+013h] ; 8a 46 13
cmp AL, strict byte 001h ; 3c 01
- jc short 05be5h ; 72 11
- jbe short 05c39h ; 76 63
+ jc short 05d34h ; 72 11
+ jbe short 05d88h ; 76 63
cmp AL, strict byte 003h ; 3c 03
- je near 05cd2h ; 0f 84 f6 00
+ je near 05e20h ; 0f 84 f5 00
cmp AL, strict byte 002h ; 3c 02
- je near 05c87h ; 0f 84 a5 00
- jmp near 05ce3h ; e9 fe 00
+ je near 05dd6h ; 0f 84 a5 00
+ jmp near 05e31h ; e9 fd 00
test al, al ; 84 c0
- jne near 05ce3h ; 0f 85 f8 00
+ jne near 05e31h ; 0f 85 f7 00
lea dx, [bx+003h] ; 8d 57 03
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
or AL, strict byte 080h ; 0c 80
out DX, AL ; ee
- mov al, byte [bp+014h] ; 8a 46 14
+ mov al, byte [bp+012h] ; 8a 46 12
and AL, strict byte 0e0h ; 24 e0
movzx cx, al ; 0f b6 c8
sar cx, 005h ; c1 f9 05
@@ -7947,7 +8260,7 @@ _int14_function: ; 0xf5b9d LB 0x154
shr ax, 008h ; c1 e8 08
lea dx, [bx+001h] ; 8d 57 01
out DX, AL ; ee
- mov al, byte [bp+014h] ; 8a 46 14
+ mov al, byte [bp+012h] ; 8a 46 12
and AL, strict byte 01fh ; 24 1f
lea dx, [bx+003h] ; 8d 57 03
out DX, AL ; ee
@@ -7955,23 +8268,23 @@ _int14_function: ; 0xf5b9d LB 0x154
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+015h], al ; 88 46 15
+ mov byte [bp+013h], al ; 88 46 13
lea dx, [bx+006h] ; 8d 57 06
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+014h], al ; 88 46 14
- jmp near 05cc3h ; e9 97 00
+ mov byte [bp+012h], al ; 88 46 12
+ jmp near 05e12h ; e9 97 00
mov AL, strict byte 017h ; b0 17
mov dx, bx ; 89 da
out DX, AL ; ee
lea dx, [bx+001h] ; 8d 57 01
mov AL, strict byte 004h ; b0 04
out DX, AL ; ee
- jmp short 05c0eh ; eb d5
+ jmp short 05d5dh ; eb d5
mov dx, strict word 0006ch ; ba 6c 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 da b9
+ call 0161ch ; e8 8b b8
mov si, ax ; 89 c6
lea dx, [bx+005h] ; 8d 57 05
in AL, DX ; ec
@@ -7979,95 +8292,92 @@ _int14_function: ; 0xf5b9d LB 0x154
; sub ah, ah ; 2a e4
and ax, strict word 00060h ; 25 60 00
cmp ax, strict word 00060h ; 3d 60 00
- je short 05c69h ; 74 17
+ je short 05db8h ; 74 17
test cl, cl ; 84 c9
- je short 05c69h ; 74 13
+ je short 05db8h ; 74 13
mov dx, strict word 0006ch ; ba 6c 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 bd b9
+ call 0161ch ; e8 6e b8
cmp ax, si ; 39 f0
- je short 05c44h ; 74 e1
+ je short 05d93h ; 74 e1
mov si, ax ; 89 c6
db 0feh, 0c9h
; dec cl ; fe c9
- jmp short 05c44h ; eb db
+ jmp short 05d93h ; eb db
test cl, cl ; 84 c9
- je short 05c73h ; 74 06
- mov al, byte [bp+014h] ; 8a 46 14
+ je short 05dc2h ; 74 06
+ mov al, byte [bp+012h] ; 8a 46 12
mov dx, bx ; 89 da
out DX, AL ; ee
lea dx, [bx+005h] ; 8d 57 05
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+015h], al ; 88 46 15
+ mov byte [bp+013h], al ; 88 46 13
test cl, cl ; 84 c9
- jne short 05cc3h ; 75 43
+ jne short 05e12h ; 75 43
or AL, strict byte 080h ; 0c 80
- mov byte [bp+015h], al ; 88 46 15
- jmp short 05cc3h ; eb 3c
+ mov byte [bp+013h], al ; 88 46 13
+ jmp short 05e12h ; eb 3c
mov dx, strict word 0006ch ; ba 6c 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 8c b9
+ call 0161ch ; e8 3d b8
mov si, ax ; 89 c6
lea dx, [bx+005h] ; 8d 57 05
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 05cb3h ; 75 17
+ jne short 05e02h ; 75 17
test cl, cl ; 84 c9
- je short 05cb3h ; 74 13
+ je short 05e02h ; 74 13
mov dx, strict word 0006ch ; ba 6c 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 73 b9
+ call 0161ch ; e8 24 b8
cmp ax, si ; 39 f0
- je short 05c92h ; 74 e5
+ je short 05de1h ; 74 e5
mov si, ax ; 89 c6
db 0feh, 0c9h
; dec cl ; fe c9
- jmp short 05c92h ; eb df
+ jmp short 05de1h ; eb df
test cl, cl ; 84 c9
- je short 05ccah ; 74 13
- mov byte [bp+015h], 000h ; c6 46 15 00
+ je short 05e18h ; 74 12
+ mov byte [bp+013h], 000h ; c6 46 13 00
mov dx, bx ; 89 da
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+014h], al ; 88 46 14
- and byte [bp+01eh], 0feh ; 80 66 1e fe
- pop bp ; 5d
- pop si ; 5e
- retn ; c3
+ mov byte [bp+012h], al ; 88 46 12
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
+ jmp short 05e3bh ; eb 23
lea dx, [bx+005h] ; 8d 57 05
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- jmp short 05c82h ; eb b0
+ jmp short 05dd1h ; eb b1
lea dx, [si+005h] ; 8d 54 05
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp+015h], al ; 88 46 15
+ mov byte [bp+013h], al ; 88 46 13
lea dx, [si+006h] ; 8d 54 06
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- jmp short 05cc0h ; eb dd
- or byte [bp+01eh], 001h ; 80 4e 1e 01
- pop bp ; 5d
+ jmp short 05e0fh ; eb de
+ or byte [bp+01ch], 001h ; 80 4e 1c 01
+ jmp short 05e3bh ; eb 04
+ or byte [bp+01ch], 001h ; 80 4e 1c 01
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
- retn ; c3
- or byte [bp+01eh], 001h ; 80 4e 1e 01
pop bp ; 5d
- pop si ; 5e
retn ; c3
-set_enable_a20_: ; 0xf5cf1 LB 0x29
+set_enable_a20_: ; 0xf5e41 LB 0x2c
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
- push bp ; 55
- mov bp, sp ; 89 e5
mov bx, ax ; 89 c3
mov dx, 00092h ; ba 92 00
in AL, DX ; ec
@@ -8075,22 +8385,23 @@ set_enable_a20_: ; 0xf5cf1 LB 0x29
; sub ah, ah ; 2a e4
mov cl, al ; 88 c1
test bx, bx ; 85 db
- je short 05d0ah ; 74 05
+ je short 05e5ah ; 74 05
or AL, strict byte 002h ; 0c 02
out DX, AL ; ee
- jmp short 05d0dh ; eb 03
+ jmp short 05e5dh ; eb 03
and AL, strict byte 0fdh ; 24 fd
out DX, AL ; ee
test cl, 002h ; f6 c1 02
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
xor ah, ah ; 30 e4
- pop bp ; 5d
+ lea sp, [bp-006h] ; 8d 66 fa
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-set_e820_range_: ; 0xf5d1a LB 0x8c
+set_e820_range_: ; 0xf5e6d LB 0x8c
push si ; 56
push bp ; 55
mov bp, sp ; 89 e5
@@ -8118,159 +8429,136 @@ set_e820_range_: ; 0xf5d1a LB 0x8c
pop bp ; 5d
pop si ; 5e
retn 0000ah ; c2 0a 00
- in AL, DX ; ec
- jmp near 01f4dh ; e9 d8 c1
- sar byte [bx-06f6fh], 089h ; c0 bf 91 90 89
- mov byte [bx+05283h], al ; 88 87 83 52
- dec di ; 4f
- inc cx ; 41
- and AL, strict byte 000h ; 24 00
- inc cx ; 41
- db 062h
- in AL, strict byte 05dh ; e4 5d
- neg word [di-077h] ; f7 5d 89
- pop si ; 5e
- db 08fh, 05eh, 094h
- ; pop word [bp-06ch] ; 8f 5e 94
- pop si ; 5e
- cwd ; 99
- pop si ; 5e
- cmp bx, word [bx-028h] ; 3b 5f d8
- pushaw ; 60
- db 0feh
- pushaw ; 60
- test word [bp-07bh], bx ; 85 5e 85
- pop si ; 5e
- retf ; cb
- popaw ; 61
- db 0f3h, 061h
- ; rep popaw ; f3 61
- push ES ; 06
- bound dx, [di] ; 62 15
- bound cx, [bx+di+01c5eh] ; 62 89 5e 1c
- db 062h
-_int15_function: ; 0xf5da6 LB 0x4c9
+ db 0ech, 0e9h, 0d8h, 0c1h, 0c0h, 0bfh, 091h, 090h, 089h, 088h, 087h, 083h, 052h, 04fh, 041h, 024h
+ db 000h, 098h, 063h, 038h, 05fh, 04bh, 05fh, 0e0h, 05fh, 0e6h, 05fh, 0ebh, 05fh, 0f0h, 05fh, 092h
+ db 060h, 02fh, 062h, 055h, 062h, 0d9h, 05fh, 0d9h, 05fh, 022h, 063h, 04ah, 063h, 05dh, 063h, 06ch
+ db 063h, 0e0h, 05fh, 073h, 063h
+_int15_function: ; 0xf5ef9 LB 0x4cd
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
- mov ax, word [bp+016h] ; 8b 46 16
+ push ax ; 50
+ push ax ; 50
+ mov ax, word [bp+012h] ; 8b 46 12
shr ax, 008h ; c1 e8 08
cmp ax, 000ech ; 3d ec 00
- jnbe near 06241h ; 0f 87 88 04
+ jnbe near 06398h ; 0f 87 8b 04
push CS ; 0e
pop ES ; 07
mov cx, strict word 00012h ; b9 12 00
- mov di, 05d71h ; bf 71 5d
+ mov di, 05ec4h ; bf c4 5e
repne scasb ; f2 ae
sal cx, 1 ; d1 e1
mov di, cx ; 89 cf
- mov si, word [cs:di+05d82h] ; 2e 8b b5 82 5d
- mov ax, word [bp+016h] ; 8b 46 16
+ mov si, word [cs:di+05ed5h] ; 2e 8b b5 d5 5e
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
- mov cx, word [bp+01ch] ; 8b 4e 1c
+ mov cx, word [bp+018h] ; 8b 4e 18
and cl, 0feh ; 80 e1 fe
- mov bx, word [bp+01ch] ; 8b 5e 1c
+ mov bx, word [bp+018h] ; 8b 5e 18
or bl, 001h ; 80 cb 01
mov dx, ax ; 89 c2
or dh, 086h ; 80 ce 86
jmp si ; ff e6
- mov ax, word [bp+016h] ; 8b 46 16
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
cmp ax, 000c0h ; 3d c0 00
- jne near 06241h ; 0f 85 51 04
- or byte [bp+01ch], 001h ; 80 4e 1c 01
- jmp near 061eah ; e9 f3 03
+ jne near 06398h ; 0f 85 54 04
+ or byte [bp+018h], 001h ; 80 4e 18 01
+ jmp near 06341h ; e9 f6 03
mov dx, ax ; 89 c2
cmp ax, strict word 00001h ; 3d 01 00
- jc short 05e0ch ; 72 0e
- jbe short 05e20h ; 76 20
+ jc short 05f60h ; 72 0e
+ jbe short 05f74h ; 76 20
cmp ax, strict word 00003h ; 3d 03 00
- je short 05e4dh ; 74 48
+ je short 05fa1h ; 74 48
cmp ax, strict word 00002h ; 3d 02 00
- je short 05e30h ; 74 26
- jmp short 05e5ah ; eb 4e
+ je short 05f84h ; 74 26
+ jmp short 05faeh ; eb 4e
test ax, ax ; 85 c0
- jne short 05e5ah ; 75 4a
+ jne short 05faeh ; 75 4a
xor ax, ax ; 31 c0
- call 05cf1h ; e8 dc fe
- and byte [bp+01ch], 0feh ; 80 66 1c fe
- mov byte [bp+017h], 000h ; c6 46 17 00
- jmp near 05e85h ; e9 65 00
+ call 05e41h ; e8 d8 fe
+ and byte [bp+018h], 0feh ; 80 66 18 fe
+ mov byte [bp+013h], 000h ; c6 46 13 00
+ jmp near 05fd9h ; e9 65 00
mov ax, strict word 00001h ; b8 01 00
- call 05cf1h ; e8 cb fe
- and byte [bp+01ch], 0feh ; 80 66 1c fe
- mov byte [bp+017h], dh ; 88 76 17
- jmp near 05e85h ; e9 55 00
+ call 05e41h ; e8 c7 fe
+ and byte [bp+018h], 0feh ; 80 66 18 fe
+ mov byte [bp+013h], dh ; 88 76 13
+ jmp near 05fd9h ; e9 55 00
mov dx, 00092h ; ba 92 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
shr ax, 1 ; d1 e8
and ax, strict word 00001h ; 25 01 00
- mov dx, word [bp+016h] ; 8b 56 16
+ mov dx, word [bp+012h] ; 8b 56 12
mov dl, al ; 88 c2
- mov word [bp+016h], dx ; 89 56 16
- and byte [bp+01ch], 0feh ; 80 66 1c fe
- mov byte [bp+017h], ah ; 88 66 17
- jmp near 05e85h ; e9 38 00
- and byte [bp+01ch], 0feh ; 80 66 1c fe
- mov byte [bp+017h], ah ; 88 66 17
- mov word [bp+010h], ax ; 89 46 10
- jmp near 05e85h ; e9 2b 00
- mov bx, 00cd6h ; bb d6 0c
+ mov word [bp+012h], dx ; 89 56 12
+ and byte [bp+018h], 0feh ; 80 66 18 fe
+ mov byte [bp+013h], ah ; 88 66 13
+ jmp near 05fd9h ; e9 38 00
+ and byte [bp+018h], 0feh ; 80 66 18 fe
+ mov byte [bp+013h], ah ; 88 66 13
+ mov word [bp+00ch], ax ; 89 46 0c
+ jmp near 05fd9h ; e9 2b 00
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 49 ba
- mov ax, word [bp+016h] ; 8b 46 16
+ call 018e1h ; e8 28 b9
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
push ax ; 50
- push 007c4h ; 68 c4 07
+ push 00836h ; 68 36 08
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 76 ba
+ call 01922h ; e8 5b b9
add sp, strict byte 00006h ; 83 c4 06
- or byte [bp+01ch], 001h ; 80 4e 1c 01
- mov ax, word [bp+016h] ; 8b 46 16
+ or byte [bp+018h], 001h ; 80 4e 18 01
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
or ah, 086h ; 80 cc 86
- mov word [bp+016h], ax ; 89 46 16
- leave ; c9
+ mov word [bp+012h], ax ; 89 46 12
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
- mov word [bp+01ch], bx ; 89 5e 1c
- jmp near 05f35h ; e9 a6 00
- mov word [bp+01ch], bx ; 89 5e 1c
- jmp short 05e85h ; eb f1
- mov word [bp+01ch], cx ; 89 4e 1c
- jmp short 05e82h ; eb e9
- test byte [bp+016h], 0ffh ; f6 46 16 ff
- je short 05f0bh ; 74 6c
+ mov word [bp+018h], bx ; 89 5e 18
+ jmp near 0608ch ; e9 a6 00
+ mov word [bp+018h], bx ; 89 5e 18
+ jmp short 05fd9h ; eb ee
+ mov word [bp+018h], cx ; 89 4e 18
+ jmp short 05fd6h ; eb e6
+ test byte [bp+012h], 0ffh ; f6 46 12 ff
+ je short 06062h ; 74 6c
mov dx, 000a0h ; ba a0 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 58 b7
+ call 01600h ; e8 01 b6
test AL, strict byte 001h ; a8 01
- jne near 061e1h ; 0f 85 33 03
+ jne near 06338h ; 0f 85 33 03
mov bx, strict word 00001h ; bb 01 00
mov dx, 000a0h ; ba a0 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 54 b7
- mov bx, word [bp+018h] ; 8b 5e 18
+ call 0160eh ; e8 fd b5
+ mov bx, word [bp+014h] ; 8b 5e 14
mov dx, 00098h ; ba 98 00
mov ax, strict word 00040h ; b8 40 00
- call 0162ah ; e8 64 b7
- mov bx, word [bp+010h] ; 8b 5e 10
+ call 0162ah ; e8 0d b6
+ mov bx, word [bp+00ch] ; 8b 5e 0c
mov dx, 0009ah ; ba 9a 00
mov ax, strict word 00040h ; b8 40 00
- call 0162ah ; e8 58 b7
- mov bx, word [bp+012h] ; 8b 5e 12
+ call 0162ah ; e8 01 b6
+ mov bx, word [bp+00eh] ; 8b 5e 0e
mov dx, 0009ch ; ba 9c 00
mov ax, strict word 00040h ; b8 40 00
- call 0162ah ; e8 4c b7
- mov bx, word [bp+014h] ; 8b 5e 14
+ call 0162ah ; e8 f5 b5
+ mov bx, word [bp+010h] ; 8b 5e 10
mov dx, 0009eh ; ba 9e 00
mov ax, strict word 00040h ; b8 40 00
- call 0162ah ; e8 40 b7
- and byte [bp+01ch], 0feh ; 80 66 1c fe
+ call 0162ah ; e8 e9 b5
+ and byte [bp+018h], 0feh ; 80 66 18 fe
mov dx, 000a1h ; ba a1 00
in AL, DX ; ec
db 02ah, 0e4h
@@ -8278,130 +8566,130 @@ _int15_function: ; 0xf5da6 LB 0x4c9
and AL, strict byte 0feh ; 24 fe
out DX, AL ; ee
mov ax, strict word 0000bh ; b8 0b 00
- call 0165ch ; e8 5f b7
+ call 0165ch ; e8 08 b6
or AL, strict byte 040h ; 0c 40
movzx dx, al ; 0f b6 d0
mov ax, strict word 0000bh ; b8 0b 00
- call 0166dh ; e8 65 b7
- jmp near 05e85h ; e9 7a ff
+ call 01679h ; e8 1a b6
+ jmp near 05fd9h ; e9 77 ff
cmp ax, strict word 00001h ; 3d 01 00
- jne short 05f29h ; 75 19
+ jne short 06080h ; 75 19
xor bx, bx ; 31 db
mov dx, 000a0h ; ba a0 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 f3 b6
- and byte [bp+01ch], 0feh ; 80 66 1c fe
+ call 0160eh ; e8 9c b5
+ and byte [bp+018h], 0feh ; 80 66 18 fe
mov ax, strict word 0000bh ; b8 0b 00
- call 0165ch ; e8 37 b7
+ call 0165ch ; e8 e0 b5
and AL, strict byte 0bfh ; 24 bf
- jmp short 05effh ; eb d6
- mov word [bp+01ch], bx ; 89 5e 1c
+ jmp short 06056h ; eb d6
+ mov word [bp+018h], bx ; 89 5e 18
mov ax, dx ; 89 d0
xor ah, dh ; 30 f4
xor dl, dl ; 30 d2
dec ax ; 48
or dx, ax ; 09 c2
- mov word [bp+016h], dx ; 89 56 16
- jmp near 05e85h ; e9 4a ff
+ mov word [bp+012h], dx ; 89 56 12
+ jmp near 05fd9h ; e9 47 ff
cli ; fa
mov ax, strict word 00001h ; b8 01 00
- call 05cf1h ; e8 af fd
+ call 05e41h ; e8 a8 fd
mov di, ax ; 89 c7
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
sal ax, 004h ; c1 e0 04
- mov cx, word [bp+00ah] ; 8b 4e 0a
+ mov cx, word [bp+006h] ; 8b 4e 06
add cx, ax ; 01 c1
- mov dx, word [bp+018h] ; 8b 56 18
+ mov dx, word [bp+014h] ; 8b 56 14
shr dx, 00ch ; c1 ea 0c
- mov byte [bp-002h], dl ; 88 56 fe
+ mov byte [bp-006h], dl ; 88 56 fa
cmp cx, ax ; 39 c1
- jnc short 05f61h ; 73 05
+ jnc short 060b8h ; 73 05
db 0feh, 0c2h
; inc dl ; fe c2
- mov byte [bp-002h], dl ; 88 56 fe
- mov dx, word [bp+00ah] ; 8b 56 0a
+ mov byte [bp-006h], dl ; 88 56 fa
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 00008h ; 83 c2 08
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, strict word 0002fh ; bb 2f 00
- call 0162ah ; e8 ba b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 63 b5
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0000ah ; 83 c2 0a
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, cx ; 89 cb
- call 0162ah ; e8 ac b6
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 55 b5
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0000ch ; 83 c2 0c
- mov ax, word [bp+018h] ; 8b 46 18
- call 0160eh ; e8 80 b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ mov ax, word [bp+014h] ; 8b 46 14
+ call 0160eh ; e8 29 b5
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0000dh ; 83 c2 0d
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, 00093h ; bb 93 00
- call 0160eh ; e8 71 b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0160eh ; e8 1a b5
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0000eh ; 83 c2 0e
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
xor bx, bx ; 31 db
- call 0162ah ; e8 7f b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 28 b5
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 00020h ; 83 c2 20
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, strict word 0ffffh ; bb ff ff
- call 0162ah ; e8 70 b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 19 b5
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 00022h ; 83 c2 22
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
xor bx, bx ; 31 db
- call 0162ah ; e8 62 b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 0b b5
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 00024h ; 83 c2 24
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, strict word 0000fh ; bb 0f 00
- call 0160eh ; e8 37 b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0160eh ; e8 e0 b4
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 00025h ; 83 c2 25
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, 0009bh ; bb 9b 00
- call 0160eh ; e8 28 b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0160eh ; e8 d1 b4
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 00026h ; 83 c2 26
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
xor bx, bx ; 31 db
- call 0162ah ; e8 36 b6
+ call 0162ah ; e8 df b4
mov ax, ss ; 8c d0
mov cx, ax ; 89 c1
sal cx, 004h ; c1 e1 04
shr ax, 00ch ; c1 e8 0c
- mov word [bp-004h], ax ; 89 46 fc
- mov dx, word [bp+00ah] ; 8b 56 0a
+ mov word [bp-008h], ax ; 89 46 f8
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 00028h ; 83 c2 28
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, strict word 0ffffh ; bb ff ff
- call 0162ah ; e8 1a b6
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 c3 b4
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0002ah ; 83 c2 2a
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, cx ; 89 cb
- call 0162ah ; e8 0c b6
- movzx bx, byte [bp-004h] ; 0f b6 5e fc
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 b5 b4
+ movzx bx, byte [bp-008h] ; 0f b6 5e f8
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0002ch ; 83 c2 2c
- mov ax, word [bp+018h] ; 8b 46 18
- call 0160eh ; e8 e0 b5
- mov dx, word [bp+00ah] ; 8b 56 0a
+ mov ax, word [bp+014h] ; 8b 46 14
+ call 0160eh ; e8 89 b4
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0002dh ; 83 c2 2d
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, 00093h ; bb 93 00
- call 0160eh ; e8 d1 b5
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0160eh ; e8 7a b4
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0002eh ; 83 c2 2e
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
xor bx, bx ; 31 db
- call 0162ah ; e8 df b5
- mov si, word [bp+00ah] ; 8b 76 0a
- mov es, [bp+018h] ; 8e 46 18
- mov cx, word [bp+014h] ; 8b 4e 14
+ call 0162ah ; e8 88 b4
+ mov si, word [bp+006h] ; 8b 76 06
+ mov es, [bp+014h] ; 8e 46 14
+ mov cx, word [bp+010h] ; 8b 4e 10
push DS ; 1e
push eax ; 66 50
db 066h, 033h, 0c0h
@@ -8409,13 +8697,13 @@ _int15_function: ; 0xf5da6 LB 0x4c9
mov ds, ax ; 8e d8
mov word [00467h], sp ; 89 26 67 04
mov [00469h], ss ; 8c 16 69 04
- call 06067h ; e8 00 00
+ call 061beh ; e8 00 00
pop di ; 5f
add di, strict byte 0001bh ; 83 c7 1b
push strict byte 00020h ; 6a 20
push di ; 57
lgdt [es:si+008h] ; 26 0f 01 54 08
- lidt [cs:0efdfh] ; 2e 0f 01 1e df ef
+ lidt [cs:0efe1h] ; 2e 0f 01 1e e1 ef
mov eax, cr0 ; 0f 20 c0
or AL, strict byte 001h ; 0c 01
mov cr0, eax ; 0f 22 c0
@@ -8432,7 +8720,7 @@ _int15_function: ; 0xf5da6 LB 0x4c9
; xor di, di ; 33 ff
cld ; fc
rep movsw ; f3 a5
- call 0609bh ; e8 00 00
+ call 061f2h ; e8 00 00
pop ax ; 58
push 0f000h ; 68 00 f0
add ax, strict byte 00018h ; 83 c0 18
@@ -8444,7 +8732,7 @@ _int15_function: ; 0xf5da6 LB 0x4c9
and AL, strict byte 0feh ; 24 fe
mov cr0, eax ; 0f 22 c0
retf ; cb
- lidt [cs:0efe5h] ; 2e 0f 01 1e e5 ef
+ lidt [cs:0efe7h] ; 2e 0f 01 1e e7 ef
db 033h, 0c0h
; xor ax, ax ; 33 c0
mov ds, ax ; 8e d8
@@ -8453,63 +8741,63 @@ _int15_function: ; 0xf5da6 LB 0x4c9
pop eax ; 66 58
pop DS ; 1f
mov ax, di ; 89 f8
- call 05cf1h ; e8 25 fc
+ call 05e41h ; e8 1e fc
sti ; fb
- mov byte [bp+017h], 000h ; c6 46 17 00
- and byte [bp+01ch], 0feh ; 80 66 1c fe
- jmp near 05e85h ; e9 ad fd
+ mov byte [bp+013h], 000h ; c6 46 13 00
+ and byte [bp+018h], 0feh ; 80 66 18 fe
+ jmp near 05fd9h ; e9 aa fd
mov ax, strict word 00031h ; b8 31 00
- call 0165ch ; e8 7e b5
+ call 0165ch ; e8 27 b4
xor ah, ah ; 30 e4
mov dx, ax ; 89 c2
sal dx, 008h ; c1 e2 08
mov ax, strict word 00030h ; b8 30 00
- call 0165ch ; e8 71 b5
+ call 0165ch ; e8 1a b4
xor ah, ah ; 30 e4
or dx, ax ; 09 c2
- mov word [bp+016h], dx ; 89 56 16
+ mov word [bp+012h], dx ; 89 56 12
cmp dx, strict byte 0ffc0h ; 83 fa c0
- jbe short 060d1h ; 76 da
- mov word [bp+016h], strict word 0ffc0h ; c7 46 16 c0 ff
- jmp short 060d1h ; eb d3
+ jbe short 06228h ; 76 da
+ mov word [bp+012h], strict word 0ffc0h ; c7 46 12 c0 ff
+ jmp short 06228h ; eb d3
cli ; fa
mov ax, strict word 00001h ; b8 01 00
- call 05cf1h ; e8 ec fb
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 05e41h ; e8 e5 fb
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 00038h ; 83 c2 38
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, strict word 0ffffh ; bb ff ff
- call 0162ah ; e8 16 b5
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 bf b3
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0003ah ; 83 c2 3a
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
xor bx, bx ; 31 db
- call 0162ah ; e8 08 b5
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0162ah ; e8 b1 b3
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0003ch ; 83 c2 3c
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, strict word 0000fh ; bb 0f 00
- call 0160eh ; e8 dd b4
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0160eh ; e8 86 b3
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0003dh ; 83 c2 3d
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
mov bx, 0009bh ; bb 9b 00
- call 0160eh ; e8 ce b4
- mov dx, word [bp+00ah] ; 8b 56 0a
+ call 0160eh ; e8 77 b3
+ mov dx, word [bp+006h] ; 8b 56 06
add dx, strict byte 0003eh ; 83 c2 3e
- mov ax, word [bp+018h] ; 8b 46 18
+ mov ax, word [bp+014h] ; 8b 46 14
xor bx, bx ; 31 db
- call 0162ah ; e8 dc b4
+ call 0162ah ; e8 85 b3
mov AL, strict byte 011h ; b0 11
mov dx, strict word 00020h ; ba 20 00
out DX, AL ; ee
mov dx, 000a0h ; ba a0 00
out DX, AL ; ee
- mov ax, word [bp+010h] ; 8b 46 10
+ mov ax, word [bp+00ch] ; 8b 46 0c
shr ax, 008h ; c1 e8 08
mov dx, strict word 00021h ; ba 21 00
out DX, AL ; ee
- mov ax, word [bp+010h] ; 8b 46 10
+ mov ax, word [bp+00ch] ; 8b 46 0c
mov dx, 000a1h ; ba a1 00
out DX, AL ; ee
mov AL, strict byte 004h ; b0 04
@@ -8528,8 +8816,8 @@ _int15_function: ; 0xf5da6 LB 0x4c9
out DX, AL ; ee
mov dx, 000a1h ; ba a1 00
out DX, AL ; ee
- mov si, word [bp+00ah] ; 8b 76 0a
- call 0618fh ; e8 00 00
+ mov si, word [bp+006h] ; 8b 76 06
+ call 062e6h ; e8 00 00
pop di ; 5f
add di, strict byte 00018h ; 83 c7 18
push strict byte 00038h ; 6a 38
@@ -8545,7 +8833,7 @@ _int15_function: ; 0xf5da6 LB 0x4c9
mov ds, ax ; 8e d8
mov ax, strict word 00020h ; b8 20 00
mov es, ax ; 8e c0
- lea ax, [bp+008h] ; 8d 46 08
+ lea ax, [bp+004h] ; 8d 46 04
db 08bh, 0e0h
; mov sp, ax ; 8b e0
popaw ; 61
@@ -8557,79 +8845,89 @@ _int15_function: ; 0xf5da6 LB 0x4c9
push ax ; 50
push cx ; 51
retf ; cb
- jmp near 05e85h ; e9 ba fc
- mov bx, 00cd6h ; bb d6 0c
+ jmp near 05fd9h ; e9 b7 fc
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 d8 b6
- push 00804h ; 68 04 08
+ call 018e1h ; e8 b4 b5
+ push 00876h ; 68 76 08
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 0b b7
+ call 01922h ; e8 ed b5
add sp, strict byte 00004h ; 83 c4 04
- or byte [bp+01ch], 001h ; 80 4e 1c 01
- mov ax, word [bp+016h] ; 8b 46 16
+ or byte [bp+018h], 001h ; 80 4e 18 01
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
or ah, 086h ; 80 cc 86
- mov word [bp+016h], ax ; 89 46 16
- jmp near 05e85h ; e9 92 fc
- mov word [bp+01ch], cx ; 89 4e 1c
- mov word [bp+016h], ax ; 89 46 16
- mov word [bp+010h], 0e6f5h ; c7 46 10 f5 e6
- mov word [bp+018h], 0f000h ; c7 46 18 00 f0
- jmp near 05e85h ; e9 7f fc
+ mov word [bp+012h], ax ; 89 46 12
+ jmp near 05fd9h ; e9 8f fc
+ mov word [bp+018h], cx ; 89 4e 18
+ mov word [bp+012h], ax ; 89 46 12
+ mov word [bp+00ch], 0e6f5h ; c7 46 0c f5 e6
+ mov word [bp+014h], 0f000h ; c7 46 14 00 f0
+ jmp near 05fd9h ; e9 7c fc
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 0d b4
- mov word [bp+018h], ax ; 89 46 18
- jmp near 060d1h ; e9 bc fe
- push 00833h ; 68 33 08
+ call 0161ch ; e8 b6 b2
+ mov word [bp+014h], ax ; 89 46 14
+ jmp near 06228h ; e9 bc fe
+ push 008a5h ; 68 a5 08
push strict byte 00008h ; 6a 08
- jmp short 061dbh ; eb bf
- test byte [bp+016h], 0ffh ; f6 46 16 ff
- jne short 06241h ; 75 1f
- mov word [bp+016h], ax ; 89 46 16
- mov ax, word [bp+010h] ; 8b 46 10
+ jmp short 06332h ; eb bf
+ test byte [bp+012h], 0ffh ; f6 46 12 ff
+ jne short 06398h ; 75 1f
+ mov word [bp+012h], ax ; 89 46 12
+ mov ax, word [bp+00ch] ; 8b 46 0c
xor ah, ah ; 30 e4
cmp ax, strict word 00001h ; 3d 01 00
- jc short 0623ah ; 72 0b
+ jc short 06391h ; 72 0b
cmp ax, strict word 00003h ; 3d 03 00
- jnbe short 0623ah ; 77 06
- mov word [bp+01ch], cx ; 89 4e 1c
- jmp near 05e85h ; e9 4b fc
- or byte [bp+01ch], 001h ; 80 4e 1c 01
- jmp near 05e85h ; e9 44 fc
- mov bx, 00cd6h ; bb d6 0c
+ jnbe short 06391h ; 77 06
+ mov word [bp+018h], cx ; 89 4e 18
+ jmp near 05fd9h ; e9 48 fc
+ or byte [bp+018h], 001h ; 80 4e 18 01
+ jmp near 05fd9h ; e9 41 fc
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 62 b6
- push word [bp+010h] ; ff 76 10
- push word [bp+016h] ; ff 76 16
- push 0084ah ; 68 4a 08
+ call 018e1h ; e8 3e b5
+ push word [bp+00ch] ; ff 76 0c
+ push word [bp+012h] ; ff 76 12
+ push 008bch ; 68 bc 08
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 8f b6
+ call 01922h ; e8 71 b5
add sp, strict byte 00008h ; 83 c4 08
- jmp short 061e1h ; eb 82
- mov ax, word [0d763h] ; a1 63 d7
- arpl cx, di ; 63 f9
- arpl word [bp+si], bx ; 63 1a
- cmp word [fs:si+058h], sp ; 64 39 64 58
- db 064h
- db 09ah
- db 064h
- db 0c7h
- db 064h
-_int15_function32: ; 0xf626f LB 0x309
+ jmp short 06338h ; eb 82
+ outsw ; 6f
+ db 065h, 091h
+ ; gs xchg cx, ax ; 65 91
+ db 065h, 0b4h, 065h
+ ; gs mov AH, strict byte 065h ; 65 b4 65
+ db 0d6h
+ mul byte [gs:di+017h] ; 65 f6 65 17
+ push esi ; 66 56
+ db 066h
+ db 082h
+ db 066h
+_int15_function32: ; 0xf63c6 LB 0x37e
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
- enter 00008h, 000h ; c8 08 00 00
- mov ax, word [bp+022h] ; 8b 46 22
- shr ax, 008h ; c1 e8 08
- cmp ax, 000e8h ; 3d e8 00
- je short 062c0h ; 74 41
- cmp ax, 00086h ; 3d 86 00
- jne near 0654bh ; 0f 85 c5 02
+ sub sp, strict byte 00008h ; 83 ec 08
+ mov dx, word [bp+020h] ; 8b 56 20
+ shr dx, 008h ; c1 ea 08
+ mov bx, word [bp+028h] ; 8b 5e 28
+ and bl, 0feh ; 80 e3 fe
+ mov ax, word [bp+020h] ; 8b 46 20
+ xor ah, ah ; 30 e4
+ cmp dx, 000e8h ; 81 fa e8 00
+ je near 06493h ; 0f 84 ad 00
+ cmp dx, 000d0h ; 81 fa d0 00
+ je short 0642eh ; 74 42
+ cmp dx, 00086h ; 81 fa 86 00
+ jne near 06714h ; 0f 85 20 03
sti ; fb
- mov ax, word [bp+01eh] ; 8b 46 1e
- mov dx, word [bp+01ah] ; 8b 56 1a
+ mov ax, word [bp+01ch] ; 8b 46 1c
+ mov dx, word [bp+018h] ; 8b 56 18
sal eax, 010h ; 66 c1 e0 10
db 08bh, 0c2h
; mov ax, dx ; 8b c2
@@ -8645,40 +8943,63 @@ _int15_function32: ; 0xf626f LB 0x309
; mov ah, al ; 8a e0
db 066h, 00bh, 0c9h
; or ecx, ecx ; 66 0b c9
- je near 062bdh ; 0f 84 0e 00
+ je near 0642bh ; 0f 84 0e 00
in AL, strict byte 061h ; e4 61
and AL, strict byte 010h ; 24 10
db 03ah, 0c4h
; cmp al, ah ; 3a c4
- je short 062afh ; 74 f8
+ je short 0641dh ; 74 f8
db 08ah, 0e0h
; mov ah, al ; 8a e0
dec ecx ; 66 49
- jne short 062afh ; 75 f2
- leave ; c9
- pop si ; 5e
- retn ; c3
- mov ax, word [bp+022h] ; 8b 46 22
- xor ah, ah ; 30 e4
+ jne short 0641dh ; 75 f2
+ jmp near 0673eh ; e9 10 03
+ cmp ax, strict word 0004fh ; 3d 4f 00
+ jne near 06714h ; 0f 85 df 02
+ cmp word [bp+016h], 05052h ; 81 7e 16 52 50
+ jne near 06714h ; 0f 85 d6 02
+ cmp word [bp+014h], 04f43h ; 81 7e 14 43 4f
+ jne near 06714h ; 0f 85 cd 02
+ cmp word [bp+01eh], 04d4fh ; 81 7e 1e 4f 4d
+ jne near 06714h ; 0f 85 c4 02
+ cmp word [bp+01ch], 04445h ; 81 7e 1c 45 44
+ jne near 06714h ; 0f 85 bb 02
+ mov ax, word [bp+00ah] ; 8b 46 0a
+ or ax, word [bp+008h] ; 0b 46 08
+ jne near 06714h ; 0f 85 b1 02
+ mov ax, word [bp+006h] ; 8b 46 06
+ or ax, word [bp+004h] ; 0b 46 04
+ jne near 06714h ; 0f 85 a7 02
+ mov word [bp+028h], bx ; 89 5e 28
+ mov ax, word [bp+014h] ; 8b 46 14
+ mov word [bp+008h], ax ; 89 46 08
+ mov ax, word [bp+016h] ; 8b 46 16
+ mov word [bp+00ah], ax ; 89 46 0a
+ mov ax, word [bp+01ch] ; 8b 46 1c
+ mov word [bp+004h], ax ; 89 46 04
+ mov ax, word [bp+01eh] ; 8b 46 1e
+ mov word [bp+006h], ax ; 89 46 06
+ mov dword [bp+020h], strict dword 049413332h ; 66 c7 46 20 32 33 41 49
+ jmp near 0673eh ; e9 ab 02
cmp ax, strict word 00020h ; 3d 20 00
- je short 062d4h ; 74 0a
+ je short 064a2h ; 74 0a
cmp ax, strict word 00001h ; 3d 01 00
- je near 064fdh ; 0f 84 2c 02
- jmp near 0654bh ; e9 77 02
- cmp word [bp+01ch], 0534dh ; 81 7e 1c 4d 53
- jne near 0654bh ; 0f 85 6e 02
- cmp word [bp+01ah], 04150h ; 81 7e 1a 50 41
- jne near 0654bh ; 0f 85 65 02
+ je near 066c9h ; 0f 84 2a 02
+ jmp near 06714h ; e9 72 02
+ cmp word [bp+01ah], 0534dh ; 81 7e 1a 4d 53
+ jne near 06714h ; 0f 85 69 02
+ cmp word [bp+018h], 04150h ; 81 7e 18 50 41
+ jne near 06714h ; 0f 85 60 02
mov ax, strict word 00035h ; b8 35 00
- call 0165ch ; e8 70 b3
+ call 0165ch ; e8 a2 b1
movzx bx, al ; 0f b6 d8
xor dx, dx ; 31 d2
mov cx, strict word 00008h ; b9 08 00
sal bx, 1 ; d1 e3
rcl dx, 1 ; d1 d2
- loop 062f4h ; e2 fa
+ loop 064c2h ; e2 fa
mov ax, strict word 00034h ; b8 34 00
- call 0165ch ; e8 5c b3
+ call 0165ch ; e8 8e b1
xor ah, ah ; 30 e4
mov dx, bx ; 89 da
or dx, ax ; 09 c2
@@ -8686,347 +9007,485 @@ _int15_function32: ; 0xf626f LB 0x309
add bx, bx ; 01 db
adc dx, 00100h ; 81 d2 00 01
cmp dx, 00100h ; 81 fa 00 01
- jc short 0631ah ; 72 06
- jne short 06347h ; 75 31
+ jc short 064e8h ; 72 06
+ jne short 06515h ; 75 31
test bx, bx ; 85 db
- jnbe short 06347h ; 77 2d
+ jnbe short 06515h ; 77 2d
mov ax, strict word 00031h ; b8 31 00
- call 0165ch ; e8 3c b3
+ call 0165ch ; e8 6e b1
movzx bx, al ; 0f b6 d8
xor dx, dx ; 31 d2
mov cx, strict word 00008h ; b9 08 00
sal bx, 1 ; d1 e3
rcl dx, 1 ; d1 d2
- loop 06328h ; e2 fa
+ loop 064f6h ; e2 fa
mov ax, strict word 00030h ; b8 30 00
- call 0165ch ; e8 28 b3
+ call 0165ch ; e8 5a b1
xor ah, ah ; 30 e4
or bx, ax ; 09 c3
mov cx, strict word 0000ah ; b9 0a 00
sal bx, 1 ; d1 e3
rcl dx, 1 ; d1 d2
- loop 0633bh ; e2 fa
+ loop 06509h ; e2 fa
add bx, strict byte 00000h ; 83 c3 00
adc dx, strict byte 00010h ; 83 d2 10
mov ax, strict word 00062h ; b8 62 00
- call 0165ch ; e8 0f b3
+ call 0165ch ; e8 41 b1
xor ah, ah ; 30 e4
- mov word [bp-008h], ax ; 89 46 f8
+ mov word [bp-00ah], ax ; 89 46 f6
xor al, al ; 30 c0
- mov word [bp-006h], ax ; 89 46 fa
+ mov word [bp-008h], ax ; 89 46 f8
mov cx, strict word 00008h ; b9 08 00
- sal word [bp-008h], 1 ; d1 66 f8
- rcl word [bp-006h], 1 ; d1 56 fa
- loop 0635ah ; e2 f8
+ sal word [bp-00ah], 1 ; d1 66 f6
+ rcl word [bp-008h], 1 ; d1 56 f8
+ loop 06528h ; e2 f8
mov ax, strict word 00061h ; b8 61 00
- call 0165ch ; e8 f4 b2
+ call 0165ch ; e8 26 b1
xor ah, ah ; 30 e4
- or word [bp-008h], ax ; 09 46 f8
- mov ax, word [bp-008h] ; 8b 46 f8
- mov word [bp-006h], ax ; 89 46 fa
- mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00
+ or word [bp-00ah], ax ; 09 46 f6
+ mov ax, word [bp-00ah] ; 8b 46 f6
+ mov word [bp-008h], ax ; 89 46 f8
+ mov word [bp-00ah], strict word 00000h ; c7 46 f6 00 00
mov ax, strict word 00063h ; b8 63 00
- call 0165ch ; e8 de b2
+ call 0165ch ; e8 10 b1
mov byte [bp-004h], al ; 88 46 fc
- mov byte [bp-002h], al ; 88 46 fe
- mov ax, word [bp+016h] ; 8b 46 16
+ mov byte [bp-006h], al ; 88 46 fa
+ mov ax, word [bp+014h] ; 8b 46 14
cmp ax, strict word 00007h ; 3d 07 00
- jnbe near 0654bh ; 0f 87 bd 01
+ jnbe near 06714h ; 0f 87 b8 01
mov si, ax ; 89 c6
add si, ax ; 01 c6
- mov ax, bx ; 89 d8
- add ax, strict word 00000h ; 05 00 00
- mov cx, dx ; 89 d1
- adc cx, strict byte 0ffffh ; 83 d1 ff
- jmp word [cs:si+0625fh] ; 2e ff a4 5f 62
+ mov cx, bx ; 89 d9
+ add cx, strict byte 00000h ; 83 c1 00
+ mov ax, dx ; 89 d0
+ adc ax, strict word 0ffffh ; 15 ff ff
+ jmp word [cs:si+063b6h] ; 2e ff a4 b6 63
push strict byte 00001h ; 6a 01
push dword 000000000h ; 66 6a 00
push strict byte 00009h ; 6a 09
push 0fc00h ; 68 00 fc
- mov dx, word [bp+006h] ; 8b 56 06
- mov ax, word [bp+026h] ; 8b 46 26
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov ax, word [bp+024h] ; 8b 46 24
xor bx, bx ; 31 db
xor cx, cx ; 31 c9
- call 05d1ah ; e8 62 f9
- mov dword [bp+016h], strict dword 000000001h ; 66 c7 46 16 01 00 00 00
- mov dword [bp+022h], strict dword 0534d4150h ; 66 c7 46 22 50 41 4d 53
- mov dword [bp+01eh], strict dword 000000014h ; 66 c7 46 1e 14 00 00 00
- and byte [bp+02ah], 0feh ; 80 66 2a fe
- leave ; c9
- pop si ; 5e
- retn ; c3
+ call 05e6dh ; e8 e7 f8
+ mov dword [bp+014h], strict dword 000000001h ; 66 c7 46 14 01 00 00 00
+ jmp near 066b3h ; e9 22 01
push strict byte 00002h ; 6a 02
push dword 000000000h ; 66 6a 00
push strict byte 0000ah ; 6a 0a
push strict byte 00000h ; 6a 00
- mov dx, word [bp+006h] ; 8b 56 06
- mov ax, word [bp+026h] ; 8b 46 26
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov ax, word [bp+024h] ; 8b 46 24
mov bx, 0fc00h ; bb 00 fc
mov cx, strict word 00009h ; b9 09 00
- call 05d1ah ; e8 2b f9
- mov dword [bp+016h], strict dword 000000002h ; 66 c7 46 16 02 00 00 00
- jmp short 063c0h ; eb c7
+ call 05e6dh ; e8 c4 f8
+ mov dword [bp+014h], strict dword 000000002h ; 66 c7 46 14 02 00 00 00
+ jmp near 066b3h ; e9 ff 00
push strict byte 00002h ; 6a 02
push dword 000000000h ; 66 6a 00
push strict byte 00010h ; 6a 10
push strict byte 00000h ; 6a 00
- mov dx, word [bp+006h] ; 8b 56 06
- mov ax, word [bp+026h] ; 8b 46 26
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov ax, word [bp+024h] ; 8b 46 24
xor bx, bx ; 31 db
mov cx, strict word 0000fh ; b9 0f 00
- call 05d1ah ; e8 0a f9
- mov dword [bp+016h], strict dword 000000003h ; 66 c7 46 16 03 00 00 00
- jmp short 063c0h ; eb a6
+ call 05e6dh ; e8 a2 f8
+ mov dword [bp+014h], strict dword 000000003h ; 66 c7 46 14 03 00 00 00
+ jmp near 066b3h ; e9 dd 00
push strict byte 00001h ; 6a 01
push dword 000000000h ; 66 6a 00
- push cx ; 51
push ax ; 50
- mov dx, word [bp+006h] ; 8b 56 06
- mov ax, word [bp+026h] ; 8b 46 26
+ push cx ; 51
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov ax, word [bp+024h] ; 8b 46 24
xor bx, bx ; 31 db
mov cx, strict word 00010h ; b9 10 00
- call 05d1ah ; e8 eb f8
- mov dword [bp+016h], strict dword 000000004h ; 66 c7 46 16 04 00 00 00
- jmp short 063c0h ; eb 87
+ call 05e6dh ; e8 82 f8
+ mov dword [bp+014h], strict dword 000000004h ; 66 c7 46 14 04 00 00 00
+ jmp near 066b3h ; e9 bd 00
push strict byte 00003h ; 6a 03
push dword 000000000h ; 66 6a 00
push dx ; 52
push bx ; 53
- mov dx, word [bp+006h] ; 8b 56 06
- mov si, word [bp+026h] ; 8b 76 26
- mov bx, ax ; 89 c3
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov si, word [bp+024h] ; 8b 76 24
+ mov bx, cx ; 89 cb
+ mov cx, ax ; 89 c1
mov ax, si ; 89 f0
- call 05d1ah ; e8 cd f8
- mov dword [bp+016h], strict dword 000000005h ; 66 c7 46 16 05 00 00 00
- jmp near 063c0h ; e9 68 ff
+ call 05e6dh ; e8 61 f8
+ mov dword [bp+014h], strict dword 000000005h ; 66 c7 46 14 05 00 00 00
+ jmp near 066b3h ; e9 9c 00
push strict byte 00002h ; 6a 02
push dword 000000000h ; 66 6a 00
push dword 000000000h ; 66 6a 00
- mov dx, word [bp+006h] ; 8b 56 06
- mov ax, word [bp+026h] ; 8b 46 26
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov ax, word [bp+024h] ; 8b 46 24
xor bx, bx ; 31 db
mov cx, strict word 0fffch ; b9 fc ff
- call 05d1ah ; e8 ac f8
+ call 05e6dh ; e8 40 f8
cmp byte [bp-004h], 000h ; 80 7e fc 00
- jne short 0647bh ; 75 07
- mov ax, word [bp-006h] ; 8b 46 fa
+ jne short 0663ah ; 75 07
+ mov ax, word [bp-008h] ; 8b 46 f8
test ax, ax ; 85 c0
- je short 06491h ; 74 16
- mov dword [bp+016h], strict dword 000000007h ; 66 c7 46 16 07 00 00 00
- jmp near 063c0h ; e9 3a ff
- mov dword [bp+016h], strict dword 000000006h ; 66 c7 46 16 06 00 00 00
- jmp near 063c0h ; e9 2f ff
+ je short 0664eh ; 74 14
+ mov dword [bp+014h], strict dword 000000007h ; 66 c7 46 14 07 00 00 00
+ jmp short 066b3h ; eb 6f
+ mov dword [bp+014h], strict dword 000000006h ; 66 c7 46 14 06 00 00 00
+ jmp short 066b3h ; eb 65
+ mov word [bp+014h], ax ; 89 46 14
mov word [bp+016h], ax ; 89 46 16
- mov word [bp+018h], ax ; 89 46 18
- jmp near 063c0h ; e9 26 ff
+ jmp short 066b3h ; eb 5d
push strict byte 00002h ; 6a 02
push dword 000000000h ; 66 6a 00
push dword 000000000h ; 66 6a 00
- mov dx, word [bp+006h] ; 8b 56 06
- mov ax, word [bp+026h] ; 8b 46 26
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov ax, word [bp+024h] ; 8b 46 24
xor bx, bx ; 31 db
xor cx, cx ; 31 c9
- call 05d1ah ; e8 6b f8
+ call 05e6dh ; e8 02 f8
cmp byte [bp-004h], 000h ; 80 7e fc 00
- jne short 064bch ; 75 07
- mov ax, word [bp-006h] ; 8b 46 fa
+ jne short 06678h ; 75 07
+ mov ax, word [bp-008h] ; 8b 46 f8
test ax, ax ; 85 c0
- je short 064beh ; 74 02
- jmp short 0647bh ; eb bd
+ je short 0667ah ; 74 02
+ jmp short 0663ah ; eb c0
+ mov word [bp+014h], ax ; 89 46 14
mov word [bp+016h], ax ; 89 46 16
- mov word [bp+018h], ax ; 89 46 18
- jmp near 063c0h ; e9 f9 fe
+ jmp short 066b3h ; eb 31
cmp byte [bp-004h], 000h ; 80 7e fc 00
- jne short 064d5h ; 75 08
- cmp word [bp-006h], strict byte 00000h ; 83 7e fa 00
- je near 063c0h ; 0f 84 eb fe
+ jne short 0668eh ; 75 06
+ cmp word [bp-008h], strict byte 00000h ; 83 7e f8 00
+ je short 066b3h ; 74 25
push strict byte 00001h ; 6a 01
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov al, byte [bp-006h] ; 8a 46 fa
db 0feh, 0c0h
; inc al ; fe c0
xor ah, ah ; 30 e4
push ax ; 50
push strict byte 00001h ; 6a 01
- push dword [bp-008h] ; 66 ff 76 f8
- mov dx, word [bp+006h] ; 8b 56 06
- mov ax, word [bp+026h] ; 8b 46 26
+ push dword [bp-00ah] ; 66 ff 76 f6
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov ax, word [bp+024h] ; 8b 46 24
xor bx, bx ; 31 db
xor cx, cx ; 31 c9
- call 05d1ah ; e8 28 f8
+ call 05e6dh ; e8 c2 f7
xor ax, ax ; 31 c0
+ mov word [bp+014h], ax ; 89 46 14
mov word [bp+016h], ax ; 89 46 16
- mov word [bp+018h], ax ; 89 46 18
- jmp near 063c0h ; e9 c3 fe
- and byte [bp+02ah], 0feh ; 80 66 2a fe
+ mov dword [bp+020h], strict dword 0534d4150h ; 66 c7 46 20 50 41 4d 53
+ mov dword [bp+01ch], strict dword 000000014h ; 66 c7 46 1c 14 00 00 00
+ and byte [bp+028h], 0feh ; 80 66 28 fe
+ jmp short 0673eh ; eb 75
+ mov word [bp+028h], bx ; 89 5e 28
mov ax, strict word 00031h ; b8 31 00
- call 0165ch ; e8 55 b1
- xor ah, ah ; 30 e4
- mov dx, ax ; 89 c2
+ call 0165ch ; e8 8a af
+ movzx dx, al ; 0f b6 d0
sal dx, 008h ; c1 e2 08
mov ax, strict word 00030h ; b8 30 00
- call 0165ch ; e8 48 b1
+ call 0165ch ; e8 7e af
xor ah, ah ; 30 e4
or dx, ax ; 09 c2
- mov word [bp+01eh], dx ; 89 56 1e
+ mov word [bp+01ch], dx ; 89 56 1c
cmp dx, 03c00h ; 81 fa 00 3c
- jbe short 06526h ; 76 05
- mov word [bp+01eh], 03c00h ; c7 46 1e 00 3c
+ jbe short 066f0h ; 76 05
+ mov word [bp+01ch], 03c00h ; c7 46 1c 00 3c
mov ax, strict word 00035h ; b8 35 00
- call 0165ch ; e8 30 b1
+ call 0165ch ; e8 66 af
movzx dx, al ; 0f b6 d0
sal dx, 008h ; c1 e2 08
mov ax, strict word 00034h ; b8 34 00
- call 0165ch ; e8 24 b1
+ call 0165ch ; e8 5a af
xor ah, ah ; 30 e4
or dx, ax ; 09 c2
- mov word [bp+01ah], dx ; 89 56 1a
- mov ax, word [bp+01eh] ; 8b 46 1e
- mov word [bp+022h], ax ; 89 46 22
- mov word [bp+016h], dx ; 89 56 16
- leave ; c9
- pop si ; 5e
- retn ; c3
- mov bx, 00cd6h ; bb d6 0c
+ mov word [bp+018h], dx ; 89 56 18
+ mov ax, word [bp+01ch] ; 8b 46 1c
+ mov word [bp+020h], ax ; 89 46 20
+ mov word [bp+014h], dx ; 89 56 14
+ jmp short 0673eh ; eb 2a
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 58 b3
- push word [bp+016h] ; ff 76 16
- push word [bp+022h] ; ff 76 22
- push 0084ah ; 68 4a 08
+ call 018e1h ; e8 c2 b1
+ push word [bp+014h] ; ff 76 14
+ push word [bp+020h] ; ff 76 20
+ push 008bch ; 68 bc 08
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 85 b3
+ call 01922h ; e8 f5 b1
add sp, strict byte 00008h ; 83 c4 08
- or byte [bp+02ah], 001h ; 80 4e 2a 01
- mov ax, word [bp+022h] ; 8b 46 22
+ or byte [bp+028h], 001h ; 80 4e 28 01
+ mov ax, word [bp+020h] ; 8b 46 20
xor al, al ; 30 c0
or AL, strict byte 086h ; 0c 86
- mov word [bp+022h], ax ; 89 46 22
- leave ; c9
+ mov word [bp+020h], ax ; 89 46 20
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-init_rtc_: ; 0xf6578 LB 0x25
+_inv_op_handler: ; 0xf6744 LB 0x195
+ push bp ; 55
+ mov bp, sp ; 89 e5
+ push si ; 56
+ push di ; 57
+ push ax ; 50
+ push ax ; 50
+ les bx, [bp+018h] ; c4 5e 18
+ cmp byte [es:bx], 0f0h ; 26 80 3f f0
+ jne short 0675ah ; 75 06
+ inc word [bp+018h] ; ff 46 18
+ jmp near 068d2h ; e9 78 01
+ cmp word [es:bx], 0050fh ; 26 81 3f 0f 05
+ jne near 068ceh ; 0f 85 6b 01
+ mov si, 00800h ; be 00 08
+ xor ax, ax ; 31 c0
+ mov word [bp-006h], ax ; 89 46 fa
+ mov word [bp-008h], ax ; 89 46 f8
+ mov es, ax ; 8e c0
+ mov bx, word [es:si+02ch] ; 26 8b 5c 2c
+ sub bx, strict byte 00006h ; 83 eb 06
+ mov dx, word [es:si+020h] ; 26 8b 54 20
+ mov ax, word [es:si+01ah] ; 26 8b 44 1a
+ mov es, dx ; 8e c2
+ mov word [es:bx], ax ; 26 89 07
+ mov es, [bp-006h] ; 8e 46 fa
+ mov ax, word [es:si+022h] ; 26 8b 44 22
+ mov es, dx ; 8e c2
+ mov word [es:bx+002h], ax ; 26 89 47 02
+ mov es, [bp-006h] ; 8e 46 fa
+ mov ax, word [es:si+018h] ; 26 8b 44 18
+ mov es, dx ; 8e c2
+ mov word [es:bx+004h], ax ; 26 89 47 04
+ mov es, [bp-006h] ; 8e 46 fa
+ movzx bx, byte [es:si+038h] ; 26 0f b6 5c 38
+ mov di, word [es:si+036h] ; 26 8b 7c 36
+ mov ax, word [es:si+024h] ; 26 8b 44 24
+ xor dx, dx ; 31 d2
+ mov cx, strict word 00004h ; b9 04 00
+ sal ax, 1 ; d1 e0
+ rcl dx, 1 ; d1 d2
+ loop 067b3h ; e2 fa
+ cmp bx, dx ; 39 d3
+ jne short 067c1h ; 75 04
+ cmp di, ax ; 39 c7
+ je short 067c6h ; 74 05
+ mov word [bp-008h], strict word 00001h ; c7 46 f8 01 00
+ mov es, [bp-006h] ; 8e 46 fa
+ movzx di, byte [es:si+04ah] ; 26 0f b6 7c 4a
+ mov bx, word [es:si+048h] ; 26 8b 5c 48
+ mov ax, word [es:si+01eh] ; 26 8b 44 1e
+ xor dx, dx ; 31 d2
+ mov cx, strict word 00004h ; b9 04 00
+ sal ax, 1 ; d1 e0
+ rcl dx, 1 ; d1 d2
+ loop 067dbh ; e2 fa
+ cmp di, dx ; 39 d7
+ jne short 067e9h ; 75 04
+ cmp bx, ax ; 39 c3
+ je short 067edh ; 74 04
+ or byte [bp-008h], 002h ; 80 4e f8 02
+ push strict byte 00000h ; 6a 00
+ push 00800h ; 68 00 08
+ push strict byte 0001fh ; 6a 1f
+ db 08bh, 0dch
+ ; mov bx, sp ; 8b dc
+ lgdt [ss:bx] ; 36 0f 01 17
+ add sp, strict byte 00006h ; 83 c4 06
+ mov es, [bp-006h] ; 8e 46 fa
+ mov ax, word [es:si+03ah] ; 26 8b 44 3a
+ mov word [es:si+008h], ax ; 26 89 44 08
+ mov ax, word [es:si+036h] ; 26 8b 44 36
+ mov word [es:si+00ah], ax ; 26 89 44 0a
+ movzx dx, byte [es:si+039h] ; 26 0f b6 54 39
+ sal dx, 008h ; c1 e2 08
+ movzx ax, byte [es:si+038h] ; 26 0f b6 44 38
+ or dx, ax ; 09 c2
+ mov word [es:si+00ch], dx ; 26 89 54 0c
+ mov word [es:si+00eh], strict word 00000h ; 26 c7 44 0e 00 00
+ mov ax, word [es:si+04ch] ; 26 8b 44 4c
+ mov word [es:si], ax ; 26 89 04
+ mov ax, word [es:si+048h] ; 26 8b 44 48
+ mov word [es:si+002h], ax ; 26 89 44 02
+ movzx dx, byte [es:si+04bh] ; 26 0f b6 54 4b
+ sal dx, 008h ; c1 e2 08
+ movzx ax, byte [es:si+04ah] ; 26 0f b6 44 4a
+ or dx, ax ; 09 c2
+ mov word [es:si+004h], dx ; 26 89 54 04
+ movzx ax, byte [es:si+05ch] ; 26 0f b6 44 5c
+ mov dx, word [es:si+05ah] ; 26 8b 54 5a
+ push ax ; 50
push dx ; 52
+ push word [es:si+05eh] ; 26 ff 74 5e
+ db 08bh, 0dch
+ ; mov bx, sp ; 8b dc
+ lidt [ss:bx] ; 36 0f 01 1f
+ add sp, strict byte 00006h ; 83 c4 06
+ mov cx, word [bp-008h] ; 8b 4e f8
+ mov ax, 00080h ; b8 80 00
+ mov ss, ax ; 8e d0
+ mov ax, word [ss:0001eh] ; 36 a1 1e 00
+ mov ds, ax ; 8e d8
+ mov ax, word [ss:00024h] ; 36 a1 24 00
+ mov es, ax ; 8e c0
+ smsw ax ; 0f 01 e0
+ inc ax ; 40
+ lmsw ax ; 0f 01 f0
+ mov ax, strict word 00008h ; b8 08 00
+ test cx, strict word 00001h ; f7 c1 01 00
+ je near 0688bh ; 0f 84 02 00
+ mov es, ax ; 8e c0
+ test cx, strict word 00002h ; f7 c1 02 00
+ je near 068b3h ; 0f 84 20 00
+ mov bx, word [word ss:00000h] ; 36 8b 1e 00 00
+ mov word [word ss:00008h], bx ; 36 89 1e 08 00
+ mov bx, word [word ss:00002h] ; 36 8b 1e 02 00
+ mov word [word ss:0000ah], bx ; 36 89 1e 0a 00
+ mov bx, word [word ss:00004h] ; 36 8b 1e 04 00
+ mov word [word ss:0000ch], bx ; 36 89 1e 0c 00
+ mov ds, ax ; 8e d8
+ mov eax, cr0 ; 0f 20 c0
+ dec ax ; 48
+ mov cr0, eax ; 0f 22 c0
+ mov sp, strict word 00026h ; bc 26 00
+ popaw ; 61
+ mov sp, word [word ss:0002ch] ; 36 8b 26 2c 00
+ sub sp, strict byte 00006h ; 83 ec 06
+ mov ss, [word ss:00020h] ; 36 8e 16 20 00
+ iret ; cf
+ jmp short 068d2h ; eb 04
+ sti ; fb
+ hlt ; f4
+ jmp short 068cfh ; eb fd
+ lea sp, [bp-004h] ; 8d 66 fc
+ pop di ; 5f
+ pop si ; 5e
+ pop bp ; 5d
+ retn ; c3
+init_rtc_: ; 0xf68d9 LB 0x28
push bp ; 55
mov bp, sp ; 89 e5
+ push dx ; 52
mov dx, strict word 00026h ; ba 26 00
mov ax, strict word 0000ah ; b8 0a 00
- call 0166dh ; e8 e8 b0
+ call 01679h ; e8 93 ad
mov dx, strict word 00002h ; ba 02 00
mov ax, strict word 0000bh ; b8 0b 00
- call 0166dh ; e8 df b0
+ call 01679h ; e8 8a ad
mov ax, strict word 0000ch ; b8 0c 00
- call 0165ch ; e8 c8 b0
+ call 0165ch ; e8 67 ad
mov ax, strict word 0000dh ; b8 0d 00
- call 0165ch ; e8 c2 b0
- pop bp ; 5d
+ call 0165ch ; e8 61 ad
+ lea sp, [bp-002h] ; 8d 66 fe
pop dx ; 5a
+ pop bp ; 5d
retn ; c3
-rtc_updating_: ; 0xf659d LB 0x1f
- push dx ; 52
+rtc_updating_: ; 0xf6901 LB 0x21
push bp ; 55
mov bp, sp ; 89 e5
+ push dx ; 52
mov dx, 061a8h ; ba a8 61
dec dx ; 4a
- je short 065b6h ; 74 0f
+ je short 06919h ; 74 0e
mov ax, strict word 0000ah ; b8 0a 00
- call 0165ch ; e8 af b0
+ call 0165ch ; e8 4b ad
test AL, strict byte 080h ; a8 80
- jne short 065a4h ; 75 f3
+ jne short 06908h ; 75 f3
xor ax, ax ; 31 c0
- pop bp ; 5d
- pop dx ; 5a
- retn ; c3
+ jmp short 0691ch ; eb 03
mov ax, strict word 00001h ; b8 01 00
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop dx ; 5a
+ pop bp ; 5d
retn ; c3
-_int70_function: ; 0xf65bc LB 0xbb
+_int70_function: ; 0xf6922 LB 0xbe
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
- enter 00002h, 000h ; c8 02 00 00
+ push ax ; 50
mov ax, strict word 0000bh ; b8 0b 00
- call 0165ch ; e8 95 b0
+ call 0165ch ; e8 2f ad
mov dl, al ; 88 c2
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-004h], al ; 88 46 fc
mov ax, strict word 0000ch ; b8 0c 00
- call 0165ch ; e8 8a b0
+ call 0165ch ; e8 24 ad
mov dh, al ; 88 c6
test dl, 060h ; f6 c2 60
- je near 06661h ; 0f 84 86 00
+ je near 069c7h ; 0f 84 86 00
test AL, strict byte 020h ; a8 20
- je short 065e3h ; 74 04
+ je short 06949h ; 74 04
sti ; fb
int 04ah ; cd 4a
cli ; fa
test dh, 040h ; f6 c6 40
- je near 06661h ; 0f 84 77 00
+ je near 069c7h ; 0f 84 77 00
mov dx, 000a0h ; ba a0 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 0d b0
+ call 01600h ; e8 a7 ac
test al, al ; 84 c0
- je short 06661h ; 74 6a
+ je short 069c7h ; 74 6a
mov dx, 0009ch ; ba 9c 00
mov ax, strict word 00040h ; b8 40 00
- call 01638h ; e8 38 b0
+ call 01638h ; e8 d2 ac
test dx, dx ; 85 d2
- jne short 0664dh ; 75 49
+ jne short 069b3h ; 75 49
cmp ax, 003d1h ; 3d d1 03
- jnc short 0664dh ; 73 44
+ jnc short 069b3h ; 73 44
mov dx, 00098h ; ba 98 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 0a b0
+ call 0161ch ; e8 a4 ac
mov si, ax ; 89 c6
mov dx, 0009ah ; ba 9a 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 ff af
+ call 0161ch ; e8 99 ac
mov cx, ax ; 89 c1
xor bx, bx ; 31 db
mov dx, 000a0h ; ba a0 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 e4 af
- mov al, byte [bp-002h] ; 8a 46 fe
+ call 0160eh ; e8 7e ac
+ mov al, byte [bp-004h] ; 8a 46 fc
and AL, strict byte 037h ; 24 37
movzx dx, al ; 0f b6 d0
mov ax, strict word 0000bh ; b8 0b 00
- call 0166dh ; e8 35 b0
+ call 01679h ; e8 db ac
mov dx, cx ; 89 ca
mov ax, si ; 89 f0
- call 01600h ; e8 c1 af
+ call 01600h ; e8 5b ac
or AL, strict byte 080h ; 0c 80
movzx bx, al ; 0f b6 d8
mov dx, cx ; 89 ca
mov ax, si ; 89 f0
- call 0160eh ; e8 c3 af
- jmp short 06661h ; eb 14
+ call 0160eh ; e8 5d ac
+ jmp short 069c7h ; eb 14
mov bx, ax ; 89 c3
add bx, 0fc2fh ; 81 c3 2f fc
mov cx, dx ; 89 d1
adc cx, strict byte 0ffffh ; 83 d1 ff
mov dx, 0009ch ; ba 9c 00
mov ax, strict word 00040h ; b8 40 00
- call 0164ah ; e8 e9 af
- call 0e03bh ; e8 d7 79
- leave ; c9
+ call 0164ah ; e8 83 ac
+ call 0e03bh ; e8 71 76
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn ; c3
- mov fs, [bp-04bh] ; 8e 66 b5
- db 066h, 0dah, 066h, 00ch
- ; fisub dword [bp+00ch] ; 66 da 66 0c
- db 067h, 05ah
- ; pop dx ; 67 5a
- db 067h, 090h
- ; nop ; 67 90
- sal byte [edi+027h], CL ; 67 d2 67 27
- db 068h
-_int1a_function: ; 0xf6677 LB 0x1c0
+ imul word [bx+di+020h] ; f7 69 20
+ push strict byte 00045h ; 6a 45
+ push strict byte 00077h ; 6a 77
+ push strict byte 0ffc6h ; 6a c6
+ push strict byte 0fffeh ; 6a fe
+ push strict byte 00041h ; 6a 41
+ db 06bh
+ cbw ; 98
+ db 06bh
+_int1a_function: ; 0xf69e0 LB 0x1c8
push bp ; 55
mov bp, sp ; 89 e5
sti ; fb
mov al, byte [bp+013h] ; 8a 46 13
cmp AL, strict byte 007h ; 3c 07
- jnbe near 066b3h ; 0f 87 2f 00
+ jnbe near 06a1ch ; 0f 87 2f 00
movzx bx, al ; 0f b6 d8
add bx, bx ; 01 db
- jmp word [cs:bx+06667h] ; 2e ff a7 67 66
+ jmp word [cs:bx+069d0h] ; 2e ff a7 d0 69
cli ; fa
mov bx, 0046eh ; bb 6e 04
xor ax, ax ; 31 c0
@@ -9041,6 +9500,7 @@ _int1a_function: ; 0xf6677 LB 0x1c0
mov byte [bp+012h], al ; 88 46 12
mov byte [es:bx], 000h ; 26 c6 07 00
sti ; fb
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
cli ; fa
@@ -9056,43 +9516,41 @@ _int1a_function: ; 0xf6677 LB 0x1c0
mov byte [es:bx], 000h ; 26 c6 07 00
sti ; fb
mov byte [bp+013h], 000h ; c6 46 13 00
- pop bp ; 5d
- retn ; c3
- call 0659dh ; e8 c0 fe
+ jmp short 06a1ch ; eb d7
+ call 06901h ; e8 b9 fe
test ax, ax ; 85 c0
- je short 066e3h ; 74 02
- pop bp ; 5d
- retn ; c3
+ je short 06a4eh ; 74 02
+ jmp short 06a1ch ; eb ce
xor ax, ax ; 31 c0
- call 0165ch ; e8 74 af
+ call 0165ch ; e8 09 ac
mov byte [bp+00fh], al ; 88 46 0f
mov ax, strict word 00002h ; b8 02 00
- call 0165ch ; e8 6b af
+ call 0165ch ; e8 00 ac
mov byte [bp+010h], al ; 88 46 10
mov ax, strict word 00004h ; b8 04 00
- call 0165ch ; e8 62 af
+ call 0165ch ; e8 f7 ab
mov bl, al ; 88 c3
mov byte [bp+011h], al ; 88 46 11
mov ax, strict word 0000bh ; b8 0b 00
- call 0165ch ; e8 57 af
+ call 0165ch ; e8 ec ab
and AL, strict byte 001h ; 24 01
mov byte [bp+00eh], al ; 88 46 0e
- jmp short 06751h ; eb 45
- call 0659dh ; e8 8e fe
+ jmp short 06abch ; eb 45
+ call 06901h ; e8 87 fe
test ax, ax ; 85 c0
- je short 06716h ; 74 03
- call 06578h ; e8 62 fe
+ je short 06a81h ; 74 03
+ call 068d9h ; e8 58 fe
movzx dx, byte [bp+00fh] ; 0f b6 56 0f
xor ax, ax ; 31 c0
- call 0166dh ; e8 4e af
+ call 01679h ; e8 ef ab
movzx dx, byte [bp+010h] ; 0f b6 56 10
mov ax, strict word 00002h ; b8 02 00
- call 0166dh ; e8 44 af
+ call 01679h ; e8 e5 ab
movzx dx, byte [bp+011h] ; 0f b6 56 11
mov ax, strict word 00004h ; b8 04 00
- call 0166dh ; e8 3a af
+ call 01679h ; e8 db ab
mov ax, strict word 0000bh ; b8 0b 00
- call 0165ch ; e8 23 af
+ call 0165ch ; e8 b8 ab
mov bl, al ; 88 c3
and bl, 060h ; 80 e3 60
or bl, 002h ; 80 cb 02
@@ -9101,76 +9559,71 @@ _int1a_function: ; 0xf6677 LB 0x1c0
or bl, al ; 08 c3
movzx dx, bl ; 0f b6 d3
mov ax, strict word 0000bh ; b8 0b 00
- call 0166dh ; e8 1c af
+ call 01679h ; e8 bd ab
mov byte [bp+013h], 000h ; c6 46 13 00
mov byte [bp+012h], bl ; 88 5e 12
- pop bp ; 5d
- retn ; c3
+ jmp near 06a1ch ; e9 56 ff
mov byte [bp+013h], 000h ; c6 46 13 00
- call 0659dh ; e8 3c fe
+ call 06901h ; e8 34 fe
test ax, ax ; 85 c0
- je short 06767h ; 74 02
- pop bp ; 5d
- retn ; c3
+ je short 06ad4h ; 74 03
+ jmp near 06a1ch ; e9 48 ff
mov ax, strict word 00009h ; b8 09 00
- call 0165ch ; e8 ef ae
+ call 0165ch ; e8 82 ab
mov byte [bp+010h], al ; 88 46 10
mov ax, strict word 00008h ; b8 08 00
- call 0165ch ; e8 e6 ae
+ call 0165ch ; e8 79 ab
mov byte [bp+00fh], al ; 88 46 0f
mov ax, strict word 00007h ; b8 07 00
- call 0165ch ; e8 dd ae
+ call 0165ch ; e8 70 ab
mov byte [bp+00eh], al ; 88 46 0e
mov ax, strict word 00032h ; b8 32 00
- call 0165ch ; e8 d4 ae
+ call 0165ch ; e8 67 ab
mov byte [bp+011h], al ; 88 46 11
mov byte [bp+012h], al ; 88 46 12
- pop bp ; 5d
- retn ; c3
- call 0659dh ; e8 0a fe
+ jmp near 06a1ch ; e9 1e ff
+ call 06901h ; e8 00 fe
test ax, ax ; 85 c0
- je short 0679ch ; 74 05
- call 06578h ; e8 de fd
- pop bp ; 5d
- retn ; c3
+ je short 06b0bh ; 74 06
+ call 068d9h ; e8 d1 fd
+ jmp near 06a1ch ; e9 11 ff
movzx dx, byte [bp+010h] ; 0f b6 56 10
mov ax, strict word 00009h ; b8 09 00
- call 0166dh ; e8 c7 ae
+ call 01679h ; e8 64 ab
movzx dx, byte [bp+00fh] ; 0f b6 56 0f
mov ax, strict word 00008h ; b8 08 00
- call 0166dh ; e8 bd ae
+ call 01679h ; e8 5a ab
movzx dx, byte [bp+00eh] ; 0f b6 56 0e
mov ax, strict word 00007h ; b8 07 00
- call 0166dh ; e8 b3 ae
+ call 01679h ; e8 50 ab
movzx dx, byte [bp+011h] ; 0f b6 56 11
mov ax, strict word 00032h ; b8 32 00
- call 0166dh ; e8 a9 ae
+ call 01679h ; e8 46 ab
mov ax, strict word 0000bh ; b8 0b 00
- call 0165ch ; e8 92 ae
+ call 0165ch ; e8 23 ab
mov bl, al ; 88 c3
and bl, 07fh ; 80 e3 7f
- jmp near 06748h ; e9 76 ff
+ jmp near 06ab3h ; e9 72 ff
mov ax, strict word 0000bh ; b8 0b 00
- call 0165ch ; e8 84 ae
+ call 0165ch ; e8 15 ab
mov bl, al ; 88 c3
mov word [bp+012h], strict word 00000h ; c7 46 12 00 00
test AL, strict byte 020h ; a8 20
- je short 067e5h ; 74 02
- pop bp ; 5d
- retn ; c3
- call 0659dh ; e8 b5 fd
+ je short 06b55h ; 74 03
+ jmp near 06a1ch ; e9 c7 fe
+ call 06901h ; e8 a9 fd
test ax, ax ; 85 c0
- je short 067efh ; 74 03
- call 06578h ; e8 89 fd
+ je short 06b5fh ; 74 03
+ call 068d9h ; e8 7a fd
movzx dx, byte [bp+00fh] ; 0f b6 56 0f
mov ax, strict word 00001h ; b8 01 00
- call 0166dh ; e8 74 ae
+ call 01679h ; e8 10 ab
movzx dx, byte [bp+010h] ; 0f b6 56 10
mov ax, strict word 00003h ; b8 03 00
- call 0166dh ; e8 6a ae
+ call 01679h ; e8 06 ab
movzx dx, byte [bp+011h] ; 0f b6 56 11
mov ax, strict word 00005h ; b8 05 00
- call 0166dh ; e8 60 ae
+ call 01679h ; e8 fc aa
mov dx, 000a1h ; ba a1 00
in AL, DX ; ec
db 02ah, 0e4h
@@ -9182,31 +9635,30 @@ _int1a_function: ; 0xf6677 LB 0x1c0
or AL, strict byte 020h ; 0c 20
movzx dx, al ; 0f b6 d0
mov ax, strict word 0000bh ; b8 0b 00
- call 0166dh ; e8 48 ae
- pop bp ; 5d
- retn ; c3
+ call 01679h ; e8 e4 aa
+ jmp near 06a1ch ; e9 84 fe
mov ax, strict word 0000bh ; b8 0b 00
- call 0165ch ; e8 2f ae
+ call 0165ch ; e8 be aa
mov bl, al ; 88 c3
and AL, strict byte 057h ; 24 57
movzx dx, al ; 0f b6 d0
- jmp near 0674bh ; e9 14 ff
-send_to_mouse_ctrl_: ; 0xf6837 LB 0x31
- push bx ; 53
- push dx ; 52
+ jmp near 06ab6h ; e9 0e ff
+send_to_mouse_ctrl_: ; 0xf6ba8 LB 0x34
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push dx ; 52
mov bl, al ; 88 c3
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 06856h ; 74 0e
- push 00884h ; 68 84 08
- push 0109eh ; 68 9e 10
+ je short 06bc7h ; 74 0e
+ push 008f6h ; 68 f6 08
+ push 01182h ; 68 82 11
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 96 b0
+ call 01922h ; e8 5e ad
add sp, strict byte 00006h ; 83 c4 06
mov AL, strict byte 0d4h ; b0 d4
mov dx, strict word 00064h ; ba 64 00
@@ -9215,15 +9667,16 @@ send_to_mouse_ctrl_: ; 0xf6837 LB 0x31
mov dx, strict word 00060h ; ba 60 00
out DX, AL ; ee
xor al, bl ; 30 d8
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-get_mouse_data_: ; 0xf6868 LB 0x38
- push bx ; 53
- push cx ; 51
+get_mouse_data_: ; 0xf6bdc LB 0x3b
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push cx ; 51
mov bx, ax ; 89 c3
mov es, dx ; 8e c2
mov cx, 02710h ; b9 10 27
@@ -9233,41 +9686,42 @@ get_mouse_data_: ; 0xf6868 LB 0x38
; sub ah, ah ; 2a e4
and ax, strict word 00021h ; 25 21 00
cmp ax, strict word 00021h ; 3d 21 00
- je short 06889h ; 74 07
+ je short 06bfdh ; 74 07
test cx, cx ; 85 c9
- je short 06889h ; 74 03
+ je short 06bfdh ; 74 03
dec cx ; 49
- jmp short 06874h ; eb eb
+ jmp short 06be8h ; eb eb
test cx, cx ; 85 c9
- jne short 06891h ; 75 04
+ jne short 06c05h ; 75 04
mov AL, strict byte 001h ; b0 01
- jmp short 0689ch ; eb 0b
+ jmp short 06c10h ; eb 0b
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
mov byte [es:bx], al ; 26 88 07
xor al, al ; 30 c0
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-set_kbd_command_byte_: ; 0xf68a0 LB 0x2f
- push bx ; 53
- push dx ; 52
+set_kbd_command_byte_: ; 0xf6c17 LB 0x32
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push dx ; 52
mov bl, al ; 88 c3
mov dx, strict word 00064h ; ba 64 00
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 002h ; a8 02
- je short 068bfh ; 74 0e
- push 0088eh ; 68 8e 08
- push 0109eh ; 68 9e 10
+ je short 06c36h ; 74 0e
+ push 00900h ; 68 00 09
+ push 01182h ; 68 82 11
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 2d b0
+ call 01922h ; e8 ef ac
add sp, strict byte 00006h ; 83 c4 06
mov AL, strict byte 060h ; b0 60
mov dx, strict word 00064h ; ba 64 00
@@ -9275,15 +9729,18 @@ set_kbd_command_byte_: ; 0xf68a0 LB 0x2f
mov al, bl ; 88 d8
mov dx, strict word 00060h ; ba 60 00
out DX, AL ; ee
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-_int74_function: ; 0xf68cf LB 0xc6
- enter 00008h, 000h ; c8 08 00 00
+_int74_function: ; 0xf6c49 LB 0xca
+ push bp ; 55
+ mov bp, sp ; 89 e5
+ sub sp, strict byte 00008h ; 83 ec 08
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 40 ad
+ call 0161ch ; e8 c4 a9
mov cx, ax ; 89 c1
mov word [bp+004h], strict word 00000h ; c7 46 04 00 00
mov dx, strict word 00064h ; ba 64 00
@@ -9292,7 +9749,7 @@ _int74_function: ; 0xf68cf LB 0xc6
; sub ah, ah ; 2a e4
and AL, strict byte 021h ; 24 21
cmp AL, strict byte 021h ; 3c 21
- jne near 06983h ; 0f 85 92 00
+ jne near 06cffh ; 0f 85 92 00
mov dx, strict word 00060h ; ba 60 00
in AL, DX ; ec
db 02ah, 0e4h
@@ -9300,14 +9757,14 @@ _int74_function: ; 0xf68cf LB 0xc6
mov bl, al ; 88 c3
mov dx, strict word 00026h ; ba 26 00
mov ax, cx ; 89 c8
- call 01600h ; e8 ff ac
+ call 01600h ; e8 83 a9
mov byte [bp-006h], al ; 88 46 fa
mov dx, strict word 00027h ; ba 27 00
mov ax, cx ; 89 c8
- call 01600h ; e8 f4 ac
+ call 01600h ; e8 78 a9
mov byte [bp-008h], al ; 88 46 f8
test AL, strict byte 080h ; a8 80
- je short 06983h ; 74 70
+ je short 06cffh ; 74 70
mov al, byte [bp-008h] ; 8a 46 f8
and AL, strict byte 007h ; 24 07
mov byte [bp-002h], al ; 88 46 fe
@@ -9318,107 +9775,111 @@ _int74_function: ; 0xf68cf LB 0xc6
movzx dx, al ; 0f b6 d0
add dx, strict byte 00028h ; 83 c2 28
mov ax, cx ; 89 c8
- call 0160eh ; e8 de ac
+ call 0160eh ; e8 62 a9
mov al, byte [bp-004h] ; 8a 46 fc
cmp al, byte [bp-002h] ; 3a 46 fe
- jc short 06974h ; 72 3c
+ jc short 06cf0h ; 72 3c
mov dx, strict word 00028h ; ba 28 00
mov ax, cx ; 89 c8
- call 01600h ; e8 c0 ac
+ call 01600h ; e8 44 a9
xor ah, ah ; 30 e4
mov word [bp+00ch], ax ; 89 46 0c
mov dx, strict word 00029h ; ba 29 00
mov ax, cx ; 89 c8
- call 01600h ; e8 b3 ac
+ call 01600h ; e8 37 a9
xor ah, ah ; 30 e4
mov word [bp+00ah], ax ; 89 46 0a
mov dx, strict word 0002ah ; ba 2a 00
mov ax, cx ; 89 c8
- call 01600h ; e8 a6 ac
+ call 01600h ; e8 2a a9
xor ah, ah ; 30 e4
mov word [bp+008h], ax ; 89 46 08
xor al, al ; 30 c0
mov word [bp+006h], ax ; 89 46 06
mov byte [bp-006h], ah ; 88 66 fa
test byte [bp-008h], 080h ; f6 46 f8 80
- je short 06977h ; 74 0a
+ je short 06cf3h ; 74 0a
mov word [bp+004h], strict word 00001h ; c7 46 04 01 00
- jmp short 06977h ; eb 03
+ jmp short 06cf3h ; eb 03
inc byte [bp-006h] ; fe 46 fa
movzx bx, byte [bp-006h] ; 0f b6 5e fa
mov dx, strict word 00026h ; ba 26 00
mov ax, cx ; 89 c8
- call 0160eh ; e8 8b ac
- leave ; c9
+ call 0160eh ; e8 0f a9
+ mov sp, bp ; 89 ec
+ pop bp ; 5d
retn ; c3
- xlatb ; d7
- imul cx, word [di+06ah], 06ad0h ; 69 4d 6a d0 6a
- popaw ; 61
- imul cx, di, strict byte 0006bh ; 6b cf 6b
- and bp, word [bp+si-009h] ; 23 6a f7
- db 06bh
- db 0bch
- insb ; 6c
-_int15_function_mouse: ; 0xf6995 LB 0x386
+ push di ; 57
+ insw ; 6d
+ int 06dh ; cd 6d
+ push ax ; 50
+ outsb ; 6e
+ loope 06d79h ; e1 6e
+ dec di ; 4f
+ outsw ; 6f
+ mov word [0776dh], ax ; a3 6d 77
+ outsw ; 6f
+ cmp AL, strict byte 070h ; 3c 70
+_int15_function_mouse: ; 0xf6d13 LB 0x38b
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
- enter 00006h, 000h ; c8 06 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 79 ac
+ call 0161ch ; e8 f9 a8
mov cx, ax ; 89 c1
- cmp byte [bp+014h], 007h ; 80 7e 14 07
- jbe short 069b6h ; 76 0b
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 001h ; c6 46 15 01
- leave ; c9
- pop si ; 5e
- retn ; c3
+ cmp byte [bp+012h], 007h ; 80 7e 12 07
+ jbe short 06d36h ; 76 0b
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 001h ; c6 46 13 01
+ jmp near 07098h ; e9 62 03
mov ax, strict word 00065h ; b8 65 00
- call 068a0h ; e8 e4 fe
- and word [bp+01ah], strict byte 0fffeh ; 83 66 1a fe
- mov byte [bp+015h], 000h ; c6 46 15 00
- mov al, byte [bp+014h] ; 8a 46 14
+ call 06c17h ; e8 db fe
+ and word [bp+018h], strict byte 0fffeh ; 83 66 18 fe
+ mov byte [bp+013h], 000h ; c6 46 13 00
+ mov al, byte [bp+012h] ; 8a 46 12
cmp AL, strict byte 007h ; 3c 07
- jnbe near 06cffh ; 0f 87 32 03
+ jnbe near 0707fh ; 0f 87 32 03
movzx si, al ; 0f b6 f0
add si, si ; 01 f6
- jmp word [cs:si+06985h] ; 2e ff a4 85 69
- cmp byte [bp+00fh], 001h ; 80 7e 0f 01
- jnbe near 06d0ah ; 0f 87 2b 03
+ jmp word [cs:si+06d03h] ; 2e ff a4 03 6d
+ cmp byte [bp+00dh], 001h ; 80 7e 0d 01
+ jnbe near 0708ah ; 0f 87 2b 03
mov dx, strict word 00027h ; ba 27 00
mov ax, cx ; 89 c8
- call 01600h ; e8 19 ac
+ call 01600h ; e8 99 a8
test AL, strict byte 080h ; a8 80
- jne short 069f6h ; 75 0b
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 005h ; c6 46 15 05
- jmp near 06d12h ; e9 1c 03
- cmp byte [bp+00fh], 000h ; 80 7e 0f 00
+ jne short 06d76h ; 75 0b
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 005h ; c6 46 13 05
+ jmp near 07092h ; e9 1c 03
+ cmp byte [bp+00dh], 000h ; 80 7e 0d 00
db 00fh, 094h, 0c0h
; sete al ; 0f 94 c0
add AL, strict byte 0f4h ; 04 f4
xor ah, ah ; 30 e4
- call 06837h ; e8 33 fe
+ call 06ba8h ; e8 24 fe
test al, al ; 84 c0
- jne near 06c98h ; 0f 85 8e 02
+ jne near 07018h ; 0f 85 8e 02
mov dx, ss ; 8c d2
- lea ax, [bp-006h] ; 8d 46 fa
- call 06868h ; e8 56 fe
+ lea ax, [bp-008h] ; 8d 46 f8
+ call 06bdch ; e8 4a fe
test al, al ; 84 c0
- je near 06d12h ; 0f 84 fa 02
- cmp byte [bp-006h], 0fah ; 80 7e fa fa
- jne near 06c98h ; 0f 85 78 02
- jmp near 06d12h ; e9 ef 02
- mov al, byte [bp+00fh] ; 8a 46 0f
+ je near 07092h ; 0f 84 fa 02
+ cmp byte [bp-008h], 0fah ; 80 7e f8 fa
+ jne near 07018h ; 0f 85 78 02
+ jmp near 07092h ; e9 ef 02
+ mov al, byte [bp+00dh] ; 8a 46 0d
cmp AL, strict byte 001h ; 3c 01
- jc short 06a2eh ; 72 04
+ jc short 06daeh ; 72 04
cmp AL, strict byte 008h ; 3c 08
- jbe short 06a31h ; 76 03
- jmp near 06bc4h ; e9 93 01
+ jbe short 06db1h ; 76 03
+ jmp near 06f44h ; e9 93 01
mov dx, strict word 00027h ; ba 27 00
mov ax, cx ; 89 c8
- call 01600h ; e8 c7 ab
- mov ah, byte [bp+00fh] ; 8a 66 0f
+ call 01600h ; e8 47 a8
+ mov ah, byte [bp+00dh] ; 8a 66 0d
db 0feh, 0cch
; dec ah ; fe cc
and AL, strict byte 0f8h ; 24 f8
@@ -9426,308 +9887,311 @@ _int15_function_mouse: ; 0xf6995 LB 0x386
movzx bx, al ; 0f b6 d8
mov dx, strict word 00027h ; ba 27 00
mov ax, cx ; 89 c8
- call 0160eh ; e8 c1 ab
+ call 0160eh ; e8 41 a8
mov dx, strict word 00026h ; ba 26 00
mov ax, cx ; 89 c8
- call 01600h ; e8 ab ab
+ call 01600h ; e8 2b a8
and AL, strict byte 0f8h ; 24 f8
movzx bx, al ; 0f b6 d8
mov dx, strict word 00026h ; ba 26 00
mov ax, cx ; 89 c8
- call 0160eh ; e8 ac ab
+ call 0160eh ; e8 2c a8
mov ax, 000ffh ; b8 ff 00
- call 06837h ; e8 cf fd
+ call 06ba8h ; e8 c0 fd
test al, al ; 84 c0
- jne near 06c98h ; 0f 85 2a 02
+ jne near 07018h ; 0f 85 2a 02
mov dx, ss ; 8c d2
- lea ax, [bp-002h] ; 8d 46 fe
- call 06868h ; e8 f2 fd
+ lea ax, [bp-004h] ; 8d 46 fc
+ call 06bdch ; e8 e6 fd
mov cl, al ; 88 c1
- cmp byte [bp-002h], 0feh ; 80 7e fe fe
- jne short 06a89h ; 75 0b
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 004h ; c6 46 15 04
- jmp near 06d12h ; e9 89 02
- cmp byte [bp-002h], 0fah ; 80 7e fe fa
- je short 06a9fh ; 74 10
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ cmp byte [bp-004h], 0feh ; 80 7e fc fe
+ jne short 06e09h ; 75 0b
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 004h ; c6 46 13 04
+ jmp near 07092h ; e9 89 02
+ cmp byte [bp-004h], 0fah ; 80 7e fc fa
+ je short 06e1fh ; 74 10
+ movzx ax, byte [bp-004h] ; 0f b6 46 fc
push ax ; 50
- push 00899h ; 68 99 08
+ push 0090bh ; 68 0b 09
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 4d ae
+ call 01922h ; e8 06 ab
add sp, strict byte 00006h ; 83 c4 06
test cl, cl ; 84 c9
- jne near 06c98h ; 0f 85 f3 01
+ jne near 07018h ; 0f 85 f3 01
mov dx, ss ; 8c d2
- lea ax, [bp-006h] ; 8d 46 fa
- call 06868h ; e8 bb fd
+ lea ax, [bp-008h] ; 8d 46 f8
+ call 06bdch ; e8 af fd
test al, al ; 84 c0
- jne near 06c98h ; 0f 85 e5 01
+ jne near 07018h ; 0f 85 e5 01
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 06868h ; e8 ad fd
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 06bdch ; e8 a1 fd
test al, al ; 84 c0
- jne near 06c98h ; 0f 85 d7 01
+ jne near 07018h ; 0f 85 d7 01
+ mov al, byte [bp-008h] ; 8a 46 f8
+ mov byte [bp+00ch], al ; 88 46 0c
mov al, byte [bp-006h] ; 8a 46 fa
- mov byte [bp+00eh], al ; 88 46 0e
- mov al, byte [bp-004h] ; 8a 46 fc
- mov byte [bp+00fh], al ; 88 46 0f
- jmp near 06d12h ; e9 42 02
- mov al, byte [bp+00fh] ; 8a 46 0f
+ mov byte [bp+00dh], al ; 88 46 0d
+ jmp near 07092h ; e9 42 02
+ mov al, byte [bp+00dh] ; 8a 46 0d
cmp AL, strict byte 003h ; 3c 03
- jc short 06ae7h ; 72 10
- jbe short 06b05h ; 76 2c
+ jc short 06e67h ; 72 10
+ jbe short 06e85h ; 76 2c
cmp AL, strict byte 006h ; 3c 06
- je short 06b17h ; 74 3a
+ je short 06e97h ; 74 3a
cmp AL, strict byte 005h ; 3c 05
- je short 06b11h ; 74 30
+ je short 06e91h ; 74 30
cmp AL, strict byte 004h ; 3c 04
- je short 06b0bh ; 74 26
- jmp short 06b1dh ; eb 36
+ je short 06e8bh ; 74 26
+ jmp short 06e9dh ; eb 36
cmp AL, strict byte 002h ; 3c 02
- je short 06affh ; 74 14
+ je short 06e7fh ; 74 14
cmp AL, strict byte 001h ; 3c 01
- je short 06af9h ; 74 0a
+ je short 06e79h ; 74 0a
test al, al ; 84 c0
- jne short 06b1dh ; 75 2a
- mov byte [bp-006h], 00ah ; c6 46 fa 0a
- jmp short 06b21h ; eb 28
- mov byte [bp-006h], 014h ; c6 46 fa 14
- jmp short 06b21h ; eb 22
- mov byte [bp-006h], 028h ; c6 46 fa 28
- jmp short 06b21h ; eb 1c
- mov byte [bp-006h], 03ch ; c6 46 fa 3c
- jmp short 06b21h ; eb 16
- mov byte [bp-006h], 050h ; c6 46 fa 50
- jmp short 06b21h ; eb 10
- mov byte [bp-006h], 064h ; c6 46 fa 64
- jmp short 06b21h ; eb 0a
- mov byte [bp-006h], 0c8h ; c6 46 fa c8
- jmp short 06b21h ; eb 04
- mov byte [bp-006h], 000h ; c6 46 fa 00
- cmp byte [bp-006h], 000h ; 80 7e fa 00
- jbe short 06b56h ; 76 2f
+ jne short 06e9dh ; 75 2a
+ mov byte [bp-008h], 00ah ; c6 46 f8 0a
+ jmp short 06ea1h ; eb 28
+ mov byte [bp-008h], 014h ; c6 46 f8 14
+ jmp short 06ea1h ; eb 22
+ mov byte [bp-008h], 028h ; c6 46 f8 28
+ jmp short 06ea1h ; eb 1c
+ mov byte [bp-008h], 03ch ; c6 46 f8 3c
+ jmp short 06ea1h ; eb 16
+ mov byte [bp-008h], 050h ; c6 46 f8 50
+ jmp short 06ea1h ; eb 10
+ mov byte [bp-008h], 064h ; c6 46 f8 64
+ jmp short 06ea1h ; eb 0a
+ mov byte [bp-008h], 0c8h ; c6 46 f8 c8
+ jmp short 06ea1h ; eb 04
+ mov byte [bp-008h], 000h ; c6 46 f8 00
+ cmp byte [bp-008h], 000h ; 80 7e f8 00
+ jbe short 06ed6h ; 76 2f
mov ax, 000f3h ; b8 f3 00
- call 06837h ; e8 0a fd
+ call 06ba8h ; e8 fb fc
test al, al ; 84 c0
- jne short 06b4bh ; 75 1a
+ jne short 06ecbh ; 75 1a
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 06868h ; e8 2f fd
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- call 06837h ; e8 f7 fc
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 06bdch ; e8 23 fd
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
+ call 06ba8h ; e8 e8 fc
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 06868h ; e8 20 fd
- jmp near 06d12h ; e9 c7 01
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 003h ; c6 46 15 03
- jmp near 06d12h ; e9 bc 01
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 002h ; c6 46 15 02
- jmp near 06d12h ; e9 b1 01
- cmp byte [bp+00fh], 004h ; 80 7e 0f 04
- jnc short 06bc4h ; 73 5d
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 06bdch ; e8 14 fd
+ jmp near 07092h ; e9 c7 01
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 003h ; c6 46 13 03
+ jmp near 07092h ; e9 bc 01
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 002h ; c6 46 13 02
+ jmp near 07092h ; e9 b1 01
+ cmp byte [bp+00dh], 004h ; 80 7e 0d 04
+ jnc short 06f44h ; 73 5d
mov ax, 000e8h ; b8 e8 00
- call 06837h ; e8 ca fc
+ call 06ba8h ; e8 bb fc
test al, al ; 84 c0
- jne short 06bb9h ; 75 48
+ jne short 06f39h ; 75 48
mov dx, ss ; 8c d2
- lea ax, [bp-006h] ; 8d 46 fa
- call 06868h ; e8 ef fc
- cmp byte [bp-006h], 0fah ; 80 7e fa fa
- je short 06b8fh ; 74 10
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ lea ax, [bp-008h] ; 8d 46 f8
+ call 06bdch ; e8 e3 fc
+ cmp byte [bp-008h], 0fah ; 80 7e f8 fa
+ je short 06f0fh ; 74 10
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
push ax ; 50
- push 008c4h ; 68 c4 08
+ push 00936h ; 68 36 09
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 5d ad
+ call 01922h ; e8 16 aa
add sp, strict byte 00006h ; 83 c4 06
- movzx ax, byte [bp+00fh] ; 0f b6 46 0f
- call 06837h ; e8 a1 fc
+ movzx ax, byte [bp+00dh] ; 0f b6 46 0d
+ call 06ba8h ; e8 92 fc
mov dx, ss ; 8c d2
- lea ax, [bp-006h] ; 8d 46 fa
- call 06868h ; e8 ca fc
- cmp byte [bp-006h], 0fah ; 80 7e fa fa
- je near 06d12h ; 0f 84 6c 01
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ lea ax, [bp-008h] ; 8d 46 f8
+ call 06bdch ; e8 be fc
+ cmp byte [bp-008h], 0fah ; 80 7e f8 fa
+ je near 07092h ; 0f 84 6c 01
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
push ax ; 50
- push 008c4h ; 68 c4 08
+ push 00936h ; 68 36 09
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 36 ad
+ call 01922h ; e8 ef a9
add sp, strict byte 00006h ; 83 c4 06
- jmp near 06d12h ; e9 59 01
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 003h ; c6 46 15 03
- jmp near 06d12h ; e9 4e 01
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 002h ; c6 46 15 02
- jmp near 06d12h ; e9 43 01
+ jmp near 07092h ; e9 59 01
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 003h ; c6 46 13 03
+ jmp near 07092h ; e9 4e 01
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 002h ; c6 46 13 02
+ jmp near 07092h ; e9 43 01
mov ax, 000f2h ; b8 f2 00
- call 06837h ; e8 62 fc
+ call 06ba8h ; e8 53 fc
test al, al ; 84 c0
- jne short 06bech ; 75 13
+ jne short 06f6ch ; 75 13
mov dx, ss ; 8c d2
- lea ax, [bp-006h] ; 8d 46 fa
- call 06868h ; e8 87 fc
+ lea ax, [bp-008h] ; 8d 46 f8
+ call 06bdch ; e8 7b fc
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 06868h ; e8 7f fc
- jmp near 06ac7h ; e9 db fe
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 003h ; c6 46 15 03
- jmp near 06d12h ; e9 1b 01
- mov al, byte [bp+00fh] ; 8a 46 0f
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 06bdch ; e8 73 fc
+ jmp near 06e47h ; e9 db fe
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 003h ; c6 46 13 03
+ jmp near 07092h ; e9 1b 01
+ mov al, byte [bp+00dh] ; 8a 46 0d
test al, al ; 84 c0
- jbe short 06c05h ; 76 07
+ jbe short 06f85h ; 76 07
cmp AL, strict byte 002h ; 3c 02
- jbe short 06c6eh ; 76 6c
- jmp near 06ca2h ; e9 9d 00
+ jbe short 06feeh ; 76 6c
+ jmp near 07022h ; e9 9d 00
mov ax, 000e9h ; b8 e9 00
- call 06837h ; e8 2c fc
+ call 06ba8h ; e8 1d fc
test al, al ; 84 c0
- jne near 06c98h ; 0f 85 87 00
+ jne near 07018h ; 0f 85 87 00
mov dx, ss ; 8c d2
- lea ax, [bp-006h] ; 8d 46 fa
- call 06868h ; e8 4f fc
+ lea ax, [bp-008h] ; 8d 46 f8
+ call 06bdch ; e8 43 fc
mov cl, al ; 88 c1
- cmp byte [bp-006h], 0fah ; 80 7e fa fa
- je short 06c31h ; 74 10
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ cmp byte [bp-008h], 0fah ; 80 7e f8 fa
+ je short 06fb1h ; 74 10
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
push ax ; 50
- push 008c4h ; 68 c4 08
+ push 00936h ; 68 36 09
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 bb ac
+ call 01922h ; e8 74 a9
add sp, strict byte 00006h ; 83 c4 06
test cl, cl ; 84 c9
- jne short 06c98h ; 75 63
+ jne short 07018h ; 75 63
mov dx, ss ; 8c d2
- lea ax, [bp-006h] ; 8d 46 fa
- call 06868h ; e8 2b fc
+ lea ax, [bp-008h] ; 8d 46 f8
+ call 06bdch ; e8 1f fc
test al, al ; 84 c0
- jne short 06c98h ; 75 57
+ jne short 07018h ; 75 57
mov dx, ss ; 8c d2
- lea ax, [bp-004h] ; 8d 46 fc
- call 06868h ; e8 1f fc
+ lea ax, [bp-006h] ; 8d 46 fa
+ call 06bdch ; e8 13 fc
test al, al ; 84 c0
- jne short 06c98h ; 75 4b
+ jne short 07018h ; 75 4b
mov dx, ss ; 8c d2
- lea ax, [bp-002h] ; 8d 46 fe
- call 06868h ; e8 13 fc
+ lea ax, [bp-004h] ; 8d 46 fc
+ call 06bdch ; e8 07 fc
test al, al ; 84 c0
- jne short 06c98h ; 75 3f
+ jne short 07018h ; 75 3f
+ mov al, byte [bp-008h] ; 8a 46 f8
+ mov byte [bp+00ch], al ; 88 46 0c
mov al, byte [bp-006h] ; 8a 46 fa
- mov byte [bp+00eh], al ; 88 46 0e
- mov al, byte [bp-004h] ; 8a 46 fc
- mov byte [bp+012h], al ; 88 46 12
- mov al, byte [bp-002h] ; 8a 46 fe
mov byte [bp+010h], al ; 88 46 10
- jmp near 06d12h ; e9 a4 00
+ mov al, byte [bp-004h] ; 8a 46 fc
+ mov byte [bp+00eh], al ; 88 46 0e
+ jmp near 07092h ; e9 a4 00
cmp AL, strict byte 001h ; 3c 01
- jne short 06c77h ; 75 05
+ jne short 06ff7h ; 75 05
mov ax, 000e6h ; b8 e6 00
- jmp short 06c7ah ; eb 03
+ jmp short 06ffah ; eb 03
mov ax, 000e7h ; b8 e7 00
- call 06837h ; e8 ba fb
+ call 06ba8h ; e8 ab fb
mov cl, al ; 88 c1
test cl, cl ; 84 c9
- jne short 06c92h ; 75 0f
+ jne short 07012h ; 75 0f
mov dx, ss ; 8c d2
- lea ax, [bp-006h] ; 8d 46 fa
- call 06868h ; e8 dd fb
- cmp byte [bp-006h], 0fah ; 80 7e fa fa
+ lea ax, [bp-008h] ; 8d 46 f8
+ call 06bdch ; e8 d1 fb
+ cmp byte [bp-008h], 0fah ; 80 7e f8 fa
db 00fh, 095h, 0c1h
; setne cl ; 0f 95 c1
test cl, cl ; 84 c9
- je near 06d12h ; 0f 84 7a 00
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 003h ; c6 46 15 03
- jmp short 06d12h ; eb 70
- movzx ax, byte [bp+00fh] ; 0f b6 46 0f
+ je near 07092h ; 0f 84 7a 00
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 003h ; c6 46 13 03
+ jmp short 07092h ; eb 70
+ movzx ax, byte [bp+00dh] ; 0f b6 46 0d
push ax ; 50
- push 008f0h ; 68 f0 08
+ push 00962h ; 68 62 09
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 3a ac
+ call 01922h ; e8 f3 a8
add sp, strict byte 00006h ; 83 c4 06
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 001h ; c6 46 15 01
- jmp short 06d12h ; eb 56
- mov si, word [bp+00eh] ; 8b 76 0e
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 001h ; c6 46 13 01
+ jmp short 07092h ; eb 56
+ mov si, word [bp+00ch] ; 8b 76 0c
mov bx, si ; 89 f3
mov dx, strict word 00022h ; ba 22 00
mov ax, cx ; 89 c8
- call 0162ah ; e8 61 a9
- mov bx, word [bp+016h] ; 8b 5e 16
+ call 0162ah ; e8 e1 a5
+ mov bx, word [bp+014h] ; 8b 5e 14
mov dx, strict word 00024h ; ba 24 00
mov ax, cx ; 89 c8
- call 0162ah ; e8 56 a9
+ call 0162ah ; e8 d6 a5
mov dx, strict word 00027h ; ba 27 00
mov ax, cx ; 89 c8
- call 01600h ; e8 24 a9
+ call 01600h ; e8 a4 a5
mov ah, al ; 88 c4
test si, si ; 85 f6
- jne short 06cf0h ; 75 0e
- cmp word [bp+016h], strict byte 00000h ; 83 7e 16 00
- jne short 06cf0h ; 75 08
+ jne short 07070h ; 75 0e
+ cmp word [bp+014h], strict byte 00000h ; 83 7e 14 00
+ jne short 07070h ; 75 08
test AL, strict byte 080h ; a8 80
- je short 06cf2h ; 74 06
+ je short 07072h ; 74 06
and AL, strict byte 07fh ; 24 7f
- jmp short 06cf2h ; eb 02
+ jmp short 07072h ; eb 02
or AL, strict byte 080h ; 0c 80
movzx bx, al ; 0f b6 d8
mov dx, strict word 00027h ; ba 27 00
mov ax, cx ; 89 c8
- call 0160eh ; e8 11 a9
- jmp short 06d12h ; eb 13
- push 0090ah ; 68 0a 09
+ call 0160eh ; e8 91 a5
+ jmp short 07092h ; eb 13
+ push 0097ch ; 68 7c 09
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 e2 ab
+ call 01922h ; e8 9b a8
add sp, strict byte 00004h ; 83 c4 04
- or word [bp+01ah], strict byte 00001h ; 83 4e 1a 01
- mov byte [bp+015h], 001h ; c6 46 15 01
+ or word [bp+018h], strict byte 00001h ; 83 4e 18 01
+ mov byte [bp+013h], 001h ; c6 46 13 01
mov ax, strict word 00047h ; b8 47 00
- call 068a0h ; e8 88 fb
- leave ; c9
+ call 06c17h ; e8 7f fb
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-_int17_function: ; 0xf6d1b LB 0xb1
+_int17_function: ; 0xf709e LB 0xb3
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
- enter 00002h, 000h ; c8 02 00 00
+ push ax ; 50
sti ; fb
- mov dx, word [bp+010h] ; 8b 56 10
+ mov dx, word [bp+00eh] ; 8b 56 0e
add dx, dx ; 01 d2
add dx, strict byte 00008h ; 83 c2 08
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 ed a8
+ call 0161ch ; e8 6a a5
mov bx, ax ; 89 c3
mov si, ax ; 89 c6
- cmp byte [bp+015h], 003h ; 80 7e 15 03
- jnc near 06dc5h ; 0f 83 8a 00
- mov ax, word [bp+010h] ; 8b 46 10
+ cmp byte [bp+013h], 003h ; 80 7e 13 03
+ jnc near 07147h ; 0f 83 89 00
+ mov ax, word [bp+00eh] ; 8b 46 0e
cmp ax, strict word 00003h ; 3d 03 00
- jnc near 06dc5h ; 0f 83 80 00
+ jnc near 07147h ; 0f 83 7f 00
test bx, bx ; 85 db
- jbe near 06dc5h ; 0f 86 7a 00
+ jbe near 07147h ; 0f 86 79 00
mov dx, ax ; 89 c2
add dx, strict byte 00078h ; 83 c2 78
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 aa a8
+ call 01600h ; e8 27 a5
movzx cx, al ; 0f b6 c8
sal cx, 008h ; c1 e1 08
- cmp byte [bp+015h], 000h ; 80 7e 15 00
- jne short 06d8fh ; 75 2d
- mov al, byte [bp+014h] ; 8a 46 14
+ cmp byte [bp+013h], 000h ; 80 7e 13 00
+ jne short 07112h ; 75 2d
+ mov al, byte [bp+012h] ; 8a 46 12
mov dx, bx ; 89 da
out DX, AL ; ee
lea dx, [bx+002h] ; 8d 57 02
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov word [bp-002h], ax ; 89 46 fe
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov word [bp-004h], ax ; 89 46 fc
+ mov al, byte [bp-004h] ; 8a 46 fc
or AL, strict byte 001h ; 0c 01
out DX, AL ; ee
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ movzx ax, byte [bp-004h] ; 0f b6 46 fc
and AL, strict byte 0feh ; 24 fe
out DX, AL ; ee
lea dx, [si+001h] ; 8d 54 01
@@ -9735,22 +10199,22 @@ _int17_function: ; 0xf6d1b LB 0xb1
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 040h ; a8 40
- je short 06d8fh ; 74 07
+ je short 07112h ; 74 07
test cx, cx ; 85 c9
- je short 06d8fh ; 74 03
+ je short 07112h ; 74 03
dec cx ; 49
- jmp short 06d7eh ; eb ef
- cmp byte [bp+015h], 001h ; 80 7e 15 01
- jne short 06dabh ; 75 16
+ jmp short 07101h ; eb ef
+ cmp byte [bp+013h], 001h ; 80 7e 13 01
+ jne short 0712eh ; 75 16
lea dx, [si+002h] ; 8d 54 02
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov word [bp-002h], ax ; 89 46 fe
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ mov word [bp-004h], ax ; 89 46 fc
+ movzx ax, byte [bp-004h] ; 0f b6 46 fc
and AL, strict byte 0fbh ; 24 fb
out DX, AL ; ee
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov al, byte [bp-004h] ; 8a 46 fc
or AL, strict byte 004h ; 0c 04
out DX, AL ; ee
lea dx, [si+001h] ; 8d 54 01
@@ -9758,105 +10222,107 @@ _int17_function: ; 0xf6d1b LB 0xb1
db 02ah, 0e4h
; sub ah, ah ; 2a e4
xor AL, strict byte 048h ; 34 48
- mov byte [bp+015h], al ; 88 46 15
+ mov byte [bp+013h], al ; 88 46 13
test cx, cx ; 85 c9
- jne short 06dbeh ; 75 04
- or byte [bp+015h], 001h ; 80 4e 15 01
- and byte [bp+01eh], 0feh ; 80 66 1e fe
- leave ; c9
- pop si ; 5e
- retn ; c3
- or byte [bp+01eh], 001h ; 80 4e 1e 01
- leave ; c9
+ jne short 07141h ; 75 04
+ or byte [bp+013h], 001h ; 80 4e 13 01
+ and byte [bp+01ch], 0feh ; 80 66 1c fe
+ jmp short 0714bh ; eb 04
+ or byte [bp+01ch], 001h ; 80 4e 1c 01
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-wait_: ; 0xf6dcc LB 0xad
+wait_: ; 0xf7151 LB 0xb2
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push si ; 56
push di ; 57
- enter 0000ah, 000h ; c8 0a 00 00
+ sub sp, strict byte 0000ah ; 83 ec 0a
mov si, ax ; 89 c6
- mov byte [bp-004h], dl ; 88 56 fc
- mov byte [bp-002h], 000h ; c6 46 fe 00
+ mov byte [bp-00ch], dl ; 88 56 f4
+ mov byte [bp-00ah], 000h ; c6 46 f6 00
pushfw ; 9c
pop ax ; 58
- mov word [bp-008h], ax ; 89 46 f8
+ mov word [bp-010h], ax ; 89 46 f0
sti ; fb
xor cx, cx ; 31 c9
mov dx, 0046ch ; ba 6c 04
xor ax, ax ; 31 c0
- call 01638h ; e8 4b a8
- mov word [bp-006h], ax ; 89 46 fa
+ call 01638h ; e8 c4 a4
+ mov word [bp-00eh], ax ; 89 46 f2
mov bx, dx ; 89 d3
hlt ; f4
mov dx, 0046ch ; ba 6c 04
xor ax, ax ; 31 c0
- call 01638h ; e8 3d a8
- mov word [bp-00ah], ax ; 89 46 f6
+ call 01638h ; e8 b6 a4
+ mov word [bp-012h], ax ; 89 46 ee
mov di, dx ; 89 d7
cmp dx, bx ; 39 da
- jnbe short 06e0bh ; 77 07
- jne short 06e12h ; 75 0c
- cmp ax, word [bp-006h] ; 3b 46 fa
- jbe short 06e12h ; 76 07
- sub ax, word [bp-006h] ; 2b 46 fa
+ jnbe short 07192h ; 77 07
+ jne short 07199h ; 75 0c
+ cmp ax, word [bp-00eh] ; 3b 46 f2
+ jbe short 07199h ; 76 07
+ sub ax, word [bp-00eh] ; 2b 46 f2
sbb dx, bx ; 19 da
- jmp short 06e1dh ; eb 0b
+ jmp short 071a4h ; eb 0b
cmp dx, bx ; 39 da
- jc short 06e1dh ; 72 07
- jne short 06e21h ; 75 09
- cmp ax, word [bp-006h] ; 3b 46 fa
- jnc short 06e21h ; 73 04
+ jc short 071a4h ; 72 07
+ jne short 071a8h ; 75 09
+ cmp ax, word [bp-00eh] ; 3b 46 f2
+ jnc short 071a8h ; 73 04
sub si, ax ; 29 c6
sbb cx, dx ; 19 d1
- mov ax, word [bp-00ah] ; 8b 46 f6
- mov word [bp-006h], ax ; 89 46 fa
+ mov ax, word [bp-012h] ; 8b 46 ee
+ mov word [bp-00eh], ax ; 89 46 f2
mov bx, di ; 89 fb
mov ax, 00100h ; b8 00 01
int 016h ; cd 16
- je near 06e37h ; 0f 84 05 00
+ je near 071beh ; 0f 84 05 00
mov AL, strict byte 001h ; b0 01
- jmp near 06e39h ; e9 02 00
+ jmp near 071c0h ; e9 02 00
db 032h, 0c0h
; xor al, al ; 32 c0
test al, al ; 84 c0
- je short 06e61h ; 74 24
+ je short 071e8h ; 74 24
db 033h, 0c0h
; xor ax, ax ; 33 c0
int 016h ; cd 16
xchg ah, al ; 86 c4
mov dl, al ; 88 c2
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-00ah], al ; 88 46 f6
movzx ax, dl ; 0f b6 c2
push ax ; 50
- push 0092ch ; 68 2c 09
+ push 0099eh ; 68 9e 09
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 95 aa
+ call 01922h ; e8 47 a7
add sp, strict byte 00006h ; 83 c4 06
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 06e61h ; 74 04
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00
+ je short 071e8h ; 74 04
mov al, dl ; 88 d0
- jmp short 06e73h ; eb 12
+ jmp short 071fah ; eb 12
test cx, cx ; 85 c9
- jnle short 06df2h ; 7f 8d
- jne short 06e6bh ; 75 04
+ jnle short 07179h ; 7f 8d
+ jne short 071f2h ; 75 04
test si, si ; 85 f6
- jnbe short 06df2h ; 77 87
- mov ax, word [bp-008h] ; 8b 46 f8
+ jnbe short 07179h ; 77 87
+ mov ax, word [bp-010h] ; 8b 46 f0
push ax ; 50
popfw ; 9d
- mov al, byte [bp-002h] ; 8a 46 fe
- leave ; c9
+ mov al, byte [bp-00ah] ; 8a 46 f6
+ lea sp, [bp-008h] ; 8d 66 f8
pop di ; 5f
pop si ; 5e
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-read_logo_byte_: ; 0xf6e79 LB 0x13
- push dx ; 52
+read_logo_byte_: ; 0xf7203 LB 0x16
push bp ; 55
mov bp, sp ; 89 e5
+ push dx ; 52
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
mov dx, 003b8h ; ba b8 03
@@ -9864,101 +10330,106 @@ read_logo_byte_: ; 0xf6e79 LB 0x13
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop dx ; 5a
+ pop bp ; 5d
retn ; c3
-read_logo_word_: ; 0xf6e8c LB 0x11
- push dx ; 52
+read_logo_word_: ; 0xf7219 LB 0x14
push bp ; 55
mov bp, sp ; 89 e5
+ push dx ; 52
xor ah, ah ; 30 e4
or ah, 001h ; 80 cc 01
mov dx, 003b8h ; ba b8 03
out DX, ax ; ef
in ax, DX ; ed
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop dx ; 5a
+ pop bp ; 5d
retn ; c3
-print_detected_harddisks_: ; 0xf6e9d LB 0x12c
+print_detected_harddisks_: ; 0xf722d LB 0x130
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
+ push ax ; 50
+ push ax ; 50
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 6d a7
+ call 0161ch ; e8 dc a3
mov si, ax ; 89 c6
- mov byte [bp-002h], 000h ; c6 46 fe 00
+ mov byte [bp-00ch], 000h ; c6 46 f4 00
xor cl, cl ; 30 c9
xor ch, ch ; 30 ed
mov dx, 002c0h ; ba c0 02
- call 01600h ; e8 41 a7
- mov byte [bp-004h], al ; 88 46 fc
+ call 01600h ; e8 b0 a3
+ mov byte [bp-00eh], al ; 88 46 f2
xor bl, bl ; 30 db
- cmp bl, byte [bp-004h] ; 3a 5e fc
- jnc near 06f9eh ; 0f 83 d3 00
+ cmp bl, byte [bp-00eh] ; 3a 5e f2
+ jnc near 0732fh ; 0f 83 d3 00
movzx dx, bl ; 0f b6 d3
add dx, 002c1h ; 81 c2 c1 02
mov ax, si ; 89 f0
- call 01600h ; e8 29 a7
+ call 01600h ; e8 98 a3
mov bh, al ; 88 c7
cmp AL, strict byte 00ch ; 3c 0c
- jc short 06f01h ; 72 24
+ jc short 07292h ; 72 24
test cl, cl ; 84 c9
- jne short 06eeeh ; 75 0d
- push 0093dh ; 68 3d 09
+ jne short 0727fh ; 75 0d
+ push 009afh ; 68 af 09
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 00 aa
+ call 01922h ; e8 a8 a6
add sp, strict byte 00004h ; 83 c4 04
mov CL, strict byte 001h ; b1 01
movzx ax, bl ; 0f b6 c3
inc ax ; 40
push ax ; 50
- push 00951h ; 68 51 09
+ push 009c4h ; 68 c4 09
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 ee a9
+ call 01922h ; e8 96 a6
add sp, strict byte 00006h ; 83 c4 06
- jmp near 06f99h ; e9 98 00
+ jmp near 0732ah ; e9 98 00
cmp AL, strict byte 008h ; 3c 08
- jc short 06f18h ; 72 13
+ jc short 072a9h ; 72 13
test ch, ch ; 84 ed
- jne short 06f16h ; 75 0d
- push 00964h ; 68 64 09
+ jne short 072a7h ; 75 0d
+ push 009d7h ; 68 d7 09
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 d8 a9
+ call 01922h ; e8 80 a6
add sp, strict byte 00004h ; 83 c4 04
mov CH, strict byte 001h ; b5 01
- jmp short 06eeeh ; eb d6
+ jmp short 0727fh ; eb d6
cmp AL, strict byte 004h ; 3c 04
- jnc short 06f33h ; 73 17
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- jne short 06f33h ; 75 11
- push 00978h ; 68 78 09
+ jnc short 072c4h ; 73 17
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00
+ jne short 072c4h ; 75 11
+ push 009ech ; 68 ec 09
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 bf a9
+ call 01922h ; e8 67 a6
add sp, strict byte 00004h ; 83 c4 04
- mov byte [bp-002h], 001h ; c6 46 fe 01
- jmp short 06f49h ; eb 16
+ mov byte [bp-00ch], 001h ; c6 46 f4 01
+ jmp short 072dah ; eb 16
cmp bh, 004h ; 80 ff 04
- jc short 06f49h ; 72 11
+ jc short 072dah ; 72 11
test cl, cl ; 84 c9
- jne short 06f49h ; 75 0d
- push 0093dh ; 68 3d 09
+ jne short 072dah ; 75 0d
+ push 009feh ; 68 fe 09
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 a5 a9
+ call 01922h ; e8 4d a6
add sp, strict byte 00004h ; 83 c4 04
mov CL, strict byte 001h ; b1 01
movzx ax, bl ; 0f b6 c3
inc ax ; 40
push ax ; 50
- push 00989h ; 68 89 09
+ push 00a12h ; 68 12 0a
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 93 a9
+ call 01922h ; e8 3b a6
add sp, strict byte 00006h ; 83 c4 06
cmp bh, 004h ; 80 ff 04
- jc short 06f61h ; 72 03
+ jc short 072f2h ; 72 03
sub bh, 004h ; 80 ef 04
movzx ax, bh ; 0f b6 c7
cwd ; 99
@@ -9966,79 +10437,83 @@ print_detected_harddisks_: ; 0xf6e9d LB 0x12c
; sub ax, dx ; 2b c2
sar ax, 1 ; d1 f8
test ax, ax ; 85 c0
- je short 06f72h ; 74 05
- push 00993h ; 68 93 09
- jmp short 06f75h ; eb 03
- push 0099eh ; 68 9e 09
+ je short 07303h ; 74 05
+ push 00a1ch ; 68 1c 0a
+ jmp short 07306h ; eb 03
+ push 00a27h ; 68 27 0a
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 6f a9
+ call 01922h ; e8 17 a6
add sp, strict byte 00004h ; 83 c4 04
movzx ax, bh ; 0f b6 c7
mov di, strict word 00002h ; bf 02 00
cwd ; 99
idiv di ; f7 ff
test dx, dx ; 85 d2
- je short 06f8fh ; 74 05
- push 009a7h ; 68 a7 09
- jmp short 06f92h ; eb 03
- push 009adh ; 68 ad 09
+ je short 07320h ; 74 05
+ push 00a30h ; 68 30 0a
+ jmp short 07323h ; eb 03
+ push 00a36h ; 68 36 0a
push di ; 57
- call 018e9h ; e8 53 a9
+ call 01922h ; e8 fb a5
add sp, strict byte 00004h ; 83 c4 04
db 0feh, 0c3h
; inc bl ; fe c3
- jmp near 06ec4h ; e9 26 ff
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- jne short 06fb7h ; 75 13
+ jmp near 07255h ; e9 26 ff
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00
+ jne short 07348h ; 75 13
test cl, cl ; 84 c9
- jne short 06fb7h ; 75 0f
+ jne short 07348h ; 75 0f
test ch, ch ; 84 ed
- jne short 06fb7h ; 75 0b
- push 009b4h ; 68 b4 09
+ jne short 07348h ; 75 0b
+ push 00a3dh ; 68 3d 0a
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 35 a9
+ call 01922h ; e8 dd a5
add sp, strict byte 00004h ; 83 c4 04
- push 009c8h ; 68 c8 09
+ push 00a51h ; 68 51 0a
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 2a a9
+ call 01922h ; e8 d2 a5
add sp, strict byte 00004h ; 83 c4 04
- leave ; c9
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-get_boot_drive_: ; 0xf6fc9 LB 0x25
- push bx ; 53
- push dx ; 52
+get_boot_drive_: ; 0xf735d LB 0x28
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push dx ; 52
mov bl, al ; 88 c3
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 43 a6
+ call 0161ch ; e8 af a2
mov dx, 002c0h ; ba c0 02
- call 01600h ; e8 21 a6
+ call 01600h ; e8 8d a2
sub bl, 002h ; 80 eb 02
cmp bl, al ; 38 c3
- jc short 06fe8h ; 72 02
+ jc short 0737ch ; 72 02
mov BL, strict byte 0ffh ; b3 ff
mov al, bl ; 88 d8
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-show_logo_: ; 0xf6fee LB 0x21f
+show_logo_: ; 0xf7385 LB 0x224
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- enter 0000ch, 000h ; c8 0c 00 00
+ sub sp, strict byte 0000ch ; 83 ec 0c
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 1c a6
+ call 0161ch ; e8 83 a2
mov si, ax ; 89 c6
xor cl, cl ; 30 c9
xor dx, dx ; 31 d2
@@ -10049,130 +10524,130 @@ show_logo_: ; 0xf6fee LB 0x21f
mov AL, strict byte 048h ; b0 48
out strict byte 040h, AL ; e6 40
movzx ax, dl ; 0f b6 c2
- call 06e8ch ; e8 74 fe
+ call 07219h ; e8 68 fe
cmp ax, 066bbh ; 3d bb 66
- jne near 070f0h ; 0f 85 d1 00
+ jne near 07489h ; 0f 85 d1 00
push SS ; 16
pop ES ; 07
- lea di, [bp-00ch] ; 8d 7e f4
+ lea di, [bp-016h] ; 8d 7e ea
mov ax, 04f03h ; b8 03 4f
int 010h ; cd 10
mov word [es:di], bx ; 26 89 1d
cmp ax, strict word 0004fh ; 3d 4f 00
- jne near 070f0h ; 0f 85 bd 00
+ jne near 07489h ; 0f 85 bd 00
mov al, dl ; 88 d0
add AL, strict byte 004h ; 04 04
xor ah, ah ; 30 e4
- call 06e79h ; e8 3d fe
+ call 07203h ; e8 2e fe
mov ch, al ; 88 c5
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-00ch], al ; 88 46 f4
mov al, dl ; 88 d0
add AL, strict byte 005h ; 04 05
xor ah, ah ; 30 e4
- call 06e79h ; e8 2f fe
+ call 07203h ; e8 20 fe
mov dh, al ; 88 c6
- mov byte [bp-006h], al ; 88 46 fa
+ mov byte [bp-010h], al ; 88 46 f0
mov al, dl ; 88 d0
add AL, strict byte 002h ; 04 02
xor ah, ah ; 30 e4
- call 06e8ch ; e8 34 fe
+ call 07219h ; e8 28 fe
mov bx, ax ; 89 c3
- mov word [bp-00ah], ax ; 89 46 f6
+ mov word [bp-014h], ax ; 89 46 ec
mov al, dl ; 88 d0
add AL, strict byte 006h ; 04 06
xor ah, ah ; 30 e4
- call 06e79h ; e8 13 fe
- mov byte [bp-008h], al ; 88 46 f8
+ call 07203h ; e8 04 fe
+ mov byte [bp-012h], al ; 88 46 ee
test ch, ch ; 84 ed
- jne short 07077h ; 75 0a
+ jne short 07410h ; 75 0a
test dh, dh ; 84 f6
- jne short 07077h ; 75 06
+ jne short 07410h ; 75 06
test bx, bx ; 85 db
- je near 070f0h ; 0f 84 79 00
+ je near 07489h ; 0f 84 79 00
mov bx, 00142h ; bb 42 01
mov ax, 04f02h ; b8 02 4f
int 010h ; cd 10
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- je short 070a8h ; 74 23
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00
+ je short 07441h ; 74 23
xor bx, bx ; 31 db
- jmp short 0708fh ; eb 06
+ jmp short 07428h ; eb 06
inc bx ; 43
cmp bx, strict byte 00010h ; 83 fb 10
- jnbe short 070afh ; 77 20
+ jnbe short 07448h ; 77 20
mov ax, bx ; 89 d8
or ah, 002h ; 80 cc 02
mov dx, 003b8h ; ba b8 03
out DX, ax ; ef
xor dx, dx ; 31 d2
mov ax, strict word 00001h ; b8 01 00
- call 06dcch ; e8 2c fd
+ call 07151h ; e8 18 fd
cmp AL, strict byte 086h ; 3c 86
- jne short 07089h ; 75 e5
+ jne short 07422h ; 75 e5
mov CL, strict byte 001h ; b1 01
- jmp short 070afh ; eb 07
+ jmp short 07448h ; eb 07
mov ax, 00210h ; b8 10 02
mov dx, 003b8h ; ba b8 03
out DX, ax ; ef
test cl, cl ; 84 c9
- jne short 070c5h ; 75 12
- mov ax, word [bp-00ah] ; 8b 46 f6
+ jne short 0745eh ; 75 12
+ mov ax, word [bp-014h] ; 8b 46 ec
shr ax, 004h ; c1 e8 04
mov dx, strict word 00001h ; ba 01 00
- call 06dcch ; e8 0d fd
+ call 07151h ; e8 f9 fc
cmp AL, strict byte 086h ; 3c 86
- jne short 070c5h ; 75 02
+ jne short 0745eh ; 75 02
mov CL, strict byte 001h ; b1 01
- cmp byte [bp-006h], 000h ; 80 7e fa 00
- je short 070f0h ; 74 25
+ cmp byte [bp-010h], 000h ; 80 7e f0 00
+ je short 07489h ; 74 25
test cl, cl ; 84 c9
- jne short 070f0h ; 75 21
+ jne short 07489h ; 75 21
mov bx, strict word 00010h ; bb 10 00
- jmp short 070d9h ; eb 05
+ jmp short 07472h ; eb 05
dec bx ; 4b
test bx, bx ; 85 db
- jbe short 070f0h ; 76 17
+ jbe short 07489h ; 76 17
mov ax, bx ; 89 d8
or ah, 002h ; 80 cc 02
mov dx, 003b8h ; ba b8 03
out DX, ax ; ef
xor dx, dx ; 31 d2
mov ax, strict word 00001h ; b8 01 00
- call 06dcch ; e8 e2 fc
+ call 07151h ; e8 ce fc
cmp AL, strict byte 086h ; 3c 86
- jne short 070d4h ; 75 e6
+ jne short 0746dh ; 75 e6
mov CL, strict byte 001h ; b1 01
xor bx, bx ; 31 db
mov dx, 00339h ; ba 39 03
mov ax, si ; 89 f0
- call 0160eh ; e8 14 a5
+ call 0160eh ; e8 7b a1
mov AL, strict byte 003h ; b0 03
mov AH, strict byte 000h ; b4 00
int 010h ; cd 10
- cmp byte [bp-008h], 000h ; 80 7e f8 00
- je near 071f1h ; 0f 84 e9 00
- cmp byte [bp-002h], 000h ; 80 7e fe 00
- jne short 0713eh ; 75 30
- cmp byte [bp-006h], 000h ; 80 7e fa 00
- jne short 0713eh ; 75 2a
- cmp word [bp-00ah], strict byte 00000h ; 83 7e f6 00
- jne short 0713eh ; 75 24
- cmp byte [bp-008h], 002h ; 80 7e f8 02
- jne short 0712bh ; 75 0b
- push 009cah ; 68 ca 09
+ cmp byte [bp-012h], 000h ; 80 7e ee 00
+ je near 0758ah ; 0f 84 e9 00
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00
+ jne short 074d7h ; 75 30
+ cmp byte [bp-010h], 000h ; 80 7e f0 00
+ jne short 074d7h ; 75 2a
+ cmp word [bp-014h], strict byte 00000h ; 83 7e ec 00
+ jne short 074d7h ; 75 24
+ cmp byte [bp-012h], 002h ; 80 7e ee 02
+ jne short 074c4h ; 75 0b
+ push 00a53h ; 68 53 0a
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 c1 a7
+ call 01922h ; e8 61 a4
add sp, strict byte 00004h ; 83 c4 04
test cl, cl ; 84 c9
- jne short 0713eh ; 75 0f
+ jne short 074d7h ; 75 0f
mov dx, strict word 00001h ; ba 01 00
mov ax, 000c0h ; b8 c0 00
- call 06dcch ; e8 94 fc
+ call 07151h ; e8 80 fc
cmp AL, strict byte 086h ; 3c 86
- jne short 0713eh ; 75 02
+ jne short 074d7h ; 75 02
mov CL, strict byte 001h ; b1 01
test cl, cl ; 84 c9
- je near 071f1h ; 0f 84 ad 00
- mov byte [bp-004h], 000h ; c6 46 fc 00
+ je near 0758ah ; 0f 84 ad 00
+ mov byte [bp-00eh], 000h ; c6 46 f2 00
mov ax, 00100h ; b8 00 01
mov cx, 01000h ; b9 00 10
int 010h ; cd 10
@@ -10188,56 +10663,56 @@ show_logo_: ; 0xf6fee LB 0x21f
db 033h, 0d2h
; xor dx, dx ; 33 d2
int 010h ; cd 10
- push 009ech ; 68 ec 09
+ push 00a75h ; 68 75 0a
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 7c a7
+ call 01922h ; e8 1c a4
add sp, strict byte 00004h ; 83 c4 04
- call 06e9dh ; e8 2a fd
- push 00a30h ; 68 30 0a
+ call 0722dh ; e8 21 fd
+ push 00ab9h ; 68 b9 0a
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 6e a7
+ call 01922h ; e8 0e a4
add sp, strict byte 00004h ; 83 c4 04
mov dx, strict word 00001h ; ba 01 00
mov ax, strict word 00040h ; b8 40 00
- call 06dcch ; e8 45 fc
+ call 07151h ; e8 31 fc
mov bl, al ; 88 c3
test al, al ; 84 c0
- je short 0717eh ; 74 f1
+ je short 07517h ; 74 f1
cmp AL, strict byte 030h ; 3c 30
- je short 071dfh ; 74 4e
+ je short 07578h ; 74 4e
cmp bl, 002h ; 80 fb 02
- jc short 071b8h ; 72 22
+ jc short 07551h ; 72 22
cmp bl, 009h ; 80 fb 09
- jnbe short 071b8h ; 77 1d
+ jnbe short 07551h ; 77 1d
movzx ax, bl ; 0f b6 c3
- call 06fc9h ; e8 28 fe
+ call 0735dh ; e8 23 fe
cmp AL, strict byte 0ffh ; 3c ff
- jne short 071a7h ; 75 02
- jmp short 0717eh ; eb d7
+ jne short 07540h ; 75 02
+ jmp short 07517h ; eb d7
movzx bx, al ; 0f b6 d8
mov dx, 00338h ; ba 38 03
mov ax, si ; 89 f0
- call 0160eh ; e8 5c a4
- mov byte [bp-004h], 002h ; c6 46 fc 02
- jmp short 071dfh ; eb 27
+ call 0160eh ; e8 c3 a0
+ mov byte [bp-00eh], 002h ; c6 46 f2 02
+ jmp short 07578h ; eb 27
cmp bl, 02eh ; 80 fb 2e
- je short 071cdh ; 74 10
+ je short 07566h ; 74 10
cmp bl, 026h ; 80 fb 26
- je short 071d3h ; 74 11
+ je short 0756ch ; 74 11
cmp bl, 021h ; 80 fb 21
- jne short 071d9h ; 75 12
- mov byte [bp-004h], 001h ; c6 46 fc 01
- jmp short 071dfh ; eb 12
- mov byte [bp-004h], 003h ; c6 46 fc 03
- jmp short 071dfh ; eb 0c
- mov byte [bp-004h], 004h ; c6 46 fc 04
- jmp short 071dfh ; eb 06
- cmp byte [bp-004h], 000h ; 80 7e fc 00
- je short 0717eh ; 74 9f
- movzx bx, byte [bp-004h] ; 0f b6 5e fc
+ jne short 07572h ; 75 12
+ mov byte [bp-00eh], 001h ; c6 46 f2 01
+ jmp short 07578h ; eb 12
+ mov byte [bp-00eh], 003h ; c6 46 f2 03
+ jmp short 07578h ; eb 0c
+ mov byte [bp-00eh], 004h ; c6 46 f2 04
+ jmp short 07578h ; eb 06
+ cmp byte [bp-00eh], 000h ; 80 7e f2 00
+ je short 07517h ; 74 9f
+ movzx bx, byte [bp-00eh] ; 0f b6 5e f2
mov dx, 00339h ; ba 39 03
mov ax, si ; 89 f0
- call 0160eh ; e8 23 a4
+ call 0160eh ; e8 8a a0
mov AL, strict byte 003h ; b0 03
mov AH, strict byte 000h ; b4 00
int 010h ; cd 10
@@ -10250,24 +10725,25 @@ show_logo_: ; 0xf6fee LB 0x21f
pushad ; 66 60
push DS ; 1e
mov ds, ax ; 8e d8
- call 0edbfh ; e8 bc 7b
+ call 0edbfh ; e8 23 78
pop DS ; 1f
popad ; 66 61
- leave ; c9
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-delay_boot_: ; 0xf720d LB 0x64
- push bx ; 53
- push dx ; 52
+delay_boot_: ; 0xf75a9 LB 0x67
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push dx ; 52
mov dx, ax ; 89 c2
test ax, ax ; 85 c0
- je short 0726dh ; 74 55
+ je short 07609h ; 74 55
mov AL, strict byte 034h ; b0 34
out strict byte 043h, AL ; e6 43
mov AL, strict byte 0d3h ; b0 d3
@@ -10275,26 +10751,26 @@ delay_boot_: ; 0xf720d LB 0x64
mov AL, strict byte 048h ; b0 48
out strict byte 040h, AL ; e6 40
push dx ; 52
- push 00a7ah ; 68 7a 0a
+ push 00b03h ; 68 03 0b
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 bc a6
+ call 01922h ; e8 59 a3
add sp, strict byte 00006h ; 83 c4 06
mov bx, dx ; 89 d3
test bx, bx ; 85 db
- jbe short 0724dh ; 76 17
+ jbe short 075e9h ; 76 17
push bx ; 53
- push 00a98h ; 68 98 0a
+ push 00b21h ; 68 21 0b
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 aa a6
+ call 01922h ; e8 47 a3
add sp, strict byte 00006h ; 83 c4 06
xor dx, dx ; 31 d2
mov ax, strict word 00040h ; b8 40 00
- call 06dcch ; e8 82 fb
+ call 07151h ; e8 6b fb
dec bx ; 4b
- jmp short 07232h ; eb e5
- push 009c8h ; 68 c8 09
+ jmp short 075ceh ; eb e5
+ push 00a51h ; 68 51 0a
push strict byte 00002h ; 6a 02
- call 018e9h ; e8 94 a6
+ call 01922h ; e8 31 a3
add sp, strict byte 00004h ; 83 c4 04
mov AL, strict byte 034h ; b0 34
out strict byte 043h, AL ; e6 43
@@ -10305,103 +10781,168 @@ delay_boot_: ; 0xf720d LB 0x64
pushad ; 66 60
push DS ; 1e
mov ds, ax ; 8e d8
- call 0edbfh ; e8 55 7b
+ call 0edbfh ; e8 b9 77
pop DS ; 1f
popad ; 66 61
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop dx ; 5a
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-scsi_cmd_data_in_: ; 0xf7271 LB 0x63
+scsi_cmd_data_in_: ; 0xf7610 LB 0xb2
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov si, ax ; 89 c6
- mov byte [bp-002h], dl ; 88 56 fe
- mov word [bp-004h], bx ; 89 5e fc
+ mov byte [bp-006h], dl ; 88 56 fa
+ mov word [bp-00ah], bx ; 89 5e f6
+ mov word [bp-008h], cx ; 89 4e f8
+ mov bx, word [bp+00ah] ; 8b 5e 0a
mov dx, si ; 89 f2
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 0727fh ; 75 f7
- mov al, byte [bp-002h] ; 8a 46 fe
+ jne short 07626h ; 75 f7
+ mov ax, bx ; 89 d8
+ mov dx, word [bp+00ch] ; 8b 56 0c
+ mov cx, strict word 0000ch ; b9 0c 00
+ shr dx, 1 ; d1 ea
+ rcr ax, 1 ; d1 d8
+ loop 07637h ; e2 fa
+ and ax, 000f0h ; 25 f0 00
+ movzx cx, byte [bp+004h] ; 0f b6 4e 04
+ or cx, ax ; 09 c1
+ mov al, byte [bp-006h] ; 8a 46 fa
+ mov dx, si ; 89 f2
out DX, AL ; ee
xor al, al ; 30 c0
out DX, AL ; ee
- mov al, byte [bp+008h] ; 8a 46 08
+ mov al, cl ; 88 c8
out DX, AL ; ee
- mov al, byte [bp+00eh] ; 8a 46 0e
+ mov al, bl ; 88 d8
out DX, AL ; ee
- mov ax, word [bp+00eh] ; 8b 46 0e
- shr ax, 008h ; c1 e8 08
+ mov ax, bx ; 89 d8
+ mov dx, word [bp+00ch] ; 8b 56 0c
+ mov cx, strict word 00008h ; b9 08 00
+ shr dx, 1 ; d1 ea
+ rcr ax, 1 ; d1 d8
+ loop 0765dh ; e2 fa
+ mov dx, si ; 89 f2
out DX, AL ; ee
- xor bx, bx ; 31 db
- movzx ax, byte [bp+008h] ; 0f b6 46 08
- cmp bx, ax ; 39 c3
- jnc short 072b8h ; 73 10
- mov es, cx ; 8e c1
- mov di, word [bp-004h] ; 8b 7e fc
- add di, bx ; 01 df
+ xor cx, cx ; 31 c9
+ movzx ax, byte [bp+004h] ; 0f b6 46 04
+ cmp cx, ax ; 39 c1
+ jnc short 0767eh ; 73 0e
+ les di, [bp-00ah] ; c4 7e f6
+ add di, cx ; 01 cf
mov al, byte [es:di] ; 26 8a 05
mov dx, si ; 89 f2
out DX, AL ; ee
- inc bx ; 43
- jmp short 072a0h ; eb e8
+ inc cx ; 41
+ jmp short 07668h ; eb ea
mov dx, si ; 89 f2
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 072b8h ; 75 f7
+ jne short 0767eh ; 75 f7
lea dx, [si+001h] ; 8d 54 01
- mov cx, word [bp+00eh] ; 8b 4e 0e
- les di, [bp+00ah] ; c4 7e 0a
+ cmp word [bp+00ch], strict byte 00000h ; 83 7e 0c 00
+ jne short 07696h ; 75 06
+ cmp bx, 08000h ; 81 fb 00 80
+ jbe short 076b0h ; 76 1a
+ mov cx, 08000h ; b9 00 80
+ les di, [bp+006h] ; c4 7e 06
+ rep insb ; f3 6c
+ add bx, 08000h ; 81 c3 00 80
+ adc word [bp+00ch], strict byte 0ffffh ; 83 56 0c ff
+ mov ax, es ; 8c c0
+ add ax, 00800h ; 05 00 08
+ mov word [bp+008h], ax ; 89 46 08
+ jmp short 07687h ; eb d7
+ mov cx, bx ; 89 d9
+ les di, [bp+006h] ; c4 7e 06
rep insb ; f3 6c
xor ax, ax ; 31 c0
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
- retn 00008h ; c2 08 00
-scsi_cmd_data_out_: ; 0xf72d4 LB 0x64
+ pop bp ; 5d
+ retn 0000ah ; c2 0a 00
+scsi_cmd_data_out_: ; 0xf76c2 LB 0xb4
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00004h, 000h ; c8 04 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov di, ax ; 89 c7
- mov byte [bp-002h], dl ; 88 56 fe
- mov word [bp-004h], bx ; 89 5e fc
+ mov byte [bp-006h], dl ; 88 56 fa
+ mov word [bp-00ah], bx ; 89 5e f6
+ mov word [bp-008h], cx ; 89 4e f8
+ mov bx, word [bp+00ah] ; 8b 5e 0a
mov dx, di ; 89 fa
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 072e2h ; 75 f7
- mov al, byte [bp-002h] ; 8a 46 fe
+ jne short 076d8h ; 75 f7
+ mov ax, bx ; 89 d8
+ mov dx, word [bp+00ch] ; 8b 56 0c
+ mov cx, strict word 0000ch ; b9 0c 00
+ shr dx, 1 ; d1 ea
+ rcr ax, 1 ; d1 d8
+ loop 076e9h ; e2 fa
+ and ax, 000f0h ; 25 f0 00
+ movzx cx, byte [bp+004h] ; 0f b6 4e 04
+ or cx, ax ; 09 c1
+ mov al, byte [bp-006h] ; 8a 46 fa
+ mov dx, di ; 89 fa
out DX, AL ; ee
mov AL, strict byte 001h ; b0 01
out DX, AL ; ee
- mov al, byte [bp+008h] ; 8a 46 08
+ mov al, cl ; 88 c8
out DX, AL ; ee
- mov al, byte [bp+00eh] ; 8a 46 0e
+ mov al, bl ; 88 d8
out DX, AL ; ee
- mov ax, word [bp+00eh] ; 8b 46 0e
- shr ax, 008h ; c1 e8 08
+ mov ax, bx ; 89 d8
+ mov dx, word [bp+00ch] ; 8b 56 0c
+ mov cx, strict word 00008h ; b9 08 00
+ shr dx, 1 ; d1 ea
+ rcr ax, 1 ; d1 d8
+ loop 0770fh ; e2 fa
+ mov dx, di ; 89 fa
out DX, AL ; ee
- xor bx, bx ; 31 db
- movzx ax, byte [bp+008h] ; 0f b6 46 08
- cmp bx, ax ; 39 c3
- jnc short 0731bh ; 73 10
- mov es, cx ; 8e c1
- mov si, word [bp-004h] ; 8b 76 fc
- add si, bx ; 01 de
+ xor cx, cx ; 31 c9
+ movzx ax, byte [bp+004h] ; 0f b6 46 04
+ cmp cx, ax ; 39 c1
+ jnc short 07730h ; 73 0e
+ les si, [bp-00ah] ; c4 76 f6
+ add si, cx ; 01 ce
mov al, byte [es:si] ; 26 8a 04
mov dx, di ; 89 fa
out DX, AL ; ee
- inc bx ; 43
- jmp short 07303h ; eb e8
+ inc cx ; 41
+ jmp short 0771ah ; eb ea
lea dx, [di+001h] ; 8d 55 01
- mov cx, word [bp+00eh] ; 8b 4e 0e
- les si, [bp+00ah] ; c4 76 0a
+ cmp word [bp+00ch], strict byte 00000h ; 83 7e 0c 00
+ jne short 0773fh ; 75 06
+ cmp bx, 08000h ; 81 fb 00 80
+ jbe short 0775ah ; 76 1b
+ mov cx, 08000h ; b9 00 80
+ les si, [bp+006h] ; c4 76 06
+ db 0f3h, 026h, 06eh
+ ; rep es outsb ; f3 26 6e
+ add bx, 08000h ; 81 c3 00 80
+ adc word [bp+00ch], strict byte 0ffffh ; 83 56 0c ff
+ mov ax, es ; 8c c0
+ add ax, 00800h ; 05 00 08
+ mov word [bp+008h], ax ; 89 46 08
+ jmp short 07730h ; eb d6
+ mov cx, bx ; 89 d9
+ les si, [bp+006h] ; c4 76 06
db 0f3h, 026h, 06eh
; rep es outsb ; f3 26 6e
mov dx, di ; 89 fa
@@ -10409,296 +10950,536 @@ scsi_cmd_data_out_: ; 0xf72d4 LB 0x64
db 02ah, 0e4h
; sub ah, ah ; 2a e4
test AL, strict byte 001h ; a8 01
- jne short 07327h ; 75 f7
+ jne short 07762h ; 75 f7
xor ax, ax ; 31 c0
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
- retn 00008h ; c2 08 00
-@scsi_read_sectors: ; 0xf7338 LB 0xa2
+ pop bp ; 5d
+ retn 0000ah ; c2 0a 00
+@scsi_read_sectors: ; 0xf7776 LB 0xb6
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0000ch, 000h ; c8 0c 00 00
- mov si, word [bp+008h] ; 8b 76 08
- mov es, [bp+00ah] ; 8e 46 0a
+ sub sp, strict byte 0000eh ; 83 ec 0e
+ mov si, word [bp+004h] ; 8b 76 04
+ mov es, [bp+006h] ; 8e 46 06
mov bl, byte [es:si+008h] ; 26 8a 5c 08
sub bl, 008h ; 80 eb 08
cmp bl, 004h ; 80 fb 04
- jbe short 0735fh ; 76 0f
+ jbe short 0779fh ; 76 0f
movzx ax, bl ; 0f b6 c3
push ax ; 50
- push 00a9ch ; 68 9c 0a
+ push 00b26h ; 68 26 0b
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 8d a5
+ call 01922h ; e8 86 a1
add sp, strict byte 00006h ; 83 c4 06
- mov es, [bp+00ah] ; 8e 46 0a
+ mov es, [bp+006h] ; 8e 46 06
mov di, word [es:si+00ah] ; 26 8b 7c 0a
- mov word [bp-00ch], strict word 00028h ; c7 46 f4 28 00
+ mov word [bp-012h], strict word 00028h ; c7 46 ee 28 00
mov ax, word [es:si] ; 26 8b 04
mov dx, word [es:si+002h] ; 26 8b 54 02
xchg ah, al ; 86 c4
xchg dh, dl ; 86 d6
xchg dx, ax ; 92
- mov word [bp-00ah], ax ; 89 46 f6
- mov word [bp-008h], dx ; 89 56 f8
- mov byte [bp-006h], 000h ; c6 46 fa 00
+ mov word [bp-010h], ax ; 89 46 f0
+ mov word [bp-00eh], dx ; 89 56 f2
+ mov byte [bp-00ch], 000h ; c6 46 f4 00
mov ax, di ; 89 f8
xchg ah, al ; 86 c4
- mov word [bp-005h], ax ; 89 46 fb
- mov byte [bp-003h], 000h ; c6 46 fd 00
+ mov word [bp-00bh], ax ; 89 46 f5
+ mov byte [bp-009h], 000h ; c6 46 f7 00
xor bh, bh ; 30 ff
sal bx, 002h ; c1 e3 02
add bx, si ; 01 f3
mov ax, word [es:bx+001d8h] ; 26 8b 87 d8 01
mov dl, byte [es:bx+001dah] ; 26 8a 97 da 01
- mov bx, di ; 89 fb
- sal bx, 009h ; c1 e3 09
- mov word [bp-002h], bx ; 89 5e fe
- push bx ; 53
+ mov word [bp-008h], di ; 89 7e f8
+ mov word [bp-006h], strict word 00000h ; c7 46 fa 00 00
+ mov cx, strict word 00009h ; b9 09 00
+ sal word [bp-008h], 1 ; d1 66 f8
+ rcl word [bp-006h], 1 ; d1 56 fa
+ loop 077e8h ; e2 f8
+ push dword [bp-008h] ; 66 ff 76 f8
db 066h, 026h, 0ffh, 074h, 004h
; push dword [es:si+004h] ; 66 26 ff 74 04
push strict byte 0000ah ; 6a 0a
xor dh, dh ; 30 f6
mov cx, ss ; 8c d1
- lea bx, [bp-00ch] ; 8d 5e f4
- call 07271h ; e8 ba fe
+ lea bx, [bp-012h] ; 8d 5e ee
+ call 07610h ; e8 0b fe
mov ah, al ; 88 c4
test al, al ; 84 c0
- jne short 073d1h ; 75 14
- mov es, [bp+00ah] ; 8e 46 0a
+ jne short 07820h ; 75 15
+ mov es, [bp+006h] ; 8e 46 06
mov word [es:si+014h], di ; 26 89 7c 14
- mov dx, word [bp-002h] ; 8b 56 fe
+ mov dx, word [bp-008h] ; 8b 56 f8
mov word [es:si+016h], dx ; 26 89 54 16
- mov word [es:si+018h], strict word 00000h ; 26 c7 44 18 00 00
+ mov dx, word [bp-006h] ; 8b 56 fa
+ mov word [es:si+018h], dx ; 26 89 54 18
movzx ax, ah ; 0f b6 c4
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 00004h ; c2 04 00
-@scsi_write_sectors: ; 0xf73da LB 0xa2
+@scsi_write_sectors: ; 0xf782c LB 0xb6
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0000ch, 000h ; c8 0c 00 00
- mov si, word [bp+008h] ; 8b 76 08
- mov es, [bp+00ah] ; 8e 46 0a
+ sub sp, strict byte 0000eh ; 83 ec 0e
+ mov si, word [bp+004h] ; 8b 76 04
+ mov es, [bp+006h] ; 8e 46 06
mov bl, byte [es:si+008h] ; 26 8a 5c 08
sub bl, 008h ; 80 eb 08
cmp bl, 004h ; 80 fb 04
- jbe short 07401h ; 76 0f
+ jbe short 07855h ; 76 0f
movzx ax, bl ; 0f b6 c3
push ax ; 50
- push 00acah ; 68 ca 0a
+ push 00b54h ; 68 54 0b
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 eb a4
+ call 01922h ; e8 d0 a0
add sp, strict byte 00006h ; 83 c4 06
- mov es, [bp+00ah] ; 8e 46 0a
+ mov es, [bp+006h] ; 8e 46 06
mov di, word [es:si+00ah] ; 26 8b 7c 0a
- mov word [bp-00ch], strict word 0002ah ; c7 46 f4 2a 00
+ mov word [bp-012h], strict word 0002ah ; c7 46 ee 2a 00
mov ax, word [es:si] ; 26 8b 04
mov dx, word [es:si+002h] ; 26 8b 54 02
xchg ah, al ; 86 c4
xchg dh, dl ; 86 d6
xchg dx, ax ; 92
- mov word [bp-00ah], ax ; 89 46 f6
- mov word [bp-008h], dx ; 89 56 f8
- mov byte [bp-006h], 000h ; c6 46 fa 00
+ mov word [bp-010h], ax ; 89 46 f0
+ mov word [bp-00eh], dx ; 89 56 f2
+ mov byte [bp-00ch], 000h ; c6 46 f4 00
mov ax, di ; 89 f8
xchg ah, al ; 86 c4
- mov word [bp-005h], ax ; 89 46 fb
- mov byte [bp-003h], 000h ; c6 46 fd 00
+ mov word [bp-00bh], ax ; 89 46 f5
+ mov byte [bp-009h], 000h ; c6 46 f7 00
xor bh, bh ; 30 ff
sal bx, 002h ; c1 e3 02
add bx, si ; 01 f3
mov ax, word [es:bx+001d8h] ; 26 8b 87 d8 01
mov dl, byte [es:bx+001dah] ; 26 8a 97 da 01
- mov bx, di ; 89 fb
- sal bx, 009h ; c1 e3 09
- mov word [bp-002h], bx ; 89 5e fe
- push bx ; 53
+ mov word [bp-008h], di ; 89 7e f8
+ mov word [bp-006h], strict word 00000h ; c7 46 fa 00 00
+ mov cx, strict word 00009h ; b9 09 00
+ sal word [bp-008h], 1 ; d1 66 f8
+ rcl word [bp-006h], 1 ; d1 56 fa
+ loop 0789eh ; e2 f8
+ push dword [bp-008h] ; 66 ff 76 f8
db 066h, 026h, 0ffh, 074h, 004h
; push dword [es:si+004h] ; 66 26 ff 74 04
push strict byte 0000ah ; 6a 0a
xor dh, dh ; 30 f6
mov cx, ss ; 8c d1
- lea bx, [bp-00ch] ; 8d 5e f4
- call 072d4h ; e8 7b fe
+ lea bx, [bp-012h] ; 8d 5e ee
+ call 076c2h ; e8 07 fe
mov ah, al ; 88 c4
test al, al ; 84 c0
- jne short 07473h ; 75 14
- mov es, [bp+00ah] ; 8e 46 0a
+ jne short 078d6h ; 75 15
+ mov es, [bp+006h] ; 8e 46 06
mov word [es:si+014h], di ; 26 89 7c 14
- mov dx, word [bp-002h] ; 8b 56 fe
+ mov dx, word [bp-008h] ; 8b 56 f8
mov word [es:si+016h], dx ; 26 89 54 16
- mov word [es:si+018h], strict word 00000h ; 26 c7 44 18 00 00
+ mov dx, word [bp-006h] ; 8b 56 fa
+ mov word [es:si+018h], dx ; 26 89 54 18
movzx ax, ah ; 0f b6 c4
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 00004h ; c2 04 00
-scsi_enumerate_attached_devices_: ; 0xf747c LB 0x285
+scsi_cmd_packet_: ; 0xf78e2 LB 0x166
+ push bp ; 55
+ mov bp, sp ; 89 e5
+ push si ; 56
+ push di ; 57
+ sub sp, strict byte 0000ch ; 83 ec 0c
+ mov di, ax ; 89 c7
+ mov byte [bp-006h], dl ; 88 56 fa
+ mov word [bp-00ch], bx ; 89 5e f4
+ mov word [bp-00ah], cx ; 89 4e f6
+ mov dx, strict word 0000eh ; ba 0e 00
+ mov ax, strict word 00040h ; b8 40 00
+ call 0161ch ; e8 1e 9d
+ mov si, 00122h ; be 22 01
+ mov word [bp-00eh], ax ; 89 46 f2
+ cmp byte [bp+00ah], 002h ; 80 7e 0a 02
+ jne short 07929h ; 75 1f
+ mov bx, 00dbah ; bb ba 0d
+ mov cx, ds ; 8c d9
+ mov ax, strict word 00004h ; b8 04 00
+ call 018e1h ; e8 cc 9f
+ push 00b83h ; 68 83 0b
+ push 00b93h ; 68 93 0b
+ push strict byte 00004h ; 6a 04
+ call 01922h ; e8 02 a0
+ add sp, strict byte 00006h ; 83 c4 06
+ mov dx, strict word 00001h ; ba 01 00
+ jmp near 07a3dh ; e9 14 01
+ sub di, strict byte 00008h ; 83 ef 08
+ sal di, 002h ; c1 e7 02
+ sub byte [bp-006h], 002h ; 80 6e fa 02
+ mov es, [bp-00eh] ; 8e 46 f2
+ add di, si ; 01 f7
+ mov bx, word [es:di+001d8h] ; 26 8b 9d d8 01
+ mov al, byte [es:di+001dah] ; 26 8a 85 da 01
+ mov byte [bp-008h], al ; 88 46 f8
+ mov dx, bx ; 89 da
+ in AL, DX ; ec
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4
+ test AL, strict byte 001h ; a8 01
+ jne short 07945h ; 75 f7
+ xor ax, ax ; 31 c0
+ mov dx, word [bp+006h] ; 8b 56 06
+ add dx, word [bp+004h] ; 03 56 04
+ adc ax, word [bp+008h] ; 13 46 08
+ mov es, [bp-00eh] ; 8e 46 f2
+ mov cx, word [es:si+01ch] ; 26 8b 4c 1c
+ xor di, di ; 31 ff
+ add cx, dx ; 01 d1
+ mov word [bp-010h], cx ; 89 4e f0
+ adc di, ax ; 11 c7
+ mov ax, cx ; 89 c8
+ mov dx, di ; 89 fa
+ mov cx, strict word 0000ch ; b9 0c 00
+ shr dx, 1 ; d1 ea
+ rcr ax, 1 ; d1 d8
+ loop 07970h ; e2 fa
+ and ax, 000f0h ; 25 f0 00
+ movzx cx, byte [bp-006h] ; 0f b6 4e fa
+ or cx, ax ; 09 c1
+ mov al, byte [bp-008h] ; 8a 46 f8
+ mov dx, bx ; 89 da
+ out DX, AL ; ee
+ xor al, al ; 30 c0
+ out DX, AL ; ee
+ mov al, cl ; 88 c8
+ out DX, AL ; ee
+ mov al, byte [bp-010h] ; 8a 46 f0
+ out DX, AL ; ee
+ mov ax, word [bp-010h] ; 8b 46 f0
+ mov dx, di ; 89 fa
+ mov cx, strict word 00008h ; b9 08 00
+ shr dx, 1 ; d1 ea
+ rcr ax, 1 ; d1 d8
+ loop 07997h ; e2 fa
+ mov dx, bx ; 89 da
+ out DX, AL ; ee
+ xor cx, cx ; 31 c9
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa
+ cmp cx, ax ; 39 c1
+ jnc short 079b8h ; 73 0e
+ les di, [bp-00ch] ; c4 7e f4
+ add di, cx ; 01 cf
+ mov al, byte [es:di] ; 26 8a 05
+ mov dx, bx ; 89 da
+ out DX, AL ; ee
+ inc cx ; 41
+ jmp short 079a2h ; eb ea
+ mov dx, bx ; 89 da
+ in AL, DX ; ec
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4
+ test AL, strict byte 001h ; a8 01
+ jne short 079b8h ; 75 f7
+ test AL, strict byte 002h ; a8 02
+ je short 079d3h ; 74 0e
+ lea dx, [bx+003h] ; 8d 57 03
+ xor al, al ; 30 c0
+ out DX, AL ; ee
+ in AL, DX ; ec
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4
+ mov dx, strict word 00003h ; ba 03 00
+ jmp short 07a3dh ; eb 6a
+ mov ax, word [bp+004h] ; 8b 46 04
+ test ax, ax ; 85 c0
+ je short 079e2h ; 74 08
+ lea dx, [bx+001h] ; 8d 57 01
+ mov cx, ax ; 89 c1
+ in AL, DX ; ec
+ loop 079dfh ; e2 fd
+ mov ax, word [bp+006h] ; 8b 46 06
+ mov es, [bp-00eh] ; 8e 46 f2
+ mov word [es:si+016h], ax ; 26 89 44 16
+ mov ax, word [bp+008h] ; 8b 46 08
+ mov word [es:si+018h], ax ; 26 89 44 18
+ lea ax, [bx+001h] ; 8d 47 01
+ cmp word [bp+008h], strict byte 00000h ; 83 7e 08 00
+ jne short 07a03h ; 75 07
+ cmp word [bp+006h], 08000h ; 81 7e 06 00 80
+ jbe short 07a20h ; 76 1d
+ mov dx, ax ; 89 c2
+ mov cx, 08000h ; b9 00 80
+ les di, [bp+00ch] ; c4 7e 0c
+ rep insb ; f3 6c
+ add word [bp+006h], 08000h ; 81 46 06 00 80
+ adc word [bp+008h], strict byte 0ffffh ; 83 56 08 ff
+ mov ax, es ; 8c c0
+ add ax, 00800h ; 05 00 08
+ mov word [bp+00eh], ax ; 89 46 0e
+ jmp short 079f3h ; eb d3
+ mov dx, ax ; 89 c2
+ mov cx, word [bp+006h] ; 8b 4e 06
+ les di, [bp+00ch] ; c4 7e 0c
+ rep insb ; f3 6c
+ mov es, [bp-00eh] ; 8e 46 f2
+ cmp word [es:si+01ch], strict byte 00000h ; 26 83 7c 1c 00
+ je short 07a3bh ; 74 07
+ mov cx, word [es:si+01ch] ; 26 8b 4c 1c
+ in AL, DX ; ec
+ loop 07a38h ; e2 fd
+ xor dx, dx ; 31 d2
+ mov ax, dx ; 89 d0
+ lea sp, [bp-004h] ; 8d 66 fc
+ pop di ; 5f
+ pop si ; 5e
+ pop bp ; 5d
+ retn 0000ch ; c2 0c 00
+scsi_enumerate_attached_devices_: ; 0xf7a48 LB 0x3e5
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- enter 0021ah, 000h ; c8 1a 02 00
+ sub sp, 0021ch ; 81 ec 1c 02
push ax ; 50
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 8d a1
+ call 0161ch ; e8 be 9b
mov si, 00122h ; be 22 01
- mov word [bp-006h], ax ; 89 46 fa
- mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00
- jmp near 076a9h ; e9 0c 02
- mov es, [bp-006h] ; 8e 46 fa
+ mov word [bp-01ah], ax ; 89 46 e6
+ mov word [bp-010h], strict word 00000h ; c7 46 f0 00 00
+ jmp near 07dbbh ; e9 4f 03
+ mov es, [bp-01ah] ; 8e 46 e6
cmp byte [es:si+001e8h], 004h ; 26 80 bc e8 01 04
- jnc near 076fah ; 0f 83 50 02
+ jnc near 07e23h ; 0f 83 aa 03
mov cx, strict word 0000ah ; b9 0a 00
xor bx, bx ; 31 db
mov dx, ss ; 8c d2
- lea ax, [bp-01ah] ; 8d 46 e6
- call 08caah ; e8 f3 17
- mov byte [bp-01ah], 025h ; c6 46 e6 25
- push strict byte 00008h ; 6a 08
- lea dx, [bp-0021ah] ; 8d 96 e6 fd
+ lea ax, [bp-026h] ; 8d 46 da
+ call 0948ah ; e8 04 1a
+ mov byte [bp-026h], 025h ; c6 46 da 25
+ push dword 000000008h ; 66 6a 08
+ lea dx, [bp-00226h] ; 8d 96 da fd
push SS ; 16
push dx ; 52
push strict byte 0000ah ; 6a 0a
- movzx dx, byte [bp-008h] ; 0f b6 56 f8
+ movzx dx, byte [bp-010h] ; 0f b6 56 f0
mov cx, ss ; 8c d1
- lea bx, [bp-01ah] ; 8d 5e e6
- mov ax, word [bp-0021ch] ; 8b 86 e4 fd
- call 07271h ; e8 9c fd
+ lea bx, [bp-026h] ; 8d 5e da
+ mov ax, word [bp-00228h] ; 8b 86 d8 fd
+ call 07610h ; e8 6b fb
test al, al ; 84 c0
- je short 074e4h ; 74 0b
- push 00b2fh ; 68 2f 0b
+ je short 07ab7h ; 74 0e
+ push 00bb3h ; 68 b3 0b
+ push 00bech ; 68 ec 0b
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 08 a4
- add sp, strict byte 00004h ; 83 c4 04
- movzx dx, byte [bp-00219h] ; 0f b6 96 e7 fd
- movzx di, byte [bp-0021ah] ; 0f b6 be e6 fd
+ call 01922h ; e8 6e 9e
+ add sp, strict byte 00006h ; 83 c4 06
+ movzx ax, byte [bp-00225h] ; 0f b6 86 db fd
+ movzx di, byte [bp-00226h] ; 0f b6 be da fd
sal di, 008h ; c1 e7 08
xor bx, bx ; 31 db
- or di, dx ; 09 d7
- movzx ax, byte [bp-00218h] ; 0f b6 86 e8 fd
+ or di, ax ; 09 c7
+ movzx ax, byte [bp-00224h] ; 0f b6 86 dc fd
xor dx, dx ; 31 d2
mov cx, strict word 00008h ; b9 08 00
sal ax, 1 ; d1 e0
rcl dx, 1 ; d1 d2
- loop 074ffh ; e2 fa
- or bx, ax ; 09 c3
- or di, dx ; 09 d7
- movzx ax, byte [bp-00217h] ; 0f b6 86 e9 fd
+ loop 07ad2h ; e2 fa
or bx, ax ; 09 c3
- mov word [bp-00ah], bx ; 89 5e f6
- movzx ax, byte [bp-00216h] ; 0f b6 86 ea fd
- sal ax, 008h ; c1 e0 08
- movzx bx, byte [bp-00215h] ; 0f b6 9e eb fd
- mov word [bp-010h], strict word 00000h ; c7 46 f0 00 00
+ or dx, di ; 09 fa
+ movzx ax, byte [bp-00223h] ; 0f b6 86 dd fd
or bx, ax ; 09 c3
- movzx ax, byte [bp-00214h] ; 0f b6 86 ec fd
+ mov word [bp-00eh], bx ; 89 5e f2
+ mov word [bp-018h], dx ; 89 56 e8
+ movzx di, byte [bp-00222h] ; 0f b6 be de fd
+ sal di, 008h ; c1 e7 08
+ movzx dx, byte [bp-00221h] ; 0f b6 96 df fd
+ xor bx, bx ; 31 db
+ or di, dx ; 09 d7
+ movzx ax, byte [bp-00220h] ; 0f b6 86 e0 fd
xor dx, dx ; 31 d2
mov cx, strict word 00008h ; b9 08 00
sal ax, 1 ; d1 e0
rcl dx, 1 ; d1 d2
- loop 07531h ; e2 fa
- mov cx, word [bp-010h] ; 8b 4e f0
- or cx, ax ; 09 c1
- or dx, bx ; 09 da
- movzx ax, byte [bp-00213h] ; 0f b6 86 ed fd
- mov bx, cx ; 89 cb
- or bx, ax ; 09 c3
- mov word [bp-00ch], bx ; 89 5e f4
+ loop 07b04h ; e2 fa
+ or ax, bx ; 09 d8
+ or dx, di ; 09 fa
+ movzx bx, byte [bp-0021fh] ; 0f b6 9e e1 fd
+ or ax, bx ; 09 d8
+ mov word [bp-016h], ax ; 89 46 ea
test dx, dx ; 85 d2
- jne short 07554h ; 75 06
- cmp bx, 00200h ; 81 fb 00 02
- je short 07574h ; 74 20
- mov bx, 00cd6h ; bb d6 0c
+ jne short 07b21h ; 75 05
+ cmp ax, 00200h ; 3d 00 02
+ je short 07b41h ; 74 20
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 4f a3
+ call 018e1h ; e8 b5 9d
push dx ; 52
- push word [bp-00ch] ; ff 76 f4
- push word [bp-008h] ; ff 76 f8
- push 00b6bh ; 68 6b 0b
+ push word [bp-016h] ; ff 76 ea
+ push word [bp-010h] ; ff 76 f0
+ push 00c0bh ; 68 0b 0c
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 7b a3
+ call 01922h ; e8 e7 9d
add sp, strict byte 0000ah ; 83 c4 0a
- jmp near 076a0h ; e9 2c 01
- cmp di, strict byte 00040h ; 83 ff 40
- jnbe short 0757bh ; 77 02
- jne short 07585h ; 75 0a
- mov dword [bp-004h], strict dword 000ff003fh ; 66 c7 46 fc 3f 00 ff 00
- jmp short 0759eh ; eb 19
- cmp di, strict byte 00020h ; 83 ff 20
- jnbe short 0758ch ; 77 02
- jne short 07596h ; 75 0a
- mov dword [bp-004h], strict dword 000800020h ; 66 c7 46 fc 20 00 80 00
- jmp short 0759eh ; eb 08
- mov dword [bp-004h], strict dword 000400020h ; 66 c7 46 fc 20 00 40 00
- mov bx, word [bp-002h] ; 8b 5e fe
- imul bx, word [bp-004h] ; 0f af 5e fc
- mov ax, word [bp-00ah] ; 8b 46 f6
- mov dx, di ; 89 fa
+ jmp near 07db2h ; e9 71 02
+ mov es, [bp-01ah] ; 8e 46 e6
+ mov al, byte [es:si+001e8h] ; 26 8a 84 e8 01
+ mov byte [bp-00ch], al ; 88 46 f4
+ cmp AL, strict byte 001h ; 3c 01
+ jc short 07b5ch ; 72 0c
+ jbe short 07b64h ; 76 12
+ cmp AL, strict byte 003h ; 3c 03
+ je short 07b6ch ; 74 16
+ cmp AL, strict byte 002h ; 3c 02
+ je short 07b68h ; 74 0e
+ jmp short 07bb8h ; eb 5c
+ test al, al ; 84 c0
+ jne short 07bb8h ; 75 58
+ mov BL, strict byte 090h ; b3 90
+ jmp short 07b6eh ; eb 0a
+ mov BL, strict byte 098h ; b3 98
+ jmp short 07b6eh ; eb 06
+ mov BL, strict byte 0a0h ; b3 a0
+ jmp short 07b6eh ; eb 02
+ mov BL, strict byte 0a8h ; b3 a8
+ mov al, bl ; 88 d8
+ add AL, strict byte 007h ; 04 07
+ movzx cx, al ; 0f b6 c8
+ mov ax, cx ; 89 c8
+ call 0165ch ; e8 e2 9a
+ test al, al ; 84 c0
+ je short 07bb8h ; 74 3a
+ mov al, bl ; 88 d8
+ db 0feh, 0c0h
+ ; inc al ; fe c0
+ xor ah, ah ; 30 e4
+ call 0165ch ; e8 d5 9a
+ xor ah, ah ; 30 e4
+ mov dx, ax ; 89 c2
+ sal dx, 008h ; c1 e2 08
+ movzx ax, bl ; 0f b6 c3
+ call 0165ch ; e8 c8 9a
+ xor ah, ah ; 30 e4
+ add ax, dx ; 01 d0
+ cwd ; 99
+ mov di, ax ; 89 c7
+ mov word [bp-012h], dx ; 89 56 ee
+ mov al, bl ; 88 d8
+ add AL, strict byte 002h ; 04 02
+ xor ah, ah ; 30 e4
+ call 0165ch ; e8 b5 9a
+ xor ah, ah ; 30 e4
+ mov word [bp-014h], ax ; 89 46 ec
+ mov ax, cx ; 89 c8
+ call 0165ch ; e8 ab 9a
+ xor ah, ah ; 30 e4
+ mov word [bp-01ch], ax ; 89 46 e4
+ jmp short 07bfdh ; eb 45
+ mov ax, word [bp-018h] ; 8b 46 e8
+ cmp ax, strict word 00040h ; 3d 40 00
+ jnbe short 07bc2h ; 77 02
+ jne short 07bceh ; 75 0c
+ mov word [bp-014h], 000ffh ; c7 46 ec ff 00
+ mov word [bp-01ch], strict word 0003fh ; c7 46 e4 3f 00
+ jmp short 07be6h ; eb 18
+ cmp ax, strict word 00020h ; 3d 20 00
+ jnbe short 07bd5h ; 77 02
+ jne short 07bdch ; 75 07
+ mov word [bp-014h], 00080h ; c7 46 ec 80 00
+ jmp short 07be1h ; eb 05
+ mov word [bp-014h], strict word 00040h ; c7 46 ec 40 00
+ mov word [bp-01ch], strict word 00020h ; c7 46 e4 20 00
+ mov bx, word [bp-014h] ; 8b 5e ec
+ imul bx, word [bp-01ch] ; 0f af 5e e4
+ mov ax, word [bp-00eh] ; 8b 46 f2
+ mov dx, word [bp-018h] ; 8b 56 e8
xor cx, cx ; 31 c9
- call 08c40h ; e8 91 16
- mov word [bp-00eh], dx ; 89 56 f2
- mov es, [bp-006h] ; 8e 46 fa
- mov cl, byte [es:si+001e8h] ; 26 8a 8c e8 01
- mov ch, cl ; 88 cd
- add ch, 008h ; 80 c5 08
- movzx dx, cl ; 0f b6 d1
- sal dx, 002h ; c1 e2 02
- mov bx, si ; 89 f3
- add bx, dx ; 01 d3
- mov dx, word [bp-0021ch] ; 8b 96 e4 fd
- mov word [es:bx+001d8h], dx ; 26 89 97 d8 01
- mov dl, byte [bp-008h] ; 8a 56 f8
- mov byte [es:bx+001dah], dl ; 26 88 97 da 01
- movzx dx, ch ; 0f b6 d5
- imul dx, dx, strict byte 00018h ; 6b d2 18
+ call 09420h ; e8 28 18
+ mov di, ax ; 89 c7
+ mov word [bp-012h], dx ; 89 56 ee
+ mov dl, byte [bp-00ch] ; 8a 56 f4
+ add dl, 008h ; 80 c2 08
+ movzx bx, byte [bp-00ch] ; 0f b6 5e f4
+ sal bx, 002h ; c1 e3 02
+ mov es, [bp-01ah] ; 8e 46 e6
+ add bx, si ; 01 f3
+ mov ax, word [bp-00228h] ; 8b 86 d8 fd
+ mov word [es:bx+001d8h], ax ; 26 89 87 d8 01
+ mov al, byte [bp-010h] ; 8a 46 f0
+ mov byte [es:bx+001dah], al ; 26 88 87 da 01
+ movzx ax, dl ; 0f b6 c2
+ imul ax, ax, strict byte 00018h ; 6b c0 18
mov bx, si ; 89 f3
- add bx, dx ; 01 d3
+ add bx, ax ; 01 c3
db 066h, 026h, 0c7h, 047h, 01eh, 004h, 0ffh, 000h, 000h
; mov dword [es:bx+01eh], strict dword 00000ff04h ; 66 26 c7 47 1e 04 ff 00 00
- mov dx, word [bp-00ch] ; 8b 56 f4
- mov word [es:bx+024h], dx ; 26 89 57 24
+ mov ax, word [bp-016h] ; 8b 46 ea
+ mov word [es:bx+024h], ax ; 26 89 47 24
mov byte [es:bx+023h], 001h ; 26 c6 47 23 01
- mov dx, word [bp-002h] ; 8b 56 fe
- mov word [es:bx+026h], dx ; 26 89 57 26
- mov dx, word [bp-004h] ; 8b 56 fc
- mov word [es:bx+02ah], dx ; 26 89 57 2a
- cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00
- jne short 07612h ; 75 05
- cmp ax, 00400h ; 3d 00 04
- jbe short 0761ah ; 76 08
+ mov ax, word [bp-014h] ; 8b 46 ec
+ mov word [es:bx+026h], ax ; 26 89 47 26
+ mov ax, word [bp-01ch] ; 8b 46 e4
+ mov word [es:bx+02ah], ax ; 26 89 47 2a
+ cmp word [bp-012h], strict byte 00000h ; 83 7e ee 00
+ jne short 07c59h ; 75 06
+ cmp di, 00400h ; 81 ff 00 04
+ jbe short 07c61h ; 76 08
mov word [es:bx+028h], 00400h ; 26 c7 47 28 00 04
- jmp short 0761eh ; eb 04
- mov word [es:bx+028h], ax ; 26 89 47 28
- movzx bx, ch ; 0f b6 dd
- imul bx, bx, strict byte 00018h ; 6b db 18
- mov es, [bp-006h] ; 8e 46 fa
- add bx, si ; 01 f3
- mov dx, word [bp-002h] ; 8b 56 fe
- mov word [es:bx+02ch], dx ; 26 89 57 2c
- mov dx, word [bp-004h] ; 8b 56 fc
- mov word [es:bx+030h], dx ; 26 89 57 30
- cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00
- jne short 07642h ; 75 05
- cmp ax, 00400h ; 3d 00 04
- jbe short 0764ah ; 76 08
+ jmp short 07c65h ; eb 04
+ mov word [es:bx+028h], di ; 26 89 7f 28
+ mov bx, 00dbah ; bb ba 0d
+ mov cx, ds ; 8c d9
+ mov ax, strict word 00004h ; b8 04 00
+ call 018e1h ; e8 71 9c
+ push word [bp-018h] ; ff 76 e8
+ push word [bp-00eh] ; ff 76 f2
+ push word [bp-01ch] ; ff 76 e4
+ push word [bp-014h] ; ff 76 ec
+ push di ; 57
+ push word [bp-010h] ; ff 76 f0
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
+ push ax ; 50
+ push 00c39h ; 68 39 0c
+ push strict byte 00004h ; 6a 04
+ call 01922h ; e8 95 9c
+ add sp, strict byte 00012h ; 83 c4 12
+ movzx ax, dl ; 0f b6 c2
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ mov es, [bp-01ah] ; 8e 46 e6
+ mov bx, si ; 89 f3
+ add bx, ax ; 01 c3
+ mov ax, word [bp-014h] ; 8b 46 ec
+ mov word [es:bx+02ch], ax ; 26 89 47 2c
+ mov ax, word [bp-01ch] ; 8b 46 e4
+ mov word [es:bx+030h], ax ; 26 89 47 30
+ cmp word [bp-012h], strict byte 00000h ; 83 7e ee 00
+ jne short 07cb7h ; 75 06
+ cmp di, 00400h ; 81 ff 00 04
+ jbe short 07cbfh ; 76 08
mov word [es:bx+02eh], 00400h ; 26 c7 47 2e 00 04
- jmp short 0764eh ; eb 04
- mov word [es:bx+02eh], ax ; 26 89 47 2e
- movzx bx, ch ; 0f b6 dd
- imul bx, bx, strict byte 00018h ; 6b db 18
- mov es, [bp-006h] ; 8e 46 fa
- add bx, si ; 01 f3
- mov ax, word [bp-00ah] ; 8b 46 f6
+ jmp short 07cc3h ; eb 04
+ mov word [es:bx+02eh], di ; 26 89 7f 2e
+ movzx ax, dl ; 0f b6 c2
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ mov es, [bp-01ah] ; 8e 46 e6
+ mov bx, si ; 89 f3
+ add bx, ax ; 01 c3
+ mov ax, word [bp-00eh] ; 8b 46 f2
mov word [es:bx+032h], ax ; 26 89 47 32
- mov word [es:bx+034h], di ; 26 89 7f 34
+ mov ax, word [bp-018h] ; 8b 46 e8
+ mov word [es:bx+034h], ax ; 26 89 47 34
mov al, byte [es:si+0019eh] ; 26 8a 84 9e 01
- mov ah, cl ; 88 cc
+ mov ah, byte [bp-00ch] ; 8a 66 f4
add ah, 008h ; 80 c4 08
movzx bx, al ; 0f b6 d8
add bx, si ; 01 f3
@@ -10708,134 +11489,194 @@ scsi_enumerate_attached_devices_: ; 0xf747c LB 0x285
mov byte [es:si+0019eh], al ; 26 88 84 9e 01
mov dx, strict word 00075h ; ba 75 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 78 9f
+ call 01600h ; e8 fd 98
db 0feh, 0c0h
; inc al ; fe c0
movzx bx, al ; 0f b6 d8
mov dx, strict word 00075h ; ba 75 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 78 9f
- db 0feh, 0c1h
- ; inc cl ; fe c1
- mov es, [bp-006h] ; 8e 46 fa
- mov byte [es:si+001e8h], cl ; 26 88 8c e8 01
- inc word [bp-008h] ; ff 46 f8
- cmp word [bp-008h], strict byte 00010h ; 83 7e f8 10
- jnl short 076fah ; 7d 51
- mov byte [bp-01ah], 012h ; c6 46 e6 12
+ call 0160eh ; e8 fd 98
+ inc byte [bp-00ch] ; fe 46 f4
+ mov al, byte [bp-00ch] ; 8a 46 f4
+ mov es, [bp-01ah] ; 8e 46 e6
+ mov byte [es:si+001e8h], al ; 26 88 84 e8 01
+ jmp near 07db2h ; e9 90 00
+ mov bx, 00dbah ; bb ba 0d
+ mov cx, ds ; 8c d9
+ mov ax, strict word 00004h ; b8 04 00
+ call 018e1h ; e8 b4 9b
+ push word [bp-010h] ; ff 76 f0
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
+ push ax ; 50
+ push 00c63h ; 68 63 0c
+ push strict byte 00004h ; 6a 04
+ call 01922h ; e8 e5 9b
+ add sp, strict byte 00008h ; 83 c4 08
+ mov dl, byte [bp-00ch] ; 8a 56 f4
+ add dl, 008h ; 80 c2 08
+ test byte [bp-00225h], 080h ; f6 86 db fd 80
+ db 00fh, 095h, 0c0h
+ ; setne al ; 0f 95 c0
+ xor ah, ah ; 30 e4
+ mov cx, ax ; 89 c1
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
+ sal ax, 002h ; c1 e0 02
+ mov es, [bp-01ah] ; 8e 46 e6
+ mov bx, si ; 89 f3
+ add bx, ax ; 01 c3
+ mov ax, word [bp-00228h] ; 8b 86 d8 fd
+ mov word [es:bx+001d8h], ax ; 26 89 87 d8 01
+ mov al, byte [bp-010h] ; 8a 46 f0
+ mov byte [es:bx+001dah], al ; 26 88 87 da 01
+ movzx ax, dl ; 0f b6 c2
+ imul ax, ax, strict byte 00018h ; 6b c0 18
+ mov bx, si ; 89 f3
+ add bx, ax ; 01 c3
+ mov word [es:bx+01eh], 00504h ; 26 c7 47 1e 04 05
+ mov byte [es:bx+020h], cl ; 26 88 4f 20
+ mov word [es:bx+024h], 00800h ; 26 c7 47 24 00 08
+ mov al, byte [es:si+001afh] ; 26 8a 84 af 01
+ mov ah, byte [bp-00ch] ; 8a 66 f4
+ add ah, 008h ; 80 c4 08
+ movzx bx, al ; 0f b6 d8
+ add bx, si ; 01 f3
+ mov byte [es:bx+001b0h], ah ; 26 88 a7 b0 01
+ db 0feh, 0c0h
+ ; inc al ; fe c0
+ mov byte [es:si+001afh], al ; 26 88 84 af 01
+ inc byte [bp-00ch] ; fe 46 f4
+ mov al, byte [bp-00ch] ; 8a 46 f4
+ mov byte [es:si+001e8h], al ; 26 88 84 e8 01
+ inc word [bp-010h] ; ff 46 f0
+ cmp word [bp-010h], strict byte 00010h ; 83 7e f0 10
+ jnl short 07e23h ; 7d 68
+ mov byte [bp-026h], 012h ; c6 46 da 12
xor al, al ; 30 c0
- mov byte [bp-019h], al ; 88 46 e7
- mov byte [bp-018h], al ; 88 46 e8
- mov byte [bp-017h], al ; 88 46 e9
- mov byte [bp-016h], 005h ; c6 46 ea 05
- mov byte [bp-015h], al ; 88 46 eb
- push strict byte 00005h ; 6a 05
- lea dx, [bp-0021ah] ; 8d 96 e6 fd
+ mov byte [bp-025h], al ; 88 46 db
+ mov byte [bp-024h], al ; 88 46 dc
+ mov byte [bp-023h], al ; 88 46 dd
+ mov byte [bp-022h], 005h ; c6 46 de 05
+ mov byte [bp-021h], al ; 88 46 df
+ push dword 000000005h ; 66 6a 05
+ lea dx, [bp-00226h] ; 8d 96 da fd
push SS ; 16
push dx ; 52
push strict byte 00006h ; 6a 06
- movzx dx, byte [bp-008h] ; 0f b6 56 f8
+ movzx dx, byte [bp-010h] ; 0f b6 56 f0
mov cx, ss ; 8c d1
- lea bx, [bp-01ah] ; 8d 5e e6
- mov ax, word [bp-0021ch] ; 8b 86 e4 fd
- call 07271h ; e8 98 fb
+ lea bx, [bp-026h] ; 8d 5e da
+ mov ax, word [bp-00228h] ; 8b 86 d8 fd
+ call 07610h ; e8 24 f8
test al, al ; 84 c0
- je short 076e8h ; 74 0b
- push 00af9h ; 68 f9 0a
+ je short 07dfeh ; 74 0e
+ push 00bb3h ; 68 b3 0b
+ push 00bd3h ; 68 d3 0b
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 04 a2
- add sp, strict byte 00004h ; 83 c4 04
- test byte [bp-0021ah], 0e0h ; f6 86 e6 fd e0
- jne short 076a0h ; 75 b1
- test byte [bp-0021ah], 01fh ; f6 86 e6 fd 1f
- je near 0749dh ; 0f 84 a5 fd
- jmp short 076a0h ; eb a6
- leave ; c9
+ call 01922h ; e8 27 9b
+ add sp, strict byte 00006h ; 83 c4 06
+ test byte [bp-00226h], 0e0h ; f6 86 da fd e0
+ jne short 07e0eh ; 75 09
+ test byte [bp-00226h], 01fh ; f6 86 da fd 1f
+ je near 07a6ch ; 0f 84 5e fc
+ test byte [bp-00226h], 0e0h ; f6 86 da fd e0
+ jne short 07db2h ; 75 9d
+ mov al, byte [bp-00226h] ; 8a 86 da fd
+ and AL, strict byte 01fh ; 24 1f
+ cmp AL, strict byte 005h ; 3c 05
+ je near 07d22h ; 0f 84 01 ff
+ jmp short 07db2h ; eb 8f
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-_scsi_init: ; 0xf7701 LB 0x64
+_scsi_init: ; 0xf7e2d LB 0x66
push bp ; 55
mov bp, sp ; 89 e5
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 0f 9f
+ call 0161ch ; e8 e3 97
mov bx, 00122h ; bb 22 01
mov es, ax ; 8e c0
mov byte [es:bx+001e8h], 000h ; 26 c6 87 e8 01 00
mov AL, strict byte 055h ; b0 55
- mov dx, 00332h ; ba 32 03
+ mov dx, 00432h ; ba 32 04
out DX, AL ; ee
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp AL, strict byte 055h ; 3c 55
- jne short 07731h ; 75 0c
+ jne short 07e5dh ; 75 0c
xor al, al ; 30 c0
- mov dx, 00333h ; ba 33 03
+ mov dx, 00433h ; ba 33 04
out DX, AL ; ee
- mov ax, 00330h ; b8 30 03
- call 0747ch ; e8 4b fd
+ mov ax, 00430h ; b8 30 04
+ call 07a48h ; e8 eb fb
mov AL, strict byte 055h ; b0 55
- mov dx, 00342h ; ba 42 03
+ mov dx, 00436h ; ba 36 04
out DX, AL ; ee
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp AL, strict byte 055h ; 3c 55
- jne short 0774ah ; 75 0c
+ jne short 07e76h ; 75 0c
xor al, al ; 30 c0
- mov dx, 00343h ; ba 43 03
+ mov dx, 00437h ; ba 37 04
out DX, AL ; ee
- mov ax, 00340h ; b8 40 03
- call 0747ch ; e8 32 fd
+ mov ax, 00434h ; b8 34 04
+ call 07a48h ; e8 d2 fb
mov AL, strict byte 055h ; b0 55
- mov dx, 00352h ; ba 52 03
+ mov dx, 0043ah ; ba 3a 04
out DX, AL ; ee
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
cmp AL, strict byte 055h ; 3c 55
- jne short 07763h ; 75 0c
+ jne short 07e8fh ; 75 0c
xor al, al ; 30 c0
- mov dx, 00353h ; ba 53 03
+ mov dx, 0043bh ; ba 3b 04
out DX, AL ; ee
- mov ax, 00350h ; b8 50 03
- call 0747ch ; e8 19 fd
+ mov ax, 00438h ; b8 38 04
+ call 07a48h ; e8 b9 fb
+ mov sp, bp ; 89 ec
pop bp ; 5d
retn ; c3
-high_bits_save_: ; 0xf7765 LB 0x14
- push bx ; 53
+high_bits_save_: ; 0xf7e93 LB 0x17
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
mov bx, ax ; 89 c3
shr eax, 010h ; 66 c1 e8 10
mov es, dx ; 8e c2
mov word [es:bx+00268h], ax ; 26 89 87 68 02
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-high_bits_restore_: ; 0xf7779 LB 0x14
- push bx ; 53
+high_bits_restore_: ; 0xf7eaa LB 0x17
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
mov bx, ax ; 89 c3
mov es, dx ; 8e c2
mov ax, word [es:bx+00268h] ; 26 8b 87 68 02
sal eax, 010h ; 66 c1 e0 10
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-ahci_ctrl_set_bits_: ; 0xf778d LB 0x40
+ahci_ctrl_set_bits_: ; 0xf7ec1 LB 0x43
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00002h, 000h ; c8 02 00 00
+ push ax ; 50
mov si, ax ; 89 c6
mov ax, dx ; 89 d0
- mov word [bp-002h], bx ; 89 5e fe
+ mov word [bp-006h], bx ; 89 5e fa
mov di, cx ; 89 cf
xor cx, cx ; 31 c9
mov dx, si ; 89 f2
@@ -10851,7 +11692,7 @@ ahci_ctrl_set_bits_: ; 0xf778d LB 0x40
; mov dx, ax ; 8b d0
shr eax, 010h ; 66 c1 e8 10
xchg dx, ax ; 92
- or ax, word [bp-002h] ; 0b 46 fe
+ or ax, word [bp-006h] ; 0b 46 fa
mov cx, dx ; 89 d1
or cx, di ; 09 f9
mov dx, bx ; 89 da
@@ -10860,18 +11701,21 @@ ahci_ctrl_set_bits_: ; 0xf778d LB 0x40
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-ahci_ctrl_clear_bits_: ; 0xf77cd LB 0x44
+ahci_ctrl_clear_bits_: ; 0xf7f04 LB 0x47
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00002h, 000h ; c8 02 00 00
+ push ax ; 50
mov si, ax ; 89 c6
mov ax, dx ; 89 d0
mov di, bx ; 89 df
- mov word [bp-002h], cx ; 89 4e fe
+ mov word [bp-006h], cx ; 89 4e fa
xor cx, cx ; 31 c9
mov dx, si ; 89 f2
xchg cx, ax ; 91
@@ -10887,7 +11731,7 @@ ahci_ctrl_clear_bits_: ; 0xf77cd LB 0x44
shr eax, 010h ; 66 c1 e8 10
xchg dx, ax ; 92
not di ; f7 d7
- mov cx, word [bp-002h] ; 8b 4e fe
+ mov cx, word [bp-006h] ; 8b 4e fa
not cx ; f7 d1
and ax, di ; 21 f8
and cx, dx ; 21 d1
@@ -10897,15 +11741,16 @@ ahci_ctrl_clear_bits_: ; 0xf77cd LB 0x44
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-ahci_ctrl_is_bit_set_: ; 0xf7811 LB 0x36
- push si ; 56
- push di ; 57
+ahci_ctrl_is_bit_set_: ; 0xf7f4b LB 0x39
push bp ; 55
mov bp, sp ; 89 e5
+ push si ; 56
+ push di ; 57
mov si, ax ; 89 c6
mov ax, dx ; 89 d0
mov di, cx ; 89 cf
@@ -10923,17 +11768,18 @@ ahci_ctrl_is_bit_set_: ; 0xf7811 LB 0x36
shr eax, 010h ; 66 c1 e8 10
xchg dx, ax ; 92
test dx, di ; 85 fa
- jne short 0783dh ; 75 04
+ jne short 07f77h ; 75 04
test ax, bx ; 85 d8
- je short 07841h ; 74 04
+ je short 07f7bh ; 74 04
mov AL, strict byte 001h ; b0 01
- jmp short 07843h ; eb 02
+ jmp short 07f7dh ; eb 02
xor al, al ; 30 c0
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-ahci_ctrl_extract_bits_: ; 0xf7847 LB 0x1b
+ahci_ctrl_extract_bits_: ; 0xf7f84 LB 0x1b
push si ; 56
push bp ; 55
mov bp, sp ; 89 e5
@@ -10941,14 +11787,14 @@ ahci_ctrl_extract_bits_: ; 0xf7847 LB 0x1b
and ax, bx ; 21 d8
and dx, cx ; 21 ca
movzx cx, byte [bp+006h] ; 0f b6 4e 06
- jcxz 0785dh ; e3 06
+ jcxz 07f9ah ; e3 06
shr dx, 1 ; d1 ea
rcr ax, 1 ; d1 d8
- loop 07857h ; e2 fa
+ loop 07f94h ; e2 fa
pop bp ; 5d
pop si ; 5e
retn 00002h ; c2 02 00
-ahci_addr_to_phys_: ; 0xf7862 LB 0x1e
+ahci_addr_to_phys_: ; 0xf7f9f LB 0x1e
push bx ; 53
push cx ; 51
push bp ; 55
@@ -10959,7 +11805,7 @@ ahci_addr_to_phys_: ; 0xf7862 LB 0x1e
mov cx, strict word 00004h ; b9 04 00
sal ax, 1 ; d1 e0
rcl dx, 1 ; d1 d2
- loop 07870h ; e2 fa
+ loop 07fadh ; e2 fa
xor cx, cx ; 31 c9
add ax, bx ; 01 d8
adc dx, cx ; 11 ca
@@ -10967,19 +11813,21 @@ ahci_addr_to_phys_: ; 0xf7862 LB 0x1e
pop cx ; 59
pop bx ; 5b
retn ; c3
-ahci_port_cmd_sync_: ; 0xf7880 LB 0xd0
+ahci_port_cmd_sync_: ; 0xf7fbd LB 0xd5
+ push bp ; 55
+ mov bp, sp ; 89 e5
push cx ; 51
push si ; 56
push di ; 57
- enter 00006h, 000h ; c8 06 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov si, ax ; 89 c6
- mov word [bp-004h], dx ; 89 56 fc
+ mov word [bp-00ah], dx ; 89 56 f6
mov es, dx ; 8e c2
mov al, byte [es:si+00262h] ; 26 8a 84 62 02
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-008h], al ; 88 46 f8
mov di, word [es:si+00260h] ; 26 8b bc 60 02
cmp AL, strict byte 0ffh ; 3c ff
- je near 0794bh ; 0f 84 aa 00
+ je near 0808ah ; 0f 84 aa 00
movzx cx, byte [es:si+00263h] ; 26 0f b6 8c 63 02
xor dx, dx ; 31 d2
or dl, 080h ; 80 ca 80
@@ -10991,17 +11839,17 @@ ahci_port_cmd_sync_: ; 0xf7880 LB 0xd0
; mov dword [es:si+004h], strict dword 000000000h ; 66 26 c7 44 04 00 00 00 00
lea ax, [si+00080h] ; 8d 84 80 00
mov dx, es ; 8c c2
- call 07862h ; e8 98 ff
- mov es, [bp-004h] ; 8e 46 fc
+ call 07f9fh ; e8 96 ff
+ mov es, [bp-00ah] ; 8e 46 f6
mov word [es:si+008h], ax ; 26 89 44 08
mov word [es:si+00ah], dx ; 26 89 54 0a
- movzx si, byte [bp-002h] ; 0f b6 76 fe
+ movzx si, byte [bp-008h] ; 0f b6 76 f8
sal si, 007h ; c1 e6 07
lea dx, [si+00118h] ; 8d 94 18 01
mov bx, strict word 00011h ; bb 11 00
xor cx, cx ; 31 c9
mov ax, di ; 89 f8
- call 0778dh ; e8 a3 fe
+ call 07ec1h ; e8 98 fe
lea ax, [si+00138h] ; 8d 84 38 01
cwd ; 99
mov cx, dx ; 89 d1
@@ -11019,131 +11867,134 @@ ahci_port_cmd_sync_: ; 0xf7880 LB 0xd0
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
sal ax, 007h ; c1 e0 07
- mov word [bp-006h], ax ; 89 46 fa
+ mov word [bp-00ch], ax ; 89 46 f4
mov si, ax ; 89 c6
add si, 00110h ; 81 c6 10 01
mov bx, strict word 00001h ; bb 01 00
mov cx, 04000h ; b9 00 40
mov dx, si ; 89 f2
mov ax, di ; 89 f8
- call 07811h ; e8 e7 fe
+ call 07f4bh ; e8 e2 fe
test al, al ; 84 c0
- je short 0790dh ; 74 df
+ je short 0804ch ; 74 df
mov bx, strict word 00001h ; bb 01 00
xor cx, cx ; 31 c9
mov dx, si ; 89 f2
mov ax, di ; 89 f8
- call 0778dh ; e8 53 fe
- mov dx, word [bp-006h] ; 8b 56 fa
+ call 07ec1h ; e8 48 fe
+ mov dx, word [bp-00ch] ; 8b 56 f4
add dx, 00118h ; 81 c2 18 01
mov bx, strict word 00001h ; bb 01 00
xor cx, cx ; 31 c9
mov ax, di ; 89 f8
- call 077cdh ; e8 82 fe
- leave ; c9
+ call 07f04h ; e8 7a fe
+ lea sp, [bp-006h] ; 8d 66 fa
pop di ; 5f
pop si ; 5e
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-ahci_cmd_data_: ; 0xf7950 LB 0x1c5
+ahci_cmd_data_: ; 0xf8092 LB 0x1ca
+ push bp ; 55
+ mov bp, sp ; 89 e5
push cx ; 51
push si ; 56
push di ; 57
- enter 00010h, 000h ; c8 10 00 00
+ sub sp, strict byte 00010h ; 83 ec 10
mov di, ax ; 89 c7
- mov word [bp-00ch], dx ; 89 56 f4
- mov byte [bp-002h], bl ; 88 5e fe
+ mov word [bp-012h], dx ; 89 56 ee
+ mov byte [bp-008h], bl ; 88 5e f8
xor si, si ; 31 f6
mov es, dx ; 8e c2
mov ax, word [es:di+001eeh] ; 26 8b 85 ee 01
- mov word [bp-004h], ax ; 89 46 fc
- mov word [bp-008h], si ; 89 76 f8
- mov word [bp-006h], ax ; 89 46 fa
- mov ax, word [es:di+00ah] ; 26 8b 45 0a
mov word [bp-00ah], ax ; 89 46 f6
- mov ax, word [es:di+00ch] ; 26 8b 45 0c
+ mov word [bp-00eh], si ; 89 76 f2
+ mov word [bp-00ch], ax ; 89 46 f4
+ mov ax, word [es:di+00ah] ; 26 8b 45 0a
mov word [bp-010h], ax ; 89 46 f0
+ mov ax, word [es:di+00ch] ; 26 8b 45 0c
+ mov word [bp-016h], ax ; 89 46 ea
mov cx, strict word 00040h ; b9 40 00
xor bx, bx ; 31 db
mov ax, 00080h ; b8 80 00
- mov dx, word [bp-004h] ; 8b 56 fc
- call 08caah ; e8 1d 13
- mov es, [bp-004h] ; 8e 46 fc
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 0948ah ; e8 b9 13
+ mov es, [bp-00ah] ; 8e 46 f6
mov word [es:si+00080h], 08027h ; 26 c7 84 80 00 27 80
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov al, byte [bp-008h] ; 8a 46 f8
mov byte [es:si+00082h], al ; 26 88 84 82 00
mov byte [es:si+00083h], 000h ; 26 c6 84 83 00 00
- mov es, [bp-00ch] ; 8e 46 f4
+ mov es, [bp-012h] ; 8e 46 ee
mov al, byte [es:di] ; 26 8a 05
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov byte [es:si+00084h], al ; 26 88 84 84 00
- mov es, [bp-00ch] ; 8e 46 f4
+ mov es, [bp-012h] ; 8e 46 ee
mov ax, word [es:di] ; 26 8b 05
mov bx, word [es:di+002h] ; 26 8b 5d 02
mov cx, strict word 00008h ; b9 08 00
shr bx, 1 ; d1 eb
rcr ax, 1 ; d1 d8
- loop 079c0h ; e2 fa
- mov es, [bp-004h] ; 8e 46 fc
+ loop 08104h ; e2 fa
+ mov es, [bp-00ah] ; 8e 46 f6
mov byte [es:si+00085h], al ; 26 88 84 85 00
- mov es, [bp-00ch] ; 8e 46 f4
+ mov es, [bp-012h] ; 8e 46 ee
mov ax, word [es:di+002h] ; 26 8b 45 02
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov byte [es:si+00086h], al ; 26 88 84 86 00
mov byte [es:si+00087h], 040h ; 26 c6 84 87 00 40
- mov es, [bp-00ch] ; 8e 46 f4
+ mov es, [bp-012h] ; 8e 46 ee
mov ax, word [es:di+002h] ; 26 8b 45 02
shr ax, 008h ; c1 e8 08
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov byte [es:si+00088h], al ; 26 88 84 88 00
mov word [es:si+00089h], strict word 00000h ; 26 c7 84 89 00 00 00
mov byte [es:si+0008bh], 000h ; 26 c6 84 8b 00 00
- mov al, byte [bp-00ah] ; 8a 46 f6
+ mov al, byte [bp-010h] ; 8a 46 f0
mov byte [es:si+0008ch], al ; 26 88 84 8c 00
- mov ax, word [bp-00ah] ; 8b 46 f6
+ mov ax, word [bp-010h] ; 8b 46 f0
shr ax, 008h ; c1 e8 08
mov byte [es:si+0008dh], al ; 26 88 84 8d 00
mov word [es:si+00276h], strict word 00010h ; 26 c7 84 76 02 10 00
- mov ax, word [bp-00ah] ; 8b 46 f6
+ mov ax, word [bp-010h] ; 8b 46 f0
xor dx, dx ; 31 d2
- mov bx, word [bp-010h] ; 8b 5e f0
+ mov bx, word [bp-016h] ; 8b 5e ea
xor cx, cx ; 31 c9
- call 08c79h ; e8 50 12
+ call 09459h ; e8 ec 12
push dx ; 52
push ax ; 50
- mov es, [bp-00ch] ; 8e 46 f4
+ mov es, [bp-012h] ; 8e 46 ee
mov bx, word [es:di+004h] ; 26 8b 5d 04
mov cx, word [es:di+006h] ; 26 8b 4d 06
mov ax, 0026ah ; b8 6a 02
- mov dx, word [bp-004h] ; 8b 56 fc
- call 08b9dh ; e8 5e 11
- mov es, [bp-004h] ; 8e 46 fc
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 09377h ; e8 f4 11
+ mov es, [bp-00ah] ; 8e 46 f6
movzx ax, byte [es:si+00263h] ; 26 0f b6 84 63 02
mov dx, word [es:si+0027eh] ; 26 8b 94 7e 02
add dx, strict byte 0ffffh ; 83 c2 ff
mov bx, word [es:si+00280h] ; 26 8b 9c 80 02
adc bx, strict byte 0ffffh ; 83 d3 ff
- mov word [bp-00eh], bx ; 89 5e f2
+ mov word [bp-014h], bx ; 89 5e ec
mov bx, ax ; 89 c3
sal bx, 004h ; c1 e3 04
mov word [es:bx+0010ch], dx ; 26 89 97 0c 01
- mov dx, word [bp-00eh] ; 8b 56 f2
+ mov dx, word [bp-014h] ; 8b 56 ec
mov word [es:bx+0010eh], dx ; 26 89 97 0e 01
mov cx, word [es:si+0027ah] ; 26 8b 8c 7a 02
mov dx, word [es:si+0027ch] ; 26 8b 94 7c 02
mov word [es:bx+00100h], cx ; 26 89 8f 00 01
mov word [es:bx+00102h], dx ; 26 89 97 02 01
inc ax ; 40
- mov es, [bp-00ch] ; 8e 46 f4
+ mov es, [bp-012h] ; 8e 46 ee
cmp word [es:di+01ch], strict byte 00000h ; 26 83 7d 1c 00
- je short 07ab8h ; 74 2c
+ je short 081fch ; 74 2c
mov dx, word [es:di+01ch] ; 26 8b 55 1c
dec dx ; 4a
mov di, ax ; 89 c7
sal di, 004h ; c1 e7 04
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov word [es:di+0010ch], dx ; 26 89 95 0c 01
mov word [es:di+0010eh], si ; 26 89 b5 0e 01
mov dx, word [es:si+00264h] ; 26 8b 94 64 02
@@ -11151,88 +12002,91 @@ ahci_cmd_data_: ; 0xf7950 LB 0x1c5
mov word [es:di+00100h], dx ; 26 89 95 00 01
mov word [es:di+00102h], bx ; 26 89 9d 02 01
inc ax ; 40
- les bx, [bp-008h] ; c4 5e f8
+ les bx, [bp-00eh] ; c4 5e f2
mov byte [es:bx+00263h], al ; 26 88 87 63 02
xor ax, ax ; 31 c0
- les bx, [bp-008h] ; c4 5e f8
+ les bx, [bp-00eh] ; c4 5e f2
movzx dx, byte [es:bx+00263h] ; 26 0f b6 97 63 02
cmp ax, dx ; 39 d0
- jnc short 07ad2h ; 73 03
+ jnc short 08216h ; 73 03
inc ax ; 40
- jmp short 07ac2h ; eb f0
- mov al, byte [bp-002h] ; 8a 46 fe
+ jmp short 08206h ; eb f0
+ mov al, byte [bp-008h] ; 8a 46 f8
cmp AL, strict byte 035h ; 3c 35
- jne short 07adfh ; 75 06
- mov byte [bp-002h], 040h ; c6 46 fe 40
- jmp short 07af3h ; eb 14
+ jne short 08223h ; 75 06
+ mov byte [bp-008h], 040h ; c6 46 f8 40
+ jmp short 08237h ; eb 14
cmp AL, strict byte 0a0h ; 3c a0
- jne short 07aefh ; 75 0c
- or byte [bp-002h], 020h ; 80 4e fe 20
+ jne short 08233h ; 75 0c
+ or byte [bp-008h], 020h ; 80 4e f8 20
or byte [es:bx+00083h], 001h ; 26 80 8f 83 00 01
- jmp short 07af3h ; eb 04
- mov byte [bp-002h], 000h ; c6 46 fe 00
- or byte [bp-002h], 005h ; 80 4e fe 05
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
- mov ax, word [bp-008h] ; 8b 46 f8
- mov dx, word [bp-006h] ; 8b 56 fa
- call 07880h ; e8 7c fd
- mov ax, word [bp-008h] ; 8b 46 f8
+ jmp short 08237h ; eb 04
+ mov byte [bp-008h], 000h ; c6 46 f8 00
+ or byte [bp-008h], 005h ; 80 4e f8 05
+ movzx bx, byte [bp-008h] ; 0f b6 5e f8
+ mov ax, word [bp-00eh] ; 8b 46 f2
+ mov dx, word [bp-00ch] ; 8b 56 f4
+ call 07fbdh ; e8 75 fd
+ mov ax, word [bp-00eh] ; 8b 46 f2
add ax, 0026ah ; 05 6a 02
- mov dx, word [bp-006h] ; 8b 56 fa
- call 08c13h ; e8 03 11
- leave ; c9
+ mov dx, word [bp-00ch] ; 8b 56 f4
+ call 093f0h ; e8 9c 11
+ lea sp, [bp-006h] ; 8d 66 fa
pop di ; 5f
pop si ; 5e
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-ahci_port_deinit_current_: ; 0xf7b15 LB 0x13f
+ahci_port_deinit_current_: ; 0xf825c LB 0x144
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push si ; 56
push di ; 57
- enter 00006h, 000h ; c8 06 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov di, ax ; 89 c7
- mov word [bp-004h], dx ; 89 56 fc
+ mov word [bp-00ch], dx ; 89 56 f4
mov es, dx ; 8e c2
mov si, word [es:di+00260h] ; 26 8b b5 60 02
mov al, byte [es:di+00262h] ; 26 8a 85 62 02
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-00ah], al ; 88 46 f6
cmp AL, strict byte 0ffh ; 3c ff
- je near 07c4eh ; 0f 84 17 01
+ je near 08397h ; 0f 84 17 01
movzx dx, al ; 0f b6 d0
sal dx, 007h ; c1 e2 07
add dx, 00118h ; 81 c2 18 01
mov bx, strict word 00011h ; bb 11 00
xor cx, cx ; 31 c9
mov ax, si ; 89 f0
- call 077cdh ; e8 82 fc
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ call 07f04h ; e8 70 fc
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
sal ax, 007h ; c1 e0 07
- mov word [bp-006h], ax ; 89 46 fa
+ mov word [bp-00eh], ax ; 89 46 f2
mov dx, ax ; 89 c2
add dx, 00118h ; 81 c2 18 01
mov bx, 0c011h ; bb 11 c0
xor cx, cx ; 31 c9
mov ax, si ; 89 f0
- call 07811h ; e8 ac fc
+ call 07f4bh ; e8 9d fc
cmp AL, strict byte 001h ; 3c 01
- je short 07b4bh ; 74 e2
+ je short 08294h ; 74 e2
mov cx, strict word 00020h ; b9 20 00
xor bx, bx ; 31 db
mov ax, di ; 89 f8
- mov dx, word [bp-004h] ; 8b 56 fc
- call 08caah ; e8 34 11
+ mov dx, word [bp-00ch] ; 8b 56 f4
+ call 0948ah ; e8 cb 11
lea ax, [di+00080h] ; 8d 85 80 00
mov cx, strict word 00040h ; b9 40 00
xor bx, bx ; 31 db
- mov dx, word [bp-004h] ; 8b 56 fc
- call 08caah ; e8 25 11
+ mov dx, word [bp-00ch] ; 8b 56 f4
+ call 0948ah ; e8 bc 11
lea ax, [di+00200h] ; 8d 85 00 02
mov cx, strict word 00060h ; b9 60 00
xor bx, bx ; 31 db
- mov dx, word [bp-004h] ; 8b 56 fc
- call 08caah ; e8 16 11
- mov ax, word [bp-006h] ; 8b 46 fa
+ mov dx, word [bp-00ch] ; 8b 56 f4
+ call 0948ah ; e8 ad 11
+ mov ax, word [bp-00eh] ; 8b 46 f2
add ax, 00108h ; 05 08 01
cwd ; 99
mov cx, dx ; 89 d1
@@ -11251,7 +12105,7 @@ ahci_port_deinit_current_: ; 0xf7b15 LB 0x13f
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov ax, word [bp-006h] ; 8b 46 fa
+ mov ax, word [bp-00eh] ; 8b 46 f2
add ax, 0010ch ; 05 0c 01
cwd ; 99
mov cx, dx ; 89 d1
@@ -11269,7 +12123,7 @@ ahci_port_deinit_current_: ; 0xf7b15 LB 0x13f
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov ax, word [bp-006h] ; 8b 46 fa
+ mov ax, word [bp-00eh] ; 8b 46 f2
db 0feh, 0c4h
; inc ah ; fe c4
cwd ; 99
@@ -11288,7 +12142,7 @@ ahci_port_deinit_current_: ; 0xf7b15 LB 0x13f
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov ax, word [bp-006h] ; 8b 46 fa
+ mov ax, word [bp-00eh] ; 8b 46 f2
add ax, 00104h ; 05 04 01
cwd ; 99
mov cx, dx ; 89 d1
@@ -11306,7 +12160,7 @@ ahci_port_deinit_current_: ; 0xf7b15 LB 0x13f
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov ax, word [bp-006h] ; 8b 46 fa
+ mov ax, word [bp-00eh] ; 8b 46 f2
add ax, 00114h ; 05 14 01
cwd ; 99
mov cx, dx ; 89 d1
@@ -11324,61 +12178,64 @@ ahci_port_deinit_current_: ; 0xf7b15 LB 0x13f
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ch] ; 8e 46 f4
mov byte [es:di+00262h], 0ffh ; 26 c6 85 62 02 ff
- leave ; c9
+ lea sp, [bp-008h] ; 8d 66 f8
pop di ; 5f
pop si ; 5e
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-ahci_port_init_: ; 0xf7c54 LB 0x201
+ahci_port_init_: ; 0xf83a0 LB 0x206
+ push bp ; 55
+ mov bp, sp ; 89 e5
push cx ; 51
push si ; 56
push di ; 57
- enter 00006h, 000h ; c8 06 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov si, ax ; 89 c6
- mov word [bp-004h], dx ; 89 56 fc
- mov byte [bp-002h], bl ; 88 5e fe
- call 07b15h ; e8 af fe
+ mov word [bp-00ah], dx ; 89 56 f6
+ mov byte [bp-008h], bl ; 88 5e f8
+ call 0825ch ; e8 a8 fe
movzx dx, bl ; 0f b6 d3
sal dx, 007h ; c1 e2 07
add dx, 00118h ; 81 c2 18 01
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov ax, word [es:si+00260h] ; 26 8b 84 60 02
mov bx, strict word 00011h ; bb 11 00
xor cx, cx ; 31 c9
- call 077cdh ; e8 4d fb
- movzx di, byte [bp-002h] ; 0f b6 7e fe
+ call 07f04h ; e8 36 fb
+ movzx di, byte [bp-008h] ; 0f b6 7e f8
sal di, 007h ; c1 e7 07
lea dx, [di+00118h] ; 8d 95 18 01
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov ax, word [es:si+00260h] ; 26 8b 84 60 02
mov bx, 0c011h ; bb 11 c0
xor cx, cx ; 31 c9
- call 07811h ; e8 76 fb
+ call 07f4bh ; e8 62 fb
cmp AL, strict byte 001h ; 3c 01
- je short 07c80h ; 74 e1
+ je short 083ceh ; 74 e1
mov cx, strict word 00020h ; b9 20 00
xor bx, bx ; 31 db
mov ax, si ; 89 f0
- mov dx, word [bp-004h] ; 8b 56 fc
- call 08caah ; e8 fe 0f
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 0948ah ; e8 90 10
lea ax, [si+00080h] ; 8d 84 80 00
mov cx, strict word 00040h ; b9 40 00
xor bx, bx ; 31 db
- mov dx, word [bp-004h] ; 8b 56 fc
- call 08caah ; e8 ef 0f
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 0948ah ; e8 81 10
mov ax, si ; 89 f0
add ah, 002h ; 80 c4 02
- mov word [bp-006h], ax ; 89 46 fa
+ mov word [bp-00ch], ax ; 89 46 f4
mov cx, strict word 00060h ; b9 60 00
xor bx, bx ; 31 db
- mov dx, word [bp-004h] ; 8b 56 fc
- call 08caah ; e8 dc 0f
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 0948ah ; e8 6e 10
lea ax, [di+00108h] ; 8d 85 08 01
cwd ; 99
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
mov cx, dx ; 89 d1
mov dx, bx ; 89 da
@@ -11387,10 +12244,10 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov ax, word [bp-006h] ; 8b 46 fa
- mov dx, word [bp-004h] ; 8b 56 fc
- call 07862h ; e8 71 fb
- mov es, [bp-004h] ; 8e 46 fc
+ mov ax, word [bp-00ch] ; 8b 46 f4
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 07f9fh ; e8 60 fb
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
add bx, strict byte 00004h ; 83 c3 04
mov cx, dx ; 89 d1
@@ -11402,7 +12259,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
out DX, eax ; 66 ef
lea ax, [di+0010ch] ; 8d 85 0c 01
cwd ; 99
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
mov cx, dx ; 89 d1
mov dx, bx ; 89 da
@@ -11411,7 +12268,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov dx, word [es:si+00260h] ; 26 8b 94 60 02
add dx, strict byte 00004h ; 83 c2 04
xor ax, ax ; 31 c0
@@ -11423,7 +12280,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
out DX, eax ; 66 ef
lea ax, [di+00100h] ; 8d 85 00 01
cwd ; 99
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
mov cx, dx ; 89 d1
mov dx, bx ; 89 da
@@ -11433,9 +12290,9 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
mov ax, si ; 89 f0
- mov dx, word [bp-004h] ; 8b 56 fc
- call 07862h ; e8 05 fb
- mov es, [bp-004h] ; 8e 46 fc
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 07f9fh ; e8 f4 fa
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
add bx, strict byte 00004h ; 83 c3 04
mov cx, dx ; 89 d1
@@ -11447,7 +12304,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
out DX, eax ; 66 ef
lea ax, [di+00104h] ; 8d 85 04 01
cwd ; 99
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
mov cx, dx ; 89 d1
mov dx, bx ; 89 da
@@ -11456,7 +12313,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov dx, word [es:si+00260h] ; 26 8b 94 60 02
add dx, strict byte 00004h ; 83 c2 04
xor ax, ax ; 31 c0
@@ -11468,7 +12325,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
out DX, eax ; 66 ef
lea ax, [di+00114h] ; 8d 85 14 01
cwd ; 99
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
mov cx, dx ; 89 d1
mov dx, bx ; 89 da
@@ -11477,7 +12334,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov dx, word [es:si+00260h] ; 26 8b 94 60 02
add dx, strict byte 00004h ; 83 c2 04
xor ax, ax ; 31 c0
@@ -11489,7 +12346,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
out DX, eax ; 66 ef
lea ax, [di+00110h] ; 8d 85 10 01
cwd ; 99
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
mov cx, dx ; 89 d1
mov dx, bx ; 89 da
@@ -11498,7 +12355,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov dx, word [es:si+00260h] ; 26 8b 94 60 02
add dx, strict byte 00004h ; 83 c2 04
mov ax, strict word 0ffffh ; b8 ff ff
@@ -11510,7 +12367,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
out DX, eax ; 66 ef
lea ax, [di+00130h] ; 8d 85 30 01
cwd ; 99
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov bx, word [es:si+00260h] ; 26 8b 9c 60 02
mov cx, dx ; 89 d1
mov dx, bx ; 89 da
@@ -11519,7 +12376,7 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-00ah] ; 8e 46 f6
mov dx, word [es:si+00260h] ; 26 8b 94 60 02
add dx, strict byte 00004h ; 83 c2 04
mov ax, strict word 0ffffh ; b8 ff ff
@@ -11529,47 +12386,48 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov al, byte [bp-002h] ; 8a 46 fe
- mov es, [bp-004h] ; 8e 46 fc
+ mov al, byte [bp-008h] ; 8a 46 f8
+ mov es, [bp-00ah] ; 8e 46 f6
mov byte [es:si+00262h], al ; 26 88 84 62 02
mov byte [es:si+00263h], 000h ; 26 c6 84 63 02 00
- leave ; c9
+ lea sp, [bp-006h] ; 8d 66 fa
pop di ; 5f
pop si ; 5e
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-@ahci_read_sectors: ; 0xf7e55 LB 0x91
- push si ; 56
- push di ; 57
+@ahci_read_sectors: ; 0xf85a6 LB 0x94
push bp ; 55
mov bp, sp ; 89 e5
- les di, [bp+008h] ; c4 7e 08
+ push si ; 56
+ push di ; 57
+ les di, [bp+004h] ; c4 7e 04
movzx di, byte [es:di+008h] ; 26 0f b6 7d 08
sub di, strict byte 0000ch ; 83 ef 0c
cmp di, strict byte 00004h ; 83 ff 04
- jbe short 07e79h ; 76 0f
+ jbe short 085cah ; 76 0f
push di ; 57
- push 00b9ah ; 68 9a 0b
- push 00bach ; 68 ac 0b
+ push 00c7eh ; 68 7e 0c
+ push 00c90h ; 68 90 0c
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 73 9a
+ call 01922h ; e8 5b 93
add sp, strict byte 00008h ; 83 c4 08
- les bx, [bp+008h] ; c4 5e 08
+ les bx, [bp+004h] ; c4 5e 04
mov dx, word [es:bx+001eeh] ; 26 8b 97 ee 01
xor ax, ax ; 31 c0
- call 07765h ; e8 df f8
- mov es, [bp+00ah] ; 8e 46 0a
+ call 07e93h ; e8 bc f8
+ mov es, [bp+006h] ; 8e 46 06
add di, bx ; 01 df
movzx bx, byte [es:di+001e9h] ; 26 0f b6 9d e9 01
- mov di, word [bp+008h] ; 8b 7e 08
+ mov di, word [bp+004h] ; 8b 7e 04
mov dx, word [es:di+001eeh] ; 26 8b 95 ee 01
xor ax, ax ; 31 c0
- call 07c54h ; e8 b6 fd
+ call 083a0h ; e8 b1 fd
mov bx, strict word 00025h ; bb 25 00
mov ax, di ; 89 f8
- mov dx, word [bp+00ah] ; 8b 56 0a
- call 07950h ; e8 a7 fa
- mov es, [bp+00ah] ; 8e 46 0a
+ mov dx, word [bp+006h] ; 8b 56 06
+ call 08092h ; e8 98 fa
+ mov es, [bp+006h] ; 8e 46 06
mov bx, di ; 89 fb
mov ax, word [es:bx+00ah] ; 26 8b 47 0a
mov word [es:bx+014h], ax ; 26 89 47 14
@@ -11585,135 +12443,139 @@ ahci_port_init_: ; 0xf7c54 LB 0x201
mov ds, dx ; 8e da
rep movsw ; f3 a5
pop DS ; 1f
- mov es, [bp+00ah] ; 8e 46 0a
+ mov es, [bp+006h] ; 8e 46 06
mov dx, word [es:bx+001eeh] ; 26 8b 97 ee 01
xor ax, ax ; 31 c0
- call 07779h ; e8 9b f8
+ call 07eaah ; e8 7b f8
xor ax, ax ; 31 c0
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 00004h ; c2 04 00
-@ahci_write_sectors: ; 0xf7ee6 LB 0x6d
- push si ; 56
+@ahci_write_sectors: ; 0xf863a LB 0x70
push bp ; 55
mov bp, sp ; 89 e5
- mov si, word [bp+006h] ; 8b 76 06
- mov cx, word [bp+008h] ; 8b 4e 08
+ push si ; 56
+ mov si, word [bp+004h] ; 8b 76 04
+ mov cx, word [bp+006h] ; 8b 4e 06
mov es, cx ; 8e c1
movzx bx, byte [es:si+008h] ; 26 0f b6 5c 08
sub bx, strict byte 0000ch ; 83 eb 0c
cmp bx, strict byte 00004h ; 83 fb 04
- jbe short 07f0eh ; 76 0f
+ jbe short 08662h ; 76 0f
push bx ; 53
- push 00bcbh ; 68 cb 0b
- push 00bach ; 68 ac 0b
+ push 00cafh ; 68 af 0c
+ push 00c90h ; 68 90 0c
push strict byte 00007h ; 6a 07
- call 018e9h ; e8 de 99
+ call 01922h ; e8 c3 92
add sp, strict byte 00008h ; 83 c4 08
mov es, cx ; 8e c1
mov dx, word [es:si+001eeh] ; 26 8b 94 ee 01
xor ax, ax ; 31 c0
- call 07765h ; e8 4b f8
+ call 07e93h ; e8 25 f8
mov es, cx ; 8e c1
add bx, si ; 01 f3
movzx bx, byte [es:bx+001e9h] ; 26 0f b6 9f e9 01
mov dx, word [es:si+001eeh] ; 26 8b 94 ee 01
xor ax, ax ; 31 c0
- call 07c54h ; e8 26 fd
+ call 083a0h ; e8 1e fd
mov bx, strict word 00035h ; bb 35 00
mov ax, si ; 89 f0
mov dx, cx ; 89 ca
- call 07950h ; e8 18 fa
+ call 08092h ; e8 06 fa
mov es, cx ; 8e c1
mov dx, word [es:si+00ah] ; 26 8b 54 0a
mov word [es:si+014h], dx ; 26 89 54 14
mov dx, word [es:si+001eeh] ; 26 8b 94 ee 01
xor ax, ax ; 31 c0
- call 07779h ; e8 2d f8
+ call 07eaah ; e8 0a f8
xor ax, ax ; 31 c0
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn 00004h ; c2 04 00
-ahci_cmd_packet_: ; 0xf7f53 LB 0x16e
+ahci_cmd_packet_: ; 0xf86aa LB 0x173
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0000eh, 000h ; c8 0e 00 00
+ sub sp, strict byte 0000eh ; 83 ec 0e
push ax ; 50
- mov byte [bp-002h], dl ; 88 56 fe
- mov word [bp-00eh], bx ; 89 5e f2
- mov word [bp-00ch], cx ; 89 4e f4
+ mov byte [bp-006h], dl ; 88 56 fa
+ mov word [bp-012h], bx ; 89 5e ee
+ mov word [bp-010h], cx ; 89 4e f0
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 b0 96
+ call 0161ch ; e8 57 8f
mov si, 00122h ; be 22 01
- mov word [bp-004h], ax ; 89 46 fc
- cmp byte [bp+00eh], 002h ; 80 7e 0e 02
- jne short 07f97h ; 75 1f
- mov bx, 00cd6h ; bb d6 0c
+ mov word [bp-008h], ax ; 89 46 f8
+ cmp byte [bp+00ah], 002h ; 80 7e 0a 02
+ jne short 086f0h ; 75 1f
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 2b 99
- push 00bdeh ; 68 de 0b
- push 00beeh ; 68 ee 0b
+ call 018e1h ; e8 05 92
+ push 00cc2h ; 68 c2 0c
+ push 00cd2h ; 68 d2 0c
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 5b 99
+ call 01922h ; e8 3b 92
add sp, strict byte 00006h ; 83 c4 06
mov ax, strict word 00001h ; b8 01 00
- jmp near 080bbh ; e9 24 01
- test byte [bp+008h], 001h ; f6 46 08 01
- jne short 07f91h ; 75 f4
- mov ax, word [bp+00ah] ; 8b 46 0a
- mov dx, word [bp+00ch] ; 8b 56 0c
+ jmp near 08814h ; e9 24 01
+ test byte [bp+004h], 001h ; f6 46 04 01
+ jne short 086eah ; 75 f4
+ mov ax, word [bp+006h] ; 8b 46 06
+ mov dx, word [bp+008h] ; 8b 56 08
mov cx, strict word 00008h ; b9 08 00
sal ax, 1 ; d1 e0
rcl dx, 1 ; d1 d2
- loop 07fa6h ; e2 fa
- mov es, [bp-004h] ; 8e 46 fc
+ loop 086ffh ; e2 fa
+ mov es, [bp-008h] ; 8e 46 f8
mov word [es:si], ax ; 26 89 04
mov word [es:si+002h], dx ; 26 89 54 02
- mov ax, word [bp+010h] ; 8b 46 10
+ mov ax, word [bp+00ch] ; 8b 46 0c
mov word [es:si+004h], ax ; 26 89 44 04
- mov ax, word [bp+012h] ; 8b 46 12
+ mov ax, word [bp+00eh] ; 8b 46 0e
mov word [es:si+006h], ax ; 26 89 44 06
mov bx, word [es:si+00ch] ; 26 8b 5c 0c
- mov ax, word [bp+00ah] ; 8b 46 0a
- mov dx, word [bp+00ch] ; 8b 56 0c
+ mov ax, word [bp+006h] ; 8b 46 06
+ mov dx, word [bp+008h] ; 8b 56 08
xor cx, cx ; 31 c9
- call 08c40h ; e8 6d 0c
+ call 09420h ; e8 f4 0c
mov word [es:si+00ah], ax ; 26 89 44 0a
xor di, di ; 31 ff
mov ax, word [es:si+001eeh] ; 26 8b 84 ee 01
- mov word [bp-006h], ax ; 89 46 fa
- mov word [bp-00ah], di ; 89 7e f6
- mov word [bp-008h], ax ; 89 46 f8
- sub word [bp-010h], strict byte 0000ch ; 83 6e f0 0c
+ mov word [bp-00ah], ax ; 89 46 f6
+ mov word [bp-00eh], di ; 89 7e f2
+ mov word [bp-00ch], ax ; 89 46 f4
+ sub word [bp-014h], strict byte 0000ch ; 83 6e ec 0c
xor ax, ax ; 31 c0
- mov dx, word [bp-006h] ; 8b 56 fa
- call 07765h ; e8 72 f7
- mov es, [bp-004h] ; 8e 46 fc
- mov bx, word [bp-010h] ; 8b 5e f0
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 07e93h ; e8 47 f7
+ mov es, [bp-008h] ; 8e 46 f8
+ mov bx, word [bp-014h] ; 8b 5e ec
add bx, si ; 01 f3
movzx bx, byte [es:bx+001e9h] ; 26 0f b6 9f e9 01
mov dx, word [es:si+001eeh] ; 26 8b 94 ee 01
xor ax, ax ; 31 c0
- call 07c54h ; e8 49 fc
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ call 083a0h ; e8 3c fc
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa
push ax ; 50
- mov bx, word [bp-00eh] ; 8b 5e f2
- mov cx, word [bp-00ch] ; 8b 4e f4
+ mov bx, word [bp-012h] ; 8b 5e ee
+ mov cx, word [bp-010h] ; 8b 4e f0
mov ax, 000c0h ; b8 c0 00
- mov dx, word [bp-006h] ; 8b 56 fa
- call 08cb7h ; e8 98 0c
- mov es, [bp-004h] ; 8e 46 fc
+ mov dx, word [bp-00ah] ; 8b 56 f6
+ call 09497h ; e8 1f 0d
+ mov es, [bp-008h] ; 8e 46 f8
mov word [es:si+014h], di ; 26 89 7c 14
mov word [es:si+016h], di ; 26 89 7c 16
mov word [es:si+018h], di ; 26 89 7c 18
mov ax, word [es:si+01ah] ; 26 8b 44 1a
test ax, ax ; 85 c0
- je short 0805dh ; 74 27
+ je short 087b6h ; 74 27
dec ax ; 48
- mov es, [bp-006h] ; 8e 46 fa
+ mov es, [bp-00ah] ; 8e 46 f6
mov word [es:di+0010ch], ax ; 26 89 85 0c 01
mov word [es:di+0010eh], di ; 26 89 bd 0e 01
mov ax, word [es:di+00264h] ; 26 8b 85 64 02
@@ -11723,12 +12585,12 @@ ahci_cmd_packet_: ; 0xf7f53 LB 0x16e
inc byte [es:di+00263h] ; 26 fe 85 63 02
mov bx, 000a0h ; bb a0 00
mov ax, si ; 89 f0
- mov dx, word [bp-004h] ; 8b 56 fc
- call 07950h ; e8 e8 f8
- les bx, [bp-00ah] ; c4 5e f6
+ mov dx, word [bp-008h] ; 8b 56 f8
+ call 08092h ; e8 d1 f8
+ les bx, [bp-00eh] ; c4 5e f2
mov ax, word [es:bx+004h] ; 26 8b 47 04
mov dx, word [es:bx+006h] ; 26 8b 57 06
- mov es, [bp-004h] ; 8e 46 fc
+ mov es, [bp-008h] ; 8e 46 f8
mov word [es:si+016h], ax ; 26 89 44 16
mov word [es:si+018h], dx ; 26 89 54 18
mov bx, word [es:si+016h] ; 26 8b 5c 16
@@ -11745,47 +12607,50 @@ ahci_cmd_packet_: ; 0xf7f53 LB 0x16e
mov ds, dx ; 8e da
rep movsw ; f3 a5
pop DS ; 1f
- mov ax, word [bp-00ah] ; 8b 46 f6
- mov dx, word [bp-008h] ; 8b 56 f8
- call 07779h ; e8 d2 f6
- les bx, [bp-00ah] ; c4 5e f6
+ mov ax, word [bp-00eh] ; 8b 46 f2
+ mov dx, word [bp-00ch] ; 8b 56 f4
+ call 07eaah ; e8 aa f6
+ les bx, [bp-00eh] ; c4 5e f2
mov ax, word [es:bx+006h] ; 26 8b 47 06
or ax, word [es:bx+004h] ; 26 0b 47 04
- jne short 080b9h ; 75 05
+ jne short 08812h ; 75 05
mov ax, strict word 00004h ; b8 04 00
- jmp short 080bbh ; eb 02
+ jmp short 08814h ; eb 02
xor ax, ax ; 31 c0
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 0000ch ; c2 0c 00
-ahci_port_detect_device_: ; 0xf80c1 LB 0x3c3
+ahci_port_detect_device_: ; 0xf881d LB 0x401
+ push bp ; 55
+ mov bp, sp ; 89 e5
push cx ; 51
push si ; 56
push di ; 57
- enter 00220h, 000h ; c8 20 02 00
+ sub sp, 00222h ; 81 ec 22 02
mov di, ax ; 89 c7
- mov word [bp-00ah], dx ; 89 56 f6
- mov byte [bp-002h], bl ; 88 5e fe
+ mov word [bp-010h], dx ; 89 56 f0
+ mov byte [bp-00ch], bl ; 88 5e f4
movzx cx, bl ; 0f b6 cb
mov bx, cx ; 89 cb
- call 07c54h ; e8 7c fb
+ call 083a0h ; e8 69 fb
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 3b 95
- mov word [bp-01eh], ax ; 89 46 e2
+ call 0161ch ; e8 dc 8d
+ mov word [bp-020h], ax ; 89 46 e0
mov si, 00122h ; be 22 01
- mov word [bp-008h], ax ; 89 46 f8
- mov word [bp-00eh], si ; 89 76 f2
- mov word [bp-00ch], ax ; 89 46 f4
+ mov word [bp-00eh], ax ; 89 46 f2
+ mov word [bp-012h], si ; 89 76 ee
+ mov word [bp-01eh], ax ; 89 46 e2
sal cx, 007h ; c1 e1 07
- mov word [bp-012h], cx ; 89 4e ee
+ mov word [bp-016h], cx ; 89 4e ea
mov ax, cx ; 89 c8
add ax, 0012ch ; 05 2c 01
cwd ; 99
- mov word [bp-020h], ax ; 89 46 e0
+ mov word [bp-022h], ax ; 89 46 de
mov bx, dx ; 89 d3
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-010h] ; 8e 46 f0
mov dx, word [es:di+00260h] ; 26 8b 95 60 02
mov cx, bx ; 89 d9
xchg cx, ax ; 91
@@ -11793,7 +12658,7 @@ ahci_port_detect_device_: ; 0xf80c1 LB 0x3c3
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-010h] ; 8e 46 f0
mov dx, word [es:di+00260h] ; 26 8b 95 60 02
add dx, strict byte 00004h ; 83 c2 04
mov ax, strict word 00001h ; b8 01 00
@@ -11803,16 +12668,16 @@ ahci_port_detect_device_: ; 0xf80c1 LB 0x3c3
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-010h] ; 8e 46 f0
mov dx, word [es:di+00260h] ; 26 8b 95 60 02
- mov ax, word [bp-020h] ; 8b 46 e0
+ mov ax, word [bp-022h] ; 8b 46 de
mov cx, bx ; 89 d9
xchg cx, ax ; 91
sal eax, 010h ; 66 c1 e0 10
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-010h] ; 8e 46 f0
mov dx, word [es:di+00260h] ; 26 8b 95 60 02
add dx, strict byte 00004h ; 83 c2 04
xor ax, ax ; 31 c0
@@ -11822,10 +12687,10 @@ ahci_port_detect_device_: ; 0xf80c1 LB 0x3c3
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov ax, word [bp-012h] ; 8b 46 ee
+ mov ax, word [bp-016h] ; 8b 46 ea
add ax, 00128h ; 05 28 01
cwd ; 99
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-010h] ; 8e 46 f0
mov bx, word [es:di+00260h] ; 26 8b 9d 60 02
mov cx, dx ; 89 d1
mov dx, bx ; 89 da
@@ -11834,7 +12699,7 @@ ahci_port_detect_device_: ; 0xf80c1 LB 0x3c3
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-010h] ; 8e 46 f0
mov dx, word [es:di+00260h] ; 26 8b 95 60 02
add dx, strict byte 00004h ; 83 c2 04
in eax, DX ; 66 ed
@@ -11845,33 +12710,56 @@ ahci_port_detect_device_: ; 0xf80c1 LB 0x3c3
push strict byte 00000h ; 6a 00
mov bx, strict word 0000fh ; bb 0f 00
xor cx, cx ; 31 c9
- call 07847h ; e8 b2 f6
+ call 07f84h ; e8 90 f6
cmp ax, strict word 00003h ; 3d 03 00
- jne near 0847fh ; 0f 85 e3 02
- mov es, [bp-008h] ; 8e 46 f8
+ jne near 08c16h ; 0f 85 1b 03
+ mov ax, word [bp-016h] ; 8b 46 ea
+ add ax, 00130h ; 05 30 01
+ cwd ; 99
+ mov es, [bp-010h] ; 8e 46 f0
+ mov bx, word [es:di+00260h] ; 26 8b 9d 60 02
+ mov cx, dx ; 89 d1
+ mov dx, bx ; 89 da
+ xchg cx, ax ; 91
+ sal eax, 010h ; 66 c1 e0 10
+ db 08bh, 0c1h
+ ; mov ax, cx ; 8b c1
+ out DX, eax ; 66 ef
+ mov es, [bp-010h] ; 8e 46 f0
+ mov dx, word [es:di+00260h] ; 26 8b 95 60 02
+ add dx, strict byte 00004h ; 83 c2 04
+ mov ax, strict word 0ffffh ; b8 ff ff
+ mov cx, ax ; 89 c1
+ xchg cx, ax ; 91
+ sal eax, 010h ; 66 c1 e0 10
+ db 08bh, 0c1h
+ ; mov ax, cx ; 8b c1
+ out DX, eax ; 66 ef
+ mov es, [bp-00eh] ; 8e 46 f2
mov al, byte [es:si+001edh] ; 26 8a 84 ed 01
- mov byte [bp-004h], al ; 88 46 fc
+ mov byte [bp-008h], al ; 88 46 f8
cmp AL, strict byte 004h ; 3c 04
- jnc near 0847fh ; 0f 83 d2 02
- mov dx, word [bp-012h] ; 8b 56 ee
+ jnc near 08c16h ; 0f 83 d5 02
+ mov dx, word [bp-016h] ; 8b 56 ea
add dx, 00118h ; 81 c2 18 01
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-010h] ; 8e 46 f0
mov ax, word [es:di+00260h] ; 26 8b 85 60 02
mov bx, strict word 00010h ; bb 10 00
xor cx, cx ; 31 c9
- call 0778dh ; e8 c9 f5
- mov ax, word [bp-012h] ; 8b 46 ee
+ call 07ec1h ; e8 69 f5
+ mov ax, word [bp-016h] ; 8b 46 ea
add ax, 00124h ; 05 24 01
cwd ; 99
+ mov es, [bp-010h] ; 8e 46 f0
+ mov bx, word [es:di+00260h] ; 26 8b 9d 60 02
mov cx, dx ; 89 d1
- mov es, [bp-00ah] ; 8e 46 f6
- mov dx, word [es:di+00260h] ; 26 8b 95 60 02
+ mov dx, bx ; 89 da
xchg cx, ax ; 91
sal eax, 010h ; 66 c1 e0 10
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- mov es, [bp-00ah] ; 8e 46 f6
+ mov es, [bp-010h] ; 8e 46 f0
mov dx, word [es:di+00260h] ; 26 8b 95 60 02
add dx, strict byte 00004h ; 83 c2 04
in eax, DX ; 66 ed
@@ -11879,199 +12767,202 @@ ahci_port_detect_device_: ; 0xf80c1 LB 0x3c3
; mov dx, ax ; 8b d0
shr eax, 010h ; 66 c1 e8 10
xchg dx, ax ; 92
- mov bx, ax ; 89 c3
- mov ax, dx ; 89 d0
- mov cl, byte [bp-004h] ; 8a 4e fc
+ mov cl, byte [bp-008h] ; 8a 4e f8
add cl, 00ch ; 80 c1 0c
test dx, dx ; 85 d2
- jne near 083d9h ; 0f 85 d7 01
- cmp bx, 00101h ; 81 fb 01 01
- jne near 083d9h ; 0f 85 cf 01
- mov es, [bp-008h] ; 8e 46 f8
+ jne near 08b68h ; 0f 85 d4 01
+ cmp ax, 00101h ; 3d 01 01
+ jne near 08b68h ; 0f 85 cd 01
+ mov es, [bp-00eh] ; 8e 46 f2
db 066h, 026h, 0c7h, 004h, 000h, 000h, 000h, 000h
; mov dword [es:si], strict dword 000000000h ; 66 26 c7 04 00 00 00 00
- lea dx, [bp-00220h] ; 8d 96 e0 fd
+ lea dx, [bp-00228h] ; 8d 96 d8 fd
mov word [es:si+004h], dx ; 26 89 54 04
mov [es:si+006h], ss ; 26 8c 54 06
db 066h, 026h, 0c7h, 044h, 00ah, 001h, 000h, 000h, 002h
; mov dword [es:si+00ah], strict dword 002000001h ; 66 26 c7 44 0a 01 00 00 02
mov bx, 000ech ; bb ec 00
mov ax, si ; 89 f0
- mov dx, word [bp-01eh] ; 8b 56 e2
- call 07950h ; e8 1b f7
- mov byte [bp-006h], cl ; 88 4e fa
- test byte [bp-00220h], 080h ; f6 86 e0 fd 80
+ mov dx, word [bp-020h] ; 8b 56 e0
+ call 08092h ; e8 cc f6
+ mov byte [bp-00ah], cl ; 88 4e f6
+ test byte [bp-00228h], 080h ; f6 86 d8 fd 80
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
xor ah, ah ; 30 e4
- mov dx, word [bp-0021eh] ; 8b 96 e2 fd
+ mov dx, word [bp-00226h] ; 8b 96 da fd
mov word [bp-018h], dx ; 89 56 e8
- mov dx, word [bp-0021ah] ; 8b 96 e6 fd
- mov word [bp-014h], dx ; 89 56 ec
- mov dx, word [bp-00214h] ; 8b 96 ec fd
+ mov dx, word [bp-00222h] ; 8b 96 de fd
+ mov word [bp-01ch], dx ; 89 56 e4
+ mov dx, word [bp-0021ch] ; 8b 96 e4 fd
mov word [bp-01ah], dx ; 89 56 e6
- mov dx, word [bp-001a8h] ; 8b 96 58 fe
- mov word [bp-010h], dx ; 89 56 f0
- mov di, word [bp-001a6h] ; 8b be 5a fe
- cmp di, 00fffh ; 81 ff ff 0f
- jne short 08278h ; 75 10
- cmp dx, strict byte 0ffffh ; 83 fa ff
- jne short 08278h ; 75 0b
- mov dx, word [bp-00158h] ; 8b 96 a8 fe
- mov word [bp-010h], dx ; 89 56 f0
- mov di, word [bp-00156h] ; 8b be aa fe
- movzx bx, byte [bp-004h] ; 0f b6 5e fc
- mov es, [bp-00ch] ; 8e 46 f4
- add bx, word [bp-00eh] ; 03 5e f2
- mov ah, byte [bp-002h] ; 8a 66 fe
+ mov di, word [bp-001b0h] ; 8b be 50 fe
+ mov dx, word [bp-001aeh] ; 8b 96 52 fe
+ mov word [bp-014h], dx ; 89 56 ec
+ cmp dx, 00fffh ; 81 fa ff 0f
+ jne short 08a09h ; 75 10
+ cmp di, strict byte 0ffffh ; 83 ff ff
+ jne short 08a09h ; 75 0b
+ mov di, word [bp-00160h] ; 8b be a0 fe
+ mov dx, word [bp-0015eh] ; 8b 96 a2 fe
+ mov word [bp-014h], dx ; 89 56 ec
+ movzx bx, byte [bp-008h] ; 0f b6 5e f8
+ mov es, [bp-01eh] ; 8e 46 e2
+ add bx, word [bp-012h] ; 03 5e ee
+ mov ah, byte [bp-00ch] ; 8a 66 f4
mov byte [es:bx+001e9h], ah ; 26 88 a7 e9 01
- movzx dx, byte [bp-006h] ; 0f b6 56 fa
+ movzx dx, byte [bp-00ah] ; 0f b6 56 f6
imul dx, dx, strict byte 00018h ; 6b d2 18
- mov si, word [bp-00eh] ; 8b 76 f2
+ mov si, word [bp-012h] ; 8b 76 ee
add si, dx ; 01 d6
mov word [es:si+01eh], 0ff05h ; 26 c7 44 1e 05 ff
mov byte [es:si+020h], al ; 26 88 44 20
mov byte [es:si+021h], 000h ; 26 c6 44 21 00
mov word [es:si+024h], 00200h ; 26 c7 44 24 00 02
mov byte [es:si+023h], 001h ; 26 c6 44 23 01
- mov ax, word [bp-010h] ; 8b 46 f0
- mov word [es:si+032h], ax ; 26 89 44 32
- mov word [es:si+034h], di ; 26 89 7c 34
+ mov word [es:si+032h], di ; 26 89 7c 32
mov ax, word [bp-014h] ; 8b 46 ec
+ mov word [es:si+034h], ax ; 26 89 44 34
+ mov ax, word [bp-01ch] ; 8b 46 e4
mov word [es:si+02ch], ax ; 26 89 44 2c
mov ax, word [bp-018h] ; 8b 46 e8
mov word [es:si+02eh], ax ; 26 89 44 2e
mov ax, word [bp-01ah] ; 8b 46 e6
mov word [es:si+030h], ax ; 26 89 44 30
- mov al, byte [bp-004h] ; 8a 46 fc
+ mov al, byte [bp-008h] ; 8a 46 f8
cmp AL, strict byte 001h ; 3c 01
- jc short 082e3h ; 72 0c
- jbe short 082ebh ; 76 12
+ jc short 08a74h ; 72 0c
+ jbe short 08a7ch ; 76 12
cmp AL, strict byte 003h ; 3c 03
- je short 082f3h ; 74 16
+ je short 08a84h ; 74 16
cmp AL, strict byte 002h ; 3c 02
- je short 082efh ; 74 0e
- jmp short 0833ah ; eb 57
+ je short 08a80h ; 74 0e
+ jmp short 08acdh ; eb 59
test al, al ; 84 c0
- jne short 0833ah ; 75 53
+ jne short 08acdh ; 75 55
mov DL, strict byte 040h ; b2 40
- jmp short 082f5h ; eb 0a
+ jmp short 08a86h ; eb 0a
mov DL, strict byte 048h ; b2 48
- jmp short 082f5h ; eb 06
+ jmp short 08a86h ; eb 06
mov DL, strict byte 050h ; b2 50
- jmp short 082f5h ; eb 02
+ jmp short 08a86h ; eb 02
mov DL, strict byte 058h ; b2 58
mov al, dl ; 88 d0
add AL, strict byte 007h ; 04 07
movzx bx, al ; 0f b6 d8
mov ax, bx ; 89 d8
- call 0165ch ; e8 5b 93
+ call 0165ch ; e8 ca 8b
test al, al ; 84 c0
- je short 0833ah ; 74 35
+ je short 08acdh ; 74 37
mov al, dl ; 88 d0
db 0feh, 0c0h
; inc al ; fe c0
xor ah, ah ; 30 e4
- call 0165ch ; e8 4e 93
+ call 0165ch ; e8 bd 8b
xor ah, ah ; 30 e4
mov cx, ax ; 89 c1
sal cx, 008h ; c1 e1 08
movzx ax, dl ; 0f b6 c2
- call 0165ch ; e8 41 93
+ call 0165ch ; e8 b0 8b
xor ah, ah ; 30 e4
add ax, cx ; 01 c8
- mov word [bp-01ch], ax ; 89 46 e4
+ mov word [bp-026h], ax ; 89 46 da
mov al, dl ; 88 d0
add AL, strict byte 002h ; 04 02
xor ah, ah ; 30 e4
- call 0165ch ; e8 31 93
+ call 0165ch ; e8 a0 8b
xor ah, ah ; 30 e4
- mov word [bp-016h], ax ; 89 46 ea
+ mov word [bp-028h], ax ; 89 46 d8
mov ax, bx ; 89 d8
- call 0165ch ; e8 27 93
- movzx dx, al ; 0f b6 d0
- jmp short 08349h ; eb 0f
- mov ax, word [bp-018h] ; 8b 46 e8
- mov word [bp-01ch], ax ; 89 46 e4
- mov ax, word [bp-014h] ; 8b 46 ec
- mov word [bp-016h], ax ; 89 46 ea
- mov dx, word [bp-01ah] ; 8b 56 e6
- mov bx, 00cd6h ; bb d6 0c
+ call 0165ch ; e8 96 8b
+ xor ah, ah ; 30 e4
+ mov word [bp-024h], ax ; 89 46 dc
+ jmp short 08adah ; eb 0d
+ mov bx, di ; 89 fb
+ mov cx, word [bp-014h] ; 8b 4e ec
+ mov dx, ss ; 8c d2
+ lea ax, [bp-028h] ; 8d 46 d8
+ call 05341h ; e8 67 c8
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 5a 95
- push di ; 57
- push word [bp-010h] ; ff 76 f0
- push dx ; 52
- push word [bp-016h] ; ff 76 ea
- push word [bp-01ch] ; ff 76 e4
- push word [bp-01ah] ; ff 76 e6
+ call 018e1h ; e8 fc 8d
push word [bp-014h] ; ff 76 ec
+ push di ; 57
+ mov ax, word [bp-024h] ; 8b 46 dc
+ push ax ; 50
+ mov ax, word [bp-028h] ; 8b 46 d8
+ push ax ; 50
+ mov ax, word [bp-026h] ; 8b 46 da
+ push ax ; 50
+ push dword [bp-01ch] ; 66 ff 76 e4
push word [bp-018h] ; ff 76 e8
- movzx ax, byte [bp-002h] ; 0f b6 46 fe
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4
push ax ; 50
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
push ax ; 50
- push 00c0eh ; 68 0e 0c
+ push 00cf2h ; 68 f2 0c
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 6f 95
+ call 01922h ; e8 14 8e
add sp, strict byte 00018h ; 83 c4 18
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- imul ax, ax, strict byte 00018h ; 6b c0 18
- les si, [bp-00eh] ; c4 76 f2
- add si, ax ; 01 c6
- mov ax, word [bp-016h] ; 8b 46 ea
- mov word [es:si+026h], ax ; 26 89 44 26
- mov ax, word [bp-01ch] ; 8b 46 e4
- mov word [es:si+028h], ax ; 26 89 44 28
- mov word [es:si+02ah], dx ; 26 89 54 2a
- mov bx, word [bp-00eh] ; 8b 5e f2
- mov dl, byte [es:bx+0019eh] ; 26 8a 97 9e 01
- mov al, byte [bp-004h] ; 8a 46 fc
- add AL, strict byte 00ch ; 04 0c
- movzx bx, dl ; 0f b6 da
- add bx, word [bp-00eh] ; 03 5e f2
- mov byte [es:bx+0019fh], al ; 26 88 87 9f 01
- db 0feh, 0c2h
- ; inc dl ; fe c2
- mov bx, word [bp-00eh] ; 8b 5e f2
- mov byte [es:bx+0019eh], dl ; 26 88 97 9e 01
+ movzx di, byte [bp-00ah] ; 0f b6 7e f6
+ imul di, di, strict byte 00018h ; 6b ff 18
+ add di, word [bp-012h] ; 03 7e ee
+ mov es, [bp-01eh] ; 8e 46 e2
+ lea di, [di+026h] ; 8d 7d 26
+ push DS ; 1e
+ push SS ; 16
+ pop DS ; 1f
+ lea si, [bp-028h] ; 8d 76 d8
+ movsw ; a5
+ movsw ; a5
+ movsw ; a5
+ pop DS ; 1f
+ mov bx, word [bp-012h] ; 8b 5e ee
+ mov al, byte [es:bx+0019eh] ; 26 8a 87 9e 01
+ mov ah, byte [bp-008h] ; 8a 66 f8
+ add ah, 00ch ; 80 c4 0c
+ movzx bx, al ; 0f b6 d8
+ add bx, word [bp-012h] ; 03 5e ee
+ mov byte [es:bx+0019fh], ah ; 26 88 a7 9f 01
+ db 0feh, 0c0h
+ ; inc al ; fe c0
+ mov bx, word [bp-012h] ; 8b 5e ee
+ mov byte [es:bx+0019eh], al ; 26 88 87 9e 01
mov dx, strict word 00075h ; ba 75 00
mov ax, strict word 00040h ; b8 40 00
- call 01600h ; e8 3a 92
- mov dl, al ; 88 c2
- db 0feh, 0c2h
- ; inc dl ; fe c2
- movzx bx, dl ; 0f b6 da
+ call 01600h ; e8 a9 8a
+ db 0feh, 0c0h
+ ; inc al ; fe c0
+ movzx bx, al ; 0f b6 d8
mov dx, strict word 00075h ; ba 75 00
mov ax, strict word 00040h ; b8 40 00
- call 0160eh ; e8 38 92
- jmp near 08471h ; e9 98 00
+ call 0160eh ; e8 a9 8a
+ jmp near 08c05h ; e9 9d 00
cmp dx, 0eb14h ; 81 fa 14 eb
- jne near 08471h ; 0f 85 90 00
- cmp bx, 00101h ; 81 fb 01 01
- jne near 08471h ; 0f 85 88 00
- mov es, [bp-008h] ; 8e 46 f8
+ jne near 08c05h ; 0f 85 95 00
+ cmp ax, 00101h ; 3d 01 01
+ jne near 08c05h ; 0f 85 8e 00
+ mov es, [bp-00eh] ; 8e 46 f2
db 066h, 026h, 0c7h, 004h, 000h, 000h, 000h, 000h
; mov dword [es:si], strict dword 000000000h ; 66 26 c7 04 00 00 00 00
- lea dx, [bp-00220h] ; 8d 96 e0 fd
+ lea dx, [bp-00228h] ; 8d 96 d8 fd
mov word [es:si+004h], dx ; 26 89 54 04
mov [es:si+006h], ss ; 26 8c 54 06
db 066h, 026h, 0c7h, 044h, 00ah, 001h, 000h, 000h, 002h
; mov dword [es:si+00ah], strict dword 002000001h ; 66 26 c7 44 0a 01 00 00 02
mov bx, 000a1h ; bb a1 00
mov ax, si ; 89 f0
- mov dx, word [bp-01eh] ; 8b 56 e2
- call 07950h ; e8 3c f5
- test byte [bp-00220h], 080h ; f6 86 e0 fd 80
+ mov dx, word [bp-020h] ; 8b 56 e0
+ call 08092h ; e8 f0 f4
+ test byte [bp-00228h], 080h ; f6 86 d8 fd 80
db 00fh, 095h, 0c0h
; setne al ; 0f 95 c0
- xor ah, ah ; 30 e4
- mov dx, ax ; 89 c2
- movzx bx, byte [bp-004h] ; 0f b6 5e fc
- mov es, [bp-01eh] ; 8e 46 e2
+ movzx dx, al ; 0f b6 d0
+ movzx bx, byte [bp-008h] ; 0f b6 5e f8
+ mov es, [bp-020h] ; 8e 46 e0
add bx, si ; 01 f3
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov al, byte [bp-00ch] ; 8a 46 f4
mov byte [es:bx+001e9h], al ; 26 88 87 e9 01
movzx si, cl ; 0f b6 f1
imul si, si, strict byte 00018h ; 6b f6 18
@@ -12079,77 +12970,84 @@ ahci_port_detect_device_: ; 0xf80c1 LB 0x3c3
mov word [es:si+01eh], 00505h ; 26 c7 44 1e 05 05
mov byte [es:si+020h], dl ; 26 88 54 20
mov word [es:si+024h], 00800h ; 26 c7 44 24 00 08
- les bx, [bp-00eh] ; c4 5e f2
- mov dl, byte [es:bx+001afh] ; 26 8a 97 af 01
- mov al, byte [bp-004h] ; 8a 46 fc
- add AL, strict byte 00ch ; 04 0c
- movzx bx, dl ; 0f b6 da
mov es, [bp-01eh] ; 8e 46 e2
+ mov bx, word [bp-012h] ; 8b 5e ee
+ mov al, byte [es:bx+001afh] ; 26 8a 87 af 01
+ mov ah, byte [bp-008h] ; 8a 66 f8
+ add ah, 00ch ; 80 c4 0c
+ movzx bx, al ; 0f b6 d8
+ mov es, [bp-020h] ; 8e 46 e0
add bx, 00122h ; 81 c3 22 01
- mov byte [es:bx+001b0h], al ; 26 88 87 b0 01
- db 0feh, 0c2h
- ; inc dl ; fe c2
- les bx, [bp-00eh] ; c4 5e f2
- mov byte [es:bx+001afh], dl ; 26 88 97 af 01
- inc byte [bp-004h] ; fe 46 fc
- mov al, byte [bp-004h] ; 8a 46 fc
- les bx, [bp-00eh] ; c4 5e f2
+ mov byte [es:bx+001b0h], ah ; 26 88 a7 b0 01
+ db 0feh, 0c0h
+ ; inc al ; fe c0
+ mov es, [bp-01eh] ; 8e 46 e2
+ mov bx, word [bp-012h] ; 8b 5e ee
+ mov byte [es:bx+001afh], al ; 26 88 87 af 01
+ inc byte [bp-008h] ; fe 46 f8
+ mov al, byte [bp-008h] ; 8a 46 f8
+ mov es, [bp-01eh] ; 8e 46 e2
+ mov bx, word [bp-012h] ; 8b 5e ee
mov byte [es:bx+001edh], al ; 26 88 87 ed 01
- leave ; c9
+ lea sp, [bp-006h] ; 8d 66 fa
pop di ; 5f
pop si ; 5e
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-ahci_mem_alloc_: ; 0xf8484 LB 0x40
+ahci_mem_alloc_: ; 0xf8c1e LB 0x43
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- push bp ; 55
- mov bp, sp ; 89 e5
mov dx, 00413h ; ba 13 04
xor ax, ax ; 31 c0
- call 0161ch ; e8 88 91
+ call 0161ch ; e8 ee 89
test ax, ax ; 85 c0
- je short 084bdh ; 74 25
+ je short 08c57h ; 74 25
dec ax ; 48
mov bx, ax ; 89 c3
xor dx, dx ; 31 d2
mov cx, strict word 0000ah ; b9 0a 00
sal ax, 1 ; d1 e0
rcl dx, 1 ; d1 d2
- loop 084a0h ; e2 fa
+ loop 08c3ah ; e2 fa
mov si, ax ; 89 c6
mov di, dx ; 89 d7
mov cx, strict word 00004h ; b9 04 00
shr di, 1 ; d1 ef
rcr si, 1 ; d1 de
- loop 084adh ; e2 fa
+ loop 08c47h ; e2 fa
mov dx, 00413h ; ba 13 04
xor ax, ax ; 31 c0
- call 0162ah ; e8 6f 91
+ call 0162ah ; e8 d5 89
mov ax, si ; 89 f0
- pop bp ; 5d
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-ahci_hba_init_: ; 0xf84c4 LB 0x120
+ahci_hba_init_: ; 0xf8c61 LB 0x125
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push dx ; 52
push si ; 56
push di ; 57
- enter 00006h, 000h ; c8 06 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov si, ax ; 89 c6
mov dx, strict word 0000eh ; ba 0e 00
mov ax, strict word 00040h ; b8 40 00
- call 0161ch ; e8 44 91
+ call 0161ch ; e8 a5 89
mov bx, 00122h ; bb 22 01
- mov word [bp-006h], ax ; 89 46 fa
+ mov word [bp-010h], ax ; 89 46 f0
mov ax, strict word 00010h ; b8 10 00
xor cx, cx ; 31 c9
mov dx, si ; 89 f2
@@ -12164,11 +13062,11 @@ ahci_hba_init_: ; 0xf84c4 LB 0x120
; mov dx, ax ; 8b d0
shr eax, 010h ; 66 c1 e8 10
xchg dx, ax ; 92
- call 08484h ; e8 87 ff
+ call 08c1eh ; e8 82 ff
mov di, ax ; 89 c7
test ax, ax ; 85 c0
- je near 085c6h ; 0f 84 c1 00
- mov es, [bp-006h] ; 8e 46 fa
+ je near 08d65h ; 0f 84 c1 00
+ mov es, [bp-010h] ; 8e 46 f0
mov word [es:bx+001eeh], di ; 26 89 bf ee 01
mov byte [es:bx+001edh], 000h ; 26 c6 87 ed 01 00
xor bx, bx ; 31 db
@@ -12181,7 +13079,7 @@ ahci_hba_init_: ; 0xf84c4 LB 0x120
xor cx, cx ; 31 c9
mov dx, strict word 00004h ; ba 04 00
mov ax, si ; 89 f0
- call 0778dh ; e8 54 f2
+ call 07ec1h ; e8 e9 f1
mov ax, strict word 00004h ; b8 04 00
xor cx, cx ; 31 c9
mov dx, si ; 89 f2
@@ -12198,7 +13096,7 @@ ahci_hba_init_: ; 0xf84c4 LB 0x120
shr eax, 010h ; 66 c1 e8 10
xchg dx, ax ; 92
test AL, strict byte 001h ; a8 01
- jne short 08539h ; 75 de
+ jne short 08cd8h ; 75 de
xor ax, ax ; 31 c0
xor cx, cx ; 31 c9
mov dx, si ; 89 f2
@@ -12216,280 +13114,267 @@ ahci_hba_init_: ; 0xf84c4 LB 0x120
push strict byte 00000h ; 6a 00
mov bx, strict word 0001fh ; bb 1f 00
xor cx, cx ; 31 c9
- call 07847h ; e8 c8 f2
+ call 07f84h ; e8 66 f2
db 0feh, 0c0h
; inc al ; fe c0
- mov byte [bp-004h], al ; 88 46 fc
- mov byte [bp-002h], 000h ; c6 46 fe 00
- jmp short 08593h ; eb 09
- inc byte [bp-002h] ; fe 46 fe
- cmp byte [bp-002h], 020h ; 80 7e fe 20
- jnc short 085c4h ; 73 31
- movzx cx, byte [bp-002h] ; 0f b6 4e fe
+ mov byte [bp-00eh], al ; 88 46 f2
+ mov byte [bp-00ch], 000h ; c6 46 f4 00
+ jmp short 08d32h ; eb 09
+ inc byte [bp-00ch] ; fe 46 f4
+ cmp byte [bp-00ch], 020h ; 80 7e f4 20
+ jnc short 08d63h ; 73 31
+ movzx cx, byte [bp-00ch] ; 0f b6 4e f4
mov ax, strict word 00001h ; b8 01 00
xor dx, dx ; 31 d2
- jcxz 085a4h ; e3 06
+ jcxz 08d43h ; e3 06
sal ax, 1 ; d1 e0
rcl dx, 1 ; d1 d2
- loop 0859eh ; e2 fa
+ loop 08d3dh ; e2 fa
mov bx, ax ; 89 c3
mov cx, dx ; 89 d1
mov dx, strict word 0000ch ; ba 0c 00
mov ax, si ; 89 f0
- call 07811h ; e8 61 f2
+ call 07f4bh ; e8 fc f1
test al, al ; 84 c0
- je short 0858ah ; 74 d6
- movzx bx, byte [bp-002h] ; 0f b6 5e fe
+ je short 08d29h ; 74 d6
+ movzx bx, byte [bp-00ch] ; 0f b6 5e f4
xor ax, ax ; 31 c0
mov dx, di ; 89 fa
- call 080c1h ; e8 02 fb
- dec byte [bp-004h] ; fe 4e fc
- jne short 0858ah ; 75 c6
+ call 0881dh ; e8 bf fa
+ dec byte [bp-00eh] ; fe 4e f2
+ jne short 08d29h ; 75 c6
xor ax, ax ; 31 c0
- leave ; c9
+ lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
pop si ; 5e
pop dx ; 5a
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
- or ax, word [di] ; 0b 05
- add AL, strict byte 003h ; 04 03
- add al, byte [bx+di] ; 02 01
- add byte [bx+di-0707ah], dh ; 00 b1 86 8f
- xchg byte [di-0647ah], dl ; 86 95 86 9b
- xchg byte [bx+di-0587ah], ah ; 86 a1 86 a7
- xchg byte [di-04e7ah], ch ; 86 ad 86 b1
- db 086h
-_ahci_init: ; 0xf85e4 LB 0xf9
+ db 00bh, 005h, 004h, 003h, 002h, 001h, 000h, 055h, 08eh, 033h, 08eh, 039h, 08eh, 03fh, 08eh, 045h
+ db 08eh, 04bh, 08eh, 051h, 08eh, 055h, 08eh
+_ahci_init: ; 0xf8d86 LB 0xfe
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 00006h, 000h ; c8 06 00 00
+ sub sp, strict byte 00006h ; 83 ec 06
mov ax, 00601h ; b8 01 06
mov dx, strict word 00001h ; ba 01 00
- call 08ad6h ; e8 e3 04
+ call 092a4h ; e8 0d 05
mov dx, ax ; 89 c2
cmp ax, strict word 0ffffh ; 3d ff ff
- je near 086d9h ; 0f 84 dd 00
+ je near 08e7dh ; 0f 84 dd 00
xor al, al ; 30 c0
shr ax, 008h ; c1 e8 08
- mov byte [bp-006h], al ; 88 46 fa
- mov byte [bp-004h], dl ; 88 56 fc
+ mov byte [bp-00ah], al ; 88 46 f6
+ mov byte [bp-008h], dl ; 88 56 f8
xor dh, dh ; 30 f6
xor ah, ah ; 30 e4
mov bx, strict word 00034h ; bb 34 00
- call 08afeh ; e8 ed 04
+ call 092cfh ; e8 1a 05
mov cl, al ; 88 c1
test cl, cl ; 84 c9
- je short 0863ah ; 74 23
+ je short 08ddeh ; 74 23
movzx bx, cl ; 0f b6 d9
- movzx di, byte [bp-004h] ; 0f b6 7e fc
- movzx si, byte [bp-006h] ; 0f b6 76 fa
+ movzx di, byte [bp-008h] ; 0f b6 7e f8
+ movzx si, byte [bp-00ah] ; 0f b6 76 f6
mov dx, di ; 89 fa
mov ax, si ; 89 f0
- call 08afeh ; e8 d5 04
+ call 092cfh ; e8 02 05
cmp AL, strict byte 012h ; 3c 12
- je short 0863ah ; 74 0d
+ je short 08ddeh ; 74 0d
mov al, cl ; 88 c8
db 0feh, 0c0h
; inc al ; fe c0
movzx bx, al ; 0f b6 d8
mov dx, di ; 89 fa
mov ax, si ; 89 f0
- jmp short 0860eh ; eb d4
+ jmp short 08db2h ; eb d4
test cl, cl ; 84 c9
- je near 086d9h ; 0f 84 99 00
+ je near 08e7dh ; 0f 84 99 00
add cl, 002h ; 80 c1 02
movzx bx, cl ; 0f b6 d9
- movzx di, byte [bp-004h] ; 0f b6 7e fc
- movzx si, byte [bp-006h] ; 0f b6 76 fa
+ movzx di, byte [bp-008h] ; 0f b6 7e f8
+ movzx si, byte [bp-00ah] ; 0f b6 76 f6
mov dx, di ; 89 fa
mov ax, si ; 89 f0
- call 08afeh ; e8 a9 04
+ call 092cfh ; e8 d6 04
cmp AL, strict byte 010h ; 3c 10
- jne near 086d9h ; 0f 85 7e 00
- mov byte [bp-002h], 000h ; c6 46 fe 00
+ jne near 08e7dh ; 0f 85 7e 00
+ mov byte [bp-006h], 000h ; c6 46 fa 00
mov al, cl ; 88 c8
add AL, strict byte 002h ; 04 02
movzx bx, al ; 0f b6 d8
mov dx, di ; 89 fa
mov ax, si ; 89 f0
- call 08b1fh ; e8 b2 04
+ call 092f3h ; e8 e2 04
mov dx, ax ; 89 c2
and ax, strict word 0000fh ; 25 0f 00
sub ax, strict word 00004h ; 2d 04 00
cmp ax, strict word 0000bh ; 3d 0b 00
- jnbe short 086b1h ; 77 37
+ jnbe short 08e55h ; 77 37
push CS ; 0e
pop ES ; 07
mov cx, strict word 00008h ; b9 08 00
- mov di, 085cdh ; bf cd 85
+ mov di, 08d6fh ; bf 6f 8d
repne scasb ; f2 ae
sal cx, 1 ; d1 e1
mov di, cx ; 89 cf
- mov ax, word [cs:di-07a2ch] ; 2e 8b 85 d4 85
+ mov ax, word [cs:di-0728ah] ; 2e 8b 85 76 8d
jmp ax ; ff e0
- mov byte [bp-002h], 010h ; c6 46 fe 10
- jmp short 086b1h ; eb 1c
- mov byte [bp-002h], 014h ; c6 46 fe 14
- jmp short 086b1h ; eb 16
- mov byte [bp-002h], 018h ; c6 46 fe 18
- jmp short 086b1h ; eb 10
- mov byte [bp-002h], 01ch ; c6 46 fe 1c
- jmp short 086b1h ; eb 0a
- mov byte [bp-002h], 020h ; c6 46 fe 20
- jmp short 086b1h ; eb 04
- mov byte [bp-002h], 024h ; c6 46 fe 24
+ mov byte [bp-006h], 010h ; c6 46 fa 10
+ jmp short 08e55h ; eb 1c
+ mov byte [bp-006h], 014h ; c6 46 fa 14
+ jmp short 08e55h ; eb 16
+ mov byte [bp-006h], 018h ; c6 46 fa 18
+ jmp short 08e55h ; eb 10
+ mov byte [bp-006h], 01ch ; c6 46 fa 1c
+ jmp short 08e55h ; eb 0a
+ mov byte [bp-006h], 020h ; c6 46 fa 20
+ jmp short 08e55h ; eb 04
+ mov byte [bp-006h], 024h ; c6 46 fa 24
mov si, dx ; 89 d6
shr si, 004h ; c1 ee 04
sal si, 002h ; c1 e6 02
- mov al, byte [bp-002h] ; 8a 46 fe
+ mov al, byte [bp-006h] ; 8a 46 fa
test al, al ; 84 c0
- je short 086d9h ; 74 19
+ je short 08e7dh ; 74 19
movzx bx, al ; 0f b6 d8
- movzx dx, byte [bp-004h] ; 0f b6 56 fc
- movzx ax, byte [bp-006h] ; 0f b6 46 fa
- call 08b3eh ; e8 70 04
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6
+ call 09315h ; e8 a3 04
test AL, strict byte 001h ; a8 01
- je short 086d9h ; 74 07
+ je short 08e7dh ; 74 07
and AL, strict byte 0f0h ; 24 f0
add ax, si ; 01 f0
- call 084c4h ; e8 eb fd
- leave ; c9
+ call 08c61h ; e8 e4 fd
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-apm_out_str_: ; 0xf86dd LB 0x36
- push bx ; 53
+apm_out_str_: ; 0xf8e84 LB 0x39
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
mov bx, ax ; 89 c3
cmp byte [bx], 000h ; 80 3f 00
- je short 086f2h ; 74 0a
+ je short 08e99h ; 74 0a
mov al, byte [bx] ; 8a 07
out DX, AL ; ee
inc bx ; 43
mov al, byte [bx] ; 8a 07
db 00ah, 0c0h
; or al, al ; 0a c0
- jne short 086eah ; 75 f8
- pop bp ; 5d
+ jne short 08e91h ; 75 f8
+ lea sp, [bp-002h] ; 8d 66 fe
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
- xchg word [ss:di], ax ; 36 87 05
- mov byte [bx+si-079h], cl ; 88 48 87
- arpl word [bx-077fbh], ax ; 63 87 05 88
- mov es, [bx-077fbh] ; 8e 87 05 88
- xchg bx, ax ; 93
- xchg dx, bx ; 87 da
- xchg dx, bx ; 87 da
- xchg dx, bx ; 87 da
- xchg bp, dx ; 87 d5
- xchg dx, bx ; 87 da
- xchg dx, bx ; 87 da
- xchg bp, cx ; 87 cd
- db 087h
-_apm_function: ; 0xf8713 LB 0xf5
- push si ; 56
+ loopne 08e2fh ; e0 8e
+ lodsb ; ac
+ db 08fh, 0f2h
+ ; pop dx ; 8f f2
+ mov cs, [di] ; 8e 0d
+ db 08fh, 0ach, 08fh, 038h
+ ; pop word [si+0388fh] ; 8f ac 8f 38
+ db 08fh, 0ach, 08fh, 03dh
+ ; pop word [si+03d8fh] ; 8f ac 8f 3d
+ pop word [bx+di-07e71h] ; 8f 81 8f 81
+ pop word [bx+di+07c8fh] ; 8f 81 8f 7c
+ pop word [bx+di-07e71h] ; 8f 81 8f 81
+ db 08fh, 075h, 08fh
+ ; pop word [di-071h] ; 8f 75 8f
+_apm_function: ; 0xf8ebd LB 0xf5
push bp ; 55
mov bp, sp ; 89 e5
- and byte [bp+01ah], 0feh ; 80 66 1a fe
- mov ax, word [bp+014h] ; 8b 46 14
+ push si ; 56
+ and byte [bp+018h], 0feh ; 80 66 18 fe
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
cmp ax, strict word 0000eh ; 3d 0e 00
- jnbe near 087dah ; 0f 87 b3 00
+ jnbe near 08f81h ; 0f 87 b0 00
mov bx, ax ; 89 c3
add bx, ax ; 01 c3
- mov dx, word [bp+01ah] ; 8b 56 1a
+ mov dx, word [bp+018h] ; 8b 56 18
or dl, 001h ; 80 ca 01
- jmp word [cs:bx-0790bh] ; 2e ff a7 f5 86
- mov word [bp+014h], 00102h ; c7 46 14 02 01
- mov word [bp+00eh], 0504dh ; c7 46 0e 4d 50
- mov word [bp+012h], strict word 00003h ; c7 46 12 03 00
- pop bp ; 5d
- pop si ; 5e
- retn ; c3
- mov word [bp+014h], 0f000h ; c7 46 14 00 f0
- mov word [bp+00eh], 08d24h ; c7 46 0e 24 8d
+ jmp word [cs:bx-07161h] ; 2e ff a7 9f 8e
+ mov word [bp+012h], 00102h ; c7 46 12 02 01
+ mov word [bp+00ch], 0504dh ; c7 46 0c 4d 50
+ mov word [bp+010h], strict word 00003h ; c7 46 10 03 00
+ jmp near 08fach ; e9 ba 00
mov word [bp+012h], 0f000h ; c7 46 12 00 f0
+ mov word [bp+00ch], 09504h ; c7 46 0c 04 95
+ mov word [bp+010h], 0f000h ; c7 46 10 00 f0
mov ax, strict word 0fff0h ; b8 f0 ff
- mov word [bp+008h], ax ; 89 46 08
mov word [bp+006h], ax ; 89 46 06
- pop bp ; 5d
- pop si ; 5e
- retn ; c3
- mov word [bp+014h], 0f000h ; c7 46 14 00 f0
- mov word [bp+00eh], 0da40h ; c7 46 0e 40 da
+ mov word [bp+004h], ax ; 89 46 04
+ jmp near 08fach ; e9 9f 00
+ mov word [bp+012h], 0f000h ; c7 46 12 00 f0
+ mov word [bp+00ch], 0da40h ; c7 46 0c 40 da
mov ax, 0f000h ; b8 00 f0
- mov word [bp+012h], ax ; 89 46 12
mov word [bp+010h], ax ; 89 46 10
+ mov word [bp+00eh], ax ; 89 46 0e
mov ax, strict word 0fff0h ; b8 f0 ff
- mov word [bp+008h], ax ; 89 46 08
mov word [bp+006h], ax ; 89 46 06
+ mov word [bp+004h], ax ; 89 46 04
xor bx, bx ; 31 db
sal ebx, 010h ; 66 c1 e3 10
mov si, ax ; 89 c6
sal esi, 010h ; 66 c1 e6 10
- pop bp ; 5d
- pop si ; 5e
- retn ; c3
+ jmp near 08fach ; e9 74 00
sti ; fb
hlt ; f4
- pop bp ; 5d
- pop si ; 5e
- retn ; c3
- cmp word [bp+012h], strict byte 00003h ; 83 7e 12 03
- je short 087b9h ; 74 20
- cmp word [bp+012h], strict byte 00002h ; 83 7e 12 02
- je short 087b1h ; 74 12
- cmp word [bp+012h], strict byte 00001h ; 83 7e 12 01
- jne short 087c1h ; 75 1c
+ jmp near 08fach ; e9 6f 00
+ cmp word [bp+010h], strict byte 00003h ; 83 7e 10 03
+ je short 08f62h ; 74 1f
+ cmp word [bp+010h], strict byte 00002h ; 83 7e 10 02
+ je short 08f5ah ; 74 11
+ cmp word [bp+010h], strict byte 00001h ; 83 7e 10 01
+ jne short 08f6ah ; 75 1b
mov dx, 08900h ; ba 00 89
- mov ax, 00c46h ; b8 46 0c
- call 086ddh ; e8 2f ff
- pop bp ; 5d
- pop si ; 5e
- retn ; c3
+ mov ax, 00d2ah ; b8 2a 0d
+ call 08e84h ; e8 2c ff
+ jmp short 08fach ; eb 52
mov dx, 08900h ; ba 00 89
- mov ax, 00c4eh ; b8 4e 0c
- jmp short 087abh ; eb f2
+ mov ax, 00d32h ; b8 32 0d
+ jmp short 08f55h ; eb f3
mov dx, 08900h ; ba 00 89
- mov ax, 00c56h ; b8 56 0c
- jmp short 087abh ; eb ea
+ mov ax, 00d3ah ; b8 3a 0d
+ jmp short 08f55h ; eb eb
or ah, 00ah ; 80 cc 0a
- mov word [bp+014h], ax ; 89 46 14
- mov word [bp+01ah], dx ; 89 56 1a
- pop bp ; 5d
- pop si ; 5e
- retn ; c3
- mov word [bp+014h], 00102h ; c7 46 14 02 01
- pop bp ; 5d
- pop si ; 5e
- retn ; c3
+ mov word [bp+012h], ax ; 89 46 12
+ mov word [bp+018h], dx ; 89 56 18
+ jmp short 08fach ; eb 37
+ mov word [bp+012h], 00102h ; c7 46 12 02 01
+ jmp short 08fach ; eb 30
or ah, 080h ; 80 cc 80
- jmp short 087c4h ; eb ea
- mov bx, 00cd6h ; bb d6 0c
+ jmp short 08f6dh ; eb ec
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 c9 90
- push word [bp+00eh] ; ff 76 0e
- push word [bp+014h] ; ff 76 14
- push 00c5fh ; 68 5f 0c
+ call 018e1h ; e8 55 89
+ push word [bp+00ch] ; ff 76 0c
+ push word [bp+012h] ; ff 76 12
+ push 00d43h ; 68 43 0d
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 f6 90
+ call 01922h ; e8 88 89
add sp, strict byte 00008h ; 83 c4 08
- mov ax, word [bp+014h] ; 8b 46 14
+ mov ax, word [bp+012h] ; 8b 46 12
xor ah, ah ; 30 e4
or ah, 00ch ; 80 cc 0c
- mov word [bp+014h], ax ; 89 46 14
- or byte [bp+01ah], 001h ; 80 4e 1a 01
- pop bp ; 5d
+ mov word [bp+012h], ax ; 89 46 12
+ or byte [bp+018h], 001h ; 80 4e 18 01
+ lea sp, [bp-002h] ; 8d 66 fe
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-pci16_select_reg_: ; 0xf8808 LB 0x21
- push bx ; 53
+pci16_select_reg_: ; 0xf8fb2 LB 0x24
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
and dl, 0fch ; 80 e2 fc
mov bx, dx ; 89 d3
mov dx, 00cf8h ; ba f8 0c
@@ -12499,248 +13384,259 @@ pci16_select_reg_: ; 0xf8808 LB 0x21
db 08ah, 0c3h
; mov al, bl ; 8a c3
out DX, eax ; 66 ef
- pop bp ; 5d
+ lea sp, [bp-002h] ; 8d 66 fe
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-pci16_find_device_: ; 0xf8829 LB 0xf2
+pci16_find_device_: ; 0xf8fd6 LB 0xf7
+ push bp ; 55
+ mov bp, sp ; 89 e5
push si ; 56
push di ; 57
- enter 0000ch, 000h ; c8 0c 00 00
+ sub sp, strict byte 0000ch ; 83 ec 0c
push ax ; 50
push dx ; 52
mov si, bx ; 89 de
mov di, cx ; 89 cf
test cx, cx ; 85 c9
xor bx, bx ; 31 db
- mov byte [bp-004h], 000h ; c6 46 fc 00
+ mov byte [bp-008h], 000h ; c6 46 f8 00
test bl, 007h ; f6 c3 07
- jne short 0886fh ; 75 2d
+ jne short 0901eh ; 75 2d
mov dx, strict word 0000eh ; ba 0e 00
mov ax, bx ; 89 d8
- call 08808h ; e8 be ff
+ call 08fb2h ; e8 b9 ff
mov dx, 00cfeh ; ba fe 0c
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- mov byte [bp-002h], al ; 88 46 fe
+ mov byte [bp-006h], al ; 88 46 fa
cmp AL, strict byte 0ffh ; 3c ff
- jne short 0885dh ; 75 06
+ jne short 0900ch ; 75 06
add bx, strict byte 00008h ; 83 c3 08
- jmp near 088f0h ; e9 93 00
- test byte [bp-002h], 080h ; f6 46 fe 80
- je short 0886ah ; 74 07
- mov word [bp-006h], strict word 00001h ; c7 46 fa 01 00
- jmp short 0886fh ; eb 05
- mov word [bp-006h], strict word 00008h ; c7 46 fa 08 00
- mov al, byte [bp-002h] ; 8a 46 fe
+ jmp near 0909fh ; e9 93 00
+ test byte [bp-006h], 080h ; f6 46 fa 80
+ je short 09019h ; 74 07
+ mov word [bp-00ah], strict word 00001h ; c7 46 f6 01 00
+ jmp short 0901eh ; eb 05
+ mov word [bp-00ah], strict word 00008h ; c7 46 f6 08 00
+ mov al, byte [bp-006h] ; 8a 46 fa
and AL, strict byte 007h ; 24 07
cmp AL, strict byte 001h ; 3c 01
- jne short 08897h ; 75 1f
+ jne short 09046h ; 75 1f
mov ax, bx ; 89 d8
shr ax, 008h ; c1 e8 08
test ax, ax ; 85 c0
- jne short 08897h ; 75 16
+ jne short 09046h ; 75 16
mov dx, strict word 0001ah ; ba 1a 00
mov ax, bx ; 89 d8
- call 08808h ; e8 7f ff
+ call 08fb2h ; e8 7a ff
mov dx, 00cfeh ; ba fe 0c
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
- cmp al, byte [bp-004h] ; 3a 46 fc
- jbe short 08897h ; 76 03
- mov byte [bp-004h], al ; 88 46 fc
+ cmp al, byte [bp-008h] ; 3a 46 f8
+ jbe short 09046h ; 76 03
+ mov byte [bp-008h], al ; 88 46 f8
test di, di ; 85 ff
- je short 088a0h ; 74 05
+ je short 0904fh ; 74 05
mov dx, strict word 00008h ; ba 08 00
- jmp short 088a2h ; eb 02
+ jmp short 09051h ; eb 02
xor dx, dx ; 31 d2
mov ax, bx ; 89 d8
- call 08808h ; e8 61 ff
+ call 08fb2h ; e8 5c ff
mov dx, 00cfch ; ba fc 0c
in eax, DX ; 66 ed
db 08bh, 0d0h
; mov dx, ax ; 8b d0
shr eax, 010h ; 66 c1 e8 10
xchg dx, ax ; 92
- mov word [bp-00ah], ax ; 89 46 f6
- mov word [bp-008h], dx ; 89 56 f8
- mov word [bp-00ch], strict word 00000h ; c7 46 f4 00 00
+ mov word [bp-00eh], ax ; 89 46 f2
+ mov word [bp-00ch], dx ; 89 56 f4
+ mov word [bp-010h], strict word 00000h ; c7 46 f0 00 00
test di, di ; 85 ff
- je short 088d1h ; 74 0f
+ je short 09080h ; 74 0f
mov cx, strict word 00008h ; b9 08 00
shr dx, 1 ; d1 ea
rcr ax, 1 ; d1 d8
- loop 088c5h ; e2 fa
- mov word [bp-00ah], ax ; 89 46 f6
- mov word [bp-008h], dx ; 89 56 f8
- mov ax, word [bp-008h] ; 8b 46 f8
- cmp ax, word [bp-010h] ; 3b 46 f0
- jne short 088e1h ; 75 08
- mov ax, word [bp-00ah] ; 8b 46 f6
- cmp ax, word [bp-00eh] ; 3b 46 f2
- je short 088e7h ; 74 06
- cmp word [bp-00ch], strict byte 00000h ; 83 7e f4 00
- je short 088edh ; 74 06
+ loop 09074h ; e2 fa
+ mov word [bp-00eh], ax ; 89 46 f2
+ mov word [bp-00ch], dx ; 89 56 f4
+ mov ax, word [bp-00ch] ; 8b 46 f4
+ cmp ax, word [bp-014h] ; 3b 46 ec
+ jne short 09090h ; 75 08
+ mov ax, word [bp-00eh] ; 8b 46 f2
+ cmp ax, word [bp-012h] ; 3b 46 ee
+ je short 09096h ; 74 06
+ cmp word [bp-010h], strict byte 00000h ; 83 7e f0 00
+ je short 0909ch ; 74 06
dec si ; 4e
cmp si, strict byte 0ffffh ; 83 fe ff
- je short 088ffh ; 74 12
- add bx, word [bp-006h] ; 03 5e fa
+ je short 090aeh ; 74 12
+ add bx, word [bp-00ah] ; 03 5e f6
mov dx, bx ; 89 da
shr dx, 008h ; c1 ea 08
- movzx ax, byte [bp-004h] ; 0f b6 46 fc
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8
cmp dx, ax ; 39 c2
- jbe near 0883dh ; 0f 86 3e ff
+ jbe near 08fech ; 0f 86 3e ff
cmp si, strict byte 0ffffh ; 83 fe ff
- jne short 08908h ; 75 04
+ jne short 090b7h ; 75 04
mov ax, bx ; 89 d8
- jmp short 0890bh ; eb 03
+ jmp short 090bah ; eb 03
mov ax, strict word 0ffffh ; b8 ff ff
- leave ; c9
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
- sti ; fb
- mov word [di], dx ; 89 15
- mov ch, byte [bx+si] ; 8a 28
- mov bh, byte [di] ; 8a 3d
- mov dl, byte [bx+si-076h] ; 8a 50 8a
- db 062h
- db 08ah
-_pci16_function: ; 0xf891b LB 0x1bb
- push si ; 56
- push di ; 57
+ scasw ; af
+ xchg cx, ax ; 91
+ leave ; c9
+ xchg cx, ax ; 91
+ fcom qword [bx+di-06e0fh] ; dc 91 f1 91
+ add AL, strict byte 092h ; 04 92
+ pop SS ; 17
+ xchg dx, ax ; 92
+_pci16_function: ; 0xf90cd LB 0x1d7
push bp ; 55
mov bp, sp ; 89 e5
- and word [bp+024h], 000ffh ; 81 66 24 ff 00
- and word [bp+030h], strict byte 0fffeh ; 83 66 30 fe
- mov bx, word [bp+024h] ; 8b 5e 24
+ push si ; 56
+ push di ; 57
+ push ax ; 50
+ push ax ; 50
+ and word [bp+020h], 000ffh ; 81 66 20 ff 00
+ and word [bp+02ch], strict byte 0fffeh ; 83 66 2c fe
+ mov bx, word [bp+020h] ; 8b 5e 20
xor bh, bh ; 30 ff
- mov ax, word [bp+024h] ; 8b 46 24
+ mov ax, word [bp+020h] ; 8b 46 20
xor ah, ah ; 30 e4
cmp bx, strict byte 00003h ; 83 fb 03
- jc short 08952h ; 72 1a
- jbe short 089aah ; 76 70
+ jc short 09106h ; 72 1a
+ jbe short 0915eh ; 76 70
cmp bx, strict byte 0000eh ; 83 fb 0e
- je near 08a76h ; 0f 84 35 01
+ je near 0922bh ; 0f 84 36 01
cmp bx, strict byte 00008h ; 83 fb 08
- jc near 08aa5h ; 0f 82 5d 01
+ jc near 09270h ; 0f 82 74 01
cmp bx, strict byte 0000dh ; 83 fb 0d
- jbe near 089cfh ; 0f 86 80 00
- jmp near 08aa5h ; e9 53 01
+ jbe near 09183h ; 0f 86 80 00
+ jmp near 09270h ; e9 6a 01
cmp bx, strict byte 00002h ; 83 fb 02
- je short 0897ah ; 74 23
+ je short 0912eh ; 74 23
cmp bx, strict byte 00001h ; 83 fb 01
- jne near 08aa5h ; 0f 85 47 01
- mov word [bp+024h], strict word 00001h ; c7 46 24 01 00
- mov word [bp+018h], 00210h ; c7 46 18 10 02
- mov word [bp+020h], strict word 00000h ; c7 46 20 00 00
- mov word [bp+01ch], 04350h ; c7 46 1c 50 43
- mov word [bp+01eh], 02049h ; c7 46 1e 49 20
- jmp near 08ad2h ; e9 58 01
- cmp word [bp+01ch], strict byte 0ffffh ; 83 7e 1c ff
- jne short 08986h ; 75 06
+ jne near 09270h ; 0f 85 5e 01
+ mov word [bp+020h], strict word 00001h ; c7 46 20 01 00
+ mov word [bp+014h], 00210h ; c7 46 14 10 02
+ mov word [bp+01ch], strict word 00000h ; c7 46 1c 00 00
+ mov word [bp+018h], 04350h ; c7 46 18 50 43
+ mov word [bp+01ah], 02049h ; c7 46 1a 49 20
+ jmp near 0929dh ; e9 6f 01
+ cmp word [bp+018h], strict byte 0ffffh ; 83 7e 18 ff
+ jne short 0913ah ; 75 06
or ah, 083h ; 80 cc 83
- jmp near 08acbh ; e9 45 01
- mov bx, word [bp+00ch] ; 8b 5e 0c
- mov dx, word [bp+020h] ; 8b 56 20
- mov ax, word [bp+01ch] ; 8b 46 1c
+ jmp near 09296h ; e9 5c 01
+ mov bx, word [bp+008h] ; 8b 5e 08
+ mov dx, word [bp+01ch] ; 8b 56 1c
+ mov ax, word [bp+018h] ; 8b 46 18
xor cx, cx ; 31 c9
- call 08829h ; e8 95 fe
+ call 08fd6h ; e8 8e fe
cmp ax, strict word 0ffffh ; 3d ff ff
- jne short 089a4h ; 75 0b
- mov ax, word [bp+024h] ; 8b 46 24
+ jne short 09158h ; 75 0b
+ mov ax, word [bp+020h] ; 8b 46 20
xor ah, ah ; 30 e4
or ah, 086h ; 80 cc 86
- jmp near 08acbh ; e9 27 01
- mov word [bp+018h], ax ; 89 46 18
- jmp near 08ad2h ; e9 28 01
- mov bx, word [bp+00ch] ; 8b 5e 0c
- mov ax, word [bp+020h] ; 8b 46 20
- mov dx, word [bp+022h] ; 8b 56 22
+ jmp near 09296h ; e9 3e 01
+ mov word [bp+014h], ax ; 89 46 14
+ jmp near 0929dh ; e9 3f 01
+ mov bx, word [bp+008h] ; 8b 5e 08
+ mov ax, word [bp+01ch] ; 8b 46 1c
+ mov dx, word [bp+01eh] ; 8b 56 1e
mov cx, strict word 00001h ; b9 01 00
- call 08829h ; e8 70 fe
+ call 08fd6h ; e8 69 fe
cmp ax, strict word 0ffffh ; 3d ff ff
- jne short 089c9h ; 75 0b
- mov ax, word [bp+024h] ; 8b 46 24
+ jne short 0917dh ; 75 0b
+ mov ax, word [bp+020h] ; 8b 46 20
xor ah, ah ; 30 e4
or ah, 086h ; 80 cc 86
- jmp near 08acbh ; e9 02 01
- mov word [bp+018h], ax ; 89 46 18
- jmp near 08ad2h ; e9 03 01
- cmp word [bp+008h], 00100h ; 81 7e 08 00 01
- jc short 089dch ; 72 06
+ jmp near 09296h ; e9 19 01
+ mov word [bp+014h], ax ; 89 46 14
+ jmp near 0929dh ; e9 1a 01
+ cmp word [bp+004h], 00100h ; 81 7e 04 00 01
+ jc short 09190h ; 72 06
or ah, 087h ; 80 cc 87
- jmp near 08acbh ; e9 ef 00
- mov dx, word [bp+008h] ; 8b 56 08
- mov ax, word [bp+018h] ; 8b 46 18
- call 08808h ; e8 23 fe
- mov bx, word [bp+024h] ; 8b 5e 24
+ jmp near 09296h ; e9 06 01
+ mov dx, word [bp+004h] ; 8b 56 04
+ mov ax, word [bp+014h] ; 8b 46 14
+ call 08fb2h ; e8 19 fe
+ mov bx, word [bp+020h] ; 8b 5e 20
xor bh, bh ; 30 ff
sub bx, strict byte 00008h ; 83 eb 08
cmp bx, strict byte 00005h ; 83 fb 05
- jnbe near 08ad2h ; 0f 87 de 00
+ jnbe near 0929dh ; 0f 87 f5 00
add bx, bx ; 01 db
- jmp word [cs:bx-076f1h] ; 2e ff a7 0f 89
- mov bx, word [bp+020h] ; 8b 5e 20
+ jmp word [cs:bx-06f3fh] ; 2e ff a7 c1 90
+ mov bx, word [bp+01ch] ; 8b 5e 1c
xor bl, bl ; 30 db
- mov dx, word [bp+008h] ; 8b 56 08
+ mov dx, word [bp+004h] ; 8b 56 04
and dx, strict byte 00003h ; 83 e2 03
add dx, 00cfch ; 81 c2 fc 0c
in AL, DX ; ec
db 02ah, 0e4h
; sub ah, ah ; 2a e4
or bx, ax ; 09 c3
- mov word [bp+020h], bx ; 89 5e 20
- jmp near 08ad2h ; e9 bd 00
- mov dx, word [bp+008h] ; 8b 56 08
+ mov word [bp+01ch], bx ; 89 5e 1c
+ jmp near 0929dh ; e9 d4 00
+ mov dx, word [bp+004h] ; 8b 56 04
xor dh, dh ; 30 f6
and dl, 002h ; 80 e2 02
add dx, 00cfch ; 81 c2 fc 0c
in ax, DX ; ed
- mov word [bp+020h], ax ; 89 46 20
- jmp near 08ad2h ; e9 aa 00
+ mov word [bp+01ch], ax ; 89 46 1c
+ jmp near 0929dh ; e9 c1 00
mov dx, 00cfch ; ba fc 0c
in eax, DX ; 66 ed
db 08bh, 0d0h
; mov dx, ax ; 8b d0
shr eax, 010h ; 66 c1 e8 10
xchg dx, ax ; 92
- mov word [bp+020h], ax ; 89 46 20
- mov word [bp+022h], dx ; 89 56 22
- jmp near 08ad2h ; e9 95 00
- mov ax, word [bp+020h] ; 8b 46 20
- mov dx, word [bp+008h] ; 8b 56 08
+ mov word [bp+01ch], ax ; 89 46 1c
+ mov word [bp+01eh], dx ; 89 56 1e
+ jmp near 0929dh ; e9 ac 00
+ mov ax, word [bp+01ch] ; 8b 46 1c
+ mov dx, word [bp+004h] ; 8b 56 04
xor dh, dh ; 30 f6
and dl, 003h ; 80 e2 03
add dx, 00cfch ; 81 c2 fc 0c
out DX, AL ; ee
- jmp near 08ad2h ; e9 82 00
- mov ax, word [bp+020h] ; 8b 46 20
- mov dx, word [bp+008h] ; 8b 56 08
+ jmp near 0929dh ; e9 99 00
+ mov ax, word [bp+01ch] ; 8b 46 1c
+ mov dx, word [bp+004h] ; 8b 56 04
xor dh, dh ; 30 f6
and dl, 002h ; 80 e2 02
add dx, 00cfch ; 81 c2 fc 0c
out DX, ax ; ef
- jmp short 08ad2h ; eb 70
- mov ax, word [bp+020h] ; 8b 46 20
- mov cx, word [bp+022h] ; 8b 4e 22
+ jmp near 0929dh ; e9 86 00
+ mov ax, word [bp+01ch] ; 8b 46 1c
+ mov cx, word [bp+01eh] ; 8b 4e 1e
mov dx, 00cfch ; ba fc 0c
xchg cx, ax ; 91
sal eax, 010h ; 66 c1 e0 10
db 08bh, 0c1h
; mov ax, cx ; 8b c1
out DX, eax ; 66 ef
- jmp short 08ad2h ; eb 5c
- mov bx, word [bp+008h] ; 8b 5e 08
- mov es, [bp+028h] ; 8e 46 28
- mov cx, word [word 00000h] ; 8b 0e 00 00
+ jmp short 0929dh ; eb 72
+ mov bx, word [bp+004h] ; 8b 5e 04
+ mov es, [bp+026h] ; 8e 46 26
+ mov word [bp-008h], bx ; 89 5e f8
+ mov [bp-006h], es ; 8c 46 fa
+ mov cx, word [0f4a0h] ; 8b 0e a0 f4
cmp cx, word [es:bx] ; 26 3b 0f
- jbe short 08a8fh ; 76 0a
- mov ax, word [bp+024h] ; 8b 46 24
+ jbe short 09251h ; 76 11
+ mov ax, word [bp+020h] ; 8b 46 20
xor ah, ah ; 30 e4
or ah, 089h ; 80 cc 89
- jmp short 08acbh ; eb 3c
+ mov word [bp+020h], ax ; 89 46 20
+ or word [bp+02ch], strict byte 00001h ; 83 4e 2c 01
+ jmp short 09265h ; eb 14
les di, [es:bx+002h] ; 26 c4 7f 02
mov si, 0f2c0h ; be c0 f2
mov dx, ds ; 8c da
@@ -12748,35 +13644,39 @@ _pci16_function: ; 0xf891b LB 0x1bb
mov ds, dx ; 8e da
rep movsb ; f3 a4
pop DS ; 1f
- mov word [bp+018h], 00a00h ; c7 46 18 00 0a
- jmp short 08ad2h ; eb 2d
- mov bx, 00cd6h ; bb d6 0c
+ mov word [bp+014h], 00a00h ; c7 46 14 00 0a
+ mov ax, word [0f4a0h] ; a1 a0 f4
+ les bx, [bp-008h] ; c4 5e f8
+ mov word [es:bx], ax ; 26 89 07
+ jmp short 0929dh ; eb 2d
+ mov bx, 00dbah ; bb ba 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
- call 018aeh ; e8 fe 8d
- mov ax, word [bp+018h] ; 8b 46 18
+ call 018e1h ; e8 66 86
+ mov ax, word [bp+014h] ; 8b 46 14
push ax ; 50
- mov ax, word [bp+024h] ; 8b 46 24
+ mov ax, word [bp+020h] ; 8b 46 20
push ax ; 50
- push 00c92h ; 68 92 0c
+ push 00d76h ; 68 76 0d
push strict byte 00004h ; 6a 04
- call 018e9h ; e8 29 8e
+ call 01922h ; e8 97 86
add sp, strict byte 00008h ; 83 c4 08
- mov ax, word [bp+024h] ; 8b 46 24
+ mov ax, word [bp+020h] ; 8b 46 20
xor ah, ah ; 30 e4
or ah, 081h ; 80 cc 81
- mov word [bp+024h], ax ; 89 46 24
- or word [bp+030h], strict byte 00001h ; 83 4e 30 01
- pop bp ; 5d
+ mov word [bp+020h], ax ; 89 46 20
+ or word [bp+02ch], strict byte 00001h ; 83 4e 2c 01
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn ; c3
-pci_find_classcode_: ; 0xf8ad6 LB 0x28
+pci_find_classcode_: ; 0xf92a4 LB 0x2b
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push cx ; 51
push si ; 56
- push bp ; 55
- mov bp, sp ; 89 e5
mov cx, dx ; 89 d1
xor si, si ; 31 f6
mov dx, ax ; 89 c2
@@ -12786,19 +13686,20 @@ pci_find_classcode_: ; 0xf8ad6 LB 0x28
; mov cx, dx ; 8b ca
int 01ah ; cd 1a
cmp ah, 000h ; 80 fc 00
- je near 08af7h ; 0f 84 03 00
+ je near 092c5h ; 0f 84 03 00
mov bx, strict word 0ffffh ; bb ff ff
mov ax, bx ; 89 d8
- pop bp ; 5d
+ lea sp, [bp-006h] ; 8d 66 fa
pop si ; 5e
pop cx ; 59
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-pci_read_config_byte_: ; 0xf8afe LB 0x21
- push cx ; 51
- push di ; 57
+pci_read_config_byte_: ; 0xf92cf LB 0x24
push bp ; 55
mov bp, sp ; 89 e5
+ push cx ; 51
+ push di ; 57
movzx di, bl ; 0f b6 fb
movzx bx, al ; 0f b6 d8
sal bx, 008h ; c1 e3 08
@@ -12808,15 +13709,16 @@ pci_read_config_byte_: ; 0xf8afe LB 0x21
int 01ah ; cd 1a
movzx ax, cl ; 0f b6 c1
xor dx, dx ; 31 d2
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-pci_read_config_word_: ; 0xf8b1f LB 0x1f
- push cx ; 51
- push di ; 57
+pci_read_config_word_: ; 0xf92f3 LB 0x22
push bp ; 55
mov bp, sp ; 89 e5
+ push cx ; 51
+ push di ; 57
movzx di, bl ; 0f b6 fb
xor ah, ah ; 30 e4
sal ax, 008h ; c1 e0 08
@@ -12826,15 +13728,16 @@ pci_read_config_word_: ; 0xf8b1f LB 0x1f
int 01ah ; cd 1a
mov ax, cx ; 89 c8
xor dx, dx ; 31 d2
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-pci_read_config_dword_: ; 0xf8b3e LB 0x24
- push cx ; 51
- push di ; 57
+pci_read_config_dword_: ; 0xf9315 LB 0x27
push bp ; 55
mov bp, sp ; 89 e5
+ push cx ; 51
+ push di ; 57
movzx di, bl ; 0f b6 fb
movzx bx, al ; 0f b6 d8
sal bx, 008h ; c1 e3 08
@@ -12846,11 +13749,12 @@ pci_read_config_dword_: ; 0xf8b3e LB 0x24
; mov ax, cx ; 8b c1
shr ecx, 010h ; 66 c1 e9 10
mov dx, cx ; 89 ca
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-vds_is_present_: ; 0xf8b62 LB 0x1d
+vds_is_present_: ; 0xf933c LB 0x1d
push bx ; 53
push bp ; 55
mov bp, sp ; 89 e5
@@ -12858,7 +13762,7 @@ vds_is_present_: ; 0xf8b62 LB 0x1d
mov ax, strict word 00040h ; b8 40 00
mov es, ax ; 8e c0
test byte [es:bx], 020h ; 26 f6 07 20
- je short 08b7ah ; 74 06
+ je short 09354h ; 74 06
mov ax, strict word 00001h ; b8 01 00
pop bp ; 5d
pop bx ; 5b
@@ -12867,7 +13771,7 @@ vds_is_present_: ; 0xf8b62 LB 0x1d
pop bp ; 5d
pop bx ; 5b
retn ; c3
-vds_real_to_lin_: ; 0xf8b7f LB 0x1e
+vds_real_to_lin_: ; 0xf9359 LB 0x1e
push bx ; 53
push cx ; 51
push bp ; 55
@@ -12878,7 +13782,7 @@ vds_real_to_lin_: ; 0xf8b7f LB 0x1e
mov cx, strict word 00004h ; b9 04 00
sal ax, 1 ; d1 e0
rcl dx, 1 ; d1 d2
- loop 08b8dh ; e2 fa
+ loop 09367h ; e2 fa
xor cx, cx ; 31 c9
add ax, bx ; 01 d8
adc dx, cx ; 11 ca
@@ -12886,77 +13790,79 @@ vds_real_to_lin_: ; 0xf8b7f LB 0x1e
pop cx ; 59
pop bx ; 5b
retn ; c3
-vds_build_sg_list_: ; 0xf8b9d LB 0x76
- push si ; 56
- push di ; 57
+vds_build_sg_list_: ; 0xf9377 LB 0x79
push bp ; 55
mov bp, sp ; 89 e5
+ push si ; 56
+ push di ; 57
mov di, ax ; 89 c7
mov si, dx ; 89 d6
mov ax, bx ; 89 d8
mov dx, cx ; 89 ca
- mov bx, word [bp+008h] ; 8b 5e 08
+ mov bx, word [bp+004h] ; 8b 5e 04
mov es, si ; 8e c6
mov word [es:di], bx ; 26 89 1d
- mov bx, word [bp+00ah] ; 8b 5e 0a
+ mov bx, word [bp+006h] ; 8b 5e 06
mov word [es:di+002h], bx ; 26 89 5d 02
- call 08b7fh ; e8 c3 ff
+ call 09359h ; e8 c3 ff
mov es, si ; 8e c6
mov word [es:di+004h], ax ; 26 89 45 04
mov word [es:di+006h], dx ; 26 89 55 06
mov word [es:di+008h], strict word 00000h ; 26 c7 45 08 00 00
- call 08b62h ; e8 93 ff
+ call 0933ch ; e8 93 ff
test ax, ax ; 85 c0
- je short 08be6h ; 74 13
+ je short 093c0h ; 74 13
mov es, si ; 8e c6
mov ax, 08105h ; b8 05 81
mov dx, strict word 00000h ; ba 00 00
int 04bh ; cd 4b
- jc near 08be3h ; 0f 82 02 00
+ jc near 093bdh ; 0f 82 02 00
db 032h, 0c0h
; xor al, al ; 32 c0
cbw ; 98
- jmp short 08c0dh ; eb 27
+ jmp short 093e7h ; eb 27
mov es, si ; 8e c6
mov word [es:di+00eh], strict word 00001h ; 26 c7 45 0e 01 00
mov dx, word [es:di+004h] ; 26 8b 55 04
mov ax, word [es:di+006h] ; 26 8b 45 06
mov word [es:di+010h], dx ; 26 89 55 10
mov word [es:di+012h], ax ; 26 89 45 12
- mov ax, word [bp+008h] ; 8b 46 08
+ mov ax, word [bp+004h] ; 8b 46 04
mov word [es:di+014h], ax ; 26 89 45 14
mov ax, bx ; 89 d8
mov word [es:di+016h], bx ; 26 89 5d 16
xor ax, bx ; 31 d8
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop si ; 5e
+ pop bp ; 5d
retn 00004h ; c2 04 00
-vds_free_sg_list_: ; 0xf8c13 LB 0x2d
- push bx ; 53
- push di ; 57
+vds_free_sg_list_: ; 0xf93f0 LB 0x30
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
+ push di ; 57
mov bx, ax ; 89 c3
- call 08b62h ; e8 45 ff
+ call 0933ch ; e8 42 ff
test ax, ax ; 85 c0
- je short 08c34h ; 74 13
+ je short 09411h ; 74 13
mov di, bx ; 89 df
mov es, dx ; 8e c2
mov ax, 08106h ; b8 06 81
mov dx, strict word 00000h ; ba 00 00
int 04bh ; cd 4b
- jc near 08c33h ; 0f 82 02 00
+ jc near 09410h ; 0f 82 02 00
db 032h, 0c0h
; xor al, al ; 32 c0
cbw ; 98
mov es, dx ; 8e c2
mov word [es:bx+00eh], strict word 00000h ; 26 c7 47 0e 00 00
- pop bp ; 5d
+ lea sp, [bp-004h] ; 8d 66 fc
pop di ; 5f
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-__U4D: ; 0xf8c40 LB 0x39
+__U4D: ; 0xf9420 LB 0x39
pushfw ; 9c
push eax ; 66 50
push edx ; 66 52
@@ -12986,7 +13892,7 @@ __U4D: ; 0xf8c40 LB 0x39
rol eax, 010h ; 66 c1 c0 10
popfw ; 9d
retn ; c3
-__U4M: ; 0xf8c79 LB 0x31
+__U4M: ; 0xf9459 LB 0x31
pushfw ; 9c
push eax ; 66 50
push edx ; 66 52
@@ -13011,7 +13917,7 @@ __U4M: ; 0xf8c79 LB 0x31
rol eax, 010h ; 66 c1 c0 10
popfw ; 9d
retn ; c3
-_fmemset_: ; 0xf8caa LB 0xd
+_fmemset_: ; 0xf948a LB 0xd
push di ; 57
mov es, dx ; 8e c2
db 08bh, 0f8h
@@ -13021,7 +13927,7 @@ _fmemset_: ; 0xf8caa LB 0xd
xchg al, bl ; 86 d8
pop di ; 5f
retn ; c3
-_fmemcpy_: ; 0xf8cb7 LB 0x33
+_fmemcpy_: ; 0xf9497 LB 0x33
push bp ; 55
db 08bh, 0ech
; mov bp, sp ; 8b ec
@@ -13041,18 +13947,9 @@ _fmemcpy_: ; 0xf8cb7 LB 0x33
pop di ; 5f
leave ; c9
retn ; c3
- add byte [bx+si], al ; 00 00
- lea ax, [bp+si] ; 8d 02
- lea ax, [0068dh] ; 8d 06 8d 06
- lea ax, [0088dh] ; 8d 06 8d 08
- lea cx, [bx+si] ; 8d 08
- lea cx, [bp+si] ; 8d 0a
- lea cx, [00e8dh] ; 8d 0e 8d 0e
- lea dx, [bx+si] ; 8d 10
- lea dx, [di] ; 8d 15
- lea dx, [bx] ; 8d 17
- db 08dh
-apm_worker: ; 0xf8cea LB 0x3a
+ db 000h, 0e0h, 094h, 0e2h, 094h, 0e6h, 094h, 0e6h, 094h, 0e6h, 094h, 0e8h, 094h, 0e8h, 094h, 0eah
+ db 094h, 0eeh, 094h, 0eeh, 094h, 0f0h, 094h, 0f5h, 094h, 0f7h, 094h
+apm_worker: ; 0xf94ca LB 0x3a
sti ; fb
push ax ; 50
db 032h, 0e4h
@@ -13064,29 +13961,29 @@ apm_worker: ; 0xf8cea LB 0x3a
cmp AL, strict byte 00dh ; 3c 0d
pop ax ; 58
mov AH, strict byte 053h ; b4 53
- jnc short 08d20h ; 73 25
- jmp word [cs:bp-07330h] ; 2e ff a6 d0 8c
- jmp short 08d1eh ; eb 1c
+ jnc short 09500h ; 73 25
+ jmp word [cs:bp-06b50h] ; 2e ff a6 b0 94
+ jmp short 094feh ; eb 1c
sti ; fb
hlt ; f4
- jmp short 08d1eh ; eb 18
- jmp short 08d1eh ; eb 16
- jmp short 08d20h ; eb 16
+ jmp short 094feh ; eb 18
+ jmp short 094feh ; eb 16
+ jmp short 09500h ; eb 16
mov AH, strict byte 080h ; b4 80
- jmp short 08d22h ; eb 14
- jmp short 08d20h ; eb 10
+ jmp short 09502h ; eb 14
+ jmp short 09500h ; eb 10
mov ax, 00102h ; b8 02 01
- jmp short 08d1eh ; eb 09
- jmp short 08d1eh ; eb 07
+ jmp short 094feh ; eb 09
+ jmp short 094feh ; eb 07
mov BL, strict byte 000h ; b3 00
mov cx, strict word 00000h ; b9 00 00
- jmp short 08d1eh ; eb 00
+ jmp short 094feh ; eb 00
clc ; f8
retn ; c3
mov AH, strict byte 009h ; b4 09
stc ; f9
retn ; c3
-apm_pm16_entry: ; 0xf8d24 LB 0x11
+apm_pm16_entry: ; 0xf9504 LB 0x11
mov AH, strict byte 002h ; b4 02
push DS ; 1e
push bp ; 55
@@ -13094,15 +13991,15 @@ apm_pm16_entry: ; 0xf8d24 LB 0x11
pop bp ; 5d
add bp, strict byte 00008h ; 83 c5 08
mov ds, bp ; 8e dd
- call 08ceah ; e8 b8 ff
+ call 094cah ; e8 b8 ff
pop bp ; 5d
pop DS ; 1f
retf ; cb
- ; Padding 0x4ccb bytes at 0xf8d35
- times 19659 db 0
+ ; Padding 0x44eb bytes at 0xf9515
+ times 17643 db 0
-section BIOS32 progbits vstart=0xda00 align=1 ; size=0x3aa class=CODE group=AUTO
+section BIOS32 progbits vstart=0xda00 align=1 ; size=0x3cb class=CODE group=AUTO
bios32_service: ; 0xfda00 LB 0x26
pushfw ; 9c
cmp bl, 000h ; 80 fb 00
@@ -13129,7 +14026,7 @@ pcibios32_entry: ; 0xfda26 LB 0x1a
cld ; fc
push ES ; 06
pushaw ; 60
- call 0db73h ; e8 46 01
+ call 0db78h ; e8 4b 01
add byte [bx+si], al ; 00 00
popaw ; 61
pop ES ; 07
@@ -13147,7 +14044,7 @@ apm_pm32_entry: ; 0xfda40 LB 0x21
pop bp ; 5d
add bp, strict byte 00008h ; 83 c5 08
push ebp ; 66 55
- mov bp, 08d26h ; bd 26 8d
+ mov bp, 09506h ; bd 06 95
add byte [bx+si], al ; 00 00
push ebp ; 66 55
mov AH, strict byte 003h ; b4 03
@@ -13155,10 +14052,10 @@ apm_pm32_entry: ; 0xfda40 LB 0x21
; retf ; 66 cb
pop bp ; 5d
retf ; cb
-pci32_select_reg_: ; 0xfda61 LB 0x1f
- push bx ; 53
+pci32_select_reg_: ; 0xfda61 LB 0x22
push bp ; 55
mov bp, sp ; 89 e5
+ push bx ; 53
and dl, 0fch ; 80 e2 fc
mov bx, dx ; 89 d3
mov dx, 00cf8h ; ba f8 0c
@@ -13169,27 +14066,30 @@ pci32_select_reg_: ; 0xfda61 LB 0x1f
or ax, strict word 00000h ; 0d 00 00
add byte [bx+si-03c76h], al ; 00 80 8a c3
out DX, ax ; ef
- pop bp ; 5d
+ lea sp, [di-004h] ; 8d 65 fc
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
-pci32_find_device_: ; 0xfda80 LB 0xf5
+pci32_find_device_: ; 0xfda83 LB 0xf7
+ push bp ; 55
+ mov bp, sp ; 89 e5
push cx ; 51
push si ; 56
push di ; 57
- enter 00014h, 000h ; c8 14 00 00
+ sub sp, strict byte 00014h ; 83 ec 14
push ax ; 50
mov cx, dx ; 89 d1
mov si, bx ; 89 de
test bx, bx ; 85 db
xor bx, bx ; 31 db
- mov byte [di-004h], 000h ; c6 45 fc 00
+ mov byte [di-010h], 000h ; c6 45 f0 00
test bl, 007h ; f6 c3 07
- jne short 0dacfh ; 75 36
+ jne short 0dad4h ; 75 36
db 00fh, 0b7h, 0c3h
; movzx ax, bx ; 0f b7 c3
mov dx, strict word 0000eh ; ba 0e 00
add byte [bx+si], al ; 00 00
- call 0da5fh ; e8 bb ff
+ call 0da5fh ; e8 b6 ff
db 0ffh
db 0ffh
mov dx, 00cfeh ; ba fe 0c
@@ -13197,32 +14097,32 @@ pci32_find_device_: ; 0xfda80 LB 0xf5
db 02bh, 0c0h
; sub ax, ax ; 2b c0
in AL, DX ; ec
- mov byte [di-008h], al ; 88 45 f8
+ mov byte [di-014h], al ; 88 45 ec
cmp AL, strict byte 0ffh ; 3c ff
- jne short 0dabdh ; 75 08
+ jne short 0dac2h ; 75 08
add bx, strict byte 00008h ; 83 c3 08
- jmp near 0db45h ; e9 8a 00
+ jmp near 0db4ah ; e9 8a 00
add byte [bx+si], al ; 00 00
- test byte [di-008h], 080h ; f6 45 f8 80
- je short 0dacah ; 74 07
+ test byte [di-014h], 080h ; f6 45 ec 80
+ je short 0dacfh ; 74 07
mov di, strict word 00001h ; bf 01 00
add byte [bx+si], al ; 00 00
- jmp short 0dacfh ; eb 05
+ jmp short 0dad4h ; eb 05
mov di, strict word 00008h ; bf 08 00
add byte [bx+si], al ; 00 00
- mov al, byte [di-008h] ; 8a 45 f8
+ mov al, byte [di-014h] ; 8a 45 ec
and AL, strict byte 007h ; 24 07
cmp AL, strict byte 001h ; 3c 01
- jne short 0dafeh ; 75 26
+ jne short 0db03h ; 75 26
db 00fh, 0b7h, 0c3h
; movzx ax, bx ; 0f b7 c3
mov dx, ax ; 89 c2
sar dx, 008h ; c1 fa 08
test dx, dx ; 85 d2
- jne short 0dafeh ; 75 1a
+ jne short 0db03h ; 75 1a
mov dx, strict word 0001ah ; ba 1a 00
add byte [bx+si], al ; 00 00
- call 0da5fh ; e8 73 ff
+ call 0da5fh ; e8 6e ff
db 0ffh
db 0ffh
mov dx, 00cfeh ; ba fe 0c
@@ -13230,204 +14130,186 @@ pci32_find_device_: ; 0xfda80 LB 0xf5
db 02bh, 0c0h
; sub ax, ax ; 2b c0
in AL, DX ; ec
- cmp al, byte [di-004h] ; 3a 45 fc
- jbe short 0dafeh ; 76 03
- mov byte [di-004h], al ; 88 45 fc
+ cmp al, byte [di-010h] ; 3a 45 f0
+ jbe short 0db03h ; 76 03
+ mov byte [di-010h], al ; 88 45 f0
test si, si ; 85 f6
- je short 0db09h ; 74 07
+ je short 0db0eh ; 74 07
mov ax, strict word 00008h ; b8 08 00
add byte [bx+si], al ; 00 00
- jmp short 0db0bh ; eb 02
+ jmp short 0db10h ; eb 02
xor ax, ax ; 31 c0
db 00fh, 0b7h, 0d0h
; movzx dx, ax ; 0f b7 d0
db 00fh, 0b7h, 0c3h
; movzx ax, bx ; 0f b7 c3
- call 0da5fh ; e8 4b ff
+ call 0da5fh ; e8 46 ff
db 0ffh
db 0ffh
mov dx, 00cfch ; ba fc 0c
add byte [bx+si], al ; 00 00
in ax, DX ; ed
- mov word [di-00ch], ax ; 89 45 f4
- mov word [di-014h], strict word 00000h ; c7 45 ec 00 00
+ mov word [di-018h], ax ; 89 45 e8
+ mov word [di-020h], strict word 00000h ; c7 45 e0 00 00
add byte [bx+si], al ; 00 00
test si, si ; 85 f6
- je short 0db30h ; 74 06
+ je short 0db35h ; 74 06
shr ax, 008h ; c1 e8 08
- mov word [di-00ch], ax ; 89 45 f4
- mov ax, word [di-00ch] ; 8b 45 f4
- cmp ax, word [di-018h] ; 3b 45 e8
- je short 0db3eh ; 74 06
- cmp word [di-014h], strict byte 00000h ; 83 7d ec 00
- je short 0db45h ; 74 07
+ mov word [di-018h], ax ; 89 45 e8
+ mov ax, word [di-018h] ; 8b 45 e8
+ cmp ax, word [di-024h] ; 3b 45 dc
+ je short 0db43h ; 74 06
+ cmp word [di-020h], strict byte 00000h ; 83 7d e0 00
+ je short 0db4ah ; 74 07
dec cx ; 49
cmp ecx, strict byte 0ffffffffh ; 66 83 f9 ff
- je short 0db5dh ; 74 18
+ je short 0db62h ; 74 18
add bx, di ; 01 fb
db 00fh, 0b7h, 0c3h
; movzx ax, bx ; 0f b7 c3
sar ax, 008h ; c1 f8 08
- mov word [di-010h], ax ; 89 45 f0
- movzx ax, byte [di-004h] ; 0f b6 45 fc
- cmp ax, word [di-010h] ; 3b 45 f0
- jnl near 0da92h ; 0f 8d 37 ff
+ mov word [di-01ch], ax ; 89 45 e4
+ movzx ax, byte [di-010h] ; 0f b6 45 f0
+ cmp ax, word [di-01ch] ; 3b 45 e4
+ jnl near 0da97h ; 0f 8d 37 ff
db 0ffh
jmp word [bp-07dh] ; ff 66 83
stc ; f9
- push word [di+008h] ; ff 75 08
+ push word [di+005h] ; ff 75 05
db 00fh, 0b7h, 0c3h
; movzx ax, bx ; 0f b7 c3
- leave ; c9
- pop di ; 5f
- pop si ; 5e
- pop cx ; 59
- retn ; c3
+ jmp short 0db72h ; eb 05
mov ax, strict word 0ffffh ; b8 ff ff
add byte [bx+si], al ; 00 00
- leave ; c9
+ lea sp, [di-00ch] ; 8d 65 f4
pop di ; 5f
pop si ; 5e
pop cx ; 59
+ pop bp ; 5d
retn ; c3
-_pci32_function: ; 0xfdb75 LB 0x235
+_pci32_function: ; 0xfdb7a LB 0x251
+ push bp ; 55
+ mov bp, sp ; 89 e5
push bx ; 53
push si ; 56
push di ; 57
- push bp ; 55
- mov bp, sp ; 89 e5
- and dword [di+030h], strict dword 0658100ffh ; 66 81 65 30 ff 00 81 65
- cmp dh, bh ; 38 fe
+ push ax ; 50
+ push ax ; 50
+ and dword [di+024h], strict dword 0658100ffh ; 66 81 65 24 ff 00 81 65
+ sub AL, strict byte 0feh ; 2c fe
inc word [bx+si] ; ff 00
- add byte [bp+di+03045h], cl ; 00 8b 45 30
+ add byte [bp+di+02445h], cl ; 00 8b 45 24
xor ah, ah ; 30 e4
cmp eax, strict dword 029720003h ; 66 3d 03 00 72 29
- jbe near 0dc30h ; 0f 86 99 00
+ jbe near 0dc37h ; 0f 86 99 00
add byte [bx+si], al ; 00 00
cmp eax, strict dword 0840f000eh ; 66 3d 0e 00 0f 84
- lodsw ; ad
- add word [bx+si], ax ; 01 00
+ test ax, strict word 00001h ; a9 01 00
add byte [bp+03dh], ah ; 00 66 3d
or byte [bx+si], al ; 08 00
- jc near 0dd93h ; 0f 82 e8 01
+ jc near 0ddb1h ; 0f 82 ff 01
add byte [bx+si], al ; 00 00
cmp eax, strict dword 0860f000dh ; 66 3d 0d 00 0f 86
test AL, strict byte 000h ; a8 00
add byte [bx+si], al ; 00 00
- jmp near 0dd93h ; e9 d9 01
+ jmp near 0ddb1h ; e9 f0 01
add byte [bx+si], al ; 00 00
cmp eax, strict dword 028740002h ; 66 3d 02 00 74 28
cmp eax, strict dword 0850f0001h ; 66 3d 01 00 0f 85
- leave ; c9
- add word [bx+si], ax ; 01 00
- add byte [bp-039h], ah ; 00 66 c7
- inc bp ; 45
- xor byte [bx+di], al ; 30 01
- add byte [bp-039h], ah ; 00 66 c7
+ loopne 0dbd2h ; e0 01
+ add byte [bx+si], al ; 00 00
+ mov dword [di+024h], strict dword 0c7660001h ; 66 c7 45 24 01 00 66 c7
inc bp ; 45
- and AL, strict byte 010h ; 24 10
+ sbb byte [bx+si], dl ; 18 10
add dh, byte [bx+di] ; 02 31
sal byte [bp-077h], 045h ; c0 66 89 45
- sub AL, strict byte 0c7h ; 2c c7
+ and bh, al ; 20 c7
inc bp ; 45
- sub byte [bx+si+043h], dl ; 28 50 43
+ sbb AL, strict byte 050h ; 1c 50
+ inc bx ; 43
dec cx ; 49
- and byte [di+05fh], bl ; 20 5d 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- cmp dword [di+028h], strict byte 0ffffffffh ; 66 83 7d 28 ff
- jne short 0dbfeh ; 75 0d
- mov ax, word [di+030h] ; 8b 45 30
+ and cl, ch ; 20 e9
+ rol byte [bx+di], CL ; d2 01
+ add byte [bx+si], al ; 00 00
+ cmp dword [di+01ch], strict byte 0ffffffffh ; 66 83 7d 1c ff
+ jne short 0dc05h ; 75 0d
+ mov ax, word [di+024h] ; 8b 45 24
xor ah, ah ; 30 e4
or ah, 083h ; 80 cc 83
- jmp near 0dd9bh ; e9 9f 01
+ jmp near 0ddb9h ; e9 b6 01
add byte [bx+si], al ; 00 00
xor bx, bx ; 31 db
- db 00fh, 0b7h, 055h, 018h
- ; movzx dx, word [di+018h] ; 0f b7 55 18
- db 00fh, 0b7h, 04dh, 02ch
- ; movzx cx, word [di+02ch] ; 0f b7 4d 2c
- sal cx, 010h ; c1 e1 10
- db 00fh, 0b7h, 045h, 028h
- ; movzx ax, word [di+028h] ; 0f b7 45 28
+ db 00fh, 0b7h, 055h, 00ch
+ ; movzx dx, word [di+00ch] ; 0f b7 55 0c
+ db 00fh, 0b7h, 045h, 020h
+ ; movzx ax, word [di+020h] ; 0f b7 45 20
+ sal ax, 010h ; c1 e0 10
+ db 00fh, 0b7h, 04dh, 01ch
+ ; movzx cx, word [di+01ch] ; 0f b7 4d 1c
or ax, cx ; 09 c8
- call 0da7eh ; e8 6a fe
+ call 0da81h ; e8 66 fe
db 0ffh
jmp word [bp+03dh] ; ff 66 3d
db 0ffh
push word [di+00dh] ; ff 75 0d
- mov ax, word [di+030h] ; 8b 45 30
+ mov ax, word [di+024h] ; 8b 45 24
xor ah, ah ; 30 e4
or ah, 086h ; 80 cc 86
- jmp near 0dd9bh ; e9 74 01
+ jmp near 0ddb9h ; e9 8b 01
add byte [bx+si], al ; 00 00
- mov dword [di+024h], eax ; 66 89 45 24
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- db 00fh, 0b7h, 055h, 018h
- ; movzx dx, word [di+018h] ; 0f b7 55 18
- mov ax, word [di+02ch] ; 8b 45 2c
+ mov dword [di+018h], eax ; 66 89 45 18
+ jmp near 0ddc1h ; e9 8a 01
+ add byte [bx+si], al ; 00 00
+ db 00fh, 0b7h, 055h, 00ch
+ ; movzx dx, word [di+00ch] ; 0f b7 55 0c
+ mov ax, word [di+020h] ; 8b 45 20
mov bx, strict word 00001h ; bb 01 00
add byte [bx+si], al ; 00 00
- call 0da7eh ; e8 3d fe
+ call 0da81h ; e8 39 fe
db 0ffh
jmp word [bp+03dh] ; ff 66 3d
db 0ffh
push word [di+00dh] ; ff 75 0d
- mov ax, word [di+030h] ; 8b 45 30
+ mov ax, word [di+024h] ; 8b 45 24
xor ah, ah ; 30 e4
or ah, 086h ; 80 cc 86
- jmp near 0dd9bh ; e9 47 01
+ jmp near 0ddb9h ; e9 5e 01
add byte [bx+si], al ; 00 00
- mov dword [di+024h], eax ; 66 89 45 24
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- cmp dword [di+014h], strict dword 00d720100h ; 66 81 7d 14 00 01 72 0d
- mov ax, word [di+030h] ; 8b 45 30
+ mov dword [di+018h], eax ; 66 89 45 18
+ jmp near 0ddc1h ; e9 5d 01
+ add byte [bx+si], al ; 00 00
+ cmp dword [di+008h], strict dword 00d720100h ; 66 81 7d 08 00 01 72 0d
+ mov ax, word [di+024h] ; 8b 45 24
xor ah, ah ; 30 e4
or ah, 087h ; 80 cc 87
- jmp near 0dd9bh ; e9 29 01
+ jmp near 0ddb9h ; e9 40 01
add byte [bx+si], al ; 00 00
- db 00fh, 0b7h, 055h, 014h
- ; movzx dx, word [di+014h] ; 0f b7 55 14
- db 00fh, 0b7h, 045h, 024h
- ; movzx ax, word [di+024h] ; 0f b7 45 24
- call 0da5fh ; e8 e0 fd
+ db 00fh, 0b7h, 055h, 008h
+ ; movzx dx, word [di+008h] ; 0f b7 55 08
+ db 00fh, 0b7h, 045h, 018h
+ ; movzx ax, word [di+018h] ; 0f b7 45 18
+ call 0da5fh ; e8 d9 fd
db 0ffh
- dec word [bp+di+03045h] ; ff 8b 45 30
+ dec word [bp+di+02445h] ; ff 8b 45 24
xor ah, ah ; 30 e4
cmp eax, strict dword 02172000ah ; 66 3d 0a 00 72 21
- jbe short 0dcfeh ; 76 70
+ jbe short 0dd04h ; 76 6f
cmp eax, strict dword 0840f000dh ; 66 3d 0d 00 0f 84
- stosb ; aa
- add byte [bx+si], al ; 00 00
+ test ax, strict word 00000h ; a9 00 00
add byte [bp+03dh], ah ; 00 66 3d
or AL, strict byte 000h ; 0c 00
- je near 0dd24h ; 0f 84 84 00
+ je near 0dd2ah ; 0f 84 83 00
add byte [bx+si], al ; 00 00
- cmp eax, strict dword 06474000bh ; 66 3d 0b 00 74 64
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- cmp eax, strict dword 02e740009h ; 66 3d 09 00 74 2e
- cmp eax, strict dword 005740008h ; 66 3d 08 00 74 05
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- mov bx, word [di+02ch] ; 8b 5d 2c
+ cmp eax, strict dword 06374000bh ; 66 3d 0b 00 74 63
+ jmp near 0ddc1h ; e9 0f 01
+ add byte [bx+si], al ; 00 00
+ cmp eax, strict dword 02d740009h ; 66 3d 09 00 74 2d
+ cmp eax, strict dword 0850f0008h ; 66 3d 08 00 0f 85
+ inc word [bx+si] ; ff 00
+ add byte [bx+si], al ; 00 00
+ mov bx, word [di+020h] ; 8b 5d 20
xor bl, bl ; 30 db
- mov ax, word [di+014h] ; 8b 45 14
+ mov ax, word [di+008h] ; 8b 45 08
xor ah, ah ; 30 e4
and AL, strict byte 003h ; 24 03
db 00fh, 0b7h, 0d0h
@@ -13438,13 +14320,10 @@ _pci32_function: ; 0xfdb75 LB 0x235
; sub ax, ax ; 2b c0
in AL, DX ; ec
or bx, ax ; 09 c3
- mov dword [di+02ch], ebx ; 66 89 5d 2c
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- mov ax, word [di+014h] ; 8b 45 14
+ mov dword [di+020h], ebx ; 66 89 5d 20
+ jmp near 0ddc1h ; e9 dc 00
+ add byte [bx+si], al ; 00 00
+ mov ax, word [di+008h] ; 8b 45 08
xor ah, ah ; 30 e4
and AL, strict byte 002h ; 24 02
db 00fh, 0b7h, 0d0h
@@ -13454,23 +14333,17 @@ _pci32_function: ; 0xfdb75 LB 0x235
db 02bh, 0c0h
; sub ax, ax ; 2b c0
in eax, DX ; 66 ed
- mov dword [di+02ch], eax ; 66 89 45 2c
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
+ mov dword [di+020h], eax ; 66 89 45 20
+ jmp near 0ddc1h ; e9 bf 00
+ add byte [bx+si], al ; 00 00
mov dx, 00cfch ; ba fc 0c
add byte [bx+si], al ; 00 00
in ax, DX ; ed
- mov word [di+02ch], ax ; 89 45 2c
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- mov ax, word [di+02ch] ; 8b 45 2c
- mov dx, word [di+014h] ; 8b 55 14
+ mov word [di+020h], ax ; 89 45 20
+ jmp near 0ddc1h ; e9 b1 00
+ add byte [bx+si], al ; 00 00
+ mov ax, word [di+020h] ; 8b 45 20
+ mov dx, word [di+008h] ; 8b 55 08
xor dh, dh ; 30 f6
and dl, 003h ; 80 e2 03
db 00fh, 0b7h, 0d2h
@@ -13478,14 +14351,11 @@ _pci32_function: ; 0xfdb75 LB 0x235
add dx, 00cfch ; 81 c2 fc 0c
add byte [bx+si], al ; 00 00
out DX, AL ; ee
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- db 00fh, 0b7h, 045h, 02ch
- ; movzx ax, word [di+02ch] ; 0f b7 45 2c
- mov dx, word [di+014h] ; 8b 55 14
+ jmp near 0ddc1h ; e9 97 00
+ add byte [bx+si], al ; 00 00
+ db 00fh, 0b7h, 045h, 020h
+ ; movzx ax, word [di+020h] ; 0f b7 45 20
+ mov dx, word [di+008h] ; 8b 55 08
xor dh, dh ; 30 f6
and dl, 002h ; 80 e2 02
db 00fh, 0b7h, 0d2h
@@ -13493,73 +14363,73 @@ _pci32_function: ; 0xfdb75 LB 0x235
add dx, 00cfch ; 81 c2 fc 0c
add byte [bx+si], al ; 00 00
out DX, eax ; 66 ef
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- mov ax, word [di+02ch] ; 8b 45 2c
+ jmp near 0ddc1h ; e9 7b 00
+ add byte [bx+si], al ; 00 00
+ mov ax, word [di+020h] ; 8b 45 20
mov dx, 00cfch ; ba fc 0c
add byte [bx+si], al ; 00 00
out DX, ax ; ef
- pop bp ; 5d
- pop di ; 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- db 00fh, 0b7h, 045h, 014h
- ; movzx ax, word [di+014h] ; 0f b7 45 14
- mov es, [di+034h] ; 8e 45 34
- mov ecx, dword [di] ; 66 8b 0d
- add byte [bx+si], al ; 00 00
- add byte [bx+si], al ; 00 00
- db 066h, 026h, 03bh, 008h
- ; cmp ecx, dword [es:bx+si] ; 66 26 3b 08
- jbe short 0dd6eh ; 76 0a
- mov ax, word [di+030h] ; 8b 45 30
+ jmp short 0ddc3h ; eb 70
+ db 00fh, 0b7h, 045h, 008h
+ ; movzx ax, word [di+008h] ; 0f b7 45 08
+ mov es, [di+028h] ; 8e 45 28
+ mov [di-010h], es ; 8c 45 f0
+ mov bx, ax ; 89 c3
+ mov edx, dword [di] ; 66 8b 15
+ mov AL, byte [000f4h] ; a0 f4 00
+ add byte [bp+026h], ah ; 00 66 26
+ cmp dx, word [bx+si] ; 3b 10
+ jbe short 0dd7eh ; 76 12
+ mov ax, word [di+024h] ; 8b 45 24
xor ah, ah ; 30 e4
or ah, 089h ; 80 cc 89
- jmp short 0dd9dh ; eb 2f
- db 00fh, 0b7h, 0c9h
- ; movzx cx, cx ; 0f b7 c9
- db 066h, 026h, 08bh, 058h, 006h
- ; mov ebx, dword [es:bx+si+006h] ; 66 26 8b 58 06
+ mov dword [di+024h], eax ; 66 89 45 24
+ or word [di+02ch], strict byte 00001h ; 83 4d 2c 01
+ jmp short 0dda4h ; eb 26
+ db 00fh, 0b7h, 0cah
+ ; movzx cx, dx ; 0f b7 ca
+ db 066h, 026h, 08bh, 050h, 006h
+ ; mov edx, dword [es:bx+si+006h] ; 66 26 8b 50 06
+ mov word [di-014h], dx ; 89 55 ec
mov di, word [es:bx+si+002h] ; 26 8b 78 02
mov dx, ds ; 8c da
mov si, 0f2c0h ; be c0 f2
add byte [bx+si], al ; 00 00
- mov es, bx ; 8e c3
+ mov es, [di-014h] ; 8e 45 ec
push DS ; 1e
db 066h, 08eh, 0dah
; mov ds, edx ; 66 8e da
rep movsb ; f3 a4
pop DS ; 1f
- mov dword [di+024h], strict dword 05f5d0a00h ; 66 c7 45 24 00 0a 5d 5f
- pop si ; 5e
- pop bx ; 5b
- retn ; c3
- mov ax, word [di+030h] ; 8b 45 30
+ mov dword [di+018h], strict dword 0a1660a00h ; 66 c7 45 18 00 0a 66 a1
+ mov AL, byte [000f4h] ; a0 f4 00
+ add byte [bp-00fbbh], cl ; 00 8e 45 f0
+ db 066h, 026h, 089h, 003h
+ ; mov dword [es:bp+di], eax ; 66 26 89 03
+ jmp short 0ddc3h ; eb 10
+ mov ax, word [di+024h] ; 8b 45 24
xor ah, ah ; 30 e4
or ah, 081h ; 80 cc 81
- mov dword [di+030h], eax ; 66 89 45 30
- or word [di+038h], strict byte 00001h ; 83 4d 38 01
- pop bp ; 5d
+ mov dword [di+024h], eax ; 66 89 45 24
+ or word [di+02ch], strict byte 00001h ; 83 4d 2c 01
+ lea sp, [di-00ch] ; 8d 65 f4
pop di ; 5f
pop si ; 5e
pop bx ; 5b
+ pop bp ; 5d
retn ; c3
- ; Padding 0x2 bytes at 0xfddaa
- times 2 db 0
+ ; Padding 0x1 bytes at 0xfddcb
+ times 1 db 0
-section BIOS32CONST progbits vstart=0xddac align=1 ; size=0x0 class=FAR_DATA group=BIOS32_GROUP
+section BIOS32CONST progbits vstart=0xddcc align=1 ; size=0x0 class=FAR_DATA group=BIOS32_GROUP
-section BIOS32CONST2 progbits vstart=0xddac align=1 ; size=0x0 class=FAR_DATA group=BIOS32_GROUP
+section BIOS32CONST2 progbits vstart=0xddcc align=1 ; size=0x0 class=FAR_DATA group=BIOS32_GROUP
-section BIOS32_DATA progbits vstart=0xddac align=1 ; size=0x0 class=FAR_DATA group=BIOS32_GROUP
+section BIOS32_DATA progbits vstart=0xddcc align=1 ; size=0x0 class=FAR_DATA group=BIOS32_GROUP
- ; Padding 0x254 bytes at 0xfddac
- times 596 db 0
+ ; Padding 0x234 bytes at 0xfddcc
+ times 564 db 0
section BIOSSEG progbits vstart=0xe000 align=1 ; size=0x2000 class=CODE group=AUTO
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
@@ -13574,49 +14444,60 @@ eoi_jmp_post: ; 0xfe030 LB 0xb
eoi_both_pics: ; 0xfe03b LB 0x4
mov AL, strict byte 020h ; b0 20
out strict byte 0a0h, AL ; e6 a0
-eoi_master_pic: ; 0xfe03f LB 0x1c
+eoi_master_pic: ; 0xfe03f LB 0x5
mov AL, strict byte 020h ; b0 20
out strict byte 020h, AL ; e6 20
retn ; c3
- times 0x15 db 0
+set_int_vects: ; 0xfe044 LB 0x17
+ mov word [bx], ax ; 89 07
+ mov word [bx+002h], dx ; 89 57 02
+ add bx, strict byte 00004h ; 83 c3 04
+ loop 0e044h ; e2 f6
+ retn ; c3
+ times 0xa db 0
db 'XM'
-post: ; 0xfe05b LB 0x32
- db 033h, 0c0h
- ; xor ax, ax ; 33 c0
- out strict byte 00dh, AL ; e6 0d
- out strict byte 0dah, AL ; e6 da
- mov AL, strict byte 0c0h ; b0 c0
- out strict byte 0d6h, AL ; e6 d6
- mov AL, strict byte 000h ; b0 00
- out strict byte 0d4h, AL ; e6 d4
+post: ; 0xfe05b LB 0x4c
+ cli ; fa
+ smsw ax ; 0f 01 e0
+ test ax, strict word 00001h ; a9 01 00
+ je short 0e068h ; 74 04
+ out strict byte 092h, AL ; e6 92
+ jmp short 0e066h ; eb fe
mov AL, strict byte 00fh ; b0 0f
out strict byte 070h, AL ; e6 70
in AL, strict byte 071h ; e4 71
- db 08ah, 0d8h
- ; mov bl, al ; 8a d8
+ xchg ah, al ; 86 c4
mov AL, strict byte 00fh ; b0 0f
out strict byte 070h, AL ; e6 70
mov AL, strict byte 000h ; b0 00
out strict byte 071h, AL ; e6 71
- db 08ah, 0c3h
- ; mov al, bl ; 8a c3
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4
+ cmp AL, strict byte 009h ; 3c 09
+ je short 0e090h ; 74 12
+ cmp AL, strict byte 00ah ; 3c 0a
+ je short 0e090h ; 74 0e
+ db 032h, 0c0h
+ ; xor al, al ; 32 c0
+ out strict byte 00dh, AL ; e6 0d
+ out strict byte 0dah, AL ; e6 da
+ mov AL, strict byte 0c0h ; b0 c0
+ out strict byte 0d6h, AL ; e6 d6
+ mov AL, strict byte 000h ; b0 00
+ out strict byte 0d4h, AL ; e6 d4
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4
cmp AL, strict byte 000h ; 3c 00
- je short 0e098h ; 74 19
+ je short 0e0a7h ; 74 11
cmp AL, strict byte 00dh ; 3c 0d
- jnc short 0e098h ; 73 15
+ jnc short 0e0a7h ; 73 0d
cmp AL, strict byte 009h ; 3c 09
- je short 0e098h ; 74 11
+ jne short 0e0a1h ; 75 03
+ jmp near 0e342h ; e9 a1 02
cmp AL, strict byte 005h ; 3c 05
- je short 0e030h ; 74 a5
- jmp short 0e098h ; eb 0b
-set_int_vects: ; 0xfe08d LB 0xb
- mov word [bx], ax ; 89 07
- mov word [bx+002h], dx ; 89 57 02
- add bx, strict byte 00004h ; 83 c3 04
- loop 0e08dh ; e2 f6
- retn ; c3
-normal_post: ; 0xfe098 LB 0x22b
- cli ; fa
+ je short 0e030h ; 74 8b
+ jmp short 0e0a7h ; eb 00
+normal_post: ; 0xfe0a7 LB 0x21c
mov ax, 07800h ; b8 00 78
db 08bh, 0e0h
; mov sp, ax ; 8b e0
@@ -13638,13 +14519,13 @@ normal_post: ; 0xfe098 LB 0x22b
; xor bx, bx ; 33 db
add bx, 01000h ; 81 c3 00 10
cmp bx, 09000h ; 81 fb 00 90
- jnc short 0e0cch ; 73 0b
+ jnc short 0e0dah ; 73 0b
mov es, bx ; 8e c3
db 033h, 0ffh
; xor di, di ; 33 ff
mov cx, 08000h ; b9 00 80
rep stosw ; f3 ab
- jmp short 0e0b7h ; eb eb
+ jmp short 0e0c5h ; eb eb
mov es, bx ; 8e c3
db 033h, 0ffh
; xor di, di ; 33 ff
@@ -13655,20 +14536,24 @@ normal_post: ; 0xfe098 LB 0x22b
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 01707h ; e8 2a 36
- call 0e8e0h ; e8 00 08
+ call 01727h ; e8 3c 36
+ call 0e8e0h ; e8 f2 07
db 033h, 0dbh
; xor bx, bx ; 33 db
mov ds, bx ; 8e db
mov cx, strict word 00060h ; b9 60 00
mov ax, 0ff53h ; b8 53 ff
mov dx, 0f000h ; ba 00 f0
- call 0e08dh ; e8 9d ff
+ call 0e044h ; e8 46 ff
mov bx, 001a0h ; bb a0 01
mov cx, strict word 00010h ; b9 10 00
- call 0e08dh ; e8 94 ff
+ call 0e044h ; e8 3d ff
mov ax, 0027fh ; b8 7f 02
mov word [00413h], ax ; a3 13 04
+ mov ax, 0e9dch ; b8 dc e9
+ mov word [00018h], ax ; a3 18 00
+ mov ax, 0f000h ; b8 00 f0
+ mov word [0001ah], ax ; a3 1a 00
mov ax, 0f84dh ; b8 4d f8
mov word [00044h], ax ; a3 44 00
mov ax, 0f000h ; b8 00 f0
@@ -13681,7 +14566,7 @@ normal_post: ; 0xfe098 LB 0x22b
mov word [00054h], ax ; a3 54 00
mov ax, 0f000h ; b8 00 f0
mov word [00056h], ax ; a3 56 00
- mov ax, 0efd2h ; b8 d2 ef
+ mov ax, 0efd4h ; b8 d4 ef
mov word [0005ch], ax ; a3 5c 00
mov ax, 0f000h ; b8 00 f0
mov word [0005eh], ax ; a3 5e 00
@@ -13693,11 +14578,11 @@ normal_post: ; 0xfe098 LB 0x22b
mov word [00064h], ax ; a3 64 00
mov ax, 0f000h ; b8 00 f0
mov word [00066h], ax ; a3 66 00
- mov ax, 0efebh ; b8 eb ef
+ mov ax, 0efedh ; b8 ed ef
mov word [00070h], ax ; a3 70 00
mov ax, 0f000h ; b8 00 f0
mov word [00072h], ax ; a3 72 00
- call 0e7c0h ; e8 6a 06
+ call 0e7c0h ; e8 50 06
mov ax, 0fea5h ; b8 a5 fe
mov word [00020h], ax ; a3 20 00
mov ax, 0f000h ; b8 00 f0
@@ -13735,7 +14620,7 @@ normal_post: ; 0xfe098 LB 0x22b
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 04893h ; e8 da 66
+ call 0495ah ; e8 87 67
pop DS ; 1f
mov AL, strict byte 014h ; b0 14
out strict byte 070h, AL ; e6 70
@@ -13752,9 +14637,9 @@ normal_post: ; 0xfe098 LB 0x22b
; xor bx, bx ; 33 db
mov CL, strict byte 014h ; b1 14
mov dx, 00378h ; ba 78 03
- call 0ecedh ; e8 10 0b
+ call 0ecedh ; e8 f6 0a
mov dx, 00278h ; ba 78 02
- call 0ecedh ; e8 0a 0b
+ call 0ecedh ; e8 f0 0a
sal bx, 00eh ; c1 e3 0e
mov ax, word [00410h] ; a1 10 04
and ax, 03fffh ; 25 ff 3f
@@ -13777,13 +14662,13 @@ normal_post: ; 0xfe098 LB 0x22b
; xor bx, bx ; 33 db
mov CL, strict byte 00ah ; b1 0a
mov dx, 003f8h ; ba f8 03
- call 0ed0bh ; e8 ec 0a
+ call 0ed0bh ; e8 d2 0a
mov dx, 002f8h ; ba f8 02
- call 0ed0bh ; e8 e6 0a
+ call 0ed0bh ; e8 cc 0a
mov dx, 003e8h ; ba e8 03
- call 0ed0bh ; e8 e0 0a
+ call 0ed0bh ; e8 c6 0a
mov dx, 002e8h ; ba e8 02
- call 0ed0bh ; e8 da 0a
+ call 0ed0bh ; e8 c0 0a
sal bx, 009h ; c1 e3 09
mov ax, word [00410h] ; a1 10 04
and ax, 0f1ffh ; 25 ff f1
@@ -13802,8 +14687,8 @@ normal_post: ; 0xfe098 LB 0x22b
mov word [001c0h], ax ; a3 c0 01
mov ax, 0f000h ; b8 00 f0
mov word [001c2h], ax ; a3 c2 01
- call 0edbfh ; e8 59 0b
- mov ax, 0f8a4h ; b8 a4 f8
+ call 0edbfh ; e8 3f 0b
+ mov ax, 0f8a9h ; b8 a9 f8
mov word [001d0h], ax ; a3 d0 01
mov ax, 0f000h ; b8 00 f0
mov word [001d2h], ax ; a3 d2 01
@@ -13815,40 +14700,18 @@ normal_post: ; 0xfe098 LB 0x22b
mov word [00040h], ax ; a3 40 00
mov ax, 0f000h ; b8 00 f0
mov word [00042h], ax ; a3 42 00
- call 0e79bh ; e8 0e 05
- call 0f13ch ; e8 ac 0e
- call 0f1c1h ; e8 2e 0f
- call 0e758h ; e8 c2 04
- push CS ; 0e
- pop DS ; 1f
- cld ; fc
- call 01b25h ; e8 89 38
- call 01f23h ; e8 84 3c
- call 085e4h ; e8 42 a3
- call 07701h ; e8 5c 94
- call 0ed2fh ; e8 87 0a
- call 0e2d2h ; e8 27 00
- push CS ; 0e
- pop DS ; 1f
- cld ; fc
- call 01725h ; e8 74 34
- call 0358dh ; e8 d9 52
- sti ; fb
- int 019h ; cd 19
- sti ; fb
- hlt ; f4
- jmp short 0e2b8h ; eb fd
- cli ; fa
- hlt ; f4
- add byte [bx+si], al ; 00 00
- add byte [bx+si], al ; 00 00
- pop ax ; 58
- dec bp ; 4d
+ call 0e79bh ; e8 f4 04
+ call 0f13ch ; e8 92 0e
+ call 0f1c1h ; e8 14 0f
+ call 0e758h ; e8 a8 04
+ jmp short 0e31bh ; eb 69
+ times 0xf db 0
+ db 'XM'
nmi: ; 0xfe2c3 LB 0x7
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 016e7h ; e8 1e 34
+ call 01703h ; e8 3a 34
iret ; cf
int75_handler: ; 0xfe2ca LB 0x8
out strict byte 0f0h, AL ; e6 f0
@@ -13856,9 +14719,6 @@ int75_handler: ; 0xfe2ca LB 0x8
int 002h ; cd 02
iret ; cf
hard_drive_post: ; 0xfe2d2 LB 0x12c
- mov AL, strict byte 00ah ; b0 0a
- mov dx, 003f6h ; ba f6 03
- out DX, AL ; ee
db 033h, 0c0h
; xor ax, ax ; 33 c0
mov ds, ax ; 8e d8
@@ -13873,7 +14733,7 @@ hard_drive_post: ; 0xfe2d2 LB 0x12c
mov word [0004ch], ax ; a3 4c 00
mov ax, 0f000h ; b8 00 f0
mov word [0004eh], ax ; a3 4e 00
- mov ax, 0f8d2h ; b8 d2 f8
+ mov ax, 0f8d7h ; b8 d7 f8
mov word [001d8h], ax ; a3 d8 01
mov ax, 0f000h ; b8 00 f0
mov word [001dah], ax ; a3 da 01
@@ -13886,7 +14746,47 @@ hard_drive_post: ; 0xfe2d2 LB 0x12c
mov ax, 09fc0h ; b8 c0 9f
mov word [0011ah], ax ; a3 1a 01
retn ; c3
- times 0xdb db 0
+ push CS ; 0e
+ pop DS ; 1f
+ cld ; fc
+ call 01b5dh ; e8 3c 38
+ call 01f57h ; e8 33 3c
+ call 08d86h ; e8 5f aa
+ call 07e2dh ; e8 03 9b
+ call 0ed2fh ; e8 02 0a
+ call 0e2d2h ; e8 a2 ff
+ push CS ; 0e
+ pop DS ; 1f
+ cld ; fc
+ call 01747h ; e8 11 34
+ call 0363eh ; e8 05 53
+ sti ; fb
+ int 019h ; cd 19
+ sti ; fb
+ hlt ; f4
+ jmp short 0e33dh ; eb fd
+ cli ; fa
+ hlt ; f4
+ mov ax, strict word 00040h ; b8 40 00
+ mov ds, ax ; 8e d8
+ mov ss, [word 00069h] ; 8e 16 69 00
+ mov sp, word [word 00067h] ; 8b 26 67 00
+ in AL, strict byte 092h ; e4 92
+ and AL, strict byte 0fdh ; 24 fd
+ out strict byte 092h, AL ; e6 92
+ lidt [cs:0efe7h] ; 2e 0f 01 1e e7 ef
+ pop DS ; 1f
+ pop ES ; 07
+ db 08bh, 0ech
+ ; mov bp, sp ; 8b ec
+ in AL, strict byte 080h ; e4 80
+ mov byte [bp+00fh], al ; 88 46 0f
+ db 03ah, 0e0h
+ ; cmp ah, al ; 3a e0
+ popaw ; 61
+ sti ; fb
+ retf 00002h ; ca 02 00
+ times 0x91 db 0
db 'XM'
int13_handler: ; 0xfe3fe LB 0x3
jmp near 0ec5bh ; e9 5a 08
@@ -13957,7 +14857,7 @@ int19_handler: ; 0xfe6f2 LB 0x61
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 05b9dh ; e8 5b 74
+ call 05cech ; e8 aa 75
popaw ; 61
pop ES ; 07
pop DS ; 1f
@@ -13968,7 +14868,7 @@ int19_handler: ; 0xfe6f2 LB 0x61
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 0167eh ; e8 2f 2f
+ call 01698h ; e8 49 2f
popaw ; 61
pop ES ; 07
pop DS ; 1f
@@ -14073,7 +14973,7 @@ ebda_post: ; 0xfe7c0 LB 0xa4
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 04f85h ; e8 43 67
+ call 0505ah ; e8 18 68
popaw ; 61
pop DS ; 1f
pop ES ; 07
@@ -14090,7 +14990,7 @@ ebda_post: ; 0xfe7c0 LB 0xa4
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 04f85h ; e8 25 67
+ call 0505ah ; e8 fa 67
popaw ; 61
pop DS ; 1f
pop ES ; 07
@@ -14189,7 +15089,7 @@ pmode_setup: ; 0xfe8e0 LB 0x37b
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 04b9dh ; e8 ce 61
+ call 04c69h ; e8 9a 62
pop ES ; 07
popaw ; 61
pop DS ; 1f
@@ -14199,7 +15099,18 @@ pmode_setup: ; 0xfe8e0 LB 0x37b
out strict byte 064h, AL ; e6 64
pop ax ; 58
iret ; cf
- times 0x27b db 0
+ pushaw ; 60
+ push ES ; 06
+ push DS ; 1e
+ push CS ; 0e
+ pop DS ; 1f
+ cld ; fc
+ call 06744h ; e8 5f 7d
+ pop DS ; 1f
+ pop ES ; 07
+ popaw ; 61
+ iret ; cf
+ times 0x26e db 0
pop ax ; 58
dec bp ; 4d
jmp short 0ecb0h ; eb 55
@@ -14215,16 +15126,16 @@ int13_relocated: ; 0xfec5b LB 0x55
pop DS ; 1f
cld ; fc
push 0ece9h ; 68 e9 ec
- jmp near 035cbh ; e9 5a 49
+ jmp near 03682h ; e9 11 4a
push ES ; 06
push ax ; 50
push bx ; 53
push cx ; 51
push dx ; 52
- call 035a3h ; e8 2a 49
+ call 03656h ; e8 dd 49
cmp AL, strict byte 000h ; 3c 00
je short 0ecabh ; 74 2e
- call 035b7h ; e8 37 49
+ call 0366ch ; e8 ec 49
pop dx ; 5a
push dx ; 52
db 03ah, 0c2h
@@ -14242,7 +15153,7 @@ int13_relocated: ; 0xfec5b LB 0x55
pop DS ; 1f
cld ; fc
push 0ece9h ; 68 e9 ec
- jmp near 03ba9h ; e9 12 4f
+ jmp near 03c56h ; e9 bf 4f
and dl, 0e0h ; 80 e2 e0
db 03ah, 0c2h
; cmp al, dl ; 3a c2
@@ -14282,22 +15193,22 @@ int13_legacy: ; 0xfecb4 LB 0x14
test dl, 080h ; f6 c2 80
jne short 0ecc8h ; 75 06
push 0ece9h ; 68 e9 ec
- jmp near 02df4h ; e9 2c 41
+ jmp near 02edeh ; e9 16 42
int13_notfloppy: ; 0xfecc8 LB 0x14
cmp dl, 0e0h ; 80 fa e0
jc short 0ecdch ; 72 0f
shr ebx, 010h ; 66 c1 eb 10
push bx ; 53
- call 03fc8h ; e8 f3 52
+ call 0408ah ; e8 b5 53
pop bx ; 5b
sal ebx, 010h ; 66 c1 e3 10
jmp short 0ece9h ; eb 0d
int13_disk: ; 0xfecdc LB 0xd
cmp ah, 040h ; 80 fc 40
jnbe short 0ece6h ; 77 05
- call 05299h ; e8 b5 65
+ call 053dfh ; e8 fb 66
jmp short 0ece9h ; eb 03
- call 056d5h ; e8 ec 69
+ call 05820h ; e8 37 6b
int13_out: ; 0xfece9 LB 0x4
pop DS ; 1f
pop ES ; 07
@@ -14493,7 +15404,7 @@ int0e_handler: ; 0xfef57 LB 0x70
iret ; cf
times 0x33 db 0
db 'XM'
-_diskette_param_table: ; 0xfefc7 LB 0xb
+_diskette_param_table: ; 0xfefc7 LB 0xd
scasw ; af
add ah, byte [di] ; 02 25
add dl, byte [bp+si] ; 02 12
@@ -14502,25 +15413,26 @@ _diskette_param_table: ; 0xfefc7 LB 0xb
insb ; 6c
db 0f6h
invd ; 0f 08
-int17_handler: ; 0xfefd2 LB 0xd
+ jmp short 0efd4h ; eb 00
+int17_handler: ; 0xfefd4 LB 0xd
push DS ; 1e
push ES ; 06
pushaw ; 60
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 06d1bh ; e8 40 7d
+ call 0709eh ; e8 c1 80
popaw ; 61
pop ES ; 07
pop DS ; 1f
iret ; cf
-_pmode_IDT: ; 0xfefdf LB 0x6
+_pmode_IDT: ; 0xfefe1 LB 0x6
db 000h, 000h, 000h, 000h, 00fh, 000h
-_rmode_IDT: ; 0xfefe5 LB 0x6
+_rmode_IDT: ; 0xfefe7 LB 0x6
db 0ffh, 003h, 000h, 000h, 000h, 000h
-int1c_handler: ; 0xfefeb LB 0x7a
+int1c_handler: ; 0xfefed LB 0x78
iret ; cf
- times 0x57 db 0
+ times 0x55 db 0
pop ax ; 58
dec bp ; 4d
iret ; cf
@@ -14534,7 +15446,7 @@ int10_handler: ; 0xff065 LB 0x47
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 016f7h ; e8 4d 26
+ call 01715h ; e8 6b 26
hlt ; f4
iret ; cf
int19_relocated: ; 0xff0ac LB 0x90
@@ -14557,28 +15469,28 @@ int19_relocated: ; 0xff0ac LB 0x90
; mov bp, sp ; 8b ec
mov ax, strict word 00001h ; b8 01 00
push ax ; 50
- call 04631h ; e8 61 55
+ call 046f1h ; e8 21 56
inc sp ; 44
inc sp ; 44
test ax, ax ; 85 c0
jne short 0f0feh ; 75 28
mov ax, strict word 00002h ; b8 02 00
push ax ; 50
- call 04631h ; e8 54 55
+ call 046f1h ; e8 14 56
inc sp ; 44
inc sp ; 44
test ax, ax ; 85 c0
jne short 0f0feh ; 75 1b
mov ax, strict word 00003h ; b8 03 00
push strict byte 00003h ; 6a 03
- call 04631h ; e8 46 55
+ call 046f1h ; e8 06 56
inc sp ; 44
inc sp ; 44
test ax, ax ; 85 c0
jne short 0f0feh ; 75 0d
mov ax, strict word 00004h ; b8 04 00
push ax ; 50
- call 04631h ; e8 39 55
+ call 046f1h ; e8 f9 55
inc sp ; 44
inc sp ; 44
test ax, ax ; 85 c0
@@ -14597,7 +15509,7 @@ int19_relocated: ; 0xff0ac LB 0x90
pop bp ; 5d
iret ; cf
or cx, word [bp+si] ; 0b 0a
- or word [di], ax ; 09 05
+ or word [bp+di], cx ; 09 0b
push eax ; 66 50
mov eax, strict dword 000800000h ; 66 b8 00 00 80 00
db 08bh, 0c3h
@@ -14800,7 +15712,7 @@ pci_init_end: ; 0xff291 LB 0x2f
db 089h, 0c0h, 089h, 0c0h, 089h, 0c0h, 089h, 0c0h, 089h, 0c0h, 089h, 0c0h, 024h, 050h, 049h, 052h
db 000h, 001h, 000h, 002h, 000h, 008h, 000h, 000h, 086h, 080h, 000h, 070h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 031h
-_pci_routing_table: ; 0xff2c0 LB 0x581
+_pci_routing_table: ; 0xff2c0 LB 0x1e0
db 000h, 008h, 060h, 0f8h, 0deh, 061h, 0f8h, 0deh, 062h, 0f8h, 0deh, 063h, 0f8h, 0deh, 000h, 000h
db 000h, 010h, 061h, 0f8h, 0deh, 062h, 0f8h, 0deh, 063h, 0f8h, 0deh, 060h, 0f8h, 0deh, 001h, 000h
db 000h, 018h, 062h, 0f8h, 0deh, 063h, 0f8h, 0deh, 060h, 0f8h, 0deh, 061h, 0f8h, 0deh, 002h, 000h
@@ -14831,65 +15743,10 @@ _pci_routing_table: ; 0xff2c0 LB 0x581
db 000h, 0e0h, 063h, 0f8h, 0deh, 060h, 0f8h, 0deh, 061h, 0f8h, 0deh, 062h, 0f8h, 0deh, 01bh, 000h
db 000h, 0e8h, 060h, 0f8h, 0deh, 061h, 0f8h, 0deh, 062h, 0f8h, 0deh, 063h, 0f8h, 0deh, 01ch, 000h
db 000h, 0f0h, 061h, 0f8h, 0deh, 062h, 0f8h, 0deh, 063h, 0f8h, 0deh, 060h, 0f8h, 0deh, 01dh, 000h
- db 0e0h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 058h
- db 04dh
+_pci_routing_table_size: ; 0xff4a0 LB 0x3a1
+ loopne 0f4a3h ; e0 01
+ times 0x39d db 0
+ db 'XM'
int12_handler: ; 0xff841 LB 0xc
sti ; fb
push DS ; 1e
@@ -14906,7 +15763,7 @@ int11_handler: ; 0xff84d LB 0xc
mov ax, word [00010h] ; a1 10 00
pop DS ; 1f
iret ; cf
-int15_handler: ; 0xff859 LB 0x29
+int15_handler: ; 0xff859 LB 0x2e
pushfw ; 9c
push DS ; 1e
push ES ; 06
@@ -14914,32 +15771,34 @@ int15_handler: ; 0xff859 LB 0x29
pop DS ; 1f
cld ; fc
cmp ah, 086h ; 80 fc 86
- je short 0f887h ; 74 23
+ je short 0f88ch ; 74 28
cmp ah, 0e8h ; 80 fc e8
- je short 0f887h ; 74 1e
+ je short 0f88ch ; 74 23
+ cmp ah, 0d0h ; 80 fc d0
+ je short 0f88ch ; 74 1e
pushaw ; 60
cmp ah, 053h ; 80 fc 53
- je short 0f87dh ; 74 0e
- cmp ah, 0c2h ; 80 fc c2
je short 0f882h ; 74 0e
- call 05da6h ; e8 2f 65
+ cmp ah, 0c2h ; 80 fc c2
+ je short 0f887h ; 74 0e
+ call 05ef9h ; e8 7d 66
popaw ; 61
pop ES ; 07
pop DS ; 1f
popfw ; 9d
- jmp short 0f890h ; eb 13
- call 08713h ; e8 93 8e
- jmp short 0f877h ; eb f5
-int15_handler_mouse: ; 0xff882 LB 0x5
- call 06995h ; e8 10 71
- jmp short 0f877h ; eb f0
-int15_handler32: ; 0xff887 LB 0x9
+ jmp short 0f895h ; eb 13
+ call 08ebdh ; e8 38 96
+ jmp short 0f87ch ; eb f5
+int15_handler_mouse: ; 0xff887 LB 0x5
+ call 06d13h ; e8 89 74
+ jmp short 0f87ch ; eb f0
+int15_handler32: ; 0xff88c LB 0x9
pushad ; 66 60
- call 0626fh ; e8 e3 69
+ call 063c6h ; e8 35 6b
popad ; 66 61
- jmp short 0f878h ; eb e8
-iret_modify_cf: ; 0xff890 LB 0x14
- jc short 0f89bh ; 72 09
+ jmp short 0f87dh ; eb e8
+iret_modify_cf: ; 0xff895 LB 0x14
+ jc short 0f8a0h ; 72 09
push bp ; 55
db 08bh, 0ech
; mov bp, sp ; 8b ec
@@ -14952,7 +15811,7 @@ iret_modify_cf: ; 0xff890 LB 0x14
or byte [bp+006h], 001h ; 80 4e 06 01
pop bp ; 5d
iret ; cf
-int74_handler: ; 0xff8a4 LB 0x2e
+int74_handler: ; 0xff8a9 LB 0x2e
sti ; fb
pushaw ; 60
push ES ; 06
@@ -14965,32 +15824,32 @@ int74_handler: ; 0xff8a4 LB 0x2e
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 068cfh ; e8 17 70
+ call 06c49h ; e8 8c 73
pop cx ; 59
- jcxz 0f8c7h ; e3 0c
+ jcxz 0f8cch ; e3 0c
push strict byte 00000h ; 6a 00
pop DS ; 1f
push word [0040eh] ; ff 36 0e 04
pop DS ; 1f
call far [word 00022h] ; ff 1e 22 00
cli ; fa
- call 0e03bh ; e8 70 e7
+ call 0e03bh ; e8 6b e7
add sp, strict byte 00008h ; 83 c4 08
pop DS ; 1f
pop ES ; 07
popaw ; 61
iret ; cf
-int76_handler: ; 0xff8d2 LB 0x19c
+int76_handler: ; 0xff8d7 LB 0x197
push ax ; 50
push DS ; 1e
mov ax, strict word 00040h ; b8 40 00
mov ds, ax ; 8e d8
mov byte [0008eh], 0ffh ; c6 06 8e 00 ff
- call 0e03bh ; e8 5a e7
+ call 0e03bh ; e8 55 e7
pop DS ; 1f
pop ax ; 58
iret ; cf
- times 0x188 db 0
+ times 0x183 db 0
db 'XM'
font8x8: ; 0xffa6e LB 0x421
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
@@ -15057,8 +15916,8 @@ font8x8: ; 0xffa6e LB 0x421
db 000h, 000h, 0fch, 098h, 030h, 064h, 0fch, 000h, 01ch, 030h, 030h, 0e0h, 030h, 030h, 01ch, 000h
db 018h, 018h, 018h, 000h, 018h, 018h, 018h, 000h, 0e0h, 030h, 030h, 01ch, 030h, 030h, 0e0h, 000h
db 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h
- db 080h, 0fch, 0b1h, 075h, 00fh, 006h, 01eh, 00eh, 01fh, 0fch, 066h, 060h, 0e8h, 09eh, 08ah, 066h
- db 061h, 01fh, 007h, 0cfh, 006h, 01eh, 060h, 00eh, 01fh, 0fch, 0e8h, 0ech, 067h, 061h, 01fh, 007h
+ db 080h, 0fch, 0b1h, 075h, 00fh, 006h, 01eh, 00eh, 01fh, 0fch, 066h, 060h, 0e8h, 050h, 092h, 066h
+ db 061h, 01fh, 007h, 0cfh, 006h, 01eh, 060h, 00eh, 01fh, 0fch, 0e8h, 055h, 06bh, 061h, 01fh, 007h
db 0cfh
int70_handler: ; 0xffe8f LB 0x16
push ES ; 06
@@ -15067,7 +15926,7 @@ int70_handler: ; 0xffe8f LB 0x16
push CS ; 0e
pop DS ; 1f
cld ; fc
- call 065bch ; e8 24 67
+ call 06922h ; e8 8a 6a
popaw ; 61
pop DS ; 1f
pop ES ; 07
@@ -15080,34 +15939,37 @@ int08_handler: ; 0xffea5 LB 0xae
sti ; fb
push eax ; 66 50
push DS ; 1e
- db 033h, 0c0h
- ; xor ax, ax ; 33 c0
+ push dx ; 52
+ mov ax, strict word 00040h ; b8 40 00
mov ds, ax ; 8e d8
- mov AL, byte [00440h] ; a0 40 04
+ mov eax, dword [0006ch] ; 66 a1 6c 00
+ inc eax ; 66 40
+ cmp eax, strict dword 0001800b0h ; 66 3d b0 00 18 00
+ jc short 0fec4h ; 72 07
+ db 066h, 033h, 0c0h
+ ; xor eax, eax ; 66 33 c0
+ inc byte [word 00070h] ; fe 06 70 00
+ mov dword [0006ch], eax ; 66 a3 6c 00
+ mov AL, byte [00040h] ; a0 40 00
db 00ah, 0c0h
; or al, al ; 0a c0
- je short 0febdh ; 74 09
- push dx ; 52
+ je short 0feddh ; 74 0e
+ db 0feh, 0c8h
+ ; dec al ; fe c8
+ mov byte [00040h], AL ; a2 40 00
+ jne short 0feddh ; 75 07
mov dx, 003f2h ; ba f2 03
in AL, DX ; ec
and AL, strict byte 0cfh ; 24 cf
out DX, AL ; ee
- pop dx ; 5a
- mov eax, dword [0046ch] ; 66 a1 6c 04
- inc eax ; 66 40
- cmp eax, strict dword 0001800b0h ; 66 3d b0 00 18 00
- jc short 0fed2h ; 72 07
- db 066h, 033h, 0c0h
- ; xor eax, eax ; 66 33 c0
- inc byte [00470h] ; fe 06 70 04
- mov dword [0046ch], eax ; 66 a3 6c 04
int 01ch ; cd 1c
cli ; fa
- call 0e03fh ; e8 63 e1
+ call 0e03fh ; e8 5c e1
+ pop dx ; 5a
pop DS ; 1f
pop eax ; 66 58
iret ; cf
- times 0x11 db 0
+ times 0x9 db 0
pop ax ; 58
dec bp ; 4d
times 0xb db 0
@@ -15154,12 +16016,13 @@ dummy_iret: ; 0xfff53 LB 0x9d
dec bp ; 4d
dec cx ; 49
pop di ; 5f
- sbb AL, strict byte 000h ; 1c 00
+ and ax, strict word 00000h ; 25 00 00
+ add byte [bx+si], dl ; 00 10
+ push CS ; 0e
add byte [bx+si], al ; 00 00
- adc byte [00900h], cl ; 10 0e 00 09
add byte [di], ah ; 00 25
times 0x6f db 0
db 'XM'
cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0
- db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 0f8h
+ db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 026h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
index 9e2fa397..3de91992 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
@@ -1 +1 @@
-595eb98acd3ce26ef5242d5f94e034d2 *VBoxPcBios.rom
+bb8dc7f1c69895d10cad2dadc4306b6d *VBoxPcBios.rom
diff --git a/src/VBox/Devices/PC/BIOS/ahci.c b/src/VBox/Devices/PC/BIOS/ahci.c
index 4c12038c..7a571ba4 100644
--- a/src/VBox/Devices/PC/BIOS/ahci.c
+++ b/src/VBox/Devices/PC/BIOS/ahci.c
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2011 Oracle Corporation
+ * Copyright (C) 2011-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -344,7 +344,7 @@ static void ahci_cmd_data(bio_dsk_t __far *bios_dsk, uint8_t cmd)
/* Lock memory needed for DMA. */
ahci->edds.num_avail = NUM_EDDS_SG;
- DBG_AHCI("AHCI: S/G list for %lu bytes (skip %u)\n",
+ DBG_AHCI("AHCI: S/G list for %lu bytes (skip %u)\n",
(uint32_t)n_sect * sectsz, bios_dsk->drqp.skip_a);
vds_build_sg_list(&ahci->edds, bios_dsk->drqp.buffer, (uint32_t)n_sect * sectsz);
@@ -483,7 +483,7 @@ static void ahci_port_init(ahci_t __far *ahci, uint8_t u8Port)
* Read sectors from an attached AHCI device.
*
* @returns status code.
- * @param bios_dsk Pointer to disk request packet (in the
+ * @param bios_dsk Pointer to disk request packet (in the
* EBDA).
*/
int ahci_read_sectors(bio_dsk_t __far *bios_dsk)
@@ -514,7 +514,7 @@ int ahci_read_sectors(bio_dsk_t __far *bios_dsk)
* Write sectors to an attached AHCI device.
*
* @returns status code.
- * @param bios_dsk Pointer to disk request packet (in the
+ * @param bios_dsk Pointer to disk request packet (in the
* EBDA).
*/
int ahci_write_sectors(bio_dsk_t __far *bios_dsk)
@@ -543,7 +543,7 @@ int ahci_write_sectors(bio_dsk_t __far *bios_dsk)
#define ATA_DATA_IN 0x01
#define ATA_DATA_OUT 0x02
-uint16_t ahci_cmd_packet(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
+uint16_t ahci_cmd_packet(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
uint16_t skip_b, uint32_t length, uint8_t inout, char __far *buffer)
{
bio_dsk_t __far *bios_dsk = read_word(0x0040, 0x000E) :> &EbdaData->bdisk;
@@ -565,7 +565,7 @@ uint16_t ahci_cmd_packet(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
device_id = VBOX_GET_AHCI_DEVICE(device_id);
DBG_AHCI("%s: reading %lu bytes, skip %u/%u, device %d, port %d\n", __func__,
- length, bios_dsk->drqp.skip_b, bios_dsk->drqp.skip_a,
+ length, bios_dsk->drqp.skip_b, bios_dsk->drqp.skip_a,
device_id, bios_dsk->ahcidev[device_id].port);
DBG_AHCI("%s: reading %u %u-byte sectors\n", __func__,
bios_dsk->drqp.nsect, bios_dsk->drqp.sect_sz);
@@ -607,7 +607,7 @@ uint16_t ahci_cmd_packet(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
// return 0; //@todo!!
}
-static void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
+void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
{
uint32_t val;
bio_dsk_t __far *bios_dsk;
@@ -633,6 +633,9 @@ static void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
uint8_t cdcount;
uint8_t removable;
+ /* Clear all errors after the reset. */
+ VBOXAHCI_PORT_WRITE_REG(ahci->iobase, u8Port, AHCI_REG_PORT_SERR, 0xffffffff);
+
devcount_ahci = bios_dsk->ahci_devcnt;
DBG_AHCI("AHCI: Device detected on port %d\n", u8Port);
@@ -650,7 +653,7 @@ static void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
{
uint32_t sectors;
uint16_t cylinders, heads, spt;
- uint16_t lcylinders, lheads, lspt;
+ chs_t lgeo;
uint8_t idxCmosChsBase;
DBG_AHCI("AHCI: Detected hard disk\n");
@@ -710,23 +713,17 @@ static void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
}
if (idxCmosChsBase && inb_cmos(idxCmosChsBase+7))
{
- lcylinders = inb_cmos(idxCmosChsBase + 0) + (inb_cmos(idxCmosChsBase + 1) << 8);
- lheads = inb_cmos(idxCmosChsBase + 2);
- lspt = inb_cmos(idxCmosChsBase + 7);
+ lgeo.cylinders = inb_cmos(idxCmosChsBase + 0) + (inb_cmos(idxCmosChsBase + 1) << 8);
+ lgeo.heads = inb_cmos(idxCmosChsBase + 2);
+ lgeo.spt = inb_cmos(idxCmosChsBase + 7);
}
else
- {
- //@todo: What should we really do if logical geometry isn't in the CMOS?
- lcylinders = cylinders;
- lheads = heads;
- lspt = spt;
- }
+ set_geom_lba(&lgeo, sectors); /* Default EDD-style translated LBA geometry. */
+
BX_INFO("AHCI %d-P#%d: PCHS=%u/%d/%d LCHS=%u/%u/%u %ld sectors\n", devcount_ahci,
- u8Port, cylinders, heads, spt, lcylinders, lheads, lspt, sectors);
+ u8Port, cylinders, heads, spt, lgeo.cylinders, lgeo.heads, lgeo.spt, sectors);
- bios_dsk->devices[hd_index].lchs.heads = lheads;
- bios_dsk->devices[hd_index].lchs.cylinders = lcylinders;
- bios_dsk->devices[hd_index].lchs.spt = lspt;
+ bios_dsk->devices[hd_index].lchs = lgeo;
/* Store the ID of the disk in the BIOS hdidmap. */
hdcount = bios_dsk->hdcount;
@@ -737,7 +734,7 @@ static void ahci_port_detect_device(ahci_t __far *ahci, uint8_t u8Port)
/* Update hdcount in the BDA. */
hdcount = read_byte(0x40, 0x75);
hdcount++;
- write_byte(0x40, 0x75, hdcount);
+ write_byte(0x40, 0x75, hdcount);
}
else if (val == 0xeb140101)
{
@@ -812,7 +809,7 @@ static int ahci_hba_init(uint16_t io_base)
uint16_t ahci_seg;
bio_dsk_t __far *bios_dsk;
ahci_t __far *ahci;
-
+
ebda_seg = read_word(0x0040, 0x000E);
bios_dsk = ebda_seg :> &EbdaData->bdisk;
@@ -829,7 +826,7 @@ static int ahci_hba_init(uint16_t io_base)
DBG_AHCI("AHCI: Could not allocate 1K of memory, can't boot from controller\n");
return 0;
}
- DBG_AHCI("AHCI: ahci_seg=%04x, size=%04x, pointer at EBDA:%04x (EBDA size=%04x)\n",
+ DBG_AHCI("AHCI: ahci_seg=%04x, size=%04x, pointer at EBDA:%04x (EBDA size=%04x)\n",
ahci_seg, sizeof(ahci_t), (uint16_t)&EbdaData->bdisk.ahci_seg, sizeof(ebda_data_t));
bios_dsk->ahci_seg = ahci_seg;
diff --git a/src/VBox/Devices/PC/BIOS/apm.c b/src/VBox/Devices/PC/BIOS/apm.c
index 8050e129..717ea966 100644
--- a/src/VBox/Devices/PC/BIOS/apm.c
+++ b/src/VBox/Devices/PC/BIOS/apm.c
@@ -218,7 +218,7 @@ void BIOSCALL apm_function(sys_regs_t r)
case APM_GET_EVT:
// @todo: error should be different if interface not connected + engaged
SET_AH(APM_ERR_NO_EVENTS); /* PM events don't happen. */
- SET_CF();
+ SET_CF();
break;
default:
BX_INFO("APM: Unsupported function AX=%04X BX=%04X called\n", AX, BX);
diff --git a/src/VBox/Devices/PC/BIOS/ata.c b/src/VBox/Devices/PC/BIOS/ata.c
index 5290edea..921433d2 100644
--- a/src/VBox/Devices/PC/BIOS/ata.c
+++ b/src/VBox/Devices/PC/BIOS/ata.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -82,9 +82,9 @@ void BIOSCALL ata_init(void)
{
uint8_t channel, device;
bio_dsk_t __far *bios_dsk;
-
+
bios_dsk = read_word(0x0040, 0x000E) :> &EbdaData->bdisk;
-
+
// Channels info init.
for (channel=0; channel<BX_MAX_ATA_INTERFACES; channel++) {
bios_dsk->channels[channel].iface = ATA_IFACE_NONE;
@@ -92,7 +92,7 @@ void BIOSCALL ata_init(void)
bios_dsk->channels[channel].iobase2 = 0x0;
bios_dsk->channels[channel].irq = 0;
}
-
+
// Devices info init.
for (device=0; device<BX_MAX_ATA_DEVICES; device++) {
bios_dsk->devices[device].type = DSK_TYPE_NONE;
@@ -110,13 +110,13 @@ void BIOSCALL ata_init(void)
bios_dsk->devices[device].pchs.spt = 0;
bios_dsk->devices[device].sectors = 0;
}
-
+
// hdidmap and cdidmap init.
for (device=0; device<BX_MAX_STORAGE_DEVICES; device++) {
bios_dsk->hdidmap[device] = BX_MAX_STORAGE_DEVICES;
bios_dsk->cdidmap[device] = BX_MAX_STORAGE_DEVICES;
}
-
+
bios_dsk->hdcount = 0;
bios_dsk->cdcount = 0;
}
@@ -134,11 +134,11 @@ void ata_reset(uint16_t device)
uint16_t max;
uint16_t pdelay;
bio_dsk_t __far *bios_dsk;
-
+
bios_dsk = read_word(0x0040, 0x000E) :> &EbdaData->bdisk;
channel = device / 2;
slave = device % 2;
-
+
iobase1 = bios_dsk->channels[channel].iobase1;
iobase2 = bios_dsk->channels[channel].iobase2;
@@ -184,10 +184,10 @@ void ata_reset(uint16_t device)
max = 0x10; /* Speed up for virtual drives. Disks are immediately ready, CDs never */
while(--max>0) {
uint8_t status = inb(iobase1+ATA_CB_STAT);
- if ((status & ATA_CB_STAT_RDY) != 0)
+ if ((status & ATA_CB_STAT_RDY) != 0)
break;
}
-
+
// Enable interrupts
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
}
@@ -235,7 +235,7 @@ uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t c
else
blksize >>= 1;
}
-
+
status = inb(iobase1 + ATA_CB_STAT);
if (status & ATA_CB_STAT_BSY)
{
@@ -271,7 +271,7 @@ uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t c
lba >>= 16;
head = ((uint16_t) (lba & 0x0000000fL)) | 0x40;
}
-
+
outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN);
outb(iobase1 + ATA_CB_FR, 0x00);
outb(iobase1 + ATA_CB_SC, count);
@@ -280,20 +280,20 @@ uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t c
outb(iobase1 + ATA_CB_CH, cylinder >> 8);
outb(iobase1 + ATA_CB_DH, (slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0) | (uint8_t) head );
outb(iobase1 + ATA_CB_CMD, command);
-
+
if (command == ATA_CMD_READ_MULTIPLE || command == ATA_CMD_READ_MULTIPLE_EXT) {
mult_blk_cnt = count;
count = 1;
} else {
mult_blk_cnt = 1;
}
-
+
while (1) {
status = inb(iobase1 + ATA_CB_STAT);
if ( !(status & ATA_CB_STAT_BSY) )
break;
}
-
+
if (status & ATA_CB_STAT_ERR) {
BX_DEBUG_ATA("%s: read error\n", __func__);
// Enable interrupts
@@ -305,17 +305,17 @@ uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t c
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
return 3;
}
-
+
// FIXME : move seg/off translation here
-
+
int_enable(); // enable higher priority interrupts
-
+
while (1) {
-
+
// adjust if there will be an overrun. 2K max sector size
if (FP_OFF(buffer) >= 0xF800)
buffer = MK_FP(FP_SEG(buffer) + 0x80, FP_OFF(buffer) - 0x800);
-
+
if (mode == ATA_MODE_PIO32) {
buffer = rep_insd(buffer, blksize, iobase1);
} else {
@@ -364,7 +364,7 @@ void BIOSCALL ata_detect(void)
uint8_t hdcount, cdcount, device, type;
uint8_t buffer[0x0200];
bio_dsk_t __far *bios_dsk;
-
+
bios_dsk = ebda_seg :> &EbdaData->bdisk;
#if BX_MAX_ATA_INTERFACES > 0
@@ -404,16 +404,16 @@ void BIOSCALL ata_detect(void)
uint16_t iobase1, iobase2;
uint8_t channel, slave;
uint8_t sc, sn, cl, ch, st;
-
+
channel = device / 2;
slave = device % 2;
-
+
iobase1 = bios_dsk->channels[channel].iobase1;
iobase2 = bios_dsk->channels[channel].iobase2;
-
+
// Disable interrupts
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN);
-
+
// Look for device
outb(iobase1+ATA_CB_DH, slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0);
outb(iobase1+ATA_CB_SC, 0x55);
@@ -422,7 +422,7 @@ void BIOSCALL ata_detect(void)
outb(iobase1+ATA_CB_SN, 0x55);
outb(iobase1+ATA_CB_SC, 0x55);
outb(iobase1+ATA_CB_SN, 0xaa);
-
+
// If we found something
sc = inb(iobase1+ATA_CB_SC);
sn = inb(iobase1+ATA_CB_SN);
@@ -461,7 +461,7 @@ void BIOSCALL ata_detect(void)
if (type == DSK_TYPE_ATA) {
uint32_t sectors;
uint16_t cylinders, heads, spt, blksize;
- uint16_t lcylinders, lheads, lspt;
+ chs_t lgeo;
uint8_t chsgeo_base;
uint8_t removable, mode;
@@ -500,35 +500,20 @@ void BIOSCALL ata_detect(void)
case 3:
chsgeo_base = 0x70;
break;
- case 4:
- chsgeo_base = 0x40;
- break;
- case 5:
- chsgeo_base = 0x48;
- break;
- case 6:
- chsgeo_base = 0x50;
- break;
- case 7:
- chsgeo_base = 0x58;
- break;
default:
chsgeo_base = 0;
}
- if (chsgeo_base != 0)
+ if (chsgeo_base)
{
- lcylinders = inb_cmos(chsgeo_base) + (inb_cmos(chsgeo_base+1) << 8);
- lheads = inb_cmos(chsgeo_base+2);
- lspt = inb_cmos(chsgeo_base+7);
+ lgeo.cylinders = inb_cmos(chsgeo_base) + (inb_cmos(chsgeo_base + 1) << 8);
+ lgeo.heads = inb_cmos(chsgeo_base + 2);
+ lgeo.spt = inb_cmos(chsgeo_base + 7);
}
else
- {
- lcylinders = 0;
- lheads = 0;
- lspt = 0;
- }
+ set_geom_lba(&lgeo, sectors); /* Default EDD-style translated LBA geometry. */
+
BX_INFO("ata%d-%d: PCHS=%u/%d/%d LCHS=%u/%u/%u\n", channel, slave,
- cylinders,heads, spt, lcylinders, lheads, lspt);
+ cylinders,heads, spt, lgeo.cylinders, lgeo.heads, lgeo.spt);
bios_dsk->devices[device].device = DSK_DEVICE_HD;
bios_dsk->devices[device].removable = removable;
@@ -538,9 +523,7 @@ void BIOSCALL ata_detect(void)
bios_dsk->devices[device].pchs.cylinders = cylinders;
bios_dsk->devices[device].pchs.spt = spt;
bios_dsk->devices[device].sectors = sectors;
- bios_dsk->devices[device].lchs.heads = lheads;
- bios_dsk->devices[device].lchs.cylinders = lcylinders;
- bios_dsk->devices[device].lchs.spt = lspt;
+ bios_dsk->devices[device].lchs = lgeo;
if (device < 2)
{
uint8_t sum, i;
@@ -555,8 +538,8 @@ void BIOSCALL ata_detect(void)
* to be done at POST time with lots of ugly assembler code, which
* isn't worth the effort of converting from AMI to Award CMOS
* format. Just do it here. */
- fdpt->lcyl = lcylinders;
- fdpt->lhead = lheads;
+ fdpt->lcyl = lgeo.cylinders;
+ fdpt->lhead = lgeo.heads;
fdpt->sig = 0xa0;
fdpt->spt = spt;
fdpt->cyl = cylinders;
@@ -632,7 +615,7 @@ void BIOSCALL ata_detect(void)
for ( i = 39; i > 0; i-- ){
if (*(model+i) == 0x20)
*(model+i) = 0x00;
- else
+ else
break;
}
break;
@@ -708,11 +691,11 @@ uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t
uint16_t device;
uint8_t channel, slave;
uint8_t status, mode;
-
+
device = bios_dsk->drqp.dev_id;
channel = device / 2;
slave = device % 2;
-
+
iobase1 = bios_dsk->channels[channel].iobase1;
iobase2 = bios_dsk->channels[channel].iobase2;
mode = bios_dsk->devices[device].mode;
@@ -721,7 +704,7 @@ uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t
blksize >>= 2;
else
blksize >>= 1;
-
+
status = inb(iobase1 + ATA_CB_STAT);
if (status & ATA_CB_STAT_BSY)
{
@@ -756,7 +739,7 @@ uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t
lba >>= 16;
head = ((uint16_t) (lba & 0x0000000fL)) | 0x40;
}
-
+
outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN);
outb(iobase1 + ATA_CB_FR, 0x00);
outb(iobase1 + ATA_CB_SC, count);
@@ -765,15 +748,15 @@ uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t
outb(iobase1 + ATA_CB_CH, cylinder >> 8);
outb(iobase1 + ATA_CB_DH, (slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0) | (uint8_t) head );
outb(iobase1 + ATA_CB_CMD, command);
-
+
while (1) {
status = inb(iobase1 + ATA_CB_STAT);
if ( !(status & ATA_CB_STAT_BSY) )
break;
}
-
+
if (status & ATA_CB_STAT_ERR) {
- BX_DEBUG_ATA("%s: read error\n", __func__);
+ BX_DEBUG_ATA("%s: write error\n", __func__);
// Enable interrupts
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
return 2;
@@ -783,23 +766,23 @@ uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
return 3;
}
-
+
// FIXME : move seg/off translation here
-
+
int_enable(); // enable higher priority interrupts
-
+
while (1) {
-
+
// adjust if there will be an overrun. 2K max sector size
if (FP_OFF(buffer) >= 0xF800)
buffer = MK_FP(FP_SEG(buffer) + 0x80, FP_OFF(buffer) - 0x800);
-
+
if (mode == ATA_MODE_PIO32) {
buffer = rep_outsd(buffer, blksize, iobase1);
} else {
buffer = rep_outsw(buffer, blksize, iobase1);
}
-
+
bios_dsk->drqp.trsfsectors++;
count--;
while (1) {
@@ -838,7 +821,7 @@ uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t
* Read sectors from an attached ATA device.
*
* @returns status code.
- * @param bios_dsk Pointer to disk request packet (in the
+ * @param bios_dsk Pointer to disk request packet (in the
* EBDA).
*/
int ata_read_sectors(bio_dsk_t __far *bios_dsk)
@@ -872,7 +855,7 @@ int ata_read_sectors(bio_dsk_t __far *bios_dsk)
* Write sectors to an attached ATA device.
*
* @returns status code.
- * @param bios_dsk Pointer to disk request packet (in the
+ * @param bios_dsk Pointer to disk request packet (in the
* EBDA).
*/
int ata_write_sectors(bio_dsk_t __far *bios_dsk)
@@ -903,7 +886,7 @@ int ata_write_sectors(bio_dsk_t __far *bios_dsk)
// 2 : BUSY bit set
// 3 : error
// 4 : not ready
-uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
+uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
uint16_t header, uint32_t length, uint8_t inout, char __far *buffer)
{
uint16_t iobase1, iobase2;
@@ -923,33 +906,33 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
BX_INFO("%s: DATA_OUT not supported yet\n", __func__);
return 1;
}
-
+
// The header length must be even
if (header & 1) {
BX_DEBUG_ATA("%s: header must be even (%04x)\n", __func__, header);
return 1;
}
-
+
iobase1 = bios_dsk->channels[channel].iobase1;
iobase2 = bios_dsk->channels[channel].iobase2;
mode = bios_dsk->devices[device].mode;
transfer = 0L;
-
+
if (cmdlen < 12)
cmdlen = 12;
if (cmdlen > 12)
cmdlen = 16;
cmdlen >>= 1;
-
+
// Reset count of transferred data
// @todo: clear in calling code?
bios_dsk->drqp.trsfsectors = 0;
bios_dsk->drqp.trsfbytes = 0;
-
+
status = inb(iobase1 + ATA_CB_STAT);
if (status & ATA_CB_STAT_BSY)
return 2;
-
+
outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN);
// outb(iobase1 + ATA_CB_FR, 0x00);
// outb(iobase1 + ATA_CB_SC, 0x00);
@@ -958,14 +941,14 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
outb(iobase1 + ATA_CB_CH, 0xfff0 >> 8);
outb(iobase1 + ATA_CB_DH, slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0);
outb(iobase1 + ATA_CB_CMD, ATA_CMD_PACKET);
-
+
// Device should ok to receive command
while (1) {
status = inb(iobase1 + ATA_CB_STAT);
if ( !(status & ATA_CB_STAT_BSY) ) break;
}
-
- if (status & ATA_CB_STAT_ERR) {
+
+ if (status & ATA_CB_STAT_CHK) {
BX_DEBUG_ATA("%s: error, status is %02x\n", __func__, status);
// Enable interrupts
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
@@ -976,59 +959,59 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
return 4;
}
-
+
int_enable(); // enable higher priority interrupts
-
+
// Normalize address
BX_DEBUG_ATA("acp1 buffer ptr: %04x:%04x wlen %04x\n", FP_SEG(cmdbuf), FP_OFF(cmdbuf), cmdlen);
cmdbuf = MK_FP(FP_SEG(cmdbuf) + FP_OFF(cmdbuf) / 16 , FP_OFF(cmdbuf) % 16);
// cmdseg += (cmdoff / 16);
// cmdoff %= 16;
-
+
// Send command to device
rep_outsw(cmdbuf, cmdlen, iobase1);
-
+
if (inout == ATA_DATA_NO) {
status = inb(iobase1 + ATA_CB_STAT);
}
else {
while (1) {
-
+
while (1) {
status = inb(iobase1 + ATA_CB_STAT);
- if ( !(status & ATA_CB_STAT_BSY) )
+ if ( !(status & ATA_CB_STAT_BSY) )
break;
}
-
+
// Check if command completed
if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_DRQ) ) ==0 )
break;
-
- if (status & ATA_CB_STAT_ERR) {
+
+ if (status & ATA_CB_STAT_CHK) {
BX_DEBUG_ATA("%s: error (status %02x)\n", __func__, status);
// Enable interrupts
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
return 3;
}
-
+
// Device must be ready to send data
- if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ | ATA_CB_STAT_ERR) )
+ if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ | ATA_CB_STAT_CHK) )
!= (ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ) ) {
BX_DEBUG_ATA("%s: not ready (status %02x)\n", __func__, status);
// Enable interrupts
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
return 4;
}
-
+
// Normalize address
BX_DEBUG_ATA("acp2 buffer ptr: %04x:%04x\n", FP_SEG(buffer), FP_OFF(buffer));
buffer = MK_FP(FP_SEG(buffer) + FP_OFF(buffer) / 16 , FP_OFF(buffer) % 16);
// bufseg += (bufoff / 16);
// bufoff %= 16;
-
+
// Get the byte count
lcount = ((uint16_t)(inb(iobase1 + ATA_CB_CH))<<8)+inb(iobase1 + ATA_CB_CL);
-
+
// adjust to read what we want
if (header>lcount) {
lbefore = lcount;
@@ -1040,7 +1023,7 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
header = 0;
lcount -= lbefore;
}
-
+
if (lcount>length) {
lafter = lcount - length;
lcount = length;
@@ -1050,13 +1033,13 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
lafter = 0;
length -= lcount;
}
-
+
// Save byte count
count = lcount;
-
+
BX_DEBUG_ATA("Trying to read %04x bytes (%04x %04x %04x) ",lbefore+lcount+lafter,lbefore,lcount,lafter);
BX_DEBUG_ATA("to 0x%04x:0x%04x\n",FP_SEG(buffer),FP_OFF(buffer));
-
+
// If counts not dividable by 4, use 16bits mode
lmode = mode;
if (lbefore & 0x03)
@@ -1065,7 +1048,7 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
lmode = ATA_MODE_PIO16;
if (lafter & 0x03)
lmode = ATA_MODE_PIO16;
-
+
// adds an extra byte if count are odd. before is always even
if (lcount & 0x01) {
lcount += 1;
@@ -1073,7 +1056,7 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
lafter -= 1;
}
}
-
+
if (lmode == ATA_MODE_PIO32) {
lcount >>= 2;
lbefore >>= 2;
@@ -1084,7 +1067,7 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
lbefore >>= 1;
lafter >>= 1;
}
-
+
if (lmode == ATA_MODE_PIO32) {
if (lbefore)
insd_discard(lbefore, iobase1);
@@ -1098,31 +1081,77 @@ uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
if (lafter)
insw_discard(lafter, iobase1);
}
-
-
+
+
// Compute new buffer address
buffer += count;
-
+
// Save transferred bytes count
transfer += count;
bios_dsk->drqp.trsfbytes = transfer;
}
}
-
+
// Final check, device must be ready
- if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DF | ATA_CB_STAT_DRQ | ATA_CB_STAT_ERR) )
+ if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DF | ATA_CB_STAT_DRQ | ATA_CB_STAT_CHK) )
!= ATA_CB_STAT_RDY ) {
BX_DEBUG_ATA("%s: not ready (status %02x)\n", __func__, (unsigned) status);
// Enable interrupts
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
return 4;
}
-
+
// Enable interrupts
outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
return 0;
}
+// ---------------------------------------------------------------------------
+// ATA/ATAPI driver : reset device; intended for ATAPI devices
+// ---------------------------------------------------------------------------
+ // returns
+ // 0 : no error
+ // 1 : error
+uint16_t ata_soft_reset(uint16_t device)
+{
+ uint16_t iobase1, iobase2;
+ uint8_t channel, slave;
+ uint8_t status;
+ bio_dsk_t __far *bios_dsk;
+
+ bios_dsk = read_word(0x0040, 0x000E) :> &EbdaData->bdisk;
+
+ channel = device / 2;
+ slave = device % 2;
+
+ iobase1 = bios_dsk->channels[channel].iobase1;
+ iobase2 = bios_dsk->channels[channel].iobase2;
+
+ /* Send a reset command to the device. */
+ outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15 | ATA_CB_DC_NIEN);
+ outb(iobase1 + ATA_CB_DH, slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0);
+ outb(iobase1 + ATA_CB_CMD, ATA_CMD_DEVICE_RESET);
+
+ /* Wait for the device to clear BSY. */
+ while (1) {
+ status = inb(iobase1 + ATA_CB_STAT);
+ if ( !(status & ATA_CB_STAT_BSY) ) break;
+ }
+
+ /* Final check, device must be ready */
+ if ( (status & (ATA_CB_STAT_BSY | ATA_CB_STAT_RDY | ATA_CB_STAT_DF | ATA_CB_STAT_DRQ | ATA_CB_STAT_CHK) )
+ != ATA_CB_STAT_RDY ) {
+ BX_DEBUG_ATA("%s: not ready (status %02x)\n", __func__, (unsigned) status);
+ /* Enable interrupts */
+ outb(iobase2 + ATA_CB_DC, ATA_CB_DC_HD15);
+ return 1;
+ }
+
+ /* Enable interrupts */
+ outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
+ return 0;
+}
+
// ---------------------------------------------------------------------------
// End of ATA/ATAPI Driver
diff --git a/src/VBox/Devices/PC/BIOS/bios.c b/src/VBox/Devices/PC/BIOS/bios.c
index 83a98d20..66bf8dda 100644
--- a/src/VBox/Devices/PC/BIOS/bios.c
+++ b/src/VBox/Devices/PC/BIOS/bios.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -80,14 +80,22 @@ void write_dword(uint16_t seg, uint16_t offset, uint32_t data)
uint8_t inb_cmos(uint8_t cmos_reg)
{
- outb(0x70, cmos_reg);
- return inb(0x71);
+ uint8_t cmos_port = 0x70;
+
+ if (cmos_reg >= 0x80)
+ cmos_port += 2;
+ outb(cmos_port, cmos_reg);
+ return inb(cmos_port + 1);
}
void outb_cmos(uint8_t cmos_reg, uint8_t val)
{
- outb(0x70, cmos_reg);
- outb(0x71, val);
+ uint8_t cmos_port = 0x70;
+
+ if (cmos_reg >= 0x80)
+ cmos_port += 2;
+ outb(cmos_port, cmos_reg);
+ outb(cmos_port + 1, val);
}
void BIOSCALL dummy_isr_function(pusha_regs_t regs, uint16_t es,
@@ -99,7 +107,7 @@ void BIOSCALL dummy_isr_function(pusha_regs_t regs, uint16_t es,
// interrupt so it will generally be called only once for each unexpected
// interrupt level.
uint8_t isrA, isrB, imr, last_int = 0xFF;
-
+
outb(PIC_MASTER, PIC_CMD_RD_ISR); // Read master ISR
isrA = inb(PIC_MASTER);
if (isrA) {
@@ -174,7 +182,7 @@ void BIOSCALL print_bios_banner(void)
char *bios_conf;
/* Avoid using preprocessing directives within macro arguments. */
- bios_conf =
+ bios_conf =
#ifdef __WATCOMC__
"watcom "
#endif
diff --git a/src/VBox/Devices/PC/BIOS/biosint.h b/src/VBox/Devices/PC/BIOS/biosint.h
index 17cc6912..383cc17a 100644
--- a/src/VBox/Devices/PC/BIOS/biosint.h
+++ b/src/VBox/Devices/PC/BIOS/biosint.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -52,6 +52,7 @@
#define DEBUG_ATA 0
#define DEBUG_AHCI 0
+#define DEBUG_SCSI 0
#define DEBUG_CD_BOOT 0
#define DEBUG_ELTORITO 0
#define DEBUG_INT13_HD 0
@@ -236,7 +237,7 @@ extern bx_bool set_enable_a20(bx_bool val);
#endif /* !VBOX */
#define BX_PANIC(...) bios_printf(BIOS_PRINTF_DEBHALT, __VA_ARGS__)
-/* Because we don't tell the recompiler when guest physical memory
+/* Because we don't tell the recompiler when guest physical memory
* is written, it can incorrectly cache guest code overwritten by
* DMA (bus master or not). We just re-write the memory block to flush
* any of its caches. This is not exactly efficient, but works!
diff --git a/src/VBox/Devices/PC/BIOS/boot.c b/src/VBox/Devices/PC/BIOS/boot.c
index 57212fa6..37daeac2 100644
--- a/src/VBox/Devices/PC/BIOS/boot.c
+++ b/src/VBox/Devices/PC/BIOS/boot.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -91,17 +91,17 @@ static const char drivetypes[][10]={"Floppy","Hard Disk","CD-ROM","LAN"};
void print_boot_device(uint8_t cdboot, uint8_t lanboot, uint8_t drive)
{
int i;
-
+
// cdboot contains 0 if lan/floppy/harddisk, 1 otherwise
// lanboot contains 0 if floppy/harddisk, 1 otherwise
// drive contains real/emulated boot drive
-
+
if(cdboot)i=2; // CD-Rom
else if(lanboot)i=3; // LAN
else if((drive&0x0080)==0x00)i=0; // Floppy
else if((drive&0x0080)==0x80)i=1; // Hard drive
else return;
-
+
BX_INFO("Booting from %s...\n",drivetypes[i]);
}
@@ -110,17 +110,17 @@ void print_boot_device(uint8_t cdboot, uint8_t lanboot, uint8_t drive)
// displays the reason why boot failed
//--------------------------------------------------------------------------
//@todo: pass inputs as bit flags rather than bytes?
-void print_boot_failure(uint8_t cdboot, uint8_t lanboot, uint8_t drive,
+void print_boot_failure(uint8_t cdboot, uint8_t lanboot, uint8_t drive,
uint8_t reason, uint8_t lastdrive)
{
uint16_t drivenum = drive&0x7f;
-
+
// cdboot: 1 if boot from cd, 0 otherwise
// lanboot: 1 if boot from lan, 0 otherwise
// drive : drive number
// reason: 0 signature check failed, 1 read error
// lastdrive: 1 boot drive is the last one in boot sequence
-
+
if (cdboot)
BX_INFO("Boot from %s failed\n",drivetypes[2]);
else if (lanboot)
@@ -129,7 +129,7 @@ void print_boot_failure(uint8_t cdboot, uint8_t lanboot, uint8_t drive,
BX_INFO("Boot from %s %d failed\n", drivetypes[1],drivenum);
else
BX_INFO("Boot from %s %d failed\n", drivetypes[0],drivenum);
-
+
if (lastdrive==1) {
if (reason==0)
BX_PANIC("No bootable medium found! System halted.\n");
@@ -161,7 +161,7 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
uint16_t bootseg;
uint16_t status;
uint8_t lastdrive=0;
-
+
// if BX_ELTORITO_BOOT is not defined, old behavior
// check bit 5 in CMOS reg 0x2d. load either 0x00 or 0x80 into DL
// in preparation for the initial INT 13h (0=floppy A:, 0x80=C:)
@@ -180,7 +180,7 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
// 0x03 : first cdrom
// 0x04 : local area network
// else : boot failure
-
+
// Get the boot sequence
#if BX_ELTORITO_BOOT
bootseq=inb_cmos(0x3d);
@@ -191,15 +191,15 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
/* Boot delay hack. */
if (bseqnr == 1)
delay_boot((inb_cmos(0x3c) & 0xf0) >> 4); /* Implemented in logo.c */
-
+
if (bseqnr==2) bootseq >>= 4;
if (bseqnr==3) bootseq >>= 8;
if (bseqnr==4) bootseq >>= 12;
if (bootseq<0x10) lastdrive = 1;
bootdrv=0x00; bootcd=0;
bootlan=0;
- BX_INFO("Boot : bseqnr=%d, bootseq=%x\r\n",bseqnr, bootseq);
-
+ BX_INFO("Boot : bseqnr=%d, bootseq=%x\r\n",bseqnr, bootseq);
+
switch(bootseq & 0x0f) {
case 0x01:
bootdrv=0x00;
@@ -209,7 +209,7 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
{
// Get the Boot drive.
uint8_t boot_drive = read_byte(ebda_seg, (uint16_t)&EbdaData->uForceBootDrive);
-
+
bootdrv = boot_drive + 0x80;
bootcd=0;
break;
@@ -223,7 +223,7 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
}
#else
bootseq=inb_cmos(0x2d);
-
+
if (bseqnr==2) {
bootseq ^= 0x20;
lastdrive = 1;
@@ -231,25 +231,25 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
bootdrv=0x00; bootcd=0;
if((bootseq&0x20)==0) bootdrv=0x80;
#endif // BX_ELTORITO_BOOT
-
+
#if BX_ELTORITO_BOOT
// We have to boot from cd
if (bootcd != 0) {
status = cdrom_boot();
-
+
// If failure
if ( (status & 0x00ff) !=0 ) {
print_cdromboot_failure(status);
print_boot_failure(bootcd, bootlan, bootdrv, 1, lastdrive);
return 0x00000000;
}
-
+
bootseg = read_word(ebda_seg,(uint16_t)&EbdaData->cdemu.load_segment);
bootdrv = (uint8_t)(status>>8);
}
-
+
#endif // BX_ELTORITO_BOOT
-
+
// Check for boot from LAN first
if (bootlan == 1) {
uint8_t __far *fplan;
@@ -270,7 +270,7 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
print_boot_device(bootcd, bootlan, bootdrv);
netboot_entry = (void __far *)(fplan + 6);
netboot_entry();
- }
+ }
else
{
//Found Normal Pnp ROM
@@ -281,7 +281,7 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
}
}
}
-
+
// boot from LAN will not return if successful.
print_boot_failure(bootcd, bootlan, bootdrv, 1, lastdrive);
return 0x00000000;
@@ -290,14 +290,14 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
// We have to boot from harddisk or floppy
if (bootcd == 0 && bootlan == 0) {
bootseg=0x07c0;
-
+
status = read_boot_sec(bootdrv,bootseg);
if (status != 0) {
print_boot_failure(bootcd, bootlan, bootdrv, 1, lastdrive);
return 0x00000000;
}
}
-
+
// There is *no* requirement whatsoever for a valid floppy boot sector
// to have a 55AAh signature. UNIX boot floppies typically have no such
// signature. In general, it is impossible to tell a valid bootsector
@@ -309,27 +309,27 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
// extremely unlikely to be valid.
if (bootdrv != 0) bootchk = 0;
else bootchk = 1; /* disable 0x55AA signature check on drive A: */
-
+
#if BX_ELTORITO_BOOT
// if boot from cd, no signature check
if (bootcd != 0)
bootchk = 1;
#endif // BX_ELTORITO_BOOT
-
+
if (read_word(bootseg,0) == read_word(bootseg,2)
|| (bootchk == 0 && read_word(bootseg,0x1fe) != 0xaa55))
{
print_boot_failure(bootcd, bootlan, bootdrv, 0, lastdrive);
return 0x00000000;
}
-
+
#if BX_ELTORITO_BOOT
// Print out the boot string
print_boot_device(bootcd, bootlan, bootdrv);
#else // BX_ELTORITO_BOOT
print_boot_device(0, bootlan, bootdrv);
#endif // BX_ELTORITO_BOOT
-
+
// return the boot segment
return (((uint32_t)bootdrv) << 16) + bootseg;
}
diff --git a/src/VBox/Devices/PC/BIOS/disk.c b/src/VBox/Devices/PC/BIOS/disk.c
index 763b7283..4a541abd 100644
--- a/src/VBox/Devices/PC/BIOS/disk.c
+++ b/src/VBox/Devices/PC/BIOS/disk.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -92,6 +92,33 @@ dsk_acc_t dskacc[DSKTYP_CNT] = {
#define ES r.es
#define FLAGS r.ra.flags.u.r16.flags
+
+/*
+ * Build translated CHS geometry given a disk size in sectors. Based on
+ * Phoenix EDD 3.0. This is used as a fallback to generate sane logical
+ * geometry in case none was provided in CMOS.
+ */
+void set_geom_lba(chs_t __far *lgeo, uint32_t nsectors)
+{
+ uint32_t limit = 8257536; /* 1024 * 128 * 63 */
+ unsigned heads = 255;
+ int i;
+
+ /* Start with ~4GB limit, go down to 504MB. */
+ for (i = 0; i < 4; ++i) {
+ if (nsectors <= limit)
+ heads = (heads + 1) / 2;
+ limit /= 2;
+ }
+
+ lgeo->cylinders = nsectors / (heads * 63UL);
+ if (lgeo->cylinders > 1024)
+ lgeo->cylinders = 1024;
+ lgeo->heads = heads;
+ lgeo->spt = 63; /* Always 63 sectors per track, the maximum. */
+}
+
+
void BIOSCALL int13_harddisk(disk_regs_t r)
{
uint32_t lba;
@@ -105,16 +132,16 @@ void BIOSCALL int13_harddisk(disk_regs_t r)
bios_dsk = read_word(0x0040,0x000E) :> &EbdaData->bdisk;
write_byte(0x0040, 0x008e, 0); // clear completion flag
-
+
// basic check : device has to be defined
if ( (GET_ELDL() < 0x80) || (GET_ELDL() >= 0x80 + BX_MAX_STORAGE_DEVICES) ) {
BX_DEBUG("%s: function %02x, ELDL out of range %02x\n", __func__, GET_AH(), GET_ELDL());
goto int13_fail;
}
-
+
// Get the ata channel
device = bios_dsk->hdidmap[GET_ELDL()-0x80];
-
+
// basic check : device has to be valid
if (device >= BX_MAX_STORAGE_DEVICES) {
BX_DEBUG("%s: function %02x, unmapped device for ELDL=%02x\n", __func__, GET_AH(), GET_ELDL());
@@ -150,8 +177,8 @@ void BIOSCALL int13_harddisk(disk_regs_t r)
cylinder |= ( ((uint16_t) GET_CL()) << 2) & 0x300;
sector = (GET_CL() & 0x3f);
head = GET_DH();
-
- /* Segment and offset are in ES:BX. */
+
+ /* Segment and offset are in ES:BX. */
if ( (count > 128) || (count == 0) ) {
BX_INFO("%s: function %02x, count out of range!\n", __func__, GET_AH());
goto int13_fail;
@@ -167,7 +194,7 @@ void BIOSCALL int13_harddisk(disk_regs_t r)
BX_INFO("%s: function %02x, disk %02x, parameters out of range %04x/%04x/%04x!\n", __func__, GET_AH(), GET_DL(), cylinder, head, sector);
goto int13_fail;
}
-
+
// FIXME verify
if ( GET_AH() == 0x04 )
goto int13_success;
@@ -179,6 +206,9 @@ void BIOSCALL int13_harddisk(disk_regs_t r)
sector = 0; // this forces the command to be lba
}
+ BX_DEBUG_INT13_HD("%s: %d sectors from lba %lu @ %04x:%04x\n", __func__,
+ count, lba, ES, BX);
+
/* Clear the count of transferred sectors/bytes. */
bios_dsk->drqp.trsfsectors = 0;
bios_dsk->drqp.trsfbytes = 0;
@@ -197,13 +227,13 @@ void BIOSCALL int13_harddisk(disk_regs_t r)
// Set nb of sector transferred
SET_AL(bios_dsk->drqp.trsfsectors);
-
+
if (status != 0) {
BX_INFO("%s: function %02x, error %02x !\n", __func__, GET_AH(), status);
SET_AH(0x0c);
goto int13_fail_noah;
}
-
+
goto int13_success;
break;
@@ -228,10 +258,10 @@ void BIOSCALL int13_harddisk(disk_regs_t r)
SET_CL(((nlc >> 2) & 0xc0) | (nlspt & 0x3f));
SET_DH(nlh - 1);
SET_DL(count); /* FIXME returns 0, 1, or n hard drives */
-
+
// FIXME should set ES & DI
// @todo: Actually, the above comment is nonsense.
-
+
goto int13_success;
break;
@@ -259,7 +289,7 @@ void BIOSCALL int13_harddisk(disk_regs_t r)
lba = (uint32_t)cylinder * head * sector;
CX = lba >> 16;
DX = lba & 0xffff;
-
+
SET_AH(3); // hard disk accessible
goto int13_success_noah;
break;
@@ -313,19 +343,20 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
bios_dsk = read_word(0x0040,0x000E) :> &EbdaData->bdisk;
- BX_DEBUG_INT13_HD("%s: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", __func__, AX, BX, CX, DX, ES);
-
+ BX_DEBUG_INT13_HD("%s: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x DS=%04x SI=%04x\n",
+ __func__, AX, BX, CX, DX, ES, DS, SI);
+
write_byte(0x0040, 0x008e, 0); // clear completion flag
-
+
// basic check : device has to be defined
if ( (GET_ELDL() < 0x80) || (GET_ELDL() >= 0x80 + BX_MAX_STORAGE_DEVICES) ) {
BX_DEBUG("%s: function %02x, ELDL out of range %02x\n", __func__, GET_AH(), GET_ELDL());
goto int13x_fail;
}
-
+
// Get the ata channel
device = bios_dsk->hdidmap[GET_ELDL()-0x80];
-
+
// basic check : device has to be valid
if (device >= BX_MAX_STORAGE_DEVICES) {
BX_DEBUG("%s: function %02x, unmapped device for ELDL=%02x\n", __func__, GET_AH(), GET_ELDL());
@@ -352,7 +383,7 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
segment = i13_ext->segment;
offset = i13_ext->offset;
- BX_DEBUG_INT13_HD("%s: %d sectors from lba %u @ %04x:%04x\n", __func__,
+ BX_DEBUG_INT13_HD("%s: %d sectors from lba %lu @ %04x:%04x\n", __func__,
count, i13_ext->lba1, segment, offset);
// Can't use 64 bits lba
@@ -361,7 +392,7 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
BX_PANIC("%s: function %02x. Can't use 64bits lba\n", __func__, GET_AH());
goto int13x_fail;
}
-
+
// Get 32 bits lba and check
lba = i13_ext->lba1;
@@ -386,18 +417,18 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
bios_dsk->drqp.sect_sz = 512; //@todo: device specific?
bios_dsk->drqp.sector = 0; /* Indicate LBA. */
bios_dsk->drqp.dev_id = device;
-
+
/* Execute the read or write command. */
status = dskacc[type].a[GET_AH() - 0x42](bios_dsk);
count = bios_dsk->drqp.trsfsectors;
i13_ext->count = count;
-
+
if (status != 0) {
BX_INFO("%s: function %02x, error %02x !\n", __func__, GET_AH(), status);
SET_AH(0x0c);
goto int13x_fail_noah;
}
-
+
goto int13x_success;
break;
@@ -418,7 +449,7 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
/* Check if buffer is large enough. */
if (size < 0x1a)
goto int13x_fail;
-
+
/* Fill in EDD 1.x table. */
if (size >= 0x1a) {
uint16_t blksize;
@@ -443,11 +474,11 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
if (size >= 0x1e) {
uint8_t channel, irq, mode, checksum, i, translation;
uint16_t iobase1, iobase2, options;
-
+
dpt->size = 0x1e;
dpt->dpte_segment = ebda_seg;
dpt->dpte_offset = (uint16_t)&EbdaData->bdisk.dpte;
-
+
// Fill in dpte
channel = device / 2;
iobase1 = bios_dsk->channels[channel].iobase1;
@@ -455,13 +486,13 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
irq = bios_dsk->channels[channel].irq;
mode = bios_dsk->devices[device].mode;
translation = bios_dsk->devices[device].translation;
-
+
options = (translation == GEO_TRANSLATION_NONE ? 0 : 1 << 3); // chs translation
options |= (1 << 4); // lba translation
options |= (mode == ATA_MODE_PIO32 ? 1 : 0 << 7);
options |= (translation == GEO_TRANSLATION_LBA ? 1 : 0 << 9);
options |= (translation == GEO_TRANSLATION_RECHS ? 3 : 0 << 9);
-
+
bios_dsk->dpte.iobase1 = iobase1;
bios_dsk->dpte.iobase2 = iobase2;
bios_dsk->dpte.prefix = (0xe | (device % 2)) << 4;
@@ -473,7 +504,7 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
bios_dsk->dpte.options = options;
bios_dsk->dpte.reserved = 0;
bios_dsk->dpte.revision = 0x11;
-
+
checksum = 0;
for (i = 0; i < 15; ++i)
checksum += read_byte(ebda_seg, (uint16_t)&EbdaData->bdisk.dpte + i);
@@ -489,13 +520,13 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
channel = device / 2;
iface = bios_dsk->channels[channel].iface;
iobase1 = bios_dsk->channels[channel].iobase1;
-
+
dpt->size = 0x42;
dpt->key = 0xbedd;
dpt->dpi_length = 0x24;
dpt->reserved1 = 0;
dpt->reserved2 = 0;
-
+
if (iface == ATA_IFACE_ISA) {
dpt->host_bus[0] = 'I';
dpt->host_bus[1] = 'S';
@@ -513,7 +544,7 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
dpt->iface_type[5] = ' ';
dpt->iface_type[6] = ' ';
dpt->iface_type[7] = ' ';
-
+
if (iface == ATA_IFACE_ISA) {
((uint16_t __far *)dpt->iface_path)[0] = iobase1;
((uint16_t __far *)dpt->iface_path)[1] = 0;
@@ -525,7 +556,7 @@ void BIOSCALL int13_harddisk_ext(disk_regs_t r)
((uint16_t __far *)dpt->device_path)[0] = device & 1; // device % 2; @todo: correct?
((uint16_t __far *)dpt->device_path)[1] = 0;
((uint32_t __far *)dpt->device_path)[1] = 0;
-
+
checksum = 0;
for (i = 30; i < 64; i++)
checksum += read_byte(DS, SI + i);
diff --git a/src/VBox/Devices/PC/BIOS/ebda.h b/src/VBox/Devices/PC/BIOS/ebda.h
index b46f412d..adc0ea75 100644
--- a/src/VBox/Devices/PC/BIOS/ebda.h
+++ b/src/VBox/Devices/PC/BIOS/ebda.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -214,11 +214,14 @@ typedef struct {
uint16_t skip_a; /* Bytes to skip after transfer. */
} disk_req_t;
-uint16_t ahci_cmd_packet(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
- uint16_t header, uint32_t length, uint8_t inout, char __far *buffer);
+extern uint16_t ahci_cmd_packet(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
+ uint16_t header, uint32_t length, uint8_t inout, char __far *buffer);
+extern uint16_t scsi_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
+ uint16_t header, uint32_t length, uint8_t inout, char __far *buffer);
+extern uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
+ uint16_t header, uint32_t length, uint8_t inout, char __far *buffer);
-uint16_t ata_cmd_packet(uint16_t device, uint8_t cmdlen, char __far *cmdbuf,
- uint16_t header, uint32_t length, uint8_t inout, char __far *buffer);
+extern uint16_t ata_soft_reset(uint16_t device);
/* All BIOS disk information. Disk-related code in the BIOS should not need
* anything outside of this structure.
@@ -243,7 +246,7 @@ typedef struct {
#ifdef VBOX_WITH_SCSI
/* SCSI bus-specific device information. */
scsi_dev_t scsidev[BX_MAX_SCSI_DEVICES];
- uint8_t scsi_hdcount; /* Number of SCSI disks. */
+ uint8_t scsi_devcount; /* Number of SCSI devices. */
#endif
#ifdef VBOX_WITH_AHCI
@@ -314,6 +317,8 @@ int __fastcall scsi_write_sectors(bio_dsk_t __far *bios_dsk);
int __fastcall ahci_read_sectors(bio_dsk_t __far *bios_dsk);
int __fastcall ahci_write_sectors(bio_dsk_t __far *bios_dsk);
+extern void set_geom_lba(chs_t __far *lgeo, uint32_t nsectors);
+
// @todo: put this elsewhere (and change/eliminate?)
#define SET_DISK_RET_STATUS(status) write_byte(0x0040, 0x0074, status)
diff --git a/src/VBox/Devices/PC/BIOS/eltorito.c b/src/VBox/Devices/PC/BIOS/eltorito.c
index 6e12fc4a..c33c95ae 100644
--- a/src/VBox/Devices/PC/BIOS/eltorito.c
+++ b/src/VBox/Devices/PC/BIOS/eltorito.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2013 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -93,11 +93,48 @@ typedef struct {
ct_assert(sizeof(cdb_atapi) == 12);
+/* Generic ATAPI/SCSI CD-ROM access routine signature. */
+typedef uint16_t (* cd_pkt_func)(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
+ uint16_t header, uint32_t length, uint8_t inout, char __far *buffer);
+
+/* Pointers to HW specific CD-ROM access routines. */
+cd_pkt_func pktacc[DSKTYP_CNT] = {
+ [DSK_TYPE_ATAPI] = { ata_cmd_packet },
+#ifdef VBOX_WITH_AHCI
+ [DSK_TYPE_AHCI] = { ahci_cmd_packet },
+#endif
+#ifdef VBOX_WITH_SCSI
+ [DSK_TYPE_SCSI] = { scsi_cmd_packet },
+#endif
+};
+
+#if defined(VBOX_WITH_AHCI) || defined(VBOX_WITH_SCSI)
+uint16_t dummy_soft_reset(uint16_t device_id)
+{
+ return 0;
+}
+#endif
+
+/* Generic reset routine signature. */
+typedef uint16_t (* cd_rst_func)(uint16_t device_id);
+
+/* Pointers to HW specific CD-ROM reset routines. */
+cd_rst_func softrst[DSKTYP_CNT] = {
+ [DSK_TYPE_ATAPI] = { ata_soft_reset },
+#ifdef VBOX_WITH_AHCI
+ [DSK_TYPE_AHCI] = { dummy_soft_reset },
+#endif
+#ifdef VBOX_WITH_SCSI
+ [DSK_TYPE_SCSI] = { dummy_soft_reset },
+#endif
+};
+
+
// ---------------------------------------------------------------------------
// Start of El-Torito boot functions
// ---------------------------------------------------------------------------
-// !! TODO !! convert EBDA accesses to far pointers
+// !! TODO !! convert EBDA accesses to far pointers
extern int diskette_param_table;
@@ -106,7 +143,7 @@ void BIOSCALL cdemu_init(void)
{
// @TODO: a macro or a function for getting the EBDA segment
uint16_t ebda_seg = read_word(0x0040,0x000E);
-
+
// the only important data is this one for now
write_byte(ebda_seg,(uint16_t)&EbdaData->cdemu.active, 0x00);
}
@@ -115,7 +152,7 @@ uint8_t BIOSCALL cdemu_isactive(void)
{
// @TODO: a macro or a function for getting the EBDA segment
uint16_t ebda_seg = read_word(0x0040,0x000E);
-
+
return read_byte(ebda_seg,(uint16_t)&EbdaData->cdemu.active);
}
@@ -123,7 +160,7 @@ uint8_t BIOSCALL cdemu_emulated_drive(void)
{
// @TODO: a macro or a function for getting the EBDA segment
uint16_t ebda_seg = read_word(0x0040,0x000E);
-
+
return read_byte(ebda_seg,(uint16_t)&EbdaData->cdemu.emulated_drive);
}
@@ -139,17 +176,17 @@ void BIOSCALL int13_eltorito(disk_regs_t r)
cdemu = ebda_seg :> &EbdaData->cdemu;
-
+
BX_DEBUG_INT13_ET("%s: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", __func__, AX, BX, CX, DX, ES);
// BX_DEBUG_INT13_ET("%s: SS=%04x DS=%04x ES=%04x DI=%04x SI=%04x\n", __func__, get_SS(), DS, ES, DI, SI);
-
+
switch (GET_AH()) {
- // FIXME ElTorito Various. Should be implemented
+ // FIXME ElTorito Various. Not implemented in many real BIOSes.
case 0x4a: // ElTorito - Initiate disk emu
case 0x4c: // ElTorito - Initiate disk emu and boot
case 0x4d: // ElTorito - Return Boot catalog
- BX_PANIC("%s: call with AX=%04x. Please report\n", __func__, AX);
+ BX_INFO("%s: call with AX=%04x not implemented.\n", __func__, AX);
goto int13_fail;
break;
@@ -168,7 +205,7 @@ void BIOSCALL int13_eltorito(disk_regs_t r)
write_byte(DS,SI+0x10,cdemu->vdevice.cylinders);
write_byte(DS,SI+0x11,cdemu->vdevice.spt);
write_byte(DS,SI+0x12,cdemu->vdevice.heads);
-
+
// If we have to terminate emulation
if(GET_AL() == 0x00) {
// FIXME ElTorito Various. Should be handled accordingly to spec
@@ -206,18 +243,18 @@ int13_success:
static uint16_t device_is_cdrom(uint8_t device)
{
bio_dsk_t __far *bios_dsk;
-
+
bios_dsk = read_word(0x0040, 0x000E) :> &EbdaData->bdisk;
-
+
if (device >= BX_MAX_STORAGE_DEVICES)
return 0;
-
+
// if (bios_dsk->devices[device].type != DSK_TYPE_ATAPI)
// return 0;
-
+
if (bios_dsk->devices[device].device != DSK_DEVICE_CDROM)
return 0;
-
+
return 1;
}
@@ -266,11 +303,7 @@ uint16_t cdrom_boot(void)
for (read_try = 0; read_try <= 4; ++read_try)
{
- //@todo: Use indirect calls instead?
- if (device > BX_MAX_ATA_DEVICES)
- error = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer);
- else
- error = ata_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer);
+ error = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer);
if (!error)
break;
}
@@ -303,11 +336,7 @@ uint16_t cdrom_boot(void)
bios_dsk->drqp.sect_sz = 512;
#endif
- if (device > BX_MAX_ATA_DEVICES)
- error = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer);
- else
- error = ata_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer);
-
+ error = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer);
if (error != 0)
return 7;
@@ -351,10 +380,16 @@ uint16_t cdrom_boot(void)
nbsectors = ((uint16_t *)buffer)[0x26 / 2];
cdemu->sector_count = nbsectors;
+ /* Sanity check the sector count. In incorrectly mastered CDs, it might
+ * be zero. If it's more than 512K, reject it as well.
+ */
+ if (nbsectors == 0 || nbsectors > 1024)
+ return 12;
+
lba = *((uint32_t *)&buffer[0x28]);
cdemu->ilba = lba;
- BX_DEBUG_ELTORITO("Emulate drive %02x, type %02x, LBA %lu\n",
+ BX_DEBUG_ELTORITO("Emulate drive %02x, type %02x, LBA %lu\n",
cdemu->emulated_drive, cdemu->media, cdemu->ilba);
/* Read the disk image's boot sector into memory. */
@@ -365,19 +400,16 @@ uint16_t cdrom_boot(void)
bios_dsk->drqp.nsect = 1 + (nbsectors - 1) / 4;
bios_dsk->drqp.sect_sz = 512;
- bios_dsk->drqp.skip_a = 2048 - nbsectors * 512UL % 2048;
+ bios_dsk->drqp.skip_a = (2048 - nbsectors * 512) % 2048;
- if (device > BX_MAX_ATA_DEVICES)
- error = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, 0, nbsectors*512L, ATA_DATA_IN, MK_FP(boot_segment,0));
- else
- error = ata_cmd_packet(device, 12, (char __far *)&atapicmd, 0, nbsectors*512L, ATA_DATA_IN, MK_FP(boot_segment,0));
+ error = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, 0, nbsectors*512L, ATA_DATA_IN, MK_FP(boot_segment,0));
bios_dsk->drqp.skip_a = 0;
if (error != 0)
- return 12;
+ return 13;
- BX_DEBUG_ELTORITO("Emulate drive %02x, type %02x, LBA %lu\n",
+ BX_DEBUG_ELTORITO("Emulate drive %02x, type %02x, LBA %lu\n",
cdemu->emulated_drive, cdemu->media, cdemu->ilba);
/* Set up emulated drive geometry based on the media type. */
switch (cdemu->media) {
@@ -448,23 +480,29 @@ void BIOSCALL int13_cdemu(disk_regs_t r)
BX_DEBUG_INT13_ET("%s: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", __func__, AX, BX, CX, DX, ES);
/* at this point, we are emulating a floppy/harddisk */
-
+
// Recompute the device number
device = cdemu->controller_index * 2;
device += cdemu->device_spec;
-
+
SET_DISK_RET_STATUS(0x00);
-
+
/* basic checks : emulation should be active, dl should equal the emulated drive */
if (!cdemu->active || (cdemu->emulated_drive != GET_DL())) {
BX_INFO("%s: function %02x, emulation not active for DL= %02x\n", __func__, GET_AH(), GET_DL());
goto int13_fail;
}
-
+
switch (GET_AH()) {
- // all those functions return SUCCESS
case 0x00: /* disk controller reset */
+ if (pktacc[bios_dsk->devices[device].type])
+ {
+ status = softrst[bios_dsk->devices[device].type](device);
+ }
+ goto int13_success;
+ break;
+ // all those functions return SUCCESS
case 0x09: /* initialize drive parameters */
case 0x0c: /* seek to specified cylinder */
case 0x0d: /* alternate disk reset */ // FIXME ElTorito Various. should really reset ?
@@ -486,7 +524,7 @@ void BIOSCALL int13_cdemu(disk_regs_t r)
status=read_byte(0x0040, 0x0074);
SET_AH(status);
SET_DISK_RET_STATUS(0);
-
+
/* set CF if error status read */
if (status)
goto int13_fail_nostatus;
@@ -500,7 +538,7 @@ void BIOSCALL int13_cdemu(disk_regs_t r)
vcylinders = cdemu->vdevice.cylinders;
vheads = cdemu->vdevice.heads;
ilba = cdemu->ilba;
-
+
sector = GET_CL() & 0x003f;
cylinder = (GET_CL() & 0x00c0) << 2 | GET_CH();
head = GET_DH();
@@ -514,31 +552,31 @@ void BIOSCALL int13_cdemu(disk_regs_t r)
// no sector to read ?
if(nbsectors==0)
goto int13_success;
-
+
// sanity checks sco openserver needs this!
if ((sector > vspt)
|| (cylinder >= vcylinders)
|| (head >= vheads)) {
goto int13_fail;
}
-
+
// After validating the input, verify does nothing
if (GET_AH() == 0x04)
goto int13_success;
-
+
segment = ES+(BX / 16);
offset = BX % 16;
-
+
// calculate the virtual lba inside the image
vlba=((((uint32_t)cylinder*(uint32_t)vheads)+(uint32_t)head)*(uint32_t)vspt)+((uint32_t)(sector-1));
-
+
// In advance so we don't lose the count
SET_AL(nbsectors);
-
+
// start lba on cd
slba = (uint32_t)vlba / 4;
before = (uint32_t)vlba % 4;
-
+
// end lba on cd
elba = (uint32_t)(vlba + nbsectors - 1) / 4;
@@ -547,16 +585,13 @@ void BIOSCALL int13_cdemu(disk_regs_t r)
atapicmd.lba = swap_32(ilba + slba);
atapicmd.nsect = swap_16(elba - slba + 1);
- bios_dsk->drqp.nsect = elba - slba + 1;
+ bios_dsk->drqp.nsect = nbsectors;
bios_dsk->drqp.sect_sz = 512;
bios_dsk->drqp.skip_b = before * 512;
- bios_dsk->drqp.skip_a = 2048 - nbsectors * 512UL % 2048 - bios_dsk->drqp.skip_b;
+ bios_dsk->drqp.skip_a = ((4 - nbsectors % 4 - before) * 512) % 2048;
- if (device > BX_MAX_ATA_DEVICES)
- status = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, before*512, nbsectors*512L, ATA_DATA_IN, MK_FP(segment,offset));
- else
- status = ata_cmd_packet(device, 12, (char __far *)&atapicmd, before*512, nbsectors*512L, ATA_DATA_IN, MK_FP(segment,offset));
+ status = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, before*512, nbsectors*512L, ATA_DATA_IN, MK_FP(segment,offset));
bios_dsk->drqp.skip_b = 0;
bios_dsk->drqp.skip_a = 0;
@@ -567,7 +602,7 @@ void BIOSCALL int13_cdemu(disk_regs_t r)
SET_AL(0);
goto int13_fail_noah;
}
-
+
goto int13_success;
break;
@@ -575,7 +610,7 @@ void BIOSCALL int13_cdemu(disk_regs_t r)
vspt = cdemu->vdevice.spt;
vcylinders = cdemu->vdevice.cylinders - 1;
vheads = cdemu->vdevice.heads - 1;
-
+
SET_AL( 0x00 );
SET_BL( 0x00 );
SET_CH( vcylinders & 0xff );
@@ -585,13 +620,16 @@ void BIOSCALL int13_cdemu(disk_regs_t r)
// FIXME ElTorito Harddisk. should send the HD count
switch (cdemu->media) {
- case 0x01: SET_BL( 0x02 ); break;
- case 0x02: SET_BL( 0x04 ); break;
- case 0x03: SET_BL( 0x06 ); break;
+ case 0x01: SET_BL( 0x02 ); break; /* 1.2 MB */
+ case 0x02: SET_BL( 0x04 ); break; /* 1.44 MB */
+ case 0x03: SET_BL( 0x05 ); break; /* 2.88 MB */
}
- DI = (uint16_t)&diskette_param_table; // @todo: or really DPT2?
- ES = 0xF000; // @todo: how to make this relocatable?
+ /* Only set the DPT pointer for emulated floppies. */
+ if (cdemu->media < 4) {
+ DI = (uint16_t)&diskette_param_table; // @todo: should this depend on emulated medium?
+ ES = 0xF000; // @todo: how to make this relocatable?
+ }
goto int13_success;
break;
@@ -655,20 +693,20 @@ void BIOSCALL int13_cdrom(uint16_t EHBX, disk_regs_t r)
dpt_t __far *dpt;
bios_dsk = ebda_seg :> &EbdaData->bdisk;
-
+
BX_DEBUG_INT13_CD("%s: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", __func__, AX, BX, CX, DX, ES);
-
+
SET_DISK_RET_STATUS(0x00);
-
+
/* basic check : device should be 0xE0+ */
if( (GET_ELDL() < 0xE0) || (GET_ELDL() >= 0xE0 + BX_MAX_STORAGE_DEVICES) ) {
BX_DEBUG("%s: function %02x, ELDL out of range %02x\n", __func__, GET_AH(), GET_ELDL());
goto int13_fail;
}
-
+
// Get the ata channel
device = bios_dsk->cdidmap[GET_ELDL()-0xE0];
-
+
/* basic check : device has to be valid */
if (device >= BX_MAX_STORAGE_DEVICES) {
BX_DEBUG("%s: function %02x, unmapped device for ELDL=%02x\n", __func__, GET_AH(), GET_ELDL());
@@ -757,10 +795,7 @@ void BIOSCALL int13_cdrom(uint16_t EHBX, disk_regs_t r)
bios_dsk->drqp.nsect = count;
bios_dsk->drqp.sect_sz = 2048;
- if (device > BX_MAX_ATA_DEVICES)
- status = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, 0, count*2048L, ATA_DATA_IN, MK_FP(segment,offset));
- else
- status = ata_cmd_packet(device, 12, (char __far *)&atapicmd, 0, count*2048L, ATA_DATA_IN, MK_FP(segment,offset));
+ status = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, 0, count*2048L, ATA_DATA_IN, MK_FP(segment,offset));
count = (uint16_t)(bios_dsk->drqp.trsfbytes >> 11);
i13x->count = count;
diff --git a/src/VBox/Devices/PC/BIOS/floppy.c b/src/VBox/Devices/PC/BIOS/floppy.c
index 3262cbe8..75e59e33 100644
--- a/src/VBox/Devices/PC/BIOS/floppy.c
+++ b/src/VBox/Devices/PC/BIOS/floppy.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -43,6 +43,8 @@
#include "inlines.h"
#include "biosint.h"
+extern uint16_t get_floppy_dpt(uint8_t drive_type);
+
//////////////////////
// FLOPPY functions //
//////////////////////
@@ -71,15 +73,63 @@ void set_diskette_current_cyl(uint8_t drive, uint8_t cyl)
extern int diskette_param_table; /* At a fixed location. */
+#ifndef VBOX_WITH_FLOPPY_IRQ_POLLING
+
+/**
+ * Wait for the 7th bit of 0040:003e to be set by int0e_handler.
+ * @returns first 7 bits of byte 0040:003e, interrupts disabled.
+ */
+uint8_t floppy_wait_for_interrupt(void)
+{
+ int_disable();
+ for (;;)
+ {
+ uint8_t val8 = read_byte(0x0040, 0x003e);
+ if (val8 & 0x80)
+ return val8 & ~0x7f;
+ int_enable_hlt_disable();
+ }
+}
+
+/**
+ * Wait for the 7th bit of 0040:003e to be set by int0e_handler or 0040:0040 to
+ * be cleared by the timer, clearing the interrupt flag on success.
+ *
+ * @returns 0 on timeout with interrupts enabled.
+ * All 8 bits at 0040:003e on interrupt with interrupts disabled (i.e.
+ * non-zero), after first clearing the 7th bit at 0040:003e.
+ */
+uint8_t floppy_wait_for_interrupt_or_timeout(void)
+{
+ int_disable();
+ for (;;)
+ {
+ uint8_t val8 = read_byte(0x0040, 0x0040);
+ if (val8 == 0) {
+ int_enable();
+ return 0;
+ }
+
+ val8 = read_byte(0x0040, 0x003e);
+ if (val8 & 0x80) {
+ write_byte(0x0040, 0x003e, val8 & 0x7f);
+ return val8;
+ }
+ int_enable_hlt_disable();
+ }
+}
+
+#endif /* !VBOX_WITH_FLOPPY_IRQ_POLLING */
+
void floppy_reset_controller(void)
{
uint8_t val8;
-
+
// Reset controller
val8 = inb(0x03f2);
outb(0x03f2, val8 & ~0x04);
outb(0x03f2, val8 | 0x04);
-
+
// Wait for controller to come out of reset
do {
val8 = inb(0x3f4);
@@ -89,12 +139,12 @@ void floppy_reset_controller(void)
void floppy_prepare_controller(uint16_t drive)
{
uint8_t val8, dor, prev_reset;
-
+
// set 40:3e bit 7 to 0
val8 = read_byte(0x0040, 0x003e);
val8 &= 0x7f;
write_byte(0x0040, 0x003e, val8);
-
+
// turn on motor of selected drive, DMA & int enabled, normal operation
prev_reset = inb(0x03f2) & 0x04;
if (drive)
@@ -104,21 +154,22 @@ void floppy_prepare_controller(uint16_t drive)
dor |= 0x0c;
dor |= drive;
outb(0x03f2, dor);
-
+
// reset the disk motor timeout value of INT 08
- write_byte(0x40,0x40, BX_FLOPPY_ON_CNT);
-
+ write_byte(0x0040,0x0040, BX_FLOPPY_ON_CNT);
+
// program data rate
val8 = read_byte(0x0040, 0x008b);
val8 >>= 6;
outb(0x03f7, val8);
-
+
// wait for drive readiness
do {
val8 = inb(0x3f4);
} while ( (val8 & 0xc0) != 0x80 );
-
+
if (prev_reset == 0) {
+#ifdef VBOX_WITH_FLOPPY_IRQ_POLLING
// turn on interrupts
int_enable();
// wait on 40:3e bit 7 to become 1
@@ -127,6 +178,9 @@ void floppy_prepare_controller(uint16_t drive)
} while ( (val8 & 0x80) == 0 );
val8 &= 0x7f;
int_disable();
+#else
+ val8 = floppy_wait_for_interrupt(); /* (7th bit cleared in ret val) */
+#endif
write_byte(0x0040, 0x003e, val8);
}
}
@@ -135,56 +189,62 @@ bx_bool floppy_media_known(uint16_t drive)
{
uint8_t val8;
uint16_t media_state_offset;
-
+
val8 = read_byte(0x0040, 0x003e); // diskette recal status
if (drive)
val8 >>= 1;
val8 &= 0x01;
if (val8 == 0)
return 0;
-
+
media_state_offset = 0x0090;
if (drive)
media_state_offset += 1;
-
+
val8 = read_byte(0x0040, media_state_offset);
val8 = (val8 >> 4) & 0x01;
if (val8 == 0)
return 0;
-
+
// checks passed, return KNOWN
return 1;
}
bx_bool floppy_read_id(uint16_t drive)
{
+#ifdef VBOX_WITH_FLOPPY_IRQ_POLLING
uint8_t val8;
+#endif
uint8_t return_status[7];
int i;
-
+
floppy_prepare_controller(drive);
-
+
// send Read ID command (2 bytes) to controller
outb(0x03f5, 0x4a); // 4a: Read ID (MFM)
outb(0x03f5, drive); // 0=drive0, 1=drive1, head always 0
-
+
+#ifdef VBOX_WITH_FLOPPY_IRQ_POLLING
// turn on interrupts
int_enable();
-
+
// wait on 40:3e bit 7 to become 1
do {
val8 = (read_byte(0x0040, 0x003e) & 0x80);
} while ( val8 == 0 );
-
+
val8 = 0; // separate asm from while() loop
// turn off interrupts
int_disable();
-
+#else
+ floppy_wait_for_interrupt();
+#endif
+
// read 7 return status bytes from controller
for (i = 0; i < 7; ++i) {
return_status[i] = inb(0x3f5);
}
-
+
if ( (return_status[0] & 0xc0) != 0 )
return 0;
else
@@ -195,28 +255,34 @@ bx_bool floppy_drive_recal(uint16_t drive)
{
uint8_t val8;
uint16_t curr_cyl_offset;
-
+
floppy_prepare_controller(drive);
-
+
// send Recalibrate command (2 bytes) to controller
outb(0x03f5, 0x07); // 07: Recalibrate
outb(0x03f5, drive); // 0=drive0, 1=drive1
-
+
+#ifdef VBOX_WITH_FLOPPY_IRQ_POLLING
// turn on interrupts
int_enable();
-
+
// wait on 40:3e bit 7 to become 1
do {
val8 = (read_byte(0x0040, 0x003e) & 0x80);
} while ( val8 == 0 );
-
+
val8 = 0; // separate asm from while() loop
// turn off interrupts
int_disable();
-
+
// set 40:3e bit 7 to 0, and calibrated bit
val8 = read_byte(0x0040, 0x003e);
val8 &= 0x7f;
+#else
+ val8 = floppy_wait_for_interrupt(); /* (7th bit cleared in ret val) */
+
+ // set 40:3e bit 7 to 0, and calibrated bit
+#endif
if (drive) {
val8 |= 0x02; // Drive 1 calibrated
curr_cyl_offset = 0x0095;
@@ -226,7 +292,7 @@ bx_bool floppy_drive_recal(uint16_t drive)
}
write_byte(0x0040, 0x003e, val8);
write_byte(0x0040, curr_cyl_offset, 0); // current cylinder is 0
-
+
return 1;
}
@@ -236,14 +302,14 @@ bx_bool floppy_media_sense(uint16_t drive)
bx_bool retval;
uint16_t media_state_offset;
uint8_t drive_type, config_data, media_state;
-
+
if (floppy_drive_recal(drive) == 0)
return 0;
-
+
// Try the diskette data rates in the following order:
// 1 Mbps -> 500 Kbps -> 300 Kbps -> 250 Kbps
// The 1 Mbps rate is only tried for 2.88M drives.
-
+
// ** config_data **
// Bitfields for diskette media control:
// Bit(s) Description (Table M0028)
@@ -253,7 +319,7 @@ bx_bool floppy_media_sense(uint16_t drive)
// 00=0Ch, 01=0Dh, 10=0Eh, 11=0Ah
// 3-2 {data rate at start of operation}
// 1-0 reserved
-
+
// ** media_state **
// Bitfields for diskette drive media state:
// Bit(s) Description (Table M0030)
@@ -309,22 +375,10 @@ bx_bool floppy_media_sense(uint16_t drive)
retval = 1;
}
// Extended floppy size uses special cmos setting
- else if ( drive_type == 6 ) {
- // 160k 5.25" drive
- config_data = 0x00; // 0000 0000
- media_state = 0x27; // 0010 0111
- retval = 1;
- }
- else if ( drive_type == 7 ) {
- // 180k 5.25" drive
- config_data = 0x00; // 0000 0000
- media_state = 0x27; // 0010 0111
- retval = 1;
- }
- else if ( drive_type == 8 ) {
- // 320k 5.25" drive
- config_data = 0x00; // 0000 0000
- media_state = 0x27; // 0010 0111
+ else if ( drive_type == 14 || drive_type == 15 ) {
+ // 15.6 MB 3.5" (fake) || 63.5 MB 3.5" (fake) - report same as 2.88 MB.
+ config_data = 0xCC; // 1100 1100
+ media_state = 0xD7; // 1101 0111
retval = 1;
}
else {
@@ -333,7 +387,7 @@ bx_bool floppy_media_sense(uint16_t drive)
media_state = 0x00; // 0000 0000
retval = 0;
}
-
+
write_byte(0x0040, 0x008B, config_data);
while (!floppy_read_id(drive)) {
if ((config_data & 0xC0) == 0x80) {
@@ -353,14 +407,14 @@ bx_bool floppy_media_sense(uint16_t drive)
}
write_byte(0x0040, 0x008B, config_data);
}
-
+
if (drive == 0)
media_state_offset = 0x0090;
else
media_state_offset = 0x0091;
write_byte(0x0040, 0x008B, config_data);
write_byte(0x0040, media_state_offset, media_state);
-
+
return retval;
}
@@ -368,7 +422,7 @@ bx_bool floppy_media_sense(uint16_t drive)
bx_bool floppy_drive_exists(uint16_t drive)
{
uint8_t drive_type;
-
+
// check CMOS to see if drive exists
// @todo: break out drive type determination
drive_type = inb_cmos(0x10);
@@ -401,11 +455,11 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
uint8_t drive_type, num_floppies, ah;
uint16_t last_addr;
int i;
-
+
BX_DEBUG_INT13_FL("%s: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", __func__, AX, BX, CX, DX, ES);
-
+
ah = GET_AH();
-
+
switch ( ah ) {
case 0x00: // diskette controller reset
BX_DEBUG_INT13_FL("floppy f00\n");
@@ -428,16 +482,16 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF();
return;
}
-
+
// force re-calibration etc.
write_byte(0x0040, 0x003e, 0);
-
+
SET_AH(0);
set_diskette_ret_status(0);
CLEAR_CF(); // successful
set_diskette_current_cyl(drive, 0); // current cylinder
return;
-
+
case 0x01: // Read Diskette Status
CLEAR_CF();
val8 = read_byte(0x0000, 0x0441);
@@ -446,7 +500,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF();
}
return;
-
+
case 0x02: // Read Diskette Sectors
case 0x03: // Write Diskette Sectors
case 0x04: // Verify Diskette Sectors
@@ -455,7 +509,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
sector = GET_CL();
head = GET_DH();
drive = GET_ELDL();
-
+
if ( (drive > 1) || (head > 1) ||
(num_sectors == 0) || (num_sectors > 72) ) {
BX_INFO("%s: drive>1 || head>1 ...\n", __func__);
@@ -465,7 +519,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF(); // error occurred
return;
}
-
+
// see if drive exists
if (floppy_drive_exists(drive) == 0) {
SET_AH(0x80); // not responding
@@ -474,7 +528,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF(); // error occurred
return;
}
-
+
// see if media in drive, and type is known
if (floppy_media_known(drive) == 0) {
if (floppy_media_sense(drive) == 0) {
@@ -485,14 +539,14 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
return;
}
}
-
+
if (ah == 0x02) {
// Read Diskette Sectors
-
+
//-----------------------------------
// set up DMA controller for transfer
//-----------------------------------
-
+
// es:bx = pointer to where to place information from diskette
// port 04: DMA-1 base and current address, channel 2
// port 05: DMA-1 base and current count, channel 2
@@ -506,7 +560,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
page++;
}
base_count = (num_sectors * 512) - 1;
-
+
// check for 64K boundary overrun
last_addr = base_address + base_count;
if (last_addr < base_address) {
@@ -516,10 +570,10 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF(); // error occurred
return;
}
-
+
BX_DEBUG_INT13_FL("masking DMA-1 c2\n");
outb(0x000a, 0x06);
-
+
BX_DEBUG_INT13_FL("clear flip-flop\n");
outb(0x000c, 0x00); // clear flip-flop
outb(0x0004, base_address);
@@ -529,28 +583,28 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
outb(0x0005, base_count);
outb(0x0005, base_count>>8);
BX_DEBUG_INT13_FL("xfer buf at %x:%x\n", page, base_address);
-
+
// port 0b: DMA-1 Mode Register
mode_register = 0x46; // single mode, increment, autoinit disable,
// transfer type=write, channel 2
BX_DEBUG_INT13_FL("setting mode register\n");
outb(0x000b, mode_register);
-
+
BX_DEBUG_INT13_FL("setting page register\n");
// port 81: DMA-1 Page Register, channel 2
outb(0x0081, page);
-
+
BX_DEBUG_INT13_FL("unmask chan 2\n");
outb(0x000a, 0x02); // unmask channel 2
-
+
BX_DEBUG_INT13_FL("unmasking DMA-1 c2\n");
outb(0x000a, 0x02);
-
+
//--------------------------------------
// set up floppy controller for transfer
//--------------------------------------
floppy_prepare_controller(drive);
-
+
// send read-normal-data command (9 bytes) to controller
outb(0x03f5, 0xe6); // e6: read normal data
outb(0x03f5, (head << 2) | drive); // HD DR1 DR2
@@ -561,13 +615,14 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
outb(0x03f5, sector + num_sectors - 1); // last sector to read on track
outb(0x03f5, 0); // Gap length
outb(0x03f5, 0xff); // Gap length
-
+
+#ifdef VBOX_WITH_FLOPPY_IRQ_POLLING
// turn on interrupts
int_enable();
-
- // wait on 40:3e bit 7 to become 1
+
+ // wait on 40:3e bit 7 to become 1 or timeout (latter isn't armed so it won't happen)
do {
- val8 = read_byte(0x0040, 0x0040);
+ val8 = read_byte(0x0040, 0x0040);
if (val8 == 0) {
floppy_reset_controller();
SET_AH(0x80); // drive not ready (timeout)
@@ -578,16 +633,28 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
}
val8 = (read_byte(0x0040, 0x003e) & 0x80);
} while ( val8 == 0 );
-
+
val8 = 0; // separate asm from while() loop
// turn off interrupts
int_disable();
-
+
// set 40:3e bit 7 to 0
val8 = read_byte(0x0040, 0x003e);
val8 &= 0x7f;
write_byte(0x0040, 0x003e, val8);
-
+
+#else
+ val8 = floppy_wait_for_interrupt_or_timeout();
+ if (val8 == 0) { /* Note! Interrupts enabled in this branch. */
+ floppy_reset_controller();
+ SET_AH(0x80); // drive not ready (timeout)
+ set_diskette_ret_status(0x80);
+ SET_AL(0); // no sectors read
+ SET_CF(); // error occurred
+ return;
+ }
+#endif
+
// check port 3f4 for accessibility to status bytes
val8 = inb(0x3f4);
if ( (val8 & 0xc0) != 0xc0 )
@@ -598,7 +665,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
return_status[i] = inb(0x3f5);
write_byte(0x0040, 0x0042 + i, return_status[i]);
}
-
+
if ( (return_status[0] & 0xc0) != 0 ) {
SET_AH(0x20);
set_diskette_ret_status(0x20);
@@ -618,11 +685,11 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
return;
} else if (ah == 0x03) {
// Write Diskette Sectors
-
+
//-----------------------------------
// set up DMA controller for transfer
//-----------------------------------
-
+
// es:bx = pointer to where to place information from diskette
// port 04: DMA-1 base and current address, channel 2
// port 05: DMA-1 base and current count, channel 2
@@ -636,7 +703,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
page++;
}
base_count = (num_sectors * 512) - 1;
-
+
// check for 64K boundary overrun
last_addr = base_address + base_count;
if (last_addr < base_address) {
@@ -646,10 +713,10 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF(); // error occurred
return;
}
-
+
BX_DEBUG_INT13_FL("masking DMA-1 c2\n");
outb(0x000a, 0x06);
-
+
outb(0x000c, 0x00); // clear flip-flop
outb(0x0004, base_address);
outb(0x0004, base_address>>8);
@@ -657,23 +724,23 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
outb(0x0005, base_count);
outb(0x0005, base_count>>8);
BX_DEBUG_INT13_FL("xfer buf at %x:%x\n", page, base_address);
-
+
// port 0b: DMA-1 Mode Register
mode_register = 0x4a; // single mode, increment, autoinit disable,
// transfer type=read, channel 2
outb(0x000b, mode_register);
-
+
// port 81: DMA-1 Page Register, channel 2
outb(0x0081, page);
-
+
BX_DEBUG_INT13_FL("unmasking DMA-1 c2\n");
outb(0x000a, 0x02);
-
+
//--------------------------------------
// set up floppy controller for transfer
//--------------------------------------
floppy_prepare_controller(drive);
-
+
// send write-normal-data command (9 bytes) to controller
outb(0x03f5, 0xc5); // c5: write normal data
outb(0x03f5, (head << 2) | drive); // HD DR1 DR2
@@ -684,10 +751,11 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
outb(0x03f5, sector + num_sectors - 1); // last sector to write on track
outb(0x03f5, 0); // Gap length
outb(0x03f5, 0xff); // Gap length
-
+
+#ifdef VBOX_WITH_FLOPPY_IRQ_POLLING
// turn on interrupts
int_enable();
-
+
// wait on 40:3e bit 7 to become 1
do {
val8 = read_byte(0x0040, 0x0040);
@@ -701,40 +769,52 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
}
val8 = (read_byte(0x0040, 0x003e) & 0x80);
} while ( val8 == 0 );
-
+
val8 = 0; // separate asm from while() loop @todo: why??
// turn off interrupts
int_disable();
-
+
// set 40:3e bit 7 to 0
val8 = read_byte(0x0040, 0x003e);
val8 &= 0x7f;
write_byte(0x0040, 0x003e, val8);
-
+#else
+ val8 = floppy_wait_for_interrupt_or_timeout();
+ if (val8 == 0) { /* Note! Interrupts enabled in this branch. */
+ floppy_reset_controller();
+ SET_AH(0x80); // drive not ready (timeout)
+ set_diskette_ret_status(0x80);
+ SET_AL(0); // no sectors written
+ SET_CF(); // error occurred
+ return;
+ }
+#endif
+
// check port 3f4 for accessibility to status bytes
val8 = inb(0x3f4);
if ( (val8 & 0xc0) != 0xc0 )
BX_PANIC("%s: ctrl not ready\n", __func__);
-
+
// read 7 return status bytes from controller and store in BDA
for (i = 0; i < 7; ++i) {
return_status[i] = inb(0x3f5);
write_byte(0x0040, 0x0042 + i, return_status[i]);
}
-
+
if ( (return_status[0] & 0xc0) != 0 ) {
if ( (return_status[1] & 0x02) != 0 ) {
// diskette not writable.
// AH=status code=0x03 (tried to write on write-protected disk)
// AL=number of sectors written=0
AX = 0x0300;
- SET_CF();
- return;
} else {
- BX_PANIC("%s: read error\n", __func__);
+ // Some other problem occurred.
+ AX = 0x0100;
}
+ SET_CF();
+ return;
}
-
+
// ??? should track be new val from return_status[3] ?
set_diskette_current_cyl(drive, track);
// AL = number of sectors read (same value as passed)
@@ -743,7 +823,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
return;
} else { // if (ah == 0x04)
// Verify Diskette Sectors
-
+
// ??? should track be new val from return_status[3] ?
set_diskette_current_cyl(drive, track);
// AL = number of sectors verified (same value as passed)
@@ -752,22 +832,22 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
return;
}
break;
-
+
case 0x05: // format diskette track
BX_DEBUG_INT13_FL("floppy f05\n");
-
+
num_sectors = GET_AL();
track = GET_CH();
head = GET_DH();
drive = GET_ELDL();
-
+
if ((drive > 1) || (head > 1) || (track > 79) ||
(num_sectors == 0) || (num_sectors > 18)) {
SET_AH(1);
set_diskette_ret_status(1);
SET_CF(); // error occurred
}
-
+
// see if drive exists
if (floppy_drive_exists(drive) == 0) {
SET_AH(0x80); // drive not responding
@@ -775,7 +855,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF(); // error occurred
return;
}
-
+
// see if media in drive, and type is known
if (floppy_media_known(drive) == 0) {
if (floppy_media_sense(drive) == 0) {
@@ -786,7 +866,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
return;
}
}
-
+
// set up DMA controller for transfer
// @todo: merge/factor out pointer normalization
page = (ES >> 12); // upper 4 bits
@@ -798,7 +878,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
page++;
}
base_count = (num_sectors * 4) - 1;
-
+
// check for 64K boundary overrun
last_addr = base_address + base_count;
if (last_addr < base_address) {
@@ -808,7 +888,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF(); // error occurred
return;
}
-
+
outb(0x000a, 0x06);
outb(0x000c, 0x00); // clear flip-flop
outb(0x0004, base_address);
@@ -822,10 +902,10 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
// port 81: DMA-1 Page Register, channel 2
outb(0x0081, page);
outb(0x000a, 0x02);
-
+
// set up floppy controller for transfer
floppy_prepare_controller(drive);
-
+
// send format-track command (6 bytes) to controller
outb(0x03f5, 0x4d); // 4d: format track
outb(0x03f5, (head << 2) | drive); // HD DR1 DR2
@@ -833,9 +913,11 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
outb(0x03f5, num_sectors); // number of sectors per track
outb(0x03f5, 0); // Gap length
outb(0x03f5, 0xf6); // Fill byte
+
+#ifdef VBOX_WITH_FLOPPY_IRQ_POLLING
// turn on interrupts
int_enable();
-
+
// wait on 40:3e bit 7 to become 1
do {
val8 = read_byte(0x0040, 0x0040);
@@ -848,25 +930,37 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
}
val8 = (read_byte(0x0040, 0x003e) & 0x80);
} while ( val8 == 0 );
-
+
val8 = 0; // separate asm from while() loop
// turn off interrupts
int_disable();
+
// set 40:3e bit 7 to 0
val8 = read_byte(0x0040, 0x003e);
val8 &= 0x7f;
write_byte(0x0040, 0x003e, val8);
+#else
+ val8 = floppy_wait_for_interrupt_or_timeout();
+ if (val8 == 0) { /* Note! Interrupts enabled in this branch. */
+ floppy_reset_controller();
+ SET_AH(0x80); // drive not ready (timeout)
+ set_diskette_ret_status(0x80);
+ SET_CF(); // error occurred
+ return;
+ }
+#endif
+
// check port 3f4 for accessibility to status bytes
val8 = inb(0x3f4);
if ( (val8 & 0xc0) != 0xc0 )
BX_PANIC("%s: ctrl not ready\n", __func__);
-
+
// read 7 return status bytes from controller and store in BDA
for (i = 0; i < 7; ++i) {
return_status[i] = inb(0x3f5);
write_byte(0x0040, 0x0042 + i, return_status[i]);
}
-
+
if ( (return_status[0] & 0xc0) != 0 ) {
if ( (return_status[1] & 0x02) != 0 ) {
// diskette not writable.
@@ -879,18 +973,18 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
BX_PANIC("%s: write error\n", __func__);
}
}
-
+
SET_AH(0);
set_diskette_ret_status(0);
set_diskette_current_cyl(drive, 0);
CLEAR_CF(); // successful
return;
-
-
+
+
case 0x08: // read diskette drive parameters
BX_DEBUG_INT13_FL("floppy f08\n");
drive = GET_ELDL();
-
+
if (drive > 1) {
AX = 0;
BX = 0;
@@ -902,7 +996,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF();
return;
}
-
+
// @todo: break out drive type determination
drive_type = inb_cmos(0x10);
num_floppies = 0;
@@ -910,75 +1004,65 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
num_floppies++;
if (drive_type & 0x0f)
num_floppies++;
-
+
if (drive == 0)
drive_type >>= 4;
else
drive_type &= 0x0f;
-
+
SET_BH(0);
SET_BL(drive_type);
SET_AH(0);
SET_AL(0);
SET_DL(num_floppies);
-
+ SET_DH(1); // max head #
+
switch (drive_type) {
case 0: // none
CX = 0;
SET_DH(0); // max head #
break;
-
+
case 1: // 360KB, 5.25"
CX = 0x2709; // 40 tracks, 9 sectors
- SET_DH(1); // max head #
break;
-
+
case 2: // 1.2MB, 5.25"
CX = 0x4f0f; // 80 tracks, 15 sectors
- SET_DH(1); // max head #
break;
-
+
case 3: // 720KB, 3.5"
CX = 0x4f09; // 80 tracks, 9 sectors
- SET_DH(1); // max head #
break;
-
+
case 4: // 1.44MB, 3.5"
CX = 0x4f12; // 80 tracks, 18 sectors
- SET_DH(1); // max head #
break;
-
+
case 5: // 2.88MB, 3.5"
CX = 0x4f24; // 80 tracks, 36 sectors
- SET_DH(1); // max head #
break;
-
- case 6: // 160k, 5.25"
- CX = 0x2708; // 40 tracks, 8 sectors
- SET_DH(0); // max head #
- break;
-
- case 7: // 180k, 5.25"
- CX = 0x2709; // 40 tracks, 9 sectors
- SET_DH(0); // max head #
- break;
-
- case 8: // 320k, 5.25"
- CX = 0x2708; // 40 tracks, 8 sectors
- SET_DH(1); // max head #
+
+ case 14: // 15.6 MB 3.5" (fake)
+ CX = 0xfe3f; // 255 tracks, 63 sectors
break;
-
+
+ case 15: // 63.5 MB 3.5" (fake)
+ CX = 0xfeff; // 255 tracks, 255 sectors - This works because the cylinder
+ break; // and sectors limits/encoding aren't checked by the BIOS
+ // due to copy protection schemes and such stuff.
+
default: // ?
BX_PANIC("%s: bad floppy type\n", __func__);
}
-
+
/* set es & di to point to 11 byte diskette param table in ROM */
ES = 0xF000; // @todo: any way to make this relocatable?
- DI = (uint16_t)&diskette_param_table;
+ DI = get_floppy_dpt(drive_type);
CLEAR_CF(); // success
/* disk status not changed upon success */
return;
-
+
case 0x15: // read diskette drive type
BX_DEBUG_INT13_FL("floppy f15\n");
drive = GET_ELDL();
@@ -997,13 +1081,14 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
CLEAR_CF(); // successful, not present
if (drive_type==0) {
SET_AH(0); // drive not present
- }
- else {
+ } else if (drive_type > 1) {
+ SET_AH(2); // drive present, supports change line
+ } else {
SET_AH(1); // drive present, does not support change line
}
-
+
return;
-
+
case 0x16: // get diskette change line status
BX_DEBUG_INT13_FL("floppy f16\n");
drive = GET_ELDL();
@@ -1013,12 +1098,12 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF();
return;
}
-
+
SET_AH(0x06); // change line not supported
set_diskette_ret_status(0x06);
SET_CF();
return;
-
+
case 0x17: // set diskette type for format(old)
BX_DEBUG_INT13_FL("floppy f17\n");
/* not used for 1.44M floppies */
@@ -1026,17 +1111,17 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
set_diskette_ret_status(1); /* not supported */
SET_CF();
return;
-
+
case 0x18: // set diskette type for format(new)
BX_DEBUG_INT13_FL("floppy f18\n");
SET_AH(0x01); // do later
set_diskette_ret_status(1);
SET_CF();
return;
-
+
default:
BX_INFO("%s: unsupported AH=%02x\n", __func__, GET_AH());
-
+
// if ( (ah==0x20) || ((ah>=0x41) && (ah<=0x49)) || (ah==0x4e) ) {
SET_AH(0x01); // ???
set_diskette_ret_status(1);
@@ -1051,9 +1136,9 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
void BIOSCALL int13_diskette_function(disk_regs_t r)
{
uint8_t val8;
-
+
switch ( GET_AH() ) {
-
+
case 0x01: // Read Diskette Status
CLEAR_CF();
val8 = read_byte(0x0000, 0x0441);
@@ -1062,7 +1147,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
SET_CF();
}
return;
-
+
default:
SET_CF();
write_byte(0x0000, 0x0441, 0x01);
@@ -1076,7 +1161,7 @@ void BIOSCALL int13_diskette_function(disk_regs_t r)
void determine_floppy_media(uint16_t drive)
{
uint8_t val8, DOR, ctrl_info;
-
+
ctrl_info = read_byte(0x0040, 0x008F);
if (drive==1)
ctrl_info >>= 4;
@@ -1102,11 +1187,11 @@ void determine_floppy_media(uint16_t drive)
val8 = inb(0x03f4) & 0x80; // Main Status Register
if (val8 != 0x80)
BX_PANIC("d_f_m: MRQ bit not set\n");
-
+
// change line
-
+
// existing BDA values
-
+
// turn on drive motor
outb(0x03f2, DOR); // Digital Output Register
//
diff --git a/src/VBox/Devices/PC/BIOS/floppyt.c b/src/VBox/Devices/PC/BIOS/floppyt.c
new file mode 100644
index 00000000..d9bdb825
--- /dev/null
+++ b/src/VBox/Devices/PC/BIOS/floppyt.c
@@ -0,0 +1,104 @@
+/* $Id: floppyt.c $ */
+/** @file
+ * Floppy drive tables.
+ */
+
+/*
+ * Copyright (C) 2011-2013 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <stdint.h>
+#include <string.h>
+#include "biosint.h"
+#include "inlines.h"
+
+/**
+ * Extended DPT (Disk Parameter Table) structure.
+ */
+typedef struct
+{
+ uint8_t spec1; /* First SPECIFY byte. */
+ uint8_t spec2; /* Second SPECIFY byte. */
+ uint8_t mot_wait; /* Motor wait time after operation. */
+ uint8_t ss_code; /* Sector size code. */
+ uint8_t eot; /* End of Track (ID of last sector). */
+ uint8_t gap; /* Gap length. */
+ uint8_t dtl; /* Data length. */
+ uint8_t fmt_gap; /* Gap length for format. */
+ uint8_t fmt_fill; /* Format fill byte. */
+ uint8_t hd_settle; /* Head settle time (msec). */
+ uint8_t mot_start; /* Motor start time (1/8 sec units). */
+ uint8_t max_trk; /* Maximum track number. */
+ uint8_t rate; /* Data transfer rate code. */
+} dpt_ext;
+
+ct_assert(sizeof(dpt_ext) == 13);
+
+/* Motor spin-up wait time in BIOS ticks (~2 seconds). */
+#define MOTOR_WAIT 0x25
+
+/* Data rates as stored in the DPT */
+#define RATE_250K 0x80
+#define RATE_300K 0x40
+#define RATE_500K 0x00
+#define RATE_1M 0xC0
+
+/* In the 13-entry DPT, 7 entries are constant. Use a macro to set those. */
+#define MAKE_DPT_ENTRY(sp1, eot, gap, fgp, mxt, dtr) \
+ { sp1, 2, MOTOR_WAIT, 2, eot, gap, 0xFF, fgp, 0xF6, 15, 8, mxt, dtr }
+
+dpt_ext fd_parm[] = {
+ MAKE_DPT_ENTRY(0xDF, 9, 0x2A, 0x50, 39, RATE_250K), /* 360K disk/360K drive */
+ MAKE_DPT_ENTRY(0xDF, 9, 0x2A, 0x50, 39, RATE_300K), /* 360K disk/1.2M drive */
+ MAKE_DPT_ENTRY(0xDF, 15, 0x1B, 0x54, 79, RATE_500K), /* 1.2M disk */
+ MAKE_DPT_ENTRY(0xDF, 9, 0x2A, 0x50, 79, RATE_250K), /* 720K disk */
+ MAKE_DPT_ENTRY(0xAF, 18, 0x1B, 0x6C, 79, RATE_500K), /* 1.44M disk */
+ MAKE_DPT_ENTRY(0xAF, 36, 0x1B, 0x54, 79, RATE_1M), /* 2.88M disk */
+ MAKE_DPT_ENTRY(0xAF, 255, 0x1B, 0x54, 255, RATE_500K) /* Fake mega-disk */
+};
+
+typedef struct {
+ uint8_t type; /* Drive type. */
+ uint8_t dpt_entry; /* Index of entry in fd_parm. */
+} fd_map_entry;
+
+/* Drive types as stored in the CMOS. Must match DevPCBios! */
+#define FDRV_360K 1
+#define FDRV_1_2M 2
+#define FDRV_720K 3
+#define FDRV_1_44M 4
+#define FDRV_2_88M 5
+#define FDRV_15M 14
+#define FDRV_63M 15
+
+/* A table mapping (CMOS) drive types to DPT entries. */
+fd_map_entry fd_map[] = {
+ { FDRV_360K, 0 },
+ { FDRV_1_2M, 2 },
+ { FDRV_720K, 3 },
+ { FDRV_1_44M, 4 },
+ { FDRV_2_88M, 5 },
+ { FDRV_15M, 6 },
+ { FDRV_63M, 6 }
+};
+
+/* Find a DPT corresponding to the given drive type. */
+dpt_ext *get_floppy_dpt(uint8_t drv_typ)
+{
+ int i;
+
+ for (i = 0; i < sizeof(fd_map) / sizeof(fd_map[0]); ++i)
+ if (fd_map[i].type == drv_typ)
+ return &fd_parm[fd_map[i].dpt_entry];
+
+ /* As a fallback, return the 1.44M DPT. */
+ return &fd_parm[5];
+}
diff --git a/src/VBox/Devices/PC/BIOS/inlines.h b/src/VBox/Devices/PC/BIOS/inlines.h
index 75a3b6a3..fcaa8de1 100644
--- a/src/VBox/Devices/PC/BIOS/inlines.h
+++ b/src/VBox/Devices/PC/BIOS/inlines.h
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 2010-2011 Oracle Corporation
+ * Copyright (C) 2010-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +38,13 @@ void int_enable(void);
void int_disable(void);
#pragma aux int_disable = "cli" modify exact [] nomemory;
+void int_enable_hlt_disable(void);
+#pragma aux int_enable_hlt_disable = \
+ "sti" \
+ "hlt" \
+ "cli" \
+ modify exact [] nomemory;
+
uint16_t int_query(void);
#pragma aux int_query = \
"pushf" \
diff --git a/src/VBox/Devices/PC/BIOS/invop.c b/src/VBox/Devices/PC/BIOS/invop.c
new file mode 100644
index 00000000..bdebf54e
--- /dev/null
+++ b/src/VBox/Devices/PC/BIOS/invop.c
@@ -0,0 +1,222 @@
+/* $Id: invop.c $ */
+/** @file
+ * Real mode invalid opcode handler.
+ */
+
+/*
+ * Copyright (C) 2013 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <stdint.h>
+#include <string.h>
+#include "biosint.h"
+#include "inlines.h"
+
+/* The layout of 286 LOADALL descriptors. */
+typedef struct tag_ldall_desc {
+ uint16_t base_lo; /* Bits 0-15 of segment base. */
+ uint8_t base_hi; /* Bits 16-13 of segment base. */
+ uint8_t attr; /* Segment attributes. */
+ uint16_t limit; /* Segment limit. */
+} ldall_desc;
+
+/* The 286 LOADALL memory buffer at physical address 800h. From
+ * The Undocumented PC.
+ */
+typedef struct tag_ldall_286 {
+ uint16_t unused1[3];
+ uint16_t msw; /* 806h */
+ uint16_t unused2[7];
+ uint16_t tr; /* 816h */
+ uint16_t flags; /* 818h */
+ uint16_t ip; /* 81Ah */
+ uint16_t ldt; /* 81Ch */
+ uint16_t ds; /* 81Eh */
+ uint16_t ss; /* 820h */
+ uint16_t cs; /* 822h */
+ uint16_t es; /* 824h */
+ uint16_t di; /* 826h */
+ uint16_t si; /* 828h */
+ uint16_t bp; /* 82Ah */
+ uint16_t sp; /* 82Ch */
+ uint16_t bx; /* 82Eh */
+ uint16_t dx; /* 830h */
+ uint16_t cx; /* 832h */
+ uint16_t ax; /* 834h */
+ ldall_desc es_desc; /* 836h */
+ ldall_desc cs_desc; /* 83Ch */
+ ldall_desc ss_desc; /* 842h */
+ ldall_desc ds_desc; /* 848h */
+ ldall_desc gdt_desc; /* 84Eh */
+ ldall_desc ldt_desc; /* 854h */
+ ldall_desc idt_desc; /* 85Ah */
+ ldall_desc tss_desc; /* 860h */
+} ldall_286_s;
+ct_assert(sizeof(ldall_286_s) == 0x66);
+
+/*
+ * LOADALL emulation assumptions:
+ * - MSW indicates real mode
+ * - Standard real mode CS and SS is to be used
+ * - Segment values of non-RM segments (if any) do not matter
+ * - Standard segment attributes are used
+ */
+
+/* A wrapper for LIDT. */
+void load_idtr(uint32_t base, uint16_t limit);
+#pragma aux load_idtr = \
+ ".286p" \
+ "mov bx, sp" \
+ "lidt fword ptr ss:[bx]"\
+ parm caller reverse [] modify [bx] exact;
+
+/* A wrapper for LGDT. */
+void load_gdtr(uint32_t base, uint16_t limit);
+#pragma aux load_gdtr = \
+ ".286p" \
+ "mov bx, sp" \
+ "lgdt fword ptr ss:[bx]"\
+ parm caller reverse [] modify [bx] exact;
+
+/* Load DS/ES as real-mode segments. May be overwritten later.
+ * NB: Loads SS with 80h to address the LOADALL buffer. Must
+ * not touch CX!
+ */
+void load_rm_segs(int seg_flags);
+#pragma aux load_rm_segs = \
+ "mov ax, 80h" \
+ "mov ss, ax" \
+ "mov ax, ss:[1Eh]" \
+ "mov ds, ax" \
+ "mov ax, ss:[24h]" \
+ "mov es, ax" \
+ parm [cx] nomemory modify nomemory;
+
+/* Briefly switch to protected mode and load ES and/or DS if necessary.
+ * NB: Trashes high bits of EAX, but that should be safe. Expects flags
+ * in CX.
+ */
+void load_pm_segs(void);
+#pragma aux load_pm_segs = \
+ ".386p" \
+ "smsw ax" \
+ "inc ax" \
+ "lmsw ax" \
+ "mov ax, 8" \
+ "test cx, 1" \
+ "jz skip_es" \
+ "mov es, ax" \
+ "skip_es:" \
+ "test cx, 2" \
+ "jz skip_ds" \
+ "mov bx,ss:[00h]" \
+ "mov ss:[08h], bx" \
+ "mov bx,ss:[02h]" \
+ "mov ss:[0Ah], bx" \
+ "mov bx,ss:[04h]" \
+ "mov ss:[0Ch], bx" \
+ "mov ds, ax" \
+ "skip_ds:" \
+ "mov eax, cr0" \
+ "dec ax" \
+ "mov cr0, eax" \
+ parm nomemory modify nomemory;
+
+/* Complete LOADALL emulation: Restore general-purpose registers, stack
+ * pointer, and CS:IP. NB: The LOADALL instruction stores registers in
+ * the same order as PUSHA. Surprise, surprise!
+ */
+void ldall_finish(void);
+#pragma aux ldall_finish = \
+ ".286" \
+ "mov sp, 26h" \
+ "popa" \
+ "mov sp, ss:[2Ch]" \
+ "sub sp, 6" \
+ "mov ss, ss:[20h]" \
+ "iret" \
+ parm nomemory modify nomemory aborts;
+
+
+#define LOAD_ES 0x01 /* ES needs to be loaded in protected mode. */
+#define LOAD_DS 0x02 /* DS needs to be loaded in protected mode. */
+
+/*
+ * The invalid opcode handler exists to work around fishy application
+ * code and paper over CPU generation differences:
+ *
+ * - Skip redundant LOCK prefixes (allowed on 8086, #UD on 286+).
+ * - Emulate just enough of 286 LOADALL.
+ *
+ */
+void BIOSCALL inv_op_handler(uint16_t ds, uint16_t es, pusha_regs_t gr, volatile iret_addr_t ra)
+{
+ void __far *ins = ra.cs :> ra.ip;
+
+ if (*(uint8_t __far *)ins == 0xF0) {
+ /* LOCK prefix - skip over it and try again. */
+ ++ra.ip;
+ } else if (*(uint16_t __far *)ins == 0x050F) {
+ /* 286 LOADALL. NB: Same opcode as SYSCALL. */
+ ldall_286_s __far *ldbuf = 0 :> 0x800;
+ iret_addr_t __far *ret_addr;
+ uint32_t seg_base;
+ int seg_flags = 0;
+
+ /* One of the challenges is that we must restore SS:SP as well
+ * as CS:IP and FLAGS from the LOADALL buffer. We copy CS/IP/FLAGS
+ * from the buffer just below the SS:SP values from the buffer so
+ * that we can eventually IRET to the desired CS/IP/FLAGS/SS/SP
+ * values in one go.
+ */
+ ret_addr = ldbuf->ss :> (ldbuf->sp - sizeof(iret_addr_t));
+ ret_addr->ip = ldbuf->ip;
+ ret_addr->cs = ldbuf->cs;
+ ret_addr->flags.u.r16.flags = ldbuf->flags;
+
+ /* Examine ES/DS. */
+ seg_base = ldbuf->es_desc.base_lo | (uint32_t)ldbuf->es_desc.base_hi << 16;
+ if (seg_base != (uint32_t)ldbuf->es << 4)
+ seg_flags |= LOAD_ES;
+ seg_base = ldbuf->ds_desc.base_lo | (uint32_t)ldbuf->ds_desc.base_hi << 16;
+ if (seg_base != (uint32_t)ldbuf->ds << 4)
+ seg_flags |= LOAD_DS;
+
+ /* The LOADALL buffer doubles as a tiny GDT. */
+ load_gdtr(0x800, 4 * 8 - 1);
+
+ /* Store the ES base/limit/attributes in the unused words (GDT selector 8). */
+ ldbuf->unused2[0] = ldbuf->es_desc.limit;
+ ldbuf->unused2[1] = ldbuf->es_desc.base_lo;
+ ldbuf->unused2[2] = (ldbuf->es_desc.attr << 8) | ldbuf->es_desc.base_hi;
+ ldbuf->unused2[3] = 0;
+
+ /* Store the DS base/limit/attributes in other unused words. */
+ ldbuf->unused1[0] = ldbuf->ds_desc.limit;
+ ldbuf->unused1[1] = ldbuf->ds_desc.base_lo;
+ ldbuf->unused1[2] = (ldbuf->ds_desc.attr << 8) | ldbuf->ds_desc.base_hi;
+
+ /* Load the IDTR as specified. */
+ seg_base = ldbuf->idt_desc.base_lo | (uint32_t)ldbuf->idt_desc.base_hi << 16;
+ load_idtr(seg_base, ldbuf->idt_desc.limit);
+
+ /* Do the tricky bits now. */
+ load_rm_segs(seg_flags);
+ load_pm_segs();
+ ldall_finish();
+ } else {
+ /* There isn't much point in executing the invalid opcode handler
+ * in an endless loop, so halt right here.
+ */
+ int_enable();
+ halt_forever();
+ }
+}
diff --git a/src/VBox/Devices/PC/BIOS/keyboard.c b/src/VBox/Devices/PC/BIOS/keyboard.c
index 67b7a8b5..9a27d8ab 100644
--- a/src/VBox/Devices/PC/BIOS/keyboard.c
+++ b/src/VBox/Devices/PC/BIOS/keyboard.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -166,7 +166,7 @@ void keyboard_panic(uint16_t status)
{
// If you're getting a 993 keyboard panic here,
// please see the comment in keyboard_init
-
+
BX_PANIC("Keyboard error:%u\n",status);
}
@@ -312,7 +312,7 @@ void BIOSCALL keyboard_init(void)
unsigned int enqueue_key(uint8_t scan_code, uint8_t ascii_code)
{
uint16_t buffer_start, buffer_end, buffer_head, buffer_tail, temp_tail;
-
+
#if BX_CPU < 2
buffer_start = 0x001E;
buffer_end = 0x003E;
@@ -320,18 +320,18 @@ unsigned int enqueue_key(uint8_t scan_code, uint8_t ascii_code)
buffer_start = read_word(0x0040, 0x0080);
buffer_end = read_word(0x0040, 0x0082);
#endif
-
+
buffer_head = read_word(0x0040, 0x001A);
buffer_tail = read_word(0x0040, 0x001C);
-
+
temp_tail = buffer_tail;
buffer_tail += 2;
if (buffer_tail >= buffer_end)
buffer_tail = buffer_start;
-
+
if (buffer_tail == buffer_head)
return(0);
-
+
write_byte(0x0040, temp_tail, ascii_code);
write_byte(0x0040, temp_tail+1, scan_code);
write_word(0x0040, 0x001C, buffer_tail);
@@ -346,25 +346,25 @@ void BIOSCALL int09_function(uint16_t ES, uint16_t DI, uint16_t SI, uint16_t BP,
{
uint8_t scancode, asciicode, shift_flags;
uint8_t mf2_flags, mf2_state, flag;
-
+
//
// DS has been set to F000 before call
//
-
-
+
+
scancode = GET_AL();
-
+
if (scancode == 0) {
BX_INFO("KBD: int09 handler: AL=0\n");
return;
}
-
-
+
+
shift_flags = read_byte(0x0040, 0x17);
mf2_flags = read_byte(0x0040, 0x18);
mf2_state = read_byte(0x0040, 0x96);
asciicode = 0;
-
+
switch (scancode) {
case 0x3a: /* Caps Lock press */
shift_flags ^= 0x40;
@@ -418,7 +418,7 @@ void BIOSCALL int09_function(uint16_t ES, uint16_t DI, uint16_t SI, uint16_t BP,
}
}
break;
-
+
case 0x38: /* Alt press */
shift_flags |= 0x08;
write_byte(0x0040, 0x17, shift_flags);
@@ -441,7 +441,7 @@ void BIOSCALL int09_function(uint16_t ES, uint16_t DI, uint16_t SI, uint16_t BP,
write_byte(0x0040, 0x18, mf2_flags);
}
break;
-
+
case 0x45: /* Num Lock press */
if ((mf2_state & 0x03) == 0) {
mf2_flags |= 0x20;
@@ -456,24 +456,24 @@ void BIOSCALL int09_function(uint16_t ES, uint16_t DI, uint16_t SI, uint16_t BP,
write_byte(0x0040, 0x18, mf2_flags);
}
break;
-
+
case 0x46: /* Scroll Lock press */
mf2_flags |= 0x10;
write_byte(0x0040, 0x18, mf2_flags);
shift_flags ^= 0x10;
write_byte(0x0040, 0x17, shift_flags);
break;
-
+
case 0xc6: /* Scroll Lock release */
mf2_flags &= ~0x10;
write_byte(0x0040, 0x18, mf2_flags);
break;
-
+
case 0x53: /* Del press */
if ((shift_flags & 0x0c) == 0x0c)
jmp_post();
/* fall through */
-
+
default:
if (scancode & 0x80) {
break; /* toss key releases ... */
@@ -495,7 +495,7 @@ void BIOSCALL int09_function(uint16_t ES, uint16_t DI, uint16_t SI, uint16_t BP,
} else if (shift_flags & 0x03) { /* LSHIFT + RSHIFT */
/* check if lock state should be ignored
* because a SHIFT key are pressed */
-
+
if (shift_flags & scan_to_scanascii[scancode].lock_flags) {
asciicode = scan_to_scanascii[scancode].normal;
scancode = scan_to_scanascii[scancode].normal >> 8;
@@ -530,7 +530,7 @@ unsigned int dequeue_key(uint8_t __far *scan_code, uint8_t __far *ascii_code, un
{
uint16_t buffer_start, buffer_end, buffer_head, buffer_tail;
uint8_t acode, scode;
-
+
#if BX_CPU < 2
buffer_start = 0x001E;
buffer_end = 0x003E;
@@ -538,10 +538,10 @@ unsigned int dequeue_key(uint8_t __far *scan_code, uint8_t __far *ascii_code, un
buffer_start = read_word(0x0040, 0x0080);
buffer_end = read_word(0x0040, 0x0082);
#endif
-
+
buffer_head = read_word(0x0040, 0x001a);
buffer_tail = read_word(0x0040, 0x001c);
-
+
if (buffer_head != buffer_tail) {
acode = read_byte(0x0040, buffer_head);
scode = read_byte(0x0040, buffer_head+1);
@@ -580,9 +580,9 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
{
uint8_t scan_code, ascii_code, shift_flags, led_flags, count;
uint16_t kbd_code, max;
-
+
BX_DEBUG_INT16("int16: AX=%04x BX=%04x CX=%04x DX=%04x \n", AX, BX, CX, DX);
-
+
shift_flags = read_byte(0x0040, 0x17);
led_flags = read_byte(0x0040, 0x97);
if ((((shift_flags >> 4) & 0x07) ^ (led_flags & 0x07)) != 0) {
@@ -600,7 +600,7 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
}
int_enable();
}
-
+
switch (GET_AH()) {
case 0x00: /* read keyboard input */
if ( !dequeue_key(&scan_code, &ascii_code, 1) ) {
@@ -612,7 +612,7 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
ascii_code = 0;
AX = (scan_code << 8) | ascii_code;
break;
-
+
case 0x01: /* check keyboard status */
SET_IF(); /* Enable interrupts. Some callers depend on that! */
if ( !dequeue_key(&scan_code, &ascii_code, 0) ) {
@@ -626,12 +626,12 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
AX = (scan_code << 8) | ascii_code;
CLEAR_ZF();
break;
-
+
case 0x02: /* get shift flag status */
shift_flags = read_byte(0x0040, 0x17);
SET_AL(shift_flags);
break;
-
+
case 0x05: /* store key-stroke into buffer */
if ( !enqueue_key(GET_CH(), GET_CL()) ) {
SET_AL(1);
@@ -640,7 +640,7 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
SET_AL(0);
}
break;
-
+
case 0x09: /* GET KEYBOARD FUNCTIONALITY */
// bit Bochs Description
// 7 0 reserved
@@ -654,7 +654,7 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
//
SET_AL(0x30);
break;
-
+
case 0x0A: /* GET KEYBOARD ID */
count = 2;
kbd_code = 0x0;
@@ -680,7 +680,7 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
}
BX=kbd_code;
break;
-
+
case 0x10: /* read MF-II keyboard input */
if ( !dequeue_key(&scan_code, &ascii_code, 1) ) {
BX_PANIC("KBD: int16h: out of keyboard input\n");
@@ -689,7 +689,7 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
ascii_code = 0;
AX = (scan_code << 8) | ascii_code;
break;
-
+
case 0x11: /* check MF-II keyboard status */
SET_IF();
if ( !dequeue_key(&scan_code, &ascii_code, 0) ) {
@@ -701,7 +701,7 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
AX = (scan_code << 8) | ascii_code;
CLEAR_ZF();
break;
-
+
case 0x12: /* get extended keyboard status */
shift_flags = read_byte(0x0040, 0x17);
SET_AL(shift_flags);
@@ -710,22 +710,22 @@ void BIOSCALL int16_function(volatile kbd_regs_t r)
SET_AH(shift_flags);
BX_DEBUG_INT16("int16: func 12 sending %04x\n",AX);
break;
-
+
case 0x92: /* keyboard capability check called by DOS 5.0+ keyb */
SET_AH(0x80); // function int16 ah=0x10-0x12 supported
break;
-
+
case 0xA2: /* 122 keys capability check called by DOS 5.0+ keyb */
// don't change AH : function int16 ah=0x20-0x22 NOT supported
break;
-
+
//@todo: what's the point of handling this??
#if 0
case 0x6F:
if (GET_AL() == 0x08)
SET_AH(0x02); // unsupported, aka normal keyboard
#endif
-
+
default:
BX_INFO("KBD: unsupported int 16h function %02x\n", GET_AH());
BX_INFO("AX=%04x BX=%04x CX=%04x DX=%04x \n", AX, BX, CX, DX);
diff --git a/src/VBox/Devices/PC/BIOS/logo.c b/src/VBox/Devices/PC/BIOS/logo.c
index c36b8778..1fd30bc4 100644
--- a/src/VBox/Devices/PC/BIOS/logo.c
+++ b/src/VBox/Devices/PC/BIOS/logo.c
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2004-2011 Oracle Corporation
+ * Copyright (C) 2004-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -234,7 +234,7 @@ void print_detected_harddisks(void)
{
if (sata_ctrl_printed == 0)
{
- printf("\n\nAHCI controller:\n");
+ printf("\n\n AHCI controller:");
sata_ctrl_printed = 1;
}
@@ -248,7 +248,7 @@ void print_detected_harddisks(void)
{
if (scsi_ctrl_printed == 0)
{
- printf("\n\nSCSI controller:\n");
+ printf("\n\n SCSI controller:");
scsi_ctrl_printed = 1;
}
@@ -261,7 +261,7 @@ void print_detected_harddisks(void)
if ((device < 4) && (ide_ctrl_printed == 0))
{
- printf("IDE controller:\n");
+ printf(" IDE controller:");
ide_ctrl_printed = 1;
}
else if ((device >= 4) && (sata_ctrl_printed == 0))
diff --git a/src/VBox/Devices/PC/BIOS/makefile b/src/VBox/Devices/PC/BIOS/makefile
index e22323da..b8a00e48 100644
--- a/src/VBox/Devices/PC/BIOS/makefile
+++ b/src/VBox/Devices/PC/BIOS/makefile
@@ -29,10 +29,11 @@ INCLS = -I$(Q)../../../../../include$(Q)
.asm.obj : .autodepend
wasm -fo=.obj $(AFLAGS) $(DEFS) $<
-OBJS = bios.obj print.obj ata.obj floppy.obj eltorito.obj boot.obj &
- keyboard.obj disk.obj serial.obj system.obj timepci.obj logo.obj &
- ps2mouse.obj parallel.obj scsi.obj ahci.obj apm.obj apm_pm.obj &
- pcibios.obj pciutil.obj vds.obj pcibio32.obj pci32.obj orgs.obj
+OBJS = bios.obj print.obj ata.obj floppy.obj floppyt.obj eltorito.obj &
+ boot.obj keyboard.obj disk.obj serial.obj system.obj invop.obj &
+ timepci.obj logo.obj ps2mouse.obj parallel.obj scsi.obj &
+ ahci.obj apm.obj apm_pm.obj pcibios.obj pciutil.obj vds.obj &
+ pcibio32.obj pci32.obj orgs.obj
vbxbios.rom : vbxbios.bin
biossums $< $@
diff --git a/src/VBox/Devices/PC/BIOS/notes.txt b/src/VBox/Devices/PC/BIOS/notes.txt
index 07017cb9..423ea134 100644
--- a/src/VBox/Devices/PC/BIOS/notes.txt
+++ b/src/VBox/Devices/PC/BIOS/notes.txt
@@ -8,6 +8,9 @@
- OS/2 (WSeB/MCP/ACP) and Windows 98 SE are some of the very few operating
systems which use the El Torito floppy emulation.
+- NetWare 5.1 is one of the *extremely* few users of El Torito hard disk
+ emulation.
+
- Keystroke check (INT 16h, fn 01h/10h) always enables interrupts on return.
DOS POWER.EXE depends on that in some situations.
@@ -26,6 +29,9 @@
- OS/2 is the only known guest which can run the 16-bit PCI BIOS in protected
mode (but only if the 32-bit PCI BIOS is unavailable).
+- NetWare 6.x is the only known guest which uses the PCI BIOS service to read
+ the IRQ routing table.
+
- Any disk reads which use bus-master DMA (AHCI, IDE BM) must use VDS
(Virtual DMA Services) when present. Otherwise any reads/writes when the
real mode addresses don't map directly to physical addresses will fail
@@ -40,6 +46,11 @@
and clear the memory. For those, the FDPT must be in the BIOS ROM area, or
the OS will destroy it (even when it's at 0:300 in the IVT).
+- Windows NT (including XP) uses INT 13h/08h to obtain the DPT for each floppy
+ drive. NT assumes a 13-byte DPT which includes the number of tracks. NT will
+ refuse to read more tracks than the DPT specifies and formats as many tracks
+ as the DPT specifies.
+
- Windows 98 SE boot CD uses 32-bit registers in real mode and will fail in
mysterious ways if BIOS trashes high bits of EAX (and likely others).
@@ -52,6 +63,22 @@
- Windows 98 is one of the few APM 1.2 users; Windows 95 uses APM 1.1, while
newer systems prefer ACPI.
+- QNX4 calls 16-bit protected-mode PCI BIOS in an environment where ESP is
+ 16-bit but SS is a 32-bit stack segment. In such environments, using the
+ ENTER/LEAVE sequence is fatal if the high word of EBP is non-zero (which
+ it will be with QNX 4.25). LEAVE propagates the high word of EBP into ESP
+ with fatal consequences.
+
+- Plan 9 also runs 16-bit code with a 32-bit stack segment, except Plan 9
+ thinks it counts as real mode. Same ENTER/LEAVE problem as above.
+
+- AIX 1.3 is a rare user of INT 15h/89h (switch to protected mode) service.
+
+- IBM OS/2 1.0/1.1 (but not other versions!) attempt to execute a 286 LOADALL
+ instruction. LOADALL must be emulated for OS/2 to work properly. HIMEM.SYS
+ version 2.03 and later also contains 286 LOADALL code but this will not be
+ executed on 386+ processors.
+
Notes on BIOS implementation
----------------------------
@@ -91,6 +118,9 @@
protected-mode APM is written in assembler for both 16-bit and 32-bit calls,
with a small 32->16 thunk.
+- The -of switch can be used to avoid generating ENTER/LEAVE instructions.
+ This appears to be an undocumented and perhaps unintentional side effect.
+
Code size notes (code as of 7/6/2011):
diff --git a/src/VBox/Devices/PC/BIOS/orgs.asm b/src/VBox/Devices/PC/BIOS/orgs.asm
index 4d455b85..a380ea2f 100644
--- a/src/VBox/Devices/PC/BIOS/orgs.asm
+++ b/src/VBox/Devices/PC/BIOS/orgs.asm
@@ -126,6 +126,7 @@ extrn _ata_detect:near
extrn _cdemu_init:near
extrn _keyboard_init:near
extrn _print_bios_banner:near
+extrn _inv_op_handler:near
;; Symbols referenced from C code
@@ -214,22 +215,42 @@ eoi_master_pic:
out PIC_MASTER, al
ret
+ ;; routine to write the pointer in DX:AX to memory starting
+ ;; at DS:BX (repeat CX times)
+ ;; - modifies BX, CX
+set_int_vects proc near
+
+ mov [bx], ax
+ mov [bx+2], dx
+ add bx, 4
+ loop set_int_vects
+ ret
+
+set_int_vects endp
+
;; --------------------------------------------------------
;; POST entry point
;; --------------------------------------------------------
BIOSORG 0E05Bh
post:
- xor ax, ax
-
- ;; reset the DMA controllers
- out 00Dh, al
- out 0DAh, al
+ cli
- ;; then initialize the DMA controllers
- mov al, 0C0h
- out 0D6h, al ; enable channel 4 cascade
- mov al, 0
- out 0D4h, al ; unmask channel 4
+ ;; Check if in protected (V86) mode. If so, the CPU needs
+ ;; to be reset.
+ smsw ax
+ test ax, 1
+ jz in_real_mode
+
+ ;; Reset processor to get out of protected mode. Use system
+ ;; port instead of KBC.
+ ;; NB: We only need bit 0 to be set in AL, which we just
+ ;; determined to be the case.
+ out 92h, al
+ jmp $ ; not strictly necessary in a VM
+
+
+in_real_mode:
+ ;; TODO: Check KBC system flag first
;; read the CMOS shutdown status
mov al, 0Fh
@@ -237,7 +258,7 @@ post:
in al, CMOS_DATA
;; save status
- mov bl, al
+ xchg ah, al
;; reset the shutdown status in CMOS
mov al, 0Fh
@@ -245,14 +266,38 @@ post:
mov al, 0
out CMOS_DATA, al
+ ;; pre-check the shutdown status - shutdown codes 9/A leave
+ ;; the hardware alone
+ mov al, ah
+ cmp al, 09h
+ jz check_shutdown
+ cmp al, 0Ah
+ jz check_shutdown
+
+ xor al, al
+
+ ;; reset the DMA controllers
+ out 00Dh, al
+ out 0DAh, al
+
+ ;; then initialize the DMA controllers
+ mov al, 0C0h
+ out 0D6h, al ; enable channel 4 cascade
+ mov al, 0
+ out 0D4h, al ; unmask channel 4
+
+check_shutdown:
;; examine the shutdown status code
- mov al, bl
+ mov al, ah
cmp al, 0
jz normal_post
+
cmp al, 0Dh
jae normal_post
cmp al, 9
- je normal_post ;; TODO: really?!
+ jne check_next_std
+ jmp return_blkmove
+check_next_std:
;; 05h = EOI + jump through 40:67
cmp al, 5
@@ -262,23 +307,9 @@ post:
;; OpenSolaris sets the status to 0Ah in some cases?
jmp normal_post
-
- ;; routine to write the pointer in DX:AX to memory starting
- ;; at DS:BX (repeat CX times)
- ;; - modifies BX, CX
-set_int_vects proc near
-
- mov [bx], ax
- mov [bx+2], dx
- add bx, 4
- loop set_int_vects
- ret
-
-set_int_vects endp
-
normal_post:
;; shutdown code 0: normal startup
- cli
+
;; Set up the stack top at 0:7800h. The stack should not be
;; located above 0:7C00h; that conflicts with PXE, which
;; considers anything above that address to be fair game.
@@ -350,6 +381,7 @@ memory_cleared:
;; set up various service vectors
;; TODO: This should use the table at FEF3h instead
+ SET_INT_VECTOR 06h, BIOSSEG, int06_handler
SET_INT_VECTOR 11h, BIOSSEG, int11_handler
SET_INT_VECTOR 12h, BIOSSEG, int12_handler
SET_INT_VECTOR 15h, BIOSSEG, int15_handler
@@ -461,43 +493,7 @@ memory_cleared:
call rom_scan
- C_SETUP
- ;; ATA/ATAPI driver setup
- call _ata_init
- call _ata_detect
-
-ifdef VBOX_WITH_AHCI
- ; AHCI driver setup
- call _ahci_init
-endif
-
-ifdef VBOX_WITH_SCSI
- ; SCSI driver setup
- call _scsi_init
-endif
-
- ;; floppy setup
- call floppy_post
-
- ;; hard drive setup
- call hard_drive_post
-
- C_SETUP ; in case assembly code changed things
- call _print_bios_banner
-
- ;; El Torito floppy/hard disk emulation
- call _cdemu_init
-
- ; TODO: what's the point of enabling interrupts here??
- sti ; enable interrupts
- int 19h
- ;; does not return here
- sti
-wait_forever:
- hlt
- jmp wait_forever
- cli
- hlt
+ jmp norm_post_cont
;; --------------------------------------------------------
@@ -518,11 +514,6 @@ int75_handler:
hard_drive_post proc near
- ;; TODO Why? And what about secondary controllers?
- mov al, 0Ah ; disable IRQ 14
- mov dx, 03F6h
- out dx, al
-
xor ax, ax
mov ds, ax
;; TODO: Didn't we just clear the entire EBDA?
@@ -546,6 +537,78 @@ hard_drive_post proc near
hard_drive_post endp
+norm_post_cont:
+ C_SETUP
+ ;; ATA/ATAPI driver setup
+ call _ata_init
+ call _ata_detect
+
+ifdef VBOX_WITH_AHCI
+ ; AHCI driver setup
+ call _ahci_init
+endif
+
+ifdef VBOX_WITH_SCSI
+ ; SCSI driver setup
+ call _scsi_init
+endif
+
+ ;; floppy setup
+ call floppy_post
+
+ ;; hard drive setup
+ call hard_drive_post
+
+ C_SETUP ; in case assembly code changed things
+ call _print_bios_banner
+
+ ;; El Torito floppy/hard disk emulation
+ call _cdemu_init
+
+ ; TODO: what's the point of enabling interrupts here??
+ sti ; enable interrupts
+ int 19h
+ ;; does not return here
+ sti
+wait_forever:
+ hlt
+ jmp wait_forever
+ cli
+ hlt
+
+
+;;
+;; Return from block move (shutdown code 09h). Care must be taken to disturb
+;; register and memory state as little as possible.
+;;
+return_blkmove:
+ mov ax, 40h
+ mov ds, ax
+ ;; restore user stack
+ mov ss, ds:[69h]
+ mov sp, ds:[67h]
+ ;; reset A20 gate
+ in al, 92h
+ and al, 0FDh
+ out 92h, al
+ ;; ensure proper real mode IDT
+ lidt fword ptr cs:_rmode_IDT
+ ;; restore user segments
+ pop ds
+ pop es
+ ;; set up BP
+ mov bp, sp
+ ;; restore status code
+ in al, 80h
+ mov [bp+15], al
+ ;; set ZF/CF
+ cmp ah,al ; AH is zero here!
+ ;; restore registers and return
+ popa
+ sti
+ retf 2
+
+
;; --------------------------------------------------------
;; INT 13h handler - Disk services
;; --------------------------------------------------------
@@ -917,6 +980,21 @@ int09_finish:
;; --------------------------------------------------------
+;; INT 06h handler - Invalid Opcode Exception
+;; --------------------------------------------------------
+
+int06_handler:
+ pusha
+ push es
+ push ds
+ C_SETUP
+ call _inv_op_handler
+ pop ds
+ pop es
+ popa
+ iret
+
+;; --------------------------------------------------------
;; INT 13h handler - Diskette service
;; --------------------------------------------------------
BIOSORG 0EC59h
@@ -1536,6 +1614,8 @@ int15_handler:
je int15_handler32
cmp ah, 0E8h
je int15_handler32
+ cmp ah, 0d0h
+ je int15_handler32
pusha
cmp ah, 53h ; APM function?
je apm_call
@@ -1700,23 +1780,11 @@ int08_handler:
sti
push eax
push ds
- xor ax, ax
- mov ds, ax
-
- ;; time to turn off floppy driv motor(s)?
- mov al, ds:[440h]
- or al, al
- jz int08_floppy_off
- ;; turn motor(s) off
push dx
- mov dx, 03F2h
- in al, dx
- and al, 0CFh
- out dx, al
- pop dx
+ mov ax, 40h
+ mov ds, ax
-int08_floppy_off:
- mov eax, ds:[46Ch] ; get ticks dword
+ mov eax, ds:[6Ch] ; get ticks dword
inc eax
;; compare eax to one day's worth of ticks (at 18.2 Hz)
@@ -1724,13 +1792,30 @@ int08_floppy_off:
jb int08_store_ticks
;; there has been a midnight rollover
xor eax, eax
- inc byte ptr ds:[470h] ; increment rollover flag
+ inc byte ptr ds:[70h] ; increment rollover flag
int08_store_ticks:
- mov ds:[46Ch], eax
+ mov ds:[6Ch], eax
+
+ ;; time to turn off floppy drive motor(s)?
+ mov al, ds:[40h]
+ or al, al
+ jz int08_floppy_off
+ dec al
+ mov ds:[40h], al
+ jnz int08_floppy_off
+ ;; turn motor(s) off
+ mov dx, 03F2h
+ in al, dx
+ and al, 0CFh
+ out dx, al
+int08_floppy_off:
+
int 1Ch ; call the user timer handler
+
cli
call eoi_master_pic
+ pop dx
pop ds
pop eax
.286
diff --git a/src/VBox/Devices/PC/BIOS/parallel.c b/src/VBox/Devices/PC/BIOS/parallel.c
index d86612d5..87f88ffa 100644
--- a/src/VBox/Devices/PC/BIOS/parallel.c
+++ b/src/VBox/Devices/PC/BIOS/parallel.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -49,7 +49,7 @@ void BIOSCALL int17_function(pusha_regs_t regs, uint16_t es, uint16_t ds, volati
uint8_t val8;
int_enable();
-
+
addr = read_word(0x0040, (regs.u.r16.dx << 1) + 8);
if ((regs.u.r8.ah < 3) && (regs.u.r16.dx < 3) && (addr > 0)) {
timeout = read_byte(0x0040, 0x0078 + regs.u.r16.dx) << 8;
diff --git a/src/VBox/Devices/PC/BIOS/pcibios.c b/src/VBox/Devices/PC/BIOS/pcibios.c
index a904403d..33f79c0a 100644
--- a/src/VBox/Devices/PC/BIOS/pcibios.c
+++ b/src/VBox/Devices/PC/BIOS/pcibios.c
@@ -79,7 +79,7 @@ enum pci_error {
* with at least 1,024 bytes of stack space available, that interrupts are not
* enabled during execution, and that the routines are re-entrant.
*
- * Implementation notes:
+ * Implementation notes:
* - The PCI BIOS interface already uses certain 32-bit registers even in
* 16-bit mode. To simplify matters, all 32-bit GPRs are saved/restored and
* may be used by helper routines (notably for 32-bit port I/O).
@@ -115,8 +115,8 @@ typedef struct {
typedef struct {
pushad_regs_t gr;
- uint16_t es;
uint16_t ds;
+ uint16_t es;
iret_addr_t ra;
} pci_regs_t;
@@ -231,8 +231,8 @@ uint16_t PCIxx(find_device)(uint32_t search_item, uint16_t index, int search_cla
if (search_class) {
BX_DEBUG_PCI("PCI: Find class %08lX index %u\n",
search_item, index);
- } else
- BX_DEBUG_PCI("PCI: Find device %04X:%04X index %u\n",
+ } else
+ BX_DEBUG_PCI("PCI: Find device %04X:%04X index %u\n",
(uint16_t)search_item, (uint16_t)(search_item >> 16), index);
bus_dev_fn = 0; /* Start at the beginning. */
@@ -260,8 +260,8 @@ uint16_t PCIxx(find_device)(uint32_t search_item, uint16_t index, int search_cla
}
/* If the header type indicates a bus, we're interested. The secondary
- * and subordinate bus numbers will indicate which buses are present;
- * thus we can determine the highest bus number. In the common case,
+ * and subordinate bus numbers will indicate which buses are present;
+ * thus we can determine the highest bus number. In the common case,
* there will be only the primary bus (i.e. bus 0) and we can avoid
* looking at the remaining 255 theoretically present buses. This check
* only needs to be done on the primary bus, since bridges must report
@@ -316,7 +316,7 @@ void BIOSCALL PCIxx(function)(volatile pci_regs_t r)
BX_DEBUG_PCI("PCI: AX=%04X BX=%04X CX=%04X DI=%04X\n", AX, BX, CX, DI);
SET_AH(SUCCESSFUL); /* Assume success. */
- CLEAR_CF();
+ CLEAR_CF();
switch (GET_AL()) {
case PCI_BIOS_PRESENT:
@@ -387,6 +387,9 @@ void BIOSCALL PCIxx(function)(volatile pci_regs_t r)
break;
case GET_IRQ_ROUTING:
route_buf = ES :> (void *)DI;
+ BX_DEBUG_PCI("PCI: Route Buf %04X:%04X size %04X (at %04X:%04X)\n",
+ FP_SEG(route_buf->buf_ptr), FP_OFF(route_buf->buf_ptr),
+ route_buf->buf_size, ES, DI);
if (pci_routing_table_size > route_buf->buf_size) {
SET_AH(BUFFER_TOO_SMALL);
SET_CF();
@@ -395,6 +398,7 @@ void BIOSCALL PCIxx(function)(volatile pci_regs_t r)
/* IRQs 9 and 11 are PCI only. */
BX = (1 << 9) | (1 << 11);
}
+ route_buf->buf_size = pci_routing_table_size;
break;
default:
BX_INFO("PCI: Unsupported function AX=%04X BX=%04X called\n", AX, BX);
diff --git a/src/VBox/Devices/PC/BIOS/pcibios.inc b/src/VBox/Devices/PC/BIOS/pcibios.inc
index 1de5e488..7cb445ed 100644
--- a/src/VBox/Devices/PC/BIOS/pcibios.inc
+++ b/src/VBox/Devices/PC/BIOS/pcibios.inc
@@ -78,7 +78,7 @@ endif
if not BX_ROMBIOS32
pci_irq_list:
- db 11, 10, 9, 5;
+ db 11, 10, 9, 11
pcibios_init_sel_reg:
push eax
diff --git a/src/VBox/Devices/PC/BIOS/pciutil.c b/src/VBox/Devices/PC/BIOS/pciutil.c
index 45c9e200..7135fdea 100644
--- a/src/VBox/Devices/PC/BIOS/pciutil.c
+++ b/src/VBox/Devices/PC/BIOS/pciutil.c
@@ -101,7 +101,7 @@ uint8_t pci_write_cfgd(uint16_t op, uint16_t bus_dev_fn, uint16_t reg, uint32_t
".386" \
"xchg cx, dx" \
"shl ecx, 16" \
- "mov cx, dx" \
+ "mov cx, dx" \
"int 0x1a" \
parm [ax] [bx] [di] [dx cx];
diff --git a/src/VBox/Devices/PC/BIOS/pirq.inc b/src/VBox/Devices/PC/BIOS/pirq.inc
index 5b0cb494..1817e620 100644
--- a/src/VBox/Devices/PC/BIOS/pirq.inc
+++ b/src/VBox/Devices/PC/BIOS/pirq.inc
@@ -467,6 +467,6 @@ ifdef VBOX
endif ; VBOX
pci_routing_table_end:
;; Size of the table
-pci_routing_table_size dw pci_routing_table_end - pci_routing_table
+_pci_routing_table_size dw pci_routing_table_end - pci_routing_table
endif ; BX_PCIBIOS
diff --git a/src/VBox/Devices/PC/BIOS/print.c b/src/VBox/Devices/PC/BIOS/print.c
index 7d549949..e8a82d94 100644
--- a/src/VBox/Devices/PC/BIOS/print.c
+++ b/src/VBox/Devices/PC/BIOS/print.c
@@ -47,8 +47,6 @@
// Debug printf support
/* Redirect INFO output to backdoor logging port. */
-#define PANIC_PORT 0x400
-#define PANIC_PORT2 0x401
#define INFO_PORT 0x504
#define DEBUG_PORT 0x403
@@ -154,17 +152,14 @@ void bios_printf(uint16_t action, const char *s, ...)
bx_bool in_format;
int i;
uint16_t arg, nibble, hibyte, format_width, hexadd;
- va_list args;
-
+ va_list args;
+
va_start( args, s );
-
+
in_format = 0;
format_width = 0;
-
+
if ((action & BIOS_PRINTF_DEBHALT) == BIOS_PRINTF_DEBHALT) {
-#if BX_VIRTUAL_PORTS
- outb(PANIC_PORT2, 0x00);
-#endif
bios_printf (BIOS_PRINTF_SCREEN, "FATAL: ");
}
diff --git a/src/VBox/Devices/PC/BIOS/ps2mouse.c b/src/VBox/Devices/PC/BIOS/ps2mouse.c
index a7eb2237..6468a255 100644
--- a/src/VBox/Devices/PC/BIOS/ps2mouse.c
+++ b/src/VBox/Devices/PC/BIOS/ps2mouse.c
@@ -79,7 +79,7 @@ uint8_t get_mouse_data(uint8_t __far *data)
while ((inb(0x64) & 0x21) != 0x21 && retries)
--retries;
-
+
if (!retries)
return(1);
@@ -92,7 +92,7 @@ void set_kbd_command_byte(uint8_t command_byte)
{
if (inb(0x64) & 0x02)
BX_PANIC(panic_msg_keyb_buffer_full,"setkbdcomm");
-
+
outb(0x64, 0x60); // write command byte
outb(0x60, command_byte);
}
@@ -104,28 +104,28 @@ void BIOSCALL int74_function(volatile uint16_t make_farcall, volatile uint16_t Z
uint16_t ebda_seg=read_word(0x0040,0x000E);
uint8_t in_byte, index, package_count;
uint8_t mouse_flags_1, mouse_flags_2;
-
+
BX_DEBUG_INT74("entering int74_function\n");
make_farcall = 0;
-
+
in_byte = inb(0x64);
if ( (in_byte & 0x21) != 0x21 ) {
return;
}
in_byte = inb(0x60);
BX_DEBUG_INT74("int74: read byte %02x\n", in_byte);
-
+
mouse_flags_1 = read_byte(ebda_seg, 0x0026);
mouse_flags_2 = read_byte(ebda_seg, 0x0027);
-
+
if ( (mouse_flags_2 & 0x80) != 0x80 ) {
return;
}
-
+
package_count = mouse_flags_2 & 0x07;
index = mouse_flags_1 & 0x07;
write_byte(ebda_seg, 0x28 + index, in_byte);
-
+
if ( index >= package_count ) {
BX_DEBUG_INT74("int74_function: make_farcall=1\n");
status = read_byte(ebda_seg, 0x0028 + 0);
@@ -164,7 +164,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
// device driver should attempt command again
// 05: cannot enable mouse, since no far call has been installed
// 80/86: mouse service not implemented
-
+
if (regs.u.r8.al > 7) {
BX_DEBUG_INT15_MS("unsupported subfn\n");
// invalid function
@@ -172,12 +172,12 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
regs.u.r8.ah = 1;
return;
}
-
+
// Valid subfn; disable AUX input and IRQ12, assume no error
set_kbd_command_byte(0x65);
CLEAR_CF();
regs.u.r8.ah = 0;
-
+
switch (regs.u.r8.al) {
case 0: // Disable/Enable Mouse
BX_DEBUG_INT15_MS("case 0: ");
@@ -202,7 +202,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
BX_DEBUG_INT15_MS("Enable Mouse\n");
mouse_cmd = 0xF4; // enable mouse command
}
-
+
ret = send_to_mouse_ctrl(mouse_cmd); // disable mouse command
if (ret == 0) {
ret = get_mouse_data(&mouse_data1);
@@ -211,12 +211,12 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
break;
}
}
-
+
// interface error
SET_CF();
regs.u.r8.ah = 3;
break;
-
+
case 5: // Initialize Mouse
// Valid package sizes are 1 to 8
if ( (regs.u.r8.bh < 1) || (regs.u.r8.bh > 8) ) {
@@ -228,7 +228,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
mouse_flags_2 = (mouse_flags_2 & 0xf8) | (regs.u.r8.bh - 1);
write_byte(ebda_seg, 0x0027, mouse_flags_2);
// fall through!
-
+
case 1: // Reset Mouse
BX_DEBUG_INT15_MS("case 1 or 5:\n");
// clear current package byte index
@@ -259,12 +259,12 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
}
}
}
-
+
// interface error
SET_CF();
regs.u.r8.ah = 3;
break;
-
+
case 2: // Set Sample Rate
BX_DEBUG_INT15_MS("case 2:\n");
switch (regs.u.r8.bh) {
@@ -295,7 +295,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
regs.u.r8.ah = 2;
}
break;
-
+
case 3: // Set Resolution
BX_DEBUG_INT15_MS("case 3:\n");
// BX:
@@ -325,7 +325,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
regs.u.r8.ah = 2;
}
break;
-
+
case 4: // Get Device ID
BX_DEBUG_INT15_MS("case 4:\n");
ret = send_to_mouse_ctrl(0xF2); // get mouse ID command
@@ -340,7 +340,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
regs.u.r8.ah = 3;
}
break;
-
+
case 6: // Return Status & Set Scaling Factor...
BX_DEBUG_INT15_MS("case 6:\n");
switch (regs.u.r8.bh) {
@@ -367,12 +367,12 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
}
}
}
-
+
// interface error
SET_CF();
regs.u.r8.ah = 3;
break;
-
+
case 1: // Set Scaling Factor to 1:1
case 2: // Set Scaling Factor to 2:1
if (regs.u.r8.bh == 1) {
@@ -390,7 +390,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
regs.u.r8.ah = 3;
}
break;
-
+
default:
BX_PANIC("INT 15h C2 AL=6, BH=%02x\n", (unsigned) regs.u.r8.bh);
// invalid subfunction
@@ -398,7 +398,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
regs.u.r8.ah = 1;
}
break;
-
+
case 7: // Set Mouse Handler Address
BX_DEBUG_INT15_MS("case 7:\n");
mouse_driver_seg = ES;
@@ -418,7 +418,7 @@ void BIOSCALL int15_function_mouse(pusha_regs_t regs, uint16_t ES, uint16_t DS,
}
write_byte(ebda_seg, 0x0027, mouse_flags_2);
break;
-
+
default:
BX_PANIC("INT 15h C2 default case entered\n");
// invalid subfunction
diff --git a/src/VBox/Devices/PC/BIOS/scsi.c b/src/VBox/Devices/PC/BIOS/scsi.c
index 10a143bd..b40255ea 100644
--- a/src/VBox/Devices/PC/BIOS/scsi.c
+++ b/src/VBox/Devices/PC/BIOS/scsi.c
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2004-2011 Oracle Corporation
+ * Copyright (C) 2004-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -22,28 +22,28 @@
#include "ebda.h"
-//#define VBOX_SCSI_DEBUG 1 /* temporary */
-
-#ifdef VBOX_SCSI_DEBUG
-# define VBSCSI_DEBUG(...) BX_INFO(__VA_ARGS__)
+#if DEBUG_SCSI
+# define DBG_SCSI(...) BX_INFO(__VA_ARGS__)
#else
-# define VBSCSI_DEBUG(...)
+# define DBG_SCSI(...)
#endif
-#define VBSCSI_BUSY (1 << 0)
+#define VBSCSI_BUSY (1 << 0)
+#define VBSCSI_ERROR (1 << 1)
/* The I/O port of the BusLogic SCSI adapter. */
-#define BUSLOGIC_BIOS_IO_PORT 0x330
+#define BUSLOGIC_BIOS_IO_PORT 0x430
/* The I/O port of the LsiLogic SCSI adapter. */
-#define LSILOGIC_BIOS_IO_PORT 0x340
+#define LSILOGIC_BIOS_IO_PORT 0x434
/* The I/O port of the LsiLogic SAS adapter. */
-#define LSILOGIC_SAS_BIOS_IO_PORT 0x350
+#define LSILOGIC_SAS_BIOS_IO_PORT 0x438
#define VBSCSI_REGISTER_STATUS 0
#define VBSCSI_REGISTER_COMMAND 0
#define VBSCSI_REGISTER_DATA_IN 1
#define VBSCSI_REGISTER_IDENTIFY 2
#define VBSCSI_REGISTER_RESET 3
+#define VBSCSI_REGISTER_DEVSTAT 3
#define VBSCSI_MAX_DEVICES 16 /* Maximum number of devices a SCSI device can have. */
@@ -72,76 +72,96 @@ typedef struct {
ct_assert(sizeof(cdb_rw10) == 10);
-int scsi_cmd_data_in(uint16_t io_base, uint8_t device_id, uint8_t __far *aCDB,
- uint8_t cbCDB, uint8_t __far *buffer, uint16_t cbBuffer)
+
+void insb_discard(unsigned nbytes, unsigned port);
+#pragma aux insb_discard = \
+ ".286" \
+ "again:" \
+ "in al,dx" \
+ "loop again" \
+ parm [cx] [dx] modify exact [cx ax] nomemory;
+
+
+int scsi_cmd_data_in(uint16_t io_base, uint8_t target_id, uint8_t __far *aCDB,
+ uint8_t cbCDB, uint8_t __far *buffer, uint32_t length)
{
/* Check that the adapter is ready. */
- uint8_t status;
+ uint8_t status, sizes;
uint16_t i;
do
- {
- status = inb(io_base+VBSCSI_REGISTER_STATUS);
- } while (status & VBSCSI_BUSY);
-
- /* Write target ID. */
- outb(io_base+VBSCSI_REGISTER_COMMAND, device_id);
- /* Write transfer direction. */
- outb(io_base+VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_FROM_DEVICE);
- /* Write the CDB size. */
- outb(io_base+VBSCSI_REGISTER_COMMAND, cbCDB);
- /* Write buffer size. */
- outb(io_base+VBSCSI_REGISTER_COMMAND, cbBuffer);
- outb(io_base+VBSCSI_REGISTER_COMMAND, (cbBuffer >> 8));
- /* Write the CDB. */
- for (i = 0; i < cbCDB; i++)
- outb(io_base+VBSCSI_REGISTER_COMMAND, aCDB[i]);
+ status = inb(io_base + VBSCSI_REGISTER_STATUS);
+ while (status & VBSCSI_BUSY);
+
+
+ sizes = ((length >> 12) & 0xF0) | cbCDB;
+ outb(io_base + VBSCSI_REGISTER_COMMAND, target_id); /* Write the target ID. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_FROM_DEVICE); /* Write the transfer direction. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, sizes); /* Write CDB size and top bufsize bits. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, length); /* Write the buffer size. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, (length >> 8));
+ for (i = 0; i < cbCDB; i++) /* Write the CDB. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, aCDB[i]);
/* Now wait for the command to complete. */
do
- {
- status = inb(io_base+VBSCSI_REGISTER_STATUS);
- } while (status & VBSCSI_BUSY);
+ status = inb(io_base + VBSCSI_REGISTER_STATUS);
+ while (status & VBSCSI_BUSY);
+
+ /* Read in the data. The transfer length may be exactly 64K or more,
+ * which needs a bit of care when we're using 16-bit 'rep ins'.
+ */
+ while (length > 32768) {
+ DBG_SCSI("%s: reading 32K to %X:%X\n", __func__, FP_SEG(buffer), FP_OFF(buffer));
+ rep_insb(buffer, 32768, io_base + VBSCSI_REGISTER_DATA_IN);
+ length -= 32768;
+ buffer = (FP_SEG(buffer) + (32768 >> 4)) :> FP_OFF(buffer);
+ }
- /* Get the read data. */
- rep_insb(buffer, cbBuffer, io_base + VBSCSI_REGISTER_DATA_IN);
+ DBG_SCSI("%s: reading %ld bytes to %X:%X\n", __func__, length, FP_SEG(buffer), FP_OFF(buffer));
+ rep_insb(buffer, length, io_base + VBSCSI_REGISTER_DATA_IN);
return 0;
}
-int scsi_cmd_data_out(uint16_t io_base, uint8_t device_id, uint8_t __far *aCDB,
- uint8_t cbCDB, uint8_t __far *buffer, uint16_t cbBuffer)
+int scsi_cmd_data_out(uint16_t io_base, uint8_t target_id, uint8_t __far *aCDB,
+ uint8_t cbCDB, uint8_t __far *buffer, uint32_t length)
{
/* Check that the adapter is ready. */
- uint8_t status;
+ uint8_t status, sizes;
uint16_t i;
do
- {
- status = inb(io_base+VBSCSI_REGISTER_STATUS);
- } while (status & VBSCSI_BUSY);
-
- /* Write target ID. */
- outb(io_base+VBSCSI_REGISTER_COMMAND, device_id);
- /* Write transfer direction. */
- outb(io_base+VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_TO_DEVICE);
- /* Write the CDB size. */
- outb(io_base+VBSCSI_REGISTER_COMMAND, cbCDB);
- /* Write buffer size. */
- outb(io_base+VBSCSI_REGISTER_COMMAND, cbBuffer);
- outb(io_base+VBSCSI_REGISTER_COMMAND, (cbBuffer >> 8));
- /* Write the CDB. */
- for (i = 0; i < cbCDB; i++)
- outb(io_base+VBSCSI_REGISTER_COMMAND, aCDB[i]);
-
- /* Write data to I/O port. */
- rep_outsb(buffer, cbBuffer, io_base+VBSCSI_REGISTER_DATA_IN);
+ status = inb(io_base + VBSCSI_REGISTER_STATUS);
+ while (status & VBSCSI_BUSY);
+
+
+ sizes = ((length >> 12) & 0xF0) | cbCDB;
+ outb(io_base + VBSCSI_REGISTER_COMMAND, target_id); /* Write the target ID. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_TO_DEVICE); /* Write the transfer direction. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, sizes); /* Write CDB size and top bufsize bits. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, length); /* Write the buffer size. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, (length >> 8));
+ for (i = 0; i < cbCDB; i++) /* Write the CDB. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, aCDB[i]);
+
+ /* Write out the data. The transfer length may be exactly 64K or more,
+ * which needs a bit of care when we're using 16-bit 'rep outs'.
+ */
+ while (length > 32768) {
+ DBG_SCSI("%s: writing 32K from %X:%X\n", __func__, FP_SEG(buffer), FP_OFF(buffer));
+ rep_outsb(buffer, 32768, io_base + VBSCSI_REGISTER_DATA_IN);
+ length -= 32768;
+ buffer = (FP_SEG(buffer) + (32768 >> 4)) :> FP_OFF(buffer);
+ }
+
+ DBG_SCSI("%s: writing %ld bytes from %X:%X\n", __func__, length, FP_SEG(buffer), FP_OFF(buffer));
+ rep_outsb(buffer, length, io_base + VBSCSI_REGISTER_DATA_IN);
/* Now wait for the command to complete. */
do
- {
- status = inb(io_base+VBSCSI_REGISTER_STATUS);
- } while (status & VBSCSI_BUSY);
+ status = inb(io_base + VBSCSI_REGISTER_STATUS);
+ while (status & VBSCSI_BUSY);
return 0;
}
@@ -150,7 +170,7 @@ int scsi_cmd_data_out(uint16_t io_base, uint8_t device_id, uint8_t __far *aCDB,
* Read sectors from an attached SCSI device.
*
* @returns status code.
- * @param bios_dsk Pointer to disk request packet (in the
+ * @param bios_dsk Pointer to disk request packet (in the
* EBDA).
*/
int scsi_read_sectors(bio_dsk_t __far *bios_dsk)
@@ -179,14 +199,18 @@ int scsi_read_sectors(bio_dsk_t __far *bios_dsk)
io_base = bios_dsk->scsidev[device_id].io_base;
target_id = bios_dsk->scsidev[device_id].target_id;
- rc = scsi_cmd_data_in(io_base, target_id, (void __far *)&cdb, 10,
- bios_dsk->drqp.buffer, (count * 512));
+ DBG_SCSI("%s: reading %u sectors, device %d, target %d\n", __func__,
+ count, device_id, bios_dsk->scsidev[device_id].target_id);
+
+ rc = scsi_cmd_data_in(io_base, target_id, (void __far *)&cdb, 10,
+ bios_dsk->drqp.buffer, (count * 512L));
if (!rc)
{
bios_dsk->drqp.trsfsectors = count;
- bios_dsk->drqp.trsfbytes = count * 512;
+ bios_dsk->drqp.trsfbytes = count * 512L;
}
+ DBG_SCSI("%s: transferred %u sectors\n", __func__, bios_dsk->drqp.nsect);
return rc;
}
@@ -195,7 +219,7 @@ int scsi_read_sectors(bio_dsk_t __far *bios_dsk)
* Write sectors to an attached SCSI device.
*
* @returns status code.
- * @param bios_dsk Pointer to disk request packet (in the
+ * @param bios_dsk Pointer to disk request packet (in the
* EBDA).
*/
int scsi_write_sectors(bio_dsk_t __far *bios_dsk)
@@ -223,18 +247,125 @@ int scsi_write_sectors(bio_dsk_t __far *bios_dsk)
io_base = bios_dsk->scsidev[device_id].io_base;
target_id = bios_dsk->scsidev[device_id].target_id;
+ DBG_SCSI("%s: writing %u sectors, device %d, target %d\n", __func__,
+ count, device_id, bios_dsk->scsidev[device_id].target_id);
+
rc = scsi_cmd_data_out(io_base, target_id, (void __far *)&cdb, 10,
- bios_dsk->drqp.buffer, (count * 512));
+ bios_dsk->drqp.buffer, (count * 512L));
if (!rc)
{
bios_dsk->drqp.trsfsectors = count;
- bios_dsk->drqp.trsfbytes = (count * 512);
+ bios_dsk->drqp.trsfbytes = (count * 512L);
}
+ DBG_SCSI("%s: transferred %u sectors\n", __func__, bios_dsk->drqp.nsect);
return rc;
}
+
+//@todo: move
+#define ATA_DATA_NO 0x00
+#define ATA_DATA_IN 0x01
+#define ATA_DATA_OUT 0x02
+
+/**
+ * Perform a "packet style" read with supplied CDB.
+ *
+ * @returns status code.
+ * @param bios_dsk Pointer to disk request packet (in the
+ * EBDA).
+ */
+uint16_t scsi_cmd_packet(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf,
+ uint16_t before, uint32_t length, uint8_t inout, char __far *buffer)
+{
+ bio_dsk_t __far *bios_dsk = read_word(0x0040, 0x000E) :> &EbdaData->bdisk;
+ uint32_t read_len;
+ uint8_t status, sizes;
+ uint16_t i;
+ uint16_t io_base;
+ uint8_t target_id;
+
+ /* Data out is currently not supported. */
+ if (inout == ATA_DATA_OUT) {
+ BX_INFO("%s: DATA_OUT not supported yet\n", __func__);
+ return 1;
+ }
+
+ /* Convert to SCSI specific device number. */
+ device_id = VBOX_GET_SCSI_DEVICE(device_id);
+
+ DBG_SCSI("%s: reading %lu bytes, skip %u/%u, device %d, target %d\n", __func__,
+ length, bios_dsk->drqp.skip_b, bios_dsk->drqp.skip_a,
+ device_id, bios_dsk->scsidev[device_id].target_id);
+ DBG_SCSI("%s: reading %u %u-byte sectors\n", __func__,
+ bios_dsk->drqp.nsect, bios_dsk->drqp.sect_sz);
+
+ cmdlen -= 2; /* ATAPI uses 12-byte command packets for a READ 10. */
+
+ io_base = bios_dsk->scsidev[device_id].io_base;
+ target_id = bios_dsk->scsidev[device_id].target_id;
+
+ /* Wait until the adapter is ready. */
+ do
+ status = inb(io_base + VBSCSI_REGISTER_STATUS);
+ while (status & VBSCSI_BUSY);
+
+ /* On the SCSI level, we have to transfer whole sectors. */
+ /* NB: With proper residual length support, this should not be necessary; we should
+ * be able to avoid transferring the 'after' part of the sector.
+ */
+ read_len = length + before + bios_dsk->drqp.skip_a;
+
+ sizes = (((read_len) >> 12) & 0xF0) | cmdlen;
+ outb(io_base + VBSCSI_REGISTER_COMMAND, target_id); /* Write the target ID. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_FROM_DEVICE); /* Write the transfer direction. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, sizes); /* Write the CDB size. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, read_len); /* Write the buffer size. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, (read_len) >> 8);
+ for (i = 0; i < cmdlen; i++) /* Write the CDB. */
+ outb(io_base + VBSCSI_REGISTER_COMMAND, cmdbuf[i]);
+
+ /* Now wait for the command to complete. */
+ do
+ status = inb(io_base + VBSCSI_REGISTER_STATUS);
+ while (status & VBSCSI_BUSY);
+
+ /* If any error occurred, inform the caller and don't bother reading the data. */
+ if (status & VBSCSI_ERROR) {
+ outb(io_base + VBSCSI_REGISTER_RESET, 0);
+
+ status = inb(io_base + VBSCSI_REGISTER_DEVSTAT);
+ DBG_SCSI("%s: read failed, device status %02X\n", __func__, status);
+ return 3;
+ }
+
+ /* Transfer the data read from the device. */
+
+ if (before) /* If necessary, throw away data which needs to be skipped. */
+ insb_discard(before, io_base + VBSCSI_REGISTER_DATA_IN);
+
+ bios_dsk->drqp.trsfbytes = length;
+
+ /* The requested length may be exactly 64K or more, which needs
+ * a bit of care when we're using 16-bit 'rep ins'.
+ */
+ while (length > 32768) {
+ DBG_SCSI("%s: reading 32K to %X:%X\n", __func__, FP_SEG(buffer), FP_OFF(buffer));
+ rep_insb(buffer, 32768, io_base + VBSCSI_REGISTER_DATA_IN);
+ length -= 32768;
+ buffer = (FP_SEG(buffer) + (32768 >> 4)) :> FP_OFF(buffer);
+ }
+
+ DBG_SCSI("%s: reading %ld bytes to %X:%X\n", __func__, length, FP_SEG(buffer), FP_OFF(buffer));
+ rep_insb(buffer, length, io_base + VBSCSI_REGISTER_DATA_IN);
+
+ if (bios_dsk->drqp.skip_a) /* If necessary, throw away more data. */
+ insb_discard(bios_dsk->drqp.skip_a, io_base + VBSCSI_REGISTER_DATA_IN);
+
+ return 0;
+}
+
/**
* Enumerate attached devices.
*
@@ -254,6 +385,7 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
{
uint8_t rc;
uint8_t aCDB[10];
+ uint8_t hd_index, devcount_scsi;
aCDB[0] = SCSI_INQUIRY;
aCDB[1] = 0;
@@ -264,20 +396,21 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
rc = scsi_cmd_data_in(io_base, i, aCDB, 6, buffer, 5);
if (rc != 0)
- BX_PANIC("scsi_enumerate_attached_devices: SCSI_INQUIRY failed\n");
+ BX_PANIC("%s: SCSI_INQUIRY failed\n", __func__);
- /* Check if there is a disk attached. */
+ /* Check the attached device. */
if ( ((buffer[0] & 0xe0) == 0)
&& ((buffer[0] & 0x1f) == 0x00))
{
- VBSCSI_DEBUG("scsi_enumerate_attached_devices: Disk detected at %d\n", i);
+ DBG_SCSI("%s: Disk detected at %d\n", __func__, i);
/* We add the disk only if the maximum is not reached yet. */
- if (bios_dsk->scsi_hdcount < BX_MAX_SCSI_DEVICES)
+ if (bios_dsk->scsi_devcount < BX_MAX_SCSI_DEVICES)
{
uint32_t sectors, sector_size, cylinders;
uint16_t heads, sectors_per_track;
- uint8_t hdcount, hdcount_scsi, hd_index;
+ uint8_t hdcount;
+ uint8_t cmos_base;
/* Issue a read capacity command now. */
_fmemset(aCDB, 0, sizeof(aCDB));
@@ -285,7 +418,7 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
rc = scsi_cmd_data_in(io_base, i, aCDB, 10, buffer, 8);
if (rc != 0)
- BX_PANIC("scsi_enumerate_attached_devices: SCSI_READ_CAPACITY failed\n");
+ BX_PANIC("%s: SCSI_READ_CAPACITY failed\n", __func__);
/* Build sector number and size from the buffer. */
//@todo: byte swapping for dword sized items should be farmed out...
@@ -307,32 +440,62 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
continue;
}
- /* We need to calculate the geometry for the disk. From
- * the BusLogic driver in the Linux kernel.
- */
- if (sectors >= (uint32_t)4 * 1024 * 1024)
+ devcount_scsi = bios_dsk->scsi_devcount;
+
+ /* Get logical CHS geometry. */
+ switch (devcount_scsi)
{
- heads = 255;
- sectors_per_track = 63;
+ case 0:
+ cmos_base = 0x90;
+ break;
+ case 1:
+ cmos_base = 0x98;
+ break;
+ case 2:
+ cmos_base = 0xA0;
+ break;
+ case 3:
+ cmos_base = 0xA8;
+ break;
+ default:
+ cmos_base = 0;
}
- else if (sectors >= (uint32_t)2 * 1024 * 1024)
+
+ if (cmos_base && inb_cmos(cmos_base + 7))
{
- heads = 128;
- sectors_per_track = 32;
+ /* If provided, grab the logical geometry from CMOS. */
+ cylinders = inb_cmos(cmos_base + 0) + (inb_cmos(cmos_base + 1) << 8);
+ heads = inb_cmos(cmos_base + 2);
+ sectors_per_track = inb_cmos(cmos_base + 7);
}
else
{
- heads = 64;
- sectors_per_track = 32;
+ /* Calculate default logical geometry. NB: Very different
+ * from default ATA/SATA logical geometry!
+ */
+ if (sectors >= (uint32_t)4 * 1024 * 1024)
+ {
+ heads = 255;
+ sectors_per_track = 63;
+ }
+ else if (sectors >= (uint32_t)2 * 1024 * 1024)
+ {
+ heads = 128;
+ sectors_per_track = 32;
+ }
+ else
+ {
+ heads = 64;
+ sectors_per_track = 32;
+ }
+ cylinders = (uint32_t)(sectors / (heads * sectors_per_track));
}
- cylinders = (uint32_t)(sectors / (heads * sectors_per_track));
- hdcount_scsi = bios_dsk->scsi_hdcount;
/* Calculate index into the generic disk table. */
- hd_index = hdcount_scsi + BX_MAX_ATA_DEVICES;
+ hd_index = devcount_scsi + BX_MAX_ATA_DEVICES;
- bios_dsk->scsidev[hdcount_scsi].io_base = io_base;
- bios_dsk->scsidev[hdcount_scsi].target_id = i;
+ bios_dsk->scsidev[devcount_scsi].io_base = io_base;
+ bios_dsk->scsidev[devcount_scsi].target_id = i;
bios_dsk->devices[hd_index].type = DSK_TYPE_SCSI;
bios_dsk->devices[hd_index].device = DSK_DEVICE_HD;
bios_dsk->devices[hd_index].removable = 0;
@@ -348,6 +511,9 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
else
bios_dsk->devices[hd_index].lchs.cylinders = (uint16_t)cylinders;
+ BX_INFO("SCSI %d-ID#%d: LCHS=%u/%u/%u %ld sectors\n", devcount_scsi,
+ i, (uint16_t)cylinders, heads, sectors_per_track, sectors);
+
/* Write PCHS values. */
bios_dsk->devices[hd_index].pchs.heads = heads;
bios_dsk->devices[hd_index].pchs.spt = sectors_per_track;
@@ -360,7 +526,7 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
/* Store the id of the disk in the ata hdidmap. */
hdcount = bios_dsk->hdcount;
- bios_dsk->hdidmap[hdcount] = hdcount_scsi + BX_MAX_ATA_DEVICES;
+ bios_dsk->hdidmap[hdcount] = devcount_scsi + BX_MAX_ATA_DEVICES;
hdcount++;
bios_dsk->hdcount = hdcount;
@@ -369,8 +535,8 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
hdcount++;
write_byte(0x40, 0x75, hdcount);
- hdcount_scsi++;
- bios_dsk->scsi_hdcount = hdcount_scsi;
+ devcount_scsi++;
+ bios_dsk->scsi_devcount = devcount_scsi;
}
else
{
@@ -378,8 +544,37 @@ void scsi_enumerate_attached_devices(uint16_t io_base)
break;
}
}
+ else if ( ((buffer[0] & 0xe0) == 0)
+ && ((buffer[0] & 0x1f) == 0x05))
+ {
+ uint8_t cdcount;
+ uint8_t removable;
+
+ BX_INFO("SCSI %d-ID#%d: CD/DVD-ROM\n", devcount_scsi, i);
+
+ /* Calculate index into the generic device table. */
+ hd_index = devcount_scsi + BX_MAX_ATA_DEVICES;
+
+ removable = buffer[1] & 0x80 ? 1 : 0;
+
+ bios_dsk->scsidev[devcount_scsi].io_base = io_base;
+ bios_dsk->scsidev[devcount_scsi].target_id = i;
+ bios_dsk->devices[hd_index].type = DSK_TYPE_SCSI;
+ bios_dsk->devices[hd_index].device = DSK_DEVICE_CDROM;
+ bios_dsk->devices[hd_index].removable = removable;
+ bios_dsk->devices[hd_index].blksize = 2048;
+
+ /* Store the ID of the device in the BIOS cdidmap. */
+ cdcount = bios_dsk->cdcount;
+ bios_dsk->cdidmap[cdcount] = devcount_scsi + BX_MAX_ATA_DEVICES;
+ cdcount++;
+ bios_dsk->cdcount = cdcount;
+
+ devcount_scsi++;
+ bios_dsk->scsi_devcount = devcount_scsi;
+ }
else
- VBSCSI_DEBUG("scsi_enumerate_attached_devices: No disk detected at %d\n", i);
+ DBG_SCSI("%s: No supported device detected at %d\n", __func__, i);
}
}
@@ -393,55 +588,55 @@ void BIOSCALL scsi_init(void)
bios_dsk = read_word(0x0040, 0x000E) :> &EbdaData->bdisk;
- bios_dsk->scsi_hdcount = 0;
+ bios_dsk->scsi_devcount = 0;
identifier = 0;
- /* Detect BusLogic adapter. */
+ /* Detect the BusLogic adapter. */
outb(BUSLOGIC_BIOS_IO_PORT+VBSCSI_REGISTER_IDENTIFY, 0x55);
identifier = inb(BUSLOGIC_BIOS_IO_PORT+VBSCSI_REGISTER_IDENTIFY);
if (identifier == 0x55)
{
/* Detected - Enumerate attached devices. */
- VBSCSI_DEBUG("scsi_init: BusLogic SCSI adapter detected\n");
+ DBG_SCSI("scsi_init: BusLogic SCSI adapter detected\n");
outb(BUSLOGIC_BIOS_IO_PORT+VBSCSI_REGISTER_RESET, 0);
scsi_enumerate_attached_devices(BUSLOGIC_BIOS_IO_PORT);
}
else
{
- VBSCSI_DEBUG("scsi_init: BusLogic SCSI adapter not detected\n");
+ DBG_SCSI("scsi_init: BusLogic SCSI adapter not detected\n");
}
- /* Detect LsiLogic adapter. */
+ /* Detect the LSI Logic parallel SCSI adapter. */
outb(LSILOGIC_BIOS_IO_PORT+VBSCSI_REGISTER_IDENTIFY, 0x55);
identifier = inb(LSILOGIC_BIOS_IO_PORT+VBSCSI_REGISTER_IDENTIFY);
if (identifier == 0x55)
{
/* Detected - Enumerate attached devices. */
- VBSCSI_DEBUG("scsi_init: LSI Logic SCSI adapter detected\n");
+ DBG_SCSI("scsi_init: LSI Logic SCSI adapter detected\n");
outb(LSILOGIC_BIOS_IO_PORT+VBSCSI_REGISTER_RESET, 0);
scsi_enumerate_attached_devices(LSILOGIC_BIOS_IO_PORT);
}
else
{
- VBSCSI_DEBUG("scsi_init: LSI Logic SCSI adapter not detected\n");
+ DBG_SCSI("scsi_init: LSI Logic SCSI adapter not detected\n");
}
- /* Detect LsiLogic SAS adapter. */
+ /* Detect the LSI Logic SAS adapter. */
outb(LSILOGIC_SAS_BIOS_IO_PORT+VBSCSI_REGISTER_IDENTIFY, 0x55);
identifier = inb(LSILOGIC_SAS_BIOS_IO_PORT+VBSCSI_REGISTER_IDENTIFY);
if (identifier == 0x55)
{
/* Detected - Enumerate attached devices. */
- VBSCSI_DEBUG("scsi_init: LSI Logic SAS adapter detected\n");
+ DBG_SCSI("scsi_init: LSI Logic SAS adapter detected\n");
outb(LSILOGIC_SAS_BIOS_IO_PORT+VBSCSI_REGISTER_RESET, 0);
scsi_enumerate_attached_devices(LSILOGIC_SAS_BIOS_IO_PORT);
}
else
{
- VBSCSI_DEBUG("scsi_init: LSI Logic SAS adapter not detected\n");
+ DBG_SCSI("scsi_init: LSI Logic SAS adapter not detected\n");
}
}
diff --git a/src/VBox/Devices/PC/BIOS/serial.c b/src/VBox/Devices/PC/BIOS/serial.c
index 6a401ac0..f2e901dd 100644
--- a/src/VBox/Devices/PC/BIOS/serial.c
+++ b/src/VBox/Devices/PC/BIOS/serial.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -49,7 +49,7 @@ void BIOSCALL int14_function(pusha_regs_t regs, uint16_t es, uint16_t ds, volati
uint8_t timeout;
int_enable();
-
+
addr = read_word(0x0040, (regs.u.r16.dx << 1));
timeout = read_byte(0x0040, 0x007C + regs.u.r16.dx);
if ((regs.u.r16.dx < 4) && (addr > 0)) {
diff --git a/src/VBox/Devices/PC/BIOS/smidmi.inc b/src/VBox/Devices/PC/BIOS/smidmi.inc
index a67802a3..aa7fd132 100644
--- a/src/VBox/Devices/PC/BIOS/smidmi.inc
+++ b/src/VBox/Devices/PC/BIOS/smidmi.inc
@@ -65,6 +65,6 @@ align 16
db 0 ; checksum (set by biossums)
dw 0 ; DMI tables length (set by DevPcBios)
dd VBOX_DMI_TABLE_BASE ; DMI tables base
- dw VBOX_DMI_TABLE_ENTR ; DMI tables entries
+ dw 0 ; DMI tables entries (set by DevPcBios)
db VBOX_DMI_TABLE_VER ; DMI version
db 0 ; Just for alignment (16 bytes total)
diff --git a/src/VBox/Devices/PC/BIOS/system.c b/src/VBox/Devices/PC/BIOS/system.c
index bcc9f3d6..449683a5 100644
--- a/src/VBox/Devices/PC/BIOS/system.c
+++ b/src/VBox/Devices/PC/BIOS/system.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2013 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -191,7 +191,7 @@ void pm_unwind(uint16_t args);
"push cx" \
"retf" \
parm [ax] modify nomemory aborts;
-
+
// @todo: This method is silly. The RTC should be programmed to fire an interrupt
// instead of hogging the CPU with inaccurate code.
void timer_wait(uint16_t lo, uint16_t hi);
@@ -223,18 +223,18 @@ void timer_wait(uint16_t lo, uint16_t hi);
bx_bool set_enable_a20(bx_bool val)
{
uint8_t oldval;
-
+
// Use PS/2 System Control port A to set A20 enable
-
+
// get current setting first
oldval = inb(0x92);
-
+
// change A20 status
if (val)
outb(0x92, oldval | 0x02);
else
outb(0x92, oldval & 0xfd);
-
+
return((oldval & 0x02) != 0);
}
@@ -275,6 +275,8 @@ void set_e820_range(uint16_t ES, uint16_t DI, uint32_t start, uint32_t end,
#define EBX r.gr.u.r32.ebx
#define ECX r.gr.u.r32.ecx
#define EDX r.gr.u.r32.edx
+#define ESI r.gr.u.r32.esi
+#define EDI r.gr.u.r32.edi
#define ES r.es
@@ -385,7 +387,7 @@ void BIOSCALL int15_function(sys_regs_t r)
SET_AH(UNSUPPORTED_FUNCTION);
SET_AL(GET_AL() - 1);
}
-
+
break;
}
@@ -396,15 +398,15 @@ void BIOSCALL int15_function(sys_regs_t r)
#endif
// +++ should probably have descriptor checks
// +++ should have exception handlers
-
+
// turn off interrupts
int_disable(); //@todo: aren't they disabled already?
-
+
prev_a20_enable = set_enable_a20(1); // enable A20 line
-
+
// 128K max of transfer on 386+ ???
// source == destination ???
-
+
// ES:SI points to descriptor table
// offset use initially comments
// ==============================================
@@ -414,14 +416,14 @@ void BIOSCALL int15_function(sys_regs_t r)
// 18..1f dest dddddddd destination of data
// 20..27 CS zeros filled in by BIOS
// 28..2f SS zeros filled in by BIOS
-
+
//es:si
//eeee0
//0ssss
//-----
-
+
// check for access rights of source & dest here
-
+
// Initialize GDT descriptor
base15_00 = (ES << 4) + SI;
base23_16 = ES >> 12;
@@ -432,14 +434,14 @@ void BIOSCALL int15_function(sys_regs_t r)
write_byte(ES, SI+0x08+4, base23_16);// base 23:16
write_byte(ES, SI+0x08+5, 0x93); // access
write_word(ES, SI+0x08+6, 0x0000); // base 31:24/reserved/limit 19:16
-
+
// Initialize CS descriptor
write_word(ES, SI+0x20+0, 0xffff);// limit 15:00 = normal 64K limit
write_word(ES, SI+0x20+2, 0x0000);// base 15:00
write_byte(ES, SI+0x20+4, 0x000f);// base 23:16
write_byte(ES, SI+0x20+5, 0x9b); // access
write_word(ES, SI+0x20+6, 0x0000);// base 31:24/reserved/limit 19:16
-
+
// Initialize SS descriptor
ss = read_ss();
base15_00 = ss << 4;
@@ -449,18 +451,18 @@ void BIOSCALL int15_function(sys_regs_t r)
write_byte(ES, SI+0x28+4, base23_16);// base 23:16
write_byte(ES, SI+0x28+5, 0x93); // access
write_word(ES, SI+0x28+6, 0x0000); // base 31:24/reserved/limit 19:16
-
+
pm_stack_save(CX, ES, SI);
pm_enter();
pm_copy();
pm_exit();
pm_stack_restore();
-
+
set_enable_a20(prev_a20_enable);
-
+
// turn interrupts back on
int_enable();
-
+
SET_AH(0);
CLEAR_CF();
break;
@@ -472,12 +474,12 @@ void BIOSCALL int15_function(sys_regs_t r)
SET_CF();
#else
AX = (inb_cmos(0x31) << 8) | inb_cmos(0x30);
-
+
// According to Ralf Brown's interrupt the limit should be 15M,
// but real machines mostly return max. 63M.
if(AX > 0xffc0)
AX = 0xffc0;
-
+
CLEAR_CF();
#endif
break;
@@ -487,12 +489,12 @@ void BIOSCALL int15_function(sys_regs_t r)
// ES:DI points to user-supplied GDT
// BH/BL contains starting interrupt numbers for PIC0/PIC1
// This subfunction does not return!
-
+
// turn off interrupts
int_disable(); //@todo: aren't they off already?
-
+
set_enable_a20(1); // enable A20 line; we're supposed to fail if that fails
-
+
// Initialize CS descriptor for BIOS
write_word(ES, SI+0x38+0, 0xffff);// limit 15:00 = normal 64K limit
write_word(ES, SI+0x38+2, 0x0000);// base 15:00
@@ -591,7 +593,21 @@ void BIOSCALL int15_function32(sys32_regs_t r)
int_enable();
timer_wait(DX, CX);
break;
-
+
+ case 0xd0:
+ if (GET_AL() != 0x4f)
+ goto int15_unimplemented;
+ if (EBX == 0x50524f43 && ECX == 0x4d4f4445 && ESI == 0 && EDI == 0)
+ {
+ CLEAR_CF();
+ ESI = EBX;
+ EDI = ECX;
+ EAX = 0x49413332;
+ }
+ else
+ goto int15_unimplemented;
+ break;
+
case 0xe8:
switch(GET_AL()) {
case 0x20: // coded by osmaker aka K.J.
@@ -728,13 +744,15 @@ void BIOSCALL int15_function32(sys32_regs_t r)
case 7:
#ifdef VBOX /* Don't succeeded if no memory above 4 GB. */
/* Mapping of memory above 4 GB if present.
- Note: set_e820_range needs do no borrowing in the
- subtraction because of the nice numbers. */
+ Note1: set_e820_range needs do no borrowing in the
+ subtraction because of the nice numbers.
+ Note2* works only up to 1TB because of uint8_t for
+ the upper bits!*/
if (extra_highbits_memory_size || extra_lowbits_memory_size)
{
set_e820_range(ES, DI,
0x00000000L, extra_lowbits_memory_size,
- 1 /*GB*/, extra_highbits_memory_size + 1 /*GB*/, 1);
+ 1 /*x4GB*/, extra_highbits_memory_size + 1 /*x4GB*/, 1);
EBX = 0;
}
break;
@@ -763,24 +781,24 @@ void BIOSCALL int15_function32(sys32_regs_t r)
case 0x01:
// do we have any reason to fail here ?
CLEAR_CF();
-
+
// my real system sets ax and bx to 0
// this is confirmed by Ralph Brown list
// but syslinux v1.48 is known to behave
// strangely if ax is set to 0
// regs.u.r16.ax = 0;
// regs.u.r16.bx = 0;
-
+
// Get the amount of extended memory (above 1M)
CX = (inb_cmos(0x31) << 8) | inb_cmos(0x30);
-
+
// limit to 15M
if(CX > 0x3c00)
CX = 0x3c00;
-
+
// Get the amount of extended memory above 16M in 64k blocks
DX = (inb_cmos(0x35) << 8) | inb_cmos(0x34);
-
+
// Set configured memory equal to extended memory
AX = CX;
BX = DX;
diff --git a/src/VBox/Devices/PC/BIOS/timepci.c b/src/VBox/Devices/PC/BIOS/timepci.c
index 2e001563..29bbc311 100644
--- a/src/VBox/Devices/PC/BIOS/timepci.c
+++ b/src/VBox/Devices/PC/BIOS/timepci.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -80,9 +80,9 @@ bx_bool rtc_updating(void)
// that this bit should be set is constrained to 244useconds.
// The count I use below guarantees coverage or more than
// this time, with any reasonable IPS setting.
-
+
uint16_t iter;
-
+
iter = 25000;
while (--iter != 0) {
if ( (inb_cmos(0x0a) & 0x80) == 0 )
@@ -102,11 +102,11 @@ void BIOSCALL int70_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
{
// INT 70h: IRQ 8 - CMOS RTC interrupt from periodic or alarm modes
uint8_t registerB = 0, registerC = 0;
-
+
// Check which modes are enabled and have occurred.
registerB = inb_cmos( 0xB );
registerC = inb_cmos( 0xC );
-
+
if( ( registerB & 0x60 ) != 0 ) {
if( ( registerC & 0x20 ) != 0 ) {
// Handle Alarm Interrupt.
@@ -116,16 +116,16 @@ void BIOSCALL int70_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
}
if( ( registerC & 0x40 ) != 0 ) {
// Handle Periodic Interrupt.
-
+
if( read_byte( 0x40, 0xA0 ) != 0 ) {
// Wait Interval (Int 15, AH=83) active.
uint32_t time;
-
+
time = read_dword( 0x40, 0x9C ); // Time left in microseconds.
if( time < 0x3D1 ) {
// Done waiting.
uint16_t segment, offset;
-
+
segment = read_word( 0x40, 0x98 );
offset = read_word( 0x40, 0x9A );
write_byte( 0x40, 0xA0, 0 ); // Turn of status byte.
@@ -149,10 +149,10 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
{
uint8_t val8;
- BX_DEBUG_INT1A("int1a: AX=%04x BX=%04x CX=%04x DX=%04x DS=%04x\n",
+ BX_DEBUG_INT1A("int1a: AX=%04x BX=%04x CX=%04x DX=%04x DS=%04x\n",
regs.u.r16.ax, regs.u.r16.bx, regs.u.r16.cx, regs.u.r16.dx, ds);
- int_enable();
-
+ int_enable();
+
switch (regs.u.r8.ah) {
case 0: // get current clock count
int_disable();
@@ -164,7 +164,7 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
// AH already 0
ClearCF(iret_addr.flags); // OK
break;
-
+
case 1: // Set Current Clock Count
int_disable();
BiosData->ticks_high = regs.u.r16.cx;
@@ -174,13 +174,13 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
regs.u.r8.ah = 0;
ClearCF(iret_addr.flags); // OK
break;
-
+
case 2: // Read CMOS Time
if (rtc_updating()) {
SetCF(iret_addr.flags);
break;
}
-
+
regs.u.r8.dh = inb_cmos(0x00); // Seconds
regs.u.r8.cl = inb_cmos(0x02); // Minutes
regs.u.r8.ch = inb_cmos(0x04); // Hours
@@ -189,7 +189,7 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
regs.u.r8.al = regs.u.r8.ch;
ClearCF(iret_addr.flags); // OK
break;
-
+
case 3: // Set CMOS Time
// Using a debugger, I notice the following masking/setting
// of bits in Status Register B, by setting Reg B to
@@ -216,7 +216,7 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
regs.u.r8.al = val8; // val last written to Reg B
ClearCF(iret_addr.flags); // OK
break;
-
+
case 4: // Read CMOS Date
regs.u.r8.ah = 0;
if (rtc_updating()) {
@@ -230,7 +230,7 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
regs.u.r8.al = regs.u.r8.ch;
ClearCF(iret_addr.flags); // OK
break;
-
+
case 5: // Set CMOS Date
// Using a debugger, I notice the following masking/setting
// of bits in Status Register B, by setting Reg B to
@@ -257,7 +257,7 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
regs.u.r8.al = val8; // AL = val last written to Reg B
ClearCF(iret_addr.flags); // OK
break;
-
+
case 6: // Set Alarm Time in CMOS
// Using a debugger, I notice the following masking/setting
// of bits in Status Register B, by setting Reg B to
@@ -288,7 +288,7 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
outb_cmos(0x0b, (val8 & 0x7f) | 0x20);
ClearCF(iret_addr.flags); // OK
break;
-
+
case 7: // Turn off Alarm
// Using a debugger, I notice the following masking/setting
// of bits in Status Register B, by setting Reg B to
@@ -307,7 +307,7 @@ void BIOSCALL int1a_function(pusha_regs_t regs, uint16_t ds, uint16_t es, iret_a
regs.u.r8.al = val8; // val last written to Reg B
ClearCF(iret_addr.flags); // OK
break;
-
+
default:
BX_DEBUG_INT1A("int1a: AX=%04x unsupported\n", regs.u.r16.ax);
SetCF(iret_addr.flags); // Unsupported
diff --git a/src/VBox/Devices/PC/BIOS/vbdmismi.inc b/src/VBox/Devices/PC/BIOS/vbdmismi.inc
index 755dd293..69a2cba7 100644
--- a/src/VBox/Devices/PC/BIOS/vbdmismi.inc
+++ b/src/VBox/Devices/PC/BIOS/vbdmismi.inc
@@ -2,7 +2,6 @@
VBOX_DMI_TABLE_BASE equ 0E1000h
VBOX_DMI_TABLE_VER equ 25h
-VBOX_DMI_TABLE_ENTR equ 9
VBOX_DMI_TABLE_SIZE equ 352
VBOX_SMBIOS_MAJOR_VER equ 2
diff --git a/src/VBox/Devices/PC/BIOS/vds.c b/src/VBox/Devices/PC/BIOS/vds.c
index 151ef446..a45365bf 100644
--- a/src/VBox/Devices/PC/BIOS/vds.c
+++ b/src/VBox/Devices/PC/BIOS/vds.c
@@ -60,8 +60,8 @@ int vds_unlock_sg( vds_edds __far *edds );
/*
- * Convert a real mode 16:16 segmented address to a simple 32-bit
- * linear address.
+ * Convert a real mode 16:16 segmented address to a simple 32-bit
+ * linear address.
*/
uint32_t vds_real_to_lin( void __far *ptr )
{
diff --git a/src/VBox/Devices/PC/BIOS/vds.h b/src/VBox/Devices/PC/BIOS/vds.h
index 4d8da16f..0a251fd0 100644
--- a/src/VBox/Devices/PC/BIOS/vds.h
+++ b/src/VBox/Devices/PC/BIOS/vds.h
@@ -37,7 +37,7 @@ typedef struct {
uint32_t pte[1]; /* Page table entry array. */
} u;
} vds_edds;
-
+
/* VDS services */