My silly simulator can:
- disassemble a subset of 8086 instructions from binary;
- simulate storing to and reading from (simulated) registers;
- run arithmetic operations (add, sub, cmp);
- IP register and conditional jumps;
- simulate 64K of memory.
❯ zig run simulator.zig -- asm/listing_46
; FILE: asm/listing_46
bits 16
mov bx, 61443
mov cx, 3841
sub bx, cx
mov sp, 998
mov bp, 999
cmp bp, sp
add bp, 1027
sub bp, 2026
=== REGISTERS ===
ax: 0 (0x0)
bx: -7934 (0x-1EFE)
cx: 3841 (0xF01)
dx: 0 (0x0)
sp: 998 (0x3E6)
bp: 0 (0x0)
si: 0 (0x0)
di: 0 (0x0)
=================
=== FLAGS ===
zf: 1
sf: 0
=================
My CPU can put pixel data into memory.
![image](https://private-user-images.githubusercontent.com/926908/254876447-acca1a21-38ed-4dc8-956f-130a32de5c77.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg3MDU0MjQsIm5iZiI6MTcxODcwNTEyNCwicGF0aCI6Ii85MjY5MDgvMjU0ODc2NDQ3LWFjY2ExYTIxLTM4ZWQtNGRjOC05NTZmLTEzMGEzMmRlNWM3Ny5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjE4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYxOFQxMDA1MjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hYjA0ZWQ1YWNiM2Q5YTdlY2NkMDhkMGFmYWIxODY2ZjY5YTRhNjZlMWQwZWI2Y2IwZDdlYTgwMTUwZjkwOWI1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.Ov-WZwYGGaoLqL7GtgWCuYe5scs_OdOBNsqMk2a-x9g)
Researching performance aware programming using Haversine Distance calculations.