v86 0.3.7 → 0.5.10

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.
Files changed (386) hide show
  1. package/Readme.md +64 -108
  2. package/build/libv86-debug.js +12677 -0
  3. package/build/libv86-debug.mjs +732 -0
  4. package/build/libv86.js +710 -0
  5. package/build/libv86.mjs +636 -0
  6. package/build/v86-debug.wasm +0 -0
  7. package/build/v86-fallback.wasm +0 -0
  8. package/build/v86.wasm +0 -0
  9. package/package.json +12 -35
  10. package/bios/.gitignore +0 -1
  11. package/bios/COPYING.LESSER +0 -165
  12. package/bios/bochs-bios.bin +0 -0
  13. package/bios/bochs-vgabios.bin +0 -0
  14. package/bios/fetch-and-build-seabios.sh +0 -13
  15. package/bios/seabios/.config +0 -113
  16. package/bios/seabios/.config.old +0 -114
  17. package/bios/seabios/.gitignore +0 -4
  18. package/bios/seabios/COPYING +0 -674
  19. package/bios/seabios/COPYING.LESSER +0 -165
  20. package/bios/seabios/Makefile +0 -286
  21. package/bios/seabios/README +0 -17
  22. package/bios/seabios/docs/Build_overview.md +0 -104
  23. package/bios/seabios/docs/Contributing.md +0 -20
  24. package/bios/seabios/docs/Debugging.md +0 -111
  25. package/bios/seabios/docs/Developer_Documentation.md +0 -25
  26. package/bios/seabios/docs/Developer_links.md +0 -86
  27. package/bios/seabios/docs/Download.md +0 -27
  28. package/bios/seabios/docs/Execution_and_code_flow.md +0 -178
  29. package/bios/seabios/docs/Linking_overview.md +0 -160
  30. package/bios/seabios/docs/Mailinglist.md +0 -8
  31. package/bios/seabios/docs/Memory_Model.md +0 -253
  32. package/bios/seabios/docs/README +0 -5
  33. package/bios/seabios/docs/Releases.md +0 -482
  34. package/bios/seabios/docs/Runtime_config.md +0 -193
  35. package/bios/seabios/docs/SeaBIOS.md +0 -17
  36. package/bios/seabios/docs/SeaVGABIOS.md +0 -39
  37. package/bios/seabios/out/autoconf.h +0 -117
  38. package/bios/seabios/out/include/config/acpi/dsdt.h +0 -0
  39. package/bios/seabios/out/include/config/acpi.h +0 -0
  40. package/bios/seabios/out/include/config/ahci.h +0 -0
  41. package/bios/seabios/out/include/config/apmbios.h +0 -0
  42. package/bios/seabios/out/include/config/ata/dma.h +0 -0
  43. package/bios/seabios/out/include/config/ata/pio32.h +0 -0
  44. package/bios/seabios/out/include/config/ata.h +0 -0
  45. package/bios/seabios/out/include/config/auto.conf +0 -69
  46. package/bios/seabios/out/include/config/auto.conf.cmd +0 -9
  47. package/bios/seabios/out/include/config/boot.h +0 -0
  48. package/bios/seabios/out/include/config/bootorder.h +0 -0
  49. package/bios/seabios/out/include/config/build/vgabios.h +0 -0
  50. package/bios/seabios/out/include/config/call32/smm.h +0 -0
  51. package/bios/seabios/out/include/config/cdrom/boot.h +0 -0
  52. package/bios/seabios/out/include/config/cdrom/emu.h +0 -0
  53. package/bios/seabios/out/include/config/debug/level.h +0 -0
  54. package/bios/seabios/out/include/config/drives.h +0 -0
  55. package/bios/seabios/out/include/config/entry/extrastack.h +0 -0
  56. package/bios/seabios/out/include/config/esp/scsi.h +0 -0
  57. package/bios/seabios/out/include/config/flash/floppy.h +0 -0
  58. package/bios/seabios/out/include/config/floppy.h +0 -0
  59. package/bios/seabios/out/include/config/fw/romfile/load.h +0 -0
  60. package/bios/seabios/out/include/config/hardware/irq.h +0 -0
  61. package/bios/seabios/out/include/config/kbd/call/int15/4f.h +0 -0
  62. package/bios/seabios/out/include/config/keyboard.h +0 -0
  63. package/bios/seabios/out/include/config/lpt.h +0 -0
  64. package/bios/seabios/out/include/config/lsi/scsi.h +0 -0
  65. package/bios/seabios/out/include/config/malloc/uppermemory.h +0 -0
  66. package/bios/seabios/out/include/config/megasas.h +0 -0
  67. package/bios/seabios/out/include/config/mouse.h +0 -0
  68. package/bios/seabios/out/include/config/mpt/scsi.h +0 -0
  69. package/bios/seabios/out/include/config/mptable.h +0 -0
  70. package/bios/seabios/out/include/config/mtrr/init.h +0 -0
  71. package/bios/seabios/out/include/config/optionroms.h +0 -0
  72. package/bios/seabios/out/include/config/override/pci/id.h +0 -0
  73. package/bios/seabios/out/include/config/pcibios.h +0 -0
  74. package/bios/seabios/out/include/config/pirtable.h +0 -0
  75. package/bios/seabios/out/include/config/pmm.h +0 -0
  76. package/bios/seabios/out/include/config/pmtimer.h +0 -0
  77. package/bios/seabios/out/include/config/pnpbios.h +0 -0
  78. package/bios/seabios/out/include/config/ps2port.h +0 -0
  79. package/bios/seabios/out/include/config/pvscsi.h +0 -0
  80. package/bios/seabios/out/include/config/qemu/hardware.h +0 -0
  81. package/bios/seabios/out/include/config/qemu.h +0 -0
  82. package/bios/seabios/out/include/config/rom/size.h +0 -0
  83. package/bios/seabios/out/include/config/rtc/timer.h +0 -0
  84. package/bios/seabios/out/include/config/s3/resume.h +0 -0
  85. package/bios/seabios/out/include/config/sdcard.h +0 -0
  86. package/bios/seabios/out/include/config/serial.h +0 -0
  87. package/bios/seabios/out/include/config/tcgbios.h +0 -0
  88. package/bios/seabios/out/include/config/threads.h +0 -0
  89. package/bios/seabios/out/include/config/tristate.conf +0 -4
  90. package/bios/seabios/out/include/config/tsc/timer.h +0 -0
  91. package/bios/seabios/out/include/config/use/smm.h +0 -0
  92. package/bios/seabios/out/include/config/vga/allocate/extra/stack.h +0 -0
  93. package/bios/seabios/out/include/config/vga/bochs/stdvga.h +0 -0
  94. package/bios/seabios/out/include/config/vga/bochs.h +0 -0
  95. package/bios/seabios/out/include/config/vga/did.h +0 -0
  96. package/bios/seabios/out/include/config/vga/extra/stack/size.h +0 -0
  97. package/bios/seabios/out/include/config/vga/fixup/asm.h +0 -0
  98. package/bios/seabios/out/include/config/vga/pci.h +0 -0
  99. package/bios/seabios/out/include/config/vga/stdvga/ports.h +0 -0
  100. package/bios/seabios/out/include/config/vga/vbe.h +0 -0
  101. package/bios/seabios/out/include/config/vga/vid.h +0 -0
  102. package/bios/seabios/out/include/config/vgahooks.h +0 -0
  103. package/bios/seabios/out/include/config/virtio/blk.h +0 -0
  104. package/bios/seabios/out/include/config/virtio/scsi.h +0 -0
  105. package/bios/seabios/out/include/config/xen.h +0 -0
  106. package/bios/seabios/out/scripts/kconfig/conf +0 -0
  107. package/bios/seabios/out/scripts/kconfig/conf.o +0 -0
  108. package/bios/seabios/out/scripts/kconfig/zconf.hash.c +0 -289
  109. package/bios/seabios/out/scripts/kconfig/zconf.lex.c +0 -2420
  110. package/bios/seabios/out/scripts/kconfig/zconf.tab.c +0 -2538
  111. package/bios/seabios/out/scripts/kconfig/zconf.tab.o +0 -0
  112. package/bios/seabios/scripts/acpi_extract.py +0 -366
  113. package/bios/seabios/scripts/acpi_extract_preprocess.py +0 -41
  114. package/bios/seabios/scripts/buildrom.py +0 -56
  115. package/bios/seabios/scripts/buildversion.py +0 -134
  116. package/bios/seabios/scripts/checkrom.py +0 -95
  117. package/bios/seabios/scripts/checkstack.py +0 -226
  118. package/bios/seabios/scripts/checksum.py +0 -16
  119. package/bios/seabios/scripts/encodeint.py +0 -21
  120. package/bios/seabios/scripts/gen-offsets.sh +0 -17
  121. package/bios/seabios/scripts/kconfig/.gitignore +0 -22
  122. package/bios/seabios/scripts/kconfig/Makefile +0 -331
  123. package/bios/seabios/scripts/kconfig/POTFILES.in +0 -12
  124. package/bios/seabios/scripts/kconfig/check.sh +0 -13
  125. package/bios/seabios/scripts/kconfig/conf.c +0 -718
  126. package/bios/seabios/scripts/kconfig/confdata.c +0 -1250
  127. package/bios/seabios/scripts/kconfig/expr.c +0 -1168
  128. package/bios/seabios/scripts/kconfig/expr.h +0 -241
  129. package/bios/seabios/scripts/kconfig/gconf.c +0 -1542
  130. package/bios/seabios/scripts/kconfig/gconf.glade +0 -661
  131. package/bios/seabios/scripts/kconfig/images.c +0 -326
  132. package/bios/seabios/scripts/kconfig/kxgettext.c +0 -235
  133. package/bios/seabios/scripts/kconfig/lex.zconf.c +0 -2430
  134. package/bios/seabios/scripts/kconfig/list.h +0 -131
  135. package/bios/seabios/scripts/kconfig/lkc.h +0 -200
  136. package/bios/seabios/scripts/kconfig/lkc_proto.h +0 -57
  137. package/bios/seabios/scripts/kconfig/lxdialog/.gitignore +0 -4
  138. package/bios/seabios/scripts/kconfig/lxdialog/BIG.FAT.WARNING +0 -4
  139. package/bios/seabios/scripts/kconfig/lxdialog/check-lxdialog.sh +0 -87
  140. package/bios/seabios/scripts/kconfig/lxdialog/checklist.c +0 -332
  141. package/bios/seabios/scripts/kconfig/lxdialog/dialog.h +0 -257
  142. package/bios/seabios/scripts/kconfig/lxdialog/inputbox.c +0 -301
  143. package/bios/seabios/scripts/kconfig/lxdialog/menubox.c +0 -437
  144. package/bios/seabios/scripts/kconfig/lxdialog/textbox.c +0 -408
  145. package/bios/seabios/scripts/kconfig/lxdialog/util.c +0 -713
  146. package/bios/seabios/scripts/kconfig/lxdialog/yesno.c +0 -114
  147. package/bios/seabios/scripts/kconfig/mconf.c +0 -1036
  148. package/bios/seabios/scripts/kconfig/menu.c +0 -697
  149. package/bios/seabios/scripts/kconfig/merge_config.sh +0 -150
  150. package/bios/seabios/scripts/kconfig/nconf.c +0 -1556
  151. package/bios/seabios/scripts/kconfig/nconf.gui.c +0 -656
  152. package/bios/seabios/scripts/kconfig/nconf.h +0 -96
  153. package/bios/seabios/scripts/kconfig/qconf.cc +0 -1795
  154. package/bios/seabios/scripts/kconfig/qconf.h +0 -338
  155. package/bios/seabios/scripts/kconfig/streamline_config.pl +0 -647
  156. package/bios/seabios/scripts/kconfig/symbol.c +0 -1373
  157. package/bios/seabios/scripts/kconfig/util.c +0 -157
  158. package/bios/seabios/scripts/kconfig/zconf.gperf +0 -48
  159. package/bios/seabios/scripts/kconfig/zconf.hash.c_shipped +0 -289
  160. package/bios/seabios/scripts/kconfig/zconf.l +0 -363
  161. package/bios/seabios/scripts/kconfig/zconf.lex.c_shipped +0 -2420
  162. package/bios/seabios/scripts/kconfig/zconf.tab.c_shipped +0 -2538
  163. package/bios/seabios/scripts/kconfig/zconf.y +0 -733
  164. package/bios/seabios/scripts/layoutrom.py +0 -705
  165. package/bios/seabios/scripts/python23compat.py +0 -14
  166. package/bios/seabios/scripts/readserial.py +0 -190
  167. package/bios/seabios/scripts/tarball.sh +0 -36
  168. package/bios/seabios/scripts/test-build.sh +0 -90
  169. package/bios/seabios/scripts/transdump.py +0 -53
  170. package/bios/seabios/scripts/vgafixup.py +0 -96
  171. package/bios/seabios/src/Kconfig +0 -579
  172. package/bios/seabios/src/apm.c +0 -215
  173. package/bios/seabios/src/asm-offsets.c +0 -23
  174. package/bios/seabios/src/biosvar.h +0 -130
  175. package/bios/seabios/src/block.c +0 -623
  176. package/bios/seabios/src/block.h +0 -121
  177. package/bios/seabios/src/bmp.c +0 -117
  178. package/bios/seabios/src/boot.c +0 -793
  179. package/bios/seabios/src/bootsplash.c +0 -255
  180. package/bios/seabios/src/bregs.h +0 -80
  181. package/bios/seabios/src/byteorder.h +0 -71
  182. package/bios/seabios/src/cdrom.c +0 -322
  183. package/bios/seabios/src/clock.c +0 -506
  184. package/bios/seabios/src/code16gcc.s +0 -1
  185. package/bios/seabios/src/config.h +0 -108
  186. package/bios/seabios/src/cp437.c +0 -275
  187. package/bios/seabios/src/cp437.h +0 -1
  188. package/bios/seabios/src/disk.c +0 -779
  189. package/bios/seabios/src/e820map.c +0 -152
  190. package/bios/seabios/src/e820map.h +0 -26
  191. package/bios/seabios/src/entryfuncs.S +0 -165
  192. package/bios/seabios/src/farptr.h +0 -208
  193. package/bios/seabios/src/font.c +0 -139
  194. package/bios/seabios/src/fw/acpi-dsdt-cpu-hotplug.dsl +0 -78
  195. package/bios/seabios/src/fw/acpi-dsdt-dbug.dsl +0 -26
  196. package/bios/seabios/src/fw/acpi-dsdt-hpet.dsl +0 -36
  197. package/bios/seabios/src/fw/acpi-dsdt-isa.dsl +0 -102
  198. package/bios/seabios/src/fw/acpi-dsdt-pci-crs.dsl +0 -90
  199. package/bios/seabios/src/fw/acpi-dsdt.dsl +0 -342
  200. package/bios/seabios/src/fw/acpi-dsdt.hex +0 -554
  201. package/bios/seabios/src/fw/acpi.c +0 -685
  202. package/bios/seabios/src/fw/biostables.c +0 -491
  203. package/bios/seabios/src/fw/coreboot.c +0 -569
  204. package/bios/seabios/src/fw/csm.c +0 -347
  205. package/bios/seabios/src/fw/dev-pci.h +0 -52
  206. package/bios/seabios/src/fw/dev-piix.h +0 -29
  207. package/bios/seabios/src/fw/dev-q35.h +0 -52
  208. package/bios/seabios/src/fw/lzmadecode.c +0 -398
  209. package/bios/seabios/src/fw/lzmadecode.h +0 -67
  210. package/bios/seabios/src/fw/mptable.c +0 -197
  211. package/bios/seabios/src/fw/mtrr.c +0 -105
  212. package/bios/seabios/src/fw/multiboot.c +0 -111
  213. package/bios/seabios/src/fw/paravirt.c +0 -624
  214. package/bios/seabios/src/fw/paravirt.h +0 -63
  215. package/bios/seabios/src/fw/pciinit.c +0 -1187
  216. package/bios/seabios/src/fw/pirtable.c +0 -103
  217. package/bios/seabios/src/fw/q35-acpi-dsdt.dsl +0 -450
  218. package/bios/seabios/src/fw/romfile_loader.c +0 -259
  219. package/bios/seabios/src/fw/romfile_loader.h +0 -91
  220. package/bios/seabios/src/fw/shadow.c +0 -208
  221. package/bios/seabios/src/fw/smbios.c +0 -585
  222. package/bios/seabios/src/fw/smm.c +0 -269
  223. package/bios/seabios/src/fw/smp.c +0 -194
  224. package/bios/seabios/src/fw/ssdt-misc.dsl +0 -104
  225. package/bios/seabios/src/fw/ssdt-misc.hex +0 -88
  226. package/bios/seabios/src/fw/ssdt-pcihp.dsl +0 -36
  227. package/bios/seabios/src/fw/ssdt-pcihp.hex +0 -38
  228. package/bios/seabios/src/fw/ssdt-proc.dsl +0 -48
  229. package/bios/seabios/src/fw/ssdt-proc.hex +0 -35
  230. package/bios/seabios/src/fw/xen.c +0 -149
  231. package/bios/seabios/src/fw/xen.h +0 -125
  232. package/bios/seabios/src/gen-defs.h +0 -19
  233. package/bios/seabios/src/hw/ahci.c +0 -697
  234. package/bios/seabios/src/hw/ahci.h +0 -201
  235. package/bios/seabios/src/hw/ata.c +0 -1046
  236. package/bios/seabios/src/hw/ata.h +0 -163
  237. package/bios/seabios/src/hw/blockcmd.c +0 -372
  238. package/bios/seabios/src/hw/blockcmd.h +0 -114
  239. package/bios/seabios/src/hw/dma.c +0 -67
  240. package/bios/seabios/src/hw/esp-scsi.c +0 -241
  241. package/bios/seabios/src/hw/esp-scsi.h +0 -8
  242. package/bios/seabios/src/hw/floppy.c +0 -741
  243. package/bios/seabios/src/hw/lsi-scsi.c +0 -221
  244. package/bios/seabios/src/hw/lsi-scsi.h +0 -8
  245. package/bios/seabios/src/hw/megasas.c +0 -405
  246. package/bios/seabios/src/hw/megasas.h +0 -8
  247. package/bios/seabios/src/hw/mpt-scsi.c +0 -319
  248. package/bios/seabios/src/hw/mpt-scsi.h +0 -8
  249. package/bios/seabios/src/hw/nvme-int.h +0 -199
  250. package/bios/seabios/src/hw/nvme.c +0 -708
  251. package/bios/seabios/src/hw/nvme.h +0 -17
  252. package/bios/seabios/src/hw/pci.c +0 -133
  253. package/bios/seabios/src/hw/pci.h +0 -47
  254. package/bios/seabios/src/hw/pci_ids.h +0 -2632
  255. package/bios/seabios/src/hw/pci_regs.h +0 -556
  256. package/bios/seabios/src/hw/pcidevice.c +0 -192
  257. package/bios/seabios/src/hw/pcidevice.h +0 -76
  258. package/bios/seabios/src/hw/pic.c +0 -115
  259. package/bios/seabios/src/hw/pic.h +0 -60
  260. package/bios/seabios/src/hw/ps2port.c +0 -543
  261. package/bios/seabios/src/hw/ps2port.h +0 -67
  262. package/bios/seabios/src/hw/pvscsi.c +0 -333
  263. package/bios/seabios/src/hw/pvscsi.h +0 -8
  264. package/bios/seabios/src/hw/ramdisk.c +0 -108
  265. package/bios/seabios/src/hw/rtc.c +0 -100
  266. package/bios/seabios/src/hw/rtc.h +0 -75
  267. package/bios/seabios/src/hw/sdcard.c +0 -572
  268. package/bios/seabios/src/hw/serialio.c +0 -113
  269. package/bios/seabios/src/hw/serialio.h +0 -29
  270. package/bios/seabios/src/hw/timer.c +0 -259
  271. package/bios/seabios/src/hw/tpm_drivers.c +0 -636
  272. package/bios/seabios/src/hw/tpm_drivers.h +0 -127
  273. package/bios/seabios/src/hw/usb-ehci.c +0 -650
  274. package/bios/seabios/src/hw/usb-ehci.h +0 -177
  275. package/bios/seabios/src/hw/usb-hid.c +0 -442
  276. package/bios/seabios/src/hw/usb-hid.h +0 -29
  277. package/bios/seabios/src/hw/usb-hub.c +0 -205
  278. package/bios/seabios/src/hw/usb-hub.h +0 -64
  279. package/bios/seabios/src/hw/usb-msc.c +0 -222
  280. package/bios/seabios/src/hw/usb-msc.h +0 -10
  281. package/bios/seabios/src/hw/usb-ohci.c +0 -568
  282. package/bios/seabios/src/hw/usb-ohci.h +0 -144
  283. package/bios/seabios/src/hw/usb-uas.c +0 -289
  284. package/bios/seabios/src/hw/usb-uas.h +0 -9
  285. package/bios/seabios/src/hw/usb-uhci.c +0 -571
  286. package/bios/seabios/src/hw/usb-uhci.h +0 -128
  287. package/bios/seabios/src/hw/usb-xhci.c +0 -1161
  288. package/bios/seabios/src/hw/usb-xhci.h +0 -133
  289. package/bios/seabios/src/hw/usb.c +0 -499
  290. package/bios/seabios/src/hw/usb.h +0 -254
  291. package/bios/seabios/src/hw/virtio-blk.c +0 -211
  292. package/bios/seabios/src/hw/virtio-blk.h +0 -43
  293. package/bios/seabios/src/hw/virtio-pci.c +0 -501
  294. package/bios/seabios/src/hw/virtio-pci.h +0 -151
  295. package/bios/seabios/src/hw/virtio-ring.c +0 -147
  296. package/bios/seabios/src/hw/virtio-ring.h +0 -121
  297. package/bios/seabios/src/hw/virtio-scsi.c +0 -220
  298. package/bios/seabios/src/hw/virtio-scsi.h +0 -47
  299. package/bios/seabios/src/jpeg.c +0 -1055
  300. package/bios/seabios/src/kbd.c +0 -599
  301. package/bios/seabios/src/list.h +0 -91
  302. package/bios/seabios/src/malloc.c +0 -561
  303. package/bios/seabios/src/malloc.h +0 -70
  304. package/bios/seabios/src/memmap.h +0 -21
  305. package/bios/seabios/src/misc.c +0 -195
  306. package/bios/seabios/src/mouse.c +0 -342
  307. package/bios/seabios/src/optionroms.c +0 -475
  308. package/bios/seabios/src/output.c +0 -584
  309. package/bios/seabios/src/output.h +0 -68
  310. package/bios/seabios/src/pcibios.c +0 -241
  311. package/bios/seabios/src/pmm.c +0 -176
  312. package/bios/seabios/src/pnpbios.c +0 -88
  313. package/bios/seabios/src/post.c +0 -337
  314. package/bios/seabios/src/resume.c +0 -157
  315. package/bios/seabios/src/romfile.c +0 -146
  316. package/bios/seabios/src/romfile.h +0 -21
  317. package/bios/seabios/src/romlayout.S +0 -698
  318. package/bios/seabios/src/sercon.c +0 -677
  319. package/bios/seabios/src/serial.c +0 -317
  320. package/bios/seabios/src/sha1.c +0 -147
  321. package/bios/seabios/src/sha1.h +0 -8
  322. package/bios/seabios/src/stacks.c +0 -771
  323. package/bios/seabios/src/stacks.h +0 -68
  324. package/bios/seabios/src/std/LegacyBios.h +0 -985
  325. package/bios/seabios/src/std/acpi.h +0 -323
  326. package/bios/seabios/src/std/bda.h +0 -174
  327. package/bios/seabios/src/std/disk.h +0 -175
  328. package/bios/seabios/src/std/mptable.h +0 -77
  329. package/bios/seabios/src/std/multiboot.h +0 -260
  330. package/bios/seabios/src/std/optionrom.h +0 -59
  331. package/bios/seabios/src/std/pirtable.h +0 -35
  332. package/bios/seabios/src/std/pmm.h +0 -19
  333. package/bios/seabios/src/std/pnpbios.h +0 -24
  334. package/bios/seabios/src/std/smbios.h +0 -167
  335. package/bios/seabios/src/std/tcg.h +0 -554
  336. package/bios/seabios/src/std/vbe.h +0 -156
  337. package/bios/seabios/src/std/vga.h +0 -63
  338. package/bios/seabios/src/string.c +0 -251
  339. package/bios/seabios/src/string.h +0 -31
  340. package/bios/seabios/src/system.c +0 -357
  341. package/bios/seabios/src/tcgbios.c +0 -2014
  342. package/bios/seabios/src/tcgbios.h +0 -19
  343. package/bios/seabios/src/types.h +0 -156
  344. package/bios/seabios/src/util.h +0 -251
  345. package/bios/seabios/src/version.c +0 -5
  346. package/bios/seabios/src/vgahooks.c +0 -355
  347. package/bios/seabios/src/x86.c +0 -23
  348. package/bios/seabios/src/x86.h +0 -277
  349. package/bios/seabios/vgasrc/Kconfig +0 -211
  350. package/bios/seabios/vgasrc/bochsdisplay.c +0 -59
  351. package/bios/seabios/vgasrc/bochsvga.c +0 -447
  352. package/bios/seabios/vgasrc/bochsvga.h +0 -57
  353. package/bios/seabios/vgasrc/cbvga.c +0 -337
  354. package/bios/seabios/vgasrc/clext.c +0 -627
  355. package/bios/seabios/vgasrc/geodevga.c +0 -434
  356. package/bios/seabios/vgasrc/geodevga.h +0 -89
  357. package/bios/seabios/vgasrc/ramfb.c +0 -163
  358. package/bios/seabios/vgasrc/stdvga.c +0 -485
  359. package/bios/seabios/vgasrc/stdvga.h +0 -81
  360. package/bios/seabios/vgasrc/stdvgaio.c +0 -186
  361. package/bios/seabios/vgasrc/stdvgamodes.c +0 -534
  362. package/bios/seabios/vgasrc/swcursor.c +0 -96
  363. package/bios/seabios/vgasrc/vbe.c +0 -432
  364. package/bios/seabios/vgasrc/vgabios.c +0 -1131
  365. package/bios/seabios/vgasrc/vgabios.h +0 -88
  366. package/bios/seabios/vgasrc/vgaentry.S +0 -161
  367. package/bios/seabios/vgasrc/vgafb.c +0 -661
  368. package/bios/seabios/vgasrc/vgafb.h +0 -42
  369. package/bios/seabios/vgasrc/vgafonts.c +0 -785
  370. package/bios/seabios/vgasrc/vgahw.h +0 -152
  371. package/bios/seabios/vgasrc/vgainit.c +0 -202
  372. package/bios/seabios/vgasrc/vgalayout.lds.S +0 -23
  373. package/bios/seabios/vgasrc/vgautil.h +0 -103
  374. package/bios/seabios/vgasrc/vgaversion.c +0 -6
  375. package/bios/seabios-debug.bin +0 -0
  376. package/bios/seabios-debug.config +0 -117
  377. package/bios/seabios.bin +0 -0
  378. package/bios/seabios.config +0 -114
  379. package/bios/vgabios-debug.bin +0 -0
  380. package/bios/vgabios.bin +0 -0
  381. package/build/binaries.js +0 -1
  382. package/build/index-debug.cjs +0 -1
  383. package/build/index-debug.js +0 -1
  384. package/build/index.cjs +0 -1
  385. package/build/index.js +0 -1
  386. package/v86.css +0 -259
