-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
69 lines (48 loc) · 1.33 KB
/
main.py
File metadata and controls
69 lines (48 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from assembler import assemble
from instructions import IncY, Jump, LoadA, LoadY, StoreA, NoOp, JumpToSub, ReturnFromSub, YtoA, PushY, PopY, StoreY
from label import Label
from modes import Addr
from rom import Rom
LBL_LOOP = Label("LOOP")
LBL_FN_OUT = Label("FN_OUT")
LBL_FOO = Label("FOO")
def main():
# Memory Map
# VIA: 0x6000 - 0x600F (repeating every 0xF addresses until 0x8000)
# ROM: 0x8000 - 0xFFFF
via = Addr(0x6000)
via_portb = via
via_ddrb = Addr(via + 2)
rom_start = Addr(0x8000)
rom_size = 0x8000
init_vec = Addr(0xFFFC)
code = [
# Set PortB to all outputs
LoadA(val=0xFF),
StoreA(to=via_ddrb),
# Init loop var
LoadY(val=0x00),
# Loop
LBL_LOOP,
YtoA,
JumpToSub(LBL_FN_OUT),
IncY,
Jump(to=LBL_LOOP),
LBL_FN_OUT,
PushY,
LoadY(val=0x00),
StoreY(to=via_portb),
NoOp,
StoreA(to=via_portb),
PopY,
ReturnFromSub,
]
code_ass = assemble(code, start=rom_start)
filler = assemble([NoOp]) * (rom_size - len(code_ass))
rom = Rom(size=rom_size, start=rom_start, init=code_ass + filler)
# Write init vector
rom[init_vec] = rom_start
with open("rom.bin", "wb") as f:
f.write(rom)
if __name__ == "__main__":
main()