mirror of
https://github.com/buhman/nds.git
synced 2025-06-18 22:45:34 -04:00
47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
from dataclasses import dataclass
|
|
|
|
@dataclass
|
|
class Register:
|
|
offset: int
|
|
size: int
|
|
name: str
|
|
page: int
|
|
description: str
|
|
|
|
def parse_fields(line):
|
|
fields = line.split(' ', maxsplit=3)
|
|
assert len(fields) in {1, 4}, fields
|
|
if len(fields) == 1:
|
|
offset, = fields
|
|
return [int(offset, 16)]
|
|
else:
|
|
offset, name, page, description = fields
|
|
return [int(offset, 16), name, int(page, 10), description]
|
|
|
|
def register_descriptions(lines):
|
|
last_offset = -2
|
|
result = []
|
|
|
|
for line in lines:
|
|
if not line.strip():
|
|
continue
|
|
|
|
fields = parse_fields(line)
|
|
if len(fields) == 1:
|
|
offset, = fields
|
|
assert last_offset + 2 == offset, (last_offset, line)
|
|
result[len(result) - 1].size += 2
|
|
last_offset = offset
|
|
else:
|
|
offset, name, page, description = fields
|
|
result.append(Register(
|
|
offset,
|
|
2, # size
|
|
name.upper(),
|
|
page,
|
|
description,
|
|
))
|
|
last_offset = offset
|
|
|
|
return result
|