orgs.asm revision adcd1c824afddcdb85f23d1a4d7e25df46bd093f
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; Copyright (C) 2006-2011 Oracle Corporation
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; This file is part of VirtualBox Open Source Edition (OSE), as
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; available from http://www.virtualbox.org. This file is free software;
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; you can redistribute it and/or modify it under the terms of the GNU
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsync;; General Public License (GPL) as published by the Free Software
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; Foundation, in version 2 as it comes in the "COPYING" file of the
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; --------------------------------------------------------------------
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; This code is based on:
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; Copyright (C) 2002 MandrakeSoft S.A.
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; MandrakeSoft S.A.
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; 43, rue d'Aboukir
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; 75002 Paris - France
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; This library is free software; you can redistribute it and/or
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; modify it under the terms of the GNU Lesser General Public
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; License as published by the Free Software Foundation; either
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; version 2 of the License, or (at your option) any later version.
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; This library is distributed in the hope that it will be useful,
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsync;; but WITHOUT ANY WARRANTY; without even the implied warranty of
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; Lesser General Public License for more details.
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsync;; You should have received a copy of the GNU Lesser General Public
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsync;; License along with this library; if not, write to the Free Software
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsync;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsyncEBDA_SEG equ 09FC0h ; starts at 639K
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsyncEBDA_SIZE equ 1 ; 1K
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsyncBASE_MEM_IN_K equ (640 - EBDA_SIZE)
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsyncCMOS_ADDR equ 070h
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncCMOS_DATA equ 071h
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncPIC_CMD_EOI equ 020h
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncPIC_MASTER equ 020h
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncPIC_SLAVE equ 0A0h
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncBIOS_FIX_BASE equ 0E000h
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncSYS_MODEL_ID equ 0FCh ; PC/AT
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncSYS_SUBMODEL_ID equ 0
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncBIOS_REVISION equ 1
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncBIOS_BUILD_DATE equ '06/23/99'
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncBIOS_COPYRIGHT equ 'Oracle VM VirtualBox BIOS'
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;BX_PCIBIOS equ 1 ; defined in pcicfg.inc
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncBX_ROMBIOS32 equ 0
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncBX_CALL_INT15_4F equ 1
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsync;; Set a fixed BIOS location, with a marker for verification
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncBIOSORG macro addr
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsync org addr - BIOS_FIX_BASE - 2
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsync;; Set an interrupt vector (not very efficient if multiple vectors are
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync;; programmed in one go)
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncSET_INT_VECTOR macro vec, segm, offs
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsync mov ax, offs
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync mov ds:[vec*4], ax
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsync mov ax, segm
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsync mov ds:[vec*4+2], ax
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsync; Set up an environment C code expects. DS must point to the BIOS segment
23b6bee7e2c689903bbe3844f614ca70af5d62ccvboxsync; and the direction flag must be cleared(!)
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncC_SETUP macro
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsync;; External function in separate modules
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _dummy_isr_function:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _log_bios_start:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _nmi_handler_msg:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _int18_panic_msg:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int09_function:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int13_diskette_function:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _int13_eltorito:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int13_cdemu:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _int13_cdrom:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _cdemu_isactive:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _cdemu_emulated_drive:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _int13_harddisk:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _int13_harddisk_ext:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int14_function:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int15_function:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int15_function_mouse:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _int15_function32:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int16_function:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _int17_function:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int19_function:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int1a_function:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _pci16_function:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _int70_function:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _int74_function:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _ata_init:near
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncextrn _ahci_init:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _scsi_init:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _ata_detect:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _cdemu_init:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncextrn _keyboard_init:near
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncextrn _print_bios_banner:near
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsync;; Symbols referenced from C code
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncpublic _diskette_param_table
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncpublic _pmode_IDT
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic _rmode_IDT
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic eoi_both_pics
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic rtc_post
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsync;; Additional publics for easier disassembly and debugging
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncifndef DEBUG
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsync DEBUG equ 1
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int08_handler
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int0e_handler
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int11_handler
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int12_handler
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int13_handler
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int13_relocated
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int15_handler
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int17_handler
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int19_handler
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic int19_relocated
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic dummy_iret
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic rom_fdpt
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic cpu_reset
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic normal_post
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic eoi_jmp_post
48cc5ec10dfb2e17176457b2593379ce1e296aeavboxsyncpublic eoi_master_pic
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncpublic ebda_post
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic hard_drive_post
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic int13_legacy
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic int70_handler
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic int75_handler
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic int15_handler32
0e1df2d387f24e745916e4a97a3c28da018d1189vboxsyncpublic int15_handler_mouse
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic iret_modify_cf
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic rom_scan
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic rom_checksum
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic init_pic
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsyncpublic floppy_post
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic int13_out
7420e5ee5565b181c144eabb14da0da9e8cce657vboxsyncpublic int13_disk
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic int13_notfloppy
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic int13_legacy
206886290dbecc59a96634c1d4c9812f12dc21f9vboxsyncpublic int13_noeltorito
;; The traditional locations are 30:100 (PC) or 0:400 (PC/AT).
;; ATA/ATAPI driver setup
;; El Torito floppy/hard disk emulation
; b5: 1=int15h/C6h (get POS data) supported
; b4: 1=int15h/C7h (get mem map info) supported
; b4: POST supports ROM-to-RAM enable/disable
push 3 ; ...and offset of ROM entry
; TODO: review/enable?
; TODO: review/enable? If so, flags should be restored here?
;; Quick and dirty protected mode entry/exit routines
include pmode.inc
include pmsetup.inc
push ax ; TODO: better register save/restore
;; TODO: check/review 32-bit register use
mov ds:[442h], al ; hd/floppy ctlr status register
mov dx, 3F5h ; TODO: inc/dec dx instead
;; INT 10h handler - MDA/CGA video
;; MDA/CGA Video Parameter Table (INT 1Dh)
include pcibios.inc
include pirq.inc
;; need to save/restore 32-bit registers
include font8x8.inc
include smidmi.inc