Commit graph

221 commits

Author SHA1 Message Date
Fabian 4379e5ef3e Use qemu as a test oracle instead of the local machine
Recently distributions started disabling the CONFIG_MODIFY_LDT_SYSCALL
kernel config, breaking parts of the qemu test. qemu is very suitable to
run these tests in the same configuration as v86 (booting from
linux3.iso, exchanging files using 9p fs and controlling via serial
console).
2020-07-21 20:10:14 -05:00
Amaan Cheval ce1ca76aea Backup and generate diff in generate_{jit,interpreter}, not Makefile 2020-07-21 20:10:14 -05:00
Amaan Cheval 7cf28d3d76 Have Makefile generate diff's for instruction tables as well 2020-07-21 20:10:14 -05:00
Amaan Cheval 96e64acdb8 Address feedback to clean Makefile up for including generated tables 2020-07-21 20:10:14 -05:00
Amaan Cheval 01e868a481 Add command-line switches to generate_{jit,interpreter}.js
In order of precedence:
--all generates all tables
--table jit{,0f_16,0f_32} / interpreter{,0f_16,0f_32}

And optionally:
--output-dir /path/to/output (defaults to v86 build directory)

This is in prep to let the make system generate individual tables as required
using this script instead of the script generating all 3.

Have output of generate table files use .c suffix

Remove write_sync_if_changed

The function existed to stop make from recompiling v86*.wasm everytime from
having the tables regenerated. With the upcoming change, this becomes unnecessary.

Correct Makefile to show dependency structure for generate scripts
2020-07-21 20:10:14 -05:00
Amaan Cheval e7cfc98922 "#include" generated instruction tables and update build process 2020-07-21 20:10:14 -05:00
Fabian fcfcc76034 Delete more JavaScript 2020-07-21 20:10:13 -05:00
Amaan Cheval 01f2d8f70f Simplify Makefile's mkdir 2020-07-21 20:10:13 -05:00
Amaan Cheval 12e6239d29 cov_data -> coverage_data in Makefile 2020-07-21 20:10:13 -05:00
Amaan Cheval 8b62c8c44d Improve name of coverage variable in Makefile 2020-07-21 20:10:13 -05:00
Amaan Cheval 91cc94e556 Coverage Reporter: Log raw JSON data for additional analyses as well 2020-07-21 20:10:13 -05:00
Amaan Cheval 538a2cb64c Major refactor for coverage logger
- Moved all helper functions to coverage.js
- Refactor individual cov_*[func_id] objects to coverage[func_id].*
- Write coverage data to its own directory (./build/coverage/coverage_data*)
- Enable/disable coverage logging in do_many_cycles to account for exceptions
- Better naming
- Minor stylistic refactoring
2020-07-21 20:10:13 -05:00
Amaan Cheval de01e6880d Allow compiling coverage-enabled v86-debug.wasm and covreport generation
Usage:
- make build/v86-debug.wasm ENABLE_COV=1 (assuming the file doesn't already
exist)
- make covreport
2020-07-21 20:10:13 -05:00
Fabian e6c8d8eabb Add clang-tidy 2020-07-21 20:10:13 -05:00
Fabian a7328f369c Make wget less verbose 2020-07-21 20:10:13 -05:00
Fabian fb1cb5e800 Run qemu tests in debug mode 2020-07-21 20:10:13 -05:00
Fabian d771b7bc7f Remove more unused JS 2020-07-21 20:10:13 -05:00
Awal Garg 8222d2e6e0 Squash
restore memcpy comment
delete all the things!
fix jshint issues
restore memcpy comment
remove duplicate fxsave assignment
Count cache drops
Use already available physical address instead of calling read_imm8
Remove useless assertion
Just move around to reduce later diff
Run jit paging test with assertions enabled
Run jit-paging test on CI
Extend jit-paging test
Fix deleting invalidated code across memory pages
Add jit-paging test to gitlab ci
Remove jit_in_progress
Clean up old comments, use bool for jit_jump
Fix state image not begin garbage collected
Add ENABLE_PROFILER_TIMES to configure slow profiling times
Move to jit_generate and jit_run_interpreted to separate function
Add missing struct field
Fix: Don't write jit cache entry until no more faults can happen
Download image for jit paging test
Add missing initialiser
Mark jit_{generate,run_interpreted} as static
Specify full path to profiler.h
Clean up duplicate/missing declaration after rebase
mmap error handling, line length and fix some warnings
remove further unused code
move js imports to single header file
2020-07-21 20:10:13 -05:00
Awal Garg c9a1db0666 cleanup makefile 2020-07-21 20:10:13 -05:00
Awal Garg 93926f0c31 enable separate compilation 2020-07-21 20:10:13 -05:00
Amaan Cheval 8354a1dafb Speed up NASM tests' fixture generation phase
The gen_fixtures.js currently generates fixtures for all
host_executables (*.bin) files, regardless of whether they need to be
regenerated or not.