@@ -1,1131 +0,0 @@
1
- // VGA bios implementation
2
- //
3
- // Copyright (C) 2009-2013 Kevin O'Connor <kevin@koconnor.net>
4
- // Copyright (C) 2001-2008 the LGPL VGABios developers Team
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 "config.h" // CONFIG_*
11
- #include "output.h" // dprintf
12
- #include "std/vbe.h" // VBE_RETURN_STATUS_FAILED
13
- #include "std/vga.h" // struct video_func_static
14
- #include "stdvga.h" // stdvga_set_cursor_shape
15
- #include "string.h" // memset_far
16
- #include "vgabios.h" // calc_page_size
17
- #include "vgafb.h" // vgafb_write_char
18
- #include "vgahw.h" // vgahw_set_mode
19
- #include "vgautil.h" // swcursor_pre_handle10
20
-
21
-
22
- /****************************************************************
23
- * Helper functions
24
- ****************************************************************/
25
-
26
- // Return the bits per pixel in system memory for a given mode.
27
- int
28
- vga_bpp(struct vgamode_s *vmode_g)
29
- {
30
- switch (GET_GLOBAL(vmode_g->memmodel)) {
31
- case MM_TEXT:
32
- return 16;
33
- case MM_PLANAR:
34
- return 1;
35
- }
36
- u8 depth = GET_GLOBAL(vmode_g->depth);
37
- if (depth > 8)
38
- return ALIGN(depth, 8);
39
- return depth;
40
- }
41
-
42
- u16
43
- calc_page_size(u8 memmodel, u16 width, u16 height)
44
- {
45
- switch (memmodel) {
46
- case MM_TEXT:
47
- return ALIGN(width * height * 2, 2*1024);
48
- case MM_CGA:
49
- return 16*1024;
50
- default:
51
- return ALIGN(width * height / 8, 8*1024);
52
- }
53
- }
54
-
55
- // Determine cursor shape (taking into account possible cursor scaling)
56
- u16
57
- get_cursor_shape(void)
58
- {
59
- u16 cursor_type = GET_BDA(cursor_type);
60
- u8 emulate_cursor = (GET_BDA(video_ctl) & 1) == 0;
61
- if (!emulate_cursor)
62
- return cursor_type;
63
- u8 start = (cursor_type >> 8) & 0x3f;
64
- u8 end = cursor_type & 0x1f;
65
- u16 cheight = GET_BDA(char_height);
66
- if (cheight <= 8 || end >= 8 || start >= 0x20)
67
- return cursor_type;
68
- if (end != (start + 1))
69
- start = ((start + 1) * cheight / 8) - 1;
70
- else
71
- start = ((end + 1) * cheight / 8) - 2;
72
- end = ((end + 1) * cheight / 8) - 1;
73
- return (start << 8) | end;
74
- }
75
-
76
- static void
77
- set_cursor_shape(u16 cursor_type)
78
- {
79
- SET_BDA(cursor_type, cursor_type);
80
- if (CONFIG_VGA_STDVGA_PORTS)
81
- stdvga_set_cursor_shape(get_cursor_shape());
82
- }
83
-
84
- static void
85
- set_cursor_pos(struct cursorpos cp)
86
- {
87
- if (cp.page > 7)
88
- // Should not happen...
89
- return;
90
-
91
- if (cp.page == GET_BDA(video_page)) {
92
- // Update cursor in hardware
93
- if (CONFIG_VGA_STDVGA_PORTS)
94
- stdvga_set_cursor_pos((int)text_address(cp));
95
- }
96
-
97
- // Update BIOS cursor pos
98
- SET_BDA(cursor_pos[cp.page], (cp.y << 8) | cp.x);
99
- }
100
-
101
- struct cursorpos
102
- get_cursor_pos(u8 page)
103
- {
104
- if (page > 7)
105
- return (struct cursorpos) { 0, 0, 0 };
106
- u16 xy = GET_BDA(cursor_pos[page]);
107
- return (struct cursorpos) { xy, xy>>8, page };
108
- }
109
-
110
- static void
111
- set_active_page(u8 page)
112
- {
113
- if (page > 7)
114
- return;
115
-
116
- // Get the mode
117
- struct vgamode_s *vmode_g = get_current_mode();
118
- if (!vmode_g)
119
- return;
120
-
121
- // Calculate memory address of start of page
122
- struct cursorpos cp = {0, 0, page};
123
- int address = (int)text_address(cp);
124
- vgahw_set_displaystart(vmode_g, address);
125
-
126
- // And change the BIOS page
127
- SET_BDA(video_pagestart, address);
128
- SET_BDA(video_page, page);
129
-
130
- dprintf(1, "Set active page %02x address %04x\n", page, address);
131
-
132
- // Display the cursor, now the page is active
133
- set_cursor_pos(get_cursor_pos(page));
134
- }
135
-
136
- static void
137
- set_scan_lines(u8 lines)
138
- {
139
- stdvga_set_scan_lines(lines);
140
- SET_BDA(char_height, lines);
141
- u16 vde = stdvga_get_vde();
142
- u8 rows = vde / lines;
143
- SET_BDA(video_rows, rows - 1);
144
- u16 cols = GET_BDA(video_cols);
145
- SET_BDA(video_pagesize, calc_page_size(MM_TEXT, cols, rows));
146
- if (lines == 8)
147
- set_cursor_shape(0x0607);
148
- else
149
- set_cursor_shape(((lines - 3) << 8) | (lines - 2));
150
- }
151
-
152
-
153
- /****************************************************************
154
- * Character writing
155
- ****************************************************************/
156
-
157
- // Write a character to the screen and calculate new cursor position.
158
- static void
159
- write_char(struct cursorpos *pcp, struct carattr ca)
160
- {
161
- vgafb_write_char(*pcp, ca);
162
- pcp->x++;
163
- // Do we need to wrap ?
164
- if (pcp->x == GET_BDA(video_cols)) {
165
- pcp->x = 0;
166
- pcp->y++;
167
- }
168
- }
169
-
170
- // Write a character to the screen at a given position. Implement
171
- // special characters and scroll the screen if necessary.
172
- static void
173
- write_teletype(struct cursorpos *pcp, struct carattr ca)
174
- {
175
- switch (ca.car) {
176
- case 7:
177
- //FIXME should beep
178
- break;
179
- case 8:
180
- if (pcp->x > 0)
181
- pcp->x--;
182
- break;
183
- case '\r':
184
- pcp->x = 0;
185
- break;
186
- case '\n':
187
- pcp->y++;
188
- break;
189
- default:
190
- write_char(pcp, ca);
191
- break;
192
- }
193
-
194
- // Do we need to scroll ?
195
- u16 nbrows = GET_BDA(video_rows);
196
- if (pcp->y > nbrows) {
197
- pcp->y--;
198
-
199
- struct cursorpos win = {0, 0, pcp->page};
200
- struct cursorpos winsize = {GET_BDA(video_cols), nbrows+1};
201
- struct carattr attr = {' ', 0, 0};
202
- vgafb_scroll(win, winsize, 1, attr);
203
- }
204
- }
205
-
206
-
207
- /****************************************************************
208
- * Save and restore bda state
209
- ****************************************************************/
210
-
211
- struct saveBDAstate {
212
- u8 bda_0x49[28];
213
- u8 bda_0x84[6];
214
- u16 vbe_mode;
215
- struct segoff_s font0;
216
- struct segoff_s font1;
217
- };
218
-
219
- int
220
- bda_save_restore(int cmd, u16 seg, void *data)
221
- {
222
- if (!(cmd & SR_BDA))
223
- return 0;
224
- struct saveBDAstate *info = data;
225
- if (cmd & SR_SAVE) {
226
- memcpy_far(seg, info->bda_0x49, SEG_BDA, (void*)0x49
227
- , sizeof(info->bda_0x49));
228
- memcpy_far(seg, info->bda_0x84, SEG_BDA, (void*)0x84
229
- , sizeof(info->bda_0x84));
230
- SET_FARVAR(seg, info->vbe_mode, GET_BDA_EXT(vbe_mode));
231
- SET_FARVAR(seg, info->font0, GET_IVT(0x1f));
232
- SET_FARVAR(seg, info->font1, GET_IVT(0x43));
233
- }
234
- if (cmd & SR_RESTORE) {
235
- memcpy_far(SEG_BDA, (void*)0x49, seg, info->bda_0x49
236
- , sizeof(info->bda_0x49));
237
- memcpy_far(SEG_BDA, (void*)0x84, seg, info->bda_0x84
238
- , sizeof(info->bda_0x84));
239
- u16 vbe_mode = GET_FARVAR(seg, info->vbe_mode);
240
- SET_BDA_EXT(vbe_mode, vbe_mode);
241
- struct vgamode_s *vmode_g = vgahw_find_mode(vbe_mode & ~MF_VBEFLAGS);
242
- SET_BDA_EXT(vgamode_offset, (u32)vmode_g);
243
- SET_IVT(0x1f, GET_FARVAR(seg, info->font0));
244
- SET_IVT(0x43, GET_FARVAR(seg, info->font1));
245
- }
246
- return sizeof(*info);
247
- }
248
-
249
-
250
- /****************************************************************
251
- * Mode setting
252
- ****************************************************************/
253
-
254
- struct vgamode_s *
255
- get_current_mode(void)
256
- {
257
- return (void*)(GET_BDA_EXT(vgamode_offset)+0);
258
- }
259
-
260
- // Setup BDA after a mode switch.
261
- int
262
- vga_set_mode(int mode, int flags)
263
- {
264
- dprintf(1, "set VGA mode %x\n", mode);
265
- struct vgamode_s *vmode_g = vgahw_find_mode(mode);
266
- if (!vmode_g)
267
- return VBE_RETURN_STATUS_FAILED;
268
-
269
- int ret = vgahw_set_mode(vmode_g, flags);
270
- if (ret)
271
- return ret;
272
-
273
- // Set the BIOS mem
274
- int width = GET_GLOBAL(vmode_g->width);
275
- int height = GET_GLOBAL(vmode_g->height);
276
- u8 memmodel = GET_GLOBAL(vmode_g->memmodel);
277
- int cheight = GET_GLOBAL(vmode_g->cheight);
278
- if (mode < 0x100)
279
- SET_BDA(video_mode, mode);
280
- else
281
- SET_BDA(video_mode, 0xff);
282
- SET_BDA_EXT(vbe_mode, mode | (flags & MF_VBEFLAGS));
283
- SET_BDA_EXT(vgamode_offset, (u32)vmode_g);
284
- if (CONFIG_VGA_ALLOCATE_EXTRA_STACK)
285
- // Disable extra stack if it appears a modern OS is in use.
286
- // This works around bugs in some versions of Windows (Vista
287
- // and possibly later) when the stack is in the e-segment.
288
- MASK_BDA_EXT(flags, BF_EXTRA_STACK
289
- , (flags & MF_LEGACY) ? BF_EXTRA_STACK : 0);
290
- if (memmodel == MM_TEXT) {
291
- SET_BDA(video_cols, width);
292
- SET_BDA(video_rows, height-1);
293
- SET_BDA(cursor_type, 0x0607);
294
- } else {
295
- int cwidth = GET_GLOBAL(vmode_g->cwidth);
296
- SET_BDA(video_cols, width / cwidth);
297
- SET_BDA(video_rows, (height / cheight) - 1);
298
- SET_BDA(cursor_type, vga_emulate_text() ? 0x0607 : 0x0000);
299
- }
300
- SET_BDA(video_pagesize, calc_page_size(memmodel, width, height));
301
- SET_BDA(crtc_address, CONFIG_VGA_STDVGA_PORTS ? stdvga_get_crtc() : 0);
302
- SET_BDA(char_height, cheight);
303
- SET_BDA(video_ctl, 0x60 | (flags & MF_NOCLEARMEM ? 0x80 : 0x00));
304
- SET_BDA(video_switches, 0xF9);
305
- SET_BDA(modeset_ctl, GET_BDA(modeset_ctl) & 0x7f);
306
- int i;
307
- for (i=0; i<8; i++)
308
- SET_BDA(cursor_pos[i], 0x0000);
309
- SET_BDA(video_pagestart, 0x0000);
310
- SET_BDA(video_page, 0x00);
311
-
312
- // Set the ints 0x1F and 0x43
313
- SET_IVT(0x1f, SEGOFF(get_global_seg(), (u32)&vgafont8[128 * 8]));
314
-
315
- switch (cheight) {
316
- case 8:
317
- SET_IVT(0x43, SEGOFF(get_global_seg(), (u32)vgafont8));
318
- break;
319
- case 14:
320
- SET_IVT(0x43, SEGOFF(get_global_seg(), (u32)vgafont14));
321
- break;
322
- case 16:
323
- SET_IVT(0x43, SEGOFF(get_global_seg(), (u32)vgafont16));
324
- break;
325
- }
326
-
327
- return 0;
328
- }
329
-
330
-
331
- /****************************************************************
332
- * VGA int 10 handler
333
- ****************************************************************/
334
-
335
- static void
336
- handle_1000(struct bregs *regs)
337
- {
338
- int mode = regs->al & 0x7f;
339
-
340
- // Set regs->al
341
- if (mode > 7)
342
- regs->al = 0x20;
343
- else if (mode == 6)
344
- regs->al = 0x3f;
345
- else
346
- regs->al = 0x30;
347
-
348
- int flags = MF_LEGACY | (GET_BDA(modeset_ctl) & (MF_NOPALETTE|MF_GRAYSUM));
349
- if (regs->al & 0x80)
350
- flags |= MF_NOCLEARMEM;
351
-
352
- vga_set_mode(mode, flags);
353
- }
354
-
355
- static void
356
- handle_1001(struct bregs *regs)
357
- {
358
- set_cursor_shape(regs->cx);
359
- }
360
-
361
- static void
362
- handle_1002(struct bregs *regs)
363
- {
364
- struct cursorpos cp = {regs->dl, regs->dh, regs->bh};
365
- set_cursor_pos(cp);
366
- }
367
-
368
- static void
369
- handle_1003(struct bregs *regs)
370
- {
371
- regs->cx = GET_BDA(cursor_type);
372
- struct cursorpos cp = get_cursor_pos(regs->bh);
373
- regs->dl = cp.x;
374
- regs->dh = cp.y;
375
- }
376
-
377
- // Read light pen pos (unimplemented)
378
- static void
379
- handle_1004(struct bregs *regs)
380
- {
381
- debug_stub(regs);
382
- regs->ax = regs->bx = regs->cx = regs->dx = 0;
383
- }
384
-
385
- static void
386
- handle_1005(struct bregs *regs)
387
- {
388
- set_active_page(regs->al);
389
- }
390
-
391
- static void
392
- verify_scroll(struct bregs *regs, int dir)
393
- {
394
- // Verify parameters
395
- u8 ulx = regs->cl, uly = regs->ch, lrx = regs->dl, lry = regs->dh;
396
- u16 nbrows = GET_BDA(video_rows) + 1;
397
- if (lry >= nbrows)
398
- lry = nbrows - 1;
399
- u16 nbcols = GET_BDA(video_cols);
400
- if (lrx >= nbcols)
401
- lrx = nbcols - 1;
402
- int wincols = lrx - ulx + 1, winrows = lry - uly + 1;
403
- if (wincols <= 0 || winrows <= 0)
404
- return;
405
- int lines = regs->al;
406
- if (lines >= winrows)
407
- lines = 0;
408
- lines *= dir;
409
-
410
- // Scroll (or clear) window
411
- struct cursorpos win = {ulx, uly, GET_BDA(video_page)};
412
- struct cursorpos winsize = {wincols, winrows};
413
- struct carattr attr = {' ', regs->bh, 1};
414
- vgafb_scroll(win, winsize, lines, attr);
415
- }
416
-
417
- static void
418
- handle_1006(struct bregs *regs)
419
- {
420
- verify_scroll(regs, 1);
421
- }
422
-
423
- static void
424
- handle_1007(struct bregs *regs)
425
- {
426
- verify_scroll(regs, -1);
427
- }
428
-
429
- static void
430
- handle_1008(struct bregs *regs)
431
- {
432
- struct carattr ca = vgafb_read_char(get_cursor_pos(regs->bh));
433
- regs->al = ca.car;
434
- regs->ah = ca.attr;
435
- }
436
-
437
- static void noinline
438
- handle_1009(struct bregs *regs)
439
- {
440
- struct carattr ca = {regs->al, regs->bl, 1};
441
- struct cursorpos cp = get_cursor_pos(regs->bh);
442
- int count = regs->cx;
443
- while (count--)
444
- write_char(&cp, ca);
445
- }
446
-
447
- static void noinline
448
- handle_100a(struct bregs *regs)
449
- {
450
- struct carattr ca = {regs->al, regs->bl, 0};
451
- struct cursorpos cp = get_cursor_pos(regs->bh);
452
- int count = regs->cx;
453
- while (count--)
454
- write_char(&cp, ca);
455
- }
456
-
457
-
458
- static void
459
- handle_100b00(struct bregs *regs)
460
- {
461
- stdvga_set_border_color(regs->bl);
462
- }
463
-
464
- static void
465
- handle_100b01(struct bregs *regs)
466
- {
467
- stdvga_set_palette(regs->bl);
468
- }
469
-
470
- static void
471
- handle_100bXX(struct bregs *regs)
472
- {
473
- debug_stub(regs);
474
- }
475
-
476
- static void
477
- handle_100b(struct bregs *regs)
478
- {
479
- if (!CONFIG_VGA_STDVGA_PORTS) {
480
- handle_100bXX(regs);
481
- return;
482
- }
483
- switch (regs->bh) {
484
- case 0x00: handle_100b00(regs); break;
485
- case 0x01: handle_100b01(regs); break;
486
- default: handle_100bXX(regs); break;
487
- }
488
- }
489
-
490
-
491
- static void
492
- handle_100c(struct bregs *regs)
493
- {
494
- // XXX - page (regs->bh) is unused
495
- vgafb_write_pixel(regs->al, regs->cx, regs->dx);
496
- }
497
-
498
- static void
499
- handle_100d(struct bregs *regs)
500
- {
501
- // XXX - page (regs->bh) is unused
502
- regs->al = vgafb_read_pixel(regs->cx, regs->dx);
503
- }
504
-
505
- static void noinline
506
- handle_100e(struct bregs *regs)
507
- {
508
- // Ralf Brown Interrupt list is WRONG on bh(page)
509
- // We do output only on the current page !
510
- struct carattr ca = {regs->al, regs->bl, 0};
511
- struct cursorpos cp = get_cursor_pos(GET_BDA(video_page));
512
- write_teletype(&cp, ca);
513
- set_cursor_pos(cp);
514
- }
515
-
516
- static void
517
- handle_100f(struct bregs *regs)
518
- {
519
- regs->bh = GET_BDA(video_page);
520
- regs->al = GET_BDA(video_mode) | (GET_BDA(video_ctl) & 0x80);
521
- regs->ah = GET_BDA(video_cols);
522
- }
523
-
524
-
525
- static void
526
- handle_101000(struct bregs *regs)
527
- {
528
- if (regs->bl > 0x14)
529
- return;
530
- stdvga_attr_write(regs->bl, regs->bh);
531
- }
532
-
533
- static void
534
- handle_101001(struct bregs *regs)
535
- {
536
- stdvga_set_overscan_border_color(regs->bh);
537
- }
538
-
539
- static void
540
- handle_101002(struct bregs *regs)
541
- {
542
- stdvga_set_all_palette_reg(regs->es, (u8*)(regs->dx + 0));
543
- }
544
-
545
- static void
546
- handle_101003(struct bregs *regs)
547
- {
548
- stdvga_toggle_intensity(regs->bl);
549
- }
550
-
551
- static void
552
- handle_101007(struct bregs *regs)
553
- {
554
- if (regs->bl > 0x14)
555
- return;
556
- regs->bh = stdvga_attr_read(regs->bl);
557
- }
558
-
559
- static void
560
- handle_101008(struct bregs *regs)
561
- {
562
- regs->bh = stdvga_get_overscan_border_color();
563
- }
564
-
565
- static void
566
- handle_101009(struct bregs *regs)
567
- {
568
- stdvga_get_all_palette_reg(regs->es, (u8*)(regs->dx + 0));
569
- }
570
-
571
- static void noinline
572
- handle_101010(struct bregs *regs)
573
- {
574
- u8 rgb[3] = {regs->dh, regs->ch, regs->cl};
575
- stdvga_dac_write(GET_SEG(SS), rgb, regs->bx, 1);
576
- }
577
-
578
- static void
579
- handle_101012(struct bregs *regs)
580
- {
581
- stdvga_dac_write(regs->es, (u8*)(regs->dx + 0), regs->bx, regs->cx);
582
- }
583
-
584
- static void
585
- handle_101013(struct bregs *regs)
586
- {
587
- stdvga_select_video_dac_color_page(regs->bl, regs->bh);
588
- }
589
-
590
- static void noinline
591
- handle_101015(struct bregs *regs)
592
- {
593
- u8 rgb[3];
594
- stdvga_dac_read(GET_SEG(SS), rgb, regs->bx, 1);
595
- regs->dh = rgb[0];
596
- regs->ch = rgb[1];
597
- regs->cl = rgb[2];
598
- }
599
-
600
- static void
601
- handle_101017(struct bregs *regs)
602
- {
603
- stdvga_dac_read(regs->es, (u8*)(regs->dx + 0), regs->bx, regs->cx);
604
- }
605
-
606
- static void
607
- handle_101018(struct bregs *regs)
608
- {
609
- stdvga_pelmask_write(regs->bl);
610
- }
611
-
612
- static void
613
- handle_101019(struct bregs *regs)
614
- {
615
- regs->bl = stdvga_pelmask_read();
616
- }
617
-
618
- static void
619
- handle_10101a(struct bregs *regs)
620
- {
621
- stdvga_read_video_dac_state(&regs->bl, &regs->bh);
622
- }
623
-
624
- static void
625
- handle_10101b(struct bregs *regs)
626
- {
627
- stdvga_perform_gray_scale_summing(regs->bx, regs->cx);
628
- }
629
-
630
- static void
631
- handle_1010XX(struct bregs *regs)
632
- {
633
- debug_stub(regs);
634
- }
635
-
636
- static void
637
- handle_1010(struct bregs *regs)
638
- {
639
- if (!CONFIG_VGA_STDVGA_PORTS) {
640
- handle_1010XX(regs);
641
- return;
642
- }
643
- switch (regs->al) {
644
- case 0x00: handle_101000(regs); break;
645
- case 0x01: handle_101001(regs); break;
646
- case 0x02: handle_101002(regs); break;
647
- case 0x03: handle_101003(regs); break;
648
- case 0x07: handle_101007(regs); break;
649
- case 0x08: handle_101008(regs); break;
650
- case 0x09: handle_101009(regs); break;
651
- case 0x10: handle_101010(regs); break;
652
- case 0x12: handle_101012(regs); break;
653
- case 0x13: handle_101013(regs); break;
654
- case 0x15: handle_101015(regs); break;
655
- case 0x17: handle_101017(regs); break;
656
- case 0x18: handle_101018(regs); break;
657
- case 0x19: handle_101019(regs); break;
658
- case 0x1a: handle_10101a(regs); break;
659
- case 0x1b: handle_10101b(regs); break;
660
- default: handle_1010XX(regs); break;
661
- }
662
- }
663
-
664
-
665
- static void
666
- handle_101100(struct bregs *regs)
667
- {
668
- stdvga_load_font(regs->es, (void*)(regs->bp+0), regs->cx
669
- , regs->dx, regs->bl, regs->bh);
670
- }
671
-
672
- static void
673
- handle_101101(struct bregs *regs)
674
- {
675
- stdvga_load_font(get_global_seg(), vgafont14, 0x100, 0, regs->bl, 14);
676
- }
677
-
678
- static void
679
- handle_101102(struct bregs *regs)
680
- {
681
- stdvga_load_font(get_global_seg(), vgafont8, 0x100, 0, regs->bl, 8);
682
- }
683
-
684
- static void
685
- handle_101103(struct bregs *regs)
686
- {
687
- stdvga_set_text_block_specifier(regs->bl);
688
- }
689
-
690
- static void
691
- handle_101104(struct bregs *regs)
692
- {
693
- stdvga_load_font(get_global_seg(), vgafont16, 0x100, 0, regs->bl, 16);
694
- }
695
-
696
- static void
697
- handle_101110(struct bregs *regs)
698
- {
699
- stdvga_load_font(regs->es, (void*)(regs->bp+0), regs->cx
700
- , regs->dx, regs->bl, regs->bh);
701
- set_scan_lines(regs->bh);
702
- }
703
-
704
- static void
705
- handle_101111(struct bregs *regs)
706
- {
707
- stdvga_load_font(get_global_seg(), vgafont14, 0x100, 0, regs->bl, 14);
708
- set_scan_lines(14);
709
- }
710
-
711
- static void
712
- handle_101112(struct bregs *regs)
713
- {
714
- stdvga_load_font(get_global_seg(), vgafont8, 0x100, 0, regs->bl, 8);
715
- set_scan_lines(8);
716
- }
717
-
718
- static void
719
- handle_101114(struct bregs *regs)
720
- {
721
- stdvga_load_font(get_global_seg(), vgafont16, 0x100, 0, regs->bl, 16);
722
- set_scan_lines(16);
723
- }
724
-
725
- static void
726
- handle_101120(struct bregs *regs)
727
- {
728
- SET_IVT(0x1f, SEGOFF(regs->es, regs->bp));
729
- }
730
-
731
- void
732
- load_gfx_font(u16 seg, u16 off, u8 height, u8 bl, u8 dl)
733
- {
734
- u8 rows;
735
-
736
- SET_IVT(0x43, SEGOFF(seg, off));
737
- switch(bl) {
738
- case 0:
739
- rows = dl;
740
- break;
741
- case 1:
742
- rows = 14;
743
- break;
744
- case 3:
745
- rows = 43;
746
- break;
747
- case 2:
748
- default:
749
- rows = 25;
750
- break;
751
- }
752
- SET_BDA(video_rows, rows - 1);
753
- SET_BDA(char_height, height);
754
- }
755
-
756
- static void
757
- handle_101121(struct bregs *regs)
758
- {
759
- load_gfx_font(regs->es, regs->bp, regs->cx, regs->bl, regs->dl);
760
- }
761
-
762
- static void
763
- handle_101122(struct bregs *regs)
764
- {
765
- load_gfx_font(get_global_seg(), (u32)vgafont14, 14, regs->bl, regs->dl);
766
- }
767
-
768
- static void
769
- handle_101123(struct bregs *regs)
770
- {
771
- load_gfx_font(get_global_seg(), (u32)vgafont8, 8, regs->bl, regs->dl);
772
- }
773
-
774
- static void
775
- handle_101124(struct bregs *regs)
776
- {
777
- load_gfx_font(get_global_seg(), (u32)vgafont16, 16, regs->bl, regs->dl);
778
- }
779
-
780
- static void
781
- handle_101130(struct bregs *regs)
782
- {
783
- switch (regs->bh) {
784
- case 0x00: {
785
- struct segoff_s so = GET_IVT(0x1f);
786
- regs->es = so.seg;
787
- regs->bp = so.offset;
788
- break;
789
- }
790
- case 0x01: {
791
- struct segoff_s so = GET_IVT(0x43);
792
- regs->es = so.seg;
793
- regs->bp = so.offset;
794
- break;
795
- }
796
- case 0x02:
797
- regs->es = get_global_seg();
798
- regs->bp = (u32)vgafont14;
799
- break;
800
- case 0x03:
801
- regs->es = get_global_seg();
802
- regs->bp = (u32)vgafont8;
803
- break;
804
- case 0x04:
805
- regs->es = get_global_seg();
806
- regs->bp = (u32)vgafont8 + 128 * 8;
807
- break;
808
- case 0x05:
809
- regs->es = get_global_seg();
810
- regs->bp = (u32)vgafont14alt;
811
- break;
812
- case 0x06:
813
- regs->es = get_global_seg();
814
- regs->bp = (u32)vgafont16;
815
- break;
816
- case 0x07:
817
- regs->es = get_global_seg();
818
- regs->bp = (u32)vgafont16alt;
819
- break;
820
- default:
821
- dprintf(1, "Get font info BH(%02x) was discarded\n", regs->bh);
822
- return;
823
- }
824
- // Set byte/char of on screen font
825
- regs->cx = GET_BDA(char_height) & 0xff;
826
-
827
- // Set Highest char row
828
- regs->dl = GET_BDA(video_rows);
829
- }
830
-
831
- static void
832
- handle_1011XX(struct bregs *regs)
833
- {
834
- debug_stub(regs);
835
- }
836
-
837
- static void
838
- handle_1011(struct bregs *regs)
839
- {
840
- if (CONFIG_VGA_STDVGA_PORTS) {
841
- switch (regs->al) {
842
- case 0x00: handle_101100(regs); return;
843
- case 0x01: handle_101101(regs); return;
844
- case 0x02: handle_101102(regs); return;
845
- case 0x03: handle_101103(regs); return;
846
- case 0x04: handle_101104(regs); return;
847
- case 0x10: handle_101110(regs); return;
848
- case 0x11: handle_101111(regs); return;
849
- case 0x12: handle_101112(regs); return;
850
- case 0x14: handle_101114(regs); return;
851
- }
852
- }
853
- switch (regs->al) {
854
- case 0x30: handle_101130(regs); break;
855
- case 0x20: handle_101120(regs); break;
856
- case 0x21: handle_101121(regs); break;
857
- case 0x22: handle_101122(regs); break;
858
- case 0x23: handle_101123(regs); break;
859
- case 0x24: handle_101124(regs); break;
860
- default: handle_1011XX(regs); break;
861
- }
862
- }
863
-
864
-
865
- static void
866
- handle_101210(struct bregs *regs)
867
- {
868
- u16 crtc_addr = GET_BDA(crtc_address);
869
- if (crtc_addr == VGAREG_MDA_CRTC_ADDRESS)
870
- regs->bx = 0x0103;
871
- else
872
- regs->bx = 0x0003;
873
- regs->cx = GET_BDA(video_switches) & 0x0f;
874
- }
875
-
876
- static void
877
- handle_101230(struct bregs *regs)
878
- {
879
- u8 mctl = GET_BDA(modeset_ctl);
880
- u8 vswt = GET_BDA(video_switches);
881
- switch (regs->al) {
882
- case 0x00:
883
- // 200 lines
884
- mctl = (mctl & ~0x10) | 0x80;
885
- vswt = (vswt & ~0x0f) | 0x08;
886
- break;
887
- case 0x01:
888
- // 350 lines
889
- mctl &= ~0x90;
890
- vswt = (vswt & ~0x0f) | 0x09;
891
- break;
892
- case 0x02:
893
- // 400 lines
894
- mctl = (mctl & ~0x80) | 0x10;
895
- vswt = (vswt & ~0x0f) | 0x09;
896
- break;
897
- default:
898
- dprintf(1, "Select vert res (%02x) was discarded\n", regs->al);
899
- break;
900
- }
901
- SET_BDA(modeset_ctl, mctl);
902
- SET_BDA(video_switches, vswt);
903
- regs->al = 0x12;
904
- }
905
-
906
- static void
907
- handle_101231(struct bregs *regs)
908
- {
909
- u8 v = (regs->al & 0x01) << 3;
910
- u8 mctl = GET_BDA(video_ctl) & ~0x08;
911
- SET_BDA(video_ctl, mctl | v);
912
- regs->al = 0x12;
913
- }
914
-
915
- static void
916
- handle_101232(struct bregs *regs)
917
- {
918
- if (CONFIG_VGA_STDVGA_PORTS) {
919
- stdvga_enable_video_addressing(regs->al);
920
- regs->al = 0x12;
921
- }
922
- }
923
-
924
- static void
925
- handle_101233(struct bregs *regs)
926
- {
927
- u8 v = ((regs->al << 1) & 0x02) ^ 0x02;
928
- u8 v2 = GET_BDA(modeset_ctl) & ~0x02;
929
- SET_BDA(modeset_ctl, v | v2);
930
- regs->al = 0x12;
931
- }
932
-
933
- static void
934
- handle_101234(struct bregs *regs)
935
- {
936
- SET_BDA(video_ctl, (GET_BDA(video_ctl) & ~0x01) | (regs->al & 0x01));
937
- regs->al = 0x12;
938
- }
939
-
940
- static void
941
- handle_101235(struct bregs *regs)
942
- {
943
- debug_stub(regs);
944
- regs->al = 0x12;
945
- }
946
-
947
- static void
948
- handle_101236(struct bregs *regs)
949
- {
950
- debug_stub(regs);
951
- regs->al = 0x12;
952
- }
953
-
954
- static void
955
- handle_1012XX(struct bregs *regs)
956
- {
957
- debug_stub(regs);
958
- }
959
-
960
- static void
961
- handle_1012(struct bregs *regs)
962
- {
963
- if (CONFIG_VGA_CIRRUS && regs->bl >= 0x80) {
964
- clext_1012(regs);
965
- return;
966
- }
967
-
968
- switch (regs->bl) {
969
- case 0x10: handle_101210(regs); break;
970
- case 0x30: handle_101230(regs); break;
971
- case 0x31: handle_101231(regs); break;
972
- case 0x32: handle_101232(regs); break;
973
- case 0x33: handle_101233(regs); break;
974
- case 0x34: handle_101234(regs); break;
975
- case 0x35: handle_101235(regs); break;
976
- case 0x36: handle_101236(regs); break;
977
- default: handle_1012XX(regs); break;
978
- }
979
- }
980
-
981
-
982
- // Write string
983
- static void noinline
984
- handle_1013(struct bregs *regs)
985
- {
986
- struct cursorpos cp = {regs->dl, regs->dh, regs->bh};
987
- u16 count = regs->cx;
988
- u8 *offset_far = (void*)(regs->bp + 0);
989
- u8 attr = regs->bl;
990
- while (count--) {
991
- u8 car = GET_FARVAR(regs->es, *offset_far);
992
- offset_far++;
993
- if (regs->al & 2) {
994
- attr = GET_FARVAR(regs->es, *offset_far);
995
- offset_far++;
996
- }
997
-
998
- struct carattr ca = {car, attr, 1};
999
- write_teletype(&cp, ca);
1000
- }
1001
-
1002
- if (regs->al & 1)
1003
- set_cursor_pos(cp);
1004
- }
1005
-
1006
-
1007
- static void
1008
- handle_101a00(struct bregs *regs)
1009
- {
1010
- regs->bx = GET_BDA(dcc_index);
1011
- regs->al = 0x1a;
1012
- }
1013
-
1014
- static void
1015
- handle_101a01(struct bregs *regs)
1016
- {
1017
- SET_BDA(dcc_index, regs->bl);
1018
- dprintf(1, "Alternate Display code (%02x) was discarded\n", regs->bh);
1019
- regs->al = 0x1a;
1020
- }
1021
-
1022
- static void
1023
- handle_101aXX(struct bregs *regs)
1024
- {
1025
- debug_stub(regs);
1026
- }
1027
-
1028
- static void
1029
- handle_101a(struct bregs *regs)
1030
- {
1031
- switch (regs->al) {
1032
- case 0x00: handle_101a00(regs); break;
1033
- case 0x01: handle_101a01(regs); break;
1034
- default: handle_101aXX(regs); break;
1035
- }
1036
- }
1037
-
1038
-
1039
- struct video_func_static static_functionality VAR16 = {
1040
- .modes = 0x00, // Filled in by stdvga_build_video_param()
1041
- .scanlines = 0x07, // 200, 350, 400 scan lines
1042
- .cblocks = 0x02, // mamimum number of visible charsets in text mode
1043
- .active_cblocks = 0x08, // total number of charset blocks in text mode
1044
- .misc_flags = 0x0ce7,
1045
- };
1046
-
1047
- static void
1048
- handle_101b(struct bregs *regs)
1049
- {
1050
- u16 seg = regs->es;
1051
- struct video_func_info *info = (void*)(regs->di+0);
1052
- memset_far(seg, info, 0, sizeof(*info));
1053
- // Address of static functionality table
1054
- SET_FARVAR(seg, info->static_functionality
1055
- , SEGOFF(get_global_seg(), (u32)&static_functionality));
1056
-
1057
- // Hard coded copy from BIOS area. Should it be cleaner ?
1058
- memcpy_far(seg, info->bda_0x49, SEG_BDA, (void*)0x49
1059
- , sizeof(info->bda_0x49));
1060
- memcpy_far(seg, info->bda_0x84, SEG_BDA, (void*)0x84
1061
- , sizeof(info->bda_0x84));
1062
-
1063
- SET_FARVAR(seg, info->dcc_index, GET_BDA(dcc_index));
1064
- SET_FARVAR(seg, info->colors, 16);
1065
- SET_FARVAR(seg, info->pages, 8);
1066
- SET_FARVAR(seg, info->scan_lines, 2);
1067
- SET_FARVAR(seg, info->video_mem, 3);
1068
- regs->al = 0x1B;
1069
- }
1070
-
1071
-
1072
- static void
1073
- handle_101c(struct bregs *regs)
1074
- {
1075
- u16 seg = regs->es;
1076
- void *data = (void*)(regs->bx+0);
1077
- u16 states = regs->cx;
1078
- u8 cmd = regs->al;
1079
- if (states & ~0x07 || cmd > 2)
1080
- goto fail;
1081
- int ret = vgahw_save_restore(states | (cmd<<8), seg, data);
1082
- if (ret < 0)
1083
- goto fail;
1084
- if (cmd == 0)
1085
- regs->bx = ret / 64;
1086
- regs->al = 0x1c;
1087
- fail:
1088
- return;
1089
- }
1090
-
1091
- static void
1092
- handle_10XX(struct bregs *regs)
1093
- {
1094
- debug_stub(regs);
1095
- }
1096
-
1097
- // INT 10h Video Support Service Entry Point
1098
- void VISIBLE16
1099
- handle_10(struct bregs *regs)
1100
- {
1101
- debug_enter(regs, DEBUG_VGA_10);
1102
- swcursor_pre_handle10(regs);
1103
-
1104
- switch (regs->ah) {
1105
- case 0x00: handle_1000(regs); break;
1106
- case 0x01: handle_1001(regs); break;
1107
- case 0x02: handle_1002(regs); break;
1108
- case 0x03: handle_1003(regs); break;
1109
- case 0x04: handle_1004(regs); break;
1110
- case 0x05: handle_1005(regs); break;
1111
- case 0x06: handle_1006(regs); break;
1112
- case 0x07: handle_1007(regs); break;
1113
- case 0x08: handle_1008(regs); break;
1114
- case 0x09: handle_1009(regs); break;
1115
- case 0x0a: handle_100a(regs); break;
1116
- case 0x0b: handle_100b(regs); break;
1117
- case 0x0c: handle_100c(regs); break;
1118
- case 0x0d: handle_100d(regs); break;
1119
- case 0x0e: handle_100e(regs); break;
1120
- case 0x0f: handle_100f(regs); break;
1121
- case 0x10: handle_1010(regs); break;
1122
- case 0x11: handle_1011(regs); break;
1123
- case 0x12: handle_1012(regs); break;
1124
- case 0x13: handle_1013(regs); break;
1125
- case 0x1a: handle_101a(regs); break;
1126
- case 0x1b: handle_101b(regs); break;
1127
- case 0x1c: handle_101c(regs); break;
1128
- case 0x4f: handle_104f(regs); break;
1129
- default: handle_10XX(regs); break;
1130
- }
1131
- }