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
5fab099cd8
ft(interpreter): impl push/pop
2025-06-18 20:33:52 +09:00
d1ea96edd8
Update README.md
2025-06-17 16:40:24 +02:00
bc9df97ea7
Update README.md
2025-06-17 15:35:13 +02:00
5942270f63
ft(interpreter): impl all low-hanging fruit instructions
2025-06-11 23:29:34 +09:00
4cea76bd1c
chore(interpreter): always sign-extend ImmediateOperand::Byte when cast
2025-06-11 17:40:38 +09:00
7691b4b2ab
chore(interpreter): reduce code complexity
2025-06-11 17:04:34 +09:00
e5e0edd713
ft(interpreter): impl mov
2025-06-11 16:59:15 +09:00
269c4cc54b
ft(interpreter): impl adc and sbb
2025-06-11 16:31:07 +09:00
11a365a8b1
ft(interpreter): set flags for arithmatic operations
2025-06-11 15:57:39 +09:00
c9bf8fdc46
ft(interpreter): impl short jumps
2025-06-11 15:44:42 +09:00
a4dc420d60
fix(disasm): only prepend ptr when modrmtarget is memory
2025-06-10 21:07:28 +09:00
7479021d36
ft: impl most arithmatic ops, dec, inc
2025-06-10 20:57:31 +09:00
037d74ac6a
fix: dont always flip sign_extend msb
2025-06-10 20:00:07 +09:00
3756ada3e0
fix: correctly sign-extend instead of plain byte to word cast
2025-06-10 15:54:25 +09:00
5529fc0b89
ft: impl flag setting closure for binary operations
2025-06-10 14:38:13 +09:00
35fefb7625
ft(interpreter): generalize binary operations
2025-06-10 10:59:35 +09:00
2b37884a60
fix: align interrupt data with minix src
2025-06-10 09:44:34 +09:00
232b73aad8
chore: Rename Operand -> ImmediateOperand
2025-06-05 10:08:35 +09:00
ef4663a245
ft: abstract and implement ADD::* interpretation
2025-06-04 23:01:04 +09:00
ac69d75273
ft: initial work in interpreter
2025-06-03 21:31:28 +09:00
5ee80c9364
fix: read data section as words, not bytes
2025-06-03 10:30:35 +09:00
4c63b7a21a
ft: add dump flag
2025-05-28 16:00:18 +09:00
7e8fdeba54
ft: implement missing lock instruction
2025-05-28 14:23:56 +09:00
a21cc2b4b3
ft: add debug script
2025-05-28 14:13:12 +09:00
c396d33f76
fix: align pointer parsing with spec
...
Previously pointer parsing was completely wrong.
Now split into Pointer32 for immediates with
segment;offset and Pointer16 for short jumps, which
use DS or ES as segment and the Pointer16 value
as offset.
2025-05-28 13:31:14 +09:00
0893969f4e
chore: whole swoop of enhanced documentation
2025-05-28 09:41:40 +09:00