Bit pattern mini-language for instruction encodings. Bytes in, IR out!
See docs for a step-by-step tutorial and API reference. Here's a complete example:
>>> import bitspec
>>> @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 00 000 r:3', op='RLC')
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 00 001 r:3', op='RRC')
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 00 010 r:3', op='RL ')
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 00 011 r:3', op='RR ')
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 00 100 r:3', op='SLA')
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 00 101 r:3', op='SRA')
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 00 110 r:3', op='SL1') # "SLL"
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 00 111 r:3', op='SRL')
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 10 b:3 r:3', op='RES')
... @bitspec.bitspec('11 xy:1 11101 0xCB nn:s8 11 b:3 r:3', op='SET')
... class Z80UndocBitOps: # NORTHERN BYTES Volume 3 #10 (October 1982)
... def __str__(self): # mirrored at http://z80.info/z80undoc.htm
... dst = ['B,', 'C,', 'D,', 'E,', 'H,', 'L,', '', 'A,'][self.r]
... bit = '' if self.b == None else f'{self.b},'
... src = ['IX', 'IY'][self.xy]
... return f'{self.op} {dst}{bit}({src}{self.nn:+})'
... def __repr__(self): return f'<{self!s}>'
... def __init__(self, xy, nn, r, op, b=None):
... self.xy, self.nn, self.r, self.op, self.b = xy, nn, r, op, b
>>> code = bytes.fromhex('fdCB7f17 ddCBfe88 fdCB0125')
>>> Z80UndocBitOps.from_bytes(code)
<RL A,(IY+127)>
>>> {hex(op.addr):op for op in Z80UndocBitOps.iter_bytes(code, addr=0x50)}
{'0x50': <RL A,(IY+127)>, '0x54': <RES B,1,(IX-2)>, '0x58': <SLA L,(IY+1)>}
Install from Pypi or just copy bitspec.py
into your project. Bugs, questions,
or other feedback are welcome!
Metadata
Release files for bitspec 0.4.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bitspec-0.4.4.tar.gz | 20.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bitspec-0.4.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.3 kB
Release files / bitspec-0.4.4.tar.gz
| Download URL | bitspec-0.4.4.tar.gz |
|---|---|
| Size | 20.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0d18de629778a2a31859cb90dabab98dccf031acbb614be9dab6f11d253e85bf
|
|
BLAKE2b-256 checksum How to use checksums |
b06e3298edbd166ca479f1fabaf925cd1bc7727690de01ef93db52e88b18b1e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.27.1
|
Release files / bitspec-0.4.4-py3-none-any.whl
| Download URL | bitspec-0.4.4-py3-none-any.whl |
|---|---|
| Size | 19.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
36242daf1c1099a08b96853529d25fb43dc98e1845f48ed639a38d6602f078c1
|
|
BLAKE2b-256 checksum How to use checksums |
521c3fba09f8474e913a8ce941ed7de9c866acb3b3039098f14f7d7fc07c5cc5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.27.1
|