mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-10-28 11:52:56 +00:00
Fix metal bugs so deathstar.com runs in qemu (#20)
- Remove XD bit in page tables
- Fix cylinder+head+sector arithmetic
- Implement fstat() for serial file descriptors on metal
Here's how to boot an Actually Portable Executable in QEMU:
make -j12 o//tool/viz/deathstar.com
qemu-system-x86_64 -serial stdio -fda o//tool/viz/deathstar.com
Here's a screenshot of DEATHSTAR.COM booted in QEMU:
https://justine.lol/cosmopolitan/cosmo-metal-qemu.png
Thus metal support is in much better shape now, but still incomplete.
Only a few system calls have been polyfilled. To figure out which ones
your program needs, simply boot it in the blinkenlights emulator with a
breakpoint, and press CTRL-C to continue to the system call breakpoint.
If it doesn't break then you should be good. (Note: to emulate normally
you can press 'c' and use CTRL-T and ALT-T to tune the speed.)
m=tiny
make -j12 SILENT=0 MODE=$m \
o/$m/tool/build/blinkenlights.com \
o/$m/tool/viz/deathstar.com
o/$m/tool/build/blinkenlights.com \
-r -t -b systemfive.linux \
o/$m/tool/viz/deathstar.com
Thank @Theldus for the bug report that made this change possible.
Fixes #20 which explains this change further.
This commit is contained in:
parent
58d9659d53
commit
f0600a898c
13 changed files with 182 additions and 119 deletions
|
|
@ -28,7 +28,10 @@ program_invocation_short_name:
|
|||
|
||||
.init.start 400,_init_program_invocation_short_name
|
||||
push %rsi
|
||||
mov (%r13),%rsi
|
||||
xor %eax,%eax
|
||||
test %r12d,%r12d # argc
|
||||
jz 2f
|
||||
mov (%r13),%rsi # argv[0]
|
||||
mov %rsi,%rcx
|
||||
1: lodsb
|
||||
cmp $'/,%al
|
||||
|
|
@ -39,5 +42,5 @@ program_invocation_short_name:
|
|||
jnz 1b
|
||||
xchg %rcx,%rax
|
||||
pop %rsi
|
||||
stosq
|
||||
2: stosq
|
||||
.init.end 400,_init_program_invocation_short_name
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue