Pass 2 _wip: Slalom (U), Kung Fu (U), Othello (U) label replacement complete

Pass 3 _wip: Slalom (U), Kung Fu (U), Othello (U) semantic naming complete
Pass 3 _wip: apply symbols (0 residue) for Slalom (U), Kung Fu (U), Othello (U)
Pass 2/3 _wip: 10 NROM projects (Elevator Action, 1942, Tag Team Wrestling, Galaga, Kung Fu a1, Stack-Up, Magmax, Ms Pac-Man Namco, Soccer, Sqoon)
Promote 13 _wip/NROM projects to NROM/ (Slalom, Kung Fu, Othello, Elevator Action, 1942, Tag Team Wrestling, Galaga, Kung Fu a1, Stack-Up, Magmax, Ms Pac-Man Namco, Soccer, Sqoon)
Pass 2/3 _wip: 5 CNROM games (Tiger-Heli, Paperboy, Last Starfighter, Mighty Bomb Jack, Kung-Fu Heroes)
Docs: document CDL capture + re-trace workflow in TODO.md
Adds more code for
 - Elevator Action (U)
 - Kung Fu (U)
 - Othello (U)
 - Slalom (U)
 - Sqoon (U)
This commit is contained in:
tmerritt committed 2026-10-21 14:42:00 -04:00
1 parent f8d62601e5
commit 0a49ee6da7
228 files changed
+101961 -37231

No files matched your search

