v86 0.3.4 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +4 -4
- package/bios/seabios/.config +113 -0
- package/bios/seabios/.config.old +114 -0
- package/bios/seabios/.gitignore +4 -0
- package/bios/seabios/COPYING +674 -0
- package/bios/seabios/COPYING.LESSER +165 -0
- package/bios/seabios/Makefile +286 -0
- package/bios/seabios/README +17 -0
- package/bios/seabios/docs/Build_overview.md +104 -0
- package/bios/seabios/docs/Contributing.md +20 -0
- package/bios/seabios/docs/Debugging.md +111 -0
- package/bios/seabios/docs/Developer_Documentation.md +25 -0
- package/bios/seabios/docs/Developer_links.md +86 -0
- package/bios/seabios/docs/Download.md +27 -0
- package/bios/seabios/docs/Execution_and_code_flow.md +178 -0
- package/bios/seabios/docs/Linking_overview.md +160 -0
- package/bios/seabios/docs/Mailinglist.md +8 -0
- package/bios/seabios/docs/Memory_Model.md +253 -0
- package/bios/seabios/docs/README +5 -0
- package/bios/seabios/docs/Releases.md +482 -0
- package/bios/seabios/docs/Runtime_config.md +193 -0
- package/bios/seabios/docs/SeaBIOS.md +17 -0
- package/bios/seabios/docs/SeaVGABIOS.md +39 -0
- package/bios/seabios/out/autoconf.h +117 -0
- package/bios/seabios/out/include/config/acpi/dsdt.h +0 -0
- package/bios/seabios/out/include/config/acpi.h +0 -0
- package/bios/seabios/out/include/config/ahci.h +0 -0
- package/bios/seabios/out/include/config/apmbios.h +0 -0
- package/bios/seabios/out/include/config/ata/dma.h +0 -0
- package/bios/seabios/out/include/config/ata/pio32.h +0 -0
- package/bios/seabios/out/include/config/ata.h +0 -0
- package/bios/seabios/out/include/config/auto.conf +69 -0
- package/bios/seabios/out/include/config/auto.conf.cmd +9 -0
- package/bios/seabios/out/include/config/boot.h +0 -0
- package/bios/seabios/out/include/config/bootorder.h +0 -0
- package/bios/seabios/out/include/config/build/vgabios.h +0 -0
- package/bios/seabios/out/include/config/call32/smm.h +0 -0
- package/bios/seabios/out/include/config/cdrom/boot.h +0 -0
- package/bios/seabios/out/include/config/cdrom/emu.h +0 -0
- package/bios/seabios/out/include/config/debug/level.h +0 -0
- package/bios/seabios/out/include/config/drives.h +0 -0
- package/bios/seabios/out/include/config/entry/extrastack.h +0 -0
- package/bios/seabios/out/include/config/esp/scsi.h +0 -0
- package/bios/seabios/out/include/config/flash/floppy.h +0 -0
- package/bios/seabios/out/include/config/floppy.h +0 -0
- package/bios/seabios/out/include/config/fw/romfile/load.h +0 -0
- package/bios/seabios/out/include/config/hardware/irq.h +0 -0
- package/bios/seabios/out/include/config/kbd/call/int15/4f.h +0 -0
- package/bios/seabios/out/include/config/keyboard.h +0 -0
- package/bios/seabios/out/include/config/lpt.h +0 -0
- package/bios/seabios/out/include/config/lsi/scsi.h +0 -0
- package/bios/seabios/out/include/config/malloc/uppermemory.h +0 -0
- package/bios/seabios/out/include/config/megasas.h +0 -0
- package/bios/seabios/out/include/config/mouse.h +0 -0
- package/bios/seabios/out/include/config/mpt/scsi.h +0 -0
- package/bios/seabios/out/include/config/mptable.h +0 -0
- package/bios/seabios/out/include/config/mtrr/init.h +0 -0
- package/bios/seabios/out/include/config/optionroms.h +0 -0
- package/bios/seabios/out/include/config/override/pci/id.h +0 -0
- package/bios/seabios/out/include/config/pcibios.h +0 -0
- package/bios/seabios/out/include/config/pirtable.h +0 -0
- package/bios/seabios/out/include/config/pmm.h +0 -0
- package/bios/seabios/out/include/config/pmtimer.h +0 -0
- package/bios/seabios/out/include/config/pnpbios.h +0 -0
- package/bios/seabios/out/include/config/ps2port.h +0 -0
- package/bios/seabios/out/include/config/pvscsi.h +0 -0
- package/bios/seabios/out/include/config/qemu/hardware.h +0 -0
- package/bios/seabios/out/include/config/qemu.h +0 -0
- package/bios/seabios/out/include/config/rom/size.h +0 -0
- package/bios/seabios/out/include/config/rtc/timer.h +0 -0
- package/bios/seabios/out/include/config/s3/resume.h +0 -0
- package/bios/seabios/out/include/config/sdcard.h +0 -0
- package/bios/seabios/out/include/config/serial.h +0 -0
- package/bios/seabios/out/include/config/tcgbios.h +0 -0
- package/bios/seabios/out/include/config/threads.h +0 -0
- package/bios/seabios/out/include/config/tristate.conf +4 -0
- package/bios/seabios/out/include/config/tsc/timer.h +0 -0
- package/bios/seabios/out/include/config/use/smm.h +0 -0
- package/bios/seabios/out/include/config/vga/allocate/extra/stack.h +0 -0
- package/bios/seabios/out/include/config/vga/bochs/stdvga.h +0 -0
- package/bios/seabios/out/include/config/vga/bochs.h +0 -0
- package/bios/seabios/out/include/config/vga/did.h +0 -0
- package/bios/seabios/out/include/config/vga/extra/stack/size.h +0 -0
- package/bios/seabios/out/include/config/vga/fixup/asm.h +0 -0
- package/bios/seabios/out/include/config/vga/pci.h +0 -0
- package/bios/seabios/out/include/config/vga/stdvga/ports.h +0 -0
- package/bios/seabios/out/include/config/vga/vbe.h +0 -0
- package/bios/seabios/out/include/config/vga/vid.h +0 -0
- package/bios/seabios/out/include/config/vgahooks.h +0 -0
- package/bios/seabios/out/include/config/virtio/blk.h +0 -0
- package/bios/seabios/out/include/config/virtio/scsi.h +0 -0
- package/bios/seabios/out/include/config/xen.h +0 -0
- package/bios/seabios/out/scripts/kconfig/conf +0 -0
- package/bios/seabios/out/scripts/kconfig/conf.o +0 -0
- package/bios/seabios/out/scripts/kconfig/zconf.hash.c +289 -0
- package/bios/seabios/out/scripts/kconfig/zconf.lex.c +2420 -0
- package/bios/seabios/out/scripts/kconfig/zconf.tab.c +2538 -0
- package/bios/seabios/out/scripts/kconfig/zconf.tab.o +0 -0
- package/bios/seabios/scripts/acpi_extract.py +366 -0
- package/bios/seabios/scripts/acpi_extract_preprocess.py +41 -0
- package/bios/seabios/scripts/buildrom.py +56 -0
- package/bios/seabios/scripts/buildversion.py +134 -0
- package/bios/seabios/scripts/checkrom.py +95 -0
- package/bios/seabios/scripts/checkstack.py +226 -0
- package/bios/seabios/scripts/checksum.py +16 -0
- package/bios/seabios/scripts/encodeint.py +21 -0
- package/bios/seabios/scripts/gen-offsets.sh +17 -0
- package/bios/seabios/scripts/kconfig/.gitignore +22 -0
- package/bios/seabios/scripts/kconfig/Makefile +331 -0
- package/bios/seabios/scripts/kconfig/POTFILES.in +12 -0
- package/bios/seabios/scripts/kconfig/check.sh +13 -0
- package/bios/seabios/scripts/kconfig/conf.c +718 -0
- package/bios/seabios/scripts/kconfig/confdata.c +1250 -0
- package/bios/seabios/scripts/kconfig/expr.c +1168 -0
- package/bios/seabios/scripts/kconfig/expr.h +241 -0
- package/bios/seabios/scripts/kconfig/gconf.c +1542 -0
- package/bios/seabios/scripts/kconfig/gconf.glade +661 -0
- package/bios/seabios/scripts/kconfig/images.c +326 -0
- package/bios/seabios/scripts/kconfig/kxgettext.c +235 -0
- package/bios/seabios/scripts/kconfig/lex.zconf.c +2430 -0
- package/bios/seabios/scripts/kconfig/list.h +131 -0
- package/bios/seabios/scripts/kconfig/lkc.h +200 -0
- package/bios/seabios/scripts/kconfig/lkc_proto.h +57 -0
- package/bios/seabios/scripts/kconfig/lxdialog/.gitignore +4 -0
- package/bios/seabios/scripts/kconfig/lxdialog/BIG.FAT.WARNING +4 -0
- package/bios/seabios/scripts/kconfig/lxdialog/check-lxdialog.sh +87 -0
- package/bios/seabios/scripts/kconfig/lxdialog/checklist.c +332 -0
- package/bios/seabios/scripts/kconfig/lxdialog/dialog.h +257 -0
- package/bios/seabios/scripts/kconfig/lxdialog/inputbox.c +301 -0
- package/bios/seabios/scripts/kconfig/lxdialog/menubox.c +437 -0
- package/bios/seabios/scripts/kconfig/lxdialog/textbox.c +408 -0
- package/bios/seabios/scripts/kconfig/lxdialog/util.c +713 -0
- package/bios/seabios/scripts/kconfig/lxdialog/yesno.c +114 -0
- package/bios/seabios/scripts/kconfig/mconf.c +1036 -0
- package/bios/seabios/scripts/kconfig/menu.c +697 -0
- package/bios/seabios/scripts/kconfig/merge_config.sh +150 -0
- package/bios/seabios/scripts/kconfig/nconf.c +1556 -0
- package/bios/seabios/scripts/kconfig/nconf.gui.c +656 -0
- package/bios/seabios/scripts/kconfig/nconf.h +96 -0
- package/bios/seabios/scripts/kconfig/qconf.cc +1795 -0
- package/bios/seabios/scripts/kconfig/qconf.h +338 -0
- package/bios/seabios/scripts/kconfig/streamline_config.pl +647 -0
- package/bios/seabios/scripts/kconfig/symbol.c +1373 -0
- package/bios/seabios/scripts/kconfig/util.c +157 -0
- package/bios/seabios/scripts/kconfig/zconf.gperf +48 -0
- package/bios/seabios/scripts/kconfig/zconf.hash.c_shipped +289 -0
- package/bios/seabios/scripts/kconfig/zconf.l +363 -0
- package/bios/seabios/scripts/kconfig/zconf.lex.c_shipped +2420 -0
- package/bios/seabios/scripts/kconfig/zconf.tab.c_shipped +2538 -0
- package/bios/seabios/scripts/kconfig/zconf.y +733 -0
- package/bios/seabios/scripts/layoutrom.py +705 -0
- package/bios/seabios/scripts/python23compat.py +14 -0
- package/bios/seabios/scripts/readserial.py +190 -0
- package/bios/seabios/scripts/tarball.sh +36 -0
- package/bios/seabios/scripts/test-build.sh +90 -0
- package/bios/seabios/scripts/transdump.py +53 -0
- package/bios/seabios/scripts/vgafixup.py +96 -0
- package/bios/seabios/src/Kconfig +579 -0
- package/bios/seabios/src/apm.c +215 -0
- package/bios/seabios/src/asm-offsets.c +23 -0
- package/bios/seabios/src/biosvar.h +130 -0
- package/bios/seabios/src/block.c +623 -0
- package/bios/seabios/src/block.h +121 -0
- package/bios/seabios/src/bmp.c +117 -0
- package/bios/seabios/src/boot.c +793 -0
- package/bios/seabios/src/bootsplash.c +255 -0
- package/bios/seabios/src/bregs.h +80 -0
- package/bios/seabios/src/byteorder.h +71 -0
- package/bios/seabios/src/cdrom.c +322 -0
- package/bios/seabios/src/clock.c +506 -0
- package/bios/seabios/src/code16gcc.s +1 -0
- package/bios/seabios/src/config.h +108 -0
- package/bios/seabios/src/cp437.c +275 -0
- package/bios/seabios/src/cp437.h +1 -0
- package/bios/seabios/src/disk.c +779 -0
- package/bios/seabios/src/e820map.c +152 -0
- package/bios/seabios/src/e820map.h +26 -0
- package/bios/seabios/src/entryfuncs.S +165 -0
- package/bios/seabios/src/farptr.h +208 -0
- package/bios/seabios/src/font.c +139 -0
- package/bios/seabios/src/fw/acpi-dsdt-cpu-hotplug.dsl +78 -0
- package/bios/seabios/src/fw/acpi-dsdt-dbug.dsl +26 -0
- package/bios/seabios/src/fw/acpi-dsdt-hpet.dsl +36 -0
- package/bios/seabios/src/fw/acpi-dsdt-isa.dsl +102 -0
- package/bios/seabios/src/fw/acpi-dsdt-pci-crs.dsl +90 -0
- package/bios/seabios/src/fw/acpi-dsdt.dsl +342 -0
- package/bios/seabios/src/fw/acpi-dsdt.hex +554 -0
- package/bios/seabios/src/fw/acpi.c +685 -0
- package/bios/seabios/src/fw/biostables.c +491 -0
- package/bios/seabios/src/fw/coreboot.c +569 -0
- package/bios/seabios/src/fw/csm.c +347 -0
- package/bios/seabios/src/fw/dev-pci.h +52 -0
- package/bios/seabios/src/fw/dev-piix.h +29 -0
- package/bios/seabios/src/fw/dev-q35.h +52 -0
- package/bios/seabios/src/fw/lzmadecode.c +398 -0
- package/bios/seabios/src/fw/lzmadecode.h +67 -0
- package/bios/seabios/src/fw/mptable.c +197 -0
- package/bios/seabios/src/fw/mtrr.c +105 -0
- package/bios/seabios/src/fw/multiboot.c +111 -0
- package/bios/seabios/src/fw/paravirt.c +624 -0
- package/bios/seabios/src/fw/paravirt.h +63 -0
- package/bios/seabios/src/fw/pciinit.c +1187 -0
- package/bios/seabios/src/fw/pirtable.c +103 -0
- package/bios/seabios/src/fw/q35-acpi-dsdt.dsl +450 -0
- package/bios/seabios/src/fw/romfile_loader.c +259 -0
- package/bios/seabios/src/fw/romfile_loader.h +91 -0
- package/bios/seabios/src/fw/shadow.c +208 -0
- package/bios/seabios/src/fw/smbios.c +585 -0
- package/bios/seabios/src/fw/smm.c +269 -0
- package/bios/seabios/src/fw/smp.c +194 -0
- package/bios/seabios/src/fw/ssdt-misc.dsl +104 -0
- package/bios/seabios/src/fw/ssdt-misc.hex +88 -0
- package/bios/seabios/src/fw/ssdt-pcihp.dsl +36 -0
- package/bios/seabios/src/fw/ssdt-pcihp.hex +38 -0
- package/bios/seabios/src/fw/ssdt-proc.dsl +48 -0
- package/bios/seabios/src/fw/ssdt-proc.hex +35 -0
- package/bios/seabios/src/fw/xen.c +149 -0
- package/bios/seabios/src/fw/xen.h +125 -0
- package/bios/seabios/src/gen-defs.h +19 -0
- package/bios/seabios/src/hw/ahci.c +697 -0
- package/bios/seabios/src/hw/ahci.h +201 -0
- package/bios/seabios/src/hw/ata.c +1046 -0
- package/bios/seabios/src/hw/ata.h +163 -0
- package/bios/seabios/src/hw/blockcmd.c +372 -0
- package/bios/seabios/src/hw/blockcmd.h +114 -0
- package/bios/seabios/src/hw/dma.c +67 -0
- package/bios/seabios/src/hw/esp-scsi.c +241 -0
- package/bios/seabios/src/hw/esp-scsi.h +8 -0
- package/bios/seabios/src/hw/floppy.c +741 -0
- package/bios/seabios/src/hw/lsi-scsi.c +221 -0
- package/bios/seabios/src/hw/lsi-scsi.h +8 -0
- package/bios/seabios/src/hw/megasas.c +405 -0
- package/bios/seabios/src/hw/megasas.h +8 -0
- package/bios/seabios/src/hw/mpt-scsi.c +319 -0
- package/bios/seabios/src/hw/mpt-scsi.h +8 -0
- package/bios/seabios/src/hw/nvme-int.h +199 -0
- package/bios/seabios/src/hw/nvme.c +708 -0
- package/bios/seabios/src/hw/nvme.h +17 -0
- package/bios/seabios/src/hw/pci.c +133 -0
- package/bios/seabios/src/hw/pci.h +47 -0
- package/bios/seabios/src/hw/pci_ids.h +2632 -0
- package/bios/seabios/src/hw/pci_regs.h +556 -0
- package/bios/seabios/src/hw/pcidevice.c +192 -0
- package/bios/seabios/src/hw/pcidevice.h +76 -0
- package/bios/seabios/src/hw/pic.c +115 -0
- package/bios/seabios/src/hw/pic.h +60 -0
- package/bios/seabios/src/hw/ps2port.c +543 -0
- package/bios/seabios/src/hw/ps2port.h +67 -0
- package/bios/seabios/src/hw/pvscsi.c +333 -0
- package/bios/seabios/src/hw/pvscsi.h +8 -0
- package/bios/seabios/src/hw/ramdisk.c +108 -0
- package/bios/seabios/src/hw/rtc.c +100 -0
- package/bios/seabios/src/hw/rtc.h +75 -0
- package/bios/seabios/src/hw/sdcard.c +572 -0
- package/bios/seabios/src/hw/serialio.c +113 -0
- package/bios/seabios/src/hw/serialio.h +29 -0
- package/bios/seabios/src/hw/timer.c +259 -0
- package/bios/seabios/src/hw/tpm_drivers.c +636 -0
- package/bios/seabios/src/hw/tpm_drivers.h +127 -0
- package/bios/seabios/src/hw/usb-ehci.c +650 -0
- package/bios/seabios/src/hw/usb-ehci.h +177 -0
- package/bios/seabios/src/hw/usb-hid.c +442 -0
- package/bios/seabios/src/hw/usb-hid.h +29 -0
- package/bios/seabios/src/hw/usb-hub.c +205 -0
- package/bios/seabios/src/hw/usb-hub.h +64 -0
- package/bios/seabios/src/hw/usb-msc.c +222 -0
- package/bios/seabios/src/hw/usb-msc.h +10 -0
- package/bios/seabios/src/hw/usb-ohci.c +568 -0
- package/bios/seabios/src/hw/usb-ohci.h +144 -0
- package/bios/seabios/src/hw/usb-uas.c +289 -0
- package/bios/seabios/src/hw/usb-uas.h +9 -0
- package/bios/seabios/src/hw/usb-uhci.c +571 -0
- package/bios/seabios/src/hw/usb-uhci.h +128 -0
- package/bios/seabios/src/hw/usb-xhci.c +1161 -0
- package/bios/seabios/src/hw/usb-xhci.h +133 -0
- package/bios/seabios/src/hw/usb.c +499 -0
- package/bios/seabios/src/hw/usb.h +254 -0
- package/bios/seabios/src/hw/virtio-blk.c +211 -0
- package/bios/seabios/src/hw/virtio-blk.h +43 -0
- package/bios/seabios/src/hw/virtio-pci.c +501 -0
- package/bios/seabios/src/hw/virtio-pci.h +151 -0
- package/bios/seabios/src/hw/virtio-ring.c +147 -0
- package/bios/seabios/src/hw/virtio-ring.h +121 -0
- package/bios/seabios/src/hw/virtio-scsi.c +220 -0
- package/bios/seabios/src/hw/virtio-scsi.h +47 -0
- package/bios/seabios/src/jpeg.c +1055 -0
- package/bios/seabios/src/kbd.c +599 -0
- package/bios/seabios/src/list.h +91 -0
- package/bios/seabios/src/malloc.c +561 -0
- package/bios/seabios/src/malloc.h +70 -0
- package/bios/seabios/src/memmap.h +21 -0
- package/bios/seabios/src/misc.c +195 -0
- package/bios/seabios/src/mouse.c +342 -0
- package/bios/seabios/src/optionroms.c +475 -0
- package/bios/seabios/src/output.c +584 -0
- package/bios/seabios/src/output.h +68 -0
- package/bios/seabios/src/pcibios.c +241 -0
- package/bios/seabios/src/pmm.c +176 -0
- package/bios/seabios/src/pnpbios.c +88 -0
- package/bios/seabios/src/post.c +337 -0
- package/bios/seabios/src/resume.c +157 -0
- package/bios/seabios/src/romfile.c +146 -0
- package/bios/seabios/src/romfile.h +21 -0
- package/bios/seabios/src/romlayout.S +698 -0
- package/bios/seabios/src/sercon.c +677 -0
- package/bios/seabios/src/serial.c +317 -0
- package/bios/seabios/src/sha1.c +147 -0
- package/bios/seabios/src/sha1.h +8 -0
- package/bios/seabios/src/stacks.c +771 -0
- package/bios/seabios/src/stacks.h +68 -0
- package/bios/seabios/src/std/LegacyBios.h +985 -0
- package/bios/seabios/src/std/acpi.h +323 -0
- package/bios/seabios/src/std/bda.h +174 -0
- package/bios/seabios/src/std/disk.h +175 -0
- package/bios/seabios/src/std/mptable.h +77 -0
- package/bios/seabios/src/std/multiboot.h +260 -0
- package/bios/seabios/src/std/optionrom.h +59 -0
- package/bios/seabios/src/std/pirtable.h +35 -0
- package/bios/seabios/src/std/pmm.h +19 -0
- package/bios/seabios/src/std/pnpbios.h +24 -0
- package/bios/seabios/src/std/smbios.h +167 -0
- package/bios/seabios/src/std/tcg.h +554 -0
- package/bios/seabios/src/std/vbe.h +156 -0
- package/bios/seabios/src/std/vga.h +63 -0
- package/bios/seabios/src/string.c +251 -0
- package/bios/seabios/src/string.h +31 -0
- package/bios/seabios/src/system.c +357 -0
- package/bios/seabios/src/tcgbios.c +2014 -0
- package/bios/seabios/src/tcgbios.h +19 -0
- package/bios/seabios/src/types.h +156 -0
- package/bios/seabios/src/util.h +251 -0
- package/bios/seabios/src/version.c +5 -0
- package/bios/seabios/src/vgahooks.c +355 -0
- package/bios/seabios/src/x86.c +23 -0
- package/bios/seabios/src/x86.h +277 -0
- package/bios/seabios/vgasrc/Kconfig +211 -0
- package/bios/seabios/vgasrc/bochsdisplay.c +59 -0
- package/bios/seabios/vgasrc/bochsvga.c +447 -0
- package/bios/seabios/vgasrc/bochsvga.h +57 -0
- package/bios/seabios/vgasrc/cbvga.c +337 -0
- package/bios/seabios/vgasrc/clext.c +627 -0
- package/bios/seabios/vgasrc/geodevga.c +434 -0
- package/bios/seabios/vgasrc/geodevga.h +89 -0
- package/bios/seabios/vgasrc/ramfb.c +163 -0
- package/bios/seabios/vgasrc/stdvga.c +485 -0
- package/bios/seabios/vgasrc/stdvga.h +81 -0
- package/bios/seabios/vgasrc/stdvgaio.c +186 -0
- package/bios/seabios/vgasrc/stdvgamodes.c +534 -0
- package/bios/seabios/vgasrc/swcursor.c +96 -0
- package/bios/seabios/vgasrc/vbe.c +432 -0
- package/bios/seabios/vgasrc/vgabios.c +1131 -0
- package/bios/seabios/vgasrc/vgabios.h +88 -0
- package/bios/seabios/vgasrc/vgaentry.S +161 -0
- package/bios/seabios/vgasrc/vgafb.c +661 -0
- package/bios/seabios/vgasrc/vgafb.h +42 -0
- package/bios/seabios/vgasrc/vgafonts.c +785 -0
- package/bios/seabios/vgasrc/vgahw.h +152 -0
- package/bios/seabios/vgasrc/vgainit.c +202 -0
- package/bios/seabios/vgasrc/vgalayout.lds.S +23 -0
- package/bios/seabios/vgasrc/vgautil.h +103 -0
- package/bios/seabios/vgasrc/vgaversion.c +6 -0
- package/build/binaries.js +1 -1
- package/build/index-debug.cjs +1 -1
- package/build/index-debug.js +1 -1
- package/build/index.cjs +1 -1
- package/build/index.js +1 -1
- package/build/v86-debug.wasm +0 -0
- package/build/v86.wasm +0 -0
- package/package.json +1 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// Code for misc 16bit handlers and variables.
|
|
2
|
+
//
|
|
3
|
+
// Copyright (C) 2008,2009 Kevin O'Connor <kevin@koconnor.net>
|
|
4
|
+
// Copyright (C) 2002 MandrakeSoft S.A.
|
|
5
|
+
//
|
|
6
|
+
// This file may be distributed under the terms of the GNU LGPLv3 license.
|
|
7
|
+
|
|
8
|
+
#include "biosvar.h" // GET_BDA
|
|
9
|
+
#include "bregs.h" // struct bregs
|
|
10
|
+
#include "hw/pic.h" // enable_hwirq
|
|
11
|
+
#include "output.h" // debug_enter
|
|
12
|
+
#include "stacks.h" // call16_int
|
|
13
|
+
#include "string.h" // memset
|
|
14
|
+
|
|
15
|
+
#define PORT_MATH_CLEAR 0x00f0
|
|
16
|
+
|
|
17
|
+
// Indicator if POST phase has been started (and if it has completed).
|
|
18
|
+
int HaveRunPost VARFSEG;
|
|
19
|
+
|
|
20
|
+
int
|
|
21
|
+
in_post(void)
|
|
22
|
+
{
|
|
23
|
+
return GET_GLOBAL(HaveRunPost) == 1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
/****************************************************************
|
|
28
|
+
* Misc 16bit ISRs
|
|
29
|
+
****************************************************************/
|
|
30
|
+
|
|
31
|
+
// INT 12h Memory Size Service Entry Point
|
|
32
|
+
void VISIBLE16
|
|
33
|
+
handle_12(struct bregs *regs)
|
|
34
|
+
{
|
|
35
|
+
debug_enter(regs, DEBUG_HDL_12);
|
|
36
|
+
regs->ax = GET_BDA(mem_size_kb);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// INT 11h Equipment List Service Entry Point
|
|
40
|
+
void VISIBLE16
|
|
41
|
+
handle_11(struct bregs *regs)
|
|
42
|
+
{
|
|
43
|
+
debug_enter(regs, DEBUG_HDL_11);
|
|
44
|
+
regs->ax = GET_BDA(equipment_list_flags);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// INT 05h Print Screen Service Entry Point
|
|
48
|
+
void VISIBLE16
|
|
49
|
+
handle_05(struct bregs *regs)
|
|
50
|
+
{
|
|
51
|
+
debug_enter(regs, DEBUG_HDL_05);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// NMI handler
|
|
55
|
+
void VISIBLE16
|
|
56
|
+
handle_02(void)
|
|
57
|
+
{
|
|
58
|
+
debug_isr(DEBUG_ISR_02);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void
|
|
62
|
+
mathcp_setup(void)
|
|
63
|
+
{
|
|
64
|
+
dprintf(3, "math cp init\n");
|
|
65
|
+
// 80x87 coprocessor installed
|
|
66
|
+
set_equipment_flags(0x02, 0x02);
|
|
67
|
+
enable_hwirq(13, FUNC16(entry_75));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION
|
|
71
|
+
void VISIBLE16
|
|
72
|
+
handle_75(void)
|
|
73
|
+
{
|
|
74
|
+
debug_isr(DEBUG_ISR_75);
|
|
75
|
+
|
|
76
|
+
// clear irq13
|
|
77
|
+
outb(0, PORT_MATH_CLEAR);
|
|
78
|
+
// clear interrupt
|
|
79
|
+
pic_eoi2();
|
|
80
|
+
// legacy nmi call
|
|
81
|
+
struct bregs br;
|
|
82
|
+
memset(&br, 0, sizeof(br));
|
|
83
|
+
br.flags = F_IF;
|
|
84
|
+
call16_int(0x02, &br);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
/****************************************************************
|
|
89
|
+
* BIOS_CONFIG_TABLE
|
|
90
|
+
****************************************************************/
|
|
91
|
+
|
|
92
|
+
// DMA channel 3 used by hard disk BIOS
|
|
93
|
+
#define CBT_F1_DMA3USED (1<<7)
|
|
94
|
+
// 2nd interrupt controller (8259) installed
|
|
95
|
+
#define CBT_F1_2NDPIC (1<<6)
|
|
96
|
+
// Real-Time Clock installed
|
|
97
|
+
#define CBT_F1_RTC (1<<5)
|
|
98
|
+
// INT 15/AH=4Fh called upon INT 09h
|
|
99
|
+
#define CBT_F1_INT154F (1<<4)
|
|
100
|
+
// wait for external event (INT 15/AH=41h) supported
|
|
101
|
+
#define CBT_F1_WAITEXT (1<<3)
|
|
102
|
+
// extended BIOS area allocated (usually at top of RAM)
|
|
103
|
+
#define CBT_F1_EBDA (1<<2)
|
|
104
|
+
// bus is Micro Channel instead of ISA
|
|
105
|
+
#define CBT_F1_MCA (1<<1)
|
|
106
|
+
// system has dual bus (Micro Channel + ISA)
|
|
107
|
+
#define CBT_F1_MCAISA (1<<0)
|
|
108
|
+
|
|
109
|
+
// INT 16/AH=09h (keyboard functionality) supported
|
|
110
|
+
#define CBT_F2_INT1609 (1<<6)
|
|
111
|
+
|
|
112
|
+
struct bios_config_table_s BIOS_CONFIG_TABLE VARFSEGFIXED(0xe6f5) = {
|
|
113
|
+
.size = sizeof(BIOS_CONFIG_TABLE) - 2,
|
|
114
|
+
.model = BUILD_MODEL_ID,
|
|
115
|
+
.submodel = BUILD_SUBMODEL_ID,
|
|
116
|
+
.biosrev = BUILD_BIOS_REVISION,
|
|
117
|
+
.feature1 = (
|
|
118
|
+
CBT_F1_2NDPIC | CBT_F1_RTC | CBT_F1_EBDA
|
|
119
|
+
| (CONFIG_KBD_CALL_INT15_4F ? CBT_F1_INT154F : 0)),
|
|
120
|
+
.feature2 = CBT_F2_INT1609,
|
|
121
|
+
.feature3 = 0,
|
|
122
|
+
.feature4 = 0,
|
|
123
|
+
.feature5 = 0,
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
/****************************************************************
|
|
128
|
+
* GDT and IDT tables
|
|
129
|
+
****************************************************************/
|
|
130
|
+
|
|
131
|
+
// Real mode IDT descriptor
|
|
132
|
+
struct descloc_s rmode_IDT_info VARFSEG = {
|
|
133
|
+
.length = sizeof(struct rmode_IVT) - 1,
|
|
134
|
+
.addr = (u32)MAKE_FLATPTR(SEG_IVT, 0),
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
// Dummy IDT that forces a machine shutdown if an irq happens in
|
|
138
|
+
// protected mode.
|
|
139
|
+
u8 dummy_IDT VARFSEG;
|
|
140
|
+
|
|
141
|
+
// Protected mode IDT descriptor
|
|
142
|
+
struct descloc_s pmode_IDT_info VARFSEG = {
|
|
143
|
+
.length = sizeof(dummy_IDT) - 1,
|
|
144
|
+
.addr = (u32)&dummy_IDT,
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// GDT
|
|
148
|
+
u64 rombios32_gdt[] VARFSEG __aligned(8) = {
|
|
149
|
+
// First entry can't be used.
|
|
150
|
+
0x0000000000000000LL,
|
|
151
|
+
// 32 bit flat code segment (SEG32_MODE32_CS)
|
|
152
|
+
GDT_GRANLIMIT(0xffffffff) | GDT_CODE | GDT_B,
|
|
153
|
+
// 32 bit flat data segment (SEG32_MODE32_DS)
|
|
154
|
+
GDT_GRANLIMIT(0xffffffff) | GDT_DATA | GDT_B,
|
|
155
|
+
// 16 bit code segment base=0xf0000 limit=0xffff (SEG32_MODE16_CS)
|
|
156
|
+
GDT_LIMIT(BUILD_BIOS_SIZE-1) | GDT_CODE | GDT_BASE(BUILD_BIOS_ADDR),
|
|
157
|
+
// 16 bit data segment base=0x0 limit=0xffff (SEG32_MODE16_DS)
|
|
158
|
+
GDT_LIMIT(0x0ffff) | GDT_DATA,
|
|
159
|
+
// 16 bit code segment base=0xf0000 limit=0xffffffff (SEG32_MODE16BIG_CS)
|
|
160
|
+
GDT_GRANLIMIT(0xffffffff) | GDT_CODE | GDT_BASE(BUILD_BIOS_ADDR),
|
|
161
|
+
// 16 bit data segment base=0 limit=0xffffffff (SEG32_MODE16BIG_DS)
|
|
162
|
+
GDT_GRANLIMIT(0xffffffff) | GDT_DATA,
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// GDT descriptor
|
|
166
|
+
struct descloc_s rombios32_gdt_48 VARFSEG = {
|
|
167
|
+
.length = sizeof(rombios32_gdt) - 1,
|
|
168
|
+
.addr = (u32)rombios32_gdt,
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
/****************************************************************
|
|
173
|
+
* Misc fixed vars
|
|
174
|
+
****************************************************************/
|
|
175
|
+
|
|
176
|
+
// BIOS build date
|
|
177
|
+
char BiosDate[] VARFSEGFIXED(0xfff5) = "06/23/99";
|
|
178
|
+
|
|
179
|
+
u8 BiosModelId VARFSEGFIXED(0xfffe) = BUILD_MODEL_ID;
|
|
180
|
+
|
|
181
|
+
u8 BiosChecksum VARFSEGFIXED(0xffff);
|
|
182
|
+
|
|
183
|
+
struct floppy_dbt_s diskette_param_table VARFSEGFIXED(0xefc7);
|
|
184
|
+
|
|
185
|
+
// Old Fixed Disk Parameter Table (newer tables are in the ebda).
|
|
186
|
+
struct fdpt_s OldFDPT VARFSEGFIXED(0xe401);
|
|
187
|
+
|
|
188
|
+
// XXX - Baud Rate Generator Table
|
|
189
|
+
u8 BaudTable[16] VARFSEGFIXED(0xe729);
|
|
190
|
+
|
|
191
|
+
// XXX - Initial Interrupt Vector Offsets Loaded by POST
|
|
192
|
+
u8 InitVectors[13] VARFSEGFIXED(0xfef3);
|
|
193
|
+
|
|
194
|
+
// XXX - INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
|
|
195
|
+
u8 VideoParams[88] VARFSEGFIXED(0xf0a4);
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
// 16bit code to handle mouse events.
|
|
2
|
+
//
|
|
3
|
+
// Copyright (C) 2008 Kevin O'Connor <kevin@koconnor.net>
|
|
4
|
+
// Copyright (C) 2002 MandrakeSoft S.A.
|
|
5
|
+
//
|
|
6
|
+
// This file may be distributed under the terms of the GNU LGPLv3 license.
|
|
7
|
+
|
|
8
|
+
#include "biosvar.h" // GET_EBDA
|
|
9
|
+
#include "bregs.h" // struct bregs
|
|
10
|
+
#include "hw/ps2port.h" // ps2_mouse_command
|
|
11
|
+
#include "hw/usb-hid.h" // usb_mouse_command
|
|
12
|
+
#include "output.h" // dprintf
|
|
13
|
+
#include "stacks.h" // stack_hop_back
|
|
14
|
+
#include "util.h" // mouse_init
|
|
15
|
+
|
|
16
|
+
void
|
|
17
|
+
mouse_init(void)
|
|
18
|
+
{
|
|
19
|
+
if (! CONFIG_MOUSE)
|
|
20
|
+
return;
|
|
21
|
+
dprintf(3, "init mouse\n");
|
|
22
|
+
// pointing device installed
|
|
23
|
+
set_equipment_flags(0x04, 0x04);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static int
|
|
27
|
+
mouse_command(int command, u8 *param)
|
|
28
|
+
{
|
|
29
|
+
if (usb_mouse_active())
|
|
30
|
+
return usb_mouse_command(command, param);
|
|
31
|
+
return ps2_mouse_command(command, param);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#define RET_SUCCESS 0x00
|
|
35
|
+
#define RET_EINVFUNCTION 0x01
|
|
36
|
+
#define RET_EINVINPUT 0x02
|
|
37
|
+
#define RET_EINTERFACE 0x03
|
|
38
|
+
#define RET_ENEEDRESEND 0x04
|
|
39
|
+
#define RET_ENOHANDLER 0x05
|
|
40
|
+
|
|
41
|
+
// Disable Mouse
|
|
42
|
+
static void
|
|
43
|
+
mouse_15c20000(struct bregs *regs)
|
|
44
|
+
{
|
|
45
|
+
int ret = mouse_command(PSMOUSE_CMD_DISABLE, NULL);
|
|
46
|
+
if (ret)
|
|
47
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
48
|
+
else
|
|
49
|
+
set_code_success(regs);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Enable Mouse
|
|
53
|
+
static void
|
|
54
|
+
mouse_15c20001(struct bregs *regs)
|
|
55
|
+
{
|
|
56
|
+
u16 ebda_seg = get_ebda_seg();
|
|
57
|
+
u8 mouse_flags_2 = GET_EBDA(ebda_seg, mouse_flag2);
|
|
58
|
+
if ((mouse_flags_2 & 0x80) == 0) {
|
|
59
|
+
set_code_invalid(regs, RET_ENOHANDLER);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
int ret = mouse_command(PSMOUSE_CMD_ENABLE, NULL);
|
|
64
|
+
if (ret)
|
|
65
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
66
|
+
else
|
|
67
|
+
set_code_success(regs);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static void
|
|
71
|
+
mouse_15c200XX(struct bregs *regs)
|
|
72
|
+
{
|
|
73
|
+
set_code_unimplemented(regs, RET_EINVFUNCTION);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Disable/Enable Mouse
|
|
77
|
+
static void
|
|
78
|
+
mouse_15c200(struct bregs *regs)
|
|
79
|
+
{
|
|
80
|
+
switch (regs->bh) {
|
|
81
|
+
case 0x00: mouse_15c20000(regs); break;
|
|
82
|
+
case 0x01: mouse_15c20001(regs); break;
|
|
83
|
+
default: mouse_15c200XX(regs); break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Reset Mouse
|
|
88
|
+
static void
|
|
89
|
+
mouse_15c201(struct bregs *regs)
|
|
90
|
+
{
|
|
91
|
+
u8 param[2];
|
|
92
|
+
int ret = mouse_command(PSMOUSE_CMD_RESET_BAT, param);
|
|
93
|
+
if (ret) {
|
|
94
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
regs->bl = param[0];
|
|
98
|
+
regs->bh = param[1];
|
|
99
|
+
set_code_success(regs);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Set Sample Rate
|
|
103
|
+
static void
|
|
104
|
+
mouse_15c202(struct bregs *regs)
|
|
105
|
+
{
|
|
106
|
+
static u8 VAR16 sample_rates[7] = {10, 20, 40, 60, 80, 100, 200};
|
|
107
|
+
if (regs->bh >= ARRAY_SIZE(sample_rates)) {
|
|
108
|
+
set_code_invalid(regs, RET_EINVINPUT);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
u8 mouse_data1 = GET_GLOBAL(sample_rates[regs->bh]);
|
|
112
|
+
int ret = mouse_command(PSMOUSE_CMD_SETRATE, &mouse_data1);
|
|
113
|
+
if (ret)
|
|
114
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
115
|
+
else
|
|
116
|
+
set_code_success(regs);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Set Resolution
|
|
120
|
+
static void
|
|
121
|
+
mouse_15c203(struct bregs *regs)
|
|
122
|
+
{
|
|
123
|
+
// BH:
|
|
124
|
+
// 0 = 25 dpi, 1 count per millimeter
|
|
125
|
+
// 1 = 50 dpi, 2 counts per millimeter
|
|
126
|
+
// 2 = 100 dpi, 4 counts per millimeter
|
|
127
|
+
// 3 = 200 dpi, 8 counts per millimeter
|
|
128
|
+
if (regs->bh >= 4) {
|
|
129
|
+
set_code_invalid(regs, RET_EINVINPUT);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
u8 param = regs->bh;
|
|
133
|
+
int ret = mouse_command(PSMOUSE_CMD_SETRES, ¶m);
|
|
134
|
+
if (ret)
|
|
135
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
136
|
+
else
|
|
137
|
+
set_code_success(regs);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Get Device ID
|
|
141
|
+
static void
|
|
142
|
+
mouse_15c204(struct bregs *regs)
|
|
143
|
+
{
|
|
144
|
+
u8 param[2];
|
|
145
|
+
int ret = mouse_command(PSMOUSE_CMD_GETID, param);
|
|
146
|
+
if (ret) {
|
|
147
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
regs->bh = param[0];
|
|
151
|
+
set_code_success(regs);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Initialize Mouse
|
|
155
|
+
static void
|
|
156
|
+
mouse_15c205(struct bregs *regs)
|
|
157
|
+
{
|
|
158
|
+
if (regs->bh != 3) {
|
|
159
|
+
set_code_invalid(regs, RET_EINTERFACE);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
u16 ebda_seg = get_ebda_seg();
|
|
163
|
+
SET_EBDA(ebda_seg, mouse_flag1, 0x00);
|
|
164
|
+
SET_EBDA(ebda_seg, mouse_flag2, regs->bh);
|
|
165
|
+
|
|
166
|
+
// Reset Mouse
|
|
167
|
+
mouse_15c201(regs);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Return Status
|
|
171
|
+
static void
|
|
172
|
+
mouse_15c20600(struct bregs *regs)
|
|
173
|
+
{
|
|
174
|
+
u8 param[3];
|
|
175
|
+
int ret = mouse_command(PSMOUSE_CMD_GETINFO, param);
|
|
176
|
+
if (ret) {
|
|
177
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
regs->bl = param[0];
|
|
181
|
+
regs->cl = param[1];
|
|
182
|
+
regs->dl = param[2];
|
|
183
|
+
set_code_success(regs);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Set Scaling Factor to 1:1
|
|
187
|
+
static void
|
|
188
|
+
mouse_15c20601(struct bregs *regs)
|
|
189
|
+
{
|
|
190
|
+
int ret = mouse_command(PSMOUSE_CMD_SETSCALE11, NULL);
|
|
191
|
+
if (ret)
|
|
192
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
193
|
+
else
|
|
194
|
+
set_code_success(regs);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Set Scaling Factor to 2:1
|
|
198
|
+
static void
|
|
199
|
+
mouse_15c20602(struct bregs *regs)
|
|
200
|
+
{
|
|
201
|
+
int ret = mouse_command(PSMOUSE_CMD_SETSCALE21, NULL);
|
|
202
|
+
if (ret)
|
|
203
|
+
set_code_invalid(regs, RET_ENEEDRESEND);
|
|
204
|
+
else
|
|
205
|
+
set_code_success(regs);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
static void
|
|
209
|
+
mouse_15c206XX(struct bregs *regs)
|
|
210
|
+
{
|
|
211
|
+
set_code_unimplemented(regs, RET_EINVFUNCTION);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Return Status & Set Scaling Factor...
|
|
215
|
+
static void
|
|
216
|
+
mouse_15c206(struct bregs *regs)
|
|
217
|
+
{
|
|
218
|
+
switch (regs->bh) {
|
|
219
|
+
case 0x00: mouse_15c20600(regs); break;
|
|
220
|
+
case 0x01: mouse_15c20601(regs); break;
|
|
221
|
+
case 0x02: mouse_15c20602(regs); break;
|
|
222
|
+
default: mouse_15c206XX(regs); break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Set Mouse Handler Address
|
|
227
|
+
static void
|
|
228
|
+
mouse_15c207(struct bregs *regs)
|
|
229
|
+
{
|
|
230
|
+
struct segoff_s farptr = SEGOFF(regs->es, regs->bx);
|
|
231
|
+
u16 ebda_seg = get_ebda_seg();
|
|
232
|
+
u8 mouse_flags_2 = GET_EBDA(ebda_seg, mouse_flag2);
|
|
233
|
+
if (! farptr.segoff) {
|
|
234
|
+
/* remove handler */
|
|
235
|
+
if ((mouse_flags_2 & 0x80) != 0) {
|
|
236
|
+
mouse_flags_2 &= ~0x80;
|
|
237
|
+
mouse_command(PSMOUSE_CMD_DISABLE, NULL);
|
|
238
|
+
}
|
|
239
|
+
} else {
|
|
240
|
+
/* install handler */
|
|
241
|
+
mouse_flags_2 |= 0x80;
|
|
242
|
+
}
|
|
243
|
+
SET_EBDA(ebda_seg, mouse_flag2, mouse_flags_2);
|
|
244
|
+
SET_EBDA(ebda_seg, far_call_pointer, farptr);
|
|
245
|
+
set_code_success(regs);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
static void
|
|
249
|
+
mouse_15c2XX(struct bregs *regs)
|
|
250
|
+
{
|
|
251
|
+
set_code_unimplemented(regs, RET_EINVFUNCTION);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
void
|
|
255
|
+
handle_15c2(struct bregs *regs)
|
|
256
|
+
{
|
|
257
|
+
//debug_stub(regs);
|
|
258
|
+
|
|
259
|
+
if (! CONFIG_MOUSE) {
|
|
260
|
+
set_code_invalid(regs, RET_EUNSUPPORTED);
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
switch (regs->al) {
|
|
265
|
+
case 0x00: mouse_15c200(regs); break;
|
|
266
|
+
case 0x01: mouse_15c201(regs); break;
|
|
267
|
+
case 0x02: mouse_15c202(regs); break;
|
|
268
|
+
case 0x03: mouse_15c203(regs); break;
|
|
269
|
+
case 0x04: mouse_15c204(regs); break;
|
|
270
|
+
case 0x05: mouse_15c205(regs); break;
|
|
271
|
+
case 0x06: mouse_15c206(regs); break;
|
|
272
|
+
case 0x07: mouse_15c207(regs); break;
|
|
273
|
+
default: mouse_15c2XX(regs); break;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
void VISIBLE16
|
|
278
|
+
invoke_mouse_handler(void)
|
|
279
|
+
{
|
|
280
|
+
if (!CONFIG_MOUSE)
|
|
281
|
+
return;
|
|
282
|
+
if (need_hop_back()) {
|
|
283
|
+
stack_hop_back(invoke_mouse_handler, 0, 0);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
ASSERT16();
|
|
287
|
+
u16 ebda_seg = get_ebda_seg();
|
|
288
|
+
u16 status = GET_EBDA(ebda_seg, mouse_data[0]);
|
|
289
|
+
u16 X = GET_EBDA(ebda_seg, mouse_data[1]);
|
|
290
|
+
u16 Y = GET_EBDA(ebda_seg, mouse_data[2]);
|
|
291
|
+
|
|
292
|
+
struct segoff_s func = GET_EBDA(ebda_seg, far_call_pointer);
|
|
293
|
+
dprintf(16, "mouse farcall s=%04x x=%04x y=%04x func=%04x:%04x\n"
|
|
294
|
+
, status, X, Y, func.seg, func.offset);
|
|
295
|
+
|
|
296
|
+
asm volatile(
|
|
297
|
+
"pushl %%ebp\n"
|
|
298
|
+
"sti\n"
|
|
299
|
+
|
|
300
|
+
"pushl %0\n"
|
|
301
|
+
"pushw %w1\n" // status
|
|
302
|
+
"pushw %w2\n" // X
|
|
303
|
+
"pushw %w3\n" // Y
|
|
304
|
+
"pushw $0\n" // Z
|
|
305
|
+
"lcallw *8(%%esp)\n"
|
|
306
|
+
"addl $12, %%esp\n"
|
|
307
|
+
|
|
308
|
+
"cli\n"
|
|
309
|
+
"cld\n"
|
|
310
|
+
"popl %%ebp"
|
|
311
|
+
: "+a"(func.segoff), "+c"(status), "+d"(X), "+b"(Y)
|
|
312
|
+
:
|
|
313
|
+
: "edi", "esi", "cc", "memory");
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
void
|
|
317
|
+
process_mouse(u8 data)
|
|
318
|
+
{
|
|
319
|
+
if (!CONFIG_MOUSE)
|
|
320
|
+
return;
|
|
321
|
+
|
|
322
|
+
u16 ebda_seg = get_ebda_seg();
|
|
323
|
+
u8 mouse_flags_1 = GET_EBDA(ebda_seg, mouse_flag1);
|
|
324
|
+
u8 mouse_flags_2 = GET_EBDA(ebda_seg, mouse_flag2);
|
|
325
|
+
|
|
326
|
+
if (! (mouse_flags_2 & 0x80))
|
|
327
|
+
// far call handler not installed
|
|
328
|
+
return;
|
|
329
|
+
|
|
330
|
+
u8 package_count = mouse_flags_2 & 0x07;
|
|
331
|
+
u8 index = mouse_flags_1 & 0x07;
|
|
332
|
+
SET_EBDA(ebda_seg, mouse_data[index], data);
|
|
333
|
+
|
|
334
|
+
if ((index+1) < package_count) {
|
|
335
|
+
mouse_flags_1++;
|
|
336
|
+
SET_EBDA(ebda_seg, mouse_flag1, mouse_flags_1);
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
SET_EBDA(ebda_seg, mouse_flag1, 0);
|
|
341
|
+
invoke_mouse_handler();
|
|
342
|
+
}
|