The script speeds the process up by:

- Listing all files that need fixtures
- Finding nr_of_cpus (to parallelize execution)
- Dividing them up to roughly even "chunks" based on nr_of_cpus
- Spawning N gdb processes, which iteratively call a user-defined command named
  "extract-state" (see gdb-extract-def); the command automatically loads the new
  file and extracts its state into a fixture file

Rough benchmarks for 3725 tests:

Old method (after `rm build/*.fixture`):
make -j4  325.23s user 40.28s system 206% cpu 2:57.38 total
make -j4  342.65s user 43.73s system 289% cpu 2:13.23 total
make -j4  435.69s user 55.61s system 289% cpu 2:49.63 total

New method:
node gen_fixtures.js  11.85s user 4.86s system 140% cpu 11.890 total
node gen_fixtures.js  12.48s user 5.48s system 114% cpu 15.736 total
node gen_fixtures.js  14.54s user 6.33s system 141% cpu 14.769 total
2020-07-21 20:10:13 -05:00
Fabian cbb056726a Add profiling annotations 2020-07-21 20:10:13 -05:00
Fabian 171de68b98 Makefile: Create build directory if necessary 2020-07-21 20:10:13 -05:00
Fabian b8a7ca3a43 Temporarily disable separate compilation of codegen 2020-07-21 20:10:13 -05:00
Fabian 136fad7e01 Include capstone.js and libwabt.js for debugging 2020-07-21 20:10:13 -05:00
Fabian 02f75f476c Run kvm-unit-test in debug mode 2020-07-21 20:10:13 -05:00
Awal Garg 5f104e83da fix Makefile conflict 2020-07-21 20:10:13 -05:00
Awal Garg 85a67caaa7 nit fixes 2020-07-21 20:10:13 -05:00
Awal Garg ef1a6f0508 move jshint to .jshint.json 2020-07-21 20:10:13 -05:00
Awal Garg 51b6bc4e63 reenable separate compilation for codegen 2020-07-21 20:10:13 -05:00
Awal Garg 04f91d8935 codegen refactor 2020-07-21 20:10:13 -05:00
Awal Garg 243ffce941 add jshint to build 2020-07-21 20:10:13 -05:00
Awal Garg 7997defdfb add codegen-test to CI 2020-07-21 20:10:13 -05:00
Amaan Cheval 8df600d31a Add LLVM IR to resolve call_indirect for JIT cache calls 2020-07-21 20:10:13 -05:00
Awal Garg c244eace01 use load_wasm from browser/lib.js 2020-07-21 20:10:12 -05:00
Fabian 975a06269e Squash
2e469796 Minor
fab422ef Improve generation of 0f instructions
08ad7fe9 Improved if-else generation
3f81014d Minor: Align test output
4a3a84ef Generate modrm tests
61aa1875 Simplify
a6e47954 Generate decoding of immediate operands
435b2c10 Fix warnings
e4933042 Add missing immediate operand
3f3810c7 Generate immediate operands for instructions with modrm byte
a0aa7b1f Make memory layout in nasm tests clearer
6b8ef212 Remove 'g' property from instruction table (implied by 'e')
bf15c58c Remove unused declarations
1e543035 Remove useless `| 0` and `>>> 0` javascriptisms
1ccc5d53 Fix headers
8b40c532 Update qemu tests with changes from qemu
ec9b0fb5 Port xchg instructions to C
c73613e7 Port virt_boundary_* to C
d61d1241 Add headers
fd19f22c Make written value in write8 and write16 int32_t
497dcaec Generate read_imm for instructions with a modrm byte
8b7003d6 Generate read_imm8s
0cc75498 Remove read_op
9d716086 Trigger unimplemented_sse for partial sse instructions with prefix
8d5edd03 Remove unimplmented sse c-to-js hack
585d3565 Remove | 0
308124b2 Use int32_t as return value
f193f8e1 Use JS version of cvttsd2si for now
12747b97 Generate trigger_ud for missing modrm branches
770f674e Split 0f00 and 0f01 into multiple instructions depending on modrm bits
1cb372a3 Generate decoder for some 0f-prefix instructions
cec7bc63 Disable unused parameter warnings in instruction functions
807665b1 Generate read_imm for 0f/jmpcc
cdf6eccc Generate modrm decoding for shld
04528429 Create temporary files in /tmp/, not cwd
d8f3fbd8 Generate modrm/imm decoding for shld
00ef0942 Generate modrm decoding for bts
f531984b Generate modrm decoding for shrd and imul
07569c53 Generate modrm decoding cmpxchg
535ff190 Generate modrm decoding for lfs/lgs/lss
2f8ced8d Generate modrm decoding for btr and btc
95de6c66 Generate modrm decoding for movzx
c4d07e7e Generate modrm decoding for bsf and bsr
f0985d26 Generate modrm decoding for movsx
4b30937a Generate modrm decoding for xadd
a422eb27 Generate modrm decoding for movnti
e5501d3c Generate modrm decoding for mov to/from control/debug registers
bce11ec5 Generate modrm decoding for lar/lsl
5729a23c Fix access to DR4 and DR5 when cr4.DE is clear
44269a81 Specify immediate size explicitly instead of inferring it
82b2867a Fix STR instruction
98a9cc89 Log failing assertion
6d2f9964 Fix rdtsc
00260694 Log GP exceptions
7916883d Port trigger_ud and trigger_nm to C
36fedae9 Remove unused code
e08fabd0 Generate modrm decoding for 0f00 and 0f01
8ae8174d Generate modrm decoding for 0fae and 0fc7 (fxsave, cmpxchg8, etc.)
26168164 Generate modrm+immediate decoding for 0fba (bit test with immediate operand)
6adf7fa7 Simplify create_tests.js (unused prefix call)
c77cbdd8 Add comments about the implementation of pop [addr]
4640b4fe Simplify prefix call
a81a5497 Don't use var
3ca5d13d Separate call name and arguments in code generator
3191a543 Simplify other prefix call (8D/lea)
5185080e Update generated code (stylistic changes and #ud generation)
93b51d41 Remove unused wasm externals
e4af0a7f Avoid hardcoding special cases in code generator (lea, pop r/m)
654a2b49 Avoid hardcoding special cases in code generator (enter/jumpf/callf)
fd1a1e86 Commit generated code (only stylistic changes)
7310fd1a Simplify code generator by merging code for with and without 0f prefix
e7eae4af Simplify code generator by merging code for immediate operands
00fafd8a Improve assertions
db084e49 Simplify code generator (modrm if-else)
0a0e4c9e Improve code generation of switch-case
ce292795 Clarify some comments
37cf33fa Generate code in if/else blocks
cbcc33fc Document naming scheme
e30b97eb Generate modrm decoding for 0f12 (sse) instruction
24b72c2f movlpd cannot be used for register-to-register moves
72d72995 Generate modrm decoding for 0f13 (sse) instruction and disable register-to-register moving
75d76fbb Generate modrm decoding for 0f14 (sse) instruction
ac8965a7 Generate modrm decoding for 0f28-0f2b (movap, movntp)
e919d33e Generate modrm decoding for cvttsd2si
5f2ca2b4 Generate modrm decoding for andp and xorp
c8d1c6de Generate modrm decoding for 0f60-0f70 (sse instructions)
ae4ed46d Add multi-byte nop and prefetch to nasm test, generate modrm decoding
718a1acf Print qemu test error message more useful
d1ecc37e Generate modrm decoding for 0f70-0f80 (sse instructions)
6a7219a5 Generate modrm decoding for popcnt
25278217 Generate modrm decoding for 0f71-0f73 (sse shift with immediate byte)
ed1ec81b Generate modrm decoding for the remaining sse instructions (0fc0-0fff)
42bc5a6f Use 64-bit multiplication for native code
dda3fb39 Remove old modrm-decoding functions
717975ef Move register access functions to cpu.c
aee8138f Remove read_op, read_sib, read_op0F, read_disp
f31317f2 Rename xmm/mmx register access functions
a525e70b Remove 32-bit access to reg_xmm and reg_mmx
c803eabc Rename s8/s16/s32 to i8/i16/i32
9fbd2ddf Don't use uninitialised structs
942eb4f7 Use 64-bit load for mmx registers and assert reg64 and reg128 size
f94ec612 Use 64-bit writes for write_xmm64
08022de9 Use more efficient method for some 128-bit stores
9d5b084c Make timestamp counter unsigned
2ef388b3 Pass 64-bit value to safe_write64
4cb2b1be Optimise safe_write64 and safe_write128
b0ab09fb Implement psllq (660ff3)
9935e5d4 Optimise safe_read64s and safe_read128s
af9ea1cc Log cl in cpuid only if relevant
be5fe23e Add multi-op cache (disabled by default through ENABLE_JIT macro) and JIT paging test (similar to QEMU test).
aa2f286e Don't initialise group_dirtiness with 1 as it increases the binary size significantly
b8e14ed9 Remove unused reg_xmm32s
bc726e03 Implement dbg_log for native code with format characters 'd' and 'x'
454039d6 Fix store task register
63a4b349 Remove unnecessary parens and clean up some log statements
4cc96814 Add logop and dbg_trace imports
7940655d Only inhibit interrupts if the interrupt flag was 0 in STI
876c68a7 Split create_tests into create_tests and generate_interpreter
aa82499f Move detection of string instructions to x86_table
f3840ec2 Move C ast to separate file
90400703 Skip tests for lfence/mfence/sfence, clarify their encoding
4a9d8204 elf: Hide log messages when log level is zero
a601c526 Allow setting log level via settings
8a624453 Add cpu_exception_hook to debug builds
f9e335bf Nasm: Test exceptions
599ad088 logop: Format instruction pointer as unsigned
f95cf22b Don't skip zero dividing tests
2a655a0e Remove get_seg_prefix_ds from read_moffs (preparation for calling read_moffs from the code generator)
bc580b71 Remove obsolete comment
e556cee0 Fix nasmtest dependencies in makefile and clean
dcb1e72b Use all cores on travis
86efa737 Replace all instances of u32 & 0xFFFF with the respective u16 accesses
98b9f439 Use u8 instead of bit-shifts and masks from u32
b43f6569 Replace all instances of u32 >> 16 with the respective u16 accesses
9bfa72c7 Remove unnecessary parens
9cf93734 Clean up remaining instance of u32 with a mask instead of u16
22d4117f Correct order of writes in virt_boundary_write32
6734c7c1 Fix keyboard on ios, fixes #105
858a4506 Add missing file, c_ast.js
1d62e39e Move instruction naming scheme into function
f4816852 Reorder some code
69d49788 Minor improvements
0493e05f Add util.js
af9000c1 Improve full test
e5feba31 Add missing export
c7c42065 Replace prefix_call with custom_resolve_modrm
3186e6ad Add support for "%%" format string to dbg_log_wasm for printf import
efe54fad Add barebones instrumentation profiler (disabled by default).
c9f0d462 Implement movlps m64, xmm and enable its test
42869a12 Add tests for cross-page reads/writes confirmed with byte reads/writes
d68976ea Mask word values in port byte reads
9758d51e Add PS2_LOG_VERBOSE
5f52f037 Update NASM Makefile to include all dependencies to prevent unnecessary recompilation
2c71f927 Have NASM test generator use a seedable PRNG to allow for faster incremental tests
e4aa45bb Add chunk{16,32}_rw paging tests; instructions that read and write to memory
bdf538a2 add codegen to cpu constructor
aa76ce8e add resolve_modrm16
14d7ecf1 refactor codegen
b710319f [rebased] Merge branch codegen
0565ea42 minor refactoring
071dff3f temporary fix for automatic cast warnings
57c504f2 fix modrm16 issue
c2db5d9e jit modrm32
85c04245 reinstate modrm_fn0 and modrm_fn1
be65dafd add ip and previous ip manipulating functions
ae00ef89 update codegen js interface
530a74fa squashed commit for refactor
2c692199 add codegen-test to build
c15afe68 prefix gen to codegen api
c9611533 codegen tests fixes
2020-07-21 20:10:12 -05:00
Amaan Cheval ad629e1a7b Remove unsupported Closure Compiler flags 2020-07-21 20:10:12 -05:00
Fabian 08a51f7b0c Add libv86-debug.js target 2020-07-21 20:10:11 -05:00
Fabian 0ef4508b22 Add v86.wasm to test targets 2020-07-21 20:10:11 -05:00
Fabian 645991b30f Makefile: Use $(MAKE) 2020-07-21 20:10:11 -05:00
Fabian fa65e9cef9 Fix output wrapper (fixes loading libv86.js in browsers) 2020-07-21 20:10:11 -05:00
Fabian c46a6f310a Add LEGALIZE_JS_FFI and BINARYEN_TRAP_MODE for efficient 64-bit operations 2020-07-21 20:10:11 -05:00
Fabian aebcff84ed Big squash
e72eac2fc A few more sse instructions
bdf83e0f0 temp rebase to resolve conflicts
58aa08353 replace all usage of modrm_byte with the set/get fns
7f1dbadf4 move registers to wasm memory
9a0432708 remove stdio inclusion
60f49f735 partial branch port of read_e8
747c51979 partial port of do_div32
8700c3042 remove wasm file from repo
c69bc5c91 revert div32 to js
ead0195b9 move last_op1 to wasm
16e9a2801 move last_op2 to wasm
4b5e749c8 move last_op_size to wasm
3a02ec98c move last_add_result, last_result, flags_changed to wasm
882b5476b implement add in C
8a8b15e11 move flags to wasm
4667917a9 implement getcf in C
1199537a1 implement adc in C
a8a2f81ba implement sub in C
697cb4070 implement sbb in C
1e4e08079 implement inc in C
35259ddc3 implement dec in C
82498a632 implement neg in C
47fe549af copy opsize and reg constants
39c0f07aa implement mul8 in C
443aef4b2 implement imul8 in C
afd2ec864 refactor memory accessing from C
f937617bc implement mul16 in C
af430b023 rewrite reg_* macros
6639f23a7 implement imul16 in C
6c490e88d add wasm build to makefile
ea698b8bc refactor modrm_byte access
71899e821 split cpu.c into individual files
00dc878be capitalize flag constants
e1ccf9477 remove unused buffer view
f0175e480 refactor JS to wasm replacement
f52c5f3a6 add assert.h
ccf73539e implement imul_reg16 in C
8ae41facd implement do_mul32 in C and port mul32_result to wasm memory
77d3875eb implement do_imul32 in C
af1cdc85d implement mul32 in C
820f514e3 implement imul32 in C
e165f02e0 implement imul_reg32 in C
fdee993e9 implement xadd8 in C
4e5d6f1c2 implement xadd16 in C
1c903565f implement xadd32 in C
1be111a93 implement getaf in C
4c2bc9f43 implement bcd_daa in C
3852cee61 implement bcd_das in C
ed68e2777 implement bcd_aad in C
b56c17640 implement bcd_aaa in C
5650e48c6 implement bcd_aas in C
99aeb5682 implement and in C
39d2308aa implement or in C
c76e59a0b implement xor in C
b14b87b95 async wasm instantiation
7f11605bc implement rol8 in C
161c662cf implement rol16 in C
37bf420f6 implement rol32 in C
921f06821 implement rcl8 in C
2f1bf0c2d implement rcl16 in C
ad1d56ebe implement rcl32 in C
ebcded69e implement ror8 in C
9bc225ff0 implement ror16 in C
403125717 implement ror32 in C
2a21a0896 implement rcr8 in C
80bf2667e implement rcr16 in C
f8fe46c47 implement rcr32 in C
95493a272 split error_code flag in call_interrupt_vector
a6f19110e export throw_cpu_exception to C
dd5d8ce0d export call_interrupt_vector to C
537c08f65 implement raise_exception_with_code to C
8347e787e port instruction_pointer to wasm memory (offset 556)
0e62a7046 port previous_ip to wasm memory (offset 560)
c09089e40 implement trigger_gp in C
a4f0fed1b implement raise_exception in C
0b41949f4 implement trigger_de in C
fc2a568a6 implement div8 in C
acc6bbb54 implement idiv8 in C
5a3db2d09 implement div16 in C
d77f0d151 Move wasm replacements to a dedicated function
135b19af0 port idtr_size and idtr_offset to wasm (offset 564, 568)
5f0ad7257 port gdtr_size to wasm (offset 572)
dc17f7b7a port gdtr_offset to wasm (offset 576)
07876e86f port cr to wasm (offsets 580-608)
50b0213c2 port cpl to wasm (offset 612)
5cea3efcc port page_size_extensions to wasm (offset 616)
89d6fd6e8 port last_virt_eip to wasm (offset 620)
68f4111fd port eip_phys to wasm (offset 624)
73b146319 port last_virt_esp to wasm (offset 628)
dbf920ff7 port esp_phys to wasm (offset 632)
c05177c5a port sysenter_cs to wasm (offset 636)
63dd72194 port sysenter_esp to wasm (offset 640)
59d8aa686 port sysenter_eip to wasm (offset 644)
c5e02dd8b port prefixes to wasm (offset 648)
259ca5d72 port tsc_offset to wasm (offset 652)
62ecc8825 port phys_addr to wasm (offset 656)
188ea275e port phys_addr_high to wasm (offset 660)
f458cb2bb port timestamp_counter to wasm (offset 664)
890449fa3 port sreg to wasm (offsets 668-682)
ebe65e6f3 port dreg to wasm (offsets 684-716)
df6553220 port fw_value to wasm (offset 720)
0cd3b78ea port segment isnull, offsets and limits to wasm (offset 724-796)
4fb0ecebc Turn off verbose logging
b55bc2cae fix unzip command in readme
f5b897bc3 fix docs links to api.md
ba03a7b4e Remove outdated test
930483ac4 Add elf parser
6597973c8 Shift addresses correctly
189903a7d Add comment to lss #ud
0a46ec4a9 Fix iret #gp error code (Windows XP)
28986b7ee Lower TIME_PER_FRAME
4ce987d71 Add acpi PM timer
43c31ea99 Handle access to debug registers when cr4.DE is set
283305215 Add run_hardware_timers
c617846f2 A few more assertions for IO ports
32e7444f4 Make Closure Compiler happy
a661c408c Buffer get written blocks
9306fd080 Add debug panel (#108)
795ff1a50 More complete APIC and IOAPIC implementation (#86)
4a4253956 Makefile: Refactor using addprefix
ac1009331 More VGA logging
18ee4ecde Only check irqs when irr changed
cdbc55e03 Add multiboot image loading, currently only supporting kvm-unit-test (#95, #129)
3ee9a1c85 Disable advanced optimisations for libv86. Fixes tests
12df5c76d Import kvm-unit-test into this repo
249f9ba37 Add kvm-unit-test (#129)
99b824f49 Mention than FreeBSD works
91fe8a3a1 ATA flush cache
0af630d99 PCI: Fix command/status
30fc01491 Rename function
569d1f3d6 APIC version write
df376842c Split movsx/movzx into 16/32 bit versions
dda21c5e2 CR3 ignored bits
b1f039211 Implement #NP (kvm-unit-test)
57dd8358f Minor (style and logging)
17fd08e29 Less incomplete task switch implementation
797fd5bd8 cpuid level 5
24e66a43f Missing parameter
a679829f0 PIC logging
e68ea4573 Don't create new arrays in reset(), set to 0 instead
550e55186 Update readme regarding Arch Linux
3b565e54e Use local kolibriOS image on https. Temporary workaround for #141
1a0f804d6 Fix restoring state
b397f1934 Leave ACPI disabled, fixes #151
83db7e871 add note about range header in SimpleHTTPServer
a20794873 update linux 9p image mount hook doc
88e65312e Improve fprem instruction implementation to update FPU status word's condition codes
9844ef433 Remove comments from fprem instruction
a429bbe73 Disable Oberon tests
ba3092060 Add kvm-unit-test to travis CI (#129)
6a8813567 Travis fix
46da581de Travis fix (gcc-multilib)
c78dcb105 Travis fix (switch to Trusty)
dbc2ab704 Reduce memory for kvm-unit-test
2c6bd1889 Fix multiboot images smaller than 8192 bytes
f5dead1f5 expand Archlinux doc with scripted install example
a34cd08d9 fix raw RangeHTTPServer link to wget
35f9923fb change state to initial state in archlinux doc
2aed2636f extend archlinux doc with networking example
2aa8f3722 First entry in LDT is valid (#145)
7492c8d3c Basic 16-bit tss implementation. Fixes #127. Fixes #145. Fixes windows 3.0
098d84a02 Minor
b9c93f8c6 Proper CD IDE DMA implementation, fixes #147, fixes #107
9b9123d6e Improved file loading in nodejs, simplify tests
40ee13f9b Add dummy screen
a58bd7419 Fix test: Check if disk image is missing
c8a7fd8dc Reenable Oberon tests
bd63f49ad Minor: Semicolons
d10f0b7ff Implement elcr in legacy pic
aed5b441a Change virtio irq to 10, old one collides with ps2 mouse
b93519c8a PS2 minor changes
25e64afa6 Update build command
5377f9457 Add maximum debug to emscripten build
dac6ce6a4 Reduce logging
f44f3b467 Convert argument for call from C
e1808f222 Raise when C assertion fails
bb6d38e6e Add cpu imports, in order to be called from C
f3f909d5d Port constants
7bab32657 Port protected_mode, is_32 and stack_size_32
ee02cdd86 Port the main instruction table
fe15a6cc0 fixes for prop mangling and closure type checks
11935fcc0 remove redundant pointer timestamp_counter
a7021eb20 port read_imm8 to wasm
f7a432691 strip useless brackets
90c7435f8 Reduce logging
047f0f405 Port a few small functions
df293f8d4 Port get_seg*
37774b0d1 Remove useless comparison
47f7a89b9 Port instructions with 0F prefix
8a822bae4 Remove useless brackets again (lost in rebase) and use correct quote style
2f6e90023 port read_imm{8s,16,32s}
8f5ce2dbf remove redundant declaration
5785195ce port read_write_e8 and write_e8
5fa1a15af Make instruction functions static
4a2336d12 Port jmp_rel16, jmpcc8, jmpcc16, jmpcc32
8633cfad9 Port set_e*
f024aec98 Port read_imm* aliases
d39cb4d7b Port read_g*
fa838388d Port read_e*
2f1c41d93 Port write_g*
43157269f Port logging and assertions
ac2c937d5 Port read_write_e{16,32} and write_e{16,32}
eeb7340c2 Port safe_read*
54d89b3d1 Port safe_write*
c5557a227 Port diverged, branch_taken, branch_taken
e3bb35939 Fix loading in node
00f6b2638 Remove useless `| 0` and `>> 0`. Use unsigned comparison
70fa762e3 Optimise read_imm8
4487917fd Port a20_enabled to wasm
a8f16cb20 Fix a20_enabled booleans for closure compiler
95145ec53 Move mul32 result so offsets are reserved in order (and mention length)
a3264e132 Move global pointer reservations to its own header file and make sure all .c files include all headers
78c779cbd Port FPU's stack_empty to wasm (offset 816)
4f25fc4b7 Port FPU's safe_tag_word function to wasm
8589a1c21 Port emms instruction to wasm
feb5079c7 port memory_size to wasm (offset 812)
262559291 port in_mapped_range to C
8a72ad56c Port a20_enabled to wasm
ce393e211 [wip] port read8
e936b49d1 port read8 to wasm
80cf98a3a port read16 to wasm
3a423372b port read_aligned16 to wasm
4725e1bac port read32s to wasm
60815b748 port write8 to wasm
5d64b295b port write16 to wasm
5fc83a791 port write32 to wasm
7148b6804 port push{16,32} to wasm
697222408 port pusha{16,32} to wasm
6adb5be15 Port paging, tlb_info, tlb_info_global and tlb_data
c8ab560af Port translate_address_*
8bb3e4285 Port get_eflags and getzf
c7a70a79b Port getsf
0d35dd621 Port getof
e4d3ec252 Port getpf
9aacf2cfe Port test_* (branch conditions)
9cb64f970 Add v86-debug.wasm build target
37012099d Call mmap_* functions statically
8fb9da298 Add missing voids
0bcbe7ef4 Silence warning
6fb9db2fd Simplify translate_address_read and translate_address_write
28b66ca6b Optimized versions of resolve_modrm32 and resolve_sib
cf4aea666 Silence warning
b4915a2d2 Port adjust_stack_reg, get_stack_pointer and pop32s
7ddc14948 Optimised memory reads and writes
2020-07-21 20:10:05 -05:00
Fabian 811663c31f Include sourcemap in libv86.js 2020-04-22 22:43:25 +02:00
August 9c018e3d3a use specific version of closure 2020-03-22 14:56:58 +01:00
Filip Š bcc4f89a47 Use Python 3 for webserver 2019-04-09 09:43:33 -05:00
Fabian ce1f396ef2 Fix #274 2019-03-22 17:13:46 -05:00
BenNottelling 13a985edb7 ACPI test for travis 2018-01-24 11:21:26 -06:00
Ernest Wong b04dd92582 Roughly implement sb16 behaviour 2017-12-16 22:51:40 -06:00
Ernest Wong eb736ab406 Emulate PC speaker beep sounds 2017-12-16 22:51:40 -06:00
copy 5c0e87b3e9 Add --source_map_include_content to closure compiler build (#177) 2017-12-13 13:26:20 -05:00
copy b9c421fd2f Fix libv86 build in newer closure compilers, fixes #167 2017-09-08 19:05:53 +02:00
Amaan Cheval 82fc184c79 Remove unsupported Closure Compiler flags 2017-09-08 12:26:38 +02:00
copy 0fd2835d40 Add kvm-unit-test to makefile 2017-06-22 12:26:02 -05:00
copy e764ca213a Update test scripts 2017-06-20 16:24:40 -05:00
Amaan Cheval 6a61876540 Add nasmtests target to primary Makefile in root 2017-06-16 10:47:19 -04:00
copy 1cbdc5497c Move config.js to front 2017-05-30 15:28:59 -05:00
copy 43747c4b32 Add dummy screen 2017-05-09 19:31:18 -05:00
copy 3595456ee2 Disable advanced optimisations for libv86. Fixes tests 2017-04-29 13:22:17 -05:00
copy 370698fa1d Makefile: Refactor using addprefix 2017-04-29 13:22:17 -05:00
copy 96f61bb4d5 More complete APIC and IOAPIC implementation (#86) 2017-04-29 13:22:17 -05:00
copy 0f2f096f50 Add elf parser 2017-04-29 13:22:17 -05:00
copy 5c084c9240 make clean: Remove source maps 2017-03-23 13:18:19 -05:00
copy c72d8de8cb Add missing config.js file 2017-03-15 20:12:59 -05:00
copy b6056f8589 Make closure compiler happy 2017-03-04 16:37:16 -05:00
copy 41b1884f64 Use @export 2016-07-26 22:14:34 +02:00
copy c8949b01d0 Update makefile: Ignore rm errors, rename test target to tests 2016-07-18 01:18:52 +02:00
copy 2383a17afb Fix closure compiler download 2016-07-18 00:42:12 +02:00
copy c21f20221c Makefile: Safer clean 2016-02-07 16:52:03 +01:00
copy b281748ca3 Make build/libv86.js a dependency of test case 2016-02-05 19:56:25 +01:00
copy 5eb38cec8c Makefile test target 2016-02-05 14:41:15 +01:00
copy 88b9cd73d8 Version information in build, fixes #56 2016-01-22 23:54:02 +01:00
copy 15845b6d80 Remove unused IN_XXX variables 2016-01-03 18:33:58 +01:00
copy 170e7887d3 Create source map 2016-01-03 18:32:45 +01:00
copy 280e54e7b7 Fix small mistage in Makefile 2015-12-31 00:36:27 +01:00
copy 3b067d5fac Improve Makefile 2015-12-30 23:08:05 +01:00
copy 9743618eb2 Fetch closure compiler automatically 2015-12-30 23:05:12 +01:00
Fabian d42800fe2b Fix build process. Fixes #68 2015-10-18 15:17:18 +02:00
copy 85be27910a Remove mcpp submodule. Thanks to @h8liu for creating it 2015-09-14 01:50:30 +02:00
copy 9185dd25e4 Remove C macros and compile step. Fixes #10 2015-09-14 01:45:51 +02:00
copy e2ecca2a04 Make warnings errors (Closure Compiler) 2015-09-12 18:17:22 +02:00
Janus d839a6cef6 clean up the Makefile 2015-04-27 23:23:06 +02:00
copy d13e6983b5 Makefile 2015-04-12 21:58:17 +02:00
copy 089531b8cc Worker bus, #20 2015-04-12 20:21:38 +02:00
copy 98ef32081c Disable readable compilation on libv86.js 2015-03-06 02:16:45 +01:00
copy 3ac30a1277 Merge branch 'master' of https://github.com/copy/v86 2015-01-09 16:26:33 +01:00
copy 1032ef3ef2 New publicly usable interface called V86Starter, refactor browser/main.js using it 2015-01-09 04:49:44 +01:00
copy 0863b668b7 Move code to log.js 2015-01-09 00:10:40 +01:00
Laurent Laborde c833d3b092 MacOSX hack to use mcpp even if cpp is detecetd
the default llvm cpp doesn't work as expect on macosx, so we use mcpp on macosx even if cpp is detected.
2015-01-07 10:42:05 +01:00
copy cdad4bd9fb remove nodejs port, it's slightly broken and not used anywhere 2015-01-06 00:01:33 +01:00
copy f3b3ad0422 fix libv86 target 2014-12-29 17:42:39 +01:00
copy 13511362d7 refactor communication between emulated devices and browser implementation using Bus. Web worker comming soon ;) 2014-12-25 02:32:18 +01:00
copy 910a80a65a split up code into more files 2014-12-21 20:28:13 +01:00
copy b3515dc332 clean up makefile 2014-12-02 19:22:29 +01:00
copy ed2f5e9391 Rename file 2014-12-02 19:21:28 +01:00
copy 4a63b1f70c initial version of virtio and 9p filesystem support; props to the jor1k project for donating some code 2014-12-02 19:01:13 +01:00
copy 287cb4605b move all build files into a single dir 2014-10-11 12:20:57 +02:00
copy 2fe66de4fa Initial version of network support 2014-10-11 02:15:37 +02:00
Fabian 7184e3e602 make run more useful 2014-09-28 16:37:14 -07:00
Fabian 24e9d94b61 cpu saving state frame 2014-09-24 19:25:59 -07:00
copy dd8639b8b5 Extra externs file for builds without adapters 2014-07-22 22:54:40 +02:00
copy 6af7d5488a Refactoring 2014-07-19 21:32:59 +02:00
copy 2f3b39ad9a source mapping is not really useful anyway, disable it for now 2014-07-02 03:58:21 +02:00
copy deeff85f8b Merge branch 'master' of https://github.com/copy/v86
Conflicts:
	src/cpu.macro.js
	src/floppy.js
	src/instructions.macro.js
	src/modrm.macro.js
	src/node/main.js
2014-06-15 22:54:12 +02:00
copy 7a731ca061 Change CPU from closure to prototypical notation.
This change was necessary for several reasons:

- Code is much clearer and more modular
- The CPU object is now serializeable and therefore can be safed and
  restored
- A dynamic translator from instructions to (optimized) JavaScript is
  planned. It would use `new Function` to create functions at runtime.
  Functions created this way don't have access to any scope (except for
  the global scope) and therefore were not have been able to modify
  registers, etc. This is now possible through the cpu object
- Possibly, but not necessarily a speedgain can be achieved.
  See http://mrale.ph/blog/2012/09/23/grokking-v8-closures-for-fun.html

Additionally, some code was moved around.
2014-06-15 22:25:17 +02:00
copy 6a4b1d9a1d split those long lines up 2014-06-10 02:57:22 +02:00
copy bb489cd342 libv86.js 2014-05-14 00:20:42 +02:00
Fabian 6f974f6889 make run in background 2014-05-08 22:42:05 +02:00
Fabian 03cce1f20b Test environment 2014-05-06 06:38:44 +02:00
Fabian e0fa1bd3fa make run 2014-04-14 16:26:01 +02:00
copy 0ca7e260e3 ifndef 2014-02-11 21:45:58 +01:00
copy 9f9053c4b4 Correct make pack 2014-02-11 21:43:21 +01:00
copy 49dcce89bf Detect cpp and use it by default if it exists 2014-02-07 20:28:24 +01:00
He Liu c0aa72ac9a mcpp submodule 2014-02-04 11:45:55 -08:00
copy 6906ae1966 Closure Compiler submodule 2014-01-25 20:23:10 +01:00
copy 4604ec2581 Add serial to loader and makefile 2014-01-08 03:21:42 +01:00
copy 30eec75901 Compiled version for nodejs 2014-01-05 03:06:16 +01:00
copy 0897c2f234 hpet 2013-12-06 01:36:29 +01:00
copy a5fb00d67e New: IDE emulation. Lots of cleanups in the ATA controller 2013-11-26 21:58:12 +01:00
copy 7ce225d300 nothing 2013-11-07 23:03:53 +01:00
copy 8180d49f24 first public release 2013-11-06 01:12:55 +01:00