Binary file not shown.
+25
View File
@@ -0,0 +1,25 @@
CA65 ?= ca65
LD65 ?= ld65
all: reconstructed.nes verify
prg.o: prg.s symbols.inc locals.inc prg.bin
$(CA65) -g -o $@ $<
header.o: header.s header.bin
$(CA65) -g -o $@ $<
chr.o: chr.s chr.bin
$(CA65) -g -o $@ $<
reconstructed.nes: header.o prg.o chr.o linker.cfg
$(LD65) -C linker.cfg -m reconstructed.map -Ln reconstructed.lbl -o $@ header.o prg.o chr.o
verify: reconstructed.nes rom.nes
cmp reconstructed.nes rom.nes
@echo "Byte-identical ROM verified."
clean:
rm -f *.o reconstructed.nes reconstructed_prg.bin reconstructed.map reconstructed.lbl
.PHONY: all verify clean
+67
View File
@@ -0,0 +1,67 @@
# Galaga (U)
## Status
**Pass 3.** All address-derived `Label_XXXX` definitions replaced;
every `jsr`/`jmp` operand symbolic; hardware-register operands resolved
via `apply_symbols.py` (0 residue); audit comments aligned; `make`
stays byte-identical.
`make` assembles `header.s`, `prg.s`, `chr.s`, links them with `ld65` and compares the
result against `rom.nes`:
```
Byte-identical ROM verified.
```
## ROM
| Property | Value |
|----------|-------|
| Format | iNES |
| Mapper | 0 |
| Board | NROM-256 |
| Mirroring | Horizontal |
| Four-screen VRAM | no |
| Battery | no |
| PRG | 32 KB (2 x 16 KB), mapped at CPU $8000-$FFFF |
| CHR | 8 KB (1 x 8 KB) |
| Trainer | none |
| Footer | none |
| NMI vector | $C0C8 |
| RESET vector | $C000 |
| IRQ vector | $C000 |
| ROM file | `Galaga (U).nes` |
| SHA-256 | `38f999bb2fa88893446d25a1885b0af1569f1260652d1c49332276c651315541` |
### Header notes
- none
## Open work
- **Pass 1** - run `nesdis.py` over `prg.bin` to produce the code/data
split. The tracer reads the vectors from the last six bytes of the PRG
image, so the split seeds correctly.
- **Pass 1** must emit the canonical audit comment
`; CPU:$C123 PRG:0123 AD 21 03` at column 35 for every instruction.
- **Pass 2** - replace the address-derived `Label_XXXX` names and the raw
`$XXXX` call operands.
- **Pass 3** - semantic zero-page aliases (applied only at the sites where
their role is proven) and named data tables.
- **Promotion** to `NROM/<name>/` once Pass 3 is done, as `git mv`.
## Files
| File | Purpose |
|------|---------|
| `prg.s` | Pass 0 PRG include (replaced by the Pass 1 disassembly) |
| `header.s` | iNES header include |
| `chr.s` | CHR include |
| `prg.bin` | 32768 bytes (32 KB) PRG image |
| `chr.bin` | 8192 bytes (8 KB) CHR image |
| `rom.nes` | byte-identical copy of the original ROM |
| `linker.cfg` | HEADER / PRG / CHR memory areas |
| `symbols.inc` | NES hardware register names |
| `locals.inc` | zero-page aliases (empty at Pass 0) |
| `Makefile` | build and byte-identity check |
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
.segment "CHR"
.incbin "chr.bin"
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
.segment "HEADER"
.incbin "header.bin"
+148
View File
@@ -0,0 +1,148 @@
C000 Reset
C0C8 NmiHandler
# ---- derived internal branch-target names ----
C000 Reset
C00A Reset_OnNonnegative
C01C Reset_Loop
C01E Reset_Loop2
C026 Reset_OnNonzero
C044 Reset_Loop3
C075 Sub_C075
C079 Reset_OnNonzero2
C089 Reset_Loop4
C0AB Reset_Loop5
C0B3 Reset_Loop6
C0BD Reset_Loop7
C0C2 Sub_C0C2
C0C8 NmiHandler
C0EB NmiHandler_Loop
C0F5 Sub_C0F5
C103 Sub_C103
C117 Sub_C117
C11A Sub_C11A
C12D Sub_C12D
C149 NmiHandler_OnNonzero
C18C Sub_C18C
C190 NmiHandler_OnZero
C191 Sub_C191
C1A7 NmiHandler_Loop2
C1BF Sub_C1BF
C1C4 Sub_C1C4
C1EA NmiHandler_Loop3
C1F4 NmiHandler_OnNonzero2
C214 NmiHandler_OnNonzero3
C232 NmiHandler_Loop4
C23B Sub_C23B
C242 Sub_C242
C258 NmiHandler_OnNonzero4
C275 Sub_C275
C2BC Sub_C2BC
C2D2 Sub_C2D2
C2DC NmiHandler_OnNonnegative
C2E0 NmiHandler_OnCarryClear
C2EC NmiHandler_Loop5
C301 Sub_C301
C317 Sub_C317
C32C NmiHandler_Loop6
C32E NmiHandler_Loop7
C330 NmiHandler_Loop8
C4A0 Sub_C4A0
C4EF Sub_C4EF
C4F1 NmiHandler_OnNonzero5
C500 Sub_C500
C550 NmiHandler_Loop9
C55F NmiHandler_Loop10
C567 NmiHandler_Loop11
C584 NmiHandler_OnNonzero6
C5A1 NmiHandler_Loop12
C5C3 NmiHandler_Loop13
C5CA NmiHandler_OnNonzero7
C5D3 NmiHandler_Loop14
C5D4 Sub_C5D4
C5E5 NmiHandler_OnNonzero8
C5F4 NmiHandler_Loop15
C5F8 NmiHandler_OnNonzero9
C607 Sub_C607
C612 NmiHandler_OnNegative
C613 NmiHandler_Loop16
C640 NmiHandler_Loop17
C65A NmiHandler_Loop18
C65E NmiHandler_Loop19
C661 NmiHandler_Loop20
C663 NmiHandler_Loop21
C673 NmiHandler_Loop22
C67B NmiHandler_Loop23
C693 Sub_C693
C69C NmiHandler_OnNonnegative2
C6A4 NmiHandler_Loop24
C6A7 NmiHandler_Loop25
C6A8 Sub_C6A8
C6C9 NmiHandler_Loop26
C6D1 NmiHandler_OnNonzero10
C6E0 Sub_C6E0
C6ED NmiHandler_OnNegative2
C6EE NmiHandler_Loop27
C710 Sub_C710
C71C NmiHandler_OnNonzero11
C725 NmiHandler_Loop28
C731 Sub_C731
C74A NmiHandler_OnZero2
C750 NmiHandler_Loop29
C76C NmiHandler_Loop30
C776 NmiHandler_Loop31
C77E NmiHandler_Loop32
C782 Sub_C782
C790 NmiHandler_Loop33
C794 NmiHandler_Loop34
C796 NmiHandler_Loop35
C7A8 Sub_C7A8
C7C6 NmiHandler_Loop36
C7C7 NmiHandler_Loop37
C7CB NmiHandler_Loop38
C7CF NmiHandler_Loop39
C7D3 NmiHandler_Loop40
C7D5 NmiHandler_Loop41
C7EA Sub_C7EA
C855 Sub_C855
C85D Sub_C85D
C865 NmiHandler_Loop42
C876 NmiHandler_Loop43
C886 Sub_C886
C8A6 NmiHandler_Loop44
C8A7 NmiHandler_Loop45
D776 NmiHandler_OnCarryClear2
D781 NmiHandler_Loop46
D78C Sub_D78C
D7AA Sub_D7AA
D7BA Sub_D7BA
EADA Sub_EADA
EAF0 NmiHandler_OnNonzero12
EB02 NmiHandler_Loop47
EB08 Sub_EB08
EB12 NmiHandler_Loop48
EB14 NmiHandler_Loop49
EB2A NmiHandler_OnNonzero13
EB3F NmiHandler_Loop50
EB5A NmiHandler_OnNonzero14
EB65 NmiHandler_Loop51
EB70 NmiHandler_Loop52
EB76 NmiHandler_OnCarryClear3
EB88 NmiHandler_Loop53
EB9B NmiHandler_OnCarryClear4
EBAC NmiHandler_Loop54
EBB7 NmiHandler_Loop55
EBC2 NmiHandler_Loop56
EBCB NmiHandler_Loop57
EC01 NmiHandler_Loop58
EC04 NmiHandler_Loop59
EC27 NmiHandler_OnNonzero15
EC2E NmiHandler_Loop60
EC4A NmiHandler_Loop61
EC54 NmiHandler_Loop62
EC5C NmiHandler_Loop63
ED51 Sub_ED51
ED60 Sub_ED60
F790 Sub_F790
F794 NmiHandler_OnNonzero16
F7A2 NmiHandler_OnZero3
1 C000 Reset
2 C0C8 NmiHandler
3 # ---- derived internal branch-target names ----
4 C000 Reset
5 C00A Reset_OnNonnegative
6 C01C Reset_Loop
7 C01E Reset_Loop2
8 C026 Reset_OnNonzero
9 C044 Reset_Loop3
10 C075 Sub_C075
11 C079 Reset_OnNonzero2
12 C089 Reset_Loop4
13 C0AB Reset_Loop5
14 C0B3 Reset_Loop6
15 C0BD Reset_Loop7
16 C0C2 Sub_C0C2
17 C0C8 NmiHandler
18 C0EB NmiHandler_Loop
19 C0F5 Sub_C0F5
20 C103 Sub_C103
21 C117 Sub_C117
22 C11A Sub_C11A
23 C12D Sub_C12D
24 C149 NmiHandler_OnNonzero
25 C18C Sub_C18C
26 C190 NmiHandler_OnZero
27 C191 Sub_C191
28 C1A7 NmiHandler_Loop2
29 C1BF Sub_C1BF
30 C1C4 Sub_C1C4
31 C1EA NmiHandler_Loop3
32 C1F4 NmiHandler_OnNonzero2
33 C214 NmiHandler_OnNonzero3
34 C232 NmiHandler_Loop4
35 C23B Sub_C23B
36 C242 Sub_C242
37 C258 NmiHandler_OnNonzero4
38 C275 Sub_C275
39 C2BC Sub_C2BC
40 C2D2 Sub_C2D2
41 C2DC NmiHandler_OnNonnegative
42 C2E0 NmiHandler_OnCarryClear
43 C2EC NmiHandler_Loop5
44 C301 Sub_C301
45 C317 Sub_C317
46 C32C NmiHandler_Loop6
47 C32E NmiHandler_Loop7
48 C330 NmiHandler_Loop8
49 C4A0 Sub_C4A0
50 C4EF Sub_C4EF
51 C4F1 NmiHandler_OnNonzero5
52 C500 Sub_C500
53 C550 NmiHandler_Loop9
54 C55F NmiHandler_Loop10
55 C567 NmiHandler_Loop11
56 C584 NmiHandler_OnNonzero6
57 C5A1 NmiHandler_Loop12
58 C5C3 NmiHandler_Loop13
59 C5CA NmiHandler_OnNonzero7
60 C5D3 NmiHandler_Loop14
61 C5D4 Sub_C5D4
62 C5E5 NmiHandler_OnNonzero8
63 C5F4 NmiHandler_Loop15
64 C5F8 NmiHandler_OnNonzero9
65 C607 Sub_C607
66 C612 NmiHandler_OnNegative
67 C613 NmiHandler_Loop16
68 C640 NmiHandler_Loop17
69 C65A NmiHandler_Loop18
70 C65E NmiHandler_Loop19
71 C661 NmiHandler_Loop20
72 C663 NmiHandler_Loop21
73 C673 NmiHandler_Loop22
74 C67B NmiHandler_Loop23
75 C693 Sub_C693
76 C69C NmiHandler_OnNonnegative2
77 C6A4 NmiHandler_Loop24
78 C6A7 NmiHandler_Loop25
79 C6A8 Sub_C6A8
80 C6C9 NmiHandler_Loop26
81 C6D1 NmiHandler_OnNonzero10
82 C6E0 Sub_C6E0
83 C6ED NmiHandler_OnNegative2
84 C6EE NmiHandler_Loop27
85 C710 Sub_C710
86 C71C NmiHandler_OnNonzero11
87 C725 NmiHandler_Loop28
88 C731 Sub_C731
89 C74A NmiHandler_OnZero2
90 C750 NmiHandler_Loop29
91 C76C NmiHandler_Loop30
92 C776 NmiHandler_Loop31
93 C77E NmiHandler_Loop32
94 C782 Sub_C782
95 C790 NmiHandler_Loop33
96 C794 NmiHandler_Loop34
97 C796 NmiHandler_Loop35
98 C7A8 Sub_C7A8
99 C7C6 NmiHandler_Loop36
100 C7C7 NmiHandler_Loop37
101 C7CB NmiHandler_Loop38
102 C7CF NmiHandler_Loop39
103 C7D3 NmiHandler_Loop40
104 C7D5 NmiHandler_Loop41
105 C7EA Sub_C7EA
106 C855 Sub_C855
107 C85D Sub_C85D
108 C865 NmiHandler_Loop42
109 C876 NmiHandler_Loop43
110 C886 Sub_C886
111 C8A6 NmiHandler_Loop44
112 C8A7 NmiHandler_Loop45
113 D776 NmiHandler_OnCarryClear2
114 D781 NmiHandler_Loop46
115 D78C Sub_D78C
116 D7AA Sub_D7AA
117 D7BA Sub_D7BA
118 EADA Sub_EADA
119 EAF0 NmiHandler_OnNonzero12
120 EB02 NmiHandler_Loop47
121 EB08 Sub_EB08
122 EB12 NmiHandler_Loop48
123 EB14 NmiHandler_Loop49
124 EB2A NmiHandler_OnNonzero13
125 EB3F NmiHandler_Loop50
126 EB5A NmiHandler_OnNonzero14
127 EB65 NmiHandler_Loop51
128 EB70 NmiHandler_Loop52
129 EB76 NmiHandler_OnCarryClear3
130 EB88 NmiHandler_Loop53
131 EB9B NmiHandler_OnCarryClear4
132 EBAC NmiHandler_Loop54
133 EBB7 NmiHandler_Loop55
134 EBC2 NmiHandler_Loop56
135 EBCB NmiHandler_Loop57
136 EC01 NmiHandler_Loop58
137 EC04 NmiHandler_Loop59
138 EC27 NmiHandler_OnNonzero15
139 EC2E NmiHandler_Loop60
140 EC4A NmiHandler_Loop61
141 EC54 NmiHandler_Loop62
142 EC5C NmiHandler_Loop63
143 ED51 Sub_ED51
144 ED60 Sub_ED60
145 F790 Sub_F790
146 F794 NmiHandler_OnNonzero16
147 F7A2 NmiHandler_OnZero3
+10
View File
@@ -0,0 +1,10 @@
MEMORY {
HEADER: start = $0000, size = $0010, fill = yes;
PRG: start = $8000, size = $8000, fill = yes;
CHR: start = $0000, size = $2000, fill = yes;
}
SEGMENTS {
HEADER: load = HEADER, type = ro;
PRG: load = PRG, type = ro;
CHR: load = CHR, type = ro;
}
+55
View File
@@ -0,0 +1,55 @@
; Galaga (U) application-specific RAM aliases - Pass 1
; Generated from every direct zero-page operand in reachable code:
; ref counts are reads/writes, `where` lists the referencing addresses.
; ZpXX names indicate storage with a role not yet unique enough for a behavioral name;
; Pass 2 replaces them with names derived from observed usage.
Zp00 = $00 ; 75 refs; reads=25 writes=50; used at $C022, C027, C11C, C132, +71 more
Zp01 = $01 ; 32 refs; reads=8 writes=24; used at $C020, C02B, C122, C1A5, +23 more
Zp02 = $02 ; 28 refs; reads=9 writes=19; used at $C13E, C1E1, C4B3, C4C2, +24 more
Zp03 = $03 ; 10 refs; reads=5 writes=5; used at $C519, C542, C6FB, C79A, +6 more
Zp04 = $04 ; 27 refs; reads=11 writes=16; used at $C140, C1D5, C4A2, C4DC, +21 more
Zp05 = $05 ; 21 refs; reads=7 writes=14; used at $C142, C1DB, C58B, C5BB, +17 more
Zp06 = $06 ; 15 refs; reads=6 writes=9; used at $C194, C2BE, C640, C65A, +7 more
Zp07 = $07 ; 4 refs; reads=2 writes=2; used at $EC1F, EC29, EC38
Zp08 = $08 ; 10 refs; reads=6 writes=4; used at $C1F7, C202, C208, C20F, +6 more
Zp09 = $09 ; 3 refs; reads=1 writes=2; used at $C1FD, C6A8, C6CE
Zp0A = $0A ; 35 refs; reads=21 writes=14; used at $C212, C21A, C509, C520, +30 more
Zp0B = $0B ; 5 refs; reads=0 writes=5; used at $C50D, C524, C536, C5DA, +1 more
Zp0C = $0C ; 13 refs; reads=4 writes=9; used at $C511, C528, C53A, C5D6, +5 more
Zp0D = $0D ; 3 refs; reads=1 writes=2; used at $C515, C53E, C6D7
Zp0E = $0E ; 2 refs; reads=1 writes=1; used at $C501, C8A7
Zp10 = $10 ; 2 refs; reads=1 writes=1; used at $C6B1, D7BE
Zp11 = $11 ; 2 refs; reads=1 writes=1; used at $C6B5, D7C4
Zp1C = $1C ; 13 refs; reads=8 writes=5; used at $C56E, C577, C57A, C57D, +7 more
Zp1D = $1D ; 9 refs; reads=5 writes=4; used at $C567, C570, C580, C5A1, +5 more
Zp1E = $1E ; 12 refs; reads=6 writes=6; used at $C14D, C1E7, C305, C30A, +7 more
Zp1F = $1F ; 4 refs; reads=1 writes=3; used at $C308, C310, D776, D794
Zp40 = $40 ; 2 refs; reads=1 writes=1; used at $C073, C275
Zp41 = $41 ; 2 refs; reads=1 writes=1; used at $C05B, C284
Zp42 = $42 ; 2 refs; reads=1 writes=1; used at $C05F, C27A
Zp43 = $43 ; 2 refs; reads=1 writes=1; used at $C063, C27F
Zp44 = $44 ; 2 refs; reads=1 writes=1; used at $C2F1, C2FB
Zp46 = $46 ; 2 refs; reads=1 writes=1; used at $C095, C2F7
Zp48 = $48 ; 7 refs; reads=6 writes=1; used at $C083, C09B, C547, C556, +2 more
Zp49 = $49 ; 2 refs; reads=1 writes=1; used at $C087
Zp4A = $4A ; 4 refs; reads=2 writes=2; used at $C077, C079, C0CD, C0D2
Zp4B = $4B ; 4 refs; reads=3 writes=1; used at $C06C, C091, C0D4, C18C
Zp4E = $4E ; 7 refs; reads=4 writes=3; used at $C11A, C128, C1C4, C1D3, +3 more
Zp4F = $4F ; 3 refs; reads=1 writes=2; used at $C151, C1C6, C234
Zp50 = $50 ; 1 refs; reads=1 writes=0; used at $C587
Zp51 = $51 ; 2 refs; reads=1 writes=1; used at $C56A, C56C
Zp52 = $52 ; 2 refs; reads=1 writes=1; used at $C572, C574
Zp5B = $5B ; 3 refs; reads=2 writes=1; used at $C08D, C0AD, EB0E
Zp62 = $62 ; 2 refs; reads=2 writes=0; used at $C089, EB0A
Zp6E = $6E ; 4 refs; reads=3 writes=1; used at $C317, C31C, C31E, C332
Zp6F = $6F ; 6 refs; reads=4 writes=2; used at $C320, C324, C32E, C330
ZpB0 = $B0 ; 5 refs; reads=2 writes=3; used at $EB18, EB3A, EB41, EB47, +1 more
ZpB1 = $B1 ; 1 refs; reads=0 writes=1; used at $EB1A
ZpB2 = $B2 ; 1 refs; reads=0 writes=1; used at $EB1C
ZpB3 = $B3 ; 1 refs; reads=0 writes=1; used at $EB1E
ZpDE = $DE ; 1 refs; reads=0 writes=1; used at $C042
ZpDF = $DF ; 1 refs; reads=0 writes=1; used at $C03E
ZpEC = $EC ; 1 refs; reads=0 writes=1; used at $EC61
ZpFA = $FA ; 1 refs; reads=0 writes=1; used at $C03A
ZpFF = $FF ; 3 refs; reads=2 writes=1; used at $C014, C032, C036
+203
View File
@@ -0,0 +1,203 @@
˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Line truncated
FeFei����iL�����L�������������������������������������������������������������������������������������������������������������������������������������������������������������������������(  !#������( �����������)  !#������() �����������O)���o)���)$
"
* $
"�*$
␍$)$ $ $
 $␍(+

$ ($␍($$ ␍A+ "$␍$$

$ (?****?::::?


?����������������������������xآ� � � �����������0������������������������ߩ�� 2� ;� �� �� � �� ����A���B���C���@��K��� �@��J�J�� � ���H��I�b�0�[�,�K�(�F)��H)��;�� �L����[莀�;�� -�L���� �� �Lu�H�H�H�J���J�K�� �� ��@ �� u�h�h�h@��)����H��h��`������������`�� ���N�������NL�� �����ȱHȱ�h��� ���$������OL��� �� �� ����ȝ�����OL�� �� ���� ��ȝ�����O�K�Z` ������ie���L��H�
��
�h�$`��h`���`�N�O��ȩ�ȄN����������`� �N�0@������ ���� ��� �ȱȅ
�� ��
���N�ҩ?� �� � � � �O��N`�( B¢ � �� � �� ����$� �����` D�� e������`�@� �B� �C� �A� `��A 2©��?�� �ʕ � V� ����K`��A��K �� ��`�������� ���s��L���@��@����@)����J����DI�%�F��D��`
��h�h���ȱ��l�n
8en�no� $o�����o�oEn`���������_����� ����(���0����, �Ð��8�0���� Lbâ�1�0������7�����`�8�0�(�i
�8��`��8�i�
�����`�`������ ���`�`��ʼ���������p���p�����������`0JJJJ`JJJJ �`��8�� I����,��8�� I�����,���������
��JJ�J���e���
��轀ą`���� ĥ� �� �`���␍�`
 ␍������������ �ĩ������� �ĩ������� �ĩ����؅���������e����`�������
�� �� ��␍�� �Ʃ�
�� �� �� �ǩ��
�� �� ��␍�� �ƥHjj� � �� �ťHjj� Ǡ��q0ȄeQ�Q��eR�Rjfjfj�j��@���P�8����eH)�+�)��,�y��������) ���������м���������`� � �� �Hj�� �
ƥ
i�
� ��`�Ѕ
ƥ
8��
� ��`��
i���`��
0�
�� ��ȹ ����Q��
)��X�)��)@����X�)>�e��� ɂ�����i���
�Ɉ�� �ȱ
�LUȠ�
)��(��i���Lcƭ���␍���� �ƈ�`� � �צ������
��j�q�i� vȤ ` �ƥ
e␍�
� ��`��
�i���`��
0�)��X�)���@����
i�L�ȩ؅
�� �� ��
� 1ǥ
i�
� ��`8��
���2���8���N���N��
`��
��
q
��m���n���o��L�ǩх�Ӆ��Յ�ׅ����
�ȱ
�Leȩ�0�݅���
���
�L�Ǭ��������������������`��0
��0��0���i����������8���8�������i� eȥi���� ���� eȥi��� ���� ]ȥ8����� @���i�L]ȥ� )����� �ȥ��i�L�� �ȥI@��i������������������`��`�b�`�
ei��a����0���������u�
��
������i��c��������� �����L ɵ���������͈Л������ i�
��
�������L�˩������� �� W� � ʦ���nLʩ������������L��)�Q������I�a������ �����L�ɢ��� ������H)��L��L-��Hj�s��b��Hj�␍j���H)�_�c�`��c�a��5�A�΅���������� ���(��K� %ʩB� ʦ���ȩT�Lʩ��!����0����!����0 ���� ������������,��� w�����`H��� e���� ���h�����$�����+�����L_��%���� ��L_�����"����Lb©��d �ʥd�����`�H)����d�`��3���e��f��dL�ʢ�� ��ۅ�"������� t����Lˮ��Ȱեe�␍���� �������d`����e� ˽��efH)�h� i@)��fe�f�f�i���"i� V�� e�������� Ȅ! V����` ̭������ ���������A`������� �î��ʎ���$�6���·�������� �î�����|��"���Ȣ��Lt��$� �!�J� ��!���ʽ2�i���!i� V�� e���� �$��L� ��!LV�����!���ʆLb�`bd�Hʊ)��T��]������]�\�q�`�� �`�T�0 � Í��̳̩̍�U�V�Y��T�X8�JJJ�W����M�U�U�]�D��U�T)� �� _��V�V��,�TL���V0 �� D�L�̩�T� p��%��L��U�U���T�Y8�� �Yi%��i�L��V
i7���i���Wq�ȱi��i�����`������������T :� �â��ʝ���ʕp������������r�����` �ͩ�s�t �詥��������������o�� � �` �� ��`������� �î�������`��C�b � R� ���F)0�
�C�C�����
���C � R���H�I �� 3��F) ���I�ߥI���I OΥF)�f�I��שx�ȩ�a 0� �� e� � ���F)0Ъ t� 8Ҧ{� ��������L�ͥy������0�Ѧ���␍�D�� ��H��� �H�� ��D��L-��߅ީ�a�b �� �L�� �� t� 8ҥ� �Φ{�J��� 3�L�Ω� �ҩ��������q�r�� � t� �������r�� -� �� 3� �ϩ< *�`�w␍�TИ�|����y����І�< *Ҧ������ ��L�� R� �� ��L����# Rϭ��� �åaI�a������� �� �L Ϧ{���������� ���V�� � tҩ� *ҭ\�q �� �� �©��ޅ��� ������!���Ȣ�� t����"���Ȣ�� t� Eå#�$�(�#�%�%�r��"����� � t� W� �©������ ���FG����� �� �ҢW�� �L�¢j�� � tҩx *Ңj�� -� �� �˩��`� ���\�q��z�{`�w��y�� ���|0`�< *� �������)�@ e͢b�� �����!���Ȣ�� t����d�Z *ҩ *ҥd��� ���! >��\�q` �͢z�� � ����������Z *ҩ��d�Z *� �� 8ҥd���z�� -� �� t� 8ҭ����< *ҥ��(���ƩP�ǩ�������$��Lѩ�Ʃ`�ǩ�����5�� ����� ��� *ҩr��!���Ȣ© t����=�H c�h8������� ����ʆ©d�ĩx��L�ѩ
*Ң��� -��
*Ң���L��� *Ң��� ��؅� ҥ� *ҥ��8��I�� �� �� � \ҩ
� �� �ɩ������ �� ����ԩ& p�����! >��� *Ң��� -����� -�� *Ң��� -��۩� -�� *ҢF�� ��< *�`����!������ t��ҩ�L�H �� 8�h8���` �� 5� � �� � �� �� �� o� 9� �� 8̭b��0␍�F)���[��`������L�� �����!����a�Lt����!�L>� �©��P� B� �� 7� k� �ʩ��B���C�@ �@� ��`����Hj�`��� �B����)���n����� ������� ����LVө���� �������LV������ �/���������� ��8�)��d��␍��� oש������`
�i
�� i���������$� �����L�Ԯ�� �0�H�����j�p��t� ���� � � i�!������L�Խ������)iD�� ����)�� ��� ��� j��� �ﮖ�����␍�x�� ����,��
������� �2�����
� �p� �r�!LKԆ ��轗������ ������L�ԩ� ����*�
�� �
��~Lsԩ|� �x�!L�Ԇ ��轗������ � �
��z� �� ����л� �
��z� L�ԩ��������������� i����i� ��
���)e
��)�Je � i�� �
�
��
�� V���� e���� �$�Ȕ ��LV�� ����������0��ޑΐLaՅ��� ����Ȫ��������0��������i����)�i`����h�i������u)���L�
�)�i
�� i��)e��)p �����0���L�թ�� �����)e�����␍)e��0�␍)�Je � i�!L6ש$� �!L6� ��L9ש…�#�����L\����
����x��L��o��L����L9ע���������������)��
ei@��j� �$� �!L6������$���z� �$�!��$���|�"L�֩ �����I��0�����U��������)��
ei@��j� �p� �r�!L6������|���~� �x�!��z���~�"� ���L9עʽ������L9׮� �L�֪
iB�� i�� �$� �!L6׭j�p��t� ���! �Ԧh��)�h��Lu�`�8���j�ϐ�?�j��轊%���� �`��Laզ� ���~�`e��A�8�`H ��������h���)e��A�`)�i` �ׅ��`H �ׅh �ׅ`�x�������x)��������� ���������d��R�����…Åĩ���J�����؍xLB�� ���������d�R
mR�������[�x�P�
��=��t�>��u��
eiυv��i�w�(����s����p��`�d �Q�fٌ،ة�d���`�p���E��z�`�|����s��p������Ԣ�dj��<�s�q�q�R
mR��qJe����������q�r�t��r`��r �ڦp����+� ��1�|?�dj�9 ?٢� ��|� !�L:٭��␍��p������L��Μ ?م �I�q�S�, ��pL�ؤq�v)��'�v)�%��`�Y͔�␍��d���v�ꭕ����z�� �ڭZ�W��8���M���������$���;�+�Z��م �-��م% �ڠ���Z�+Ȍ��%� �� �� !۠� !�`)+-�s��j�j�g������������Lsڄ+I�8i� �)��'�y�����j�
�!�% ��Lmک �% �ڄ�+i��'�������� �ڥ�+��'�� �-�'�% ���������Ӧ��ʥ���j`�Hj�0�h�h�e�`�����������`�+�� ��% �ک�h`�i�i�f�`�����������`�+�� ��% �ک�i`��� ��`�+)�����'� ���p�,�+ ե+ �ץ�"��#������ �0�i�����)�*�� ������`��� �|������0 Zۥi�����` �ߠ�) À����݄�oߗ߼߆޵ގ��ߗݵޠ�)ઠ�8�Y��0L��)��C���)e��:�� q�)�� �àq��i��:��
q�)�� �àq�`���8�� � ��*�*��-*�B��*���8������*����i�����)?
���e��L��*� �)��L�ۥ) �n܆܏ܦܯܿ�X���I���h���z�~� �ߠ�*���8�,���6 �ߠ�- �ߠ�*��I�8i�� �ߠ�␍��ɠ�i �L�۠�ɠ�8� �L�ۭQ���������X���`���@���ޥz��d�'� � ��L>ݠ � �ׅ���8� �'�i � � �p�ȱ�נ�p��� �)?e�����Ѓ�z��d�%��� �ߠ�)��L]� ���ȩ� ��L�ۢ���Щ ���������������i�@� �)�� �H�0�ie��h �נ�`��H��h��� ��L�ߠ����� �����} �ׅ���� ��i,������ �ׅ���� ��i,���H)�`��)��� � ��� �������`���������� ,� 8�L�ߩ�|��y`��)� ���`� �۠��ȱ� _Ġ�)��
�i,��`��i�`��H o�h��`� ���H���ȱ�h����������}�~����� � �� ĥe���L�ݢ���)8��I�i�� �I�i���'�)��6�j� ���� �����)�L�ۥ0���H ��hi ��`��L�� �۠����ȱ��� ΔΕ����`�����|`�Ty�4���T���X��)� �� ��}��~`�T��� �� ���� ������)��`��
���������`��Hi�h���`�����`��i�`��8��`�0s�y��m�b���e �)i����a�E)���C)���`�H�`�`��@��`���0���.�)��������������y�������� 5â �����0� �����␍�i�� ���ɼ�������0����������i��`��y���)��� ��}���`������(9EMPME9(��ǻ��������_��_�u�d��n�z�j�H-^�B �)p�� 07�')�0�!)8��␍�$�"8�ɀ��,�8��,���0 �i�� ��L����w�"����#��� _Ħ��������0)��Hj��i�����%���u�H)��h ��u���8�ɸ�
�i�� ��`�w����0��y ���]���6���&�s�#����0{�T��/�X8�$��%iH����yʆz��� p�������q`����0=�b��� �)?�ʩF�*F�*�˥D)�˅D����Ǎ�aʊ)��Dj�j�`j����j�������`��j�ʐ����`�� �����ǐ��Ǎ����\�q��y�z`��y�!Lp� ���~�0���X� ��L�����T�ɛ���)��`����y���������X��~�%�����T�! p��<�`�~�0F���i�������␍��������]`��y�����������`�ɀ�ߩ�����`��y��{ʆ|�`��L-��}��� �׍����L#⊦~�+�� ��}�+��  �i�����L��!��"8���#�L#���y��|� ���� �)���&�`��z��� ����������␍��� �w��y`��� ��L#⩪� '��Ǎ�i�`��Y���L���L����L����g�
��`�`�����`��z�0��y`����������y�\�q`�i����`�i����`����� ��0ȱ8��� �ȱ8��� � @��i�0֦y��� 3���������`��|�0���0�8����8��� 橀���i���А�����O�� �ׅ
8��␍��
�8���`���=�j�����)�� �׆␍�␍�A�� 8����� ��LJ�� �␍� )�
��`�� � �צ � 8�� ���� LF�� ���` 9æ�������� �)�@�Q���������y�|莓������L����� Iש��`������_��������d��\��T� ��}���T�|��g��}�`�y�x���|�{Q������d��>��
�����d��,� �
����������� ������� �� �ȭx����ΔΕ������
�� �����8����� ��`���������� I׭� �
� ե 8�L9����Δ�� ՠ��� ����� ���
JJJJ����� �� 9�� �0���`��`��`�Zi� ���Z������
��� �����` �\��`�y���������␍�y���� ��8��e ������0����̰���� 8��iLm��i�� ����������|�����0��Đ�̰���8��LZ��i��А�`H����� �Lw�H�w��������h�y��)��������Ǎ����������y`�L�詀������Ǎ������z�y�� ����q��{`�r�����r�
�u
���� "����VVWW�U
mU�U�T
mT�T8.^8.^`����H)șP�hJJJJ�P��`�s�s�<�␍�t��t��s�T�U�t�0����`��ȽJ��f�h��e�t�u�0�轆��v�W�V�����������
��Ƚ���p����g`D�D� !Sp2SpBTp!R"!cp"c"!bp!c�!#d#0r03v#0r03v#0r0!4�$)�0D�$)�0"'�p!4�%*!�0D�%*!�0D�%,!�0!4�&,0�D�&,0�D�&,0�`P@P@0P00@0 @ 00 0   �pP�`@pP@`@0P00@00@ 00 0 ��@���@������������i�����'��`�'�b��[���������������������5�� 8�����Le��ʵ�� �����i���
���ȱ�@�����i����ж����� �
�
)I�@�����������������������8���J�i��������`��� Q� `��� `��� `��� `������� `��� Q� `����Q�`�;�CH)�JJ���������h)��Ff�����)���������8����ȑL���`����� Å��������������������� ���#�'�*�G�������L�� `����)?�L� `����)��L� `����)��L� `���L� `���L� `���L�������L����,� `���մ�B����0���,� `���շ�����$���,� `���պ����� ��i�L� `���L��
���������`����HȘ��h`���
��i���������`���C��N�v6��f�s��^��� ���������9�a�B�h������� ��������� �P�������S�"� ��� �����������j��(b$�@c+;+;j��@l`�8�O@�rQfr*fBr:fr*frRfr*fBr:frRfrf rZfRrBf2r*f
r fr fRhB*R:���*�O@r:fQr*frfQ�rf�r*fRrZfRrBf2r*fr
f*r2fBr2fhB**���p��xRrfxRr+fCx;+3r+fx 3 rSf3x+rS�f;�D �o;e;j;t++j+oCeCjCt;;j;�eCjCeCjCeSjSeSjSSSejej���8�D8c␍\TLD<4,$ [SKC;3+# ZRJB:2*"
�I�tQ��eYjYeYjYe
j
e
j
���tCjB�
�e;S�e$j$e$j$e4j4e4j444�
eCDDC�OH�dR�+� ���u+g+3C��uS���ug ��u+�6uKgKS�Xu�D(bS;K+;+�D(b3KK3�(aS[b a\�cS�?a#+3;3+# ���(a+;KS$g,a [SKC�aBJbRaZb ad#aRZba ba#+e3a ba#b+a3;C�a ba#b+a3;C�@f;+;Sr,�@f++;Sr���e;+Z::*Y*:JZt�O�eZJZ::YI99AIY*t:�0j[K[C;t���f;#+#Z:J*"Y"*":*J:Z:JZ�O�f#ZJZ:J"*YI99Y"*":*J:*"��l;rf;+#lrl#+;K;f+#Z�*���f;+Z:B*Y*:*B:Z:JZ���fZJZ:B*YI99Y*:*B:*��l;rf;+lrl+;C;f+Z�*�Ga␍\L<, [K;+�@
g� j���0w!9!A9YA���0wJBJ*B"����xR:r`frRf:h:R2JxB+r`f3rfZhB2Z2����xR:r`fQr:fh:2Bx*Br`frZfBh:YB2Y�����xS��[x�@,����GcS������`Œɉ�ɉ�������ŕ�ɉ��ɉ�������`ő�Ʌ�Ʌ��� �P���`Œ����I�� �P���`Œ�����I��� �@��������@��E��� ��
�
� �� � �BFF�
l�F���/� � �BF�
l�F�� �/�B�F�
l�F��������� �`�� ��B�F�
l�F������ˈ�̈��
��� �JIINSNR�����ˈ�̈�
���$�� �B�F�
LFŅEEFFP�����
����� � �JN\�����EFEFIQ�ą�
���� �JNRVP��Ą���FM…��
���� � � �JN\�����EFEFIQ�ą�
����#�� �DN�FQU����
���
����"�� �D�E�␍����� �
����� GFEKTN�F�����
����"��� �� �DN�FQU����
�� �� �DN�FQU����
����� � GFEKTN�F�����
����(�T��� �`��������È�����������`�������˃�Ɇ��T��� �`���ˁ�`H������`�ו��T��� �`�Č��ˁ�`�LN��T��� �`��LF��A�`Č�������`��ˁ�`�P��I�Ł�`��P��� �`��A�`˅�Eׅ�Eʅ���A�`��P��� �`�Ł�`�E˅�E˅�EA�Ł�`������`��NG�F�LH�DH�LHK�JEFH�LH�DH�LHK�JEFH�LH�DH�LHFDCFFFGNY����P���`ˑˍˋˉˆ˄��D �`������` ���ZN�GNZO��̇�����̉��������P��� �`�Ł�` ��A�`�Ł�` ��A�`�Ł�` ��A�`�Ł�`������`����Ă����RHD�BDHRR���Ă����NFC�BCFKF�Ł�`��P��� �`��A�`��ȁ�`� ��A�`������` ń��D�dž��D�ń��P��� �`��MKH�GHKMPMKH�GHKMV������������������ƒ�������������@��� �`��HFED�CDEFHLHFED�CDEFHV�����������������ć����������������`�����׉�LN������`�����׍�QL�������� ���*�� Ý�)��������`BWeX`�=�JoQpXq�(�;�@�/�2�<�?F.K�������������������������������������������������������������������������������������������"
��)5*5�!
"$�! 
$�!
�!
␍"�!
�! 
$
!  $*c! $$c!�! �!␍ 
$ �! $�!$�! H!
'$$'�! $␍" $$a"&$
�#�������#␍������PP�������#␍������PP�������#␍UUUUUUPP______�#�������!$
␍? 0((!0((�#8������UUPPUUUUUUPP______������������UU������UU�+8����������������4Nh�����4N������������������������������������������������
�����������VRNJFB��������ûŻ����*(& "(4(X y  � x!$2FHBD>@
:<8967�"
␍?!␍?!␍?!@"$NOPQ$`"$RSTU$�"$VWXY$�"$Z[\]$�"^_`abc�"defghi#jklmno�#�������#HXhx
(2<2(
FPZdnx�����xndZP
**********
 !1"****2#3 
  0!1"2#3$4(((((((((())))))))))**********++++++++++,,,,,,,,,,+9IYgw���)9IYiy���%7IYiy���"7IYiy��� 3EWk}���/BWj���-AWk���� )9IYiy��␍-=M]m}��!1AQaq���%5EUeu���)9IYiy���-=M]m}���!1AQaq����%5EUeu����)9IYiy�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������  
����������������������������� ����
��
�� ␍�␍� ����������S�]�]�S�g�q�{���q���]�45D$E%�#&�'!("�6273FBGC�0819@HAI�@IHABGFCDE0981276345(!"'&#$%�������� ���$�g�D��������\��������]�v�r�����������4�4�4�4�q�q�������R�8�C�]�t����
�&���0�A�������  ����������������� �����������������
#'('#
�����������
������␍%-242-%␍�����������␍������ -7>@>7- ���������������
File diff suppressed because it is too large. Load diff
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
# routinemap (seed)
C000 Reset
C0C8 NmiHandler
1 # routinemap (seed)
2 C000 Reset
3 C0C8 NmiHandler
+108
View File
@@ -0,0 +1,108 @@
; =============================================================================
; Nintendo Entertainment System hardware symbols
; =============================================================================
; -----------------------------------------------------------------------------
; PPU registers
; -----------------------------------------------------------------------------
PPUCTRL = $2000
PPUMASK = $2001
PPUSTATUS = $2002
OAMADDR = $2003
OAMDATA = $2004
PPUSCROLL = $2005
PPUADDR = $2006
PPUDATA = $2007
OAMDMA = $4014
; -----------------------------------------------------------------------------
; Controller ports
;
; $4016:
; Write: controller strobe
; Read: controller port 1
;
; $4017:
; Read: controller port 2
; Write: APU frame counter
; -----------------------------------------------------------------------------
JOY1 = $4016
JOY2 = $4017
; -----------------------------------------------------------------------------
; APU pulse channel 1
; -----------------------------------------------------------------------------
APUPULSE1CTRL = $4000
APUPULSE1SWEEP = $4001
APUPULSE1TIMERLO = $4002
APUPULSE1TIMERHI = $4003
; -----------------------------------------------------------------------------
; APU pulse channel 2
; -----------------------------------------------------------------------------
APUPULSE2CTRL = $4004
APUPULSE2SWEEP = $4005
APUPULSE2TIMERLO = $4006
APUPULSE2TIMERHI = $4007
; -----------------------------------------------------------------------------
; APU triangle channel
; -----------------------------------------------------------------------------
APUTRIANGLECTRL = $4008
APUTRIANGLETIMERLO = $400A
APUTRIANGLETIMERHI = $400B
; -----------------------------------------------------------------------------
; APU noise channel
; -----------------------------------------------------------------------------
APUNOISECTRL = $400C
APUNOISEPERIOD = $400E
APUNOISELENGTH = $400F
; -----------------------------------------------------------------------------
; APU DMC channel
; -----------------------------------------------------------------------------
APUDMCCTRL = $4010
APUDMCDIRECT = $4011
APUDMCADDR = $4012
APUDMCLENGTH = $4013
; -----------------------------------------------------------------------------
; APU status and frame counter
;
; $4015:
; Write: enable or disable the five APU channels
; Read: channel and interrupt status
;
; $4017:
; Write: APU frame-counter mode and IRQ inhibit
; Read: controller port 2
; -----------------------------------------------------------------------------
APUSTATUS = $4015
APUFRAMECOUNTER = $4017
; -----------------------------------------------------------------------------
; Controller masks
; -----------------------------------------------------------------------------
PAD_RIGHT = $01
PAD_LEFT = $02
PAD_DOWN = $04
PAD_UP = $08
PAD_START = $10
PAD_SELECT = $20
PAD_B = $40
PAD_A = $80
PAD_HORIZONTAL = PAD_LEFT | PAD_RIGHT
PAD_VERTICAL = PAD_UP | PAD_DOWN
PAD_DPAD = PAD_HORIZONTAL | PAD_VERTICAL