v86 0.4.0 → 0.5.11
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 +56 -111
- package/build/libv86-debug.js +12680 -0
- package/build/libv86-debug.mjs +732 -0
- package/build/libv86.js +710 -0
- package/build/libv86.mjs +637 -0
- package/build/v86-debug.wasm +0 -0
- package/build/v86-fallback.wasm +0 -0
- package/build/v86.wasm +0 -0
- package/package.json +12 -35
- package/bios/.gitignore +0 -1
- package/bios/COPYING.LESSER +0 -165
- package/bios/bochs-bios.bin +0 -0
- package/bios/bochs-vgabios.bin +0 -0
- package/bios/fetch-and-build-seabios.sh +0 -13
- package/bios/seabios/.config +0 -113
- package/bios/seabios/.config.old +0 -114
- package/bios/seabios/.gitignore +0 -4
- package/bios/seabios/COPYING +0 -674
- package/bios/seabios/COPYING.LESSER +0 -165
- package/bios/seabios/Makefile +0 -286
- package/bios/seabios/README +0 -17
- package/bios/seabios/docs/Build_overview.md +0 -104
- package/bios/seabios/docs/Contributing.md +0 -20
- package/bios/seabios/docs/Debugging.md +0 -111
- package/bios/seabios/docs/Developer_Documentation.md +0 -25
- package/bios/seabios/docs/Developer_links.md +0 -86
- package/bios/seabios/docs/Download.md +0 -27
- package/bios/seabios/docs/Execution_and_code_flow.md +0 -178
- package/bios/seabios/docs/Linking_overview.md +0 -160
- package/bios/seabios/docs/Mailinglist.md +0 -8
- package/bios/seabios/docs/Memory_Model.md +0 -253
- package/bios/seabios/docs/README +0 -5
- package/bios/seabios/docs/Releases.md +0 -482
- package/bios/seabios/docs/Runtime_config.md +0 -193
- package/bios/seabios/docs/SeaBIOS.md +0 -17
- package/bios/seabios/docs/SeaVGABIOS.md +0 -39
- package/bios/seabios/out/autoconf.h +0 -117
- 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 +0 -69
- package/bios/seabios/out/include/config/auto.conf.cmd +0 -9
- 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 +0 -4
- 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 +0 -289
- package/bios/seabios/out/scripts/kconfig/zconf.lex.c +0 -2420
- package/bios/seabios/out/scripts/kconfig/zconf.tab.c +0 -2538
- package/bios/seabios/out/scripts/kconfig/zconf.tab.o +0 -0
- package/bios/seabios/scripts/acpi_extract.py +0 -366
- package/bios/seabios/scripts/acpi_extract_preprocess.py +0 -41
- package/bios/seabios/scripts/buildrom.py +0 -56
- package/bios/seabios/scripts/buildversion.py +0 -134
- package/bios/seabios/scripts/checkrom.py +0 -95
- package/bios/seabios/scripts/checkstack.py +0 -226
- package/bios/seabios/scripts/checksum.py +0 -16
- package/bios/seabios/scripts/encodeint.py +0 -21
- package/bios/seabios/scripts/gen-offsets.sh +0 -17
- package/bios/seabios/scripts/kconfig/.gitignore +0 -22
- package/bios/seabios/scripts/kconfig/Makefile +0 -331
- package/bios/seabios/scripts/kconfig/POTFILES.in +0 -12
- package/bios/seabios/scripts/kconfig/check.sh +0 -13
- package/bios/seabios/scripts/kconfig/conf.c +0 -718
- package/bios/seabios/scripts/kconfig/confdata.c +0 -1250
- package/bios/seabios/scripts/kconfig/expr.c +0 -1168
- package/bios/seabios/scripts/kconfig/expr.h +0 -241
- package/bios/seabios/scripts/kconfig/gconf.c +0 -1542
- package/bios/seabios/scripts/kconfig/gconf.glade +0 -661
- package/bios/seabios/scripts/kconfig/images.c +0 -326
- package/bios/seabios/scripts/kconfig/kxgettext.c +0 -235
- package/bios/seabios/scripts/kconfig/lex.zconf.c +0 -2430
- package/bios/seabios/scripts/kconfig/list.h +0 -131
- package/bios/seabios/scripts/kconfig/lkc.h +0 -200
- package/bios/seabios/scripts/kconfig/lkc_proto.h +0 -57
- package/bios/seabios/scripts/kconfig/lxdialog/.gitignore +0 -4
- package/bios/seabios/scripts/kconfig/lxdialog/BIG.FAT.WARNING +0 -4
- package/bios/seabios/scripts/kconfig/lxdialog/check-lxdialog.sh +0 -87
- package/bios/seabios/scripts/kconfig/lxdialog/checklist.c +0 -332
- package/bios/seabios/scripts/kconfig/lxdialog/dialog.h +0 -257
- package/bios/seabios/scripts/kconfig/lxdialog/inputbox.c +0 -301
- package/bios/seabios/scripts/kconfig/lxdialog/menubox.c +0 -437
- package/bios/seabios/scripts/kconfig/lxdialog/textbox.c +0 -408
- package/bios/seabios/scripts/kconfig/lxdialog/util.c +0 -713
- package/bios/seabios/scripts/kconfig/lxdialog/yesno.c +0 -114
- package/bios/seabios/scripts/kconfig/mconf.c +0 -1036
- package/bios/seabios/scripts/kconfig/menu.c +0 -697
- package/bios/seabios/scripts/kconfig/merge_config.sh +0 -150
- package/bios/seabios/scripts/kconfig/nconf.c +0 -1556
- package/bios/seabios/scripts/kconfig/nconf.gui.c +0 -656
- package/bios/seabios/scripts/kconfig/nconf.h +0 -96
- package/bios/seabios/scripts/kconfig/qconf.cc +0 -1795
- package/bios/seabios/scripts/kconfig/qconf.h +0 -338
- package/bios/seabios/scripts/kconfig/streamline_config.pl +0 -647
- package/bios/seabios/scripts/kconfig/symbol.c +0 -1373
- package/bios/seabios/scripts/kconfig/util.c +0 -157
- package/bios/seabios/scripts/kconfig/zconf.gperf +0 -48
- package/bios/seabios/scripts/kconfig/zconf.hash.c_shipped +0 -289
- package/bios/seabios/scripts/kconfig/zconf.l +0 -363
- package/bios/seabios/scripts/kconfig/zconf.lex.c_shipped +0 -2420
- package/bios/seabios/scripts/kconfig/zconf.tab.c_shipped +0 -2538
- package/bios/seabios/scripts/kconfig/zconf.y +0 -733
- package/bios/seabios/scripts/layoutrom.py +0 -705
- package/bios/seabios/scripts/python23compat.py +0 -14
- package/bios/seabios/scripts/readserial.py +0 -190
- package/bios/seabios/scripts/tarball.sh +0 -36
- package/bios/seabios/scripts/test-build.sh +0 -90
- package/bios/seabios/scripts/transdump.py +0 -53
- package/bios/seabios/scripts/vgafixup.py +0 -96
- package/bios/seabios/src/Kconfig +0 -579
- package/bios/seabios/src/apm.c +0 -215
- package/bios/seabios/src/asm-offsets.c +0 -23
- package/bios/seabios/src/biosvar.h +0 -130
- package/bios/seabios/src/block.c +0 -623
- package/bios/seabios/src/block.h +0 -121
- package/bios/seabios/src/bmp.c +0 -117
- package/bios/seabios/src/boot.c +0 -793
- package/bios/seabios/src/bootsplash.c +0 -255
- package/bios/seabios/src/bregs.h +0 -80
- package/bios/seabios/src/byteorder.h +0 -71
- package/bios/seabios/src/cdrom.c +0 -322
- package/bios/seabios/src/clock.c +0 -506
- package/bios/seabios/src/code16gcc.s +0 -1
- package/bios/seabios/src/config.h +0 -108
- package/bios/seabios/src/cp437.c +0 -275
- package/bios/seabios/src/cp437.h +0 -1
- package/bios/seabios/src/disk.c +0 -779
- package/bios/seabios/src/e820map.c +0 -152
- package/bios/seabios/src/e820map.h +0 -26
- package/bios/seabios/src/entryfuncs.S +0 -165
- package/bios/seabios/src/farptr.h +0 -208
- package/bios/seabios/src/font.c +0 -139
- package/bios/seabios/src/fw/acpi-dsdt-cpu-hotplug.dsl +0 -78
- package/bios/seabios/src/fw/acpi-dsdt-dbug.dsl +0 -26
- package/bios/seabios/src/fw/acpi-dsdt-hpet.dsl +0 -36
- package/bios/seabios/src/fw/acpi-dsdt-isa.dsl +0 -102
- package/bios/seabios/src/fw/acpi-dsdt-pci-crs.dsl +0 -90
- package/bios/seabios/src/fw/acpi-dsdt.dsl +0 -342
- package/bios/seabios/src/fw/acpi-dsdt.hex +0 -554
- package/bios/seabios/src/fw/acpi.c +0 -685
- package/bios/seabios/src/fw/biostables.c +0 -491
- package/bios/seabios/src/fw/coreboot.c +0 -569
- package/bios/seabios/src/fw/csm.c +0 -347
- package/bios/seabios/src/fw/dev-pci.h +0 -52
- package/bios/seabios/src/fw/dev-piix.h +0 -29
- package/bios/seabios/src/fw/dev-q35.h +0 -52
- package/bios/seabios/src/fw/lzmadecode.c +0 -398
- package/bios/seabios/src/fw/lzmadecode.h +0 -67
- package/bios/seabios/src/fw/mptable.c +0 -197
- package/bios/seabios/src/fw/mtrr.c +0 -105
- package/bios/seabios/src/fw/multiboot.c +0 -111
- package/bios/seabios/src/fw/paravirt.c +0 -624
- package/bios/seabios/src/fw/paravirt.h +0 -63
- package/bios/seabios/src/fw/pciinit.c +0 -1187
- package/bios/seabios/src/fw/pirtable.c +0 -103
- package/bios/seabios/src/fw/q35-acpi-dsdt.dsl +0 -450
- package/bios/seabios/src/fw/romfile_loader.c +0 -259
- package/bios/seabios/src/fw/romfile_loader.h +0 -91
- package/bios/seabios/src/fw/shadow.c +0 -208
- package/bios/seabios/src/fw/smbios.c +0 -585
- package/bios/seabios/src/fw/smm.c +0 -269
- package/bios/seabios/src/fw/smp.c +0 -194
- package/bios/seabios/src/fw/ssdt-misc.dsl +0 -104
- package/bios/seabios/src/fw/ssdt-misc.hex +0 -88
- package/bios/seabios/src/fw/ssdt-pcihp.dsl +0 -36
- package/bios/seabios/src/fw/ssdt-pcihp.hex +0 -38
- package/bios/seabios/src/fw/ssdt-proc.dsl +0 -48
- package/bios/seabios/src/fw/ssdt-proc.hex +0 -35
- package/bios/seabios/src/fw/xen.c +0 -149
- package/bios/seabios/src/fw/xen.h +0 -125
- package/bios/seabios/src/gen-defs.h +0 -19
- package/bios/seabios/src/hw/ahci.c +0 -697
- package/bios/seabios/src/hw/ahci.h +0 -201
- package/bios/seabios/src/hw/ata.c +0 -1046
- package/bios/seabios/src/hw/ata.h +0 -163
- package/bios/seabios/src/hw/blockcmd.c +0 -372
- package/bios/seabios/src/hw/blockcmd.h +0 -114
- package/bios/seabios/src/hw/dma.c +0 -67
- package/bios/seabios/src/hw/esp-scsi.c +0 -241
- package/bios/seabios/src/hw/esp-scsi.h +0 -8
- package/bios/seabios/src/hw/floppy.c +0 -741
- package/bios/seabios/src/hw/lsi-scsi.c +0 -221
- package/bios/seabios/src/hw/lsi-scsi.h +0 -8
- package/bios/seabios/src/hw/megasas.c +0 -405
- package/bios/seabios/src/hw/megasas.h +0 -8
- package/bios/seabios/src/hw/mpt-scsi.c +0 -319
- package/bios/seabios/src/hw/mpt-scsi.h +0 -8
- package/bios/seabios/src/hw/nvme-int.h +0 -199
- package/bios/seabios/src/hw/nvme.c +0 -708
- package/bios/seabios/src/hw/nvme.h +0 -17
- package/bios/seabios/src/hw/pci.c +0 -133
- package/bios/seabios/src/hw/pci.h +0 -47
- package/bios/seabios/src/hw/pci_ids.h +0 -2632
- package/bios/seabios/src/hw/pci_regs.h +0 -556
- package/bios/seabios/src/hw/pcidevice.c +0 -192
- package/bios/seabios/src/hw/pcidevice.h +0 -76
- package/bios/seabios/src/hw/pic.c +0 -115
- package/bios/seabios/src/hw/pic.h +0 -60
- package/bios/seabios/src/hw/ps2port.c +0 -543
- package/bios/seabios/src/hw/ps2port.h +0 -67
- package/bios/seabios/src/hw/pvscsi.c +0 -333
- package/bios/seabios/src/hw/pvscsi.h +0 -8
- package/bios/seabios/src/hw/ramdisk.c +0 -108
- package/bios/seabios/src/hw/rtc.c +0 -100
- package/bios/seabios/src/hw/rtc.h +0 -75
- package/bios/seabios/src/hw/sdcard.c +0 -572
- package/bios/seabios/src/hw/serialio.c +0 -113
- package/bios/seabios/src/hw/serialio.h +0 -29
- package/bios/seabios/src/hw/timer.c +0 -259
- package/bios/seabios/src/hw/tpm_drivers.c +0 -636
- package/bios/seabios/src/hw/tpm_drivers.h +0 -127
- package/bios/seabios/src/hw/usb-ehci.c +0 -650
- package/bios/seabios/src/hw/usb-ehci.h +0 -177
- package/bios/seabios/src/hw/usb-hid.c +0 -442
- package/bios/seabios/src/hw/usb-hid.h +0 -29
- package/bios/seabios/src/hw/usb-hub.c +0 -205
- package/bios/seabios/src/hw/usb-hub.h +0 -64
- package/bios/seabios/src/hw/usb-msc.c +0 -222
- package/bios/seabios/src/hw/usb-msc.h +0 -10
- package/bios/seabios/src/hw/usb-ohci.c +0 -568
- package/bios/seabios/src/hw/usb-ohci.h +0 -144
- package/bios/seabios/src/hw/usb-uas.c +0 -289
- package/bios/seabios/src/hw/usb-uas.h +0 -9
- package/bios/seabios/src/hw/usb-uhci.c +0 -571
- package/bios/seabios/src/hw/usb-uhci.h +0 -128
- package/bios/seabios/src/hw/usb-xhci.c +0 -1161
- package/bios/seabios/src/hw/usb-xhci.h +0 -133
- package/bios/seabios/src/hw/usb.c +0 -499
- package/bios/seabios/src/hw/usb.h +0 -254
- package/bios/seabios/src/hw/virtio-blk.c +0 -211
- package/bios/seabios/src/hw/virtio-blk.h +0 -43
- package/bios/seabios/src/hw/virtio-pci.c +0 -501
- package/bios/seabios/src/hw/virtio-pci.h +0 -151
- package/bios/seabios/src/hw/virtio-ring.c +0 -147
- package/bios/seabios/src/hw/virtio-ring.h +0 -121
- package/bios/seabios/src/hw/virtio-scsi.c +0 -220
- package/bios/seabios/src/hw/virtio-scsi.h +0 -47
- package/bios/seabios/src/jpeg.c +0 -1055
- package/bios/seabios/src/kbd.c +0 -599
- package/bios/seabios/src/list.h +0 -91
- package/bios/seabios/src/malloc.c +0 -561
- package/bios/seabios/src/malloc.h +0 -70
- package/bios/seabios/src/memmap.h +0 -21
- package/bios/seabios/src/misc.c +0 -195
- package/bios/seabios/src/mouse.c +0 -342
- package/bios/seabios/src/optionroms.c +0 -475
- package/bios/seabios/src/output.c +0 -584
- package/bios/seabios/src/output.h +0 -68
- package/bios/seabios/src/pcibios.c +0 -241
- package/bios/seabios/src/pmm.c +0 -176
- package/bios/seabios/src/pnpbios.c +0 -88
- package/bios/seabios/src/post.c +0 -337
- package/bios/seabios/src/resume.c +0 -157
- package/bios/seabios/src/romfile.c +0 -146
- package/bios/seabios/src/romfile.h +0 -21
- package/bios/seabios/src/romlayout.S +0 -698
- package/bios/seabios/src/sercon.c +0 -677
- package/bios/seabios/src/serial.c +0 -317
- package/bios/seabios/src/sha1.c +0 -147
- package/bios/seabios/src/sha1.h +0 -8
- package/bios/seabios/src/stacks.c +0 -771
- package/bios/seabios/src/stacks.h +0 -68
- package/bios/seabios/src/std/LegacyBios.h +0 -985
- package/bios/seabios/src/std/acpi.h +0 -323
- package/bios/seabios/src/std/bda.h +0 -174
- package/bios/seabios/src/std/disk.h +0 -175
- package/bios/seabios/src/std/mptable.h +0 -77
- package/bios/seabios/src/std/multiboot.h +0 -260
- package/bios/seabios/src/std/optionrom.h +0 -59
- package/bios/seabios/src/std/pirtable.h +0 -35
- package/bios/seabios/src/std/pmm.h +0 -19
- package/bios/seabios/src/std/pnpbios.h +0 -24
- package/bios/seabios/src/std/smbios.h +0 -167
- package/bios/seabios/src/std/tcg.h +0 -554
- package/bios/seabios/src/std/vbe.h +0 -156
- package/bios/seabios/src/std/vga.h +0 -63
- package/bios/seabios/src/string.c +0 -251
- package/bios/seabios/src/string.h +0 -31
- package/bios/seabios/src/system.c +0 -357
- package/bios/seabios/src/tcgbios.c +0 -2014
- package/bios/seabios/src/tcgbios.h +0 -19
- package/bios/seabios/src/types.h +0 -156
- package/bios/seabios/src/util.h +0 -251
- package/bios/seabios/src/version.c +0 -5
- package/bios/seabios/src/vgahooks.c +0 -355
- package/bios/seabios/src/x86.c +0 -23
- package/bios/seabios/src/x86.h +0 -277
- package/bios/seabios/vgasrc/Kconfig +0 -211
- package/bios/seabios/vgasrc/bochsdisplay.c +0 -59
- package/bios/seabios/vgasrc/bochsvga.c +0 -447
- package/bios/seabios/vgasrc/bochsvga.h +0 -57
- package/bios/seabios/vgasrc/cbvga.c +0 -337
- package/bios/seabios/vgasrc/clext.c +0 -627
- package/bios/seabios/vgasrc/geodevga.c +0 -434
- package/bios/seabios/vgasrc/geodevga.h +0 -89
- package/bios/seabios/vgasrc/ramfb.c +0 -163
- package/bios/seabios/vgasrc/stdvga.c +0 -485
- package/bios/seabios/vgasrc/stdvga.h +0 -81
- package/bios/seabios/vgasrc/stdvgaio.c +0 -186
- package/bios/seabios/vgasrc/stdvgamodes.c +0 -534
- package/bios/seabios/vgasrc/swcursor.c +0 -96
- package/bios/seabios/vgasrc/vbe.c +0 -432
- package/bios/seabios/vgasrc/vgabios.c +0 -1131
- package/bios/seabios/vgasrc/vgabios.h +0 -88
- package/bios/seabios/vgasrc/vgaentry.S +0 -161
- package/bios/seabios/vgasrc/vgafb.c +0 -661
- package/bios/seabios/vgasrc/vgafb.h +0 -42
- package/bios/seabios/vgasrc/vgafonts.c +0 -785
- package/bios/seabios/vgasrc/vgahw.h +0 -152
- package/bios/seabios/vgasrc/vgainit.c +0 -202
- package/bios/seabios/vgasrc/vgalayout.lds.S +0 -23
- package/bios/seabios/vgasrc/vgautil.h +0 -103
- package/bios/seabios/vgasrc/vgaversion.c +0 -6
- package/bios/seabios-debug.bin +0 -0
- package/bios/seabios-debug.config +0 -117
- package/bios/seabios.bin +0 -0
- package/bios/seabios.config +0 -114
- package/bios/vgabios-debug.bin +0 -0
- package/bios/vgabios.bin +0 -0
- package/build/binaries.js +0 -1
- package/build/index-debug.cjs +0 -1
- package/build/index-debug.js +0 -1
- package/build/index.cjs +0 -1
- package/build/index.js +0 -1
- package/v86.css +0 -259
package/bios/seabios/src/disk.c
DELETED
|
@@ -1,779 +0,0 @@
|
|
|
1
|
-
// 16bit code to access hard drives.
|
|
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" // SET_BDA
|
|
9
|
-
#include "bregs.h" // struct bregs
|
|
10
|
-
#include "config.h" // CONFIG_*
|
|
11
|
-
#include "hw/ata.h" // ATA_CB_DC
|
|
12
|
-
#include "hw/pic.h" // pic_eoi2
|
|
13
|
-
#include "output.h" // debug_enter
|
|
14
|
-
#include "stacks.h" // call16_int
|
|
15
|
-
#include "std/disk.h" // DISK_RET_SUCCESS
|
|
16
|
-
#include "string.h" // memset
|
|
17
|
-
#include "util.h" // CDRom_locks
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
/****************************************************************
|
|
21
|
-
* Return status functions
|
|
22
|
-
****************************************************************/
|
|
23
|
-
|
|
24
|
-
static void
|
|
25
|
-
__disk_ret(struct bregs *regs, u32 linecode, const char *fname)
|
|
26
|
-
{
|
|
27
|
-
u8 code = linecode;
|
|
28
|
-
if (regs->dl < EXTSTART_HD)
|
|
29
|
-
SET_BDA(floppy_last_status, code);
|
|
30
|
-
else
|
|
31
|
-
SET_BDA(disk_last_status, code);
|
|
32
|
-
if (code)
|
|
33
|
-
__set_code_invalid(regs, linecode, fname);
|
|
34
|
-
else
|
|
35
|
-
set_code_success(regs);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
static void
|
|
39
|
-
__disk_ret_unimplemented(struct bregs *regs, u32 linecode, const char *fname)
|
|
40
|
-
{
|
|
41
|
-
u8 code = linecode;
|
|
42
|
-
if (regs->dl < EXTSTART_HD)
|
|
43
|
-
SET_BDA(floppy_last_status, code);
|
|
44
|
-
else
|
|
45
|
-
SET_BDA(disk_last_status, code);
|
|
46
|
-
__set_code_unimplemented(regs, linecode, fname);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
static void
|
|
50
|
-
__disk_stub(struct bregs *regs, int lineno, const char *fname)
|
|
51
|
-
{
|
|
52
|
-
__warn_unimplemented(regs, lineno, fname);
|
|
53
|
-
__disk_ret(regs, DISK_RET_SUCCESS | (lineno << 8), fname);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
#define disk_ret(regs, code) \
|
|
57
|
-
__disk_ret((regs), (code) | (__LINE__ << 8), __func__)
|
|
58
|
-
#define disk_ret_unimplemented(regs, code) \
|
|
59
|
-
__disk_ret_unimplemented((regs), (code) | (__LINE__ << 8), __func__)
|
|
60
|
-
#define DISK_STUB(regs) \
|
|
61
|
-
__disk_stub((regs), __LINE__, __func__)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
/****************************************************************
|
|
65
|
-
* Helper functions
|
|
66
|
-
****************************************************************/
|
|
67
|
-
|
|
68
|
-
// Get the cylinders/heads/sectors for the given drive.
|
|
69
|
-
static struct chs_s
|
|
70
|
-
getLCHS(struct drive_s *drive_fl)
|
|
71
|
-
{
|
|
72
|
-
struct chs_s res = { };
|
|
73
|
-
if (CONFIG_CDROM_EMU && drive_fl == GET_GLOBAL(cdemu_drive_gf)) {
|
|
74
|
-
// Emulated drive - get info from CDEmu. (It's not possible to
|
|
75
|
-
// populate the geometry directly in the driveid because the
|
|
76
|
-
// geometry is only known after the bios segment is made
|
|
77
|
-
// read-only).
|
|
78
|
-
u8 sptcyl = GET_LOW(CDEmu.chs.sptcyl);
|
|
79
|
-
res.cylinder = GET_LOW(CDEmu.chs.cyllow) + ((sptcyl << 2) & 0x300) + 1;
|
|
80
|
-
res.head = GET_LOW(CDEmu.chs.heads) + 1;
|
|
81
|
-
res.sector = sptcyl & 0x3f;
|
|
82
|
-
return res;
|
|
83
|
-
}
|
|
84
|
-
res.cylinder = GET_FLATPTR(drive_fl->lchs.cylinder);
|
|
85
|
-
res.head = GET_FLATPTR(drive_fl->lchs.head);
|
|
86
|
-
res.sector = GET_FLATPTR(drive_fl->lchs.sector);
|
|
87
|
-
return res;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Execute a "disk_op_s" request after jumping to the extra stack.
|
|
91
|
-
static int
|
|
92
|
-
__send_disk_op(struct disk_op_s *op_far, u16 op_seg)
|
|
93
|
-
{
|
|
94
|
-
struct disk_op_s dop;
|
|
95
|
-
memcpy_far(GET_SEG(SS), &dop, op_seg, op_far, sizeof(dop));
|
|
96
|
-
|
|
97
|
-
int status = process_op(&dop);
|
|
98
|
-
|
|
99
|
-
// Update count with total sectors transferred.
|
|
100
|
-
SET_FARVAR(op_seg, op_far->count, dop.count);
|
|
101
|
-
|
|
102
|
-
return status;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Execute a "disk_op_s" request (using the extra 16bit stack).
|
|
106
|
-
static int
|
|
107
|
-
send_disk_op(struct disk_op_s *op)
|
|
108
|
-
{
|
|
109
|
-
ASSERT16();
|
|
110
|
-
if (! CONFIG_DRIVES)
|
|
111
|
-
return -1;
|
|
112
|
-
if (!CONFIG_ENTRY_EXTRASTACK)
|
|
113
|
-
// Jump on to extra stack
|
|
114
|
-
return stack_hop(__send_disk_op, op, GET_SEG(SS));
|
|
115
|
-
return process_op(op);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Perform read/write/verify using old-style chs accesses
|
|
119
|
-
static void noinline
|
|
120
|
-
basic_access(struct bregs *regs, struct drive_s *drive_fl, u16 command)
|
|
121
|
-
{
|
|
122
|
-
struct disk_op_s dop;
|
|
123
|
-
dop.drive_fl = drive_fl;
|
|
124
|
-
dop.command = command;
|
|
125
|
-
|
|
126
|
-
u8 count = regs->al;
|
|
127
|
-
u16 cylinder = regs->ch | ((((u16)regs->cl) << 2) & 0x300);
|
|
128
|
-
u16 sector = regs->cl & 0x3f;
|
|
129
|
-
u16 head = regs->dh;
|
|
130
|
-
|
|
131
|
-
if (count > 128 || count == 0 || sector == 0) {
|
|
132
|
-
warn_invalid(regs);
|
|
133
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
dop.count = count;
|
|
137
|
-
|
|
138
|
-
struct chs_s chs = getLCHS(drive_fl);
|
|
139
|
-
u16 nlc=chs.cylinder, nlh=chs.head, nls=chs.sector;
|
|
140
|
-
|
|
141
|
-
// sanity check on cyl heads, sec
|
|
142
|
-
if (cylinder >= nlc || head >= nlh || sector > nls) {
|
|
143
|
-
warn_invalid(regs);
|
|
144
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// translate lchs to lba
|
|
149
|
-
dop.lba = (((((u32)cylinder * (u32)nlh) + (u32)head) * (u32)nls)
|
|
150
|
-
+ (u32)sector - 1);
|
|
151
|
-
|
|
152
|
-
dop.buf_fl = MAKE_FLATPTR(regs->es, regs->bx);
|
|
153
|
-
|
|
154
|
-
int status = send_disk_op(&dop);
|
|
155
|
-
|
|
156
|
-
regs->al = dop.count;
|
|
157
|
-
|
|
158
|
-
disk_ret(regs, status);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Perform read/write/verify using new-style "int13ext" accesses.
|
|
162
|
-
static void noinline
|
|
163
|
-
extended_access(struct bregs *regs, struct drive_s *drive_fl, u16 command)
|
|
164
|
-
{
|
|
165
|
-
struct disk_op_s dop;
|
|
166
|
-
struct int13ext_s *param_far = (struct int13ext_s*)(regs->si+0);
|
|
167
|
-
// Get lba and check.
|
|
168
|
-
dop.lba = GET_FARVAR(regs->ds, param_far->lba);
|
|
169
|
-
dop.command = command;
|
|
170
|
-
dop.drive_fl = drive_fl;
|
|
171
|
-
if (dop.lba >= GET_FLATPTR(drive_fl->sectors)) {
|
|
172
|
-
warn_invalid(regs);
|
|
173
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
dop.buf_fl = SEGOFF_TO_FLATPTR(GET_FARVAR(regs->ds, param_far->data));
|
|
178
|
-
dop.count = GET_FARVAR(regs->ds, param_far->count);
|
|
179
|
-
if (! dop.count) {
|
|
180
|
-
// Nothing to do.
|
|
181
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
int status = send_disk_op(&dop);
|
|
186
|
-
|
|
187
|
-
SET_FARVAR(regs->ds, param_far->count, dop.count);
|
|
188
|
-
|
|
189
|
-
disk_ret(regs, status);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
/****************************************************************
|
|
194
|
-
* Hard Drive functions
|
|
195
|
-
****************************************************************/
|
|
196
|
-
|
|
197
|
-
// disk controller reset
|
|
198
|
-
static void
|
|
199
|
-
disk_1300(struct bregs *regs, struct drive_s *drive_fl)
|
|
200
|
-
{
|
|
201
|
-
struct disk_op_s dop;
|
|
202
|
-
dop.drive_fl = drive_fl;
|
|
203
|
-
dop.command = CMD_RESET;
|
|
204
|
-
dop.count = 0;
|
|
205
|
-
int status = send_disk_op(&dop);
|
|
206
|
-
disk_ret(regs, status);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// read disk status
|
|
210
|
-
static void
|
|
211
|
-
disk_1301(struct bregs *regs, struct drive_s *drive_fl)
|
|
212
|
-
{
|
|
213
|
-
u8 v;
|
|
214
|
-
if (regs->dl < EXTSTART_HD)
|
|
215
|
-
// Floppy
|
|
216
|
-
v = GET_BDA(floppy_last_status);
|
|
217
|
-
else
|
|
218
|
-
v = GET_BDA(disk_last_status);
|
|
219
|
-
regs->ah = v;
|
|
220
|
-
set_cf(regs, v);
|
|
221
|
-
// XXX - clear disk_last_status?
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// read disk sectors
|
|
225
|
-
static void
|
|
226
|
-
disk_1302(struct bregs *regs, struct drive_s *drive_fl)
|
|
227
|
-
{
|
|
228
|
-
basic_access(regs, drive_fl, CMD_READ);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
// write disk sectors
|
|
232
|
-
static void
|
|
233
|
-
disk_1303(struct bregs *regs, struct drive_s *drive_fl)
|
|
234
|
-
{
|
|
235
|
-
basic_access(regs, drive_fl, CMD_WRITE);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// verify disk sectors
|
|
239
|
-
static void
|
|
240
|
-
disk_1304(struct bregs *regs, struct drive_s *drive_fl)
|
|
241
|
-
{
|
|
242
|
-
basic_access(regs, drive_fl, CMD_VERIFY);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// format disk track
|
|
246
|
-
static void noinline
|
|
247
|
-
disk_1305(struct bregs *regs, struct drive_s *drive_fl)
|
|
248
|
-
{
|
|
249
|
-
debug_stub(regs);
|
|
250
|
-
|
|
251
|
-
struct chs_s chs = getLCHS(drive_fl);
|
|
252
|
-
u16 nlc=chs.cylinder, nlh=chs.head, nls=chs.sector;
|
|
253
|
-
|
|
254
|
-
u8 count = regs->al;
|
|
255
|
-
u8 cylinder = regs->ch;
|
|
256
|
-
u8 head = regs->dh;
|
|
257
|
-
|
|
258
|
-
if (cylinder >= nlc || head >= nlh || count == 0 || count > nls) {
|
|
259
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
struct disk_op_s dop;
|
|
264
|
-
dop.drive_fl = drive_fl;
|
|
265
|
-
dop.command = CMD_FORMAT;
|
|
266
|
-
dop.lba = (((u32)cylinder * (u32)nlh) + (u32)head) * (u32)nls;
|
|
267
|
-
dop.count = count;
|
|
268
|
-
dop.buf_fl = MAKE_FLATPTR(regs->es, regs->bx);
|
|
269
|
-
int status = send_disk_op(&dop);
|
|
270
|
-
disk_ret(regs, status);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// read disk drive parameters
|
|
274
|
-
static void noinline
|
|
275
|
-
disk_1308(struct bregs *regs, struct drive_s *drive_fl)
|
|
276
|
-
{
|
|
277
|
-
// Get logical geometry from table
|
|
278
|
-
struct chs_s chs = getLCHS(drive_fl);
|
|
279
|
-
u16 nlc=chs.cylinder, nlh=chs.head, nls=chs.sector;
|
|
280
|
-
nlc--;
|
|
281
|
-
nlh--;
|
|
282
|
-
u8 count;
|
|
283
|
-
if (regs->dl < EXTSTART_HD) {
|
|
284
|
-
// Floppy
|
|
285
|
-
count = GET_GLOBAL(FloppyCount);
|
|
286
|
-
|
|
287
|
-
if (CONFIG_CDROM_EMU && drive_fl == GET_GLOBAL(cdemu_drive_gf))
|
|
288
|
-
regs->bx = GET_LOW(CDEmu.media) * 2;
|
|
289
|
-
else
|
|
290
|
-
regs->bx = GET_FLATPTR(drive_fl->floppy_type);
|
|
291
|
-
|
|
292
|
-
// set es & di to point to 11 byte diskette param table in ROM
|
|
293
|
-
regs->es = SEG_BIOS;
|
|
294
|
-
regs->di = (u32)&diskette_param_table2;
|
|
295
|
-
} else if (regs->dl < EXTSTART_CD) {
|
|
296
|
-
// Hard drive
|
|
297
|
-
count = GET_BDA(hdcount);
|
|
298
|
-
nlc--; // last sector reserved
|
|
299
|
-
} else {
|
|
300
|
-
// Not supported on CDROM
|
|
301
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
if (CONFIG_CDROM_EMU && GET_LOW(CDEmu.media)) {
|
|
306
|
-
u8 emudrive = GET_LOW(CDEmu.emulated_drive);
|
|
307
|
-
if (((emudrive ^ regs->dl) & 0x80) == 0)
|
|
308
|
-
// Note extra drive due to emulation.
|
|
309
|
-
count++;
|
|
310
|
-
if (regs->dl < EXTSTART_HD && count > 2)
|
|
311
|
-
// Max of two floppy drives.
|
|
312
|
-
count = 2;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
regs->al = 0;
|
|
316
|
-
regs->ch = nlc & 0xff;
|
|
317
|
-
regs->cl = ((nlc >> 2) & 0xc0) | (nls & 0x3f);
|
|
318
|
-
regs->dh = nlh;
|
|
319
|
-
|
|
320
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
321
|
-
regs->dl = count;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// initialize drive parameters
|
|
325
|
-
static void
|
|
326
|
-
disk_1309(struct bregs *regs, struct drive_s *drive_fl)
|
|
327
|
-
{
|
|
328
|
-
DISK_STUB(regs);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// seek to specified cylinder
|
|
332
|
-
static void
|
|
333
|
-
disk_130c(struct bregs *regs, struct drive_s *drive_fl)
|
|
334
|
-
{
|
|
335
|
-
DISK_STUB(regs);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// alternate disk reset
|
|
339
|
-
static void
|
|
340
|
-
disk_130d(struct bregs *regs, struct drive_s *drive_fl)
|
|
341
|
-
{
|
|
342
|
-
DISK_STUB(regs);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
// check drive ready
|
|
346
|
-
static void
|
|
347
|
-
disk_1310(struct bregs *regs, struct drive_s *drive_fl)
|
|
348
|
-
{
|
|
349
|
-
// should look at 40:8E also???
|
|
350
|
-
|
|
351
|
-
struct disk_op_s dop;
|
|
352
|
-
dop.drive_fl = drive_fl;
|
|
353
|
-
dop.command = CMD_ISREADY;
|
|
354
|
-
dop.count = 0;
|
|
355
|
-
int status = send_disk_op(&dop);
|
|
356
|
-
disk_ret(regs, status);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// recalibrate
|
|
360
|
-
static void
|
|
361
|
-
disk_1311(struct bregs *regs, struct drive_s *drive_fl)
|
|
362
|
-
{
|
|
363
|
-
DISK_STUB(regs);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// controller internal diagnostic
|
|
367
|
-
static void
|
|
368
|
-
disk_1314(struct bregs *regs, struct drive_s *drive_fl)
|
|
369
|
-
{
|
|
370
|
-
DISK_STUB(regs);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
// read disk drive size
|
|
374
|
-
static void noinline
|
|
375
|
-
disk_1315(struct bregs *regs, struct drive_s *drive_fl)
|
|
376
|
-
{
|
|
377
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
378
|
-
if (regs->dl < EXTSTART_HD || regs->dl >= EXTSTART_CD) {
|
|
379
|
-
// Floppy or cdrom
|
|
380
|
-
regs->ah = 1;
|
|
381
|
-
return;
|
|
382
|
-
}
|
|
383
|
-
// Hard drive
|
|
384
|
-
|
|
385
|
-
// Get logical geometry from table
|
|
386
|
-
struct chs_s chs = getLCHS(drive_fl);
|
|
387
|
-
u16 nlc=chs.cylinder, nlh=chs.head, nls=chs.sector;
|
|
388
|
-
|
|
389
|
-
// Compute sector count seen by int13
|
|
390
|
-
u32 lba = (u32)(nlc - 1) * (u32)nlh * (u32)nls;
|
|
391
|
-
regs->cx = lba >> 16;
|
|
392
|
-
regs->dx = lba & 0xffff;
|
|
393
|
-
regs->ah = 3; // hard disk accessible
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
static void
|
|
397
|
-
disk_1316(struct bregs *regs, struct drive_s *drive_fl)
|
|
398
|
-
{
|
|
399
|
-
if (regs->dl >= EXTSTART_HD) {
|
|
400
|
-
// Hard drive
|
|
401
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
402
|
-
return;
|
|
403
|
-
}
|
|
404
|
-
disk_ret(regs, DISK_RET_ECHANGED);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
// IBM/MS installation check
|
|
408
|
-
static void
|
|
409
|
-
disk_1341(struct bregs *regs, struct drive_s *drive_fl)
|
|
410
|
-
{
|
|
411
|
-
regs->bx = 0xaa55; // install check
|
|
412
|
-
regs->cx = 0x0007; // ext disk access and edd, removable supported
|
|
413
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
414
|
-
regs->ah = 0x30; // EDD 3.0
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
// IBM/MS extended read
|
|
418
|
-
static void
|
|
419
|
-
disk_1342(struct bregs *regs, struct drive_s *drive_fl)
|
|
420
|
-
{
|
|
421
|
-
extended_access(regs, drive_fl, CMD_READ);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
// IBM/MS extended write
|
|
425
|
-
static void
|
|
426
|
-
disk_1343(struct bregs *regs, struct drive_s *drive_fl)
|
|
427
|
-
{
|
|
428
|
-
extended_access(regs, drive_fl, CMD_WRITE);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
// IBM/MS verify
|
|
432
|
-
static void
|
|
433
|
-
disk_1344(struct bregs *regs, struct drive_s *drive_fl)
|
|
434
|
-
{
|
|
435
|
-
extended_access(regs, drive_fl, CMD_VERIFY);
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
// Locks for removable devices
|
|
439
|
-
u8 CDRom_locks[BUILD_MAX_EXTDRIVE] VARLOW;
|
|
440
|
-
|
|
441
|
-
// lock
|
|
442
|
-
static void
|
|
443
|
-
disk_134500(struct bregs *regs, struct drive_s *drive_fl)
|
|
444
|
-
{
|
|
445
|
-
int cdid = regs->dl - EXTSTART_CD;
|
|
446
|
-
u8 locks = GET_LOW(CDRom_locks[cdid]);
|
|
447
|
-
if (locks == 0xff) {
|
|
448
|
-
regs->al = 1;
|
|
449
|
-
disk_ret(regs, DISK_RET_ETOOMANYLOCKS);
|
|
450
|
-
return;
|
|
451
|
-
}
|
|
452
|
-
SET_LOW(CDRom_locks[cdid], locks + 1);
|
|
453
|
-
regs->al = 1;
|
|
454
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
// unlock
|
|
458
|
-
static void
|
|
459
|
-
disk_134501(struct bregs *regs, struct drive_s *drive_fl)
|
|
460
|
-
{
|
|
461
|
-
int cdid = regs->dl - EXTSTART_CD;
|
|
462
|
-
u8 locks = GET_LOW(CDRom_locks[cdid]);
|
|
463
|
-
if (locks == 0x00) {
|
|
464
|
-
regs->al = 0;
|
|
465
|
-
disk_ret(regs, DISK_RET_ENOTLOCKED);
|
|
466
|
-
return;
|
|
467
|
-
}
|
|
468
|
-
locks--;
|
|
469
|
-
SET_LOW(CDRom_locks[cdid], locks);
|
|
470
|
-
regs->al = (locks ? 1 : 0);
|
|
471
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
// status
|
|
475
|
-
static void
|
|
476
|
-
disk_134502(struct bregs *regs, struct drive_s *drive_fl)
|
|
477
|
-
{
|
|
478
|
-
int cdid = regs->dl - EXTSTART_CD;
|
|
479
|
-
u8 locks = GET_LOW(CDRom_locks[cdid]);
|
|
480
|
-
regs->al = (locks ? 1 : 0);
|
|
481
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
static void
|
|
485
|
-
disk_1345XX(struct bregs *regs, struct drive_s *drive_fl)
|
|
486
|
-
{
|
|
487
|
-
disk_ret_unimplemented(regs, DISK_RET_EPARAM);
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
// IBM/MS lock/unlock drive
|
|
491
|
-
static void
|
|
492
|
-
disk_1345(struct bregs *regs, struct drive_s *drive_fl)
|
|
493
|
-
{
|
|
494
|
-
if (regs->dl < EXTSTART_CD) {
|
|
495
|
-
// Always success for HD
|
|
496
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
497
|
-
return;
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
switch (regs->al) {
|
|
501
|
-
case 0x00: disk_134500(regs, drive_fl); break;
|
|
502
|
-
case 0x01: disk_134501(regs, drive_fl); break;
|
|
503
|
-
case 0x02: disk_134502(regs, drive_fl); break;
|
|
504
|
-
default: disk_1345XX(regs, drive_fl); break;
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
// IBM/MS eject media
|
|
509
|
-
static void noinline
|
|
510
|
-
disk_1346(struct bregs *regs, struct drive_s *drive_fl)
|
|
511
|
-
{
|
|
512
|
-
if (regs->dl < EXTSTART_CD) {
|
|
513
|
-
// Volume Not Removable
|
|
514
|
-
disk_ret(regs, DISK_RET_ENOTREMOVABLE);
|
|
515
|
-
return;
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
int cdid = regs->dl - EXTSTART_CD;
|
|
519
|
-
u8 locks = GET_LOW(CDRom_locks[cdid]);
|
|
520
|
-
if (locks != 0) {
|
|
521
|
-
disk_ret(regs, DISK_RET_ELOCKED);
|
|
522
|
-
return;
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
// FIXME should handle 0x31 no media in device
|
|
526
|
-
// FIXME should handle 0xb5 valid request failed
|
|
527
|
-
|
|
528
|
-
// Call removable media eject
|
|
529
|
-
struct bregs br;
|
|
530
|
-
memset(&br, 0, sizeof(br));
|
|
531
|
-
br.ah = 0x52;
|
|
532
|
-
br.dl = regs->dl;
|
|
533
|
-
call16_int(0x15, &br);
|
|
534
|
-
|
|
535
|
-
if (br.ah || br.flags & F_CF) {
|
|
536
|
-
disk_ret(regs, DISK_RET_ELOCKED);
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
// IBM/MS extended seek
|
|
543
|
-
static void
|
|
544
|
-
disk_1347(struct bregs *regs, struct drive_s *drive_fl)
|
|
545
|
-
{
|
|
546
|
-
extended_access(regs, drive_fl, CMD_SEEK);
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
// IBM/MS get drive parameters
|
|
550
|
-
static void
|
|
551
|
-
disk_1348(struct bregs *regs, struct drive_s *drive_fl)
|
|
552
|
-
{
|
|
553
|
-
int ret = fill_edd(SEGOFF(regs->ds, regs->si), drive_fl);
|
|
554
|
-
disk_ret(regs, ret);
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
// IBM/MS extended media change
|
|
558
|
-
static void
|
|
559
|
-
disk_1349(struct bregs *regs, struct drive_s *drive_fl)
|
|
560
|
-
{
|
|
561
|
-
if (regs->dl < EXTSTART_CD) {
|
|
562
|
-
// Always success for HD
|
|
563
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
564
|
-
return;
|
|
565
|
-
}
|
|
566
|
-
set_invalid(regs);
|
|
567
|
-
// always send changed ??
|
|
568
|
-
regs->ah = DISK_RET_ECHANGED;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
static void
|
|
572
|
-
disk_134e01(struct bregs *regs, struct drive_s *drive_fl)
|
|
573
|
-
{
|
|
574
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
static void
|
|
578
|
-
disk_134e03(struct bregs *regs, struct drive_s *drive_fl)
|
|
579
|
-
{
|
|
580
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
static void
|
|
584
|
-
disk_134e04(struct bregs *regs, struct drive_s *drive_fl)
|
|
585
|
-
{
|
|
586
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
static void
|
|
590
|
-
disk_134e06(struct bregs *regs, struct drive_s *drive_fl)
|
|
591
|
-
{
|
|
592
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
static void
|
|
596
|
-
disk_134eXX(struct bregs *regs, struct drive_s *drive_fl)
|
|
597
|
-
{
|
|
598
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
// IBM/MS set hardware configuration
|
|
602
|
-
static void
|
|
603
|
-
disk_134e(struct bregs *regs, struct drive_s *drive_fl)
|
|
604
|
-
{
|
|
605
|
-
switch (regs->al) {
|
|
606
|
-
case 0x01: disk_134e01(regs, drive_fl); break;
|
|
607
|
-
case 0x03: disk_134e03(regs, drive_fl); break;
|
|
608
|
-
case 0x04: disk_134e04(regs, drive_fl); break;
|
|
609
|
-
case 0x06: disk_134e06(regs, drive_fl); break;
|
|
610
|
-
default: disk_134eXX(regs, drive_fl); break;
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
static void
|
|
615
|
-
disk_13XX(struct bregs *regs, struct drive_s *drive_fl)
|
|
616
|
-
{
|
|
617
|
-
disk_ret_unimplemented(regs, DISK_RET_EPARAM);
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
static void
|
|
621
|
-
disk_13(struct bregs *regs, struct drive_s *drive_fl)
|
|
622
|
-
{
|
|
623
|
-
//debug_stub(regs);
|
|
624
|
-
|
|
625
|
-
// clear completion flag
|
|
626
|
-
SET_BDA(disk_interrupt_flag, 0);
|
|
627
|
-
|
|
628
|
-
switch (regs->ah) {
|
|
629
|
-
case 0x00: disk_1300(regs, drive_fl); break;
|
|
630
|
-
case 0x01: disk_1301(regs, drive_fl); break;
|
|
631
|
-
case 0x02: disk_1302(regs, drive_fl); break;
|
|
632
|
-
case 0x03: disk_1303(regs, drive_fl); break;
|
|
633
|
-
case 0x04: disk_1304(regs, drive_fl); break;
|
|
634
|
-
case 0x05: disk_1305(regs, drive_fl); break;
|
|
635
|
-
case 0x08: disk_1308(regs, drive_fl); break;
|
|
636
|
-
case 0x09: disk_1309(regs, drive_fl); break;
|
|
637
|
-
case 0x0c: disk_130c(regs, drive_fl); break;
|
|
638
|
-
case 0x0d: disk_130d(regs, drive_fl); break;
|
|
639
|
-
case 0x10: disk_1310(regs, drive_fl); break;
|
|
640
|
-
case 0x11: disk_1311(regs, drive_fl); break;
|
|
641
|
-
case 0x14: disk_1314(regs, drive_fl); break;
|
|
642
|
-
case 0x15: disk_1315(regs, drive_fl); break;
|
|
643
|
-
case 0x16: disk_1316(regs, drive_fl); break;
|
|
644
|
-
case 0x41: disk_1341(regs, drive_fl); break;
|
|
645
|
-
case 0x42: disk_1342(regs, drive_fl); break;
|
|
646
|
-
case 0x43: disk_1343(regs, drive_fl); break;
|
|
647
|
-
case 0x44: disk_1344(regs, drive_fl); break;
|
|
648
|
-
case 0x45: disk_1345(regs, drive_fl); break;
|
|
649
|
-
case 0x46: disk_1346(regs, drive_fl); break;
|
|
650
|
-
case 0x47: disk_1347(regs, drive_fl); break;
|
|
651
|
-
case 0x48: disk_1348(regs, drive_fl); break;
|
|
652
|
-
case 0x49: disk_1349(regs, drive_fl); break;
|
|
653
|
-
case 0x4e: disk_134e(regs, drive_fl); break;
|
|
654
|
-
default: disk_13XX(regs, drive_fl); break;
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
static void
|
|
659
|
-
floppy_13(struct bregs *regs, struct drive_s *drive_fl)
|
|
660
|
-
{
|
|
661
|
-
// Only limited commands are supported on floppies.
|
|
662
|
-
switch (regs->ah) {
|
|
663
|
-
case 0x00:
|
|
664
|
-
case 0x01:
|
|
665
|
-
case 0x02:
|
|
666
|
-
case 0x03:
|
|
667
|
-
case 0x04:
|
|
668
|
-
case 0x05:
|
|
669
|
-
case 0x08:
|
|
670
|
-
case 0x15:
|
|
671
|
-
case 0x16:
|
|
672
|
-
disk_13(regs, drive_fl);
|
|
673
|
-
break;
|
|
674
|
-
default: disk_13XX(regs, drive_fl); break;
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
// ElTorito - Terminate disk emu
|
|
679
|
-
static void
|
|
680
|
-
cdemu_134b(struct bregs *regs)
|
|
681
|
-
{
|
|
682
|
-
memcpy_far(regs->ds, (void*)(regs->si+0), SEG_LOW, &CDEmu, sizeof(CDEmu));
|
|
683
|
-
|
|
684
|
-
// If we have to terminate emulation
|
|
685
|
-
if (regs->al == 0x00) {
|
|
686
|
-
// FIXME ElTorito Various. Should be handled accordingly to spec
|
|
687
|
-
SET_LOW(CDEmu.media, 0x00); // bye bye
|
|
688
|
-
|
|
689
|
-
// XXX - update floppy/hd count.
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
disk_ret(regs, DISK_RET_SUCCESS);
|
|
693
|
-
}
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
/****************************************************************
|
|
697
|
-
* Entry points
|
|
698
|
-
****************************************************************/
|
|
699
|
-
|
|
700
|
-
static void
|
|
701
|
-
handle_legacy_disk(struct bregs *regs, u8 extdrive)
|
|
702
|
-
{
|
|
703
|
-
if (! CONFIG_DRIVES) {
|
|
704
|
-
// XXX - support handle_1301 anyway?
|
|
705
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
706
|
-
return;
|
|
707
|
-
}
|
|
708
|
-
|
|
709
|
-
if (extdrive < EXTSTART_HD) {
|
|
710
|
-
struct drive_s *drive_fl = getDrive(EXTTYPE_FLOPPY, extdrive);
|
|
711
|
-
if (!drive_fl)
|
|
712
|
-
goto fail;
|
|
713
|
-
floppy_13(regs, drive_fl);
|
|
714
|
-
return;
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
struct drive_s *drive_fl;
|
|
718
|
-
if (extdrive >= EXTSTART_CD)
|
|
719
|
-
drive_fl = getDrive(EXTTYPE_CD, extdrive - EXTSTART_CD);
|
|
720
|
-
else
|
|
721
|
-
drive_fl = getDrive(EXTTYPE_HD, extdrive - EXTSTART_HD);
|
|
722
|
-
if (!drive_fl)
|
|
723
|
-
goto fail;
|
|
724
|
-
disk_13(regs, drive_fl);
|
|
725
|
-
return;
|
|
726
|
-
|
|
727
|
-
fail:
|
|
728
|
-
// XXX - support 1301/1308/1315 anyway?
|
|
729
|
-
disk_ret(regs, DISK_RET_EPARAM);
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
void VISIBLE16
|
|
733
|
-
handle_40(struct bregs *regs)
|
|
734
|
-
{
|
|
735
|
-
debug_enter(regs, DEBUG_HDL_40);
|
|
736
|
-
handle_legacy_disk(regs, regs->dl);
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
// INT 13h Fixed Disk Services Entry Point
|
|
740
|
-
void VISIBLE16
|
|
741
|
-
handle_13(struct bregs *regs)
|
|
742
|
-
{
|
|
743
|
-
debug_enter(regs, DEBUG_HDL_13);
|
|
744
|
-
u8 extdrive = regs->dl;
|
|
745
|
-
|
|
746
|
-
if (CONFIG_CDROM_EMU) {
|
|
747
|
-
if (regs->ah == 0x4b) {
|
|
748
|
-
cdemu_134b(regs);
|
|
749
|
-
return;
|
|
750
|
-
}
|
|
751
|
-
if (GET_LOW(CDEmu.media)) {
|
|
752
|
-
u8 emudrive = GET_LOW(CDEmu.emulated_drive);
|
|
753
|
-
if (extdrive == emudrive) {
|
|
754
|
-
// Access to an emulated drive.
|
|
755
|
-
struct drive_s *cdemu_gf = GET_GLOBAL(cdemu_drive_gf);
|
|
756
|
-
if (regs->ah > 0x16) {
|
|
757
|
-
// Only old-style commands supported.
|
|
758
|
-
disk_13XX(regs, cdemu_gf);
|
|
759
|
-
return;
|
|
760
|
-
}
|
|
761
|
-
disk_13(regs, cdemu_gf);
|
|
762
|
-
return;
|
|
763
|
-
}
|
|
764
|
-
if (extdrive < EXTSTART_CD && ((emudrive ^ extdrive) & 0x80) == 0)
|
|
765
|
-
// Adjust id to make room for emulated drive.
|
|
766
|
-
extdrive--;
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
handle_legacy_disk(regs, extdrive);
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
// record completion in BIOS task complete flag
|
|
773
|
-
void VISIBLE16
|
|
774
|
-
handle_76(void)
|
|
775
|
-
{
|
|
776
|
-
debug_isr(DEBUG_ISR_76);
|
|
777
|
-
SET_BDA(disk_interrupt_flag, 0xff);
|
|
778
|
-
pic_eoi2();
|
|
779
|
-
}
|