Extract globals as well as syscalls from the symbol map
This commit is contained in:
parent
f020b7ab2f
commit
878cc67a83
6
Makefile
6
Makefile
|
@ -11,10 +11,10 @@ FS_FILES = wallpaper.bin shell.bin
|
||||||
ponydos.img: ponydos.bin $(FS_FILES)
|
ponydos.img: ponydos.bin $(FS_FILES)
|
||||||
$(PYTHON) assemble_floppy.py $@ ponydos.bin $(FS_FILES)
|
$(PYTHON) assemble_floppy.py $@ ponydos.bin $(FS_FILES)
|
||||||
|
|
||||||
ponydos.inc: ponydos.asm ponydos_nosyscall.inc
|
ponydos.inc: ponydos.asm ponydos_static.inc
|
||||||
$(NASM) -fbin -d SYMBOLS -o /dev/null ponydos.asm | $(PYTHON) add_syscalls.py $@ ponydos_nosyscall.inc
|
$(NASM) -fbin -d SYMBOLS -o /dev/null ponydos.asm | $(PYTHON) extract_symbols.py $@ ponydos_static.inc
|
||||||
|
|
||||||
ponydos.bin: ponydos_nosyscall.inc
|
ponydos.bin: ponydos_static.inc
|
||||||
|
|
||||||
shell.bin: ponydos.inc
|
shell.bin: ponydos.inc
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,12 @@ syscalls = {
|
||||||
'draw_rect': None,
|
'draw_rect': None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variables = {
|
||||||
|
'mouse_column': None,
|
||||||
|
'mouse_row': None,
|
||||||
|
'mouse_buttons': None,
|
||||||
|
}
|
||||||
|
|
||||||
if len(sys.argv) != 3:
|
if len(sys.argv) != 3:
|
||||||
print(f'Usage: {sys.argv[0]} outfile infile', file=sys.stderr)
|
print(f'Usage: {sys.argv[0]} outfile infile', file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@ -28,12 +34,12 @@ while True:
|
||||||
section = None
|
section = None
|
||||||
for line in mapfile:
|
for line in mapfile:
|
||||||
line = line.split()
|
line = line.split()
|
||||||
if len(line) == 4 and all(c == '-' for c in line[0]) and line[1] == 'Section' and all(c == '-' for c in line[3]):
|
if len(line) == 3:
|
||||||
section = line[2]
|
|
||||||
if section == '.text' and len(line) == 3:
|
|
||||||
address, _, name = line
|
address, _, name = line
|
||||||
if name in syscalls:
|
if name in syscalls:
|
||||||
syscalls[name] = int(address, 16)
|
syscalls[name] = int(address, 16)
|
||||||
|
if name in variables:
|
||||||
|
variables[name] = int(address, 16)
|
||||||
|
|
||||||
header += f'\n;This was automatically generated\n'
|
header += f'\n;This was automatically generated\n'
|
||||||
|
|
||||||
|
@ -43,5 +49,13 @@ for syscall, address in syscalls.items():
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
header += f'SYS_{syscall.upper()} equ 0x{address:x}\n'
|
header += f'SYS_{syscall.upper()} equ 0x{address:x}\n'
|
||||||
|
|
||||||
|
header += '\n'
|
||||||
|
|
||||||
|
for variable, address in variables.items():
|
||||||
|
if address is None:
|
||||||
|
print(f'{sys.argv[0]}: Error: global {variable} not found', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
header += f'GLOBAL_{variable.upper()} equ 0x{address:x}\n'
|
||||||
|
|
||||||
with open(outfile, 'w') as f:
|
with open(outfile, 'w') as f:
|
||||||
f.write(header)
|
f.write(header)
|
|
@ -1,7 +1,7 @@
|
||||||
%ifdef SYMBOLS
|
%ifdef SYMBOLS
|
||||||
[map symbols]
|
[map symbols]
|
||||||
%endif
|
%endif
|
||||||
%include "ponydos_nosyscall.inc"
|
%include "ponydos_static.inc"
|
||||||
|
|
||||||
cpu 286
|
cpu 286
|
||||||
bits 16
|
bits 16
|
||||||
|
|
|
@ -3,3 +3,4 @@ PONYDOS_SEG equ 0
|
||||||
GLOBAL_WALLPAPER equ 0x500
|
GLOBAL_WALLPAPER equ 0x500
|
||||||
|
|
||||||
WM_INITIALIZE equ 0
|
WM_INITIALIZE equ 0
|
||||||
|
WM_PAINT equ 1
|
Loading…
Reference in New Issue