128 Commits

Author SHA1 Message Date
3ec76933d5 fix(interpreter): rep(n)z condition was wrong way around 2025-07-24 11:44:06 +09:00
2cb50b5908 fix(interpreter): fix mov AX0b instruction
Should not be imm, but a memoryindex
2025-07-24 11:43:30 +09:00
4cc97cffbf ft(interpreter): impl stosb/stosw 2025-07-24 11:43:08 +09:00
b3a24ade00 ft(interpreter): impl file-based minix interrupts 2025-07-24 11:42:15 +09:00
75e9df9be9 ft(interpreter): impl repz/repnz and string ops 2025-07-15 12:44:28 +09:00
d5d6834a94 ft(interpreter): impl low hanging fruits 2025-07-14 18:32:32 +09:00
aea3143b4b fix(interpreter): allocate stack on heap 2025-07-08 17:40:57 +09:00
20e45679fc chore(interpreter): impl missing instructions as todo 2025-07-08 11:20:38 +09:00
9ada099d70 chore: update readme 2025-07-08 11:19:26 +09:00
cae4a03c26 chore: cleanup calling logic of disasm/interp 2025-07-08 10:43:02 +09:00
8c1a07b9e6 ft: rename to i8086-rs 2025-07-08 10:42:58 +09:00
0a1fd0e4c6 fix(interpreter): typo selected wrong byte 2025-07-08 09:35:28 +09:00
ecbe478dcd ft(interpreter): impl SAR 2025-07-08 09:03:16 +09:00
be0b928a55 fix(interpreter): use correct binary name for argv[0] 2025-07-06 22:41:14 +09:00
14a0d3d6f1 chore(interpreter): improve debug output 2025-07-06 22:36:13 +09:00
68fb5b7b56 fix(interpreter): correctly sign extend cmp byte 2025-07-06 22:35:39 +09:00
aba85c9a48 fix(interpreter): invalid operator precendece for padding byte 2025-07-05 00:04:35 +09:00
89634e50c4 fix(interpreter): load prog name as argv[0] 2025-07-04 15:05:18 +09:00
6c593a8d1e fix(interpreter): fix jg jump condition 2025-07-02 20:58:57 +09:00
4e23d9419b fix(interpreter): write to correct 8bit regs 2025-07-02 20:58:39 +09:00
4adb975b69 fix(interpreter): actually xchg into AX 2025-07-02 20:41:34 +09:00
803c6267d2 ft(interpreter): impl mul and div 2025-07-02 20:32:13 +09:00
60b5b6bd51 chore(interpreter): correctly sign extend for CBW/CWD intructions 2025-07-02 17:46:15 +09:00
6d60343067 ft(interpreter): impl ret with immediate 2025-07-02 17:38:48 +09:00
f665390854 fix(interpreter): add missing continue for jmp %reg instructions 2025-07-02 17:31:51 +09:00
aee5f0b6d7 ft(interpreter): impl custom partialord and ord for immediateoperand
The derived one treated Byte(1) < Word(2) as true, which is not
the desired behaviour.
2025-07-02 17:16:26 +09:00
709d2a2639 fix(interpreter): fix safeguard for memory write_raw() 2025-07-02 17:16:01 +09:00
cf3383c23a fix(interpreter): set flags correctly for inc/dec/neg 2025-07-02 17:15:40 +09:00
4f161f47f6 ft(interpreter): expand interrupt functionality
Implement mess2 type, as well as return m_type for existing
and new interrupts.

TODO:
save pointer to message data, as the current write is redundant.
2025-07-02 17:14:05 +09:00
5a81bbf43a chore(interpreter): handle errors during fetch 2025-07-02 17:12:19 +09:00
09a03ab558 chore: simplify info and debug output 2025-07-02 17:10:55 +09:00
f6447df90e fix(interpreter): set flags correctly for shifts 2025-07-02 17:09:43 +09:00
3ce0a461ca fix(interpreter): fix stack setup 2025-07-02 17:07:37 +09:00
0a55b5a68b fix(interrupt): parse correct amount of data 2025-07-01 12:20:23 +09:00
a5cffa4852 fix(interpreter): impl fetch and decode
I parsed all instructions before executing, but this is not how
intel works.
We need to decode the instructions, pointed to by IP, on the fly.
2025-07-01 12:08:28 +09:00
f3fd655908 ft(interpreter): expose data to memory 2025-07-01 11:00:22 +09:00
13cb907977 ft(interpreter): impl simple stack init 2025-07-01 09:46:06 +09:00
0db309b668 chore(main): dont log path 2025-06-18 21:25:17 +09:00
4f3d864179 chore(interpreter): move memory access functions to computer
This is mainly to ease the usage of memory access functions, meaning
leaner access of memory with general resulution of memory accesses via
the MemoryIndex struct.
2025-06-18 21:04:41 +09:00
79dc560689 chore(interpreter): rewrite displacement memoryindex logic
Previously, the displacement for a MemoryIndex was directly interpreted
and saved as a signed value.
Change this to the normal unsigned ImmediateOperand version to allow
for more flexible usage of this struct for general memoryaccess (future
commit) and just interpret the displacement member as signed, only when
being interpreted as such (memory access, display, ....
2025-06-18 20:35:23 +09:00
5a61eb5fd6 ft(interpreter): use DS and SS sregs as correct segment offsets 2025-06-18 20:35:23 +09:00
4aeacc649a ft(interpreter): impl far jumps with correct CS addressing 2025-06-18 20:35:04 +09:00
6678a1ef4a chore(interpreter): fix small bugs 2025-06-18 20:33:52 +09:00
53262f9e3e ft(interpreter): impl shift and rotate 2025-06-18 20:33:52 +09:00
7d5f891a93 ft: use instructionwidth instead of immediateoperand
Previously an immediate operand with data of 0 was use to encode
width, now use a dedicated enum for improved clarity.
2025-06-18 20:33:52 +09:00
18cc460d40 ft: impl ret 2025-06-18 20:33:52 +09:00
7f4d79d840 fix(interpreter): always read word from memory
It's not possible to know if a word or byte is requested, or rather
it would be a pain to retrieve that information.
It is much easier to just read a full word and then discard the top
half, if just a byte is needed.
2025-06-18 20:33:52 +09:00
200640447b ft(interpreter): impl basic call 2025-06-18 20:33:52 +09:00
7e7e648fa8 fix(interpreter): wrong le byte order on pop 2025-06-18 20:33:52 +09:00
1f5e175c68 chore(interpreter): rename Operand -> ArithmeticOperand 2025-06-18 20:33:52 +09:00