From 2c8dba2450d33c4ebf8a93fdb0014b327fef98c4 Mon Sep 17 00:00:00 2001 From: "Michael C. Martin" Date: Sat, 20 Aug 2011 16:33:25 -0700 Subject: [PATCH] Initial import of the Ophis 1.0 distribution and supplemental material --- doc/a2blink.map | Bin 0 -> 256 bytes doc/a2inverse.map | Bin 0 -> 256 bytes doc/a2normal.map | Bin 0 -> 256 bytes doc/c64-1.oph | 12 + doc/c64-2.oph | 40 ++ doc/docbook/cmdref.sgm | 478 ++++++++++++++++++++++ doc/docbook/ophismanual.sgm | 29 ++ doc/docbook/preface.sgm | 74 ++++ doc/docbook/samplecode.sgm | 749 +++++++++++++++++++++++++++++++++++ doc/docbook/tutor1.sgm | 315 +++++++++++++++ doc/docbook/tutor2.sgm | 107 +++++ doc/docbook/tutor3.sgm | 160 ++++++++ doc/docbook/tutor4.sgm | 110 +++++ doc/docbook/tutor5.sgm | 157 ++++++++ doc/docbook/tutor6.sgm | 118 ++++++ doc/docbook/tutor7.sgm | 143 +++++++ doc/kernal.oph | 67 ++++ doc/ophismanual.pdf | Bin 0 -> 367372 bytes doc/petscii.map | Bin 0 -> 256 bytes doc/tutor1.oph | 18 + doc/tutor2.oph | 22 + doc/tutor3.oph | 45 +++ doc/tutor4a.oph | 69 ++++ doc/tutor4b.oph | 71 ++++ doc/tutor4c.oph | 73 ++++ doc/tutor5.oph | 75 ++++ doc/tutor6.oph | 102 +++++ doc/tutor7.oph | 96 +++++ site/index.html | 32 ++ site/manual/a454.html | 184 +++++++++ site/manual/a505.html | 311 +++++++++++++++ site/manual/book1.html | 467 ++++++++++++++++++++++ site/manual/c200.html | 208 ++++++++++ site/manual/c236.html | 226 +++++++++++ site/manual/c292.html | 344 ++++++++++++++++ site/manual/c329.html | 402 +++++++++++++++++++ site/manual/c35.html | 180 +++++++++ site/manual/c371.html | 348 ++++++++++++++++ site/manual/c419.html | 184 +++++++++ site/manual/f10.html | 186 +++++++++ site/manual/x119.html | 206 ++++++++++ site/manual/x140.html | 197 +++++++++ site/manual/x149.html | 317 +++++++++++++++ site/manual/x214.html | 198 +++++++++ site/manual/x22.html | 197 +++++++++ site/manual/x225.html | 203 ++++++++++ site/manual/x257.html | 289 ++++++++++++++ site/manual/x287.html | 161 ++++++++ site/manual/x430.html | 295 ++++++++++++++ site/manual/x449.html | 162 ++++++++ site/manual/x461.html | 183 +++++++++ site/manual/x465.html | 176 ++++++++ site/manual/x469.html | 231 +++++++++++ site/manual/x473.html | 209 ++++++++++ site/manual/x477.html | 230 +++++++++++ site/manual/x481.html | 232 +++++++++++ site/manual/x485.html | 235 +++++++++++ site/manual/x489.html | 239 +++++++++++ site/manual/x493.html | 266 +++++++++++++ site/manual/x497.html | 204 ++++++++++ site/manual/x501.html | 257 ++++++++++++ site/manual/x51.html | 428 ++++++++++++++++++++ site/manual/x572.html | 309 +++++++++++++++ site/manual/x620.html | 212 ++++++++++ site/manual/x647.html | 373 +++++++++++++++++ site/manual/x692.html | 358 +++++++++++++++++ site/manual/x732.html | 595 ++++++++++++++++++++++++++++ site/ophismanual.pdf | Bin 0 -> 367372 bytes src/Ophis/CmdLine.py | 17 + src/Ophis/CorePragmas.py | 202 ++++++++++ src/Ophis/Environment.py | 75 ++++ src/Ophis/Errors.py | 24 ++ src/Ophis/Frontend.py | 333 ++++++++++++++++ src/Ophis/IR.py | 161 ++++++++ src/Ophis/Macro.py | 62 +++ src/Ophis/Main.py | 124 ++++++ src/Ophis/OldPragmas.py | 28 ++ src/Ophis/Opcodes.py | 168 ++++++++ src/Ophis/Passes.py | 518 ++++++++++++++++++++++++ src/Ophis/__init__.py | 5 + src/ophismain.py | 4 + tests/test6510.bin | Bin 0 -> 151 bytes tests/test6510.oph | 78 ++++ tests/test65c02.bin | Bin 0 -> 122 bytes tests/test65c02.oph | 74 ++++ tests/testbase.bin | Bin 0 -> 321 bytes tests/testbase.oph | 157 ++++++++ tests/testdata.bin | Bin 0 -> 80 bytes tests/testdata.oph | 7 + tools/charmaps/a2blink.map | Bin 0 -> 256 bytes tools/charmaps/a2inverse.map | Bin 0 -> 256 bytes tools/charmaps/a2normal.map | Bin 0 -> 256 bytes tools/charmaps/makea2maps.py | 20 + tools/charmaps/petscii.map | Bin 0 -> 256 bytes tools/opcodes/chipsets.txt | 3 + tools/opcodes/gensets.py | 153 +++++++ tools/opcodes/op6502.txt | 256 ++++++++++++ tools/opcodes/op6510.txt | 256 ++++++++++++ tools/opcodes/op65c02.txt | 256 ++++++++++++ 99 files changed, 16145 insertions(+) create mode 100644 doc/a2blink.map create mode 100644 doc/a2inverse.map create mode 100644 doc/a2normal.map create mode 100644 doc/c64-1.oph create mode 100644 doc/c64-2.oph create mode 100644 doc/docbook/cmdref.sgm create mode 100644 doc/docbook/ophismanual.sgm create mode 100644 doc/docbook/preface.sgm create mode 100644 doc/docbook/samplecode.sgm create mode 100644 doc/docbook/tutor1.sgm create mode 100644 doc/docbook/tutor2.sgm create mode 100644 doc/docbook/tutor3.sgm create mode 100644 doc/docbook/tutor4.sgm create mode 100644 doc/docbook/tutor5.sgm create mode 100644 doc/docbook/tutor6.sgm create mode 100644 doc/docbook/tutor7.sgm create mode 100644 doc/kernal.oph create mode 100644 doc/ophismanual.pdf create mode 100644 doc/petscii.map create mode 100644 doc/tutor1.oph create mode 100644 doc/tutor2.oph create mode 100644 doc/tutor3.oph create mode 100644 doc/tutor4a.oph create mode 100644 doc/tutor4b.oph create mode 100644 doc/tutor4c.oph create mode 100644 doc/tutor5.oph create mode 100644 doc/tutor6.oph create mode 100644 doc/tutor7.oph create mode 100644 site/index.html create mode 100644 site/manual/a454.html create mode 100644 site/manual/a505.html create mode 100644 site/manual/book1.html create mode 100644 site/manual/c200.html create mode 100644 site/manual/c236.html create mode 100644 site/manual/c292.html create mode 100644 site/manual/c329.html create mode 100644 site/manual/c35.html create mode 100644 site/manual/c371.html create mode 100644 site/manual/c419.html create mode 100644 site/manual/f10.html create mode 100644 site/manual/x119.html create mode 100644 site/manual/x140.html create mode 100644 site/manual/x149.html create mode 100644 site/manual/x214.html create mode 100644 site/manual/x22.html create mode 100644 site/manual/x225.html create mode 100644 site/manual/x257.html create mode 100644 site/manual/x287.html create mode 100644 site/manual/x430.html create mode 100644 site/manual/x449.html create mode 100644 site/manual/x461.html create mode 100644 site/manual/x465.html create mode 100644 site/manual/x469.html create mode 100644 site/manual/x473.html create mode 100644 site/manual/x477.html create mode 100644 site/manual/x481.html create mode 100644 site/manual/x485.html create mode 100644 site/manual/x489.html create mode 100644 site/manual/x493.html create mode 100644 site/manual/x497.html create mode 100644 site/manual/x501.html create mode 100644 site/manual/x51.html create mode 100644 site/manual/x572.html create mode 100644 site/manual/x620.html create mode 100644 site/manual/x647.html create mode 100644 site/manual/x692.html create mode 100644 site/manual/x732.html create mode 100644 site/ophismanual.pdf create mode 100644 src/Ophis/CmdLine.py create mode 100644 src/Ophis/CorePragmas.py create mode 100644 src/Ophis/Environment.py create mode 100644 src/Ophis/Errors.py create mode 100644 src/Ophis/Frontend.py create mode 100644 src/Ophis/IR.py create mode 100644 src/Ophis/Macro.py create mode 100644 src/Ophis/Main.py create mode 100644 src/Ophis/OldPragmas.py create mode 100644 src/Ophis/Opcodes.py create mode 100644 src/Ophis/Passes.py create mode 100644 src/Ophis/__init__.py create mode 100644 src/ophismain.py create mode 100644 tests/test6510.bin create mode 100644 tests/test6510.oph create mode 100644 tests/test65c02.bin create mode 100644 tests/test65c02.oph create mode 100644 tests/testbase.bin create mode 100644 tests/testbase.oph create mode 100644 tests/testdata.bin create mode 100644 tests/testdata.oph create mode 100644 tools/charmaps/a2blink.map create mode 100644 tools/charmaps/a2inverse.map create mode 100644 tools/charmaps/a2normal.map create mode 100644 tools/charmaps/makea2maps.py create mode 100644 tools/charmaps/petscii.map create mode 100644 tools/opcodes/chipsets.txt create mode 100644 tools/opcodes/gensets.py create mode 100644 tools/opcodes/op6502.txt create mode 100644 tools/opcodes/op6510.txt create mode 100644 tools/opcodes/op65c02.txt diff --git a/doc/a2blink.map b/doc/a2blink.map new file mode 100644 index 0000000000000000000000000000000000000000..72a00d561cc04b7ace3c2f1970945dabc309416d GIT binary patch literal 256 zcmV+b0ssDhfr5jCg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~dyVPa!sWoBn+X=-b1 zZEkOHadLBXb#`}nd3t+%eSUvHK|(`BMMg(RNlHshO-@fxQBqS>RaRG6Sz23MU0z?{ z;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0({r>*|0RjUA1qKHQ2?`4g4Gs?w5fT#= z6&4p585$cL9UdPbAtECrB_<~*DJm;0EiNxGF)}kWH8wXmIXXK$Jw89c!NSAD#m2|T z$;!*j&Cbuz(bCh@)z;V8+1lIO-QM4zp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z& Gy}rM%1b=}5 literal 0 HcmV?d00001 diff --git a/doc/a2inverse.map b/doc/a2inverse.map new file mode 100644 index 0000000000000000000000000000000000000000..70ad9ed61e307887c2e555c0067971c89dd43441 GIT binary patch literal 256 zcmV+b0ssDhfr5jCg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~c{AtECrB_<~*DJm;0 zEiNxGF)}kWH8wXmIXXK$Jw87G0RjUA1qKHQ2?`4g4Gs?w5fT#=6&4p585$cL9UdRx z;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0({r>;J!NSAD#m2|T$;!*j&Cbuz(bCh@ z)z;V8+1lIO-QM4zp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z&y}rLdK|(`BMMg(R zNlHshO-@fxQBqS>RaRG6Sz23MU0z>cVPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3t+% GeSUwh1b=}5 literal 0 HcmV?d00001 diff --git a/doc/a2normal.map b/doc/a2normal.map new file mode 100644 index 0000000000000000000000000000000000000000..b383772f4260e6302f2e0632ff7ef221fb78cd30 GIT binary patch literal 256 zcmV+b0ssDhfr5jCg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~edp`xRtrKYE-sj922 zt*)=Iv9hzYwYImoxw^Z&y}rM|!NSAD#m2|T$;!*j&Cbuz(bCh@)z;V8+1lIO-QM5e z;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0({r>*|0RjUA1qKHQ2?`4g4Gs?w5fT#= z6&4p585$cL9UdPbAtECrB_<~*DJm;0EiNxGF)}kWH8wXmIXXK$Jw87`K|(`BMMg(R zNlHshO-@fxQBqS>RaRG6Sz23MU0z>cVPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3t+% GeSUwh)_;Kj literal 0 HcmV?d00001 diff --git a/doc/c64-1.oph b/doc/c64-1.oph new file mode 100644 index 0000000..04166dd --- /dev/null +++ b/doc/c64-1.oph @@ -0,0 +1,12 @@ +.word $0801 +.org $0801 + +.scope + .word _next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +_next: .word 0 ; End of program +.scend + +.advance 2064 + +.require "kernal.oph" \ No newline at end of file diff --git a/doc/c64-2.oph b/doc/c64-2.oph new file mode 100644 index 0000000..720ef21 --- /dev/null +++ b/doc/c64-2.oph @@ -0,0 +1,40 @@ +.word $0801 +.org $0801 + +.scope + .word _next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +_next: .word 0 ; End of program +.scend + +.advance $0810 + +.require "kernal.oph" + +.data zp +.org $0002 + +.text + +.scope + ; Cache BASIC's zero page at top of available RAM. + ldx #$7E +* lda $01, x + sta $CF81, x + dex + bne - + + jsr _main + + ; Restore BASIC's zero page and return control. + + ldx #$7E +* lda $CF81, x + sta $01, x + dex + bne - + rts + +_main: + ; Program follows... +.scend \ No newline at end of file diff --git a/doc/docbook/cmdref.sgm b/doc/docbook/cmdref.sgm new file mode 100644 index 0000000..5c3d557 --- /dev/null +++ b/doc/docbook/cmdref.sgm @@ -0,0 +1,478 @@ + + Ophis Command Reference +
+ Command Modes + + These mostly follow the MOS Technology 6500 + Microprocessor Family Programming Manual, except + for the Accumulator mode. Accumulator instructions are written + and interpreted identically to Implied mode instructions. + + + Implied: RTS + Accumulator: LSR + Immediate: LDA #$06 + Zero Page: LDA $7C + Zero Page, X: LDA $7C,X + Zero Page, Y: LDA $7C,Y + Absolute: LDA $D020 + Absolute, X: LDA $D000,X + Absolute, Y: LDA $D000,Y + (Zero Page Indirect, X): LDA ($80, X) + (Zero Page Indirect), Y: LDA ($80), Y + (Absolute Indirect): JMP ($A000) + Relative: BNE loop + (Absolute Indirect, X): JMP ($A000, X) — Only available with 65C02 extensions + (Zero Page Indirect): LDX ($80) — Only available with 65C02 extensions + +
+
+ Basic arguments + + Most arguments are just a number or label. The formats for + these are below. + +
+ Numeric types + + Hex: $41 (Prefixed with $) + Decimal: 65 (No markings) + Octal: 0101 (Prefixed with zero) + Binary: %01000001 (Prefixed with %) + Character: 'A (Prefixed with single quote) + +
+
+ Label types + + Normal labels are simply referred to by name. Anonymous + labels may be referenced with strings of - or + signs (the + label - refers to the immediate + previous anonymous label, -- the + one before that, etc., while + + refers to the next anonymous label), and the special + label ^ refers to the program + counter at the start of the current instruction or directive. + + + Normal labels are defined by + prefixing a line with the label name and then a colon + (e.g., label:). Anonymous labels + are defined by prefixing a line with an asterisk + (e.g., *). + + + Temporary labels are only reachable from inside the + innermost enclosing .scope + statement. They are identical to normal labels in every + way, except that they start with an underscore. + +
+
+ String types + + Strings are enclosed in double quotation marks. Backslashed + characters (including backslashes and double quotes) are + treated literally, so the string "The man said, + \"The \\ character is the backslash.\"" produces + the ASCII sequence for The man said, "The \ + character is the backslash." + + + Strings are generally only used as arguments to assembler + directives—usually for filenames + (e.g., .include) but also for string + data (in association with .byte). + + + It is legal, though unusual, to attempt to pass a string to + the other data statements. This will produces a series of + words/dwords where all bytes that aren't least-significant + are zero. Endianness and size will match what the directive + itself indicated. + +
+
+
+ Compound Arguments + + Compound arguments may be built up from simple ones, using the + standard +, -, *, and / operators, which carry the usual + precedence. Also, the unary operators > and <, which + bind more tightly than anything else, provide the high and low + bytes of 16-bit values, respectively. + + + Use brackets [ ] instead of parentheses ( ) when grouping + arithmetic operations, as the parentheses are needed for the + indirect addressing modes. + + + Examples: + + + $D000 evaluates to $D000 + $D000+32 evaluates to $D020 + $D000+$20 also evaluates to $D020 + <$D000+32 evaluates to $20 + >$D000+32 evaluates to $F0 + >[$D000+32] evaluates to $D0 + >$D000-275 evaluates to $CE + +
+
+ Memory Model + + In order to properly compute the locations of labels and the + like, Ophis must keep track of where assembled code will + actually be sitting in memory, and it strives to do this in a + way that is independent both of the target file and of the + target machine. + +
+ Basic PC tracking + + The primary technique Ophis uses is program counter + tracking. As it assembles the code, it keeps + track of a virtual program counter, and uses that to + determine where the labels should go. + + + In the absence of an .org directive, it + assumes a starting PC of zero. .org + is a simple directive, setting the PC to the value + that .org specifies. In the simplest + case, one .org directive appears at the + beginning of the code and sets the location for the rest of + the code, which is one contiguous block. + +
+
+ Basic Segmentation simulation + + However, this isn't always practical. Often one wishes to + have a region of memory reserved for data without actually + mapping that memory to the file. On some systems (typically + cartridge-based systems where ROM and RAM are seperate, and + the target file only specifies the ROM image) this is + mandatory. In order to access these variables symbolically, + it's necessary to put the values into the label lookup + table. + + + It is possible, but inconvenient, to do this + with .alias, assigning a specific + memory location to each variable. This requires careful + coordination through your code, and makes creating reusable + libraries all but impossible. + + + A better approach is to reserve a section at the beginning + or end of your program, put an .org + directive in, then use the .space + directive to divide up the data area. This is still a bit + inconvenient, though, because all variables must be + assigned all at once. What we'd really like is to keep + multiple PC counters, one for data and one for code. + + + The .text + and .data directives do this. Each + has its own PC that starts at zero, and you can switch + between the two at any point without corrupting the other's + counter. In this way each function can have + a .data section (filled + with .space commands) and + a .text section (that contains the + actual code). This lets our library routines be almost + completely self-contained - we can have one source file + that could be .included by multiple + projects without getting in anything's way. + + + However, any given program may have its own ideas about + where data and code go, and it's good to ensure with + a .checkpc at the end of your code + that you haven't accidentally overwritten code with data or + vice versa. If your .data + segment did start at zero, it's + probably wise to make sure you aren't smashing the stack, + too (which is sitting in the region from $0100 to + $01FF). + + + If you write code with no segment-defining statements in + it, the default segment + is text. + + + The data segment is designed only + for organizing labels. As such, errors will be flagged if + you attempt to actually output information into + a data segment. + +
+
+ General Segmentation Simulation + + One text and data segment each is usually sufficient, but + for the cases where it is not, Ophis allows for user-defined + segments. Putting a label + after .text + or .data produces a new segment with + the specified name. + + + Say, for example, that we have access to the RAM at the low + end of the address space, but want to reserve the zero page + for truly critical variables, and use the rest of RAM for + everything else. Let's also assume that this is a 6510 + chip, and locations $00 and $01 are reserved for the I/O + port. We could start our program off with: + + +.data +.org $200 +.data zp +.org $2 +.text +.org $800 + + + And, to be safe, we would probably want to end our code + with checks to make sure we aren't overwriting anything: + + +.data +.checkpc $800 +.data zp +.checkpc $100 + +
+
+
+ Macros + + Assembly language is a powerful tool—however, there are + many tasks that need to be done repeatedly, and with + mind-numbing minor modifications. Ophis includes a facility + for macros to allow this. Ophis macros + are very similar in form to function calls in higher level + languages. + +
+ Defining Macros + + Macros are defined with the .macro + and .macend commands. Here's a + simple one that will clear the screen on a Commodore + 64: + + +.macro clr'screen + lda #147 + jsr $FFD2 +.macend + +
+
+ Invoking Macros + + To invoke a macro, either use + the .invoke command or backquote the + name of the routine. The previous macro may be expanded + out in either of two ways, at any point in the + source: + + .invoke clr'screen + or + `clr'screen + will work equally well. +
+
+ Passing Arguments to Macros + + Macros may take arguments. The arguments to a macro are + all of the word type, though byte values may + be passed and used as bytes as well. The first argument in + an invocation is bound to the label + _1, the second + to _2, and so on. Here's a macro + for storing a 16-bit value into a word pointer: + + +.macro store16 ; `store16 dest, src + lda #<_2 + sta _1 + lda #>_2 + sta _1+1 +.macend + + + Macro arguments behave, for the most part, as if they were + defined by .alias + commands in the calling context. + (They differ in that they will not produce duplicate-label + errors if those names already exist in the calling scope, + and in that they disappear after the call is + completed.) + +
+
+ Features and Restrictions of the Ophis Macro Model + + Unlike most macro systems (which do textual replacement), + Ophis macros evaluate their arguments and bind them into the + symbol table as temporary labels. This produces some + benefits, but it also puts some restrictions on what kinds of + macros may be defined. + + + The primary benefit of this expand-via-binding + discipline is that there are no surprises in the semantics. + The expression _1+1 in the macro above + will always evaluate to one more than the value that was + passed as the first argument, even if that first argument is + some immensely complex expression that an + expand-via-substitution method may accidentally + mangle. + + + The primary disadvantage of the expand-via-binding + discipline is that only fixed numbers of words and bytes + may be passed. A substitution-based system could define a + macro including the line LDA _1 and + accept as arguments both $C000 + (which would put the value of memory location $C000 into + the accumulator) and #$40 (which + would put the immediate value $40 into the accumulator). + If you really need this kind of + behavior, a run a C preprocessor over your Ophis source, + and use #define to your heart's + content. + +
+
+
+ Assembler directives + + Assembler directives are all instructions to the assembler + that are not actual instructions. Ophis's set of directives + follow. + + + .advance address: + Forces the program counter to + be address. Unlike + the .org + directive, .advance outputs zeroes until the + program counter reaches a specified address. Attempting + to .advance to a point behind the current + program counter is an assemble-time error. + .alias label value: The + .alias directive assigns an arbitrary value to a label. This + value may be an arbitrary argument, but cannot reference any + label that has not already been defined (this prevents + recursive label dependencies). + .byte arg [ , arg, ... ]: + Specifies a series of arguments, which are evaluated, and + strings, which are included as raw ASCII data. The final + results of these arguments must be one byte in size. Seperate + constants are seperated by comments. + .checkpc address: Ensures that the + program counter is less than or equal to the address + specified, and emits an assemble-time error if it is not. + This produces no code in the final binary - it is there to + ensure that linking a large amount of data together does not + overstep memory boundaries. + .data [label]: Sets the segment to + the segment name specified and disallows output. If no label + is given, switches to the default data segment. + .incbin filename: Inserts the + contents of the file specified as binary data. Use it to + include graphics information, precompiled code, or other + non-assembler data. + .include filename: Includes the + entirety of the file specified at that point in the program. + Use this to order your final sources. + .org address: Sets the program + counter to the address specified. This does not emit any + code in and of itself, nor does it overwrite anything that + previously existed. If you wish to jump ahead in memory, + use .advance. + .require filename: Includes the entirety + of the file specified at that point in the program. Unlike .include, + however, code included with .require will only be inserted once. + The .require directive is useful for ensuring that certain code libraries + are somewhere in the final binary. They are also very useful for guaranteeing that + macro libraries are available. + .space label size: This + directive is used to organize global variables. It defines the + label specified to be at the current location of the program + counter, and then advances the program counter size + steps ahead. No actual code is produced. This is equivalent + to label: .org ^+size. + .text [label]: Sets the segment to + the segment name specified and allows output. If no label is + given, switches to the default text segment. + .word arg [ , arg, ... ]: + Like .byte, but values are all treated as two-byte + values and stored low-end first (as is the 6502's wont). Use + this to create jump tables (an unadorned label will evaluate + to that label's location) or otherwise store 16-bit + data. + .dword arg [ , arg, ...]: + Like .word, but for 32-bit values. + .wordbe arg [ , arg, ...]: + Like .word, but stores the value in a big-endian format (high byte first). + .dwordbe arg [ , arg, ...]: + Like .dword, but stores the value high byte first. + .scope: Starts a new scope block. Labels + that begin with an underscore are only reachable from within + their innermost enclosing .scope statement. + .scend: Ends a scope block. Makes the + temporary labels defined since the last .scope + statement unreachable, and permits them to be redefined in a + new scope. + .macro name: Begins a macro + definition block. This is a scope block that can be inlined + at arbitrary points with .invoke. Arguments to the + macro will be bound to temporary labels with names like + _1, _2, etc. + .macend: Ends a macro definition + block. + .invoke label [argument [, + argument ...]]: invokes (inlines) the specified + macro, binding the values of the arguments to the ones the + macro definition intends to read. A shorthand for .invoke + is the name of the macro to invoke, backquoted. + + + The following directives are deprecated, added for + compatibility with the old Perl + assembler P65. Use + the -d option to Ophis to enable + them. + + + .ascii: Equivalent to .byte, + which didn't used to be able to handle strings. + .code: Equivalent to .text. + .segment: Equivalent to .text, + from when there was no distinction between .text and + .data segments. + .address: Equivalent to + .word. + .link filename address: Assembles + the file specified as if it began at the address specified. + This is generally for use in top-level files, where there + is not necessarily a one-to-one correspondence between file + position and memory position. This is equivalent to an + .org directive followed by an .include. + With the introduction of the .org directive this one is + less useful (and in most cases, any .org statement + you use will actually be at the top of the .included + file). + +
+
diff --git a/doc/docbook/ophismanual.sgm b/doc/docbook/ophismanual.sgm new file mode 100644 index 0000000..cb324bb --- /dev/null +++ b/doc/docbook/ophismanual.sgm @@ -0,0 +1,29 @@ + + + + + + + + + + +]> + + + Programming with Ophis + MichaelMartin + 2006-7Michael Martin + + &pre1; + &part1; + &part2; + &part3; + &part4; + &part5; + &part6; + &part7; + &samplecode; + &cmdref; + diff --git a/doc/docbook/preface.sgm b/doc/docbook/preface.sgm new file mode 100644 index 0000000..2be1279 --- /dev/null +++ b/doc/docbook/preface.sgm @@ -0,0 +1,74 @@ + + Preface + + + The Ophis project started on a lark back in 2001. My graduate + studies required me to learn Perl and Python, and I'd been playing + around with Commodore 64 emulators in my spare time, so I decided + to learn both languages by writing a simple cross-assembler for + the 6502 chip the C-64 used in both. + + + + The Perl version was quickly abandoned, but the Python one slowly + grew in scope and power over the years, and by 2005 was a very + powerful, flexible macro assembler that saw more use than I'd + expect. In 2007 I finally got around to implementing the last few + features I really wanted and polishing it up for general release. + + + + Part of that process has been formatting the various little + tutorials and references I'd created into a single, unified + document—the one you are now reading. + + +
+ Why <quote>Ophis</quote>? + + It's actually a kind of a horrific pun. See, I was using Python + at the time, and one of the things I had been hoping to do with + the assembler was to produce working Apple II + programs. Ophis is Greek + for snake, and a number of traditions also use it + as the actual name of the serpent in the + Garden of Eden. So, Pythons, snakes, and stories involving + really old Apples all combined to name the assembler. + +
+ +
+ Getting a copy of Ophis + + If you're reading this as part of the Ophis install, you clearly + already have it. If not, as of this writing the homepage for + the Ophis assembler + is . If + this is out-of-date, a Web search on Ophis 6502 + assembler (without the quotation marks) should yield its + page. + + + Ophis is written entirely in Python and packaged using the + distutils. The default installation script on Unix and Mac OS X + systems should put the files where they need to go. If you are + running it locally, you will need to install + the Ophis package somewhere in your Python + package path, and then put the ophis script + somewhere in your path. + + + Windows users that have Python installed can use the same source + distributions that the other operating systems + use; ophis.bat will arrange the environment + variables accordingly and invoke the main script. + + + If you are on Windows and do not have Python installed, a + prepackaged system made with py2exe is also + available. The default Windows installer will use this. In + this case, all you need to do is + have ophis.exe in your path. + +
+
diff --git a/doc/docbook/samplecode.sgm b/doc/docbook/samplecode.sgm new file mode 100644 index 0000000..6d65b07 --- /dev/null +++ b/doc/docbook/samplecode.sgm @@ -0,0 +1,749 @@ + + Example Programs + + This Appendix collects all the programs referred to in the course + of this manual. + +
+ <filename>tutor1.oph</filename> + +.word $0801 +.org $0801 + + .word next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +next: .word 0 ; End of program + +.advance 2064 + + ldx #0 +loop: lda hello, x + beq done + jsr $ffd2 + inx + bne loop +done: rts + +hello: .byte "HELLO, WORLD!", 0 + +
+
+ <filename>tutor2.oph</filename> + +.word $0801 +.org $0801 + +.scope + .word _next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +_next: .word 0 ; End of program +.scend + +.advance 2064 + +.alias chrout $ffd2 + + ldx #0 +* lda hello, x + beq + + jsr chrout + inx + bne - +* rts + +hello: .byte "HELLO, WORLD!", 0 + +
+
+ <filename>c64-1.oph</filename> + +.word $0801 +.org $0801 + +.scope + .word _next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +_next: .word 0 ; End of program +.scend + +.advance 2064 + +.require "kernal.oph" + +
+
+ <filename>kernal.oph</filename> + +; KERNAL routine aliases (C64) + +.alias acptr $ffa5 +.alias chkin $ffc6 +.alias chkout $ffc9 +.alias chrin $ffcf +.alias chrout $ffd2 +.alias ciout $ffa8 +.alias cint $ff81 +.alias clall $ffe7 +.alias close $ffc3 +.alias clrchn $ffcc +.alias getin $ffe4 +.alias iobase $fff3 +.alias ioinit $ff84 +.alias listen $ffb1 +.alias load $ffd5 +.alias membot $ff9c +.alias memtop $ff99 +.alias open $ffc0 +.alias plot $fff0 +.alias ramtas $ff87 +.alias rdtim $ffde +.alias readst $ffb7 +.alias restor $ff8a +.alias save $ffd8 +.alias scnkey $ff9f +.alias screen $ffed +.alias second $ff93 +.alias setlfs $ffba +.alias setmsg $ff90 +.alias setnam $ffbd +.alias settim $ffdb +.alias settmo $ffa2 +.alias stop $ffe1 +.alias talk $ffb4 +.alias tksa $ff96 +.alias udtim $ffea +.alias unlsn $ffae +.alias untlk $ffab +.alias vector $ff8d + +; Character codes for the colors. +.alias color'0 144 +.alias color'1 5 +.alias color'2 28 +.alias color'3 159 +.alias color'4 156 +.alias color'5 30 +.alias color'6 31 +.alias color'7 158 +.alias color'8 129 +.alias color'9 149 +.alias color'10 150 +.alias color'11 151 +.alias color'12 152 +.alias color'13 153 +.alias color'14 154 +.alias color'15 155 + +; ...and reverse video +.alias reverse'on 18 +.alias reverse'off 146 + +; ...and character set +.alias upper'case 142 +.alias lower'case 14 + +
+
+ <filename>tutor3.oph</filename> + +.include "c64-1.oph" + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +
+
+ <filename>tutor4a.oph</filename> + +.include "c64-1.oph" + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +; DELAY routine. Executes 2,560*(A) NOP statements. +delay: tax + ldy #00 +* nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + iny + bne - + dex + bne - + rts + +
+
+ <filename>tutor4b.oph</filename> + +.include "c64-1.oph" + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + lda #lower'case + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +hello1: .byte "Hello, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "programmer", 0 +target2: .byte "room", 0 +target3: .byte "building", 0 +target4: .byte "neighborhood", 0 +target5: .byte "city", 0 +target6: .byte "nation", 0 +target7: .byte "world", 0 +target8: .byte "Solar System", 0 +target9: .byte "Galaxy", 0 +target10: .byte "Universe", 0 + +; DELAY routine. Executes 2,560*(A) NOP statements. +delay: tax + ldy #00 +* nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + iny + bne - + dex + bne - + rts + +
+
+ <filename>tutor4c.oph</filename> + +.include "c64-1.oph" + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + lda #lower'case + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +.charmap 'A, "abcdefghijklmnopqrstuvwxyz" +.charmap 'a, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + +hello1: .byte "Hello, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "programmer", 0 +target2: .byte "room", 0 +target3: .byte "building", 0 +target4: .byte "neighborhood", 0 +target5: .byte "city", 0 +target6: .byte "nation", 0 +target7: .byte "world", 0 +target8: .byte "Solar System", 0 +target9: .byte "Galaxy", 0 +target10: .byte "Universe", 0 + +; DELAY routine. Executes 2,560*(A) NOP statements. +delay: tax + ldy #00 +* nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + iny + bne - + dex + bne - + rts + +
+
+ <filename>tutor5.oph</filename> + +.include "c64-1.oph" + +.data +.org $C000 +.text + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +; DELAY routine. Takes values from the Accumulator and pauses +; for that many jiffies (1/60th of a second). +.scope +.data +.space _tmp 1 +.space _target 1 + +.text + +delay: sta _tmp ; save argument (rdtim destroys it) + jsr rdtim + clc + adc _tmp ; add current time to get target + sta _target +* jsr rdtim + cmp _target + bmi - ; Buzz until target reached + rts +.scend + +.checkpc $A000 +.data +.checkpc $D000 + +
+
+ <filename>tutor6.oph</filename> + +.include "c64-1.oph" + +.data +.org $C000 +.space cache 2 +.text + +.macro print + lda #<_1 + ldx #>_1 + jsr printstr +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + ; Save the zero page locations that PRINTSTR uses. + lda $10 + sta cache + lda $11 + sta cache+1 + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + + ; Restore the zero page values printstr uses. + lda cache + sta $10 + lda cache+1 + sta $11 + + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +; DELAY routine. Takes values from the Accumulator and pauses +; for that many jiffies (1/60th of a second). +.scope +.data +.space _tmp 1 +.space _target 1 + +.text + +delay: sta _tmp ; save argument (rdtim destroys it) + jsr rdtim + clc + adc _tmp ; add current time to get target + sta _target +* jsr rdtim + cmp _target + bmi - ; Buzz until target reached + rts +.scend + +; PRINTSTR routine. Accumulator stores the low byte of the address, +; X register stores the high byte. Destroys the values of $10 and +; $11. + +.scope +printstr: + sta $10 + stx $11 + ldy #$00 +_lp: lda ($10),y + beq _done + jsr chrout + iny + bne _lp +_done: rts +.scend + +.checkpc $A000 +.data +.checkpc $D000 + +
+
+ <filename>c64-2.oph</filename> + +.word $0801 +.org $0801 + +.scope + .word _next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +_next: .word 0 ; End of program +.scend + +.advance $0810 + +.require "kernal.oph" + +.data zp +.org $0002 + +.text + +.scope + ; Cache BASIC's zero page at top of available RAM. + ldx #$7E +* lda $01, x + sta $CF81, x + dex + bne - + + jsr _main + + ; Restore BASIC's zero page and return control. + + ldx #$7E +* lda $CF81, x + sta $01, x + dex + bne - + rts + +_main: + ; Program follows... +.scend + +
+
+ <filename>tutor7.oph</filename> + +.include "c64-2.oph" + +.data +.org $C000 +.text + +.macro print + lda #<_1 + ldx #>_1 + jsr printstr +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +; DELAY routine. Takes values from the Accumulator and pauses +; for that many jiffies (1/60th of a second). +.scope +.data +.space _tmp 1 +.space _target 1 + +.text + +delay: sta _tmp ; save argument (rdtim destroys it) + jsr rdtim + clc + adc _tmp ; add current time to get target + sta _target +* jsr rdtim + cmp _target + bmi - ; Buzz until target reached + rts +.scend + +; PRINTSTR routine. Accumulator stores the low byte of the address, +; X register stores the high byte. Destroys the values of $10 and +; $11. + +.scope +.data zp +.space _ptr 2 +.text +printstr: + sta _ptr + stx _ptr+1 + ldy #$00 +_lp: lda (_ptr),y + beq _done + jsr chrout + iny + bne _lp +_done: rts +.scend + +.checkpc $A000 + +.data +.checkpc $D000 + +.data zp +.checkpc $80 + +
+
diff --git a/doc/docbook/tutor1.sgm b/doc/docbook/tutor1.sgm new file mode 100644 index 0000000..6a754b9 --- /dev/null +++ b/doc/docbook/tutor1.sgm @@ -0,0 +1,315 @@ + + The basics + + + In this first part of the tutorial we will create a + simple Hello World program to run on the Commodore + 64. This will cover: + + + How to make programs run on a Commodore 64 + Writing simple code with labels + Numeric and string data + Invoking the assembler + + + +
+ A note on numeric notation + + + Throughout these tutorials, I will be using a lot of both + decimal and hexadecimal notation. Hex numbers will have a + dollar sign in front of them. Thus, 100 = $64, and $100 = 256. + +
+ +
+ Producing Commodore 64 programs + + + Commodore 64 programs are stored in + the PRG format on disk. Some emulators + (such as CCS64 or VICE) can run PRG + programs directly; others need them to be transferred to + a D64 image first. + + + + The PRG format is ludicrously simple. It + has two bytes of header data: This is a little-endian number + indicating the starting address. The rest of the file is a + single continuous chunk of data loaded into memory, starting at + that address. BASIC memory starts at memory location 2048, and + that's probably where we'll want to start. + + + + Well, not quite. We want our program to be callable from BASIC, + so we should have a BASIC program at the start. We guess the + size of a simple one line BASIC program to be about 16 bytes. + Thus, we start our program at memory location 2064 ($0810), and + the BASIC program looks like this: + + + +10 SYS 2064 + + + + We SAVE this program to a file, then + study it in a debugger. It's 15 bytes long: + + + +1070:0100 01 08 0C 08 0A 00 9E 20-32 30 36 34 00 00 00 + + + + The first two bytes are the memory location: $0801. The rest of + the data breaks down as follows: + + + + BASIC program breakdown + + + + Memory Locations + Value + + + + $0801-$08022-byte pointer to the next line of BASIC code ($080C). + $0803-$08042-byte line number ($000A = 10). + $0805Byte code for the SYS command. + $0806-$080AThe rest of the line, which is just the string 2064. + $080BNull byte, terminating the line. + $080C-$080D2-byte pointer to the next line of BASIC code ($0000 = end of program). + + +
+ + + That's 13 bytes. We started at 2049, so we need 2 more bytes of + filler to make our code actually start at location 2064. These + 17 bytes will give us the file format and the BASIC code we need + to have our machine language program run. + + + + These are just bytes—indistinguishable from any other sort of + data. In Ophis, bytes of data are specified with + the .byte command. We'll also have to tell + Ophis what the program counter should be, so that it knows what + values to assign to our labels. The .org + (origin) command tells Ophis this. Thus, the Ophis code for our + header and linking info is: + + + +.byte $01, $08, $0C, $08, $0A, $00, $9E, $20 +.byte $32, $30, $36, $34, $00, $00, $00, $00 +.byte $00, $00 +.org $0810 + + + + This gets the job done, but it's completely incomprehensible, + and it only uses two directives—not very good for a + tutorial. Here's a more complicated, but much clearer, way of + saying the same thing. + + + +.word $0801 +.org $0801 + + .word next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +next: .word 0 ; End of program + +.advance 2064 + + + + This code has many advantages over the first. + + + It describes better what is actually + happening. The .word directive at the + beginning indicates a 16-bit value stored in the typical + 65xx way (small byte first). This is followed by + an .org statement, so we let the + assembler know right away where everything is supposed to + be. + + Instead of hardcoding in the value $080C, we + instead use a label to identify the location it's pointing + to. Ophis will compute the address + of next and put that value in as data. + We also describe the line number in decimal since BASIC + line numbers generally are in decimal. + Labels are defined by putting their name, then a colon, as + seen in the definition of next. + + + Instead of putting in the hex codes for the string part of + the BASIC code, we included the string directly. Each + character in the string becomes one byte. + + + Instead of adding the buffer ourselves, we + used .advance, which outputs zeros until + the specified address is reached. Attempting + to .advance backwards produces an + assemble-time error. + + + It has comments that explain what the data are for. The + semicolon is the comment marker; everything from a semicolon + to the end of the line is ignored. + + + +
+ +
+ Related commands and options + + + This code includes constants that are both in decimal and in + hex. It is also possible to specify constants in octal, binary, + or with an ASCII character. + + + To specify decimal constants, simply write the number. + To specify hexadecimal constants, put a $ in front. + To specify octal constants, put a 0 (zero) in front. + To specify binary constants, put a % in front. + To specify ASCII constants, put an apostrophe in front. + + + Example: 65 = $41 = 0101 = %1000001 = 'A + + + There are other commands besides .byte + and .word to specify data. In particular, + the .dword command specifies four-byte values + which some applications will find useful. Also, some linking + formats (such as the SID format) have + header data in big-endian (high byte first) format. + The .wordbe and .dwordbe + directives provide a way to specify multibyte constants in + big-endian formats cleanly. + +
+ +
+ Writing the actual code + + + Now that we have our header information, let's actually write + the Hello world program. It's pretty + short—a simple loop that steps through a hardcoded array + until it reaches a 0 or outputs 256 characters. It then returns + control to BASIC with an RTS statement. + + + + Each character in the array is passed as an argument to a + subroutine at memory location $FFD2. This is part of the + Commodore 64's BIOS software, which its development + documentation calls the KERNAL. Location $FFD2 prints out the + character corresponding to the character code in the + accumulator. + + + + ldx #0 +loop: lda hello, x + beq done + jsr $ffd2 + inx + bne loop +done: rts + +hello: .byte "HELLO, WORLD!", 0 + + + + The complete, final source is available in + the file. + +
+
+ Assembling the code + + + The Ophis assembler is a collection of Python modules, + controlled by a master script. On Windows, this should all + have been combined into an executable + file ophis.exe; on other platforms, the + Ophis modules should be in the library and + the ophis script should be in your path. + Typing ophis with no arguments should give a + summary of available command line options. + + + + Ophis Options + + + + Option + Effect + + + + Allows the 6510 undocumented opcodes as listed in the VICE documentation. + Allows opcodes and addressing modes added by the 65C02. + Quiet operation. Only reports errors. + Default operation. Reports files as they are loaded, and gives statistics on the final output. + Verbose operation. Names each assembler pass as it runs. + Debug operation: Dumps the entire IR after each pass. + Full debug operation: Dumps the entire IR and symbol table after each pass. + + +
+ + + The only options Ophis demands are an input file and an output + file. Here's a sample session, assembling the tutorial file + here: + + +localhost$ ophis tutor1.oph tutor1.prg -v 2 +Loading tutor1.oph +Running: Macro definition pass +Running: Macro expansion pass +Running: Label initialization pass +Fixpoint failed, looping back +Running: Label initialization pass +Running: Circularity check pass +Running: Expression checking pass +Running: Easy addressing modes pass +Running: Label Update Pass +Fixpoint failed, looping back +Running: Label Update Pass +Running: Instruction Collapse Pass +Running: Mode Normalization pass +Running: Label Update Pass +Running: Assembler +Assembly complete: 45 bytes output (14 code, 29 data, 2 filler) + + + If your emulator can run PRG files + directly, this file will now run (and + print HELLO, WORLD!) as many + times as you type RUN. Otherwise, use + a D64 management utility to put + the PRG on a D64, then + load and run the file off that. + +
+
diff --git a/doc/docbook/tutor2.sgm b/doc/docbook/tutor2.sgm new file mode 100644 index 0000000..c0128ef --- /dev/null +++ b/doc/docbook/tutor2.sgm @@ -0,0 +1,107 @@ + + Labels and aliases + + Labels are an important part of your code. However, since each + label must normally be unique, this can lead to namespace + pollution, and you'll find yourself going through ever + more contorted constructions to generate unique label names. + Ophis offers two solutions to this: anonymous + labels and temporary labels. This + tutorial will cover both of these facilities, and also introduce + the aliasing mechanism. + + +
+ Temporary labels + + + Temporary labels are the easiest to use. If a label begins with + an underscore, it will only be reachable from inside the + innermost enclosing scope. Scopes begin when + a .scope statement is encountered. This + produces a new, inner scope if there is another scope in use. + The .scend command ends the innermost + currently active scope. + + + + We can thus rewrite our header data using temporary labels, thus + allowing the main program to have a label + named next if it wants. + + + +.word $0801 +.org $0801 + +.scope + .word _next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +_next: .word 0 ; End of program +.scend + +.advance 2064 + + +
+
+ Anonymous labels + + Anonymous labels are a way to handle short-ranged branches + without having to come up with names for the then and else + branches, for brief loops, and other such purposes. To define + an anonymous label, use an asterisk. To refer to an anonymous + label, use a series of + + or - signs. + refers to + the next anonymous label, ++ the label + after that, etc. Likewise, - is the most + recently defined label, -- the one before + that, and so on. The main body of the Hello World program + with anonymous labels would be: + + + + ldx #0 +* lda hello, x + beq + + jsr $ffd2 + inx + bne - +* rts + + + + It is worth noting that anonymous labels are globally available. + They are not temporary labels, and they ignore scoping + restrictions. + +
+
+ Aliasing + + + Rather the reverse of anonymous labels, aliases are names + given to specific memory locations. These make it easier to + keep track of important constants or locations. The KERNAL + routines are a good example of constants that deserve names. + To assign the traditional name chrout to + the routine at $FFD2, simply give the directive: + + + +.alias chrout $ffd2 + + + And change the jsr command + to: + + + jsr chrout + + + + The final version of the code is in . It should + assemble to exactly the same program as . + +
+
diff --git a/doc/docbook/tutor3.sgm b/doc/docbook/tutor3.sgm new file mode 100644 index 0000000..975e443 --- /dev/null +++ b/doc/docbook/tutor3.sgm @@ -0,0 +1,160 @@ + + Headers, Libraries, and Macros + + + In this chapter we will split away parts of our Hello + World program into reusable header files and libraries. + We will also abstract away our string printing technique into a + macro which may be invoked at will, on arbitrary strings. We will + then multiply the output of our program tenfold. + + +
+ Header files and libraries + + + The prelude to our program—the PRG + information and the BASIC program—are going to be the same + in many, many programs. Thus, we should put them into a header + file to be included later. The .include + directive will load a file and insert it as source at the + designated point. + + + + A related directive, .require, will include + the file as long as it hasn't been included yet elsewhere. It + is useful for ensuring a library is linked in. + + + + For pre-assembled code or raw binary data, + the .incbin directive lets you include the + contents of a binary file directly in the output. This is handy + for linking in pre-created graphics or sound data. + + + + As a sample library, we will expand the definition of + the chrout routine to include the standard + names for every KERNAL routine. Our header file will + then .require it. + + + + We'll also add some convenience aliases for things like reverse + video, color changes, and shifting between upper case/graphics + and mixed case text. We'd feed those to + the chrout routine to get their effects. + + + + Since there have been no interesting changes to the prelude, and + the KERNAL values are standard, we do not reproduce them here. + (The files in question are and .) + +
+
+ Macros + + + A macro is a way of expressing a lot of code or data with a + simple shorthand. It's also usually configurable. Traditional + macro systems such as C's #define mechanic + use textual replacement: a macro is + expanded before any evaluation or even parsing occurs. + + + + In contrast, Ophis's macro system uses a call by + value approach where the arguments to macros are + evaluated to bytes or words before being inserted into the macro + body. This produces effects much closer to those of a + traditional function call. A more detailed discussion of the + tradeoffs may be found in . + + +
+ Macro definitions + + + A macro definition is a set of statements between + a .macro statement and + a .macend statement. + The .macro statement also names the macro + being defined. + + + + No global or anonymous labels may be defined inside a macro: + temporary labels only persist in the macro expansion itself. + (Each macro body has its own scope.) + + + + Arguments to macros are referred to by number: the first is + _1, the second _2, and so on. + + + + Here's a macro that encapsulates the printing routine in our + Hello World program, with an argument being the + address of the string to print: + + + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + + +
+
+ Macro invocations + + + Macros may be invoked in two ways: one that looks like a + directive, and one that looks like an instruction. + + + + The most common way to invoke a macro is to backquote the name + of the macro. It is also possible to use + the .invoke command. These commands look + like this: + + + +`print msg +.invoke print msg + + + + Arguments are passed to the macro as a comma-separated list. + They must all be expressions that evaluate to byte or word + values—a mechanism similar to .alias + is used to assign their values to the _n + names. + +
+
+
+ Example code + + + expands our + running example, including the code above and also defining a + new macro greet that takes a string argument + and prints a greeting to it. It then greets far too many + targets. + +
+
diff --git a/doc/docbook/tutor4.sgm b/doc/docbook/tutor4.sgm new file mode 100644 index 0000000..ba25e39 --- /dev/null +++ b/doc/docbook/tutor4.sgm @@ -0,0 +1,110 @@ + + Character maps + + + Now we will close the gap between the Commodore's + version of ASCII and the real one. We'll also add a time-delay + routine to slow down the output. This routine isn't really of + interest to us right now, so we'll add a subroutine + called delay that executes 2,560*(accumulator) + NOPs. By the time the program is finished, + we'll have executed 768,000 no-ops. + + + + There actually are better ways of getting a time-delay on the + Commodore 64; we'll deal with those in . + As a result, there isn't really a lot to discuss here. The later + tutorials will be building off of , so you may want to get familiar with + that. Note also the change to the body of + the greet macro. + + + + On to the topic at hand. Let's change the code to use mixed case. + We defined the upper'case + and lower'case aliases back + in as part of the + standard + header, so we can add this before our invocations of + the greet macro: + + + + lda #lower'case + jsr chrout + + + + And that will put us into mixed case mode. So, now we just need + to redefine the data so that it uses the mixed-case: + + + +hello1: .byte "Hello, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "programmer", 0 +target2: .byte "room", 0 +target3: .byte "building", 0 +target4: .byte "neighborhood", 0 +target5: .byte "city", 0 +target6: .byte "nation", 0 +target7: .byte "world", 0 +target8: .byte "Solar System", 0 +target9: .byte "Galaxy", 0 +target10: .byte "Universe", 0 + + + + The code that does this is in . If you assemble and run it, you will + notice that the output is not what we want. In particular, upper + and lowercase are reversed, so we have messages + like hELLO, sOLAR sYSTEM!. For + the specific case of PETSCII, we can just fix our strings, but + that's less of an option if we're writing for the Apple II's + character set, or targeting a game console that puts its letters + in arbitrary locations. We need to remap how strings are turned + into byte values. The .charmap + and .charmapbin directives do what we need. + + + + The .charmap directive usually takes two + arguments; a byte (usually in character form) indicating the ASCII + value to start remapping from, and then a string giving the new + values. To do our case-swapping, we write two directives before + defining any string constants: + + + +.charmap 'A, "abcdefghijklmnopqrstuvwxyz" +.charmap 'a, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + + + Note that the 'a constant in the second + directive refers to the a character in the source, + not in the current map. + + + + The fixed code is in , and will produce the expected results + when run. + + + + An alternative is to use a .charmapbin + directive to replace the entire character map directly. This + specifies an external file, 256 bytes long, that is loaded in at + that point. A binary character map for the Commodore 64 is + provided with the sample programs + as petscii.map. There are also three + files, a2normal.map, a2inverse.map, + and a2blink.map that handle the Apple II's + very nonstandard character encodings. + + diff --git a/doc/docbook/tutor5.sgm b/doc/docbook/tutor5.sgm new file mode 100644 index 0000000..735033e --- /dev/null +++ b/doc/docbook/tutor5.sgm @@ -0,0 +1,157 @@ + + Local variables and memory segments + + + As mentioned in , there are better ways + to handle waiting than just executing vast numbers of NOPs. The + Commodore 64 KERNAL library includes a rdtim + routine that returns the uptime of the machine, in + 60ths of a second, as a 24-bit integer. + The Commodore 64 programmer's guide available online actually has + a bug in it, reversing the significance of the A and Y registers. + The accumulator holds the least significant + byte, not the most. + + + + Here's a first shot at a better delay routine: + + + +.scope + ; data used by the delay routine + _tmp: .byte 0 + _target: .byte 0 + +delay: sta _tmp ; save argument (rdtim destroys it) + jsr rdtim + clc + adc _tmp ; add current time to get target + sta _target +* jsr rdtim + cmp _target + bmi - ; Buzz until target reached + rts +.scend + + + + This works, but it eats up two bytes of file space that don't + really need to be specified. Also, it's modifying data inside a + program text area, which isn't good if you're assembling to a ROM + chip. (Since the Commodore 64 stores its programs in RAM, it's + not an issue for us here.) A slightly better solution is to + use .alias to assign the names to chunks of RAM + somewhere. There's a 4K chunk of RAM from $C000 through $CFFF + between the BASIC ROM and the I/O ROM that should serve our + purposes nicely. We can replace the definitions + of _tmp and _target with: + + + + ; data used by the delay routine + .alias _tmp $C000 + .alias _target $C001 + + + + This works better, but now we've just added a major bookkeeping + burden upon ourselves—we must ensure that no routines step on + each other. What we'd really like are two separate program + counters—one for the program text, and one for our variable + space. + + + + Ophis lets us do this with the .text + and .data commands. + The .text command switches to the program-text + counter, and the .data command switches to the + variable-data counter. When Ophis first starts assembling a file, + it starts in .text mode. + + + + To reserve space for a variable, use the .space command. This + takes the form: + + +.space varname size + + + which assigns the name varname to the current + program counter, then advances the program counter by the amount + specified in size. Nothing is output to the + final binary as a result of the .space command. + + + + You may not put in any commands that produce output into + a .data segment. Generally, all you will be + using are .org and .space + commands. Ophis will not complain if you + use .space inside a .text + segment, but this is nearly always wrong. + + + + The final version of delay looks like this: + + + +; DELAY routine. Takes values from the Accumulator and pauses +; for that many jiffies (1/60th of a second). +.scope +.data +.space _tmp 1 +.space _target 1 + +.text + +delay: sta _tmp ; save argument (rdtim destroys it) + jsr rdtim + clc + adc _tmp ; add current time to get target + sta _target +* jsr rdtim + cmp _target + bmi - ; Buzz until target reached + rts +.scend + + + + We're not quite done yet, however, because we have to tell the + data segment where to begin. (If we don't, it starts at 0, which + is usually wrong.) We add a very brief data segment to the top of + our code: + + + +.data +.org $C000 +.text + + + + This will run. However, we also ought to make sure that we aren't + overstepping any boundaries. Our program text shouldn't run into + the BASIC chip at $A000, and our data shouldn't run into the I/O + region at $D000. The .checkpc command lets us + assert that the program counter hasn't reached a specific point + yet. We put, at the end of our code: + + + +.checkpc $A000 +.data +.checkpc $D000 + + + + The final program is available as . Note that we based this on the + all-uppercase version from the last section, not any of the + charmapped versions. + + diff --git a/doc/docbook/tutor6.sgm b/doc/docbook/tutor6.sgm new file mode 100644 index 0000000..df527c3 --- /dev/null +++ b/doc/docbook/tutor6.sgm @@ -0,0 +1,118 @@ + + Expressions + + + Ophis permits a reasonably rich set of arithmetic operations to be + done at assemble time. So far, all of our arguments and values + have either been constants or label names. In this chapter, we + will modify the print macro so that it calls a + subroutine to do the actual printing. This will shrink the final + code size a fair bit. + + + + Here's our printing routine. It's fairly straightforward. + + + +; PRINTSTR routine. Accumulator stores the low byte of the address, +; X register stores the high byte. Destroys the values of $10 and +; $11. + +.scope +printstr: + sta $10 + stx $11 + ldy #$00 +_lp: lda ($10), y + beq _done + jsr chrout + iny + bne _lp +_done: rts +.scend + + + + However, now we are faced with the problem of what to do with + the print macro. We need to take a 16-bit + value and store it in two 8-bit registers. We can use + the < and > operators + to take the low or high byte of a word, respectively. + The print macro becomes: + + + +.macro print + lda #<_1 + ldx #>_1 + jsr printstr +.macend + + + + Also, since BASIC uses the locations $10 and $11, we should really + cache them at the start of the program and restore them at the + end: + + + +.data +.org $C000 +.space cache 2 +.text + + ; Save the zero page locations that printstr uses. + lda $10 + sta cache + lda $11 + sta cache+1 + + ; ... main program goes here ... + + ; Restore the zero page values printstr uses. + lda cache + sta $10 + lda cache+1 + sta $11 + + + + Note that we only have to name cache once, but + can use addition to refer to any offset from it. + + + + Ophis supports following operations, with the following precedence + levels (higher entries bind more tightly): + + + + Ophis Operators + + + + Operators + Description + + + + [ ]Parenthesized expressions + < >Byte selection (low, high) + * /Multiply, divide + + -Add, subtract + | & ^Bitwise OR, AND, XOR + + +
+ + Note that brackets, not parentheses, are used to group arithmetic + operations. This is because parentheses are used for the indirect + addressing modes, and it makes parsing much easier. + + + + The code for this version of the code is + in . + +
diff --git a/doc/docbook/tutor7.sgm b/doc/docbook/tutor7.sgm new file mode 100644 index 0000000..04d694c --- /dev/null +++ b/doc/docbook/tutor7.sgm @@ -0,0 +1,143 @@ + + Advanced Memory Segments + + + This is the last section of the Ophis tutorial. By now we've + covered the basics of every command in the assembler; in this + final installment we show the full capabilities of + the .text and .data commands + as we produce a final set of Commodore 64 header files. + + +
+ The Problem + + + Our print'str routine + in accesses + memory locations $10 and $11 directly. We'd prefer to have + symbolic names for them. This reprises our concerns back in + when we concluded that we wanted two + separate program counters. Now we realize that we really need + three; one for the text, one for the data, and one for the zero + page data. And if we're going to allow three, we really should + allow any number. + +
+
+ The Solution + + + The .data and .text + commands can take a label name after them—this names a new + segment. We'll define a new segment + called zp (for zero page) and + have our zero-page variables be placed there. We can't actually + use the default origin of $0000 here either, though, because the + Commodore 64 reserves memory locations 0 and 1 to control its + memory mappers: + + + +.data zp +.org $0002 + + + + Now, actually, the rest of the zero page is reserved too: + locations $02-$7F are used by the BASIC interpreter, and + locations $80-$FF are used by the KERNAL. We don't need the + BASIC interpreter, though, so we can back up all of $02-$7F at + the start of our program and restore it all when we're done: + + + +.scope + ; Cache BASIC's zero page at top of available RAM. + ldx #$7E +* lda $01, x + sta $CF81, x + dex + bne - + + jsr _main + + ; Restore BASIC's zero page and return control. + + ldx #$7E +* lda $CF81, x + sta $01, x + dex + bne - + rts + +_main: + ; _main points at the start of the real program, + ; which is actually outside of this scope +.scend + + + + The new, improved header file is . + + + + Our print'str routine is then rewritten to + declare and use a zero-page variable, like so: + + + +; PRINTSTR routine. Accumulator stores the low byte of the address, +; X register stores the high byte. Destroys the values of $10 and +; $11. + +.scope +.data zp +.space _ptr 2 +.text +printstr: + sta _ptr + stx _ptr+1 + ldy #$00 +_lp: lda (_ptr),y + beq _done + jsr chrout + iny + bne _lp +_done: rts +.scend + + + + Also, we ought to put in an extra check to make sure our + zero-page allocations don't overflow, either: + + + +.data zp +.checkpc $80 + + + + That concludes our tour. The final source file + is . + +
+
+ Where to go from here + + This tutorial has touched on everything that the assembler can + do, but it's not really well organized as a + reference. is a better place to look + up matters of syntax or consult lists of available commands. + + + If you're looking for projects to undertake, the Commodore 64 + and Atari 2600 development communities are both very strong, and + the Apple II and NES development communities are still alive and + well as well. There's an annual Minigame Competition that's + always looking for new entries. + +
+
diff --git a/doc/kernal.oph b/doc/kernal.oph new file mode 100644 index 0000000..ea13fad --- /dev/null +++ b/doc/kernal.oph @@ -0,0 +1,67 @@ +; KERNAL routine aliases (C64) + +.alias acptr $ffa5 +.alias chkin $ffc6 +.alias chkout $ffc9 +.alias chrin $ffcf +.alias chrout $ffd2 +.alias ciout $ffa8 +.alias cint $ff81 +.alias clall $ffe7 +.alias close $ffc3 +.alias clrchn $ffcc +.alias getin $ffe4 +.alias iobase $fff3 +.alias ioinit $ff84 +.alias listen $ffb1 +.alias load $ffd5 +.alias membot $ff9c +.alias memtop $ff99 +.alias open $ffc0 +.alias plot $fff0 +.alias ramtas $ff87 +.alias rdtim $ffde +.alias readst $ffb7 +.alias restor $ff8a +.alias save $ffd8 +.alias scnkey $ff9f +.alias screen $ffed +.alias second $ff93 +.alias setlfs $ffba +.alias setmsg $ff90 +.alias setnam $ffbd +.alias settim $ffdb +.alias settmo $ffa2 +.alias stop $ffe1 +.alias talk $ffb4 +.alias tksa $ff96 +.alias udtim $ffea +.alias unlsn $ffae +.alias untlk $ffab +.alias vector $ff8d + +; Character codes for the colors. +.alias color'0 144 +.alias color'1 5 +.alias color'2 28 +.alias color'3 159 +.alias color'4 156 +.alias color'5 30 +.alias color'6 31 +.alias color'7 158 +.alias color'8 129 +.alias color'9 149 +.alias color'10 150 +.alias color'11 151 +.alias color'12 152 +.alias color'13 153 +.alias color'14 154 +.alias color'15 155 + +; ...and reverse video +.alias reverse'on 18 +.alias reverse'off 146 + +; ...and character set +.alias upper'case 142 +.alias lower'case 14 \ No newline at end of file diff --git a/doc/ophismanual.pdf b/doc/ophismanual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a399c66b89ef749a220a9f901f6aa29de557a48c GIT binary patch literal 367372 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į<_301>TmO-^tlKvA> zgf>akjkcKoy$1gtyA-PBXPz@D&dUWlW@dTB?{FETW50Yfhh85-dhHp;)egf+64g>1 zDOCMHr?CoH^5rr&L0CH5=5rS&yw-QGFV?)1N{G1&q@GpygqRPF)DK+k95TLl5!+Jy zB&se{y{wDzaV+ChSpdu(fWhQBA>%?h&Lo(JL6nA2H8Ky=+L>6?tpaB&Wb*vyQj^%= z|BhDz7zB`=f)!)W9)S4HRlRVhhDcjd%ASvTuZTrf`*3Pasby*Uhf3nodA>F~D z4}6tA< z21L(Lj1R&w?c-R~R9OHl9e}~|LX|^wB z<$0LBXq2|j3%aCeK>VpA1|Ku>mnmGa`_fA{ zlw}HWI=$`fsr@DGd9AxXO0N>v;7A@$?)sXRS<=wns>_uv{;Vd^O*X2lF;T}&h}YQR zZjf6`XT=TKQrqV*qE`>gy11>e*EiBLw=mN`e3~78GCpF+j>e(+CHUbdekmz-aTO~Q zeSUGJ!v^~7;@gakEcA^m%=ytc3=}!QE`C7Y+}P6Ws6O&5)abAF>Fb?1yw&&||3L}( z1zv(AMnGZk`~)INOahBSX|sbcGmyfM#!`iBF)}g+p$9<*4v_(WlSco>BO>76_z~Ig zH-ZfL_ef3n8%zB+wH_W%{WpR7H<9``RUUyVk3f}2pvogq+0FDvv~!N21Cj zQRR`S@<^ldFcPEkFcPEkFcPEkFcPEkFcPEkFcPEkFcPEkFcPEkFcPEkFcMUGD5^XZ zRUV2e4@IqqqSixE>!GOi(A0WpYCSZy9-4{+O~rwx;y_d7p{erFRC#EsJPcJHhAIz3 zm4~6q!%*d6sPe%65WB%(sPZsWc^IlZEL9$sDi2GQH)^5$7%WvDmMRZRm4~Iu!&2p8 zsq%1Cd81>3A2Twdp#9Nd1AkNHQSBXrqsqfk<>9FEsN(=b9S0cdIKWWH0fssbFw}8? z!Bg>3#{mXUm4_ddr_C-S!%rXONZDUU`N%+I7vE}Zrl)THA7a8u5X5j8=qVi&4uunwz{A*M3DXGo ze~1Z%2YLvgH9SE=3=P^rV=!W9BA5-Hh!#T=n4<}W{hg-~JNQFP2v1ln%zQLV44PQO zgp8R##KhnUM*@3-?x6`7_yNW#o`4d=pl~E+>5q8J_r6ERu>EQts|;Bf>o5)O~7u>a%8Q`&MsWjt9d%m_FMqL>5;F>D$x23aiQ zLT1N5<%>Q7F*q@_1PaTKCP~1o04p3Giv`Or0s)+HG+qK$LGXg{ z5)xtrq6C&HuCU|nYBFYaIw}TNETUp%UZ;7WI08`&g#rf}jlqi%!Sm$D5y8PhOW>K} ziZtG?CSzi!qoQ-gDyqqt*>QNZm;?cqJ~XT{1T+f6k0W5kB#6v$g_gjLo3AEgYNw-O zaK##`kzM&8&J6Tb5Qjs7UBN~cjgt@~fg_5;W5iHs6jNpe)c#J@NQmGMLD8pnIw%HJ zETWo}sU0gJhQh(#94tf(gM%Oi4u=*);n4(Uh9DX}ZhJElK4FhJ|oN*W;{D5X^gR^ZnW~2Nbg}vj9Yf|QS8Z-uBlL3vDNuItSqVNzr z1hYUBNMblJGkzQz2VMkotf9v{4z&haYELlQPNEP%*e-4b@1f^ba+Nf-NAL2thL}2`h#|qMv9y35F$v%Wx7H zF&q}h99Q^pGuKGq_773fXL&j*23IViVr7=6b47&pj{uQgBs7B~K*$wKLLv`nrW|-Q zVcZUSB&f|YS2R>~u2@CI$}CTtudrZFF!W#y!WJ5hg)lCb2%BnPj;R%qIBpD%1pHa% ziiV286^p1?ncHbAA{K{-DIJN8qOoEm0tA(@cp?N#2~2Hvw(Z7FxFU|6h_Fl;4H|>6 z$$-YnEKg?*i;PBy^J8Gu2J)~tAP**cX6$R*ZrsG2u{6;G9u%CvU}?Y@oUsmV^dRdG z)kzPTV$mcqA{Z8|j1W6TLf}{|1edWGrYsFZ_&u^UdaU+`sE~zblrS1924O6sVr90c z+ZXsYSOUTo#3JAviNKFV!>9z4W5&X;<3d}bM~*CWMMK5libYhDGTVc1gN36wWCA0g zVN7DdwILFiqze7}R&n$+mSw7_pcqWC2#S@tp0+Mxz~90_7QhHqSQ3QrurLfrC?Zok zMHs)o`KF@>)vQuQN5$ZZMO3WJ@N}+-5O+X4Q;25a;lLLI-WCZ*V(MTOJ1zt`dW6q1 zQ=^#ZJh6yrB%R<7G0|srn4H9jIB>ktFn6Jl6EO^I5}BK(aO1|_NM^$yLZVOUbVv-M zSb@aKd``C}930CNAm0QHX8{o8BJxAB0Mo~XDyk}q2T&W84{ZB=0FGpSu*???9D}dP z0mnipmmUa&)qqJ}iSfzzaz^Ou4k9+-;qZyUAD|=;#>SO%l4vSRl}F zc1yxT9G1=t2B=ePK%J>5Hq|X4&8))@JMbp%VU*>j6vIEK%0~W0&@J|jA_iy z3l0Rtuo6V3&X`6fIl_eIHYw`^4IG2F$pOd8@<5A0qS43!CS<9=Arl-3Ao)-jG$a_H znPTq1j-3-lxiKTT{w&)Y4H|>D$$&N~3j^G^!NEBS#6ut{5wa3tw8GUJNL^uOnBpXU zKYPNAT!vtoFd8ZbVJxDWjHLiYLh=gWwg?)MMSwKeJ0O{yZ~)5`SA^eFs7Eh~u*wx3 z6@x1lQL!@l)6RcUL?o{OZonW*6dp4N#UiT7nA;)C4z`wX3lWW6K!JOe{3tx+ z_Aq%WhewS&KbhdFC)1a}=-xgZ6@x1lQBBI+4yUMSEDSv~2E2PBT%|9g-|C z1PD6=J>XKo)nf?7!a!u|*aWUe{!SGu_b?e#6%7=FD%LkLVX;zt{VWJboBBsfh(FqV@Ai;`-gtjE$76aUg!AanlI(j2Wj5nysn9ymE=rpm2 zX)-2s@KfNaHAkUlb?VGrvc5>i4j3!+`>0<&z@CtqG6)*#1ba-FK)|r{)3~> zdmP{w|4T!YAGxd#*-HFyGY`3+j^;PAJaua9GXY~2|9fTdJHe>H!y-Vg5uN}iZ@v6Lv)~_#9P-tmCarCGeIo;l3_9we93K?5?b6cMZKL?We>cq&R$8IVa-LO$FQ;p1p2CMcwK{ z9h`|xUZE0bVXPNNSslS8R)-Ju>W4K+J5OBFGJNYpHlBlFK@IgTo6LIF3|g3XriOl3 zDCu03Sy!D^=brG+sCme?wSK5G&%s~kN>}+%YnA1vq4y1(XKQo^Oow|q>d0MnTjH6AD5f3$X3d(e|Htz z;$rg2{p;M1JlOK}ip=-D%?X^}vN+erS02=nc`#Gv%L1=(b{(w->AzZUU5PuTN@;fc zcAuN?#MR7iIQtm|-mz}Jd9(dBxuxO*XEl5$%{MI!`T5d!QP|NM>^uF?i+N|vV7q?6Pzdz+?(h}qePl}8@$TK)rM=f%2uL}mMo zu;Qb3JIvwx&ZS=hly9BD?23k8f4&0%L!Gmv+DH0XUYKXN6=T0J@zGS7SP|mJwC*GC z5saP7WXm5pRoc4t7YIdgT32iLwG&d`CivAI)lAx;EMm8r-w8pyIZZ56*64(|cx1qH6 zuB7!dui~?uXMP;nkXyCcUsH|q_=VBF8PwQ0kLr#4wPfFo*9S+nZ({AGMrS;5Z#0c@ zzglf?%SIo>KumrpG#64C%1h8QUe&*Qn^sIj>&~J*rIKe91Z)kVNcKXSKJ(5Tc}dfL z%U0d=@Sf4)3Pr6>AaPXv(SG#e>h*VMKc6iy#NV((Y|E>M9Jont4t~IWR!=cve_Gxn zCaN|wsOgdSs7S=-j#ocNy4SFr^QG^1L`+H$QslB<*hs5TMCcsdhZ09U!^V z4A9B4dQ@L96i(zJRvb|!cfU0qMvH)rp(>@)Ea%%jYA@S2o}~_pQtgQMv=O>dQa6Or zNiF)QJaga$O`}B*38R*yUEv$UmB1)n%P76|8NGDtTdM5gjn6nEx{up7)s1R2{qdRY zR0KL&k-K8c1x6SudF=j)I{sH3-$Xh{AOCyeHK+#rBYQuC{Uf+hd+{9Rb|@D4PRX1( z<4w@F!I_sA*36xKIrHy+nxCw-d5W!JiSFj5rb*{F$DR6{pZ+z0O*1d&uHsp6b%}5P z+}Q$IJPSVF2}gd)=28MeP&aqHU?WdOg;Rr zciJ>^l%>to!!Ofj&Is61Gc+w_cl*p4QTh$=(-mDY{wXriM&kU}yW-Aoepy=#oj(Dc zkNLIpcPWuP3v6tS7>o>>O*MVWvminFVngPQ@HnyHc&+-r8RY|95^gn-u{A>V1D|X2 ziVK`R$O>KBmc!Xde$n?PsqP5HVby)Nm*ZX|!;ZWGMO(%ve2r{$rT^tMGVJIJQtaX^ zyhetlzA}ZR6d^7Mmio#Rmio%nFU|%l83*+1Xaso51umb#Z4TtM3kmQ`36Qjn!!hZ% zj|=aOBL9`U|2(`$N5ybRSwzJ`iUB=m36EUeBO>>+;f(|=c&-HGjvNWkRD>OT)!)Jk zqe^9!Dmo|zRji?c02srE1^;_=G%)MDkB$Obr^dM7zc|_dsb4+vcp6P8)vt!5S`4#( zwd2xEx5}8-B;DLt)#)Y66Zz8Ln#{Awoi$JV8P}=vr#MbIV-9F8(!b?hnp9b&{9Yu4 zFEsk$bQe{<=YJWC6wjbI-bZ)7SSydWQt8`&XXpJ82cA7y(512`dPT{|inq@v{+)}Ytce`Nhu+_8<6BmE&4GEuh1m@4gxrQK9G=<*S3f{_KaYcdv&XcAw$5 ze75lM+IJRfYS)Wg(bQQqb4x8(Pm$x9WQ71f$6Ic#TCwgoqJuJItM8omekLuBV~?D% z{D;#8-6u1h%l4qihj-N4c_=$6RXRUB_Vqp1@VoRO&X$uYD<4-T9u*R6qR4S=De!00 zIb*bMn}@$jS*YeM+wGqgtx30UzP$go&h15=3k_}+=pO$XXd+d7b?1$cZ_u~zF68Z>?Mu3j3e8c?)s8NWOyBtO z&fxRgT*avQuX)~|f37fn^PO1>x2Wd1alZ5KQX@^t`k~3i->^&~;OCH;UcJ|z1=@os z4m4f}-iZ6M(OP@uqf(9IDHr`!f||E-na*ek+460ZH=n__%&e5`SJU1;yE&yK_{Gsy zxh15$q&r^qa;|2oxNn;-7O%)JtY_;@TIlhDV@lll@D8^_rS2LP{L@kd1V5H$L_Fkv zQ)`wwq~Clu&5QqPRYBMHJ(}O=#_${K&Wl+Sbz;T`^Eo=}vS(k`ap=_FeCgio^PbZ; zKKN^@$AIKkNy-VcLn2!I2J`0g>tL^PSYGQ;f6rFxsIn*GdSK`FtCY_xKJKgQP<1`K zbw$^f>gfP|`f ztDjbd4BKCpcNR5QO#J-OknL)_pY6$GvDtfPe~&#zGlz;# z2^^Zgp)KW-`O$-Kr|h=xc~Q<&os`h__I1HaZIxrkjMIaornY_6RGp@`&q@$$=-t>P z>V2dAXWm7{FZFCDY|Ga_yMR847XGOv62-P+&F$IQsqJy^+-(;20Vg#5Qg+xJ z8KteqFK3b}4^P1vuHA3q6!5%y;O*n=wj)nsaZ{e`ePVX7Ft{PUe7*tB_s(?tmCwJ1 z&9)<&R6TC`yrg5f=U+3rV;-r-V5WXyGvl^egLPa#C2j|2`C8LVw{K#dI-eyz4K7^d zTDkGt6N%-=cR$z}a^c4L%?GwWw743yVqINJs4PdJ^T+P;fp6W5{_+)iwy=ORK(`_L zfw1VcHPt)RB!9+B6qqevon(@t+Ht4v!nDvk@+L(Nv#u-t6p9Yasg-=-*>u)suG;`XEQA2fae3#$b z_O3s)SZS-#)!nZ+zdTmDF0lN8yK(AQ!FlX;7mG@hKk+waP@cc5b34v!fP5UHxI58nPxw{y(0Ns|Be-fC;f=~rb%gv zPMPaYc>LjO^=coV74cHZ2a1d%c7EXxpY?{fDO2>F{gTKPv%aw{JS?#ILW2#*y1bb4 zL&y2U9aUsa8ddZ$Ypr|SmTsJvy>Z>H%SqCAxYKrC9f8BQ8@mulsjbIY2Wj7w|$h!8%{dnC?PzE z-S_1nre~LA+jGMw_6wh6FKx_=Y4Lw|UhKk}4M)<+u2JsGt&58I7nPC9zsFY#Y*3cX z&S)cdYO8jby?1Z0cB?wIK@>=j= z@7m-DOTPu3RxuWSG4@jw>o0BWSoectUwNL7ncd=z@uf#vJg3b*o1UJ2+;=K}17-H1 znFfAN7d~n0*`ME6e2Fi%c#9gPu~Zs+JF~)lQO)UH8tt_)2Tz6(&w2N+#+IGsNQw|O zp%BG=<%ZXqzwYm~>J4ld%3HUr!(&fWUtU3YVcCYLWZM>aLHa z9Z8@fk>EZQ4g;si_zAI(JtF(t#vxWuf*X(HTE~t&Q~Y;EgB&ixOemP-d9KW_H^;rk%O!%qwK6ws!N8BOk9URXVY7`rPSdiZ^FltZu8#OB67vntkBS`n3`! zTiq@ke!YUNpsi?GpG3^oGkd~cXq+CLGDo>`w$)I)RN$-wAH9yAJ=gK51nZv`EL)XW zSQ$yU`C!G}qKd88%C)Dh@ZA6IL|`tDOhDA`P0zQsq|`JSe@{_m(`|hrTRh$a7KKcAwOXg1uah*>zC25{Uaak`T+;h2HnAGN+a>0tmQrQgmYA0@udGjX z5X-tETW(@J^bW>|r_U0;IQ@=*+3xI$w0o=Vj(i~d-xc*a;n&6*6rj;qAcZnyy@U|9;<}ceR;YMxn>QnH!;XeJ1owzz4lrmy7z5- z(TAMVnmIh^>nq79Gt7dvT{C@9^Oyk4Pk3YG~uJ@pzZR?Uft3ECHqJO|TBg|4a zWrMiIkJI0diX&X?SuImK1aL79^*5E4YYH1R6a7@JAgVv z&}jAHYTqSX(tW~Dy{C6jYfn%}`;0zmpN>;Yg7KDGpS#{2%n=9@jlOdz*YT%(??OYB z6Rx%j7pIx3bMNp}SHL>DkDNz!SDn*s z`goo@X2-zxV=JsKh3zzwc!{&M{m>{BE+RNL-km2*vRv}0YNlmj2v>r=v#QX$yHWLj zxwX_htof>O-*d&w9S$7x%H6*PJS$n_nHGvQR`}t^}$CQtb78T~Z_b%=;M(KK} z?!A|~@=yter?@Wh{07tes#WQa7F|?Z{bJ#{`1i!z(=n=Sb*b~^e;hxskHa}I{=-9? zQxa278t%BReYE4NHmYm$lLZPcFBNuQN%*pBXZPAV$xE$kvRjMJ?|N}6FX#EHuL4}l zQbU5wxBeuxx_G!75IZy4j+jwk5 z-&J8RIduDCmzL3{(;WNQvu`z>9I)p)hYjeww_tdF_LK#-uC5)^@pCSfYD66Ib0-e+ zb!u&;D7?Z2un(NxMj)@DJhR)WFmIUW;pXU!ElU=>^qI~1V$SE*yWuBJs9h}kaCh3= z1ux=Pd|LBeit_2O^Ry?gC8kv@eLU2eb@{TAN4%8#yY|2GcNCYGb8qz1%i>Cna0=ny z^Cckj=*=sS20q%ATKuGRev3Q0`XO=p{T3U+Z^efq5)#+~pT+phx~i1z)Sqzn+0{3t zmRf629$2SW7mC@}>3p3Zz}~v@`w}%p^vmj3S-L~=ZRdse3s-prKYxK;{g^)_Ma_R# zyLOs>``vHfHtw_{UwQEQyL#yzj@Cy(7U73Id*^j!e2LQCz;X|AsddBb zGhJ^xwGK4i+s?MQaCP$WHw(5_PQ_1azRQkUpinAU=)LCP?c|^QPfV}yb#F8?a&3PY zSfaW+Oy`Hkows>8tJiOl54rViS<@`1;5AL%@2%yG{i8Q7o|mF=vu$BTv1SVDvc3VS;mi&8(1rMi())S`-9Vzlu+`as$qet6(PxV7FGwQ;yo2Q5Db_ub+ zH+Qwq$;M@i^K?IWJ)9N$xJxx(+Sr({xuxsQ{RLk)?0p}pk_)tWu}5^`4ZU}t;gflWPjL5?{K0=pzc*RO^1=F# zTsBHFkCoN%>a&x(XW#5E-^{kWESCGGLHJ=wo09Wj1?AE@z5&B~J*M8($>#VTvhs?Y zCMhSQBW$zs`B~xG!q4yAir|WTw)mph!p}F|=FB^hG3;&bb;K)|ZBNBw=@^5V(u=s9 z93LE8&i{1R&krrDAGd#7v1(3)c~0k}LbmIRhO8ZXAF^S;h6<&a`W1=>*zbzFclC|6 z(9F&YeBQn@R5nbl$xcn?yD4#G6`TIuYO|->(hiqTR<^%3JH`a0T8KvDsYqQ|Qp$`|9GlKTf|}FI{IOl|N|q zrJD1QR_=?hT&Mk264DJG-F@9Q`@LOs1FESdbi?XeGm%GL>jsr}e-+c2jW@lvbN9h~ zekblj^?1>(PfP9e#jeU~4^jmD1x@@1y4a^YT;mXPi8K510W&qN_=krUvRNo8+IO0C z=I9bLGcKH%=^kgJIn5{S@WwSw*9RY8$&5W;bo|j)hk;6xNUFyn_g$-2o`~!8Hc)!j zREAwSrLNfOZNkU1mz@K77OlT{Z}x-be8%k!Yg@ct^S?^l_GHcOw>AL|cN>br@IdaT>SB^m}BRh;G7KozW8Y8 z*hez+tnlCDXS^iey2U=#K4|XLGt2Kp8h8!!{WUa;Ja4JgLY=LThqhep-+x1{;K7$o zt{I05)m?OI*78b_?pRz;pL(+E80oxoL)(##8IC)umz_%VKI8EJNc--1F5C8hTV$_L z_Lj_#m6=TlAtNa}TSjGOgpBM>*-}Pj&$9OjnIU^+XNCOEkNfE^eE9Y}zx$v2ez_fv zb6wYU9`ECLzYhZwrn-+dYk2v^2JXDI0td9|QVSJC>Fs`ecTH)>hsc%0B^gs4x9!ww|jq(IG^>ZKOD{yuq?6-Cmqz(2Tive%n7WP;g*^jXh*>lNMe2O{IFN z&}EaL>UW9P$z)P%CeZMfrrY6M9IfwYx?KYOEk^x0c zWYyrjPg)K&2k^;4<)97LvEExy8L{68!YTJnXuNYY+x<^Jp#S2&32H+R|HyB|i3>!P zzdb|moBwGpbo9P?8f0`tUgWqnls60{;h;I%Qwjw^Goiom&I66%_+Z7aAhJJw@K8M{ zs8k}f=MGTDf)V?J!0HThP+rf;0d0c;Vn9GB;W`Hrw#XC1tMC(jK|9v_fG zJYf&IJDsui9MJe3ATEbG`+R&rbKv;!59?HZg;&QX4=vv2X9po0H=s~}P8qOff0p}S zTh9$ddVq4=$*t!)Y;1R$`(NfzJ!0_Wo;>$Qie8Qn9tbLc_8x$u2H^n|8GZoE9-lkp z@4N#cem)Mc2q(>tLvDZWJhXWY;N<`{S%AIqu>*kXr2Scs9jFEe?;3zs0$w*C6uUcN zex%L7@!13QduaOrAp8qTdHDDMs(jM^IL`g&@c&(VP-?>tG*V!gABWujG>5te63xIp zc;kY$OfY7DL}dT?@PE07io^lUby)8I=COmy2m$3|7_ix4N5uc@-~lxgPzD9GuuiVs zS;ro93xg8h0iO*hRrA0EdylAxpEh}DWf31Qc=4Zbe?;c{RCDmu@$-WtaMJv&t^2j~ z;FANOW*Ek2y)J(lb3kX#4Yv5C@4wl%)6I`ii+;mOM+*9n!i|3-j37Y)Wn{vr`~RIQc1VXH+h}kJ$?7# z%Q=R;HL*AEdKSv!MD{f6{KL~i0*D@NWt4;)$TEi3>HO4RF^VF)+WjTRpb@cZ_HhxH zL{?s5e}0k3u#40BrlkfuLF}qV^MY1pbe@cLi3VC-xZ=(5A5+r}FSn^t=d7&wZr;aZ zeZEp1BXhH)fAp2cTQ8q?GvU0;RzH7U{IC{l-AQS{96J9VA$)&ju(TW9lS{!6m zFZ9|qiC7tjqKBtsl|9F(}^O=1R3w$R;Jf1;lBME4#O8O=`SKl72`I*Ks| z`N!`@PY({d4P_G2_g(y+7<0sa~HWMN|>wNIa-&BT6XCLW$#7<9wlBBB3jgG$D zkq=Iu0tGWMc@TLOf&KLMgjrPbH8%b|>0Gx|pUky6d7o)@+G`aS?}ePHa-MAE#Vj8n zmEHX4E;dG28={eVk5r>}aK|#rUbmp=GNHG-(szl5!hl(~k#tUWi6Wg|JNk^Mtdxw& zt2(8tu`i?Bsh)K6am4rzfzONYx4uA#!(wdUeiYsq!BpDrwdf_lZZ7wSW0vahA7 zP5U2<8))-dvM$&?n%0cspdMBGzBhF5R({K;P+KFKPLo|BWrnn|G@)n(cUCGK)0KNg zG|fBk%(EsTA9sB7g(%SFLmmjK^9kjxw)rX4P#J4Ub;(-H@00JfnCM--qD!ToB}_+# zw&-ls=Mdlih^b67gF0TS>~n-KwQoU4tYu6h5#5b)^Z}q!X?ih16d`;h zILoq-t2fe5@|n8gIooT)1VhQy#Mldd{Z4SYcxIm?x7)L197H*&mmP!U|3!;f%I4Yv17-C4SI?HjU7E(k4f$uDw}Q=?RC`j|->U4*v;?Oh^_X+Q0{ zYI}6R!PkyW);)WEDRs8h_paGhX-%KkN+=?IX5*9ghLI9EyU%^Arv%&^`NL5t*Jq`e zCzUV;VqRaN%qq#f^3i&}x=rQQ&o`CauKW5zK0nJ7nRv-ku`UX}A;l)?tMa^0{%o+< zUXcJE+c$t*XB2)iFZ9!bE@qo|9I8`}4_b!+C#SrD>j zIB{zp_igVHx3`jvDym-8h6#SP=~kpS69RATyIRCPGabk1%hYteMoWaR%TjW4Fnjl> z?(&TkR)cMYcpiU0H%tn8O1?qt)`;2e+g25ovl!0gq|I<6HZ&;)JL2jVt#*r1moo1Y zzHiaey{C$W<}i&lf1X!G1S8_Wl5wEKd~hiXWsC5Yym%xdhtoR*3D!oE>FMT;feZV36q0ntNlR?K`H7t>k2er)IR| z*zDS}Y|7hn_$pL&ezOklgH_U+-U}ekAt(npjEpM6-q2rrG?XuY{L5 zk`o&T>=nH++}FR|USSxe{N|;YApnWKX->Q;>Er)te@v<9hSRfx5@#9v*5b~NgszaD z2>toA7a|#4Zz?Af+h1`!RB3Q5e=~?BceQz;M_z`{xwo3%OVmt^kQsp`0CVFhDsS*+ zwUO)t>4wYo_*>Z%MzmgrYuV@I98)aegqz^G>-Hz^Cy}f?cf3`lL*^M?;Y#Im-Yz@v z;#_9dRHX~y7j=}1iXvR$yXOPu_~GB!Q#|1}5>q_ad;O_&Sw&w=Za?xCVcDD3YqHu; z`X#xfg|@YgS9B4c`KB;r+^gRr`)-#&9s2W5HC9w*(W-LPkGLf52V07wCE=F$MVzo) z#>s1f7DLhFxI?~M?6e}~y)!gp?(Sz-Ouu+=6>)}A{^_#)`)(%TvXpyQzmvUEQ)*DZ z_N4WNspws2W9=)+J})k;V1^RoU3O}|hcR*Sebpuw1!)}BO-OBSqNO(07r$r{4jy~W zTh|+s_j6Vp(F6*c3bpk={$7*jN-!oGTjCsrbX@a0I{JgeYykLO*#oX{^pC|9QUix}I)wwP> zWF((Dm}7JEqx0std3iPE^z)}LEoE=Z+4PHN8(GaZ3sXGk=;SFzzM|^gh14E|Lv1ah zUfE_|<{`=CWyBcn{O&PI;i|bAqKze^(taH=5muB9zD>I75BbuI*LA7_qa4Y3!Hy&G za+$V{8D%v*xfqh(`-WP9eMLKkszVF!nY~+3WwG?l6s2L_Y^J1#I$hhJnl>~PTT{`< zYh*E9P>8ic)@c?6sPMk$Eu-7px#EkJ<)g(zH{|c*(5En@J(_NJ&!xSkGZtsl-Fd07;sb^=Q;cG*?MDh(9r#Kx zr)}t*w!xg>-LiZvny42Y2O3A7-wm-G?XjkKjkrFiWTZ+sJ4Ua%%UP`pnc&Sxz4+;A zAop9Bvh}X7&#UQ`9j|y#wMzJxn3QzH2Bq)RKVFr+=2og#WcjelD!>1Wm9?=*l!EJA zf&+S8;Tq-;iOFoPd=G+KdAOGDjwfM(MxYn#ens66i$y#q0q^2hg2Cnc7MB$Ac?avj-6nsDlCd`IF|yu_&140MFnC z&3Iv$9}kLQnR9_+9v*0$^poC?gP?z!b3uTr96Nw9xImjt&<+IF+W#4mopy4#I6+Vh zd-7);ynlhX!?t-anC9FkY8H=-9)!dE|1^IFASg`p<6z96=Fr9-0Kq!M6Zkn`6pwKO zkl=STdfMEfcmf9mM#&>Lcoa@I|2=oGbzl-OcK$@&;h&?2fTxWch&dm2NM#4D8BcEg zA<6#K$A%y37F3^b0xSvuaVOCn@Yl~6KM+<0U6O%<8Q=(ko<#upIdSwj&N_O(Fb!y< zbHML{@zyv|`uFGb|6M-NWrURz$j`%Yf7a3a$;oqpT+ZnS|Cf7!y@US8Czl>__`UmeY=47Me_%;$N2MlCL#FQGP6ZIG5 z1Od6Dzbu8y*1T>zQH)!;dy6q{fV8w(Y=shyJ@b+v*NZIPn*vQ5YPS6Yh_ot1_O^`F zt02EIE&FUZIDRp}TIsXSod|Wo{+ogJ5fV0}9n`*Y4!_ z3Adp*4mgy4(~AGbQ(A*Ie4CT7n7ifm5G6m`YK+kv=Qro$rB=N)NzLCgc!UqNC(O5Z zOKOk3${FO*C0g>z;k*hTU@IkyfUdDKMEYD)B*m~kS&E>;!?h^c-8wi-9FZaASo(v^qPMK!1jX1%cxc*APZY?ct#gj$f1&qQM3x?(liY}Oi_)O3LEFo^ zQi=X;*^Mhp4kyz0g3>TY0{mx=ih#M*kX-lgpfXEBS}Y#PEpb^5@&aym4OaliaGs6+W0pP;A^BVM^KcS|;Ik+pR6?6TeD9h9nu8 z%Pc{>B!_`31+Pk+PS5pSXHkD7QZp{@L0zOE^$Vs>N~|l%9CVN|YrlbbmX}mpmo7+o z;8o!_7%)dn1o9yx*1sE_eP`Mg#pB^vC&x?NHXA&zh@Uzdxt(R-J@uxtlLzrm5^mxi z6(nF{U$4QS6^)J#KI2)r`5e<2HFf5iIaXDO?#t-Nj;Pz~OkNKB%#@?cVQa1T(#6DHr1W)Qi^v4`{YpK}| z5~8-Y-{-_;7pjq$M+bk|lp@a)6PSmn#xo~}D`9z+4PoPpa!49na^f1-WbLh~zqlVf zrW}WXXX~k|f9ukK8FGiAtH{H`$C}|P$>{MJyRD0{S26-!qS57<` z+xrr`oDsV!sxDt#B9xuv*}Edvj7uV^UN)@lj>6Y{al)4$_kB0Qea2|~oTF`ZKBsgK zUI2}xhxk7E19M0!=2qfFimQW6-6bTsP{iDqey&56vk$(vb47gMsD{gbX74!>%`KVU zg5U%{PB6GoHQmo~jfDUW4gdML^HX#pA>7g{S@#qU3g#WPulKjJv?*@tKKO9(Bh%6A zaRos&5!;nF;{wSS0^0EnW_D`#P-7; zI*2hIy*6UU@|FY3yFQmrrr5p=A$aQ1L5`JN5pnz{x}oY-^=;>eE)RFfeR75%UE%me ziV{?4bbRMW(%JmW(0pRCZ|`2Q$tW|A+wpP@zGsz>86gXqzdy!ZFMw!Zcc1c6fV+{C zE#>D@i)^$f>0}CJ_9m&jBk=)T>K0s{xfUPnHlOZ>l`u7wwiT*PU|oK_6VA_35bd1o z!Al|H`jsb0ZVS0aX}{Y*^^%&|dHLb;Fbi&%C3dqNerOkD+u0hjbq0;dQ zbXoECu&)|Ri4dnoKiPY425Tri^R+aU;`apI&%r;;tJ6d+LjUQyK9#X>11a<6>(3uq zm31ax$6ZRf6nt5GnobxU-q5&<3GNLFx9I}9UNYuAT(atg&gVh<)!x0|6ZJ0fZJS})5|765jF^)}=F7gz?{AoNuyeRg z*dh}kxP+8mxC@F3F}?XU%yTI~E>x^5v4GNdv4F$KA>@GG6c#~m$=#Y15lA|n?*nZQQdqLzt%$TXRn1YQFm-65n z?wv&A>v+OLcg{8WCI_pKr4<*KZO<&LNZ}$DTLylM5P;h!tm6ed!bFCT%(lKjJdD zk&`V>VehdSURL%xfx|#aFTd}nFw3$2xfLG4VL)$kU|=D*zoSy*;hr8L}UZr;D{4+&hb0&qYF zIeqbeyNB)qFZkUPdw+z)bbR&xbD5KE*{2TYsPUSF)2SIJu8Rq|b2OtWlLOK~jbAtsr-8*Qz3&27Mc%1;mlmooY zPAvU#y6lm24+QH0VgthLGwhE62uJLpxCJQ0;r^$9jT_d3bDXn!#2)ne0Hi$tm4e3` zion4@Ey2@p*7N~%07b00IRNdG3kGKvbUQoC9*iFdTtZc-Pq7EJrDxdx+C3;`mIv@g zPb~kLC+{E9AE@DimH~oNw3B;x*17-JH#ZnMI}G9@_mQRo$DcZYQ$kopa6nJ4 z-4W&c7?$s0uegEKfK;^O*ya1yyGNDFi)70c{pW-6ZsZ zK7HkXd55Zsf#x}|R_?4v1_C~DJpABI!2znB!Q5eO+*ywdwAzycWJeA$O8~jTTKcn& zEhl(Qa)FLDK!YAiR)%%#!TaDZrVp+;5FQxi&fG^Rou}>mKOFg!m?QTQ&g*||eRwnc z^`-g$K`f8R=KdXg35&_e0czs^7QP$?@Z}H>PUXU_w_FLC5dEY_Ya!aE0{1x;Y9km9dAi9W8?H|8@pm;LgVGDqA^ z_Y9=WgTA5=QeqtIb4YT_=!y2)8Z_nF2o4V_b)R$h_`iAd%QDDe5&!4vW0)Hxd%x1 ze2N?S9`Moo`M)%_y*M%VB6#4FV^(dkr=8bxom8s@zSkHRQ^b67)7@g|W0n1$KUPa0r};OWlA!m z$JlebBveQq#@?}<4#|j8={b;c|*yH z1QksI?kI$D_ubTGId12e(fTw}>=eRn@gOU7?(Mo8pYO(t$)$5ZM9pPxN%*%btsG47327sE(_Mp z1%gPC4`K^KSysY^va(#&Gq`T1hqOtFTx0KAn5he#-(n`uywEfFI=J!)brF1dnz8iC zYsH&5&dId8JJ&)ojfk&IKrG44;#_aub>9CzdwnTms=`Qj+n-Un&B##X*}*C{{39Z_ zraZpv@Yb%Nu=K*H1lpFhUX=49+Y51Uvv2qU{Sy`UsB?NvDT@Q|j^(~^`$@+}uyeJ0 zNWnP*tW32I6tA>KNN6X?-%4O1C~oIs3|8RLW#P z=~jq)w9I4!q^v1OWhU;;4C48gW!d;Lt#lW-U_bGM4Nr6yTDDsZ58_2%JumQj*8bk* zLd%+1Vb?cBG*bgD)vxp=jf!_<)R(E#H7MmTrGMIUb+xg1+*NGR9_>#|llAiE&+_t8 zzTNwGwUywNQN3CVKh6e=`&Kr5VoGf&AkEZsxt#h#nmRiN<+VLI(^ULJ%u9PTFoRobTsvj+Ls+`S$Vw zedtTk@ZM6tFnSZ7xTbKrO!1IKN5#=l<|Zq0gTlA$iFgd{uFUX6-k8I!h#j5njMoSz z5CzP>85<~SSV%BPND#D)Fy$SV>KC()Wi2E?zgD{Qpp@FRE>tvM`d|6kCW-{d*&1!~}IRW&+#SSA0%YB@^cElXo?G2zC zpf@xRh<_oV`sPF!a-6<)#2(~*L6bOuPn>RloW6F%9x8#teP|D^@&K}eai2WSUps0K z0ufNS0>*#3{jnVS5ql1>Y+&P{Fc}2O!#jDK=RPhOb;KUpB!LSE&zxa@cmRJL+rPOK z9#L&MlGFZ!VDWdC!XxyxUpZ}P3#h-$X$KOU1x*w$?*8=qS}H13AyF{3wb@-byr@%F zj8KF~AgN8@mrc9WuihTi)c%2uN#!|LN{P<4CzD^Yj2|1*px26I94DbB9$nn+NHL?# zFRH_F*0x?HAIhIa(?3HGslA7W*zt`u5D#~nbL3mE{Le=R(_0kqXkqt5>f&~5>~nFR z2tMc8+W6ohlF;+Gt7cenT9OiZUnH}_QrbgJm#dSC9TuSt@s z#yl_VT`(upm5Ha)M98Ma{(hnpq6p$*Ji`MRVe<@PFF&(?^5XA2Xlg}lQ%mpl2o{O< zcSU-g3zgEoL$~_KE26t2G6v;Y{}nEgoAC zHxs%N+dCzG`UKhk#4v03z8D@A$+TeJ$4U-euI$m&46d z>D1Aph34;In~tX$ASK_uPCaPKbnfRaiN!<+wj#Cx-z@w?-W{RX<2M9r8ysJj!89cH^Yuv8R zDdRst_$fdMZ9#HhlZumY{5d=uQ_RR@S$3 zCc(G$XSK4D4g~e6MQ0lj+3u{0D~T~u#J$keCC$%CTZj?Y^|VsI#H=mG6Gk&*>$KG4 z;{Tu}dd*87K?`d~YEfI^ChAr1=TeknH@P_G3_@^>65eT5DQ&5l%{m8Tq+ZqDxI52P zoic<^Kpom5yXB?&t$!dLZpavI@Mla6196Qx@i#m8E| z=v#;?m|e@8Ts@bNd#B+tfx`D69y1k&4zD=d!uY&|Iw@H4dQcLr%c%wz12Cx=76UDx zM`6PK2(zNJbL%2snB)(y_(Dg({@h_;ti)z5t2H`{Q>O@tjD`56WdFQ`jYb>dT=$Jx z4jvS$QDIK*mv7ZB`=!c+3c@oI8sf>7jf$ARV(0o?Hf%H!6|L)Sq(}NX1TH?2y(C`c zjVym0%cl==c6_ODUxY{D=2J>;_wjKHAgga8p$JsjD3RrU&9YNbG%gqn63wD1n0b<1 zOt8bvwe_QAlAi)?QL&a5Go#hJ&CT6GkAS?ljL~0`oFUrhx{MN&A+HSwV!Q>Bch%6_ zb2J&$!FM~n2#nygCD!;Qy^@VOs?Eb{sRR7Kc~{x{A0$g@d!*o06T6FaZZoL%idl4< zfs;e^puqk2ym4Qv2bMGbUT0j&YYt`15$k(o_g)g`%Gx+&Ww^{VKeU=m8qIhxljo;v{t9{v~g%#EeKR$(A1eM1;9FhfaZ41tGp zL}KoHjK(kzLH7uF$P zx8p{59NsO)u+&F7o?lehuT@2*j=l5=oAd_~f<=R#cO=QE15%HNC%+;@!-o&2jKF`T zuGM1kL+pq3=%8lR`FZ|`pu(SG5fi*)rO{Msw4oX*N!!D()idH`Qb{g6DOAtj^P0Cw z`?>bsd2xdcvbEn*auA3ZHByrl$u<)=($E?4J>k~3*}gh*dfjJbobJ1pXgURH`yr!Z zq^_~^bCJeP?d3SJZJ;+1k8qL^!9jC&g5&oOCr0^HE=zF|K*j z?mgSm^@N|7$rif8Zq$;*eboPe9b2 z@j(;aV5Mlm>HV=@tMi)eREDEZb2i&1B0~8ZZdgJz><~F`t*oY#_tnw7bfiP^@4+-pSHD0pS_dI~JU*{%Px_W= zZ?K|gI4|WB z4e6;e^d`4Bgi+^WUGl79F1t{8#8>;3ycW`V+PDK37ULe46I^~w5*bJA6qEnYMEd9%qA;A$<3)msS;T7m;NC4o=|1E+0J0t)p)?+B;;ZTl+1iYu|X`Dz) z{AmqZa{_Q3WIj&S)8IZ%t>^yJ{ue}is-6b-@w&_-=A6(hC^RK-svrjUiLA(N>z1(obDatkN$^*`;Qq;vp*pK1+yO#a2vgXV#!q=JuQ`+xf8WQQs`g5&`Y z_z&nDPDDe0weLVm67z)G? z^TQIeIId`LsK1BEX@uNfdO zXV{;${l5+mCm+bE@xV}_;RbKR)7}4T&JJ2qLq$c7AAIP~{%><=MvjLE*3mud>~Mhc z9!^g1w1Gz-@F!qMi9mI6{=z#DRN;b^!{$C@Tbz3Ipz2BN0HOh`C%_Ja!5ccFoTRgZuij|10zi!v6HTnFM!O@{HeQJ&?Wx*XU-%S$_hu9 zoOY?uswZfC)#Ot|Rh}3o5(Zn8jT=xLxZHV$E1pYvRoaE|){Tz$l#!a4vEjJ~wz7An z(8QaEw>BCE6U07SFfvx6M1JGlQsH)48@A!S+E%rp_F+fURmX*y!GSJ#72)fk(k8Cdn5Ml! zzWVrj1G{}}Hun2k+58Vrk@O1(vF0*L0n`umJCi6DS6y*dFXNN4e7cGiJ28HV9w#Ab zO|9txW_1n!HdeIA=dB(UB8+SZb|!<8luLI$OP^?)$|qg1_b!VaZLB*v%WpQ*NQUs8 zO*J+eEX3Eh(gQi#3!>6UP)N3v>$yZFF9mXLirLQdRA=p1+AbEa50svNL&D4WOr1C= z49~wnk@2d}luLV_LLkxgz~^OcO0_lX!7gG`-*~gz^V05&hTK`k?6KLwrO>^`)j7o5 zNeJnj<7Ep+u5{}dp`AE!afN2Cf1hiZ7uSDI(~*lSpveHM{{_qbU3m!ljzRwhxZprP zXh$m$|M`Ev9`*mS0+AEiv5Ng0D{|qBM7DY9hOXjj|~s_e1V_*|5ixy9A}sQv&nxO5`Y`$A4dYb zD36$Pg5o+}cJM2wR#-xX+kYRa#dBOSTZ2el?-|xz!Y%741|J%Oz z4>0nkv6&_&(JDT%wsttAW?bn};Dx1oDZi)OvlG%!eW(dA8`w`L7hiR3&x%)w?+CC#EG3u=iNp3 zvpSFx>_k@9EITF|wfE@Ke$+t}q`MEkL_8SYP(a@H;t{Eu^0VLSU!eKav-q)R$)6;9 zga;)TNo=Gxgt6PBUnJO^N3QCcGVMiu8){ivUyJfAq_*K5Z{JyU-_L=I#DjxLeP!-N zHn$|o%dinvN-QbRgyH#CycHgFva|El^Z|)TW&u3 zx0`dUcOJe}khB$AA^m#r;$zNK+pY!X-c~sxhyTNdm=9&T*E_A*%eVP>#9d6=seZbn ztA=`51lHWYL_Fej`^HC=h$qDIWy`U0Z-qS0KUp;lv2|}V2w}#RjhS4c2_WtP8CP_v`&|+grQ3)^%HVPBiGM?X1@ijpNv`a`wIi+_I8`9j0$4_BUtodMVos@vbKiLZ1E?UG>+ z_p5%7VexDiz^iS?px~zJH%8=wKg zlq9!NMHHbi>V4-oy|7WW`re=`U&{1uEr`C?!_#MOrVX{6)23{cd!B%q3s*aSXAAx@ zVM(y$SRJL~`j*DlwZ}}jnbi8#PJ=HD!z1q8n$7-+@FW2V`E3|-fWiz0QKMkJ?D=}n z!bLOhqWXM^sfW+|2+!Y;6uXwLfxc|6;h6qzdgt!!h=(=BPTciJ?9Y3@HF)1$QMuDU z7&0!{4#6aN)ZQ|sFzmW{HFGFY%(Yr4Lf!>#(8R0_S4B&5R>!AWtPy|nN6Zt8;Zl6u zobQRtXc(yUB*xT%;}48h-U_FFkRdQ6@>wL?vcj0Q^=coM`Pk}|=p|#D)Jz>rts1a( zpK7U$?5?*gg0w=79nF&pSxV=zWEUYjWu#VHk(a zq+}15+juDwQFIi(8YiwXIuf(z12eN`dS4rAlr^?!NxuT4$@R}mot^}U>Pad|p|#rB zbw6>NFA5XUaFV}=c;O-4O0{{V!ARRf@lkjx*N^?mBn5#%QvU#)@r!_UX1If$v7phB zpK>b!h}WV=rSFU_2!Ap1yIiN5fiU?xR$Egv3+Fz$n{>dCd}<5E#pfleS{3Q%h;4+J zxO{)8Niq(V)ShRw4r1u;O&=z?p<}j?il8gYOoF1wGJMW*zN0+a93RQ(@#;;Tn5B{B zFWaA$>WhNmC|bGB}OkdrT{$@9BQujQmZ+L18|Cmrxx#|CV=V%1-;d2!MN50;(M8*1 zdqXvjKW3pst@71c&O=+NaJo1RyNsH)F+*yQMEPJ-oKY&|9P?n+%+7^xer>*=*zXNe z?Dkpg=-P|+m6iCOPsc?q zt4bz-qi2+vMWG{Ed{}NW>2HMXr;A*-nN?Pw`34*BR^wQBsUzI&aWC98mff^8Yncrp zEX-2)oQ?e3*<rc(Y593UI`^i^eED)VC)#S^Dd9Eb+V&S8MLGO9* zWE`6qhD%azuUg5)P2R@K)0u?KK1ZR^sz{m5q~)pJQ6qX98;9K*CB#K*r<-w?h-6h* z?uXHI&ujv}*nN__)TrxCsk!$@J2@3EhLkVHE&Nt6~W#x${~KUjWl zo8i!p@}6B^vGk$CgeAsL9r`&n>8?cweJjs2PbZJ-X>VekEPR||e`3w`Ru)2H-f#tK zCVao2+6+%gMsOdA!wRoOu?!vAx5$`Or}CUHR|IubiQ9)x2CRd@7_2O(7lsu*Gt>sv z_b3`t%-~*0smi@7XUWAYH(N1Yz8g6m1&NShb2Q!koNwerjuBSoh+1#lrDJ%1>~@Uh z(#3@#kD01xL5qp3Iu$c;Nvm}iN2cL=UD0fRcu!k5+-zXe zd0XYYm4kU81lN|Fy~xgga7%J*ZHcb8$CJD5Ma0vD8c?!X#96EKEzz^ETkp9>M|r}q zJp)%n3~x}1|6YD0vu=~b&zG+%=Fna-s@=xJ3tW8kCH7|h{beoXJ zVr6XMLJrn#_>@^>wJRwRyHTR+2gvEeb75qw1%r5V--GI=Zt%okiF-_V!%e@_jSsH% zz}joM&yA1upzmB|kP_jtV7!ItozGv2*A1piUprq|eabR_AQ=Bata!Hq%>=82IjP1y z-G(TIN3+)K(!x(BSH$pmlGypDuUvg)Y~f>XDD)+KRMbbaQ%JjCm9hQeNz_8m+(C{a z=iPG;?l9Uo#V~2=j9IpIR3whG{t!!S73A9{u%lII64jpP{RP?tbl+AP))$R0-!i6 z;Cg`3f(j$PziME8T~bBynmp_v_y`&6zg#&k5b5%81E7@?s0{J&1N~VDs9ypRF|>sh zG{F43;i*VUU6Genync)#$a7pKhv)DN9uI&4*M}3NCt#qY#{*cH=BK69j+9wJ!{0xx z0kR22*rDO`DH8QO$3=RM*#8?opC(byb6lh6h&dM!)Z*m>kjSYT^%|MsKMZ+)p5yvJN9_SUikBOzu@2ILCm9<&$JK$382?&0ZfJ%CR$>L{)}JwRP5_GY zLZ1#mrUJ59FyL*TB?9LHF|Xg$Il_s3a1|r~yQc7p&6p!~zhXKg0aj z)!q4yy($F02;8!3Zvj+&ou-qSqtp0rFpare$T)+&%3zVIpbhMMh z|C?h60ec7daj@K!G@%E5;Q3%ZvBwF`N9_M~4$TSi!^kA_949m%F$dy(&<`xg z=K)?MfJsko+;Kkh5py6$2D0CP;m!p*LxP+djMvq1Lh}*(U!&&)I)EIYKpBSnv(6nC zbict@m=c=KgVt#rKXzQlld-V9gMwhd&pUZ)535IhT@H?)8t8`=NZNxhEO^&)LSSfe z0d>B=I5wQ19VR>U@jgCyC_Vj*XBO06fcpj?U>Aa&gGEJ$cEvs29s&|^5Dsv~IK%$T z7bXy+;{oUPP>c-*tCZ(B8ye=)15PqXCc>znfYQTHAN;R#!vWIC01bz+cE_2SN4!Ho z$p?5%fVo3U!GQ+j$+ZVVI^8`4Dmw|7#An%`b#DJ1K46G~O8%48BRt2+(8q=kK5=}Y zFo*+O>A?5yBo6_|6Pz*pU+%%@nhz8doSZ!P`u(2#?*zda$<#l41N@Ok_`7845eDyn z5(FIV;Nknr1c8fsTj&rEM&u}69W31Q zuN^HVyOq|Qt-YW3bA74%2Z4$jx|mu0NYHMoJ&kn?)4AJzIFB-EGZ`Z^73jv)n)D_w zuIsDG$gMAH3q<3bvb&tR%|D zbVwJ|XxqLmX2Bu*czpjs_$;uh;NpvKDFf{y#XpSwYx7*~x7=CQgRc=R6-cAEA4Gp6 zFKwXhEjBNk?aQxp;-m;Qk#S|UNF#^{heVj_^*3<}XiBM$4Pv$jU5>b6A%nobm@7lW zm~L5t?L^SxwBVfhXk@Um2=T#7aUz6nZG*c+!M%+0Gp%%(K9`ri?no5{iO?@}(+6Qa z7M>M;_pK&k)*vMDYfD?o!?`a%zOtxDFWfHTPi5JzP59EsZ) zF;YO{lVYRZ^O_!S*iBjB0Y^t2=QpjO@PQf0K!bnKs1 z%30+#O17SUCB66w#RtN7LkUav`s_Rd5=AuMrQm*A(95q_ZI7n@+y>ULjy2Vc1HPK& zi|_Zk;B7*zY=+CJGnyBD`yh9Rcb_2xB?~&CPVR)=GWHZ@#zmR+LeMVdE;@0({@o(KB&4Nt{~*V zCB2?J*tMn+n?+-1_aWB$9P-kW*bC1K{(V5NM5F>TVhL69YlANi$s+qh}k@fXrL0r7=A16UbW{edY?Dn=e`r3-a~j1de-;f>xJp)D~S=X z8_1Qk*8^3EvM0zc`(`anPN*m=<=BsQX@*S zZ$H{6enK2in_+#vu3NHqp!^!s9S2IklomSr_YVEj^%?uVi*Ft7`5{HH+B%?&%cP>`fwNt{cDtmQ_W=(!>k#{nSAX(L_@~7qY zE=7H7`JIyp$`J_y*a*tuOX?_s@=t#BzfcE)fuQ`uSv#T*1d`N$yng@7xc^^F0;-h5 z!vn5nP*8%G4-kPMoB#me<>vew#N<#Ohzm9>aVTi?=dI{)_5MEg|MTMly;Q+6Kh)QO z7RDaG6dkW;Jz~uXVmCn30>L+^@&jK;7}we3iVH{Ve|;E1`2kez1eW>nFb3A(xxsCe z7lcA52G0XNw!c5D$L9{M?c;{_ln25FpvVn|&<6l?&anSAdZ2^?N*rOdXNN*nr@Q~x z97FhH2$lhW!zVmESkAKdxFw3Nubu%l*3>*%2P>$|q%NtoB z=}_cQ;p(t%QZaU<6KyzLRor^MO@hHq2E_@5?)*7K3B6nSOe#}`Q;U5MQ4p3 z;aB=wYa+ZNa5Z)j?^uX9*22)POXB1fQX7ahwyx}E@>iwuX}`?hk5rRXy2G6yx#@KN zOC}Ax!0^lboC`I%aWzRyv72-^`hG}CH#!YF80yQ$Y5%xW;pXC^koejk`C@D?^A{vW zix$L4NhY)}J){p4ycb6A7$K;0j91@Kvk!dgSB>y}uEleNs8j`eTN`iJXtqU58$saR zn*bg-=GdDS4V#hY=r8$<s3j3o)2aEI>-0W)z}LG0(VKK% z?!=YU9$8#e!o;gC_+C876>9%1la zi0@4tGCKN%1Z}+jD>qW#s_x&>9Q)3YfL*~;Uo_|~XdwG>Mh+*A5$orkG!8Ozhfj@C zX65}ch77~hc$qL8dTQICfV9fp0UGom670OjE<0;Ms*c{#Cw}6%onur83U}SFhH5Qo z*;69DU{u+|MM`EZs{pOr?iToey)&#W?2wDR7=em*K2NlrH?DS${v3jmBEiQdi#VEd zvn(`vF&JJ+WdquXqP@>*ROkTM84*>aT%QR&e?rdQ{f zVHvwOxe-Y7*+EXK(#GhC@t5gJTnXQHS{Vd(!YVeIudi5Tt?M!A?&fc*Ns}sn@4mB? zG|%fbOVKf8(((v{OMjZ?ZsUVjqymy8qVT+jE{>tZK;5a2vm%UL-N&-_gDka3QCH>Pqld#Db3z zWo?xN@yB@8VQoTf(&AXJVl|)l%xY$6tDDg^cM{_I+tm-R&N46o_V5w7MnQb z=$jwy)%y>u`v|a+Vtn;|+7m=N^dh}t){7oy_g0MV_}rfstGzZgDIGJ6(tqiKCg(%z z<<7ZUg8tS%J_=91NPdrCl%=H^K!1|2)ued_xt(% z@cXSs}-s?z&F|GUM5 z@ip5E#233U=Sr$mb8kXh;w4;3Yl} zc*g9ZUgvK6WxX5jlhaK>9A06SE53TgWjERR%jg%b&2R5TdTT#dCPJosRAzyBoD=md z)h@F=jkPnjcDU64s{LTeK_(NcL!bxQM$yAJ{9M}wHn!VM6+w0@ITpF?a9OoEs|j+$ z!F$K4OW#at%tUx6bL2cLs~st-sUI(l87$!n61nr#JqIC_VuTw4#aWZ!yj z-1m57@B7;8era)^kcEp03`Z`v1zm%d6a(=SOIEHrn|bg}4VJ#(yxfNdI;VXAvY5*+Hk(kk&UcmM`oNo3KEr*GAvorwJ#p`?-q2-khN4AE1`qc zUg#93m9C`!xOOn4UWYr?8=ABgylxNUX(_*0G8HzO>HKwhZD9ST#pJVF1_?e=4lL$+ zUA)mLbT$gai1D$t!rB+!&{;0PM5ILsn#60rhmXu}9>ZRk;Y)k#yUa`n3;UITR2oya zPph=5$WHUX(1PmW=za#TEP47w-sM#Ieg$6Gw;ye|md7Zv<y5vgbxuXh)IYd?Bq#+#1`E;}eVA ztsuk}%;u|31*3uVc_Q&^@Vm$T*oGK)`R6NFYw52_N;oM6*2k{+s*6kc^SN+4jofa4 z*SPNZxdG#996h@)E_YX2qg+Fruxq{?>sUJM%oFXQY5!W4^=Fph!O~npp$fJ+_WaiK z41RdG_4{Z)50!k%sM??~nv7xRltt#+zg};iz55B#PFBL+sIFPyk{5;jXp&4N#C3_*w%oavHFcePSwa~ zzuKD7r<5W$0xAWL%a`}3kGB@4A9i&`LbV_dLoirpzatcK*bxjl-Zp7-&BiFA z2F9M|iO-ruDD+5|rj#>BAdq*g0DHBW^>pUrr zIAVjg$m+VJXl{(!;Ziw*iQU_z^BC%yhDcp3Llie}39*1uM(ARW@3uAgh;n9t(UZF$aXubND;ZoU3w`weX)0jBM+$o*02 zoA0Sw$f6wdpSDd0XQ--68q26YOMsK0evDF2G^h5tncw&+GphokK`+${Aey&TD+JjYzatYq}s^^BnOe+lo zt2qTf_V_A_9n$<^Wk^>V!WcnvXiif0r57p#c(_fGl0A%(VFn+3@u%PC=P6#=#;-z8 z$Zd@tN2R<-^hLY+Nu%G+f}fu%b<1ZLP3?ysmK;$u^qVcN_7uCeYFBPyU8F|L=)G`h zsO=GOxyn;sp@?d351PnD91Lp})ZN$JL1GR!$`qF?EO+J}Md_)?4fA<|Kr}{n(e{dN zf!TKlsa=A@YwyU87S3ZUrz~-xV=E`ujnml5i4V{Jk)3j4=K@$Me~Ey>pAh5${PT$> z74j$KP6zq(gx5j^SQ01yd<*p-@h{Lb{B-a8mskuZXq*jvb_5^_4A8X*Ko{Uz4(eP$ zBL-=rE&z0Je}ctG$nZerV4SK>{mZFA%y_s#?o+Exuor;N7!<47|7d;^GF(s} z-6>V_znmHb-{65rApf2kKq~-d0NNq_o2mVd_;a!_e;{oCa(aMz1gb|ICp-oY0Z5IC z4@f4#7X}P3fek1J|DU|q-%jpl4C-G_j*}0f$N^sj7r-L9A#z17@FDQ=Le?KdqXVk2 ze=@zlmYq2CWp_%2_;2S2SRfpr9u6dyz@rM(<-r#VDe41i7sOkgU*L~c-Cxs_fIhvm z9$gR}CuA35yQ!^1^#jD>`z3SgtU4EZ_^+5#=cq?N4-N=F5L@owF{jQNgh3tsmu3Wj zR`b(l3V}a=9v%Xo3Gjo0Jug_OJfOYbc@*ueKiH{wPA;%za6oq3Uzri`0!a2W{`vFx zKb}1=SOY*d1qJ*)5n})NEYD7#i<=$DV?h`X(8q$>GL)L~DT}VN@jr&=0bD|${(?6A z&mZ2|@P8ZyfWl1xoStWabKY~v`OiNdNYOzxA3Sp&h(Zo({5kye=Xh|;0e^0QxSLt5LGxhmZ41k zEN~Ak9I^!Xxd9LK+_OJNL-{$J6Zm=yK&&pf022i8kD$e$t(p8B4|aQq_!8395Kub! z0Eg||_~(%GpW}Zl9YECt=ra^24BkK5bRgXUfz|VQ77Z|={>^8{!3#My zcT0yGq==wzz;EM!_u2nFeaP_yT;8F)`rj>`zr#-q&Y>}&&bEO)_3R-PD}fUd5X21v z!UH?I^7u}vpU-Vtpphe}iSklGxVFHI14{VsmJSyro8Sg4r(cKvoV}kNof}Z^Ko?4Z z--Q2e4y+T-{&rA({b}L-Q?&U*8qI0Z?LTe>e^kNYJE3R(IIDhe zYJivNpH^@@!)h=a*wKA=g#21u0)xmI6mMWtahOSVm-_ndUkVyEx%;58J6npXPLbP2tD8`e&W|RNVW+cmDHo{UNmG1MBDyt9JRsRuG}}{Re*6$go$9Is$RO zwRw)rM(P(@IG7VM`pDl+p)1JGqwuF#vVCyWVeemLY!!vicqsPn*|fb(XH@KEtOpJ; z{?uw}`M0lKe1N~7o98~4?;?6I{mhtx4lfms&F?LoGoBn>^$^yLgq(1#@-F>q1X}EO zw5T`AU9(DsU}i)MY&X9b7_5Fvgt!RK)* z)TMfV+K)vf>{WSWrBgNeh=5a@l&m4>IpTu5mHS5yZOU&nltz=-rdZ|boL^K4Jyll& zyD#{4KMyEiNZfm8EK&D1q<|M!;R?nD6+L$tS|>@D2UAE(NFl}8F9R&CMlg{q$H#Cs zjsm_r`P7frT$*xL*HoO~|BQ1H6dC&x45n%)C#%zqw5@f=MR1i>%|3@Ggi6IfVG6vF zqL0rcR3(Z)9gEvV=4`!Ln@wPC%eC=#&NrGV>GePs@s#;mVlQ%7CPSdcazNP%S5L==VE*Jcc$+3sjmb_+^@?6 zGcJ&SE*Q}Cqem%z?s|O$L$VWY>k+G5&6RsY{dCWT!iyeso9xNl-ic?h+P4lMhsDR3 zD*KW-{3-KMoZT|4b!48fz1D@2f}w#XhOSMnTW0=&+c4g|oa5NZaHLPJ^~TMvJjOi4 z2qBeqVtJovBEb_~*@7Jy?WsODF3YZMBUI5twI!LNW>)$_EKH|Jr-g5H*@?z2J+*v7 zWc%YBOde@-Pclq)d;#I7*WR$qVIRI5km-C?giX)HdTc8g+q;}3G~V^5dFq0_t=y5! zRO1VM*4@jN;o^r_cXGYwi{=cK%@Hsc5m4d;!a3Aozfo!>yuYweIS7wIZi?Vr7PeKI zP@<3l=X2#g_v$X~>O)Uwx1e>*ICu);_51RPmE+Hj={WS(Y^6+$xH$9)KD;KWM_;&L z@I|AUr;wK!HoUxV0f_+73O#Pke5(~r__0BCYJnXo`XWEGJ5_rY=Az@^#>ZQS33d#Z zi{&#qi?cNP1t=YPOO~^#{DjeXw)|*r`wADd^U$~0&%`Ar`$jfrg>UZ+&t)K|Ydn~o zQ#sh=F(n&)NfnCWk=Dm+fMHPk%1CTLwX;n8G70h*LkB`!-Ivz%x&l4*nTknlZ@6UE z-iCO}ZaY-5b*~y%i|{Uc2CSeJ6qCD)j~IqbwzJHl&I| zlnqMyW5Q}=h;a8_o8$<#A;VbBBxPVV?97EF3*79mnh{zFw(fGcI)ds|mDw7kKZY~+ znm9Qu2(`&6DTi0S%}&0TW3CrvNr&WkW7>>FLg^ZEL+aCG9Tm7BbkTJ~)Ts+1;bvnRicG1`3eHIw{%`OIMnNTi%2h~IcJh7JaI z9*t@)7FI;R&&#Rcw!@^8jI$_>AVtS__V$10jF33~B30%hYWCtqT`xuPr=~L!T1#!T z%V~>xO3Xg&m{J^fF!}8Sg)eC?#tIS~J;)Imeou=Z#6Y8!b^W0;9d*_Nj@G&|=1W|a zGJK9JvOeMuDl`Pt^igj$qht{yS@)Zg!M|{HV;m|Bk|LHdqPs^Mn||-u5c$hhDP0-qKjrBLOlact7q_OzVbw*=l9?TxB_cZ(1-|E?i zc~(isy4>5O=HLT!{<2@QJmDsO-fTR)5Bs5P9*9YLEFcf-R`My#^u%Cw=xT)w8? zlC@kt_ZsLKZ!x^86qvtphb}1nUfYH1A4M<1EhE^LzqV0L;}2!HbTHT}q!2R*uQm!- z|Jh^d5Lsx*EYU$#QD-e=TOkuER)lD={S3~j`c^-VngWU6LnTQ91zF}b znrVg}ZM*Te!=kDvNH5l=Q>NMU+2Ep<##L~9ZKxBLl+&0uz9xJ2t!ANf?ydNMYw08{g*wW-j~~HKb`#-dDW?BMP;S$w zI5a-p%t{8rdL3`HiB&r4@MOm;22) zrU?jp!8TLC+_siSK)%Hl9Q@sPt_^n0qkYfN6H{h|2#3|u%B#L?3mb!%)-Z0cm39jhuJ#cy!s;bzD+PCcMk&8=S=u`G+(i`>y zYwD~v3G)!e!cG1nedgRX%2(Hq1>TVvu;mG|WDu?0;o&V)HX(ZTh)TBWt5+Y)#i@@; zdQV&@N9N0%M6@>^ioj5|+AodIvqh-fB@ujx^5&Q?i*RD(xI91>*`PgP|8l+#ZZN-M zl7;%i&Hh+2EfjK?%PpFmcIFjJk*~v1oXq5J4PKk9uG-_b%7(8inowIz-_pdythGv5 z%wwv0R@*bm&>4SF{)pn$#oGA_w{<~2?=*Pvm=GFdPu7(c)NP|p3*7?nb(9;BTu=#2^~ z`3V4g2MUjx?^O4-v+=-P63m*1hl&eeasprhK^gydYX@`|Wd*`AAnX5i{25FR>eD;v zxe2Y^Bk;fcgQv#@J{)#FC{Q>k4*fwm1kL5=gaXI%oz;_`nmi{cKY(uo;{FDfFzB#* z{^6Y!l%9&`;)3)d1~}+%;(xdFARj&_Cy=lGCjNJ8@5J{2coG6Q8DcaFwEE{3-`N(q zr{@3nmk)931w3*ni|3Rr!`a36tD+)a|{Eu)BNSkG##D+5a-z_~( zPznGoIziDFu;2lQ|2zvG(kJ@YUoO{4n@lP|ga=;$-~ya~cE4MC5cvi8dBC6+JbNH3 zh4SpribA3Pc*v&54)l%ZhCeF`Jrxf44507^P%{ot!2?AVC_nzJD)dx5q^}ZSX@KG{ zcz3{=9m>x?s|r08&jrTkf$WyQiT~Zc#{mk591tBb2Vh`;S`xI!_qzj|6H+&YGHvh5+;*d{n@LfSVoKkq7Dvzg~JjMh8V`P{4!o?oU~c z{DYGIA)5ZL!PFCh#*eh^2Y?RzH2)M#P15?S$>xF9eE2gJay& z;*}8Lj3O`$=tOhd3RmIK+A?TIlR`0Xetj^s|`34YMv z>RT&X$~~2Jn=2P>@99$Yyw4=Xl(}4CWt=;(-__BjbM=mO!)@! zo9EY?JxTm%ngen~YYm9YwWPJD(~2xE68t zozfy6ONXrGhGo6Zar#paO9a2Xz3K6hEOaGidvjC%Hm^epfydXb>Ka;bS2T`)0YqDI zEeu< zjL8q7FUE}1Jq+Z&4EHZixhH=9=$y-%X6UR{3UAR@yMyJA*$q48y=s@=C8|ZDWsVXh z9Q-MikpDw%-t~nk)Irsd>H;jKLgySS*G8pB2!5MEg7Su0dbp&r?IZ|m_l6lYt{h?kBw zyd7~t27=3xUc#1c_n)?3(aQX+!vCUEAxWD@DUL}($~;+$VccNwcxY#r9AB@3&AZ~` z*Qxl93$a-OdpiAk3kwx2+$n{311Q}NN<>($F|?$o%}Ts`YyFxXiSU!Ge->fwGe-hR zw(r_;-pSt!*}WCkqJkQWnl0NY@oWC-k(w9NMGXJGmLuFGlakO)GxMSi-#dp#; z{Qr1m26_IuEAz>}`?2@_%PTV%_uCBr)KU2x&df3-Ne3VK{=k;Ex$*JWv^2 zKtX%v82jOq{6`Ef&@bZ;!g(Mm5RmYmKZDN-SOH7&$3w}4k+Pg6NsO~Arwt^E|4;F13Ca`&;aESKPzB`I(shQ2E)k#Eq6XEV1*tIl2~p5 zXg8lzjqd+RA%4mY&Z;Q?al!tx66~qQr9ZL;h-~){ORz6)+JF))`tgJTP6|S-1Y5lR zp*tyR$t_U4a*|-HN6eE*<(Hcoc+E9hp|`&z{n&|B$-@=F-y>W>jaE_)DQfI--z78*yxyDhSXamaP&>A z%zzJaS?B1$Na?+1r)~?~)vzz+7kkV?Yrkl=a<#`>_r3WBUlYKn7>#cc7oJrNcioxf z$*9M&{kt6ENsa3|L;KX2%}=kFN{Sgfp`i?v(ffQm(6${cXbf?mc2KI;)wL$a)7p*= z5f}>pG{E&mZpQ3Y`o|*7SL%2bueh|(_w+|ft>94%ibFplQ7{pIDH;`HpAd)~{ycu; zQ|}L^h{gN%ls^v$0tNK^krrYyCd!*z%e1bd?P6{)vvAP|O2Y>p0Ag z2&*mU5{vC`mCLayIMs9$kIKsS90pilx=Xj%vLY7wEA2jMoCu<1rH_dIG3_E4kM_hPv%;SLpbS0m&$PJF8(_Q_yA6FY+tC-ur;Vd#U}ND{45OA`lDA zIYr|)HANh!-o}_ANXbN9Z-KK9TFrlc#crhP(XgW}$0Xj)9-3@0!vz8n!i3BG*s!L? zoy{VxDn4RF{dB6^SOWZx-y<8%uwu-V4*TrYiY_KcI(k=+J;yVnV}Pr^Kjc{A))bUC zI;V%>JFZ%!#EzH&gQAwtD7>1RR3+R{Zmc&m-EYw*`jnkrkebzcZtnUd>|yT{TOoTs zrwgfMc|j74Sd~PjxZ-3)!ZTD^S)UJaNxX95y_QH*xIXUV3ocw&QlOd^g)7;vUkwY^ zIPkO(W=)!m<(;Kc(K+zD7fZw(|3PRDu5}W0xv0io)hA?1iOTk7DXt~ItaO#fU!MP# zp}`|B&##)M^0;HX3IgybI+5vA2;S@wPwpLD!-QwNNZ-SRHnd{CRidC^ew{2XioJ%U z8_{Dv;;M7MoCc2zE`6F3oHV7_HQn__8cHQ>%Dc4I4a7#NU#^&!aDQdY+mzqWh~puB zTDq5iK}Jh11Yte%owST4jxY0r8DwH6C+wuB1|nkJaZKiG`<`L#%<~il6qhN`A7vM& zC3xCu(CLP=DoR-jZ{~3L1&h z{Du!qG|tBbBP{2_mo{(pY)jE5MPb;Ahug>%@?_uB=-Jo5?i0aV)E;*@DB@p;CgOWq zddtyl_GnRu#1;KYNkNpAGPf9fVY01BE`0ij0*XKI+<=feWZq;G0T1M|#m%3Yi zljrIFzIMY8n_F9#1$kDOf$UnW=AhHtsOIs)dn(h?4;gFeJX*-d)o}#9Q;>W%+^jwt z9H|Lc>SK)U+;`%y-KJzVpiB$Lg6VWgh6}5Xq^Q4ChgqW`NmIM(pKP3p>y25NWeos6_toFgrXqLypIi#Q zygiI7&Wxm(ve_L>jo=iHF#7J8*s3x&fE_z|+j%8^<@KQVSY?>)F8Af_A)ot<_qT1` zcg->n>gc@SUOX~f>q<~Eb)cR7UdgepdRu}RnXYd>1@%aMuAk~VUPb`RF_Myb`PBJ@ z5Q+!MSu)jMov}|PgeNWu|0W^iJE8Te{iL|zJ8A6wBl&~CYyYuGIhEl2h9G}7y@DG4 z%c8_tfad3D2qeh|acB8;QQ{Qk?^lzD6eWPAAQW8ugqHiO-wv8jL+~M>(D@ZXp6`@z z!!L)2SPp_FE$6elv)Tlxj~@77LRyePLD$Zz1E7WjyEUNf0fLWn=+aqrz^QPE6EH|A zfkh=y1_?khDg>^XXY%TwUmXP2<>v$$DKHTRDg$Wf)LC}_so{Tcq#>CtF#Ut_tkY3=R8 zKtc1@U4!bsH`W=ysR%9`*fmR9YZ~uun$~n_Rq)^QT6n{BWaeNY@al?MS!i9iZjYI@ z#+z+1yDnGsvFJ9{Kq|WjwlGa3hP? zlhnBTD|HaN9(?BD9AeDu-Z(Z4=E|cRFn>1TTQ}QU(Ag&0NQ-iDyX)!ql{SO{qZ^uK zLpOp)Kj%(;E^=kesi!slx|HpnkN0X8hTtL@8bWhmgPz));T6K@UiJ!Ivnxe`WkUt7 z75SA$H|U*JLt$L#W4syo?ta>RJ~bDcf^T1oiaaMJzlHn|IkTC)1jS9^H9hAF?b1}& zRG6LKz%&(O8m?p0E;n3Vs8_zrP`;Zb^Wrvs&P@ruJ3Z2PPFOw0(YH}7wBm24MTeOZ zW+TK*Gu|XCl8DhTH{Y!@T2@SkZNGF)jd&e@IXF)z#zpJGHzf|`%l1MvH{PefB&TKH zy05CIithNbf4W0mMq)Q+%`Uk?hbS}}PVhP^;cktG z&+egaDb57u5a_aLe zCT{RI_=S2ashA^gE#4V_VEEEHDPOPk?!!qO*^f=18eXkQv$ZZuV5(j1$lBX>>hYL? zZ;?vQl?i8+lKfh<<%#Eb-6)A0wP!9$Y`n49!iT*2Lvta`6yDYhSxfxE+~UqrWm(lX z>A?>rLUPMU38sB4@ff?3QONkngkQ;m8J$oJGh3UmYUw5WqKStRL%3S_8DzNX_kBX+~zMq|ag4C>6KAKt1<%IJA=fA@K}dEEUFXO<5OH(e~%@T{+swhj6%q1?v# zcu(!1hrBvqwYbtUjkw)jw`61d6+*{h39@eL_u@jmJ0o$I4>#W`5*{S+#YUHP@@d;> zJ*cz~D9vL4W(hVxSG zgHmpl_*(77XcAWq1%1*a`&|S$e{|{d`P?bxA9R54FB$Zyd=6+@{~bC0M?UuxC+0-G zbA}UhO40Lg0X~STni~`+f#)sQ(!r+81!+SJ(LF)LXQ2B3=k48ip(A`}w< z%M=ut?VULep@s88+*cv0uXD%QIbzJe3_qI(K??_cbAkRGoKojUKZ|Zc4F^8+{G8B| zxRVw0BZK|tJpAcw0|yZAmD(9>6d8qCwp;c6 zqDpPTJWH%VpB*g2*o;TqNzfuLB2sg(fDFGZ=DC=K?NnH$jsu1Ht$AZMra=hJCeIq3FZR9yTxJ<(Pc?#>ITWoEmsrS zY`xWQMT}^=L~Qsj!ml;;7H#RCm@$pX<*nVg{y`)1di@ij5AmxmGb{DM)N90Den`pT z@IssfH5oBw`%MCve!lzA!E+ujB%snojv?+$u6|` z`AVaNh0EY=QQADMUEM*2o9Yhq5)-2qllU<;7B*a$xMo-s)A}7FTd(SBykUw->3SRQ z`aIcx3nt6R=Uq@5ixIP8Zz~z6{gu#RJxr9SPiQsabBP!<9H!qM+%FKG#Z`M6K3IyS z_jE)VlhUE77yoeKdR3?6h19`F1edrB_KVs4j7xfVSl2Turr=f3FTB%3ZpcG*cs>@( zRxTds710-Xlb!Ccrg+k|^^yQQI7px`DU{*p>z^?UgJJXevif1Fc;@XlUcmK=)8aVU zgkwW*k~8RmG=G zSYatOR8F066NsDK+2|`z+=5I+x~mHgaW{bX3<5lr=VVPo3}Rfo@YBr$wC(Te!cHDUtHcVQMVA=ylt)HUB#KUGl>Q zJW?ht!m8dSIF>6&uj2CtG|P1x<}T6e%dZgAx;{&y-(hneu3(+D(LS;$8WF#Ng|{ac zgf0-w>0J8JCy|k0G3KQwwK+?v5p{}1Hu9_egiA7?VEp9S6lIANzNJl9^C2Qq7%uY(QvIT z3{N$-piS@lw1Z2C&&3(}w%FhH;{LnXO!=^hr}0;JGgSzjx~&98^ZjGnDhi>j?sxC|_GtZ~7u)_yw#ck^Ik^Yn4k zUR{BeQ1^N@v3e=J?)e&Rbb^@E0g1$=s=!oOhAeT!luv{BkxQl$8r)flYgY{ehB~Ga z8m`nY!tUJr5@q->XvlWA|I4PW0p(g0a?iKQuIOZs#Mr(|SIkz5EftbFn=jXu6inhR z4>gF!Iab6mggsDh2_m(1<}q1$aj?HsmkP7%_WkoJ7CgbtE1nX@NOfYUeku+Q@A#9l zJUAYDG|CDsN?PW97GiD?WLupFQqcR*VFH+@|!w;WQ zV{%dMt%WM(#9#>%rBn(Vy=oKitr8J^k}37H%$H0Yu@;duEa5oAv4hfm&EhHUT{~SE z_j2NE{(AUs1-$`&t4Y`-@;pj!-RG{{?V0;Faj}}1+fT^1^D85Zh>C*HJejh83fGq6 z5=|>NkJxM(a_SZPl5fc{C2=%DOKFXXvVC1Ub+6j_S+pjD4xirJXe~E8DuXXsP0e^3 zT9^Fwrl?|vFJa07KY=T}XPrjhc7@^bTAcp0?lY9xq7CVr=zIxcl8?#P>ue+%uerpN z>~bO6^>(e8PFia?p~92gsmi1tdhx!}7*9^0FWn=TxRBJGoA&#rDVYUEjRg6syHH~B z*8?rR*bmC4zL^7MW)s5)#bNz-q{+=g-e#dPq}|1Fcdbw_TzPe6qXCwTJDx9TR4z8D7`0zL0=% z;<_&b*V|MEzsapAiLO$9(*!q%H{o+6V>hqN&IUiaf5C6dS#z)6Ip?q>r#5`fdWm$B z`!*9HBkk>HGt=J)DUzAj%LtRNn>uXxF+^`UkW`u$QU`MGrZVL%s}|6pzQ*~`{yG!R zhgounFC_H zPpX;6D9KHa82cGnlgSR{-z4_#UMtTXy>>pMKGka-dPaScgPdlWpR||%Ul7uNGHQNM zn1z(g`A^yagFpY1G5yRs|LgzrBMx=3e1Y`_AfNJa|Ize*;i~l4!~7qo1~Otm z*#&}I05$<~1Yi)KFcHE3fKc-IfZxrZa1S8e%AmK!hVWWXGw4nh;hz)s&!XE1W;i}hi^b$gk~NC!F+!`{7DlQ zPCyU+Wjy3B|8@Kilo8@R!v&2w3)(CFCLH2E0sNW3@W1NY#sAy*zlR6Q3|ikV2#@>M zlZRMvfR7rOZT+fm7uTuH4g%5s{P2H_&I1@Xz#Z#6Ld$W|iT=k&bv7LG;{~_@Ig|(N zGMtdk=Vvda{J)L=F+8BG0^%v4j-L-di>?1W`x65azzGM~GAl0!6v{QERPyVG2Po#C zpa2%fZ{mNq@F9eCP)!j4y|W;_4mqLx`cqyGXP+Kem*ABHwEs8pzgzi#KRsYM#m)}y z>F1u_DdO$f;r|W?q+vc_o(?7acT4X_II#K$-ZP;7bbj_{UF}$sa); zkc0Z4b^3#R1ZnW|hvcIWEgL&f4>(RXFfxRlG31q3TOH0Su?oO9=io-=u zTME`&GJUjFqgP;JGP3m0^f{YIXBiPS0dBng@zw79k0=@Ij0hQb%_EA~sf^H@%@uqC z?*?o=U9wPE*xj*nH89&Lw%Z+;@648ivu&Q<2$C9o)tl!@L)3EFFR zi`6Gv2u$+|S#G4juUF=ZYedQBLnLLy32AstIwd z#Yk1Gm&~0r6~<4t#A72Go5?aVI-IXyxp3g)Hz1Ggt6}9wmJw96Y}N1{dmQ?vMRb|I zFCay*xE)W*;N#Xy6|!@2WTL8AWN0$}OVX|xuLff<2J@klY!05XvfG~iN51fiRKRB< zKUSo%%x`F;PjK9w+c3aN>5d`W|K77N*s8^g5`g-01pV3O%euZI5v&pS>h*iQhOfz` z8J@KJ{0yB}LbI#uUe}BU2A*>bv;ms~rTjAT-=$ zMro-H>a>>Cg;RQaS#?G_cfDXk*l59m$2_RX9KF`u=7$Tiw zBrbC9eBXI@p0#ALs!Z)I{~dj+`J*Y3fRB2#haE^X1ohWbyfu?HSm?wOuP)Jk;LmKN z#J+!DQ}(d{@=|YM@LaqE?~F4NUN+3T z&elUt`-D8;F6YOKoOHDF&3PK7*K6Oxzg}eBsK>RrJh<5#qBZrUpuo%EO&WaXm?njN zbj3z3^Ro6$H5K**b>J5+FG`$&15@@`UNwght*3~^wtU7Xmf&UxE~217D7Uge5NCXd z4=tTgNLp0Hgr(xnfPVyqj$=)BL8@7fS>x7&aBDFI&cMAT>@poYQDkwsNO%fCB<%j_ znh!7TMveA5FEl67+1L)3_V2^y6f`?u`HE-+&47I->UGdIY#Wses%|)#puZHV@W6;!u$qiTbV82AjP5F(ZMmx%5GTh5|UtK{e z%G)AXSqY7F+FDQD zwKn)3fRJ&4mJXgUe0cZ2?W5SvX1Sz7?o-x<=r7ueDMk!c@JCO8(*9V1#!f`fJJvDhwF5s01YCqf%&pcpO zcRtrUtBXAq{v%lfbA&vzs9CExC7`W2n%=C`t` zhdX+=s}%dJ(dlW!RVX~RkM>tO4UA_DcLVYE0=XIzy`%yio?mTs_e!$rt|7y|^G+r( zE`Vle%ly`JcHaw&0=9zhi-)IL(fHwCP&#xyyRu!uj_fU+sJ(yJ=>|TvvexKp`A7Cn z{##eao0q8Z+&6E8Fj2HxT`X*0&lthpl(Lx=ZG6D_+T=nUa4= z;FqXGZ6*^}nSGrpxKe-_c8TD1N>2KSh8hlS@QdyBH+bTo6UjA{sIfgJ+*0h+U}Zwr z=ivk5`X8_}5-Kcm^b@Gv3cDqa#S$0rig58JtT1X!unkWS_1lie(#qeCF|tdd^Bq!O z@bf)rm12sZT-fYzXVt(e+1qK0OT2!Yv!A;Ey+5AJQfaULgEwPV2{J1M{+{(DJ52bb zK1R7@fs*XwNC`UC-`+2ls&tUQLLOBN>MOjP9H_KWdu+0BLsz)b6NU$tlL;-DUH;DU zD|~Hw#k%r<^_|j=CPJGCx%nkkwrfw@oE%=uEWCaYV;6??#YLPakF-jMp(IXIbK5D0 zX{vv$=%YqJVdj@FgqcM7DXqDt~%PaGizXz>Ws~zO&)KIwe5Y;@^x8k^b{S_NZSH zP5IBN$e|AZOE3*MEBt2oA3H5D%m>o|WQenua)?Rnub&-okq2g=;4TlY)WAs|%=BzL zKiE@$9sl?6;Jo1CgF^KL>f%2L=Y|;CbAZKjc62~Q{7v}ZvxhWL6o8zkXX62D<2Ug? zW)JBx48+{$&l$+E{oj8)2gE@HV(NQ#bdGZ;{Lc%I1Hhl`5HtwV*%%nqLpfx@1O0>H zfd_^F1a3Y%JaBLSDg2*P^4FNgX&=*{2_8S4tbcZ7o|5nX=g8y(KmSjU%#hf(p$Y8R z{;T&;H8d?90trd)hzi?iRmF_FeED*0go5l2E`B|}VD9qhAUs(VZ-SUWBf;~B-?=D0 zOi`6wBQxf>jo(LgiI|#&-aDJn=v8r-2##sw_qn&S;JXAI0fXYM)-B zthe;vUsv1d4$ppWw^W?5zZd5Jy@gP}Jcf*Zvht$RQ_I11ox%q;B3CH*zSP`NP>sWO z7@c}nITMbM^=f1xZ)C+SbT9SK_JkP>M?Xn3HevdCE!C{(Fhu^{` zYL%57xbhzuRdt0;)=fMlZce%yUqtM=_HtHd(P)F~$vY&eWy)HTw6dzI-*qznyCSAd zaiQGLF5a2LG$jZb7ica{YaE&`o@s2Ho}Hu^{x%*xeB51@z^A*5vgMAnnlgc^WU$;? zXuV4qgi2?2{$xGnl>z-^J^7wapR6Ya9skFZ^{h(<|H)L&9*w_haR70^IK4qZ3kQl` zu)jfJlLPaQ--Q3YyMqp)prQ%IW*^eo;}3=hM)Ul@nCblfc*^1ApZ)Qtz3$8{;-~%b z4|lPFq2LWpS@WWq$c+DSozd zz!bI1N}U1wlzB+QvWJnl$mHZ5I586ZYZ=3chWM%-jlA_A>UH?9`HX1fVT7u*&R@(J z%t8A;|MhWPJchOZv$<qth+nt84_!aL^@wP6 zaA?2(e$iB&;=|J#%HuCIEt6OIuo1c&ckO+3<#4F`Sa7J*B?AL-MW3-F5>p{IBp{20 zfABF;Hp6y#$I`lsLhay>uGUE7G0*#oXgHt`H7nmfy&(iunwLG88ud6`4;}{Ig0@BI zLC79wY}BAOzM0)v3i-7cQ?&B(${(lSlpSt5GNt6*GM|>Of5aYEk;wY#@KsjK5XK=b z`b%rJa%ObH!k6p zyfTvOD&|(Wp}LTZ$N4f{d{R~8!iPuUW|4Yp+RR*pr0BT81AVe-r5T~qh&>lSNJN?h zZzhM@M>yikyuENW=FvBiQRVeQ+>j#fi7TJG=n6@iieu6Qik)f>)|jqbeuZN7u-mW8 zQS$qBlg4Lu*~8H->l5+9ZI5m1pYqFcmMmp<3UTMzSx?nG>!+Du9h{kPnI%%)y!P^t zF>0LsUVYZx&=Ju$7}rNcOE8Q}yl;}ex4xilLsg~8G0obv`MJtvaG$BX|K6U+{rxB{ zhT{?9kg<(!XQk8`;mfX(;`^!Ui`Yy^DtF=9ymHg^`Rtb}E)+g={N$FjgLwQx(-u8u z!f`x7icXb@ZN)#mecG)%JCpg_5HV%}o8Ib(GaKm@B4)Jb{>Pr_kxZUDN2!9g{qfAp zT7#rKNY*(Sc&`0Bvu+O8)|2KcN13@E9cO>f7jT5XIJ#^rbU5RN_a&tAf#XYCo9Lj` zgk3#~>fwQu@!%v_CedzFU3E$G_Y?Ou)!h!!Uc@KbLfHp@MnrzG4?@1EGyCAbWj^!& zRmAy8$;N-y?}i`LCeL3He!UN##i5{uLrS*5|;NT{`Wq}18Tn@SwEkq z@}CmRL!cn2!vn@OFQl)^**pFzdQ&eeb?4C>f z=?n*+lglet%7gJ4MPxXLrtnoI-yzl~8ktnii<;0|Kf+{Yw?t9P&9*AvT%qZ~zd%Ih z*mP9dM@=-3zVLYI;nK5q6YRZBMS~{vZ3U`_`61;u{k;zzpKnD>1e*nw-~9IQ&GW0V z2bFvh_@Wq}HZg0{LWMIl#E^-6BZUbsA^BcPtcok><4>gse9AVwP0d^|PtB~vg*xCB zdPz&eI1r)F0X0s#&we==hTpelC0hNW$)PPhl}B5>PHYT%)mo-3OGLXd#R~y{T$mtM zV?SmF0ro9ETxVFvK%GbTP(Qid8_>cbc+i-QuQKUAN9IP zifwnHcf@OpmnvP8(~6lzRtu@+mVmOhnwHuHA-lef+Bc>#7I-^qhuiT-D8eFldl(;|keqiy9fwfux*H`+|NkcS!5lgL~8cX9h zZTnl%KSb=63OK-9wJjS79a;}=?va+(Xlf5Hkj}RpiLI{=YGLk&k zxBISN_;S0S`+52=ukZO>>s;qL*SXGlznhg+KI=3vOsq0ZR3g&Uns7_2-!9@v%ny&& zc!jiGxo0e%CO5%jZ!B87+q&R%hb@$&w-b(Wp`z-%6|$R88@uG#9kPrxa$Ei%n7u!r zh8;Jl!0-8IZ^JgJzqZ$5llmJ#M#a+NhUsNTFIoerr^XLRZvc!MKP@Pm0Ic`i+~8qC z-PFa>!HpJ%Nj-{wBKWH-XLT*PkKNq=7Kak00oXYn5Oo282f)LA%&0*tFaH@h)F%Ed z|J$g6ATG#4gMr-wWrqJp`~<7^mpgdKQ9PS(_^Yhq_p8irs|JR2R;yNX<(lI-7tzf{ zU5l@#TzsX?ac*kLIqCT~inO=5?6oKea3LW{LZ;XU{;Fv&tI5JxRpd=v28G0))z@;m zWd5XOHVM>{rou&qbG?&(oiA|Ua(5|eL2KQ`p5^SR7bv8<9j*v?PW|a)oS{2NPTAem ztu59)o>uGIuPmBK^wZ+aNqGcQ;5LOXwvSvQUKor#cRqlDl+|#4?qOAQ&?h?qAz<5Z z=jL!cS?B+Cn=_0<~|325HvgXrWFYu2k8|2*8OkyDJmdA}iqB<5_-_U9q^Xx#FQK|L@#ZqeY2ogW`9$5T7O`r~4`jGEr1Fl8Og8Ol z!7Q!;+qo|@C=D3r8L?eTVv7s7Tuo}0bO<@q>%sjuQ*c~_qEbu`b9 z@34BM#$DGR-Rja@wC6N!cD0;+rTJW?0$0A$w&wq*9X&abu!1kx4Ygeek_N%IZ~cQH-wdGNx|7D8Qo-Yie zRn9cIifR;F_QM9rcU~kmPcDQArf;_}xl-kudi%_yUH!aloA`s6m9+i*$kv_Ex4I~>Gy@U{fn*Vibm<}b3bVqe@7q{oVbO2q> z#%^CE`3IQ-p7WLTs8-DMgNP9?R}hvAa#d9D6GI(0?0w_Jn|s{_E~BqpwUeTX)^|-7 zd%hCj_tt)Ly!O7!oMf0@p+SxZ=GO;GgIvs%lN z#4#6OEurzm2Zl&iW-_ssV*^w-s(2@d?zp9^(%T`YjVGR04ivlDgrbGy!9&FXx3m{M zuv@c3i=9uCE5wwEg#V%qr)9V!g~B6~U$uMSQh~)+jG?9B^>SA)8@&`n%J9ehjRu_% zu5uL%Td7q!N4##4jUO_`-ArGwCDw0NnwV0q%?{>$Ip4tC6&v#U=irRYqQwsHle=hv zBwY=Je%VCinlDs&avA#Y#)y*eG+*2%B4cXv4!<8(b>p@AQ$#zPAJL)y)$jZS!-v8z z1dHBu?Vr0BK-j||u(TGBhfVjMtfNP9m?|k{HTMc0LYNGOU^3%n0@5%q&9FCibR^~6 z)x1=BGZhN1=xgT%lDsVuu00^2vi$Clpon2mXCbwqs1Z}~HHX1E3_jB|^;<5YqlUUK zmz*22DpR}(4u%k1Qv@abNP-?<%Jvpbr zxpSlL%2pwnbg?!2kRnZ((1SgWR59xkN6bD~CR3Mw!eNv)d)gf6h1iNBtoBwhf6OF` z%hhD`Cq{ZT*R;g3SAw6%bjrl+OM1U;u>0Wi!$D+yH2~Sv=e1bR4Tx_VXJT_hczZ2% zu#O~3H>YuWT1I;FGq269$vxZ$G~(B=%fthAzb`j@hOps0*T_Q7vDCbFYjI41c+;fm za&@d($XA&s!*n@6;E8!2OzC(Ui%PI>ZkzX5Zm+@>eeV-398#idlg-Q0jI#27zx%3A zLq+>@*xuZ8`JTIYM&?Lb#I4`rEOTO67p?AcX3Li34Gn}~r4ZKY46)&tZ*0|HRVAGI z(vXAU+J#Viy_8b2)1x8khaATvKb32aMTJ))Uw#dF$d4!7@a$Z5)2E_LcAkhQwa($_ z2XJp}%lM8Pz+YGrzr70B2Jko-jNpF_1_Q(2I|>E^ecJeM4B+1;1Zu%xi37}9kW2yN z77AdDj~Kwe#s3&UC}XD(6qNg@0Tn!o1_QHsXc+^K5O`KOE`A1g@qaXcf4^k?+g;=b z!GyCKz>z=hqL&*k)Lo?VRI>x_qK8b_gBz*i@m}#481%Uae(VW3w?&|_`=-UT>}2@* z`K?x1V#Vy6WC{{t@zCDAE$xJ`P(+P@Nzt%8bB>TVvqi2c^;@Y!0TKqQBvR5o9B;0= zx^QBAOUxWz|7=;1M#d7akwYl_%yq8YE1r#!SG=<)A1ZKn%+MMTy|NMgA+|S6F}QWl zwVyUNI8C=su121SwweH$jnPb&jt~irkrq=*^Mao+7SiP)+_{EVqyp@fk^1@LHl0Wb zX5akGzm6k6XCy6%M=xif^V*!olRLi`Le;kzdY7VD#p0{t zBP;BpemEs`p_-8^TtwBqk?sV`rM7%b<5wgah^3`g=3>1TZieFQ`SMFNiGz-`@}W=<*JxOmDUpaauAec zivb%e^UB-p>;cX~s0$VZcaRh&*!ooKiXrbI>CCBhM$O`+{V6XNwka4%*!wnh&E|Tf zyD?0!umhaH?E?NTx|WY6H|7jvHtAg-dsisGxG`-{F}+(W+#Z7hys@~%mZFG2?R1(oN@>8=)ChJ>r$_Qg! z=Ewfh!khrg0GIs&TFy%f5I^e8Fkz>dIQO;f23+5UpH<}jA6gab4B|2jOIRcBhKKOi zVTQTEzv7^MgWS;&C`}sk1p%WWQ2UWtb{y%0QOB~Z0j<#}M6p$6SNNNh)03jZ*0lj+ zmzUCpV|NRUADLdoRqxw<{EeS9M2#z1?47FI_V(P3Y34O!%oj=_=)OVYn7dzWyAY|w ztpv^R&NFUl=Lud`6H~i-7h|Hi)k z-SJ=c4TkuMxn|tILYBYn`cd&eAwph|-wqr!7;nKx5u0H49uPQy?0Q)FT8GfC{=YbQ z;O6_!h5O(34O**lR{Iut#ojgNS4Mnm?lxULi44N6nek6p^*b&rbz6}yYF<>QYok`a zpmIc6Z?nO;tB>o$wJD6A#kZRic!12V@Nn_f_ zIRc74x=U}G>vm04c}eSPO>KWJnDp@mn$yW`wl|kGiafeOCVFk@4sw|Y?X%a+u^+gJ z1H_0&d+K{@krjHE0`{jl^8J@4E|ay~HBDoFYjc5YJf)p{yv{1D9KHNSq$EWW31kb4 z{6cL!`D&@Vg@hOKGZ7xu{)O3joBAL78_esdZ-(oHCy}G*#FMgb+v502j7pG_vzcgdt)@OM|{Sm&V$4&g2lCmoo^=HRz%S%dRR&Fh~yz+ zyRu3Zo9P`o=N-e@@d+jr0*vsq6^IEFiOp{1X5qPLCRB^eMm?Ppz`nhVMyPpt$eQkE zB!6mw^B!(B?b8aniMt15vQG&f#-iw-b74gKo{V4_Gp}7iO(3iNSqRO) zXEL*%;L{?N-v|?4UDj|y)2p>@992KNg78?+*%Ty3w|WxzZNi&JK6=Ghp&w01r50!| zp^9c6$gDRI7w%b&UFpZnB}Z5w<5U=Bs!*zNu0!YTJE>cd?%H#l(Q}v7gxG3hSN2}( z`P!2XCzE7ny`=mo6cdvf)0sr7(R=3-1CAx#&$YgsS%k25=KB32n}&<6O}JAJ+CvA? zvD5rRKi6h{CDvB)x&z{WpH>f;hst%wUI`Ao^iG%iib2s;G%H%|?kHF?AzYTu$5|~Z zSean!OoB&ZdBgjXl30lqX25da4Z~>q%x6=Z_2#Cbrv6@WfI{u%|8`a z?UC15w(-IASCnP(ml$O%%uFPDST1AnB0d%lpAP@w6G+#HamBkfixD~B!vvntR=7pH zFAcAkdwB3caJCq24X*qW;?Q1Tgc$8RRNgO$kiEcSqt;+z41E(lY9^Gug!6`)FWH$9 zo)O#=h_&{s*?M5M8cO3RPv^18l7~!uW0EKr4psW)fHdWI`c?lH-X}>U+KmCt)^!2C zEc=+3E<`g>FSvP*C)_H9FG${bKOf%Vd`Ha1d#y6Bt*>wImD}fcVWAZ0W$C%B_kVoS z45L$Fw{RxCV7ehMs=4;@lKH5=7g_y-Zj5sp#MZ|7E$(Tk_1C2|;}oX+Gn7}Es@C;y zTw@ZYQ0dx!66L!p=xNPI2ElGtX?#=_t7kK@#We7x_=`Hz-lI9yK|+4ZY*%ZW20zh& z6yKap=O-36U0cIHU8Y=-7#Ei}?KZl5(xW-l()cyzJ#!xKcRa8}jnYIwA|E_>!ur|j z7Uu@L&}VcHJiAzxFI66`0zY_*eWb_W$KQpl%P>mlKKrP2_o2h?XM<`z>4cHyO!!x* z;Dt@x8q@Ud0Wm|*P|Pj7>lBDGF(r&DD8XX3gakX|xWU$gy!!WgMN!{b&Y?}931ogq zP~4It*qdNIaG#j5dP2)Hqp$%X{^=uJhU=xv9*H{qTEF zg@97)b4k~7tNvc65`l9^;QmZg>XXzb0^C!Y=Q>eKo$lqPDVZ9W`>s%?X?hqeaSY3O zLN*sN*h)sOAg{=JI%_|2-l8%7Vj!a<$9HEw2AxD8oo_F1!CXGuRob(uANVI5U+U5jUP8$)TzVufcrJ5m`wqN& zU}lJ|PM-V7#~-(2^nTD>BT<=$VdVezX-_cn$D^&k;5Yv(BmWDu@^9o>!J{acf`EeP z?9RC0Aq3F>Y$wkaqCA97`TIc!6ndW3H0E8=a0Drjz%)we=Q3(J+nZy#soh9aO|5=x zvjI`jnh#8^BxuLF@p}I|xgEj{`4pR8DXi_?m4?-oi2KMRxcav+StL6)oZz_JD~L;d zUS4ILSfqxKHK2^y56?Gx`pR`9&NYX?ZOx<&3;P2vdZGbTMl|SA2J%|IvIDa+{7|6O-+cj7&1rj@CGe% z)IBE|ZjwPuz4>08K(+MG^OspXh}vfCV|A{i3c_6yvk!8}(O$cEKe8O5mwwt4aYH@N zxLFQl=TbdyrF!y5Wx zL`6a_X4JCdQLmR_rmXzV0ffKyd!0jtLu^relUJT)*^9SVa6NCt=Bf$7y??*^QhDf$D&kpB&L;7pKncPd<|W^dC&vuF*i0+-TZoW+2462M98dfXc-yfqUi+d z{FHM%ck$)SJy~qlc5|P#&oA-UXvmY<;E$V&L*TEl&Bd=hbl4~S1v&danu}l1)qneh zzq)dEpYZ704lHp%K*u2j5^RnI2e}Wu^g?~Yzs3Kgfdga#Xw4Oj*yJIgzN7NLeL_HI z25PN9)bnU;lJ{7p*Wb5(_mtFAGI%Nm6q1CQM~ zM43sarIr2VvQDD1z_UOEo@@MgH-r>AhVX!OsmnL#aJhV-i8OvIBH+LoZXpcfly?7gdA@%Ow?9 z=sT^5?pNfY*&`|ISQ6_rq zgVm_>p~dnk3u__^8sm*9mlR5v&=SjSu+J0MlAZJ;;)B46#s_H()x{GU_>&%pP zT+&as3tuuhkjO8#CXGog_q3Y7k4D^{X~pD-rutGvDlBD1v-4A`ERUnAabGZbO2ul< z$X3cqbdzar&p^Cxd%wX5H^0A~CT{KVD1m}`!%WA+Z{t@X6Keik%glCt%8NgTvFk(v zQbLUaCaIEBD}>#}x2o_p*GrvCVZ?7F(qZ?%_Dw9@!^ucLE$H@+Ah&*Jir$aup| zsz*8(Im1N=v1QWZ zm()X^WY|A?!Pu zvek?TR&LYyr^LJ)Tr*%y&=vT%OuQM)QUTt1{Y`siXBl7eXcxk)cG=r8PfZ7tT9a|vv!;IAkxUG#z^ zw!WI^B%+Uw>4T4ESGkN*r`U5n9Zw5YGrt2bDC(X<9A2UZN9?%X-7&Eb{Wq4JS)}@` z(2~V3BR-&yh$S&b*RM8~mWo$k?6%bS0@3d^o04E9a}lH<=$&fPph@SnbiZA;o)ps+ zn&`wQRdCBbvX7P6)g4=VeW;GdPllsVXM|#!GJm5au8cz>%{t}h&G>6-+4lDXY%i7f z;mplmTJlW^|MapZCp_{lJxS&8q-t(gX_+~V&$oy-64ff%YWOuwRmh)xTrFl==c6qL z)uy9W4{TiqWCXtpf8D3oKoQFNx}l0A|C((q&c?Tm`GK{PgnVNe`RVsRU|C?`cZY>=8{lXef zJg1l5-fnJRCF6+i1XT8t&2rz>MSp=eA5j|qnb>Huy@|#c-<~jzs1twSeTTDWpL~SV z<(!c>r5`rFkBA2Z-gAn}6S;bAx@o6PU7o)3>9hUO?`F-U-|Tm*$A%cL8PmJ_H3zU5 z==e=)>ljTJ#zoIMNUdF^l)e`BqPZ+ULyX?(o-d78O(cY9Gq=od?Td~p+tq#Lr@iW3 z7al}+petTjD7vU1Ve>}ZYoGRN#aI`DY3LoX!e$bs$Rx>-pfUu-w>$ z;>FMV%$7Hs=z@!7*3|_X7L0Ve$-4^ObVx$66-HkeQDMBQeIYryM^~nJ{(aEXn*lvV zg~h9Ra4+rs9MENxy+eu`#TJCS_hgA?*mJJV2({e(cvXbhZ2Iv=`d4<$4dT5v84b#! zIgZu-bPPTEMbS!*rCMRTp>Gu*d-ELt5wbhomHa zdd$V=Yfl@A-E~QJRn6{`K9!{kDBWrp(o={W_b)(G2q=5jEEd9b_dFW;(^;|{hPeu! z{>WEvYBe=7N(tf_lfJ@pl`1{!T#c`M{F>-hgoSF^Tu$C)alQoZ2q_fE^)xK^>tfTN zTIP$0sAINiS;^i?J<-ruU;iG5OQ2*P4^dsD8@u8!&s;>y@L&`sws^gyg%2swpQu>gGqbp%BPP~{;N!=*SL}c zg_Vqa>t$LlnX$LLs7#r$DsFoRe(Xfix8_vku3Vp9G;6Ik_<=o~5^hl37he-02j?CF z+QlOB;4apPmox6@Z53F!mkmNmXUb9;jD)#eh}PrlxPE@_MAN#|Muu)uU2Mg5u82!E zbd-^-8zMqxPem$VUnT4Vp}ym74nf{R(fWc&@`y_ZMPakWj!nEgP6sckZwbMKkleup zkqYIlU1%Q5OgU}R?e@3RmUBq?dkU0f`u0WSZlL)A(EL--{3U~KwDjg20y0iP_qk1v z5wal*qRv|irS^P5gL)zBLX8})0*N!N0xxfoXIP0gNd)HQUsWbbzpGr%%+aWi;XaFQ zq`$8pJ~*O(P)+KttRCNa>v1Iz9@h)e5N_m<6iu9w6n$BNR})MWzMwonksMlEDq*ya z${(^zc&`%9zR%`PZ3V__53g&Nec9Wkd@~XClHR?y`ZAkBAYK2wqS^3fd7Y6&c2cBq z8l7x*OXIuR6gr#YHfbuO2Y6I{Yj`#8enjQ{Y|Vml?n$8=EPRs(8+|(#Rt5ENwM|WlSeAfQ z+bZn%faiVJ{HtD%Q}?Y%CJ6dQK4uMnq&jTh%sp@0DP8MFq(|`f3Qx)P;+I$WesZLLP8^;}O@Su7@Jc?P#y&!rdQn0`!CweW)EL3~< zyQH}HC}kla)w5O>uE7*tM*4EEDq|v?10Nj0=O%nHclg=t*~Hht2B-rY;62y??-8lWXf~vb+}d_$ z7^6%tNWUO03@~I@q}{AG=(%9kwmw?%DVWcjJmRqd&L;DKAXdo*`n00tP6MI%XxTUS z>B%C{<@67b4WqhT(tyFfn}XIuC%*7z4M$+Sa(ugro~3BXb2by>NpIu96uPHlwNAS3 z{-R!;yN19w*AdEzia4a$k5!fR_&L3M=GV}^F_Pelx7rw@qb=b;(2E2dR)#xE#6$~T zJC58inA(2mKND_;@{N(ablZnAQb`btUWA9ra!CUH{oLCK8s<;q3To1|K`!ydN}G|2 z*G3=4G{=Wyk$qrR|9svD;WgYx%68Ay`HTil4k-m$~rJN=s9+i!%v;g ze~?xa5RPo6UwxqNq~wM?)Y%>C!fe<=i!AwopM2k7^ftP4Y#xV+x+AVKHBI&2Ii}Ii znhqg&XQEd@}?eLrxx0+hApAiz`?&@fQ#Ucck=+`Ra zS)0+^J{w?Ja_0y6Nti$!pBA#G`f=^wQi#ot@3#6-zszG$a%pA9lUgszB7fhqFotin zB$y>YGW*>PH0Tm9d|X2NtGy zvhmH5`#Hj#o63K5@m&j4fPB^OQ*4^Q?!+&i7cRuEC+fS~Wo1jQf@*fh9Lc^#O-JD& zFNN^1_(nEI^a0`qbphq^%g-So&=Wkvf8TWeAqs}3T>S5z;osLTXut{f9j@aC&`2P#cbpVN=osL}-{OGF1Ii~S1n@ot zK`kP9ELAWJIPUVPcM}wVz%m1D|K2S>uz;BOd zX$gUhfFoBbSl#CXSzdy$LcP$i<^LvsG|>Hb_aRW^R$dU`KDqs4q2|Bk{|p~=Uw|9r zMI2kbQ#byf)#Kxb65<>$f&e5rXBz#9;(uqL9km+(?3e?L9RM$%D1Msi{TVv|+z|jI zNHE5Js^Tps`?YLTQ^$Z2vUX`!jq1b_jvMc%%?I zgy?p3^8Z;{u%zs@~4?SZcro21%=V#J5l}^j>+H4_hshzMt6sY0CF!_)u0-P^b)}`={#OZ@Uk+4It11 zZ=1)4e+b0p z@~3GZd01jc0v&;^`9c}|f(P5A)Q z42K}J7UUH9)0FS`=y?ExI$&&oVfla~be8Tz(G__Ba^Nx3aja$;_Vk@Bf2!pJjHUlV z<335A7hD8S?*E_R1Hw~5uz!wqAJinCA`an#=EDH|NWhv3Ws-+s_>bk~{5||X%|ihG zGarnLI`1)5Q<&nQ-co=U_~u6^AEXPN)_Vv)6u6w97BIX5j~68RAC(t6RL^~M=l=l?_#mSTx`xM=?$iL+KeKnD_-WgY8`xYxAH_`zIZ^y9 z{ssh!Q~;9kV08YpP5V#hA;8_@2YGwP2Y;I8okjjMe}h{P*h&c4Zjh7PKTY-iEIl}{ zAy6jdU$?gA2wE3MhaH81& z2QD;Jb8Pg7k_nGW|LHw|Xal?ku&yeBD9H`IDsY30+2hl9n(qH;9z>P}gkWu*V`;2^n;l?jzy%3_ zAp?v(fFupW=pM@>{ac(H9J7FF01ymG!7jC(q|(6zY@kSI?B>CiLt5>UVR$ zGk|!(MdR1M|4b%cqi-KQQHKwhwJOkX3TmHNNo$sM&IB^NpsH=jl5yO-@ErB(?0DPf z&WeJ`FZtbb%B79vz&FAZN%@v6D? z%y`ZV+M4=%| z2$;4n$|$61$k(t}hz$7b+tj?EpE+^aIG|~7B2~>Zhmt#5FA2lh=(Sh*mbPpT{F=hO$cAl7mZ+CR)EOw;-Rzh3!V1Gnu8yV%u3jv$ z4a>6GD|Bn`e^a4tU$m_R~4D z?lbUMq&wr`iLu z=x>6EQDH+Z)MUjG^wP=1lG|M5p2|5WFS!QfBR$S9VIZlyi!PJl?M3BR%G#g@&nm?c zIgQKUT#r?F*3^!#5SH>p`;(5&l%D;S^P9J>7}rJQJHKrcuaONaxI2KLG*>Stos>Sm z+_r#0%`=ehCwwV-UY$0$f{0g#-FxllcJz}c(o5f-wE9p_IOD$A(p*nS-Ihqu8lU)_ z6?O2~-%;(Yeg6gvk(@`WY}K{UF4-pzarSYBByUh43q*!3t#vN~{oC#rqqdYj8^ul< z%Sf@5Q6kFsLGmS}r}}PswWHO;uHCpzefX(Pq(>A@iBT1HgFc)PyZ}k`O4LACY&#+i zbuYVfgvEEkZ6B_IfZ^*ydQug3dD~I&YUL1{*nF1(l&{O-z3EmAdI4WG6*HLGaoUIb z>izkZE{6wOdJkA%hFl`ilx2UhZkE2faPhkWN3n{$U`owY!S_4YttPNjFTM(W)3)M! zDVr6s)ZZHCuJFq+mT)xcpu5kh(7t@htYtnoBX#~A)lgO5WK-3)cM4idVQEEI^Z@17 z1y-M?GLgp(%nQse%a#YFltm70C0k7PiUr zGP^F%nMN&+td?x-E+*ywg(zmYg{ql=cK0fwsi<~M*5~pZmvH~!&c|aTQT2$Fj+Cye zD~oAxZ5Vp`21D75*gs!6ml^IZrZN_@1R^PUg(7!Y2|M}bPfXOjd|FHFfO!S8rrQa* z{^JL=yalH@Dh;@ot2er*{Cft<1R>BfxIYZY#Uj_V^BRs&cF(d!ZXu!0I zAY+V1w_tjK|0=fCRq9E{IWITbsp+~_%TF(ty4lJLn|okKN*Rb)npq^}4cy&|Lw@^OQ2A|ECHDl%&MmE_7zY@cqkGzmuz z)U53wJ;*aMKbeo5aTlKLmpNgbXS#fWqoI zQ@V3H{2SM6vL2=*qY}RCUFdd;E`~_kRdU-)v7Yi|U$p&S)n^2gGQ}i^akdD9F_nQa ztwP7N4aT%KFz=PV+&0kpz;E?}leqs?zjEiWl1jnBmblh?7fFfCe&lnbgu-!o<;zVt z;zf@z)7U<5HD7+ym7(#Tx_@hg!*B{kk@TU|+Z#bXnM7+(DIz@V_^*;WtG6pXVq@WD z#OQ2&6~7vCNoM1<;Kvf`FIsSg99hvLRxR=TZ>X!MF3Q%CMFrJDo?w~^`F_AmjwF8+ z>vOMkIBM`&bwxhLT&(Kbs|~kqT4IINN>uMsvQTt*^}CL@mZXk7uJsHYI3? zlVER{-+34Clx$OmL&?IpiyuLk<9&vpQslIx+tQ^s>4Q!NNDHP7&e0C`epVQS)?!pf z&s?-~FubbL2jVfgl*9SN3aE`)uKOPBeB78XmmHE*~CORmN3B(L&AC`Rq->gV+u&98?dH`vXw|z9TO)vnj4heUg`aQ_aqT zJ5za=Fu;Ty+iUd!KSP87znrZ61>5x7u^L2F4&vkV=Wc#v3M5!=d{oF|Up&r3q}h8h zzSX=&0Fl;2JWpaz{jrlKYb1hzc)DPLV4ah{B5MeTJ*wqnQ*}fGl^36A(|xagceUTl zns6vc*SCM#8T!@U*Tg=vqR$O$>X9M5Mnl%u%wTaRXVnoa@?Ng2MWR*iicKN(aTLTb-2XkzW zB{m5iN<4>|*z_+i@K9BU(C;kxvtvsftLhN?<#zveE`cljudW=;Oga%J{OBV!Y;o|` z00Hk#Fx>bfmv`9WC*?&69i>4!B+d)U2L%AF-^qx&yhk$(4$1$%!9a$&*@InuhYJ%%%UeqCRC`}%C=K{?` z->5-njy2B>4N4sfeH{7#wEPizi2}Uw0GJp?upY=C30xhL|J{E+5H070RRjv;j|2}6 z$wMP1ARCPvq^E#u92boHFZjTb>-(V(fEyA3QUm10QM~0>bsbUTMMJ;ei#e<~qtten|Xx=K)1DAohk;1Rf2`4jr$fdb5ewK%?dTt{P9hvx50A2`i^{22gvu?4K4Fc;u7_4}s-fXR#tN_uuo z|G17ashu!_Q$BDO3kJpZ5rjsPI86u7^no)eA+VuBFfGv0 zG^Z105ae7yxM0t~*|hMK51hq>@qkPnV6Klx|GBx2GP=PY!LMg87=bt-e z@=*J~HvxEYgFajzKSM$Lr>Wo{4S)a~KpqIp2{@YSbf^Po`oL*A_-6zlT?TOf!8iq= zdU47z{O1LO4~moxa|(cu^S^w6_f#|RX8_PdM=p?#du$gUa$b+RkkAZce((eWUO+%N z9Gd)mOrGl~S+6P7yWL>~q|I>~EXc!-`;qZZH1n_Lm1AF~X+k(F*0OY&!!am22@=_d{ zeh8F{5dzL%;KqTB7Z~%$1rEoP$IlCW^#t!ECyO6V_d3)(^z7h*2Hc_WbRbponD+eZ z67>55^G`7TP{WZm5s? z&qVwV)C+>apD|FMN8T4jQNO-Y_OdmQFHkyef92hmPMdS!M0h;48~HUK01%4L9)figsw`_&bUbg=QKwg^hipdlI$z)Ykoolp7^~As*rMc4eA6#tvaq-L(cIt zqMtf1^~Wm^Os(ZC_aWr@+RrWc|GoxJ*Ci20CVb#*(6R3VxHf8QUSEVDQ4F=YA4UI15%Vnh-ywd;$~hMc7@65*&t%I}I3 z(75)dus5@3>DHy`MCgrm%fCdIvfK|=yUS1?AJ}I15S2FDjrHZL)v_(;yHq`xe7K}y@ci1`6|>v(YpPhq&UJ;I zp-jH^y9Z%~F6J$2wdc~6St$ku?z1&GCj{E>2~vkdWj|J^)|2TY7CDau-V4hTLX6uE$SMrvv-@zdf zI+50w-(?{AFm7yENL==*CiDGzg7KiHTXP2=9PrU#rtf7g&nBxA^08TrV{gVWQK%&gQFI2gJUj} zUeC5&W!Bm$>&{eoV#1($j$3DHj)2+pZLdd^Nbvm@^aB?IE}ai=J!_4)vF$AuhU|E9 zZZTZV3M zxgsQawfQTv#3^;tDR+tN@CZh#!$Wg>Ey$UabP}bWdbpZTA%B%pU=5P(PEy%L4@AQa){~j+RN{AP z*e9Z2{E?jJe0!6tjH4dIb$LVrdu561(W81rtPhP>t8WT7Yo;ws-Df4(s!4Ddj>=%e z!=;H0)s6U`EDA4yI>A#z8QdhwhxL+gNW@<*Y#i^iXlnP(x!mk)+*O{pmnb)SMHC&U zDMa9nSnE{orAp6KhF+Jdgd^~K^IV9o`~mzICmZtiLIhy}YgtNzu&jtw2u}y8{ph5n ziNUP3Grke_#%=hjOgd2Uc$05D>P?k3mRUlG>Gu>Ni;u517Ueo*E{s@W4;zlZt^DNOQ5G(&#j&Da z8_&;5t%w1q-pO}Pf-<@qx7M0kJ_0q*x$Vh%pRTP~0OjMa4UiIt=TtV@dFRqzzVC6r zq3)o&{DvMPB==r_bNV?qCdF+WX&pQ>(%{z`sxgo8ZmZ?tZ|UA1$HDO_t`!;Y-_7L; zRHQk7rx5|^w#~bz%l%5l%u}g64h%I-F4alzHxl+Krj&*f?oqYDvEEk7*W!?NIV=pV2hJh);9%9%#3WN_+XjSf4oIIo;=e=|o zX4Ko9*>wmIwD$*h?uyp8uxwT^Y$78_`1<8sc}e-K+;S*dD~s6D?rCFNT2&a_z|e(q zB2--w>U+t|5oW|o!{YqDFZz93l!tiW)bpu=Vzb~Gnj(8hD=u5Yl@Vfks!DCh%Xm|Y zxT46wlVYA5T&I{urd}IPKup*Oi@DhEW)`<6AMu6iKs+JDsr3hS6>YHi>dr%?jCKC^ z8gauNWxm?!C}STS3P$MqCf#~y6Hy;TI1Csm=ekg-Wnd!a*7cG(Fh*t=GDPso_y0Z*c6LdEDLDdp;pGGFwRP0ly_EUW^xhi|P1iR*=N?A=7doikOU zB;PP%g%m4=*Z+iCgd6iHF?v2fk(Xhqe3OoLfWi|0lq?#`S`I6{vfs(I;pJWHI+LIbtN^=)5f zm3htY8O4KSJT2bC-7{BiaO?}%_(!!5J6xa;lwMxiPQB7+7al8d>jC2~o9?*_C7VCC z6s=PWmjW@W85-Q3F$*G!MBtwZCJGUl1JuV-0jB1LcFtx=}+tzS6@~rzi*p zqTQ}$zU5uS&^4Zx_)S*%1_xJ9y*jb;&JxSdFp^pE8~ONFq3A!AjdE)s8sD#0kk}B* zWjtP95GEY|P{z2i#D$@Q@qA#}KCEv#s&n}3x_u`h;%m0=L`%u-O>SD9x6c_2dWJrG ztAzQwCyxI8v#ZM2kS}J@&?;)p7*}cq`k^N5Tpi?;UZHKj@#Du`1V=VuXHS*~D=&%f zO*-V^GWKaDRHkUrI^2>gvT@38qA%A0#chSh3F)KH^{s4Dd{&hPz($ zjJRM`?uTYzd84kFyE8m1UBhPF4(HuSs{+CJ?u3^gDdBbo3j4i_zJ-{|I-reZ7ipnD zWc&|^L(Ig}SFh@eH#a}{oVARy+qkoLjhg*YnXX}f$JL<=>#LJ0FIu0AY4q4Gb9Ajg zAieBbT1l(wc##M_ko2LVN~b%*%;$^oH+kGVihI_Ucji9vXs=!~N{e65nBKdIw(AY2 zfAO1VYDx7~lut`eggCu24X&3jp?_xZOujSCn20})^RdTiUx=1y6Dg2W1p850de*i` zSo>^FGjY3h-V7sK`m5Bq1`P^TjdkKY#iU9_W9FYUWuKICQzvfD%ak=6@2!4}sj`4a z3Z(J3Z8rPU=SOarhd=N;N`E42AV|CZ>rw)4=ZED% zOaz2yLEbt)$dQ9UV5E70-ygZ39{$4b`z5sgnh#{>9=oA|pC7rO!u|jsG*Z9~!b!&i z1mGFtpNrM;F@Qinhz|0BDqd)D3(PRvQ9judx&UGv;L!wD7mk*N9R9$s3`3Ar#>WGq z?Vt-V#&EPSb!$u;J7%oVt>~*MX0Vn?r~PWVIfj#$U9Uzpu*2rjeT;pmp*= zcxib-d4>Q8*uwh4soD$yZv{Z%`A+@9sp`xFn9V^!E~w9eR+j-l16X}HRULUjqCQ|z zhnBaU{Do8X@mJy{6ab!=p9@rFgV+y@nLJe?dHMOkn+phwfPR1+OqeQtv{dAj-_s0SUmc_QcV`iNo{wrw6>C z@<0d%yaPAaQEZOGAK>Qag-#u;DiMw#sJ*|g#JJpFsR%+s*St= zko%Nn_%j4h_`(l`2{|ecvV2dIhxQ!IBee1boDh64L+HQwiB2>uzk2}k_c{1@!DJlm z0hog$A;iOz2#p~Ere5A(^&>psH4(-aj+Ss7`2y%WctiwIXi$N2(ihG&jnFy_@Em`9 z8o}v*>UQ`&3m|I%oG~!g5q#iGyMdbvQd;g3(_(E_Z)lkmF-&=Mr@EDJ;am&@~e z9Z!g*0!;vcSfDY`80n$F>RNONk|E{!}8y?oIMB|7D-}8*$M+2hm=9 z*XM28VUI$nJYUGCvO{9{@3UNdfFFm>g-J-#X{dKYzv6Z0O#^ma1u~R}n_SX#M(@I} zx1Kj4k@a$8)JnX|b*qmdP9t`rO1x;coXFJVk|$F``3tYxkJtx3w)B<0-cz}WFtW*B zpyMh~Agsb>OSPl(^>s>)m|bYfl_u_Q6m&yWCNwQZkFgvmEf@P2RgF1XdRGdK+_%%k zGktEKD^VJxCWf;u_3ClqTt*qo)lg6AlI&<4DI8_I-YWFO3@+pcdP~J;PqgPI#(eXI z5RYz0dvhYTeO(*TO2JC zpSkmqG0l^+o|&k~8{DdgH#D|&lbiEP5T%;<7#2LQPmsRZl1i({sf@=csSv?E93#7a z3n|QSv0NcmmJTtY-W5@5GeyWz^3&bmZIV0Fp^ef#!DyWNH<}$&3e!R;Bc%2)Sk>N) z(5~TfG-r4+)Y9|rRF$NMC(*nyj>%%jn)Cb2^}zXkjJb~RC{fLo0n_WKm~Iv_CF#16 zdpe7iHxzl81TzVC=Oe~Hrc;Kir5UBXeDfq*OeEBH4TDI}iDXmcw$ETA=aS~DH-mM` zH{YZ`5AZIRY2do;-{U&GN4bX}{_=-f9B z`ozgmEs?XOYE+fpb6b@tg82vQzCv+Z&;eFH9KO zzs6;yDT{Cs_R(~qSp?u9Oaz%bdfnb_P&4%!_>d#?jxhJ&Tqf^B%B!Q_ax4W9o1c=; z>PGmDxSM}$Msn?Foh%-x}YztfYP3zn{*mrdeOaSN&4 z7DFio=IkgdkZr%W-svKMLkYcI`7*tJ_kPiNg5CaXmPc?c3+^9%Jh$3d9BgbCa<5=N z4w+FT#3`*$U&m|a{y((62Rzkp^apNcgc6mN9TBd*XLe-`Dq*d++D-oX>gAbDrmOp7XrVIhb8IUqgi{ z6eK$bC3hd4mm?1`igA#gU{4A{zfTvoRBKZbZ$BZGepI>#Utm#RKU`9;E`C1N?rr^G zayfURS{-lb@yLlFk>}C@6oD;dm)$;Fmh1c?UGT z&5OumYp+C?p zFZ${_jgQz~&Y$V?%Lp6H#0i@_*Qh_n7(c^}HXEj7Hl+7HR$4Mt^Mds?vRTR6w=q2BIg7EGw?sYY^|awxHV%PF z*}MJM4OCYBzmfRv5@8GmFk^{6CD(dr;I+9hq{%q;#M^u-G6}}PFSZk1XLkXQVe!kW znE0c+M~WhzBqH%X>{W63`AYqZ_hIif_=ooa7&-qRcpv^ODg$f`gthsv-UnXpLnaNf z_WZ!20Dg+YQC{4CLd*_6p9|nZ1%yB-Hvp)CofcAn&7a|s2PynCY54a~=aFp}|BR44 zNPr9Mb%6m560m`d60o%oQviqNf11b0WPr$k#t#ap9kQxGh8tAvK_+JoaN@m>QUo!I zhZ*4F{4>h&U>APMfDdd}c?FP+0w9303*dAgnAgBKMx??5yBuWutUt?*9Atq9;DbSo z;C?c#zfm}}@kc5~u;E1t^Z{A&P>J!U5cWX7056GT7!GaOe}6sz_yUkANLI&-NFykK z1g#6Ccxa#WJB42y0Nkb!vYIKJe}-!wlp!}r$^?o)f$cKFha?2tc8Bfzy^Q-m7n8m1 zGBOT$Kma435J;tggutPF7E%IW=MFUSun@U8|Aed_?88qP@PMR@AU6&&un3qTe{5Ef za@)#hg$w+LM23F`k0KWVH$a~Q z*9o#g0Aq}z3t%3BKz$%4#I)q%Mv`F&i~`EJzymUEa3Z#-h+Ie9NJ=sS0w|@(1N^8U zB_G)G|DC`;%>_izKQGelI@tfBkikzq;sW4hPEI6|*PsU|r!ykC)1K1;R2c@zzL0vQ z|IA8ya2ydiD*$E{#7_fN1pPRq2namtzjR?Q(+<+9u=k4pIh+4!x6K2RNFen0(AN8Z zja34;$=|sDvGv~bGyUV%dz?c5-e}R{_N})VgsPBIGuf*jsi?uBZu~*X;l}9! z(bv60LyC1Dk35+poq3=#zq663Z08ux%v!SU?DaV8#CrwLNXxU_3G-B(u{e8R4P9n^Yj6CF=#x&GY zKIf8SbY=KO8K$=T*U7Djne%j_aBZG^8@n|*Yd=l(KE{kP^(ciz@vSde#u=`X~I!_He3+88c?SJ2OgDjc$0ViAO$0nIE?bPjV2|oBT`RV3wttoRjwj(;P z@5hvGJ4qBvt0WrGlZee_8>7p3Vx&z`FN+;EyrerD3{zYxSXL-a>1G8Yni-m z((JI^>qzpTPo^czBt&}fKr{Ysm79ViZ^V2>>yuw(XPg}M!>rCSv&fXy^Of86=zYnD zIhSjeH$Fa`Q(sgtz{9T5pP20~Ws(%rI4$AoUrD%qnSO>=QBid&+DH9etSJUX1*R{j zx_^~L^fwkGGz+t~)z|R%=Mq1eCSOsU)ew%R$IgA@QruiMZZH-+$in`f?U=&peic5V zQkNcaVfwMmEUP2kDl73*Ni5Bpw_oy}Xlc@e8FD>yJWebhCQYf8wmn!xSDcPPS)6f{ z(^TZMSju(UFBY4F(I1F7A0^lZL1w8@CUKTJGeV`Qrv-KQ$3jSk0cA%e;P;BaTs0`chbuX%_E`SKnnl>5GOlCMn;D znQMOM55HjU*2KDguL?a=k<}YqC%Q18IP%Cdy5{TO+I{M z26e1QahluH(xkHI-R=0W2s5J`+aiJ(y72}{^Vv*zBpeCZ+YjXFQ6`)MSpGPvh%x^W6Odpus}0=-gA zCTHqm`h{My?c~p~Cv~KbO-dV+xYCn;+v(H}!NjH5xuG&Nxl+pn>>ozHT`rvrD2o#BbGO`fg8e&$$Q`xd_a6)!jd5- zNV(y%F-!G_YO$PgA#|9?+f-iWvXQa`Qz3?!9_yzq<7x3|jm_6w^=~n&FXUX}o>=KZ zBWG2fbjF=GKl&HV~KEaEcgpW+)YnL3ya*f1U?W8D#=m24XJg` zen~8h)8bz&ej8r$NtI=|kjOm2pi$3_M3Nxwi5OuNxzu#|dRV?sw*$?Zc2}=y(ahO? zV$S?CBGz>wo?36-r%RNkzPV8&Uq&_*?a{z^n)v!#QGUEtx^sD+5{5^FR6Xwa*p|IP z3+#QVy!?PH`SE3yP?lWSl#_M#9bXIkGlPj=?rR!87KH1495%cK>RpnNr+SPjtjn;; zo_O$9h)ZXsgM;$boaz~^EGir6yE9oZ9|iR9-L;ShF)ZEiPHy80OPy{PPhVIGt;s-P z%a`Ltxz<&uB*<`SzJ)?Mu92$d6V$Vvf0gU6xU^-he>|QWC(_ST)ZT0YM#hnG)8fXb zNx`)_mo7;S!dg6Hy3iZ(Z(tvmKLq8O91r5fnQQATk@1r)e8PrCDRNA;5b`~JbK|Qh zUoE+~p1+(C<@|{kN&yL{CM<3)U2evqo*veJ@pAQY$C!3ceq(}0qEC_5ejck!H9gh;k=e3*cd@4a-UqfhLuvR?$FE|L z;qgKFBuh5#N7Fv1zjZwMHl;S7)*pc7`b^GoIw0AADw6-x!slV#ljpA+Y)=S2+9v*x zR)CIv!uM9* zFcuci+ewobr#>;!hmkCayipKxkhuTUqu(ALtxg+dCe?Vj`t37xDLJ`0;CNXAh>Y9bmHCB;W!YZGv0(c`c0i>PCotXmwZKh;5C z9M%z9pYauMw)y+o93GLfT+V{F5BCEF9LgHV5zc#VB-A)t_`FvO&nDSF6ctJBi4M(v z7MGj^Kb2gTmBKAbV2!7~D6OopZ2olV;Wt9GvPHR?jTq)`jirw`c`1Y5oSGhK)zk}? zu)wD65&^Dqlg;6++^vgan(Wxn*LNlo%G6&-EM|9s_bn1Z2@J z#ns|VRk$Z#5OGme$i2tEGHl@y!#;Aqhu_*ziE@Te49?j8(%95OAi7jlki6Y+x%qpg2TJ=E_Z@ zOP=MmsUJQv)M|L*Dt_(%I(&Y_wcs^PQdE|(45h_0xAO5|v*xt6qqYT!F}qp|xlIWz zl7uHzeNRJeg5mnzayi$aHa0y14Sm?;Gx_|FrLpclzrz@RH&TMpMmUnz=GOS5o1}h{ zm@;9JpGV?p#kG=B-(COkDApZKvfbCj81I>?dE=ASw?-@ws5WC^)8}#BB{Ccb`%70X z>o#_4^%g00kH&$+#{SOseLjP{MHs zj*D&jhHRHb#XoPiMLfG}?Bd%?KN8qN9~kyo@py>E9D&#)oMhZM+z*!C8D|+Af)cO; z1)o3BVJgfZz<5%O+56UVc$kxizA=_M@*;g@k@iOLU3zl9tz=(9$nKGA)B2uX@>)vG z@OO?mDXG|R=?Ll{30Lt!@XEZ0HzLx=`Al;1O6#-4mUqI*?FVA%oK~C z-@AOes?_LYe7(86N7lx+9(2b^*gnT%wJl~TDxyZ7W&F zfpiUoC%Bi~&Zn9(ojj-IG9)hKk@M8tz%P$mdPZ-!n!2_u+w1JRJYW9D=h|(p)*l^z zuy`_HN8j)0l9!Be>vPrQ5Mn*+a*u{w4?p=aL!zQ&6F~S(5c%H^dEWrc0aYKk0cr@Gtn-3|0RUpai^TZ_SoqUz za)1TU8aO+En-Zk>1*u+}VJ=g;f=n8VY1E&xIi3alLA#r1J z9XggcAjDrBAj<3TBMZOh`ZN6fAPc_;ASy&4b>Sh9b^ov=@FH@La3c#m1Ze?K5%?9l zy9Z_CLKb?9sDXfjg@2-eaz22w5O5d(PCQy|nx%29N@u7vwcXMggTp{u2e%8VSlRaf0Is;GX|0 z3#b(m1XY8x1uzmQDEyN`a)Yxr0feRL3vq+SNcr++7aQXP50vFl#G4HN`WY9kK-^nlz8Af*Ej*cI_2 z!2$p&{+l*}6c{{6BWk#SWro7;`A>=fvW@g09uY6~eSUPurLzzXamP^#k3 z*#t5G@ga=R!*A*XiS+(*5dRyv{SVmtZ-DrJgS~Sdi1_$<_6~Bp{44CeOQ*G9w1}{3 z-e5$xywhCsiHzr1(bSVf=Z$dK_4ELxgz&TCy87CVY;FeEcQ-JwSk$I9HUCM;SvwbD%L!woi+cY(%kuTUz zEl#YD^J|{dVs$HZ;#I7o2`rD&) z-7eDUZIyPfTdQ+Rv;kwpM^DgEAEjhM4{@XA7opQS@_8-r25J7eBMFRw+UM47rrJ?ZkNv!oJqAqU;^3FGev$VgwX-Vs@-jJ=3snU)AmiCiPs_z7lOy z>XP;3>d^aFU4;SVQkta`s;@Rb;VuYOsjpXRo_V}Gw0y^Zg9}&YaZBFzl@L73k;@mc zsE=teb+#m`o_k~CswwNQe}y1Nl53&t+V@s>H80+iZA%)D3nzI%5t_KA~ID+xJs*NlxTtI(2N+7ZH0uc4}uBqLHKbMnS-9=T;yqM&uc zKT|t1etgW^fLtynlB?h&p?gRyp=l=O;@J`=RfSkDZ z`fGtq=w#Nd63wI~of&d=O3gb=V;CYtarfz5!|@kFd<~oXntd+r?hLeu7Q{U@vW~9) zsuW=@5QB#a53IlS`f0){Cdes6v*4gVg7dX@Vbdp^D(70&3U#4(dPp4MWpJ#rCbTN-Fa&Q}R z2eOkCdChp*%6L;Ya*Lb2s9LGT(CgJGv(8}TI?0FTky(`9SKi}(JOVD$QB@?;s@9X> z(_nIuXrorvF-0jRylyxjcDjoRQ@>i-rHMb4UBC2^&Mg8{@7cT*ZUYP<-a78%2JuZj zMN>X;JeC{g>1EhF1RlhUgy?ei4huYzl+{FPr*&c>CLW;NP6z_;Ujk02UveZ6UsZzfDcH`Cao2;>J zN$ol>Td*)C3JkkAy2>?S82MhNN}bw?SoV~3q!)g<(E>U<@f9FXg%Mo23%ZYJm)T|aGK zSj}x_AE_1Zf`^s5_;oC6@*P?A)Q>yBARE8uHn~k4idbP@^?oWyfr+ffL?O zGj2g^jP`}gx@(4P)SbJ^*iW;ubz4#8oN=L5j^&5*CoO0P3In{yNFGmD873Q-s;=FB z=?>4JV7)-$$jgwBV5OFIlt7?1;te62PoB-Rz_*i{P2tZuN3bL_2Pf-IqnDk-XF8)hfXvoxyH!`oq+x z>))Cwx1SLby|8Y7e~|*OyI3`H5I(s42)>H>^-^ro0^CMUl8?hia8eBORQAq9yYi@v zr`>&<_sRXCxQ%9<8y1vZwkO6PVjDyq2{r%thU@+%aBAygN$eq>d;Ya6^Bo!w2BBUS z2*^qD<*NAZFLBVh@G)LeIqhLRa(G9Gr~#9P=&d$qn-pTIh4d1MtA>ZFPL z)KWAUo*wfkxX$-NX2YDt1g#bmTT`liXiHY+`3wFH-xZ(lT&K-qZhl?!#7UQr!u;Kn z#6_`Lx41mAtBx~YvnHH28;{;d#ym@ibNA-EW2D@A#2a_o*Q^Oxsh);Y#o?O3?35c< z=3cS{w2_`;I(~(Dq?YVV8I5vv>4PDGQ|OnhS*^UZ-q3x*_ZIbDr72 zz9!!}@WriD=j)Q6r9&p3kz%BAe!iqRttysx_0mi0r_{MtInJzgq0yy|$ zu~Ty`?%9_o9zE-Mf2uFZCDGK&X~X{mj*CC`@?apfMbB~e^Q(`>DF&2H``R?Zw=eC)5Jv<2+V_XN}3O^cIsn&%8h3J8zvYQgpi4)cW{s zd8tPtEa+e>RP*Dqs8F{Bmw_FiaDR z`yFj$F@0W=iE@y2(lWboRJGoMuq;HC?CGdT|6K)J?IR~L3Q}JC&M-?~iP<<#*|*F^ z-hFaz>fvfvWmfi1Sl{KVm|+#rq3*Py)#PfDN!cw#rd>r~pb!sKxg7*?mBwviumUN^+x*|wnLCO-3_^PM`iM1i#Uozj~ryBaD(6~bR4DJ`0mx;Ter zids1?X`QH#ToofaPw?#yjye4>sfl!}6yJ12&oZS(XBfu^1Gr!yq?5wZ=PkkJN_lpd zxkgP=U;@l?fMnafVx4ogv&`%5>jId&rJXuDPXi=c=xI`2$$W=|kxs!({~3=jUL6VM z0RtsA7q^Q~PTRGqk`S^6d@GroP0_JPBD*m1M46p>=aa(gYLGjQ!fEix*(H9+jRhtM zzS37x8>b`zW!iz0HFv_=7e%`%F0gW!%Rdw+#U_f1`LcF&ZFVT5yZIgt`Di028RK(3=)&6z}g;I*0i_rJv`$|Kg#5 zU1c+s2lm_X*alCLrgW=waV1fCVt1pycV7=!=%beGo{*&$V|_Nn)Zrr0=v&P@&tsbO zS?yFKuijAtk)CfZM|IB6hn0Hf5#d?jXSi*x4A3QbZP*6g_abW*H(cf1q7lQ_F+*}J zd?0@PFUP`r8#yrhSM z#}85f`*?l<5UBED* z06a6m=Zwr%d?@7Ye^23%Pv@W%!0`zpp*KGY9u7Hmey0GA@PIY}JOnBVhrBumD1ehd zZcu(5C51yC#@{LY8VXRS53qquoeo8OAr~Yc$hION000ArT}y{zzW(&V!6yLx$tWlsiuyXx3vMu>0ayg!CH^jlLt$SBDEu4>M6C#rP#hU#<51Mq z0Rq2f1)l(-=puNl93F~8VORfq3Me%a5lRX|jR5uq1rI1Sk{eO!krRQQK|ulK8i`1A z4k~W)qoi=i>5Xhw0MrOLIY5eoIuv^K7eOMDAMt<{8Oczf)X4t^^RE>qJVOd1(X`e!@pMp7Ki~HZE_+_JA*hGLD7p}VgNCn+yGg3Sf98L zquP**0pwBwfrChlA5bb56$}4qIOAB4mO@t&t!+7L?-!+1UWL4TR|;Q-{OIvft$ZQi%Z*7^KZdMFHh&``2KC zU|*z1lZcYpDCWd}Bf$&KCP9)nBvLqxEc?9=|3u;66cVt2G;QPISnI!N69AEb*B-Ji zpj;pS>%!j&pw>n(l>qJpXye}rpjJkZQw`*70E+N;0w{G6)CK#Ir|<6sP%e&$sv00| z1yE*yyyZn&WCv081cfU7R7D=JF!6&Fl*onwwJsuzHh$nD0PlK$Iz~p|Fr@5vRpbT* z()a;_8x?_n(nKCm;{%jzKmuC^RV@BV24GFuD;alqasIQ$%3oGSup#3BusUS(5p23q z48t#FMnwU&GJ@_h}WDj6Pt8xcfQ7(yb2e^W-VJqOM& zWXsB-yu!%eFNkEQLP%3_AOJ1@GAB_{K&_65T@6qI zz2vYQfe+}PIsrD7Li|Y0ox^Cd-&y#jkK8CIpwvh3js(bYKob=OlnS|r<^ok9X%TNs zP{|D0yad&OP{;v95P>BLfbjtY8J|bM7dk9Ie zA=@hsiexlVsw6L1-$1rh0NF)B0i{avfb>Fwg24O*<{9t_1ONFU9=P^=`#;^Ne*;AQ zwWbmR2)hT2`^Umbg5aICCw6>YM4iL^^d>N8ef%H6V*oye^18s!bU1%$FYps1_qXdm z_n&{g{zEPPdi{su{pC9UPkh?nuKz@&{`ETQ{)6&rDCGlCZz!*W2*2NTZXb}w1&UvB z;Y0Sn0QeuM#QO6aa5nOA|NKI`2O$5)q%m_>Vd`oH?9SIu7p5S+=@{v07;ntr#cVW6$GDp+*C5gcM*E)=Zblk_|lzeH?9^;>|mW;R( zS{MJ0G?c}G_6BCnRHmI8Ic~UI5Qc3ecf9urywNxv977q!(VV(WTimDPRdiOC4zN<4 z3Z2~ea}rY@s=hfAW_54Bea)9S#draYoQMI7Kbj(}oS0eKkXN6FkMeR;SH^|Vv)RP2 zZ^smrG!G41B#?H|+n>A0sxHZLEuAh>@OHIYwCax1^soYEkHVYOf!&S1M$-(cw+*=Z ztQf^!1gm!6J-{WCaH#9D$5Zt6Zf2BzctAidtVd_ZkLf^N=LA8EM z$FmxV^3UR7ON0Th3X}S8z8`)|J-zH$EXTV;=Hsytu&udyufxRUYz>`(gW=h#d$%q= zv}wVgw4Qq*&?n4we#O82Mlu=5sOplL^K4nH)o0FC>1bfw)-BrW{tvPstzko}9~Ps7 z25**$jK@5a%78>_>kHhdihB#SjNU%OYvI*&LG5y;J+#|eiKuywV+rL3sxY(Lge{`e$OaDtoV{Ab@qyQ(D`kVeskf+e)bl{`22$5@zHr3y;Od{2FUS`0U z26=`BdfwJMRQ6blIFt)vWVj@7I9r8$&2BRjS*Wi+MMdI9_2t$G-n#s*~Lk zemPAA?c&4&p6P51!IFu(4Rz_4;%!2gW36byU1U?*&qwyk- zGwJ@8xoUbvsC>l`-klqEjCw$?(s1);LPJ`Wxuk+hw1-Z_=FMgW6~of7iYJ+3ZGHn{ zmc`qiG^|v;9xKV7rP;16*FrpXzQ8BF$n}ZqK7TyVkY7BlwR)j>$Kl8)z06Fw@oVLY zOSit63PcuMnOL(~ATe+0eV8@Gbe25e`lAfipwD9o?wSw3+tXbO(+tjAcw3$R;Szh= zz$5XE;@Xc}QN7N?miLoWJeX(Qv+11&6y6rECgv`F7p-ru@joMxbe&19>3Y5YykbIj z%Lkaqq$xizUkDeOWV`XuJl2d93^xA5l z@(N^jv{2{mo^dtEU@O`_cX3W7N^b0YpY2)O>q3m#R)UqyW+Kk2(fXhG%97pcw$41b z<#@A@k)ix^GhBQUYn}Xx`O_`&A?=}34z{b|_Qq{N)%1$XK4WDOkCJE2D~Bp@s!Yys z=6`YcPA+X!?NpGpT4?U(u<&kNd9k&7AheGIt_Fuy+kTv-2w0xS>N{gu#a3!LS&>~) zoVcslPv(iY{#oNw<5OjWnTX(IZ`0;An8m=vrYb?J4|cW}h~PFV3b9F=`w=BG-ON=S1#`hxmyi z>4i5@uZ@^UUyO|f+wM?x-eHbU3HX-%<>mILUHgt5gJG{!?+alKcqe)qf=K(4p0S6< zAI3`T*M|IQ7wuyu5Y`bsL=A52>}C(8g&=+eFG^Wk6FXCwtvRULxo3O;oP-?A(aBlb z!pM=9pA)=1jedRsZ_;ZpQ)de&#Jz|YHMsYJkrQ;!?1IS2tH@rtc3xUZNs$XQL;NTM zbuw{;**n`gBC1s)?9GD}XMS2Uw4$Q;5Gf}UsI40;M>{OUrqdh#)-k*{)`$f$E=&;jwuxIs9iDb@T-T z1nFM!GY44~Mzg!KWi>uy5At-_n4RpEXkVZ4XxrRc+N!LYU)uH@nqSh=U0eI;LQ&f3`5cQSyE{B}w|9r-M-g*89PY*YyP0J^I7T>>2WBfh4D zdM~uF@5;zEdWU7tQ3YWOo*PM0HR7SPXgWI!_&E@+V`}M5AM) zzf#U=OmX?fx?QghTctF|DR-#|q4kpFTb*|p1GN?*7)(LY&4yG9oOGd&Lo(fmvF${) z0vpbTlzrt^2*nk&ctUn$rI6ipItH66{Hx?=qm*OxBr@p4j4^MP1Viypi_m?3uqw5< zyl`x|q>o*1)}tNgf@*vf{i!1#3>ugC=6VtWapgZt;YMG6`W~15h4|Mur&>R!Vq6YP z4)<;|#K5hm!w$Nr&_PacUjY-B)o&D?N`)-#{*}veROm9CijsaKPfB#5SJ7n&EE?l~mW|Djl4MnQUiX2fVlej+jTszc ztJx2pnvp7_6osr}0TwwYMq}ffo2WnSaz3JRN-i*X>aJAc6yq1XuF-o#*l23#q0VCpd;!nfQL@;@dAkV}Pp)e3ZiKWoxW`_*F@3sh z(LA3rpoLd~{~85*nb;jj#Y^tEz=gDoj+ZA`SSsvkbF!IfJS*soY72|?%wyg*d$Bu| z-5%di$-MY=+t(_8UdGA#O4>&gxaagmlGtz3<%Sg>RW!+O>6)y!Ds1=!g-RB@&wO}w zbq>8O<}TT`UT&Fyo08_|j{*0@6|QYOx>)2_;_8^Nxf<}W)2v6?HB28K9=l?xOkKJ- z=zV-^DrrX?apP}jh5-U(4mo~GT*RxGk30}*$}?W zjaRqbC^7j322E?Hu+6`7TVD2kIG%DJ*I4+=_h{-z-={4%W*sBpFNpe;U7ug&-I$vC zagBUXTfPl~1dm^{r~}8}Hju>oSQ> zz0yN!pO~cUCq(s7d$3(V5rV(FNRiImt9RX-iLXDNydz%de3S7HTlrByz`-ZK7iG{kc9=hxLt=&V^~jrN(TQ>@MkNl1L62Y8TvWasAZU zYPHeYkjrDkubuVmQrhGBowLeU@6MI+H%?W(60YWcnbKrq7&1pwAy0YiOfg#S$zvrg zEm4yL8QHlKnp4c;+RIMptIdgB7ds!HDN2QKR8ZcXUf*~z_@bLsC!pl-$zHb4^=O zeV?*f8@{_4ac{aZD@MOd*SzBHdd%4TTrLrFjy~;#GI*+)*w@F*P`T}=7I_NoGo|#ft*`55fP3fh)g#B)z z!##gDtR?Si=hJ6fFI|d#Zt74+bXVz-R{rda%O-`+c3Mh8G)vlM6**7ongy%x)6DsI zs`e~1x%7-9-NTduQ^(#?_63O2P=FL*7O`oY6+L_!(?>;dd<)cY9^HFIJ58{>T(0fh z%D61CrLcQ?E$R62KqK5(qZ7FI=(aHwph-lB45$4v+6Ujw|FhkM@R9$k-GuNy9nSf93hs^|#8vkpX zY2PaOy;Hy@`r(xYCevQFW5mC|n@qnSL+qQg|38^bfR*3fyZ`(wE{Lg}vylnHPKB7k zAZFGOGe;v6XPBKW!~$+>ZsZ8Ju{MG`LoPd68#!4(toQ%encLYytsstj1~}(W6At*W zAjXbR7bwIAW(x=A_Ald(mWvmnV`Ah8sNUTFv;Qx6Ho`)MA(%jXu!NYIf&T#?fDvFo zLLJ~n))1Jj8O#>u?6zk}?*H_|q}~5wZ{+92XVG=ghC-^c5p{92!K^5*bRsi5Tq?+Z#x08g@GGQ?5u(O zoS-(a{ZD(g{Q+?R=Ace{oi}oZNI@<@q#-g8S%@4&9-;tIgj|GNf?S3uL6jjX5LL(( z$W@3ML>;05(S%%sXhF0gI$-pSOst?_C_tZ#!N+}8fBgEhe>&0K2Z$rY3E~WaLtG%PkQ)#; z$j!ayLVrBfasS(IPjiM@n}RJ1x4?gj#w`eug#!V?Y@MNCbgh3ITw}1c1A1%+l=Iif z?)?U}wuad|!JHtbM&{;F#~*(XD^ zVgofdf;bwP!c4%EjqHJ@-Pjukpys^)@yILi>-l>v_w)}uZog;7aBFL*GXyNZOx$&ZBrQ7dx5Uea)IsE&z%@5xm zwReK=%?QVR_5bzF$OP^TmJm2%ei?zmwYT^&a}Yh)qiF&)1>N#PjGRp1 zpm$KnFaCb8Zi^TmN6;A2#KOqhZ2yrzesuaZZ}tQwwZB|Q?eih^n{r6)kB`(Z=|~|~ zK!}tqMEWO7vipr?_Z!Rp)>!seE5-eL6!-5@{OumaU-!s5TR@ceAE&Z^yUPCUD!<*X z^5ceIt!&`d&MZ1h`Ou)cx`2?6@QuXPZkJuw)8CF-Xb5R(!#hVD0p{?-@_-H%qV{d-{h_xxB> z_9h|h*F8`m2HX9|+3nwMw|~3cZzS!0-0-WFDa-{17_{3L0(`$Ae7_<5w}$XvE!_4m zf~gOL;P&(9-+dCi2TFtd^htpE#{ZjBf>THU7(@FP|2V_}aDLu@^-8!xRj=zuveOlp zHT#y8iD0=huVIQ7myu9mRO5a9O7Ur6;LL4Z`-<{;0iK}`u9H12TcvQ7u1w*wveoIX ziktIU(o(5UnrMwJ%?Y9k3*cskMy30Bvs9u>*6~=Po}jbNW3yv<5uGuNI~=TOF9@B4`cWwS8~DLojGuc*?5qK8o~t z%Jh1yiNB7TefTi(GL_UyoA{lO zc|_2TE=kO$ajfiqb;1_j8K9l6GP^V3>ldDx`0ORlYf_Ng_=(}b*sb^Lo?Hz0OB!5JV%@aR-cDTY-nb3-85nw z{kgVQ_|An#K4M4|Zk2_h9XVw-;kB5l?R`1Nde>68UP4b&x6=!{L)Si39$(A%vhXDI z%g!?Yw#daPX}CGxvCU(~yP5&ziBn!|J8zDkeCdR9gDbB9olL8w82#ZVHZ)s~Q%Sq@ z{X?8=yL!!(LL#?6p_kH}fOp6_gWuG*JQj;-)<-34GA@7-rdMdfC?E z#%CQ@jOo^M{ffEgbqu(ke1_{TVg{#2lrcf93P7EbC@{hG%-r3H^Agld*| zDnllQSo`kC5^r-;y!l3$Bep=VH^L_-HQI1Jv5!Lf`U130i+numeKghE$B#v#(?x@b zE6EZW&J^_ZyX~AC6A4=9vYaN6a!6j?(2&2+basdBalNk5gQ!y7-GNuMK}FkNbh)C@ zl=^&y#Wkdd?)u`4mPkc6iQURuY$Jarbxq&-*>kzqOYQhNag@|1QJ%7B($BLl1e!)U z<-X?MIQ#Yt3!U>_azXL_7TRT2Wv87k%v)I{&2!1GqA56I5}b+*63Ro1<&-el*J}rF zSEUSHNDcy}$MT6Q);OFNE7t8)Ki9V^*Vif7sXy(IGZ`@=I+2*Y-JnF<)7NleJCj~H zmAebuke!6|$fW|wTU6XadJkTlwXC!oc)WD#ab_mokRbs z#rgb`VroL<2%ogB#lnS{SZb=qlha$1H%*p2W2d^7GGkLt4Cci3$@Q@SlD57lE1oep2;YMuh=&}W|)sBdAcMvety1jiFQ+SC`ypc zq$@zAy9mM&tbq6Eo<(*Od;mA-griiiXzS3)cnl7gcZNM3x=_3>TZtDBDjcFLPbLal zoQlU_&#{hMvLjttJFTEBQ6MfwaGB4YJeRzqGCDcoABYuQ_a<4wicx$xL-~ZrB(|Sx;OjA@cAn3$j&$WJ1-g{ zPfGYu8q&Ov>`iY;qtV?>KTRdZl1&eSewhqhvYk_pg-ixwGvso2UbvGCn^Rd2n}w{B ze-tpg+%j6(iA$vsnfke;t%g>@t!Zd<^P>Cpw_gpR8Xhho-&Xo3gtpsbDULoqfAv+u zeG55^JPE?2tAyu^YHs!JUT97|nOYu3K4zgx@)S@`c-@KB`5F zjR--~sSLek4_!H$6em8*PP}7ZOOz#vn!^NYKbX%7ul75-J@>LQvl}5%x*u*1 zQ?1B2H!vNGS}D7?)-#2xZF)S1HR*G%J0%PO0cPeurrjSmQJvm3HLeR;L8bJYri zZTWM11qVN|`D5Y%yohs{eP+*|PbteRYhT93_9xU$I!$*yr?oBb)-zhIe(SZSOXCsJ zH%%-S{jJwj>m%l<{qxQ5HDHBGS1Wld)NTa4nYo&Jy7w!jUQ0eMsK!ZLyM4oi#hB6U zBCnu3t#IYaDWQD+7mVFI)roI$CwKfm&q<%cl-GTA0Xn6ecAt9W$+}fT)|I>6vr%Ir zD}H^BM46KU=8m^8E)rP8&AjD^Cri9$EnBNx7R%F5DoVYwo$slM)2P$7f>&FgAkcIx zGpk@qxV8KJc(^$Er}q?A%;v_0vPbN+mV7S+yi=*oc)Iw>Oc2);QVn#L=*>(kYm+g`)%nRY;5jPEBC-q-6?1`Xp>m#+*c?soPm`ez7Iks|^MSiEj-%Y=x zaWa)aiQ6JbmjS2qomA#GYJ$^vx13n$3DZ)&*YA$e;vUM)R$x(-Iy6Hm}aXX>laLTkU$Yr0z=L#a5?Q|)uJi~2KB>`Lpv z{Z1@Qf!d~6H=}O{- zkh8MQVMeYuZ8|*CnTf*R_wb6-^B2x0X|m3d-$^cFXP8bBxhAuH|B3{QJJ%TbgY%WT zRA&VSUG-LYwjwTjNi}W3MpJ0EglQ=Fuje`t?L6>yzs`vvJzHkPMfwp!Tdm{pp!}3% zS*b+7x9}G-hX^YtS5BvB?;UTfT^7@%^NJm>qgizDV9iMsulT4h5@%u^J*Tv@-O4aF zd;e={yTt_C1OEV+|2d-XpEm+LOPr1_GvBHW-sb<1OwjFg9+Gs!vW1q|c+rMWJVUcO zf`uy1|8vtT4z9Lz%(Mm)HW4D99gz|ztxvaz3XIv&*Tx$k=4)Z^Bs^ zqta(@#vWLkfC#*>QgTn*cKH<=9vp5zt1PX+OWPtb@pOn6Nx;oE%my@5X0>2 zwKRMHf)^Hp3g>8;hFT6jXnDJoA+SGZxXktO;3f!~`m zA5Smbfu;#+EwR|XkryjFYOstApA_#tALPiGX*yVvB$uBsG=jxQiibT;lN2eV;$x)z ziSFW&)E?Q+rkKG^UrA^p?;L)bY0$r7z= zwr$(CZQHhO+wMMX^R(T4+P3Y}wryL}ckaBo_hDkHDyw$ou777`L`FsCj#}&caAsTl z9Kh)z-?Z-z%B9zp$)99e1+S;?xMG=!es?!l^`<)UcoV%_!FpB}MNWFG!WsKmhptj- zJZ!4hCV;hp_JZ|o^|9}Jt! zhPsAZmGRWbuY8s-{8ccR@%aW_SYepZQEFN zXvjSdOQ36=v%IRjE&8zMvRky#NDi(lTCkfSGxY z1#zG^>t5TIL6|aI4S6IKB;0D58fN|}O!HVWhk$jrznkm##PIc z8I|W3cO-?}du&?2)--aKDKVju-Y^(bET(|1_3@3hvF}fJ7o7uR68j0t_TAr3Z-s#D z>uMC*r>^=lKXc|M0NrN_)jS|N7r>@0^Ji`XVL0qldDj$H$xRwh6I!`%%W*S+zrN}e z76+xbT{CNqOG?07=CeRv^%M`d(+M1nBzgvhlJH=}ngi6TsJI9Wx4_SdKP<22&gvB* zt*u>*{HO-zaxq4kxNR=ahAcG2{hqvlzL;j%AZsxuQD7fBN0Ma+e77WnD(x(3eJ$t0 zAovbYx+*;XoymdOSNNr{LbOUs@AZP-;0ejX6Yv#J!k^ zcQriDJ(Ok@r(KWvOGm72PzH~;v!{8AA0=mZIY~#k-8SSTnM+V4U{0>HQs-rG`U|ar zuI9}lFhdDCnk?G&SJ4{C1BB?F;F&5JVZs8-vZs2DMHs>-)Rl49C@@7r1mDAi2t%Sz zt7Z80EEo#8)j5zJ!vWML&(n=s!8p&y7(F=T>fVroC!MOfbquy>m2Qz&JR5CLROS6< z(IUgrGowxT!NJwhh;vS+yU)fxFwWN#l%*1kTTsY_k_%zvcS?_Zme459!Ze32VsT<@ zQZLYS>0Av=f;V0u^)?I$y%F1a2AEJjf>7o=!gz=wT@jK@W&E+c8&X8;4(4!(X$&yg z{2EwU#0}mm%nBnQDb>y^UxSjnv$kZ>O|&$3N(FP1@mdU|PpSnwl;>c=Orz@39Leiv zeuplpcw|i>qQYz~`Gp?HxE{sODQ7Y=D)wR_tB;pK&-AW>&}R^5Kxp5f+1-|4?tnOX z5Ju7&rV)hYNsV4Y+yXimw2Rn(hq5H$mYVz#p!APkcCC~Vssr1SZ4l$dUKu5sc-nZZ zvJL$O2+EJ<3w-Fe1Uc*lNsO_Z)XzfaiTriiTa!h;uH1t!3|EellqlIbD-M`KqPcZ(O@#*6edlh?#IA zacN$yMo7KLbvE$agLhI= zRV`4U2D&($L!dPiLEX%wU@uUy#6J*6fZsR9GgNh!S+FTNemA=_; za%QFxS_yE_Et`&mOLWBzMicRj$`^Zu#TsDR@uUGXjN6h-=x--ovwbNsU^c?Z`g z7+$vM5;3n0{DlA@wrcZ;+nm+IE`df48hTcb#~l$E(i8!%&tBskx0fn8DZOj&{JXfl zK^PV3uKCp930qF)4H%%E+~<1eXzG_{1zT_jZf66F7&eH#)%a4Ic#hWD)fZof%*?PD0J` zCO-}>N<62o86YqcOrN#4rcvmsQ$`dfiHGSCm-)JLA;sy6)s@Ce^rHA&BICx)clWr2 z#TY~>IOvKS`QE}t>0?0^R&bY~u$Q<{KT!~i_oWoL+%r-R>wkFH{W+56%tf?g42jq6pp0k$v z1yec$d?ZoHMpD$zAY$;dLrcHhfWhZczq9W>DvOxEIyWzp%zxjGqDj zSKVzmUwa4%oIMlFGx^xLeZ8V~etoOFnJYLgf|e06tqtkvP?=3&3PZ0y6BrU=(Lcx7V%U};nzl7!;f-hv@l{YGC2g5-ng{6t#{-J^ zJm853Tnm>O-@lAi3jUp<5^b#^{J8>949%1e{A-pleaq zcQHU>EX*0zZp8$Zs5T&sz3i_zS!bJ+l}wokR`Agde0ympq57)YoEu4V8Jn8H{g64g zHaNOV74yaO3mqz{sMMwU(bP3VKHif=%pyA{k`i+%hlb9(uEf?>w@^{tS=w>96D-MG z1!TOxH{0dkBst3`pv@p^L>`IYnpA-g6KCgRlV(`mra|5T8HZO7fY7VQ!POL;gYk7O zfAjcmnNzTlfnX)RC82S>%kw!aOO6<11vI~PK-Rgd(sBD+q!_SwtjS@s9ZQ<7){sJ~ z>0+2>!#Z^(S;!V{zY}XY%*TurH5} zN4#&-3-QiK4+a{OP0@jsBB9osH2E!|StTUGr&FGpGEcD+Py4J86>=>&JWP_+Y1_$e zY-4^6XNO(}Qd9XvgKWbpWhKg_R(Q2py+QhF?zuG}pLeIlHE=(Sw4P%M5Gx~NT|#o> zhw)`1A#w9@7ld@Mx+kd|Rw~-iLu8daN+1bYhDEM3aS{|>qpHKT856hYZbSR4D9<45 zf=uTdikSW{TE?dT0ci z*AxKGZj7b@3+VkK9P?X-g^Q`k0=l9%e`0jocw zsL~i2Pa(8t4OvKAOF?UsK`SrnU<6 zIu^}*oAG^LAO_|ZE`95R$IF*)GQeOYUCV)Vv^%#ew6n>$C^M^8#Yn^GgJ9=7i6n998}04S^^zT5xfs;C zNB?Df#J3k_RxF52Rwv=Lz|P3|L+)*^YA^HJ34u`V_Izieek4yCJhV-hWeYsrILaQH zbGH^?_c@^Y)aa*Eg618nEej}32XM_Zy@E|?H^I0f;u0%cjgLAq0>FS)%=HuWe!FD! z=(!_eDbY`4@bi)Wa)mS0z`@9hFTzGEL8!k=#)X-mFrxAdN`5EZvw(PLvk#r#Qz=cG z*!+=a=yG1f_ycHi&xA;uG^}9&C`?^PXCG%WFHc57&dqaa>LLz*GBd zG;3$JO&9!jlmf1PN|6({n}6M zW6lf&%P{le05~rm?5+7U4!l5}IC8h&qVfvjC~ZMNC_5NA5RCyu5Qq+*WyDInrS7=8MIb;h`UdxpC{v)vU98%^UlvH($vn< z+0fQblEJ2NQ&br3@@Ta!o&MXVFC+}kaQcfEJ2gCffOQx!{YgT*gcHW{ar*)hm)vFS z0Tts{`-;U(smeWD6+opqJl@lY5t6F>#2d$jBCYnJ7ZUA`fm-CcFGO-m)k+k^Uq3Ui z_wA84^98(ao`%rL>x20b9u(zfo#c&y9kV~m1yrMd&uJd!)0+p3fZXRzLLXr-#f{Dx zZ%Z0S_OrJ9skndNapIWe)GT(Zesm*9d<{B0cahF-0qkV{rDt6D>%Ym%HtBY9^4Fug zqv0X!&+39m>?8G|^W$iohE_eYu}CmK1lM`{tm`A1G4(6kw3u>uA+EAerHtpOHl^IB z9LX_z9ZBX)OzJ*$x9gVvbH~#}eyoBF%S{gH~3e4XefkWcZAC7|$d!^U5?Rx09Pf7zEhLP4bu<`Rcb zf-ON`b^-o68`DK?;=UZUL?y@fbbwsY5@evk<0i|@#2!xcon-c%y<8ZjK?wP3x`^S* z4WpxsR@wOGw}F%k6+C!@H&2Kg3NWSr_r7rvGw2z{$%k4gaSBhK~#2In+`j7L;2aJ1vzJ?leI%{ z6E}*oI;Jz}>KkSD1tEDyJ(yGyz!ddsEToH77>9a~B_+K0X7M^N_mbfd?+pI24Xt$; zeKZ35)BTwxXiq~`oGL+1C6O{r;MW~y_&dtaStozy*E=>p2^}w+C`bbA4r~MguuGyD zDWlZc66d`<8J@oMJ&S=-mQV1>R9U>?aEdPj~CQ4V)CVsRB4(TviQIsS5Qz zD0^{#O?zkrrf)AcJD{S{E{PZm)THxFe9eArdM`_ zhsl;=bo#g^$_kwlSdnVEwY8)%uXtV5j;ePpz?;ZUGX;ZdPU^XjxHdDdRarjp1%@ZO z0(}#<>vgkShI}8R};blg@L~Ep~yj z0Z88w=R%6W5YGWXj0$QRhrSC-W;XXt*^)ip5Wwou*svz`aYTjzt&UqWG=--zAO5z% zaPQviyZ5jWn`;6LJ*u#mQXDHLS>0AYeG5A6p=~mqpNtc+*yD$ya9Ne_h?{P@h4Cf< zX0)8TS`zzi-wWFEc>S%pSo&e|ky`%m_en^jPpo%~d>4EfTNm`u3W>s5u?`KX_`(Ev z>Ri`~U1+{_QMOQS)oDv$V_(i0bSkwf@_d3a9NtRgd`RvEbT{zf;1R3?{1mtp$$sIf z78KukIpp0uP(SfiJGk`DSn1@mQhuxzj>5k&i}RRVp<%beP*!iAIXY`m{XWRYy}LBp zY1XPjsj|rr<MTbZ_F66_>_ci>*(vX*}Si z8gz#XF=CcR(3XwHyz^GXI!Xsjk5LwQ7CFwITkd#4Um#^@mJoHw;I}5<-MfI)8(-;i z7vRP&hABePxbBbYsdTCKB)Vg&Ww z3kfhJ(yoI5iM|lvK>;;K?;XqpJ7&ZT zLI|Q;wAxV(!hHZ9jEIcX@Mj=(QcMW+OP-G|^{$@JN8$rJD}jwrK0DY;O?MvvMs|=n zk;X~P)_#Y%UCm_f-soPn83^-;5VK<{Cc||y8mD8J=UQBX=3%+_7(ydf)czryDG7T7 ziBZqM(=>FQTPbqhXIdrW?`0L19X1A-b(LMm_^mea8e4ls zop#m?fF|o8rq;}a^Wv_4>^ijt0Ns`cO@1J%&U z(ME`7Ewaj8`@(x_L7*wapGMeGPN+%XCaARSx1c@({Sp*}#D-WXkO#ISEpJ(NZcV8| zBNWkbyf|SA{B>mQ~@*taR`b)grrTT0bMc+O3!rAS`Ed%P zVk(@Z{)c@@-pZMy{*{gi1tT$Jv#N+t__9akL?;*&IfDokd0Y-_3+MO!)|{$`xFhiq z{PcczvLgK~D`{49D7=b`We0SUo=FYXyIpR46wh|g8^MV(u`B@joyQBVzqAdxCJP=| zOla}L)=Ie=X%=;KUnwKn&s2Nnt|QA)!2ZWsaU{m z(mDC?pwuc2KF^cv8BX~HuGloEh8_ei@MW!3S!K+x0Q?P4IeR)?y#~D#pSPT*+lJR( zhkEMP4_qupQwbnD#b#0Ijr&|bdX}_HMSl+|>!%n#{PJP#EYMnU)HI#`5qsANeqMXF zrB1BGJ+#YOBW-Ga+<42B*C`uy^CcN0c#1hg%TT&_kPC{8NTC7v9&dkU?1pbNe51^* z_1Dr8(Bjt?rwn&m;Tnr#(SS>^p2-yD)M`zh#OyV(8x z%Mi>kZB@=GxQ-hi_xf<+_D^7n-_ZPd4k!j*#QG;C!;?pJYp)SvI68^Ga#+B>?WS5M zO$w_Wn8tdb7gy=l%HlcDSWErn?V?j!8=)LH8O>Bxe_yt~0}|EUwm1f#?k;`*7N0Xq z^+!)T5r?jERQ_EdU3@V0!SA#4#ozml3_!LdKrC*~jZG|0-TDpe-uw9Z->^WIpM?5< z>9+pKg#G`q!2d0X`a$~suTFu5_1|;~KOqAD?o;@OnCU-pfgUXLj7~ie_ci>JKKL)};s2FlvHi%p z|FQhz{vYlC>GhwV`1j}ksQOp^f9?H`asD;(zqkIUy8o#7=h*+Tg@3*KkN$s+^WXda zvF87Bl+6DrK;&QO1=Bw?A3p$;i^Y!*f`f_W|Ak&~{=-`MkJ~>EYMUPl=tsd}^JByi zG5v9fnErStpqyQP6dATq9&42?#xCaeX=FI-&9*;}Pa|y9b=02*IqG_4s}Z;TXYTRk zl_u}KWeI;)!*rLUt&aD$HLjBpsj8PDGdOZUNN^W5FEcPQd_sF-njXsiC~c?ehSx!TF8_c&+;<^sWD88596Qn-);`WR(q| zNI|63+8k7(h)N>VnMfjlcfkENQSye2O_fZh@4{IPcJDmO&P!Zm>?q=njrrl;-E-#Xc<5;V>dMxmJ-iNXc;$tx z?dIf{oss6~C& zgy2_wX=ZTc7JsR?v@7~a{i=$(lrHE5>fZUsTn#b+B4%oIac$$8p1SWKPA=_FYFKu3 zYVWA;@qpM-OasFU8#8DJ$5-fk^!MDW5A|%3Z|TS3*w|*h?>o1bv_=0TgTphRT2}J_ zL$g=x`GrS&8)#~8jA4H<(Y39O!0?RIZ6{{-k?+54z**mm1b_U^!rttWhRxufn)O7? z0Gu(zK*5)L2qVhAt~JbFa*1F41NOcVgTBR2KK+TGdz>G7Xl}pH`M%vPAlbFGL5;b4 zd$Pj6_G1YXiQkSB>zF>bCu1%vZMweX;l4MOkZ-POQ~}WJnun*qbwBMr485azqW?NG z*M4hT9TFKHLNX}VJFzyAFtIm(u2=YvEnZFmOgF1N1@vTnRb-1iOv=c7%a)p1npzou z%iphlR{^bLem*~Z&pp%}V2T!rps);Dem{FZ>bpt#zq+g5JAoj4ehac3;!b|u-@r$P zhX<1xcwYp9CF5ky*rOa-A+_Ujzef^F0iGS=L!ws+l$q=fk@5pcn zTPHU&?oc%{iJgr!k9%Pbh70RTW35C@2UF&HaxWjZvR}>gRt9Zqk+b`HcB94T{=t)+ z&xv(CQd@i>4XT5>^O~pxk3wXx?BY0w2g-<*+-LqV8-3fRm$(i(ziTkZv6ic(#z^rQ z(3^W|w;PUn%!pXzP#x>^-&F2s< zorw)EJADoZCXa}_lN?1|R;Wj*w|RF~&s@wF3pLN}*Nbj&OPD+_sb$mjIG{Fr?PMWL zef2D1tPl&JWu)~$jW;g<IAfvkLk9Tmy zZ{v@BTFcXaG#x|00roAspqx8HKpRQ~FsAk7w#a`;A^lcPFNPe<_d!mR8YN@DyJbQ5w4G0{Gy_KA{Hjr*gO zM?-Vza(91MNrfF_XA(!IMLF+NOQ~M&HU3DhkUpK0jT)4!=^1|yGE%Ks+mPoj6Jo!g znpv=&@oTNQYAQ$mIA7Wf$pOemMx!jEj-y{FZDGdd|Zd!>V2?_D=*^2~K9JcnSca~(9 zOx%S{z|I|VU))lZP;w1Rd@xzFt0T<7HQzmHn6*OKUz)+fgSza2r&zVusrntyvjAP@ z7Csgq>xdRA0p~kQe5=92yc+(?0E}&iRvwQcL31+U>KFH;_366#(#j;D>x8HuW zwh+V`G2tIn@O{&4_F1h^zq~mal;^$R2J0J)B~tXF?XC=|;6GUgvn#u@7ZY%tc}g0v zEKVLm`Y!pw=+mW3(hMXHh?lgSa^Hh!SQS5*DR#&K|ME%^9{VAk$OC)BF4%99SYUOu z+hCl;5=+Hhrw#y1fFJVTAI*f(JqAaAJ+&#2)vU(;+$15$!+bHy@iM!MBCA8We9i|kP5|CB)4xaKJ>xlBthQU2VIGTsy zgnAwRlIf!pfKlK-koIq~%_oQ{eyp?WB?$K)JCU4#nf*{I)HX?ZK!-Yfp5pBNBwF?1&fEtjqK3gS&O}^N1w+!Buo}5AF0KUL+h)8SWPAcEp4! z-bWIAEhqhtk7S#eGv}c938q#X7_ z-eAW&9zYPw0DY9{mH0k~lPtqB2E<)USoVjh@PQ9B=m8-|h>B)yXam;>mVbW7=K%uf zv)Y}(`awtUQgSGPvu?(u4usJQqBQMYydaQBqgylP+iJebWK9S{%X1s_J^Y&=sb@sk z9%+;*^%>IP699+3_6!9PWv(;T8r}I4`I##sCy?7}exEBbfp1Kll0CCo!U%w31R#{* zldo)y*;g(&l|FDs%__WB5d#KM4K+NCmWMFR!`Fdl-YaK2k7IZ2vlMe=TQ9@b1Lw0B zX=|tAt+jUI*-@hY~T7w z5LUM!`k;o>qAc-8n`)XDhZsWD_k?hrq)pRZq=WK5h(ihW!#>R5wUt9ZBs z`JV6qakOR{nbw_eZte0#VLUBeZ2L=*W0!6jp`$;eG8$RIn8#9ur)wn39CVkq& z2pcEPS2cXgvtU&<+ybFKthJ>0QbCiGVq`wg4EcdbMoOb-(UA~Np|i`V>_p1~iFQhN z+m$C8>VOq{b1IBpn_T?;UBtRK_6rSDkMi()uT~_*#Ja1%yDojKWF#H|wa#g5f_Imw zI9nx1IIXQ~W+d)$_)?@dc|h}_oqk2H7|ORVFW?g~b(Cxc#Ux9tfaUim^x1JRfLYHS z8qK?BcS(VGC}tlTq6$E-pVB=#t#u!3XgtQ;1(zRUA5vLIF4NL>%bR5@ z^8!hPJ`2QC6Ox}=;=;no_!6UgSt(K}FhKIJGy(ETbGhYM(caPVUtB3$D*w(r9w4YX zm&Vq$dK)J@r7_6%qNC1Q6eJf4af2Bo)BWwRXeTS28rq1o5}_}cCFggqupf7B4&r4mC=ZjooS)T^7RQO1~M8gB-$T=bmp`ogLNaDe7(}!DijzJ;A ze9umnlD9)=mO>lE>k~w{?4@jq-WOUpeJHcgtx@IIhf+yn;jqOugc91$k zJ$sjf#5jROEP3q~G+!jyOD7~9C$G&UgOf3LKx707KOgC)euuYq&@t?(qo1#lU(y7SYT)$p z8a^Inc($yY&c$YQ6QN4cr$7!CB~MryO5{0%^PxNej;$-z-9V*70o>dE1=R6Yx4~AQ zDRXeMACdmSg9?qE&cKkKL5~Z`kjvSoa_z^GQb02g63h+$XPk~?Yj?T3OFDBI$8)kS z%9P74djUZ~NGpb92mD{LJGb1I?7laE^M%ePqEIwYSJNUCOmEiGv?jBcj4GHjlQx45 zyO<&s8_gAFZ=Zn5%q;ZdB=dBiGe68|C#jn7V_u@h!tZgs5$!X=5CdX*94lw4@942& zEKblb28E(HdR&}|9lMaZSV;-|=6K}q$XSj(3s{b~SW%#UXyCFqibKA#VGfiF|Ky^Xst4-5a)PumguSJcWlJg`>PE|6(a)`@{4kS7-^ z?1orhIY$&Rf6QZe(R=hR3HnO$?ivC#w=?k;zh;V!s;$e^C6E^P?EtkYpS%p&#D_^N zYsmZjEsCLOFi+l8Jmu)(2aC?DO@&Pe9Zb*gB@EM#(~V`MS>4*lmE01Y6|y4!N^3oFu{KPGdzj!@B&o;uzL?zo>)KXoLi}Ed zzc>PlV`48a2y(ECs}09u4I?)dk!;oj&0h;0JW$IkN~iK`MLn8JA{NZbi-sX4xM^95 zTz46qXdVQCOh00cUr~t~wqL0c2l3g{@lq)XN;=`7_Q5#U2wu&5lUzi9Lc3E?X9t!)v7+S&Ek8$twt-}B<{-1eRSu9&>`5Lx%K^xt|0=a$f!13!sQj4 z$8fY{W786z*R00ay_6C-vp9$iB+}K-LAYI*sKOz;S6fHt7!gcVBPP;qLL+d+I&hO` zw8151JnWKK9+%xLXAF?w?but)&(`k?ZV4&&fl~jJ5~AC@iLn;!E8zHY7lP*uG?U4a zDL}+$pEzN)^f?LdzZBoMDq082hM=YCT4gd|g6U>fBHAtu6T=se8ih3Rq2X zpHjKwN;g^^uRbk`^p==R(S0hfQs_I_LlQo6BEKv;x8fW{`E?KCa0-xcH)YI+aB)c> zQ!|0Fknm-fI({iyz+jt72Kd&|K^L^l~nI*4wu^;Emd>P9Gby6oEqfGz*vb$L+QUZ>up>(nj$d*Dt~nw4(88#BFmxVMwf+Y50hXwM%NI5$vG!ib^W@~Y!;nMwdf~`MUdX4 z4aJ}Ki%(G_(`u^=(=Umj{@Q23F8iWKReH09)lYjLvQ%^T!#bU_5GdzXKD`snQ|{gTZIjRkHNa(KKJCq`x&NOCQ_*zl+|Smu*MI98-S-{2ZC`^2{6 znYS7wh&}gMo_nFSAthM%1wEFBe=C+s)6C)pOILW9)9)}m5K|uw1w2Q9GHn~Q0k&0P zMRaOXlfXQRTy0+-T=+B3Ufj^=VWleV<5hXA(7KXTTmC?O-;zdFs}v#n`xdp`X_J_E zHqa;d(w)|>QBpsqr>%CcZ`T2Q!` zbuUg_)Yg#RYzt}*;s;y9;2cpq!`HiBvCf~`1D5O58bgU(Qf)7a?LpiDwen8PPAR9o z3}ddmQfzT5TXp`!V3>&swN+9LEl}9lG0Il5+r^;AIEjhqUC&Bl4m;zwRd<<}Zh!kz zm9+=tKqndMR4ar(!1JqTX|vwXFH-P$;>JWy=cPh=(2=P5DpqOy^O~G8ORCFU1$1D# z1r45-+go54!wJ4*Kcqws12~K6p$Q zEV!KeaiG~#;Ib~vMX_vx*D7G6BNWf%1a&b-f4_L(zX!+F z6J-Bl=z5u6r}BWj)r!pV!7xCz2s9W96#t`D;phnJ`|`n1=j}+X;jnRdf1N+(SL$Hr zm3U2zYxx^AVggu8N)JDeQ+mbN3Wj^hBYpe`)bPo z&FJ+lT6uefPw-Z#U>1?)WjW6~DsMf}=!~ep|2)ZbfmyfcZ-hwjb?bLD6|I1<@^#nGs(I5HnreP;Gq3f1qrodBh zBWmBkWw)ZfXqzekHVY<>a6iARhZ=@#(1ZEpCtwxp^S90(t_b9a?JXDO=?_V-PSY=4 zO9OE0T*OJViKH7}&tbfBzf>R$cj!}9$0=ck9B;eWb-9iXI9)9#SHSj#J~a#3^O2j> z)T?K$N<*{r2^36DZruaWD__zo6e`qHBX$-d^oA%KFb_Vfr*gu3ofdcg5DO=j9Bl|= zB#Rm@ET$y#_WAajm2y)zr#uTq*+a2*5;_?BjL3KDjSXCD%y0iqDk;kaN43~n-ui7N z*NNVI{Z7^3AaDRFYz~SCB6CWp=dP{%hn&QwRr(ILPwTl}W4|{B$ow8mDK{zq^c3OF zmxgo5jlYM;+=8K=%UH1vh|2>I1AaOw66j?%-|M6`KhET4BVEzpKsHx8s1ye<+(MuN zPT&tSJ;BD@ZBG%YuvxKG$_y$3zPX-%O!zZ-c?2VC>}UsN?FPRT1+8+4Y+}_9l5`TN zU6j2gv;^D)KiDBkPkB?kM3<6LkL$Y#$|vzYL=!k2J9crXEY7oBe?DuG_>RK$H=u&d zc%EDdV)^09p{@Mp(vSFV#JAiQ>VD7JQI+Q^;n+6X^Z`P$|FsqUcrj*Korcl; zGCw8CE1WpAf6#X-ugV~y3Tv||6Rc}i5L}?dN(pl0st}}{TEoe`yoNG>r&1w^>(wEc z5+n5*N(*JI1vdlN2n~)s$bk#KK1{w7pUOcVA!t(L1fF6iMWiIWjAUOx{nX(6qcIJF z@zTFtoBhAh!N%PgK3 zgEf0H0Ydw4xDCLK{^+5ObZIWFh(XwVpOfDoZpX~NCVNr9Pq<%-EyjHs-*XJuHA7h5{ zy9~$9Mq9w_Q!Ln<_!$JagipM=VMyQ#NRvB}uk^$dB~a z9%fHCad_%rXZxuw*vbhuYGe9tL?_VkNc=|M4vSr~qNI?|uZw;W%GbdYabG+U+|v^uTL<4(zXpAr zy?9_{l^v-_>1=>c3=#yjV<8RGSFVbU^RzzZ2BiQXfk?{r|F(`Bs?-+*$A?F!`U^fw zREX3{)z)~>Wt{m~=a+JN7%{?%RSltd@??`JUD#u@Otq~)rbAJGkDLsLMc>5uE1#jJ zEu*f{E1#~b%k3BB7Xo{e3^3j;*9>F;Fyys%9FDX)R+V91>0j?AgnencH?^b|Zr1%* zAttbp!Q%P%?wpO~TJijGpcvVuO*$u`gtwgq@`?7y0Y0{d{B!pBx%eL1jJGMXiJ-o13x_Ld7)_%vUBLq2QPH zv%vmCfWwp2Aw^iJkC5`wZzu%pY8vWD{iBjRp;G!17-J(bmZj+RX)ZjN#4w-_QP}^* z+C2bS(zJ`BZcW>^ZM&y!+qP}nwrzW+ZQHgzZTIQf-~RW%&pmPC-h1N2ii(w$mG7Gw zQB@JOVr4yPvEbk+rtcIao?Uvn5udNr_+YiC*$Uqwe70OnM3KPBX~C0Q2Y*j~+PNR5 zIgUZn?5-yq`~!F=I9Jc3aE*OQvcsVtvQQKCtXvEEB+_e2`X`QB&$P-x-Fg94)?4as zrPi)`{6>;?ytW>E^`)0+*Ry&4a*SIkk1+;sIOX>wS5((Eeho{2X3O{W&K@)`1?W*rHJKnxTY16xa! zRAC@VA(`6Y;qoE}7L}1RM|`Jz$_|Wqq@%&ufi}_8FyR(*$zdWIH*)ENAk+Kcp;hi* zR^|c;8^0ZSb+>(Z?NTjoMazzy_kj@vSZxP~T*b=XC2OFfxA_ zWM<+-i!zes6?n865Hn``1J}@PT-Fl=D0QW2DbL(n6BQ_J*)TO#vK6r@OcMO5!6j#+OQ1;4{}^vb8$x?#r@+-X)NBBKnN#k49vlGvt>|TKZud#!FQug|_R` zf^hL$JnXm7v9~Q^a_+AWfSSxa!Df_JKXN0x<{6Zcb*vZVyU}|sJd>_&VNI~isaP3_ zv^!AhP)0qz9BGKY@zm$+0VsVclC6Zn`b=Ps&N7H1>syO@UgxT@6u8_Uf^o0Frb0#2 zpq%R-pqAu3q&ZKV(9@DjiKD4#=$DqX7%#vsz$^E|i@S!#Xv|R~l*w(;YC9`;fxJA? zGVFqp0{vLO3O!U&Z^8n%-w$m=C{a`mo__ko_E4C?Y_}}|&fEQTnbXkqZD2U9mcC1- zqF@r3rfo?--ZqaNj_g$2XTAgs=^WRg3woc+sl93CHr8Q7u@l=wAr4a<`tIQdqlHzJl$XJ^P_6-)vB`- zUzFsKbT%!s336NFo|Q=0cPI^toRcdk%k8U^wH)BGm@NA#gOF-eypEUOa+bfttx$ml zA?3w|#f8>z7xNPH@iUd9Ga&5T^n;;5*>}aKH8%ZTy zX9##}cHlUHLykU(Rel?=5?X__^eckF(C$qhWw60V_?g#_Bp9m~uVh<=wbX8Yj?olW zhd&G+%{jemrH|4-=b!HAb<|s12_YPo?-8L%M{cF$Z*BG)U2f4KX#(-uoQvXWps~;j zh)i=r7}M`(K-R7yiKc7KU%_*#@^N1E&iKH9j0^G{OB1Ec(gR%J)a;c>X{!Y2nGgBA z0*8oyYx>I@ElAKj-Br{IT8;oqLysX16B;2iljY*tC_%}tlvu6D7;PJ~kQGGkA9P++d7cpS+ysO(aYLI|Pa7WS(ZaJ!SE z?|Wk|wGPnZ(xrxE0`8YFk#?J@A@K?7CtRF8+7X*?dIq9VB2hJUC1ZG5#Xwv16jU8? z#U-NeEpSEZTu)2ZJ|5wlSe$yIDVgz%>p0_z(Z!hzpPpQEjDM4OjP%8mye|(REFjvm|0c5JXuKEe`Uh! z8Mm!jRv(#Ow~sJ^PGDP1yRWJ};lz?6)zg1pqjfO`>Ltc#W8Q4}mct7oTJi){q};-E z%~OaCiR&_{;~Rn?=U-rP$CgqDuX=IxGg*mqkk}4lZ;j5@HNs%&-NMq4Fb~t2sg>Y! zhH9$uJ^T7NHO&cw8AhqvV|?W3NoRgj8REu{PAD&!VYwkbLVy%f8?&};6)Tl?!C?Gi z3t-=19b*%E;ej_{WbPUD4+bJ>GZRl^I#s5n*kdR9bH)Ytq&JGPerI$|herNY#bck3 z7!{9BGCxM=aDnldpvO#sYCK@r_vmC%nVN+>i>C9I!9yZqS)`=i7LqtFe_+Z*&9 z_xjEp1Veu|OZJhU^yFMiU9ITzhTVkRx0H*&Xc^EUThjl9I-_Zvx$Mu7KD2$&ahOQF z1m9$tDI}TkU>&SKV1j<+RoIO8qqHhMV(3-=t^7l9R`}7x_Ag3g6Nf(4N?aCFv1~_r zfj?=A%De30tov2S2H2-|ccyU`xx?c>pUFL!eI5u-D5A2tTMupxImO#I8kGqAeMvOP zc1M0ZPCyk04@*j^)qpNERhj6V()_x1`)})W05te ziPhO>Jra(uPp$Z^fN|fZruazwLhp*>5D(6}n(L*7wjFhan8eY!yl9Nn`3Cu)gW9k~KE=qItkkK-#f zHeiS1iFv%SUKZtnWdY# zCZd51{+oA!OmTMaCD3sk%CN9o`Xqvo_o%~oy^DLi+jxa}1*C~lcuiW|GWhn(y$FO8 z)CqVgpnDN9x;b4YU`Ry`*Bs|v4iT~~Bz5DM++tlBYRB${>jG@zArg_PDPm=k(T9m2 z^=ia6>^Q|Cg=fdmh<86q%~MODbym#XPIuIb`VqhbC(LL*{5t*IGff%~LSDVfVAg%f z2C9Bp{V_0iZIaTvefeF*QDv59gU<&jI@vI3l3b+{iOBE=O`1!YoI}MceCb`IE+x<| z;4x^%P~Qb~3swz$a9$@y@DU=r&+AIrjcA@JwG~;}YTTvCsw{rV7?nZ7I#(gr7nTW% zX}SHP3(ohpvZ-Td-atS4Bi-V+)cLOu4x+irwC{z663BZp*(i`J2c@AI&+Z44*;Q02 z1gbKILpdR^6MV)_>rlH<^)kFv(;fPOgjw1sgM5sIyFLV~vX+99ZnI7c(pXD)ATFCw zhrBvXew4h|*RzGVB}>~}HaSK0SDoRiVHvN{uC!Uuhz7`AEMn5Z_2X{t!bgEj(dcs7 zAl7Ei*5{`kXO4pez`0QDdbM?M6mUdL;0heIspL-Lr;mWQ<(}`l0u>Skq?Nd$=Zy1< z2`HEgUZoT~x*}P^v*=%68#Y8#fo5Hdx6#9Aabt-%f6NcAa-B}&M_`CzeC-SAST zDL$XkT|*2?WQ>d!tkf5@u0YOjG9SP#E*#UsPTWjwi#FH<8L_h(<2UM>ccC`TZ&MH5 z?KbIcF31XM@+4%UQJezythLdM>9 z&chzZmcH)3i}%VzwXdM;Wgp?l2BpZCaLSeVMgC6c%PrZ#ZlgQLpz-#qc#8t#z0zG+ zo#)*R?rW@!l|r5Ph3I1zs6l}tDoBkt(1=KR@MP^)_E2i-rWWbLE=)~{?hdu?0(2Ks z{yvH`I@MH{Y4XPJB`9rk8nJl#{RW0r8C(;F^C}KVb+z?FXs`f3A8z!_6J*{RMY?gJ z^!LjVQCNNhSVVXJATUh=s?cU#@NN0VB+KYyK`G)XXt9W zO3)uUH)66>38PvKUN8j|{R`J19BdzesZYAeqi6q8_c(g==4L~fP%RJnDV4FGu9=}C zo}*a>4ASuDlNtKxafC5iQotZ27T|_M1JV8KrO)tCr1j-xS!Ti9NUOWm3y7)XrNE*(a__U=l(V zaPR*2BC+L1PIT4b*JUC>(5+jdIUkeoTQGVyc3YMlmjxAV;GM+JCI@x}6|~A2JO=?P zGzM>mMAn#1c6CeFk+ysS(`sWr(F4C;U#Qn?E^J7V)~^jdp1E*Nxy?~Lp3VD9i@PHW zBO3HxsQ^3%!&Y>`RaqR|n(IBK@9SBaK@MldFdtBrm+}+FU#!UNI0sX33nfz^di!mE z5@ifD)Q(ex!t^i(#iTL+S$k>h+d?Zja>FfLTZDNKlw`Hb22z_EGq4e-HTaaKEwFNr4pCB6ic~ z_d?fDIYabFp~XTSgn*`9Ig-T65rS2>NMhE1!!(2Q zjCBuO`iehQA~$0>OR{6-XI*Zx7z=Z^+jx|JmSCC~dZw-I-v;F$lEUsTt{s&zVEC&H zq#yaj0dZK}oG++9m!L=4mz`yCSaWR17!ND1ba=J&R%2mWOG4=N;f}+jcSGc>?HTsv zV~3U>hyi@4W+IP?mo0gsq_OmeFlW8|P@$#I8tm?N7&W|5GAMb+T0J%8ffQYuaO(|o zQFq~eRK6kh$pCHvJgScyjO`Hw%qR1)1H*_?dsa|@Gkht;jX1ZowR6*${S_la8x7bz z`4zllD_>|s6;7bKk+yf;;-PU$7=%d@xiC{3pyV#?#HcBySBXqeR^s3QVI-QuTf&nk zJ-y5qf1V@Hj|;lC&1Vav4$Yrsa2l<;k)HDT&EQheYvi}Z^rKrzm?Lw9AaH*SoILR` zM#beaS-2@(kr#2%2ggR@AMdd>OQQnrq*)Z1Bc;qlovjHg#@pmh9*6z}raSH>kB+kh zUs!qNNl{~X_=3VIJ7Sc9&lel;mn8R#UmP^>;$QC*WXV~JPEXi}q)&;Jvtrg3`#*pHrFx=O|SEhW#DYuY!Q6ITZ^~)tsbkTlxe8&WislU=dA%@yfk{#v~5n1QCw+pc82@i>;PM!(QoF`rb1S5kyq( z<8-jBro$D7li8cy=Ms-9wI{i$CiL!b{bu zGOs~M#XV%Gje?;P4X9stj|SN0&>XtwKE3vM;WCBSZ-R9(R?CK;gvj#1hN}aIT&E;bRj^*^r@(@Nd+IA5Ra=4vnb!8F}PR14o%fL2beVb ziAHyih5VFt+sJTuv6t)$r_cqDcGAMBh&;2?RgjH)dd37FuhA257X4nCVC@tj^->hC zZb$Z(swEzYY0ghr;Np9JfO_-fXGu;K8wdc$)0%`=8R#Jcq8fYIiAFb(8CW)c{)7)= zi*DvUe1Y3#c{muhxiWIwrl$40HYMPb6U;*eHN2CFu;v0jo{d!mvIH7=lSvDn57Ohq zQ_}EwPmlk=u98(v@JKMFo{VIy`iOkz#t6eEz_1`TiLq&uii!*q=V|I0oQD@MT#Z55 zTVI8t*TD^)yR2BNur>W)Vn96+yW^~DA~C?p(yP*AZ5~o_L_+WS{_NPj@kra%j&sJ$_fkIOd zD2WMw@}$}nxjRB& z^=eXv>5$}q4U2y=&h%pmqsk9B{DMp|z~3pAq#)5$Z@KMY-YsL-pR~lW!Ozb%yZGtb zd@^g5>zC*~oZShvk7bD@`AO_i8l=C< z$bbdZ=6O_XY;<>V!)RXXV*_C?4~5>^xF~JNv5e zP$r)dhFZ*kuB&a!JpB2D@{1E|E+iF`=Zj)dl}jU~(%HcTsEgnv!fMJm^V+~hT{mFl z0O5q%LNl*5&&{LQS8dM`(1mG06M?ozFWh%zjqmNwVxa#D%_rZf@r=aOxoC@@qa*Vc zf1KHO##7N%(@deuZ3qV@U{*7gQ=u`ZL&z5ZLNmAA8>ZjB&`Lc{9hf5Wbu}*PDtBWi z4=HZozN9Ax?s_nwc7eoE$#~-d30#@v&keM$3O3yLBw$P3!)*B;lY_n9rIj<6LGy&X zy%iY6ez2R)4`L_BOz>EukP`nS#YtUzt57ZOkK=>H zj}ayATB@K9Ur+ z#u-cGvtQ@08j&gdy}OS}kRD!|^+E|(fG!#j_y%&Hso8iNK$|>Jv?wD(mtpy7IxA)g zUPf-3iAnp=GhpM2Qg(6tGD=Dw3Vloa zKr?~q2AFQ|XUHljI=E6+iwdNPj8Gl?(l26>j!nPX)}f<^-ffCjsU z?{3j7pKHzW(GEBJ@f}#H*nv6970K{CP%zNeZJZ5_`7ukvf9ha!UzoSKDLXL3zY`I1&G<*#8gJv`zFW7!1xuVu z3%^eT<7fNH^k3|zUDA zUx>@tqRU4SD@{_i3sF4lsn>9OD^ROmYWr!+Md!#t*p708*uDrxx;>2N$}lXHfI^gJ zji)vR905irxTdenY247q!IIA>?k+8XyH+r%(SDaQ-?-1Yc{Y0F;7F5MJD>V$&_b^;d!*$M#o+nJy z(Ds+_MK|&bwtLz6FjRZKj)!iD>Sq8(cL{&h!?o9#{;rzO;g1&c!_41LwFkIJg1h;M$D}`# z1uL7|Wsn`sa7Vr;ur7$jVh>+P6LUzDN2G~^NOnB(=cEW}p*3<(zPNm0Qx>S#RCnf! zb}KJ%rf&Ysp}aif=_{VR7;=r+*NdvR6t_rD5`0Rm77b~R1dt4*EFmeLi}2B#_Iz>i z%JeF@ng59>X6ZDoh<8r-#lCxx0G=T-xnI;vVV zH}bqD-HF`IX^52GG)-v<=D4rYO45>l>XSRtkHhHFJSc%>S!aG?DP?s(D-PtyulUi$ zG${xVB$YDB7L;}Tr(O0~`nbwEFgNYkTKECW4U8JwSnjM&Wk^!v6fE}BYZxGK+gQi( zQ$ksSXgoOY5XjIoe7)Wh+bR{|CJL=v2cyo|b{?-b8_8ihhjMN=9*!B=gngt2f?r{7 z^%Yn;>$AC#zU-r`Hu11z@@Nw5&69d^uX^%YFqg|3w*^@oi)mixNF%{jBp2Dn6Q>+x zA}#h3YU_T`8u?Y@(6;=y_ux)$Y+mht3{7S&{s^q@STsVikF)6a@6~Xw`VLUEo{c!Y zPag(Nej?Lz`+SJeVZ`9s-q&Q!*7#p6kZc{GqM13)e4R<{2XaxLLNI&1v_M(3(^N>y znP#g+m{C;oRQpuQ0Q^y@S7QaF4wo6x7N*`|{la6+dxs@wzf4{dm)^V;l^&y-9jda3 zvn$gD)947t;S9rSr=l~_rnVUkW`FWU%UjJ6zeyS4xFS1m=uKEm2&~(F1Xr$+OFvpN zD$kU-{ajqvM%u(gMKD6X2%AyQ(S=<-rGpsPvl_7jBi^@pIgv2+ zv4VWi&xUn|P7yQk1j+3S;X{x!tLj=c9F^u(aW*F0LC+UXV}b-5Me9yAcLUsLdXC0j zE;E70McgA|$D*Vp=Dw7mGc>)}@_# z`q1L7XCyJ8v?WdJi;zJNDba7)XcVm_jgE=LW!Wy-9w0~^0AnQE^V30cGM;neK}mKh;9*m>R-!= zS4hxlT^;*z#qa_wOST9$KInszrjSm`T6og-m_%KUq1tz8B1F4PTf2X zZamex3Yuj%7I*WPoi0!VVu*hTe)M8qXW|i*&2GSL`eY~rgcuWRvK`2>zA+YvH&k3h zmZ3Z|LLJLM>t*?J`F*e`^KB99QpKw4yqHQ`BGw{ZRU~%e(Xo{g9bMiu5f=m%c-&S@ z3zR$zE_B9Ug>1*hH~8x9L_~W9l{rANqjK zMcauMGgVT&HZQQsX5qDiqe<;%y(k~(!-GM25Tl7;i+QKQOyW|Ij|po$O+}~wa@(uDk?f`=D;+@aa<+Q35cXl2XJ@6LCdMU zk7PWm@TVP8T^YK`2KLT#7DPM@*tHy{kS@OBUaN7q5(^rv7|h^e%dnRziy}7%$$k>D zAu6qArn4pMx><4>F3@){GolkLARH*3O8k6X3sZW6K0!+W2EADqfW%eWsZCF0O747pQ~S^>lmGAO;oe+v%qyQNE&$XOp| z>np?o3+|+jV|Kq>6DM<%&nH+lTv@(ZpJ)cT-%xUGN zJD}OW*``QQy+NzVr2K;L5m6tK)%wBSoogwRONA8EIds2ZXEUZffKs20GiMN43s%hh z=T|0%V!6r`h0mSQPEKALUWMOrKj58zxJ~p&Ym}n&>&3u)bNaQ8gAlgEGY}(T`3lf(S z$_l$Jo%dxsvzl~|=SGvfPS}Y!Z>dDmJ!~3Rv;%tu^;h@fd1Ee&hy46S-Bv>GKGP#Lgjqtoa>tou5L$f zzpuB-MzFgpu-J_BiOaCf-H^>7RGIY5fkdU6g%qvFsT8oP^J?;5h-!FytIbwRPTa|1 zY$pCYEaUKaR6R$NS!MrSss;pfPmA)~XHhXWFR!8X`f>KIu26YLc2`TGr3<80YRb?P z<%&ON3;DV%QyRwCkYWxHNk`9e!r@oooW^{QCcoo#6eNd-&*EPT>8#(;9qB5I_W4tx z6%9EY*U&&r-aS1)Qg<3e3=5%xx(82kY9zBvL)x~nbUKra0V3haHs^A8Y7YEI!s;8# z=dBfnh9oE;m7fu$BX^T8DIX30r%4f{M4i;EpI-ux_p zJhHNJQB$^<@qa17g?0bg@0kj{jFY6Af4zh(XiH|K`1vXzzu%*_Ep?gsVD{7Z0om;g zgu6MFgnl1z^n+fmyVf&-(LAIQ(}13vj2S}al`@N8G_|W4K0pPyyQqMsGF}#-#j4*} z*eV%?R^PD^V7<%;kKK3vTA=DuP1}YM+K0x{LgBFHs(@jho4W2M8L`x{%pHAI-<7!x zetSr;E86*rvCz<6Y}gepFg~v*b_hI=~-VY&B zwanN14%+YKynBDj7%*1N9#~HDWK+pNt{^Y#H^6k(rtBbK7OpQ4;6ZO927=YVylI>KgEeR7VLjN~58ddM6eOJYC zohoD48!OJU-EPQ<@cf8S0L7}ejf9JeUtZQS_N&UpvDh??PJ@I>0xRh-O?5I75ipxw z8go2`Jj0@*wrOEwP`1iWF6(Pw78K(a$(J?lySqthACG%FE~`B>km4_=N&RYtzkr7cvha zlj9%vfBAP0j4(FdB7k@Qo}4>FCKNf#i-%M)L06yC4bs~_VW-aql5XSL0z+V)V*a&X z1`!cJmZpI7NTuBhlWBU#jWjWj;mj^v21czGKXjhqd%{YaxCN1`NEpZlY@R&hAjzV# zaIF%(Jz@oVmj#&;aE?Oqd%SlPRXLHpZ#gzB#IVnQrxV$|a;Xpm1>F^a8tE;yJB%rY z(~%^lN~AD)qoyf+W7d$L3Jc`IlzL`US8=L&wbj?&zb_B>6Gz^-JN|daQ_(#H{w0*W z=ZyEOti%9%s~)IIJL&T=#&pnSgzv9eG(8zJB=2#lU2I(dW{uIgi^N&6AkPO@I#Dcr z9>sZ;DL~@xwJwfc;R@gKH}RVAR)T#2L){eb?84J~geVgS9jASEac2)ggA;*~h%E8l zoW)w0Bv{`olixT33+2Cg#;b_>uDp_5urX({*=}M{@d&Fg2~5(+);cVGG6CX5W&vgapwf*N zL%3Y9`4xNloD9)(Yx;|LBAm)U$?9b-gW2IF-reEcuS>ra6R!)|{WcyF&qM!wc*g#!Wk7 zpoKi@5|5JB&$(RLtyZWV891mRn$FJ2i|-{rSb3TPj_U`F>$f?@FHXimyJ6P4l*)0V z^FGo(@;Iu_5J{{3Vmr^?wI&3Zbej2j=>QdetdkCAYZU@z`VAY~*vf&Qs^#PO1KUEV zxcphH;~v84iAjJPKK{->pQChyUIdF)F~Z=5I|2j(F}>v<04$r<7qAhxHG0ph`+ zE5C>1o~{PEW)Tya*=F$}t}{8zVn}A0VVE7YpOUg@F1yF;K?A;{f%i&a-tXYf> z5jcYUf_7wn*k<%sYem)TovgdoYj4ms*7d?WIZTdUrH(nT+(Gokk$BXaYgS&tOR9sb zHUCM;^x%L+HcLVL>jnPp;o~nijwvzbfrwu!WDWGfQtulUt+~6tI^2FU3%^cElmcGF zZD^NgRefe<*mPM+1_dH){E>d=I zJh-+bgCTY}DWuaTdi=okgrq06s(45P#O)^BxyRg+P%8KWX>5$@aLM!il=ef-aY5R* zLDaIdo40^U9#2-ss;jp{ldG!sLc{}pkEeqZ8;NJcqXR9)k zZE06ighx5CtJuAfDDl2W3A2)rq70ar(I8f1s@v}+$V@JY9)xJ4uvO+{v`WcS#MAmQ=4vwtFrjj#IQeaQ7_ozKC=h z)?<8u@4SW|csII$J$N9`B0|Bz&m#EhU%-}oV6guS568sD@C}CjOI-Uu=Hb3cHYt5a zCqXlP2Yd#`?>$v>BPTP*@A5ah_5aY}1jGbnRD`LN6;$Q)t*pLRkhhhh`RlX&FFqU- z>tDL=zk_H0)ck9-{EmjkHct3#fBXBl568;!&Bgtf568&*ZM^;4hx_06{ojQ+8V=fT z?(QEXj*b1l8FB32J^fAgpGF+RH%dmsM9+f%Ey>a2b1?sJlsFS}Iy-#_V;d`D6Q_Sl z4(6t2PIQL0*4FxT|Fa?IVeDW__x}#b8UIHD8*>}u?<`ifHgx=S0(63OLf^ie2%Q+6 zIGq%oG@UG+9Nk}MPKi$K+nLj#GjPy1v@~}5k74|0`JaLOL(mz~8Pl22nSMib=5&^H zR&>^M{}V+==R)U7=SJsF=kecBx_?}@|9+1C^OXPP{4`k@*}u==|E&)b6BGX5?QcFt z7W)4v|NW-NXZfb${=aPhwEp*azAqhoRt5%qR#rBAw!hflcbSFd?-l!Z?_YiWt>Iw) zOCtWO%{N>39r3sRZ^S?O{v+3S?cXE+ME)zD9-sL;nwgaepPBwU>U*qA-zei>T<~9G z{#*X1)!)+JUjF9(8}+xvKkfg<{LT3H$luz({rxNcZ_9sEc?^Gt`mdYh-&7vM-<$Nm zs64j6aN<9^-#MB7>li)*2P+fH{|_q9$U}EwMkBo#$fyOs5z1}s` zH@W&=uR>X&v>-qK<1dy6Kot8`{*C1s>6<{|f4%KNHnlXi01wVJYD1ib2P95?2 zl?SuHRB9v*L^+#>RFju z8vKzpm$~A^iQGu%D6f5Oq*1)+CjZgT!y2R7yM z3$CtjjvVEMcu&q;`=BE56m9QDW%YIT?M1%G%F2$yp}EKg^evP_HFXp`_BG&A ze^&;+kowZdSixw2SDfp1^40&e$cCY@$_AL?bNz0C0SHKnD)YD$g6nJe^`p_X=~)$% zRtB}jwIJzoX8@5~l4gw&;F2^Rnnr{(7yH9D_4(`C`%~7;9?jCyT`;p7_~!Zt z@N>KV1wezJuS-;O{{Gka#>`OP+WyzhO>W3pk1yHFmp{>=)pIL`K#Pelgnp6fd+SV} z_(mU&S%KcJl@%;KOVj6ix$mg5wX|Q%5^76NchqNPIshlB$k5kJd737==IZCXM~iQz zUkmA1`nztzXEJACL{wW=0Q#iw)q<}&#rxrw`e6U3t-)6zG6z@Um-922pxVk5&W`ZY z6X+a6qaDD?7wCbJ!R-sL&>I@`yl?g)bT$sn2H={nq>0h1>h9P6OKswnZ%^1N=6d=& z6V=#MNDHa&@VPI;CGx?G>Z?6FwUN{_0U)9wJ#zACDq*bR1mFi!T3*&Edk)m_UMk`(Qr& z*jv|;A*2}vnx}}o013;W;db-(S7N2>+qrQ9qCt}Arg(2<`f=?>>qKwa5GhNf9q9ze zB&*fhnVycE%!oY{iHyCBkB{an0n($O!S!cv#yx3AMPIyxz_1m3BsK{0M=xvK?k5ljn|`nQ)|Dz>r3PQUoRI6Oo25z}yA zQ@6}p?A&InmAr3qE{I!BP#d%!V*k{{G4KZ+Mp^xsgLrkY6*D9##@gukRYnf8T7}_n zNyRXO3MibdkYN>sQpSFF;O9O1!UutM-FQ9cGwaop$6<$@rr|1`5cpmm z1mQ_NLpQED`z!7tgR@<1a1^3KZR#+)(A`10XUr%`!U`dya2R}uLl%ChBVZg6~ zYa9KqTuApi7P}%W7NOjQ?s249C>~)ET1x!J$XeREm#MTA_74Uie;O~N{xO;*;c29& z;g=FGt4?4TfiiL#NrR;PcwPo2Z{r8z1v;GXUq87WH%x%mz2LIxa|5)y&zYMY|6%d8bH6x5rkZeg-`7L`QUsuYAOyf^NYz92iR%-$j~Kw;hoOqs4j z$57~=Rm7j?dNM0ZJMy5|#Ozmxp;u`cdUztypk4deO6Lz6*j^eVH5HH+4-cNeKcuZoa(hiwsZ z3U|7%uJ&?RDl90m!g^Fu6+gn8U9DEh(2|ah1lriF8^cInmAdcV4Rvjh1r3DGA(F>c zj_iBI-Ypr~z3Af~lNUPJYxq(=XJz#LGS;L+#o2?{VH{p?W8Pi}B8tc`3eIcPVe!Ea zDuA;x(~UifX&<{H^-RSu3@<1Qo1$diM7Kpx4_4lZ%ZAnh|P!I&VIwzo(wF zSWyEKOr0)Mg`qRK#Xtr3-Gy1MHgdVIC#v>vzp3gLESSmn!tu*27|FZx8@>j9zY8ov zE6~DHuOkUB02k9kJ4((ob4a!+bI4YL){I3|_o8erVm1$u4x|pJy85%){y`J9>#1FN zTKBqGq1h7l5P3I(pUQf%5NAq?u$2veVO#>F!g0GrOvbAYniPppdDf7_CSM$)T+w5a_Nsxw+~-`04_fy01I2ffzcyx?t}RL1S_DBB!*z zN@d@+n3!gLyZ~H!w&;~dudqbDg7+n}FtSf!$%buqOuLC5za?3>KF!&gnm&?lY>?Gm z$5TIoy>yWOkon8Ltck|CCG4IJU_Y+VuT>p;Q%7rC{%v4?KCUPPFFIZk7;oZg{Sbi# zzdld=di~yqF>{?9x1d}VF4b>|;_27!nNdOYpRL2=3*X4bnH*H&GpMRjfTr}#-?6PA z^5iWW+EeRjoCPFI%?9mcETohlHP)B|?me%I_6~a5;Ft|PGZ=_*qtOK&Md=k`p^ASl zENAxxGc~E7vqKI@kdB4fOtB^h{v1kchm=)(v|V%5Cu4&!^YosAzJ{fA=O+P&M(|pM zb_5&G{hY^YV7m^3?nx)ZQQ%$Vz+Mp5+3~7CPg?$F9^rogc<*|st5+q*?l}nYn*dN( z8Y7zG8RQYn0v!pguzio!hR`Fy1znAE+DEr15Fld6hd#Y%t1GFY4Noay!<1utg$}*F z35(*8dt1272(feOj{tB{^J|kEqp7VkkXt1;cw&~8%M87O*d2_Ig*kRN>GhWsrL$aJ zsq;$I>6I&z)Rs&D-xp@YRZ=`@;Iqzlkq&w0pMzK#QB;qTc8@L364fN~mS1bCIGDRy z#Z+CYw)_k|lFP$WtomUX0K)MBxt}aT1&FNBo$U}akmeRT(f?{>o5xFPM@AoTI zoglYmLEFnkO^85E6Aw`-Mb>y3c&P(_&(SxYn1^a_5K2sH+NNXc&Sz+}z!6HC2a9w7*8B45_ij=?xu zVugbyr_+1Roia@Q9>Hw(^N(}e#rvxN}_PnP`GD*dn$8NI9Io2`*2*hQNkFsdT_7<}(7(x~Zf%>0i0+8-IY zErNcp%1J-PS)AZcx*#No{AmJy>5U=Vd*Z3tJzF#;TCj_Oi20OiLZ;C|xHret3Z% z4=8LF4~_#>vGLA*mQ)K&`1u$om_ytfaDDDB7j*dQ;#s01nOJ3tKcXxg8VoVENb$$~ zubX{tdT8yI2&IA!DG}Py>gN>){64Kf<5txaym59&Vl9o1C(2rt{di*FTFcYT_wk;Q z4?*5D z6o}oRgMgnyy67U6#FD+?UWTc#(F-t&BB*JnR&WNQ2EDZfHv*>q0*CAkSHabvOhON) zxTC$S6x>&)Ehp)QHfEjBHhNKdG=t@ZNKD?@kLPc^KsrZRP~Gg}bn3&xbvnh^DPDVb zS0a}?%Pb1L$8>A6Qa6f z{ls+SNrh%K?X@!GMsIwBUe`7OUOfRD!n9$ZTX%C_p17jtii!{7U1&S9TR2((G@qBO zR{6C+B7-qf=_ly3T~_@RXh4C7XoDD2>XnuJJ|nnqX2uGd}RIwqjg+8D_Ti}nn*AAx2M=lmgl zf~&UnQVj0#npJYuWXc8_6(d}BaAgi3Z`{>|hGRAn?9%W-#;oLHG9U)t;l0(gbDx@A zewLm`V9HvRf$ee*B&c`xSH#sZW~oS!OZ*ViwX4}V?lb{P&xGB^(T8m}q*?>b<~liP z<7Dp}T8n+vpt*^FQakFOPCOua0_?zr5?~Oe!8*!&ayT&j4t{><{1vZ}S9NslJ#5Z+ z;g#lPr$0!uq82QsIos5a2$z^O1Cw{;i2Ejv2dUhg*Wy_ z_=+Wq)ehJU2=BcBzN3!MXz)LH>%4>B6N_fhYH&7{Vlp(ibCxYuF z?F8OqX7Zl*qPcp7j z)yns2S#iohpYnc~yza8#$FRpH7f=+MF_4xACVm<#CYDPY&y%^mcCEIFjBh@$hk!4V zNbfrsOcdoZ2?5jDcDu%c?Az8Bgb6?9XoIuhbk5hWB!U_#+z#zfezXf`hv=-g4X!+gSdlgX;Dutx4l#x`aN4}ixde%{n2iwk6t*3)-)i03M7DP^H|HIW!lB1BDn^VLTd{F7N^X_o@Ef~Va@fg z?gfx5++!sRu1<4|WCXIF@sPJJU(wKhBxMc^p@Hb3$t1_JNL%AyskSmIOKkn#TCD5A zZWbpI(`E0Q^8ScA}B(OQ8RrJeVR6XvOP2i zOW~${Uu&5OQIVh13a9aAwTX}aJ)KfpnbG7t<3y$)YgCC3b-Jj|i@cXWf2BaPZ1Nv5%@%#P!q3Wqi3mQ1I~PvCogPt8GAt4YII}@@_drtPEU|6eo}*U zbk*%>=wB#d(lK1XEP1U3HYybXGZ*d-_1l=&U64B?=qmV=Ni3z@^&$tfmO|_XR@Bu9 zflM2vSlv~>=%rR-A`<;)+lD;PTfM^+2?>K3X~rIs4h`ZqcQfj*{Fh#Z5}D3745Q-D z(u~p;HOkN%_vlNyb8Yd>g$6{fIH~ol_gt|E@181`J0|^Ymtz}>G6jo09Ts7S3J7AV z<^Bj878%l=)p|BK>Cc;TcUQw}*TN~yW^c33Y#ay~* z5TzSAfa|cAi{9VcY)7W&!L_r_Kg%5qfzlU+-1o%p_W({0G$2(G6hQ z9}a$nKX#NBn429XdLnF#$#j{^vgKJh3u3Mz_sL|fPA`CJoX2g^=CLy@E8Yo5R#uX) zRgH(nSu%GX+=gzs?qUqfiP4B zMkMIEVbR&8BoQ@)d0}$r{8-rp-%M3C6-ov?U0`JD&|}fDA|FQ$!r#I4`# z`z$IPE0ny47bW;A(>w(xRvC6YA%y(L!B}wN2|s7=^{kgX4ian}xs2HVMz|pIWfj7H z_g-9}lHTV+9|4YKIZzR=l`#M|tKXfaA(YEAb)P}c8&qhc0`(6`em0?932~rPZN!ES zgDWNI!Ih{v+lbs>|8bh?wZ{AX!dtfsr}LS;;KXPOQI#O0Q=poJw1B5ibnQ_g$kRTQw1Q> z$c||qq(ZEKq!w9GEH(ot1*Fu<+e7Cb$cFWt-O;+rHshmj8&`+MLqDCW&|6|}r%p7T zx_TO0b%vKM7+65FAH+S1#4*i=uvCpoFl*ax95OSzZan=DN!*Ql@Lr}0nlm#^-UH~T z-nhYi=S|K%(;{C;i5593Zil*gzB{up#s%vp7qqRMABoXS%UN#+%;pam@hMcsnnw(K zlu0MK7x9@LAi>f;%*INvw3cw#2GZ_fqvXzQF)T@Gn^Za<$(ekFBm0pY?+C(>ZyIb6#-f~n}T)B17=uP5bc4F2F&FZk>8WD zu&ljS$A%Bp=7!7csX3gN{X|S4Oq@oVT%}o#slG2f0@79bqb~EXBdzae_kID5VwKFw zDVsUt*S<1__xplLA7wEWh~T^BV$vTGC&7UZfKElE{qqnUnv?ojM)}lGA2}h{nw9bi zP7@L=8>Y}EHR$VY-(0CR)*yby0PY5n1(-#qL`Ja+$vy1!dnO-hUM_g1ZxF+5+54?X z5~xb)2dUKKMMDRT`y8U^9oAO!qJA{)IXYBE9RK*QzxgWmzYc*>;s*Z$X@-#UDF=TU z?qz4u9T~N>jK7cXUQ$OLrrhMk3&qP@p--SQDL|_k)Tpt-g=dicrn$6mb{}-SsZzRX zVO!GG<339Y?;Y>f$?Mi?J6=Xi#1F{DPViWJ?Ly{lxK|3rN%Z)MR;}<_DrFS*i)QQB zbUS_U4(s9yHj1J7;GX4P9Fs`FXwj(hf@M8Y>h=YKmBzEmFaAd}d8%cv&2Xt)8?7!v zom3Q^=ikT(EHY}H8)ri+Afkk<7IYgh$55GjAg+He8a7j?P*X4e96wbU-KxZYt`?aBzCQ?Rm#q z*H_ZmaPmq|-np{qOQyj#C*fa%NkRwVQh0X)O79}8>YMM|oYC?Y3s6dklXZtdlO5g$ zj_X}nGl&v1@*!l9D7&-8L$A{$&k1$_>*26JcNgvKnC!c^vsV% zk`RVk+U!ndcs>VMUBYprRTX|N2%{40IT)OHT0RV(2iJlcqZf7vBFAT1m&0xNwVQQW zzeq%9Byv;6L2iQ_i8$&XBldq@Lu__k<0}vYN+IJl{>bMdm!L5j*m^wdbURf}cNgJ64?=e39 zIme(52m#p5noE+e_-?bgY^w%}yIZvzEg+DFHQq8v7q){xxsT$lPpkdq+o@ z+^@6fC!$X$RTsX$$Vd%Zm-D0Or%DGF?^D|~$svQg7J}0EM9ZI@Rai!cE=+O*q0^IN zFktNpaTUp(rma-rlb~ZEtzoB@o!7oiHD!4giJdV{sAi7Rg6Y)}~5r=sLKVS!Vl zQ=b&FbNK~{0*1bq3AeY)8_R&X-D7n!P7HTFc>Tia+^kCF>j>*NiY#c_OC$mO#6ERm z=s$wB^xm*XMv!bxv%akR$wFx-YySuYK{YGqlr8tu-1ik|D7-o)yv3w>r@16eb+!59 z8bNhG4e>P-OTE$HhOVHB&l$S9>VhT^oDwA;tN=|ygQ$psvHWBQfnr3X^s|{VokUd6EQ15r#JoqEnOEOYdrx$>#HWS;xS^y$Jim5P#uzwXiDmR?I-=YH8yG2+9AR}COZzHV^$ zN5-|3>eA+DA?52jH8VRz9nU7}96)G>2Kqroepj)cwc#?~aNFBn$Mv9k%Y)NC7-{qu zr!Q>fdq2XYL6Xh(aO3BlVFB3Z4 zF!Y`B_>Y)5c*P-4b!`hf2H1yq9u7g=$XF}TYNHh_6P7LJ)X=C=s&G9<^<7IkVOM7B zX55vab-Nb3pL%wlgqL{cYeP`|(kZXn0Ps&(?D>+KK&K#{b4N%+QSvq1-%DUE3eQ(? zt*1|X)t~r_>tU7p=X@iFWwG5Ppa?a5W(_n;{GfGq&V5eiG52I)oe1p*Ko1l1&7@?= zna565ozwvw3e{jvKQM4YLuj^4v#9A3!>Nar>ngFjCb;^}7teWUOHGB-_?QA*9|qvT z40s03Sk;JDC2dmrn|a&{fQo%Tu=*rAgJk~hEk}w)-xVF$F^YFzf6E`=2SjLp7<>W|@;(FH= zO;j^hQk%4MKgj|sQE=@H&68YJKS01ihmr@}L!^O!vo`L?IUIKBOG0y|MT()%ofafU zWZMzL5&eC|0t$Fj6<%7AHO#m&?(bn`p}Rl9m&a^|_+39;9$=m1~=mRTnM7Lb>A)d)a>#^{B!B31`$)pFJUwsR7PK-@Z?;p~K0`X2Xt4QCZ3Sjk)?&`W;E`uGz4jv3 z6LWlx-kbqBWGg2mIf!)?i&}M-`rCfGyyeo(pDUtLW!y^^(^_`9yNs0~{CZGfXn_pi z=!)&HNAxnUKP0I6h1_=5qxjY&R+|y;s#iW@JF;0lzjoPgNE0x@JUTX5OX9?(n@GlL zPwY_j1O``kNJ$vdiqdJqH4hv0jQbihADx}3*4%UqnRf#PvBlpsCU_J>2JY<+m;@X? z!6RyP!;(-UwG9&)9~klQT^v(wzt$1hX9$}1tXXjBU!mIG zc+28g`!hB5+A8GA%4))nj~uiSUw~m1vHEo;D*C1E!xJrgXKv*`a%AzBG0ET3n^cIo z*h3t{%@qclNKfqz4f0=5+sNPqc!2Mm?5>I2DUDQtxQVraawpW5OC1)E4*c@Cb|YP) zHyG#Sp~LxednWoUVf+gi(vqb>xX&OT7C*jq^C+L!DWxH1pRDDoAH%LbF~OYsoy7kB z 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
bU0>^c}E;y}G8>_LX7vX0!Np0OV-TRL4*hplA51 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 r^!aNc zK|(`BMMg(RNlHshO-@fxQBqS>RaRG6Sz3F1eSUv{fr5jCg@%WSiHeJijgF6yk&=^? zm6n&7nVOrNot~edp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z&y}rM|!NSAD#m2|T z$;!*j&Cbuz(bCh@)z;V8+1lIO-QM5e;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0( G{r>+J1%H76 literal 0 HcmV?d00001 diff --git a/doc/tutor1.oph b/doc/tutor1.oph new file mode 100644 index 0000000..6789ce7 --- /dev/null +++ b/doc/tutor1.oph @@ -0,0 +1,18 @@ +.word $0801 +.org $0801 + + .word next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +next: .word 0 ; End of program + +.advance 2064 + + ldx #0 +loop: lda hello, x + beq done + jsr $ffd2 + inx + bne loop +done: rts + +hello: .byte "HELLO, WORLD!", 0 \ No newline at end of file diff --git a/doc/tutor2.oph b/doc/tutor2.oph new file mode 100644 index 0000000..27c6682 --- /dev/null +++ b/doc/tutor2.oph @@ -0,0 +1,22 @@ +.word $0801 +.org $0801 + +.scope + .word _next, 10 ; Next line and current line number + .byte $9e," 2064",0 ; SYS 2064 +_next: .word 0 ; End of program +.scend + +.advance 2064 + +.alias chrout $ffd2 + + ldx #0 +* lda hello, x + beq + + jsr chrout + inx + bne - +* rts + +hello: .byte "HELLO, WORLD!", 0 \ No newline at end of file diff --git a/doc/tutor3.oph b/doc/tutor3.oph new file mode 100644 index 0000000..112e2bf --- /dev/null +++ b/doc/tutor3.oph @@ -0,0 +1,45 @@ +.include "c64-1.oph" + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 \ No newline at end of file diff --git a/doc/tutor4a.oph b/doc/tutor4a.oph new file mode 100644 index 0000000..d218a5f --- /dev/null +++ b/doc/tutor4a.oph @@ -0,0 +1,69 @@ +.include "c64-1.oph" + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +; DELAY routine. Executes 2,560*(A) NOP statements. +delay: tax + ldy #00 +* nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + iny + bne - + dex + bne - + + + rts + diff --git a/doc/tutor4b.oph b/doc/tutor4b.oph new file mode 100644 index 0000000..3926965 --- /dev/null +++ b/doc/tutor4b.oph @@ -0,0 +1,71 @@ +.include "c64-1.oph" + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + lda #lower'case + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +hello1: .byte "Hello, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "programmer", 0 +target2: .byte "room", 0 +target3: .byte "building", 0 +target4: .byte "neighborhood", 0 +target5: .byte "city", 0 +target6: .byte "nation", 0 +target7: .byte "world", 0 +target8: .byte "Solar System", 0 +target9: .byte "Galaxy", 0 +target10: .byte "Universe", 0 + +; DELAY routine. Executes 2,560*(A) NOP statements. +delay: tax + ldy #00 +* nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + iny + bne - + dex + bne - + + + rts + diff --git a/doc/tutor4c.oph b/doc/tutor4c.oph new file mode 100644 index 0000000..f05d023 --- /dev/null +++ b/doc/tutor4c.oph @@ -0,0 +1,73 @@ +.include "c64-1.oph" + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + lda #lower'case + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +.charmap 'A, "abcdefghijklmnopqrstuvwxyz" +.charmap 'a, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + +hello1: .byte "Hello, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "programmer", 0 +target2: .byte "room", 0 +target3: .byte "building", 0 +target4: .byte "neighborhood", 0 +target5: .byte "city", 0 +target6: .byte "nation", 0 +target7: .byte "world", 0 +target8: .byte "Solar System", 0 +target9: .byte "Galaxy", 0 +target10: .byte "Universe", 0 + +; DELAY routine. Executes 2,560*(A) NOP statements. +delay: tax + ldy #00 +* nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + iny + bne - + dex + bne - + + + rts \ No newline at end of file diff --git a/doc/tutor5.oph b/doc/tutor5.oph new file mode 100644 index 0000000..8caf839 --- /dev/null +++ b/doc/tutor5.oph @@ -0,0 +1,75 @@ +.include "c64-1.oph" + +.data +.org $C000 +.text + +.macro print + ldx #0 +_loop: lda _1, x + beq _done + jsr chrout + inx + bne _loop +_done: +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +; DELAY routine. Takes values from the Accumulator and pauses +; for that many jiffies (1/60th of a second). +.scope +.data +.space _tmp 1 +.space _target 1 + +.text + +delay: sta _tmp ; save argument (rdtim destroys it) + jsr rdtim + clc + adc _tmp ; add current time to get target + sta _target +* jsr rdtim + cmp _target + bmi - ; Buzz until target reached + rts +.scend + +.checkpc $A000 +.data +.checkpc $D000 \ No newline at end of file diff --git a/doc/tutor6.oph b/doc/tutor6.oph new file mode 100644 index 0000000..60ad8e9 --- /dev/null +++ b/doc/tutor6.oph @@ -0,0 +1,102 @@ +.include "c64-1.oph" + +.data +.org $C000 +.space cache 2 +.text + +.macro print + lda #<_1 + ldx #>_1 + jsr printstr +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + ; Save the zero page locations that PRINTSTR uses. + lda $10 + sta cache + lda $11 + sta cache+1 + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + + ; Restore the zero page values printstr uses. + lda cache + sta $10 + lda cache+1 + sta $11 + + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +; DELAY routine. Takes values from the Accumulator and pauses +; for that many jiffies (1/60th of a second). +.scope +.data +.space _tmp 1 +.space _target 1 + +.text + +delay: sta _tmp ; save argument (rdtim destroys it) + jsr rdtim + clc + adc _tmp ; add current time to get target + sta _target +* jsr rdtim + cmp _target + bmi - ; Buzz until target reached + rts +.scend + +; PRINTSTR routine. Accumulator stores the low byte of the address, +; X register stores the high byte. Destroys the values of $10 and +; $11. + +.scope +printstr: + sta $10 + stx $11 + ldy #$00 +_lp: lda ($10),y + beq _done + jsr chrout + iny + bne _lp +_done: rts +.scend + +.checkpc $A000 +.data +.checkpc $D000 \ No newline at end of file diff --git a/doc/tutor7.oph b/doc/tutor7.oph new file mode 100644 index 0000000..88ba5bf --- /dev/null +++ b/doc/tutor7.oph @@ -0,0 +1,96 @@ +.include "c64-2.oph" + +.data +.org $C000 +.text + +.macro print + lda #<_1 + ldx #>_1 + jsr printstr +.macend + +.macro greet + lda #30 + jsr delay + `print hello1 + `print _1 + `print hello2 +.macend + + lda #147 + jsr chrout + `greet target1 + `greet target2 + `greet target3 + `greet target4 + `greet target5 + `greet target6 + `greet target7 + `greet target8 + `greet target9 + `greet target10 + + rts + +hello1: .byte "HELLO, ",0 +hello2: .byte "!", 13, 0 + +target1: .byte "PROGRAMMER", 0 +target2: .byte "ROOM", 0 +target3: .byte "BUILDING", 0 +target4: .byte "NEIGHBORHOOD", 0 +target5: .byte "CITY", 0 +target6: .byte "NATION", 0 +target7: .byte "WORLD", 0 +target8: .byte "SOLAR SYSTEM", 0 +target9: .byte "GALAXY", 0 +target10: .byte "UNIVERSE", 0 + +; DELAY routine. Takes values from the Accumulator and pauses +; for that many jiffies (1/60th of a second). +.scope +.data +.space _tmp 1 +.space _target 1 + +.text + +delay: sta _tmp ; save argument (rdtim destroys it) + jsr rdtim + clc + adc _tmp ; add current time to get target + sta _target +* jsr rdtim + cmp _target + bmi - ; Buzz until target reached + rts +.scend + +; PRINTSTR routine. Accumulator stores the low byte of the address, +; X register stores the high byte. Destroys the values of $10 and +; $11. + +.scope +.data zp +.space _ptr 2 +.text +printstr: + sta _ptr + stx _ptr+1 + ldy #$00 +_lp: lda (_ptr),y + beq _done + jsr chrout + iny + bne _lp +_done: rts +.scend + +.checkpc $A000 + +.data +.checkpc $D000 + +.data zp +.checkpc $80 \ No newline at end of file diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..6c47757 --- /dev/null +++ b/site/index.html @@ -0,0 +1,32 @@ + + + +The Ophis Assembler + +

The Ophis Assembler

+ +

Ophis is a cross-assembler for the 65xx series of chips. It supports the stock 6502 opcodes, the 65c02 extensions, and syntax for the "undocumented opcodes" in the 6510 chip used on the Commodore 64. (Syntax for these opcodes matches those given in the VICE team's documentation.)

+ +

Ophis is written in pure Python and should be highly portable.

+ +

If you have questions or comments, email me at mcmartin AT gmail DOT com.

+ +

Downloads

+
    +
  • Source distribution. For Unix and Mac. Untar, then run "python setup.py install" as root to install. Documentation and sample code is in the tarball but won't be placed anywhere special.
  • +
  • Win32 installer. Installs a standalone executable and support libraries. You will need to put the install directory into your PATH to run it conveniently, as it is a commandline program.
  • +
+ +

Documentation

+ +

The manual Programming with Ophis is distributed with each download. You can also get it alone.

+ + + + + diff --git a/site/manual/a454.html b/site/manual/a454.html new file mode 100644 index 0000000..0d16f71 --- /dev/null +++ b/site/manual/a454.html @@ -0,0 +1,184 @@ + +Example Programs
Programming with Ophis
<<< PreviousNext >>>

Example Programs

This Appendix collects all the programs referred to in the course + of this manual. +

tutor1.oph

.word $0801
+.org  $0801
+
+        .word next, 10          ; Next line and current line number
+        .byte $9e," 2064",0     ; SYS 2064
+next:   .word 0                 ; End of program
+
+.advance 2064
+
+        ldx #0
+loop:   lda hello, x
+        beq done
+        jsr $ffd2
+        inx
+        bne loop
+done:   rts
+
+hello:  .byte "HELLO, WORLD!", 0

<<< PreviousHomeNext >>>
Where to go from here tutor2.oph
\ No newline at end of file diff --git a/site/manual/a505.html b/site/manual/a505.html new file mode 100644 index 0000000..08cd6ca --- /dev/null +++ b/site/manual/a505.html @@ -0,0 +1,311 @@ + +Ophis Command Reference
Programming with Ophis
<<< PreviousNext >>>

Ophis Command Reference

Command Modes

These mostly follow the MOS Technology 6500 + Microprocessor Family Programming Manual, except + for the Accumulator mode. Accumulator instructions are written + and interpreted identically to Implied mode instructions. +

  • Implied: RTS

  • Accumulator: LSR

  • Immediate: LDA #$06

  • Zero Page: LDA $7C

  • Zero Page, X: LDA $7C,X

  • Zero Page, Y: LDA $7C,Y

  • Absolute: LDA $D020

  • Absolute, X: LDA $D000,X

  • Absolute, Y: LDA $D000,Y

  • (Zero Page Indirect, X): LDA ($80, X)

  • (Zero Page Indirect), Y: LDA ($80), Y

  • (Absolute Indirect): JMP ($A000)

  • Relative: BNE loop

  • (Absolute Indirect, X): JMP ($A000, X) — Only available with 65C02 extensions

  • (Zero Page Indirect): LDX ($80) — Only available with 65C02 extensions


<<< PreviousHomeNext >>>
tutor7.oph Basic arguments
\ No newline at end of file diff --git a/site/manual/book1.html b/site/manual/book1.html new file mode 100644 index 0000000..d7499af --- /dev/null +++ b/site/manual/book1.html @@ -0,0 +1,467 @@ + +Programming with Ophis

Programming with Ophis

Michael Martin

Copyright © 2006-7 Michael Martin


Table of Contents
Preface
Why "Ophis"?
Getting a copy of Ophis
The basics
A note on numeric notation
Producing Commodore 64 programs
Related commands and options
Writing the actual code
Assembling the code
Labels and aliases
Temporary labels
Anonymous labels
Aliasing
Headers, Libraries, and Macros
Header files and libraries
Macros
Macro definitions
Macro invocations
Example code
Character maps
Local variables and memory segments
Expressions
Advanced Memory Segments
The Problem
The Solution
Where to go from here
Example Programs
tutor1.oph
tutor2.oph
c64-1.oph
kernal.oph
tutor3.oph
tutor4a.oph
tutor4b.oph
tutor4c.oph
tutor5.oph
tutor6.oph
c64-2.oph
tutor7.oph
Ophis Command Reference
Command Modes
Basic arguments
Numeric types
Label types
String types
Compound Arguments
Memory Model
Basic PC tracking
Basic Segmentation simulation
General Segmentation Simulation
Macros
Defining Macros
Invoking Macros
Passing Arguments to Macros
Features and Restrictions of the Ophis Macro Model
Assembler directives

  Next >>>
  Preface
\ No newline at end of file diff --git a/site/manual/c200.html b/site/manual/c200.html new file mode 100644 index 0000000..d5f036d --- /dev/null +++ b/site/manual/c200.html @@ -0,0 +1,208 @@ + +Labels and aliases
Programming with Ophis
<<< PreviousNext >>>

Labels and aliases

Labels are an important part of your code. However, since each + label must normally be unique, this can lead to "namespace + pollution," and you'll find yourself going through ever + more contorted constructions to generate unique label names. + Ophis offers two solutions to this: anonymous + labels and temporary labels. This + tutorial will cover both of these facilities, and also introduce + the aliasing mechanism. +

Temporary labels

Temporary labels are the easiest to use. If a label begins with + an underscore, it will only be reachable from inside the + innermost enclosing scope. Scopes begin when + a .scope statement is encountered. This + produces a new, inner scope if there is another scope in use. + The .scend command ends the innermost + currently active scope. +

We can thus rewrite our header data using temporary labels, thus + allowing the main program to have a label + named next if it wants. +

.word $0801
+.org  $0801
+
+.scope
+        .word _next, 10      ; Next line and current line number
+        .byte $9e," 2064",0  ; SYS 2064
+_next:  .word 0              ; End of program
+.scend
+
+.advance 2064

<<< PreviousHomeNext >>>
Assembling the code Anonymous labels
\ No newline at end of file diff --git a/site/manual/c236.html b/site/manual/c236.html new file mode 100644 index 0000000..99e4546 --- /dev/null +++ b/site/manual/c236.html @@ -0,0 +1,226 @@ + +Headers, Libraries, and Macros
Programming with Ophis
<<< PreviousNext >>>

Headers, Libraries, and Macros

In this chapter we will split away parts of our "Hello + World" program into reusable header files and libraries. + We will also abstract away our string printing technique into a + macro which may be invoked at will, on arbitrary strings. We will + then multiply the output of our program tenfold. +

Header files and libraries

The prelude to our program—the PRG + information and the BASIC program—are going to be the same + in many, many programs. Thus, we should put them into a header + file to be included later. The .include + directive will load a file and insert it as source at the + designated point. +

A related directive, .require, will include + the file as long as it hasn't been included yet elsewhere. It + is useful for ensuring a library is linked in. +

For pre-assembled code or raw binary data, + the .incbin directive lets you include the + contents of a binary file directly in the output. This is handy + for linking in pre-created graphics or sound data. +

As a sample library, we will expand the definition of + the chrout routine to include the standard + names for every KERNAL routine. Our header file will + then .require it. +

We'll also add some convenience aliases for things like reverse + video, color changes, and shifting between upper case/graphics + and mixed case text. We'd feed those to + the chrout routine to get their effects. +

Since there have been no interesting changes to the prelude, and + the KERNAL values are standard, we do not reproduce them here. + (The files in question are c64-1.oph and kernal.oph.) +


<<< PreviousHomeNext >>>
Aliasing Macros
\ No newline at end of file diff --git a/site/manual/c292.html b/site/manual/c292.html new file mode 100644 index 0000000..b883874 --- /dev/null +++ b/site/manual/c292.html @@ -0,0 +1,344 @@ + +Character maps
Programming with Ophis
<<< PreviousNext >>>

Character maps

Now we will close the gap between the Commodore's + version of ASCII and the real one. We'll also add a time-delay + routine to slow down the output. This routine isn't really of + interest to us right now, so we'll add a subroutine + called delay that executes 2,560*(accumulator) + NOPs. By the time the program is finished, + we'll have executed 768,000 no-ops. +

There actually are better ways of getting a time-delay on the + Commodore 64; we'll deal with those in the Chapter called Local variables and memory segments. + As a result, there isn't really a lot to discuss here. The later + tutorials will be building off of tutor4a.oph, so you may want to get familiar with + that. Note also the change to the body of + the greet macro. +

On to the topic at hand. Let's change the code to use mixed case. + We defined the upper'case + and lower'case aliases back + in the Chapter called Headers, Libraries, and Macros as part of the + standard kernal.oph + header, so we can add this before our invocations of + the greet macro: +

          lda #lower'case
+          jsr chrout

And that will put us into mixed case mode. So, now we just need + to redefine the data so that it uses the mixed-case: +

hello1:   .byte "Hello, ",0
+hello2:   .byte "!", 13, 0
+
+target1:  .byte "programmer", 0
+target2:  .byte "room", 0
+target3:  .byte "building", 0
+target4:  .byte "neighborhood", 0
+target5:  .byte "city", 0
+target6:  .byte "nation", 0
+target7:  .byte "world", 0
+target8:  .byte "Solar System", 0
+target9:  .byte "Galaxy", 0
+target10: .byte "Universe", 0

The code that does this is in tutor4b.oph. If you assemble and run it, you will + notice that the output is not what we want. In particular, upper + and lowercase are reversed, so we have messages + like hELLO, sOLAR sYSTEM!. For + the specific case of PETSCII, we can just fix our strings, but + that's less of an option if we're writing for the Apple II's + character set, or targeting a game console that puts its letters + in arbitrary locations. We need to remap how strings are turned + into byte values. The .charmap + and .charmapbin directives do what we need. +

The .charmap directive usually takes two + arguments; a byte (usually in character form) indicating the ASCII + value to start remapping from, and then a string giving the new + values. To do our case-swapping, we write two directives before + defining any string constants: +

.charmap 'A, "abcdefghijklmnopqrstuvwxyz"
+.charmap 'a, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Note that the 'a constant in the second + directive refers to the "a" character in the source, + not in the current map. +

The fixed code is in tutor4c.oph, and will produce the expected results + when run. +

An alternative is to use a .charmapbin + directive to replace the entire character map directly. This + specifies an external file, 256 bytes long, that is loaded in at + that point. A binary character map for the Commodore 64 is + provided with the sample programs + as petscii.map. There are also three + files, a2normal.map, a2inverse.map, + and a2blink.map that handle the Apple II's + very nonstandard character encodings. +


<<< PreviousHomeNext >>>
Example code Local variables and memory segments
\ No newline at end of file diff --git a/site/manual/c329.html b/site/manual/c329.html new file mode 100644 index 0000000..784c66c --- /dev/null +++ b/site/manual/c329.html @@ -0,0 +1,402 @@ + +Local variables and memory segments
Programming with Ophis
<<< PreviousNext >>>

Local variables and memory segments

As mentioned in the Chapter called Character maps, there are better ways + to handle waiting than just executing vast numbers of NOPs. The + Commodore 64 KERNAL library includes a rdtim + routine that returns the uptime of the machine, in + 60ths of a second, as a 24-bit integer. + The Commodore 64 programmer's guide available online actually has + a bug in it, reversing the significance of the A and Y registers. + The accumulator holds the least significant + byte, not the most. +

Here's a first shot at a better delay routine: +

.scope
+        ; data used by the delay routine
+        _tmp:    .byte 0
+        _target: .byte 0
+
+delay:  sta _tmp        ; save argument (rdtim destroys it)
+        jsr rdtim
+        clc
+        adc _tmp        ; add current time to get target
+        sta _target
+*       jsr rdtim
+        cmp _target
+        bmi -           ; Buzz until target reached
+        rts
+.scend

This works, but it eats up two bytes of file space that don't + really need to be specified. Also, it's modifying data inside a + program text area, which isn't good if you're assembling to a ROM + chip. (Since the Commodore 64 stores its programs in RAM, it's + not an issue for us here.) A slightly better solution is to + use .alias to assign the names to chunks of RAM + somewhere. There's a 4K chunk of RAM from $C000 through $CFFF + between the BASIC ROM and the I/O ROM that should serve our + purposes nicely. We can replace the definitions + of _tmp and _target with: +

        ; data used by the delay routine
+        .alias _tmp    $C000
+        .alias _target $C001

This works better, but now we've just added a major bookkeeping + burden upon ourselves—we must ensure that no routines step on + each other. What we'd really like are two separate program + counters—one for the program text, and one for our variable + space. +

Ophis lets us do this with the .text + and .data commands. + The .text command switches to the program-text + counter, and the .data command switches to the + variable-data counter. When Ophis first starts assembling a file, + it starts in .text mode. +

To reserve space for a variable, use the .space command. This + takes the form: + +
.space varname size
+ + which assigns the name varname to the current + program counter, then advances the program counter by the amount + specified in size. Nothing is output to the + final binary as a result of the .space command. +

You may not put in any commands that produce output into + a .data segment. Generally, all you will be + using are .org and .space + commands. Ophis will not complain if you + use .space inside a .text + segment, but this is nearly always wrong. +

The final version of delay looks like this: +

; DELAY routine.  Takes values from the Accumulator and pauses
+; for that many jiffies (1/60th of a second).
+.scope
+.data
+.space _tmp 1
+.space _target 1
+
+.text
+
+delay:  sta _tmp        ; save argument (rdtim destroys it)
+        jsr rdtim
+        clc
+        adc _tmp        ; add current time to get target
+        sta _target
+*       jsr rdtim
+        cmp _target
+        bmi -                ; Buzz until target reached
+        rts
+.scend

We're not quite done yet, however, because we have to tell the + data segment where to begin. (If we don't, it starts at 0, which + is usually wrong.) We add a very brief data segment to the top of + our code: +

.data
+.org $C000
+.text

This will run. However, we also ought to make sure that we aren't + overstepping any boundaries. Our program text shouldn't run into + the BASIC chip at $A000, and our data shouldn't run into the I/O + region at $D000. The .checkpc command lets us + assert that the program counter hasn't reached a specific point + yet. We put, at the end of our code: +

.checkpc $A000
+.data
+.checkpc $D000

The final program is available as tutor5.oph. Note that we based this on the + all-uppercase version from the last section, not any of the + charmapped versions. +


<<< PreviousHomeNext >>>
Character maps Expressions
\ No newline at end of file diff --git a/site/manual/c35.html b/site/manual/c35.html new file mode 100644 index 0000000..cd82799 --- /dev/null +++ b/site/manual/c35.html @@ -0,0 +1,180 @@ + +The basics
Programming with Ophis
<<< PreviousNext >>>

The basics

In this first part of the tutorial we will create a + simple "Hello World" program to run on the Commodore + 64. This will cover: + +

  • How to make programs run on a Commodore 64

  • Writing simple code with labels

  • Numeric and string data

  • Invoking the assembler

+

A note on numeric notation

Throughout these tutorials, I will be using a lot of both + decimal and hexadecimal notation. Hex numbers will have a + dollar sign in front of them. Thus, 100 = $64, and $100 = 256. +


<<< PreviousHomeNext >>>
Getting a copy of Ophis Producing Commodore 64 programs
\ No newline at end of file diff --git a/site/manual/c371.html b/site/manual/c371.html new file mode 100644 index 0000000..05a57be --- /dev/null +++ b/site/manual/c371.html @@ -0,0 +1,348 @@ + +Expressions
Programming with Ophis
<<< PreviousNext >>>

Expressions

Ophis permits a reasonably rich set of arithmetic operations to be + done at assemble time. So far, all of our arguments and values + have either been constants or label names. In this chapter, we + will modify the print macro so that it calls a + subroutine to do the actual printing. This will shrink the final + code size a fair bit. +

Here's our printing routine. It's fairly straightforward. +

; PRINTSTR routine.  Accumulator stores the low byte of the address,
+; X register stores the high byte.  Destroys the values of $10 and
+; $11.
+
+.scope
+printstr:
+        sta $10
+        stx $11
+        ldy #$00
+_lp:    lda ($10), y
+        beq _done
+        jsr chrout
+        iny
+        bne _lp
+_done:  rts
+.scend

However, now we are faced with the problem of what to do with + the print macro. We need to take a 16-bit + value and store it in two 8-bit registers. We can use + the < and > operators + to take the low or high byte of a word, respectively. + The print macro becomes: +

.macro print
+        lda #<_1
+        ldx #>_1
+        jsr printstr
+.macend

Also, since BASIC uses the locations $10 and $11, we should really + cache them at the start of the program and restore them at the + end: +

.data
+.org $C000
+.space cache 2
+.text
+
+        ; Save the zero page locations that printstr uses.
+        lda $10
+        sta cache
+        lda $11
+        sta cache+1
+
+        ; ... main program goes here ...
+
+        ; Restore the zero page values printstr uses.
+        lda cache
+        sta $10
+        lda cache+1
+        sta $11

Note that we only have to name cache once, but + can use addition to refer to any offset from it. +

Ophis supports following operations, with the following precedence + levels (higher entries bind more tightly): +

Table 1. Ophis Operators

OperatorsDescription
[ ]Parenthesized expressions
< >Byte selection (low, high)
* /Multiply, divide
+ -Add, subtract
| & ^Bitwise OR, AND, XOR

Note that brackets, not parentheses, are used to group arithmetic + operations. This is because parentheses are used for the indirect + addressing modes, and it makes parsing much easier. +

The code for this version of the code is + in tutor6.oph. +


<<< PreviousHomeNext >>>
Local variables and memory segments Advanced Memory Segments
\ No newline at end of file diff --git a/site/manual/c419.html b/site/manual/c419.html new file mode 100644 index 0000000..674310a --- /dev/null +++ b/site/manual/c419.html @@ -0,0 +1,184 @@ + +Advanced Memory Segments
Programming with Ophis
<<< PreviousNext >>>

Advanced Memory Segments

This is the last section of the Ophis tutorial. By now we've + covered the basics of every command in the assembler; in this + final installment we show the full capabilities of + the .text and .data commands + as we produce a final set of Commodore 64 header files. +

The Problem

Our print'str routine + in tutor6.oph accesses + memory locations $10 and $11 directly. We'd prefer to have + symbolic names for them. This reprises our concerns back in + the Chapter called Local variables and memory segments when we concluded that we wanted two + separate program counters. Now we realize that we really need + three; one for the text, one for the data, and one for the zero + page data. And if we're going to allow three, we really should + allow any number. +


<<< PreviousHomeNext >>>
Expressions The Solution
\ No newline at end of file diff --git a/site/manual/f10.html b/site/manual/f10.html new file mode 100644 index 0000000..71c7cd2 --- /dev/null +++ b/site/manual/f10.html @@ -0,0 +1,186 @@ + +Preface
Programming with Ophis
<<< PreviousNext >>>

Preface

The Ophis project started on a lark back in 2001. My graduate + studies required me to learn Perl and Python, and I'd been playing + around with Commodore 64 emulators in my spare time, so I decided + to learn both languages by writing a simple cross-assembler for + the 6502 chip the C-64 used in both. +

The Perl version was quickly abandoned, but the Python one slowly + grew in scope and power over the years, and by 2005 was a very + powerful, flexible macro assembler that saw more use than I'd + expect. In 2007 I finally got around to implementing the last few + features I really wanted and polishing it up for general release. +

Part of that process has been formatting the various little + tutorials and references I'd created into a single, unified + document—the one you are now reading. +

Why "Ophis"?

It's actually a kind of a horrific pun. See, I was using Python + at the time, and one of the things I had been hoping to do with + the assembler was to produce working Apple II + programs. "Ophis" is Greek + for "snake", and a number of traditions also use it + as the actual name of the serpent in the + Garden of Eden. So, Pythons, snakes, and stories involving + really old Apples all combined to name the assembler. +


<<< PreviousHomeNext >>>
Programming with Ophis Getting a copy of Ophis
\ No newline at end of file diff --git a/site/manual/x119.html b/site/manual/x119.html new file mode 100644 index 0000000..a9b00ed --- /dev/null +++ b/site/manual/x119.html @@ -0,0 +1,206 @@ + +Related commands and options
Programming with Ophis
<<< PreviousThe basicsNext >>>

Related commands and options

This code includes constants that are both in decimal and in + hex. It is also possible to specify constants in octal, binary, + or with an ASCII character. + +

  • To specify decimal constants, simply write the number.

  • To specify hexadecimal constants, put a $ in front.

  • To specify octal constants, put a 0 (zero) in front.

  • To specify binary constants, put a % in front.

  • To specify ASCII constants, put an apostrophe in front.

+ + Example: 65 = $41 = 0101 = %1000001 = 'A +

There are other commands besides .byte + and .word to specify data. In particular, + the .dword command specifies four-byte values + which some applications will find useful. Also, some linking + formats (such as the SID format) have + header data in big-endian (high byte first) format. + The .wordbe and .dwordbe + directives provide a way to specify multibyte constants in + big-endian formats cleanly. +


<<< PreviousHomeNext >>>
Producing Commodore 64 programsUpWriting the actual code
\ No newline at end of file diff --git a/site/manual/x140.html b/site/manual/x140.html new file mode 100644 index 0000000..e6413c9 --- /dev/null +++ b/site/manual/x140.html @@ -0,0 +1,197 @@ + +Writing the actual code
Programming with Ophis
<<< PreviousThe basicsNext >>>

Writing the actual code

Now that we have our header information, let's actually write + the "Hello world" program. It's pretty + short—a simple loop that steps through a hardcoded array + until it reaches a 0 or outputs 256 characters. It then returns + control to BASIC with an RTS statement. +

Each character in the array is passed as an argument to a + subroutine at memory location $FFD2. This is part of the + Commodore 64's BIOS software, which its development + documentation calls the KERNAL. Location $FFD2 prints out the + character corresponding to the character code in the + accumulator. +

        ldx #0
+loop:   lda hello, x
+        beq done
+        jsr $ffd2
+        inx
+        bne loop
+done:   rts
+
+hello:  .byte "HELLO, WORLD!", 0
+    

The complete, final source is available in + the tutor1.oph file. +


<<< PreviousHomeNext >>>
Related commands and optionsUpAssembling the code
\ No newline at end of file diff --git a/site/manual/x149.html b/site/manual/x149.html new file mode 100644 index 0000000..656e0c0 --- /dev/null +++ b/site/manual/x149.html @@ -0,0 +1,317 @@ + +Assembling the code
Programming with Ophis
<<< PreviousThe basicsNext >>>

Assembling the code

The Ophis assembler is a collection of Python modules, + controlled by a master script. On Windows, this should all + have been combined into an executable + file ophis.exe; on other platforms, the + Ophis modules should be in the library and + the ophis script should be in your path. + Typing ophis with no arguments should give a + summary of available command line options. +

Table 2. Ophis Options

OptionEffect
-6510Allows the 6510 undocumented opcodes as listed in the VICE documentation.
-65c02Allows opcodes and addressing modes added by the 65C02.
-v 0Quiet operation. Only reports errors.
-v 1Default operation. Reports files as they are loaded, and gives statistics on the final output.
-v 2Verbose operation. Names each assembler pass as it runs.
-v 3Debug operation: Dumps the entire IR after each pass.
-v 4Full debug operation: Dumps the entire IR and symbol table after each pass.

The only options Ophis demands are an input file and an output + file. Here's a sample session, assembling the tutorial file + here: +

localhost$ ophis tutor1.oph tutor1.prg -v 2
+Loading tutor1.oph
+Running: Macro definition pass
+Running: Macro expansion pass
+Running: Label initialization pass
+Fixpoint failed, looping back
+Running: Label initialization pass
+Running: Circularity check pass
+Running: Expression checking pass
+Running: Easy addressing modes pass
+Running: Label Update Pass
+Fixpoint failed, looping back
+Running: Label Update Pass
+Running: Instruction Collapse Pass
+Running: Mode Normalization pass
+Running: Label Update Pass
+Running: Assembler
+Assembly complete: 45 bytes output (14 code, 29 data, 2 filler)
+    

If your emulator can run PRG files + directly, this file will now run (and + print HELLO, WORLD!) as many + times as you type RUN. Otherwise, use + a D64 management utility to put + the PRG on a D64, then + load and run the file off that. +


<<< PreviousHomeNext >>>
Writing the actual codeUpLabels and aliases
\ No newline at end of file diff --git a/site/manual/x214.html b/site/manual/x214.html new file mode 100644 index 0000000..ac408d2 --- /dev/null +++ b/site/manual/x214.html @@ -0,0 +1,198 @@ + +Anonymous labels
Programming with Ophis
<<< PreviousLabels and aliasesNext >>>

Anonymous labels

Anonymous labels are a way to handle short-ranged branches + without having to come up with names for the then and else + branches, for brief loops, and other such purposes. To define + an anonymous label, use an asterisk. To refer to an anonymous + label, use a series of + + or - signs. + refers to + the next anonymous label, ++ the label + after that, etc. Likewise, - is the most + recently defined label, -- the one before + that, and so on. The main body of the Hello World program + with anonymous labels would be: +

        ldx #0
+*       lda hello, x
+        beq +
+        jsr $ffd2
+        inx
+        bne -
+*       rts

It is worth noting that anonymous labels are globally available. + They are not temporary labels, and they ignore scoping + restrictions. +


<<< PreviousHomeNext >>>
Labels and aliasesUpAliasing
\ No newline at end of file diff --git a/site/manual/x22.html b/site/manual/x22.html new file mode 100644 index 0000000..1439651 --- /dev/null +++ b/site/manual/x22.html @@ -0,0 +1,197 @@ + +Getting a copy of Ophis
Programming with Ophis
<<< PreviousPrefaceNext >>>

Getting a copy of Ophis

If you're reading this as part of the Ophis install, you clearly + already have it. If not, as of this writing the homepage for + the Ophis assembler + is http://hkn.eecs.berkeley.edu/~mcmartin/ophis/. If + this is out-of-date, a Web search on "Ophis 6502 + assembler" (without the quotation marks) should yield its + page. +

Ophis is written entirely in Python and packaged using the + distutils. The default installation script on Unix and Mac OS X + systems should put the files where they need to go. If you are + running it locally, you will need to install + the Ophis package somewhere in your Python + package path, and then put the ophis script + somewhere in your path. +

Windows users that have Python installed can use the same source + distributions that the other operating systems + use; ophis.bat will arrange the environment + variables accordingly and invoke the main script. +

If you are on Windows and do not have Python installed, a + prepackaged system made with py2exe is also + available. The default Windows installer will use this. In + this case, all you need to do is + have ophis.exe in your path. +

\ No newline at end of file diff --git a/site/manual/x225.html b/site/manual/x225.html new file mode 100644 index 0000000..2809307 --- /dev/null +++ b/site/manual/x225.html @@ -0,0 +1,203 @@ + +Aliasing
Programming with Ophis
<<< PreviousLabels and aliasesNext >>>

Aliasing

Rather the reverse of anonymous labels, aliases are names + given to specific memory locations. These make it easier to + keep track of important constants or locations. The KERNAL + routines are a good example of constants that deserve names. + To assign the traditional name chrout to + the routine at $FFD2, simply give the directive: +

.alias chrout $ffd2

And change the jsr command + to:

        jsr chrout

The final version of the code is in tutor2.oph. It should + assemble to exactly the same program as tutor1.oph. +


<<< PreviousHomeNext >>>
Anonymous labelsUpHeaders, Libraries, and Macros
\ No newline at end of file diff --git a/site/manual/x257.html b/site/manual/x257.html new file mode 100644 index 0000000..1e6128a --- /dev/null +++ b/site/manual/x257.html @@ -0,0 +1,289 @@ + +Macros
Programming with Ophis
<<< PreviousHeaders, Libraries, and MacrosNext >>>

Macros

A macro is a way of expressing a lot of code or data with a + simple shorthand. It's also usually configurable. Traditional + macro systems such as C's #define mechanic + use textual replacement: a macro is + expanded before any evaluation or even parsing occurs. +

In contrast, Ophis's macro system uses a call by + value approach where the arguments to macros are + evaluated to bytes or words before being inserted into the macro + body. This produces effects much closer to those of a + traditional function call. A more detailed discussion of the + tradeoffs may be found in the Appendix called Ophis Command Reference. +

Macro definitions

A macro definition is a set of statements between + a .macro statement and + a .macend statement. + The .macro statement also names the macro + being defined. +

No global or anonymous labels may be defined inside a macro: + temporary labels only persist in the macro expansion itself. + (Each macro body has its own scope.) +

Arguments to macros are referred to by number: the first is + _1, the second _2, and so on. +

Here's a macro that encapsulates the printing routine in our + "Hello World" program, with an argument being the + address of the string to print: +

.macro print
+        ldx #0
+_loop:  lda _1, x
+        beq _done
+        jsr chrout
+        inx
+        bne _loop
+_done:
+.macend

Macro invocations

Macros may be invoked in two ways: one that looks like a + directive, and one that looks like an instruction. +

The most common way to invoke a macro is to backquote the name + of the macro. It is also possible to use + the .invoke command. These commands look + like this: +

`print msg
+.invoke print msg

Arguments are passed to the macro as a comma-separated list. + They must all be expressions that evaluate to byte or word + values—a mechanism similar to .alias + is used to assign their values to the _n + names. +


<<< PreviousHomeNext >>>
Headers, Libraries, and MacrosUpExample code
\ No newline at end of file diff --git a/site/manual/x287.html b/site/manual/x287.html new file mode 100644 index 0000000..e4c9395 --- /dev/null +++ b/site/manual/x287.html @@ -0,0 +1,161 @@ + +Example code
Programming with Ophis
<<< PreviousHeaders, Libraries, and MacrosNext >>>

Example code

tutor3.oph expands our + running example, including the code above and also defining a + new macro greet that takes a string argument + and prints a greeting to it. It then greets far too many + targets. +


<<< PreviousHomeNext >>>
MacrosUpCharacter maps
\ No newline at end of file diff --git a/site/manual/x430.html b/site/manual/x430.html new file mode 100644 index 0000000..8d0cb6a --- /dev/null +++ b/site/manual/x430.html @@ -0,0 +1,295 @@ + +The Solution
Programming with Ophis
<<< PreviousAdvanced Memory SegmentsNext >>>

The Solution

The .data and .text + commands can take a label name after them—this names a new + segment. We'll define a new segment + called zp (for "zero page") and + have our zero-page variables be placed there. We can't actually + use the default origin of $0000 here either, though, because the + Commodore 64 reserves memory locations 0 and 1 to control its + memory mappers: +

.data zp
+.org $0002

Now, actually, the rest of the zero page is reserved too: + locations $02-$7F are used by the BASIC interpreter, and + locations $80-$FF are used by the KERNAL. We don't need the + BASIC interpreter, though, so we can back up all of $02-$7F at + the start of our program and restore it all when we're done: +

.scope
+        ; Cache BASIC's zero page at top of available RAM.
+        ldx #$7E
+*       lda $01, x
+        sta $CF81, x
+        dex
+        bne -
+
+        jsr _main
+
+        ; Restore BASIC's zero page and return control.
+
+        ldx #$7E
+*       lda $CF81, x
+        sta $01, x
+        dex
+        bne -
+        rts
+
+_main:
+        ; _main points at the start of the real program,
+        ; which is actually outside of this scope
+.scend

The new, improved header file is c64-2.oph. +

Our print'str routine is then rewritten to + declare and use a zero-page variable, like so: +

; PRINTSTR routine.  Accumulator stores the low byte of the address,
+; X register stores the high byte.  Destroys the values of $10 and
+; $11.
+
+.scope
+.data zp
+.space _ptr 2
+.text
+printstr:
+        sta _ptr
+        stx _ptr+1
+        ldy #$00
+_lp:    lda (_ptr),y
+        beq _done
+        jsr chrout
+        iny
+        bne _lp
+_done:  rts
+.scend

Also, we ought to put in an extra check to make sure our + zero-page allocations don't overflow, either: +

.data zp
+.checkpc $80

That concludes our tour. The final source file + is tutor7.oph. +


<<< PreviousHomeNext >>>
Advanced Memory SegmentsUpWhere to go from here
\ No newline at end of file diff --git a/site/manual/x449.html b/site/manual/x449.html new file mode 100644 index 0000000..51ac5c9 --- /dev/null +++ b/site/manual/x449.html @@ -0,0 +1,162 @@ + +Where to go from here
Programming with Ophis
<<< PreviousAdvanced Memory SegmentsNext >>>

Where to go from here

This tutorial has touched on everything that the assembler can + do, but it's not really well organized as a + reference. the Appendix called Ophis Command Reference is a better place to look + up matters of syntax or consult lists of available commands. +

If you're looking for projects to undertake, the Commodore 64 + and Atari 2600 development communities are both very strong, and + the Apple II and NES development communities are still alive and + well as well. There's an annual Minigame Competition that's + always looking for new entries. +


<<< PreviousHomeNext >>>
The SolutionUpExample Programs
\ No newline at end of file diff --git a/site/manual/x461.html b/site/manual/x461.html new file mode 100644 index 0000000..f709075 --- /dev/null +++ b/site/manual/x461.html @@ -0,0 +1,183 @@ + +tutor2.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

tutor2.oph

.word $0801
+.org  $0801
+
+.scope
+        .word _next, 10         ; Next line and current line number
+        .byte $9e," 2064",0     ; SYS 2064
+_next:  .word 0                 ; End of program
+.scend
+
+.advance 2064
+
+.alias chrout $ffd2
+
+        ldx #0
+*       lda hello, x
+        beq +
+        jsr chrout
+        inx
+        bne -
+*       rts
+
+hello:  .byte "HELLO, WORLD!", 0

<<< PreviousHomeNext >>>
Example ProgramsUpc64-1.oph
\ No newline at end of file diff --git a/site/manual/x465.html b/site/manual/x465.html new file mode 100644 index 0000000..72ecc11 --- /dev/null +++ b/site/manual/x465.html @@ -0,0 +1,176 @@ + +c64-1.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

c64-1.oph

.word $0801
+.org  $0801
+
+.scope
+        .word _next, 10         ; Next line and current line number
+        .byte $9e," 2064",0     ; SYS 2064
+_next:  .word 0                 ; End of program
+.scend
+
+.advance 2064
+
+.require "kernal.oph"

<<< PreviousHomeNext >>>
tutor2.ophUpkernal.oph
\ No newline at end of file diff --git a/site/manual/x469.html b/site/manual/x469.html new file mode 100644 index 0000000..526cb88 --- /dev/null +++ b/site/manual/x469.html @@ -0,0 +1,231 @@ + +kernal.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

kernal.oph

; KERNAL routine aliases (C64)
+
+.alias acptr  $ffa5
+.alias chkin  $ffc6
+.alias chkout $ffc9
+.alias chrin  $ffcf
+.alias chrout $ffd2
+.alias ciout  $ffa8
+.alias cint   $ff81
+.alias clall  $ffe7
+.alias close  $ffc3
+.alias clrchn $ffcc
+.alias getin  $ffe4
+.alias iobase $fff3
+.alias ioinit $ff84
+.alias listen $ffb1
+.alias load   $ffd5
+.alias membot $ff9c
+.alias memtop $ff99
+.alias open   $ffc0
+.alias plot   $fff0
+.alias ramtas $ff87
+.alias rdtim  $ffde
+.alias readst $ffb7
+.alias restor $ff8a
+.alias save   $ffd8
+.alias scnkey $ff9f
+.alias screen $ffed
+.alias second $ff93
+.alias setlfs $ffba
+.alias setmsg $ff90
+.alias setnam $ffbd
+.alias settim $ffdb
+.alias settmo $ffa2
+.alias stop   $ffe1
+.alias talk   $ffb4
+.alias tksa   $ff96
+.alias udtim  $ffea
+.alias unlsn  $ffae
+.alias untlk  $ffab
+.alias vector $ff8d
+
+; Character codes for the colors.
+.alias color'0 144
+.alias color'1 5
+.alias color'2 28
+.alias color'3 159
+.alias color'4 156
+.alias color'5 30
+.alias color'6 31
+.alias color'7 158
+.alias color'8 129
+.alias color'9 149
+.alias color'10 150
+.alias color'11 151
+.alias color'12 152
+.alias color'13 153
+.alias color'14 154
+.alias color'15 155
+
+; ...and reverse video
+.alias reverse'on 18
+.alias reverse'off 146
+
+; ...and character set
+.alias upper'case 142
+.alias lower'case 14

<<< PreviousHomeNext >>>
c64-1.ophUptutor3.oph
\ No newline at end of file diff --git a/site/manual/x473.html b/site/manual/x473.html new file mode 100644 index 0000000..f349b39 --- /dev/null +++ b/site/manual/x473.html @@ -0,0 +1,209 @@ + +tutor3.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

tutor3.oph

.include "c64-1.oph"
+
+.macro print
+        ldx #0
+_loop:  lda _1, x
+        beq _done
+        jsr chrout
+        inx
+        bne _loop
+_done:
+.macend
+
+.macro greet
+        `print hello1
+        `print _1
+        `print hello2
+.macend
+
+        lda #147
+        jsr chrout
+        `greet target1
+        `greet target2
+        `greet target3
+        `greet target4
+        `greet target5
+        `greet target6
+        `greet target7
+        `greet target8
+        `greet target9
+        `greet target10
+        rts
+
+hello1: .byte "HELLO, ",0
+hello2: .byte "!", 13, 0
+
+target1:  .byte "PROGRAMMER", 0
+target2:  .byte "ROOM", 0
+target3:  .byte "BUILDING", 0
+target4:  .byte "NEIGHBORHOOD", 0
+target5:  .byte "CITY", 0
+target6:  .byte "NATION", 0
+target7:  .byte "WORLD", 0
+target8:  .byte "SOLAR SYSTEM", 0
+target9:  .byte "GALAXY", 0
+target10: .byte "UNIVERSE", 0

<<< PreviousHomeNext >>>
kernal.ophUptutor4a.oph
\ No newline at end of file diff --git a/site/manual/x477.html b/site/manual/x477.html new file mode 100644 index 0000000..8110a3a --- /dev/null +++ b/site/manual/x477.html @@ -0,0 +1,230 @@ + +tutor4a.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

tutor4a.oph

.include "c64-1.oph"
+
+.macro print
+        ldx #0
+_loop:  lda _1, x
+        beq _done
+        jsr chrout
+        inx
+        bne _loop
+_done:
+.macend
+
+.macro greet
+        lda #30
+        jsr delay
+        `print hello1
+        `print _1
+        `print hello2
+.macend
+
+        lda #147
+        jsr chrout
+        `greet target1
+        `greet target2
+        `greet target3
+        `greet target4
+        `greet target5
+        `greet target6
+        `greet target7
+        `greet target8
+        `greet target9
+        `greet target10
+        rts
+
+hello1: .byte "HELLO, ",0
+hello2: .byte "!", 13, 0
+
+target1:  .byte "PROGRAMMER", 0
+target2:  .byte "ROOM", 0
+target3:  .byte "BUILDING", 0
+target4:  .byte "NEIGHBORHOOD", 0
+target5:  .byte "CITY", 0
+target6:  .byte "NATION", 0
+target7:  .byte "WORLD", 0
+target8:  .byte "SOLAR SYSTEM", 0
+target9:  .byte "GALAXY", 0
+target10: .byte "UNIVERSE", 0
+
+; DELAY routine.  Executes 2,560*(A) NOP statements.
+delay:  tax
+        ldy #00
+*       nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        iny
+        bne -
+        dex
+        bne -
+        rts

<<< PreviousHomeNext >>>
tutor3.ophUptutor4b.oph
\ No newline at end of file diff --git a/site/manual/x481.html b/site/manual/x481.html new file mode 100644 index 0000000..2fa5d2a --- /dev/null +++ b/site/manual/x481.html @@ -0,0 +1,232 @@ + +tutor4b.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

tutor4b.oph

.include "c64-1.oph"
+
+.macro print
+        ldx #0
+_loop:  lda _1, x
+        beq _done
+        jsr chrout
+        inx
+        bne _loop
+_done:
+.macend
+
+.macro greet
+        lda #30
+        jsr delay
+        `print hello1
+        `print _1
+        `print hello2
+.macend
+
+        lda #147
+        jsr chrout
+        lda #lower'case
+        jsr chrout
+        `greet target1
+        `greet target2
+        `greet target3
+        `greet target4
+        `greet target5
+        `greet target6
+        `greet target7
+        `greet target8
+        `greet target9
+        `greet target10
+        rts
+
+hello1: .byte "Hello, ",0
+hello2: .byte "!", 13, 0
+
+target1:  .byte "programmer", 0
+target2:  .byte "room", 0
+target3:  .byte "building", 0
+target4:  .byte "neighborhood", 0
+target5:  .byte "city", 0
+target6:  .byte "nation", 0
+target7:  .byte "world", 0
+target8:  .byte "Solar System", 0
+target9:  .byte "Galaxy", 0
+target10: .byte "Universe", 0
+
+; DELAY routine.  Executes 2,560*(A) NOP statements.
+delay:  tax
+        ldy #00
+*       nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        iny
+        bne -
+        dex
+        bne -   
+        rts

<<< PreviousHomeNext >>>
tutor4a.ophUptutor4c.oph
\ No newline at end of file diff --git a/site/manual/x485.html b/site/manual/x485.html new file mode 100644 index 0000000..fa90f3e --- /dev/null +++ b/site/manual/x485.html @@ -0,0 +1,235 @@ + +tutor4c.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

tutor4c.oph

.include "c64-1.oph"
+
+.macro print
+        ldx #0
+_loop:  lda _1, x
+        beq _done
+        jsr chrout
+        inx
+        bne _loop
+_done:
+.macend
+
+.macro greet
+        lda #30
+        jsr delay
+        `print hello1
+        `print _1
+        `print hello2
+.macend
+
+        lda #147
+        jsr chrout
+        lda #lower'case
+        jsr chrout
+        `greet target1
+        `greet target2
+        `greet target3
+        `greet target4
+        `greet target5
+        `greet target6
+        `greet target7
+        `greet target8
+        `greet target9
+        `greet target10
+        rts
+
+.charmap 'A, "abcdefghijklmnopqrstuvwxyz"
+.charmap 'a, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+hello1: .byte "Hello, ",0
+hello2: .byte "!", 13, 0
+
+target1:  .byte "programmer", 0
+target2:  .byte "room", 0
+target3:  .byte "building", 0
+target4:  .byte "neighborhood", 0
+target5:  .byte "city", 0
+target6:  .byte "nation", 0
+target7:  .byte "world", 0
+target8:  .byte "Solar System", 0
+target9:  .byte "Galaxy", 0
+target10: .byte "Universe", 0
+
+; DELAY routine.  Executes 2,560*(A) NOP statements.
+delay:  tax
+        ldy #00
+*       nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        nop
+        iny
+        bne -
+        dex
+        bne -
+        rts

<<< PreviousHomeNext >>>
tutor4b.ophUptutor5.oph
\ No newline at end of file diff --git a/site/manual/x489.html b/site/manual/x489.html new file mode 100644 index 0000000..7ca3855 --- /dev/null +++ b/site/manual/x489.html @@ -0,0 +1,239 @@ + +tutor5.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

tutor5.oph

.include "c64-1.oph"
+
+.data
+.org $C000
+.text
+
+.macro print
+        ldx #0
+_loop:  lda _1, x
+        beq _done
+        jsr chrout
+        inx
+        bne _loop
+_done:
+.macend
+
+.macro greet
+        lda #30
+        jsr delay
+        `print hello1
+        `print _1
+        `print hello2
+.macend
+
+        lda #147
+        jsr chrout
+        `greet target1
+        `greet target2
+        `greet target3
+        `greet target4
+        `greet target5
+        `greet target6
+        `greet target7
+        `greet target8
+        `greet target9
+        `greet target10
+        rts
+
+hello1: .byte "HELLO, ",0
+hello2: .byte "!", 13, 0
+
+target1:  .byte "PROGRAMMER", 0
+target2:  .byte "ROOM", 0
+target3:  .byte "BUILDING", 0
+target4:  .byte "NEIGHBORHOOD", 0
+target5:  .byte "CITY", 0
+target6:  .byte "NATION", 0
+target7:  .byte "WORLD", 0
+target8:  .byte "SOLAR SYSTEM", 0
+target9:  .byte "GALAXY", 0
+target10: .byte "UNIVERSE", 0
+
+; DELAY routine.  Takes values from the Accumulator and pauses
+; for that many jiffies (1/60th of a second).
+.scope
+.data
+.space _tmp 1
+.space _target 1
+
+.text
+
+delay:  sta _tmp        ; save argument (rdtim destroys it)
+        jsr rdtim
+        clc
+        adc _tmp        ; add current time to get target
+        sta _target
+*       jsr rdtim
+        cmp _target
+        bmi -           ; Buzz until target reached
+        rts
+.scend
+
+.checkpc $A000
+.data
+.checkpc $D000

<<< PreviousHomeNext >>>
tutor4c.ophUptutor6.oph
\ No newline at end of file diff --git a/site/manual/x493.html b/site/manual/x493.html new file mode 100644 index 0000000..28b3f1b --- /dev/null +++ b/site/manual/x493.html @@ -0,0 +1,266 @@ + +tutor6.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

tutor6.oph

.include "c64-1.oph"
+
+.data
+.org $C000
+.space cache 2
+.text
+
+.macro print
+        lda #<_1
+        ldx #>_1
+        jsr printstr
+.macend
+
+.macro greet
+        lda #30
+        jsr delay
+        `print hello1
+        `print _1
+        `print hello2
+.macend
+
+        ; Save the zero page locations that PRINTSTR uses.
+        lda $10
+        sta cache
+        lda $11
+        sta cache+1
+
+        lda #147
+        jsr chrout
+        `greet target1
+        `greet target2
+        `greet target3
+        `greet target4
+        `greet target5
+        `greet target6
+        `greet target7
+        `greet target8
+        `greet target9
+        `greet target10
+
+        ; Restore the zero page values printstr uses.
+        lda cache
+        sta $10
+        lda cache+1
+        sta $11
+
+        rts
+
+hello1: .byte "HELLO, ",0
+hello2: .byte "!", 13, 0
+
+target1:  .byte "PROGRAMMER", 0
+target2:  .byte "ROOM", 0
+target3:  .byte "BUILDING", 0
+target4:  .byte "NEIGHBORHOOD", 0
+target5:  .byte "CITY", 0
+target6:  .byte "NATION", 0
+target7:  .byte "WORLD", 0
+target8:  .byte "SOLAR SYSTEM", 0
+target9:  .byte "GALAXY", 0
+target10: .byte "UNIVERSE", 0
+
+; DELAY routine.  Takes values from the Accumulator and pauses
+; for that many jiffies (1/60th of a second).
+.scope
+.data
+.space _tmp 1
+.space _target 1
+
+.text
+
+delay:  sta _tmp        ; save argument (rdtim destroys it)
+        jsr rdtim
+        clc
+        adc _tmp        ; add current time to get target
+        sta _target
+*       jsr rdtim
+        cmp _target
+        bmi -           ; Buzz until target reached
+        rts
+.scend
+
+; PRINTSTR routine.  Accumulator stores the low byte of the address,
+; X register stores the high byte.  Destroys the values of $10 and
+; $11.
+
+.scope
+printstr:
+        sta $10
+        stx $11
+        ldy #$00
+_lp:    lda ($10),y
+        beq _done
+        jsr chrout
+        iny
+        bne _lp
+_done:  rts
+.scend
+
+.checkpc $A000
+.data
+.checkpc $D000

<<< PreviousHomeNext >>>
tutor5.ophUpc64-2.oph
\ No newline at end of file diff --git a/site/manual/x497.html b/site/manual/x497.html new file mode 100644 index 0000000..c07873f --- /dev/null +++ b/site/manual/x497.html @@ -0,0 +1,204 @@ + +c64-2.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

c64-2.oph

.word $0801
+.org  $0801
+
+.scope
+        .word _next, 10         ; Next line and current line number
+        .byte $9e," 2064",0     ; SYS 2064
+_next:  .word 0                 ; End of program
+.scend
+
+.advance $0810
+
+.require "kernal.oph"
+
+.data zp
+.org $0002
+
+.text
+
+.scope
+        ; Cache BASIC's zero page at top of available RAM.
+        ldx #$7E
+*       lda $01, x
+        sta $CF81, x
+        dex
+        bne -
+
+        jsr _main
+
+        ; Restore BASIC's zero page and return control.
+
+        ldx #$7E
+*       lda $CF81, x
+        sta $01, x
+        dex
+        bne -
+        rts
+
+_main:
+        ; Program follows...
+.scend

<<< PreviousHomeNext >>>
tutor6.ophUptutor7.oph
\ No newline at end of file diff --git a/site/manual/x501.html b/site/manual/x501.html new file mode 100644 index 0000000..2d51914 --- /dev/null +++ b/site/manual/x501.html @@ -0,0 +1,257 @@ + +tutor7.oph
Programming with Ophis
<<< PreviousExample ProgramsNext >>>

tutor7.oph

.include "c64-2.oph"
+
+.data
+.org $C000
+.text
+
+.macro print
+        lda #<_1
+        ldx #>_1
+        jsr printstr
+.macend
+
+.macro greet
+        lda #30
+        jsr delay
+        `print hello1
+        `print _1
+        `print hello2
+.macend
+
+        lda #147
+        jsr chrout
+        `greet target1
+        `greet target2
+        `greet target3
+        `greet target4
+        `greet target5
+        `greet target6
+        `greet target7
+        `greet target8
+        `greet target9
+        `greet target10
+
+        rts
+
+hello1: .byte "HELLO, ",0
+hello2: .byte "!", 13, 0
+
+target1:  .byte "PROGRAMMER", 0
+target2:  .byte "ROOM", 0
+target3:  .byte "BUILDING", 0
+target4:  .byte "NEIGHBORHOOD", 0
+target5:  .byte "CITY", 0
+target6:  .byte "NATION", 0
+target7:  .byte "WORLD", 0
+target8:  .byte "SOLAR SYSTEM", 0
+target9:  .byte "GALAXY", 0
+target10: .byte "UNIVERSE", 0
+
+; DELAY routine.  Takes values from the Accumulator and pauses
+; for that many jiffies (1/60th of a second).
+.scope
+.data
+.space _tmp 1
+.space _target 1
+
+.text
+
+delay:  sta _tmp        ; save argument (rdtim destroys it)
+        jsr rdtim
+        clc
+        adc _tmp        ; add current time to get target
+        sta _target
+*       jsr rdtim
+        cmp _target
+        bmi -           ; Buzz until target reached
+        rts
+.scend
+
+; PRINTSTR routine.  Accumulator stores the low byte of the address,
+; X register stores the high byte.  Destroys the values of $10 and
+; $11.
+
+.scope
+.data zp
+.space _ptr 2
+.text
+printstr:
+        sta _ptr
+        stx _ptr+1
+        ldy #$00
+_lp:    lda (_ptr),y
+        beq _done
+        jsr chrout
+        iny
+        bne _lp
+_done:  rts
+.scend
+
+.checkpc $A000
+
+.data
+.checkpc $D000
+
+.data zp
+.checkpc $80

<<< PreviousHomeNext >>>
c64-2.ophUpOphis Command Reference
\ No newline at end of file diff --git a/site/manual/x51.html b/site/manual/x51.html new file mode 100644 index 0000000..c45fb2d --- /dev/null +++ b/site/manual/x51.html @@ -0,0 +1,428 @@ + +Producing Commodore 64 programs
Programming with Ophis
<<< PreviousThe basicsNext >>>

Producing Commodore 64 programs

Commodore 64 programs are stored in + the PRG format on disk. Some emulators + (such as CCS64 or VICE) can run PRG + programs directly; others need them to be transferred to + a D64 image first. +

The PRG format is ludicrously simple. It + has two bytes of header data: This is a little-endian number + indicating the starting address. The rest of the file is a + single continuous chunk of data loaded into memory, starting at + that address. BASIC memory starts at memory location 2048, and + that's probably where we'll want to start. +

Well, not quite. We want our program to be callable from BASIC, + so we should have a BASIC program at the start. We guess the + size of a simple one line BASIC program to be about 16 bytes. + Thus, we start our program at memory location 2064 ($0810), and + the BASIC program looks like this: +

10 SYS 2064
+    

We SAVE this program to a file, then + study it in a debugger. It's 15 bytes long: +

1070:0100  01 08 0C 08 0A 00 9E 20-32 30 36 34 00 00 00
+    

The first two bytes are the memory location: $0801. The rest of + the data breaks down as follows: +

Table 1. BASIC program breakdown

Memory LocationsValue
$0801-$08022-byte pointer to the next line of BASIC code ($080C).
$0803-$08042-byte line number ($000A = 10).
$0805Byte code for the SYS command.
$0806-$080AThe rest of the line, which is just the string " 2064".
$080BNull byte, terminating the line.
$080C-$080D2-byte pointer to the next line of BASIC code ($0000 = end of program).

That's 13 bytes. We started at 2049, so we need 2 more bytes of + filler to make our code actually start at location 2064. These + 17 bytes will give us the file format and the BASIC code we need + to have our machine language program run. +

These are just bytes—indistinguishable from any other sort of + data. In Ophis, bytes of data are specified with + the .byte command. We'll also have to tell + Ophis what the program counter should be, so that it knows what + values to assign to our labels. The .org + (origin) command tells Ophis this. Thus, the Ophis code for our + header and linking info is: +

.byte $01, $08, $0C, $08, $0A, $00, $9E, $20
+.byte $32, $30, $36, $34, $00, $00, $00, $00
+.byte $00, $00
+.org $0810
+    

This gets the job done, but it's completely incomprehensible, + and it only uses two directives—not very good for a + tutorial. Here's a more complicated, but much clearer, way of + saying the same thing. +

.word $0801
+.org  $0801
+
+        .word next, 10       ; Next line and current line number
+        .byte $9e," 2064",0  ; SYS 2064
+next:   .word 0              ; End of program
+
+.advance 2064
+    

This code has many advantages over the first. + +

  • It describes better what is actually + happening. The .word directive at the + beginning indicates a 16-bit value stored in the typical + 65xx way (small byte first). This is followed by + an .org statement, so we let the + assembler know right away where everything is supposed to + be. +

  • Instead of hardcoding in the value $080C, we + instead use a label to identify the location it's pointing + to. Ophis will compute the address + of next and put that value in as data. + We also describe the line number in decimal since BASIC + line numbers generally are in decimal. + Labels are defined by putting their name, then a colon, as + seen in the definition of next. +

  • + Instead of putting in the hex codes for the string part of + the BASIC code, we included the string directly. Each + character in the string becomes one byte. +

  • + Instead of adding the buffer ourselves, we + used .advance, which outputs zeros until + the specified address is reached. Attempting + to .advance backwards produces an + assemble-time error. +

  • + It has comments that explain what the data are for. The + semicolon is the comment marker; everything from a semicolon + to the end of the line is ignored. +

+


<<< PreviousHomeNext >>>
The basicsUpRelated commands and options
\ No newline at end of file diff --git a/site/manual/x572.html b/site/manual/x572.html new file mode 100644 index 0000000..796dbc2 --- /dev/null +++ b/site/manual/x572.html @@ -0,0 +1,309 @@ + +Basic arguments
Programming with Ophis
<<< PreviousOphis Command ReferenceNext >>>

Basic arguments

Most arguments are just a number or label. The formats for + these are below. +

Numeric types

  • Hex: $41 (Prefixed with $)

  • Decimal: 65 (No markings)

  • Octal: 0101 (Prefixed with zero)

  • Binary: %01000001 (Prefixed with %)

  • Character: 'A (Prefixed with single quote)

Label types

Normal labels are simply referred to by name. Anonymous + labels may be referenced with strings of - or + signs (the + label - refers to the immediate + previous anonymous label, -- the + one before that, etc., while + + refers to the next anonymous label), and the special + label ^ refers to the program + counter at the start of the current instruction or directive. +

Normal labels are defined by + prefixing a line with the label name and then a colon + (e.g., label:). Anonymous labels + are defined by prefixing a line with an asterisk + (e.g., *). +

Temporary labels are only reachable from inside the + innermost enclosing .scope + statement. They are identical to normal labels in every + way, except that they start with an underscore. +

String types

Strings are enclosed in double quotation marks. Backslashed + characters (including backslashes and double quotes) are + treated literally, so the string "The man said, + \"The \\ character is the backslash.\"" produces + the ASCII sequence for The man said, "The \ + character is the backslash." +

Strings are generally only used as arguments to assembler + directives—usually for filenames + (e.g., .include) but also for string + data (in association with .byte). +

It is legal, though unusual, to attempt to pass a string to + the other data statements. This will produces a series of + words/dwords where all bytes that aren't least-significant + are zero. Endianness and size will match what the directive + itself indicated. +


<<< PreviousHomeNext >>>
Ophis Command ReferenceUpCompound Arguments
\ No newline at end of file diff --git a/site/manual/x620.html b/site/manual/x620.html new file mode 100644 index 0000000..753c8a4 --- /dev/null +++ b/site/manual/x620.html @@ -0,0 +1,212 @@ + +Compound Arguments
Programming with Ophis
<<< PreviousOphis Command ReferenceNext >>>

Compound Arguments

Compound arguments may be built up from simple ones, using the + standard +, -, *, and / operators, which carry the usual + precedence. Also, the unary operators > and <, which + bind more tightly than anything else, provide the high and low + bytes of 16-bit values, respectively. +

Use brackets [ ] instead of parentheses ( ) when grouping + arithmetic operations, as the parentheses are needed for the + indirect addressing modes. +

Examples: +

  • $D000 evaluates to $D000

  • $D000+32 evaluates to $D020

  • $D000+$20 also evaluates to $D020

  • <$D000+32 evaluates to $20

  • >$D000+32 evaluates to $F0

  • >[$D000+32] evaluates to $D0

  • >$D000-275 evaluates to $CE


<<< PreviousHomeNext >>>
Basic argumentsUpMemory Model
\ No newline at end of file diff --git a/site/manual/x647.html b/site/manual/x647.html new file mode 100644 index 0000000..61ac742 --- /dev/null +++ b/site/manual/x647.html @@ -0,0 +1,373 @@ + +Memory Model
Programming with Ophis
<<< PreviousOphis Command ReferenceNext >>>

Memory Model

In order to properly compute the locations of labels and the + like, Ophis must keep track of where assembled code will + actually be sitting in memory, and it strives to do this in a + way that is independent both of the target file and of the + target machine. +

Basic PC tracking

The primary technique Ophis uses is program counter + tracking. As it assembles the code, it keeps + track of a virtual program counter, and uses that to + determine where the labels should go. +

In the absence of an .org directive, it + assumes a starting PC of zero. .org + is a simple directive, setting the PC to the value + that .org specifies. In the simplest + case, one .org directive appears at the + beginning of the code and sets the location for the rest of + the code, which is one contiguous block. +

Basic Segmentation simulation

However, this isn't always practical. Often one wishes to + have a region of memory reserved for data without actually + mapping that memory to the file. On some systems (typically + cartridge-based systems where ROM and RAM are seperate, and + the target file only specifies the ROM image) this is + mandatory. In order to access these variables symbolically, + it's necessary to put the values into the label lookup + table. +

It is possible, but inconvenient, to do this + with .alias, assigning a specific + memory location to each variable. This requires careful + coordination through your code, and makes creating reusable + libraries all but impossible. +

A better approach is to reserve a section at the beginning + or end of your program, put an .org + directive in, then use the .space + directive to divide up the data area. This is still a bit + inconvenient, though, because all variables must be + assigned all at once. What we'd really like is to keep + multiple PC counters, one for data and one for code. +

The .text + and .data directives do this. Each + has its own PC that starts at zero, and you can switch + between the two at any point without corrupting the other's + counter. In this way each function can have + a .data section (filled + with .space commands) and + a .text section (that contains the + actual code). This lets our library routines be almost + completely self-contained - we can have one source file + that could be .included by multiple + projects without getting in anything's way. +

However, any given program may have its own ideas about + where data and code go, and it's good to ensure with + a .checkpc at the end of your code + that you haven't accidentally overwritten code with data or + vice versa. If your .data + segment did start at zero, it's + probably wise to make sure you aren't smashing the stack, + too (which is sitting in the region from $0100 to + $01FF). +

If you write code with no segment-defining statements in + it, the default segment + is text. +

The data segment is designed only + for organizing labels. As such, errors will be flagged if + you attempt to actually output information into + a data segment. +

General Segmentation Simulation

One text and data segment each is usually sufficient, but + for the cases where it is not, Ophis allows for user-defined + segments. Putting a label + after .text + or .data produces a new segment with + the specified name. +

Say, for example, that we have access to the RAM at the low + end of the address space, but want to reserve the zero page + for truly critical variables, and use the rest of RAM for + everything else. Let's also assume that this is a 6510 + chip, and locations $00 and $01 are reserved for the I/O + port. We could start our program off with: +

.data
+.org $200
+.data zp
+.org $2
+.text
+.org $800

And, to be safe, we would probably want to end our code + with checks to make sure we aren't overwriting anything: +

.data
+.checkpc $800
+.data zp
+.checkpc $100

<<< PreviousHomeNext >>>
Compound ArgumentsUpMacros
\ No newline at end of file diff --git a/site/manual/x692.html b/site/manual/x692.html new file mode 100644 index 0000000..263921a --- /dev/null +++ b/site/manual/x692.html @@ -0,0 +1,358 @@ + +Macros
Programming with Ophis
<<< PreviousOphis Command ReferenceNext >>>

Macros

Assembly language is a powerful tool—however, there are + many tasks that need to be done repeatedly, and with + mind-numbing minor modifications. Ophis includes a facility + for macros to allow this. Ophis macros + are very similar in form to function calls in higher level + languages. +

Defining Macros

Macros are defined with the .macro + and .macend commands. Here's a + simple one that will clear the screen on a Commodore + 64: +

.macro clr'screen
+    lda #147
+    jsr $FFD2
+.macend

Invoking Macros

To invoke a macro, either use + the .invoke command or backquote the + name of the routine. The previous macro may be expanded + out in either of two ways, at any point in the + source: +

.invoke clr'screen

or

`clr'screen

will work equally well.

Passing Arguments to Macros

Macros may take arguments. The arguments to a macro are + all of the "word" type, though byte values may + be passed and used as bytes as well. The first argument in + an invocation is bound to the label + _1, the second + to _2, and so on. Here's a macro + for storing a 16-bit value into a word pointer: +

.macro store16   ; `store16 dest, src
+	lda #<_2
+	sta _1
+	lda #>_2
+	sta _1+1
+.macend

Macro arguments behave, for the most part, as if they were + defined by .alias + commands in the calling context. + (They differ in that they will not produce duplicate-label + errors if those names already exist in the calling scope, + and in that they disappear after the call is + completed.) +

Features and Restrictions of the Ophis Macro Model

Unlike most macro systems (which do textual replacement), + Ophis macros evaluate their arguments and bind them into the + symbol table as temporary labels. This produces some + benefits, but it also puts some restrictions on what kinds of + macros may be defined. +

The primary benefit of this "expand-via-binding" + discipline is that there are no surprises in the semantics. + The expression _1+1 in the macro above + will always evaluate to one more than the value that was + passed as the first argument, even if that first argument is + some immensely complex expression that an + expand-via-substitution method may accidentally + mangle. +

The primary disadvantage of the expand-via-binding + discipline is that only fixed numbers of words and bytes + may be passed. A substitution-based system could define a + macro including the line LDA _1 and + accept as arguments both $C000 + (which would put the value of memory location $C000 into + the accumulator) and #$40 (which + would put the immediate value $40 into the accumulator). + If you really need this kind of + behavior, a run a C preprocessor over your Ophis source, + and use #define to your heart's + content. +


<<< PreviousHomeNext >>>
Memory ModelUpAssembler directives
\ No newline at end of file diff --git a/site/manual/x732.html b/site/manual/x732.html new file mode 100644 index 0000000..513e1fa --- /dev/null +++ b/site/manual/x732.html @@ -0,0 +1,595 @@ + +Assembler directives
Programming with Ophis
<<< PreviousOphis Command Reference 

Assembler directives

Assembler directives are all instructions to the assembler + that are not actual instructions. Ophis's set of directives + follow. +

  • .advance address: + Forces the program counter to + be address. Unlike + the .org + directive, .advance outputs zeroes until the + program counter reaches a specified address. Attempting + to .advance to a point behind the current + program counter is an assemble-time error.

  • .alias label value: The + .alias directive assigns an arbitrary value to a label. This + value may be an arbitrary argument, but cannot reference any + label that has not already been defined (this prevents + recursive label dependencies).

  • .byte arg [ , arg, ... ]: + Specifies a series of arguments, which are evaluated, and + strings, which are included as raw ASCII data. The final + results of these arguments must be one byte in size. Seperate + constants are seperated by comments.

  • .checkpc address: Ensures that the + program counter is less than or equal to the address + specified, and emits an assemble-time error if it is not. + This produces no code in the final binary - it is there to + ensure that linking a large amount of data together does not + overstep memory boundaries.

  • .data [label]: Sets the segment to + the segment name specified and disallows output. If no label + is given, switches to the default data segment.

  • .incbin filename: Inserts the + contents of the file specified as binary data. Use it to + include graphics information, precompiled code, or other + non-assembler data.

  • .include filename: Includes the + entirety of the file specified at that point in the program. + Use this to order your final sources.

  • .org address: Sets the program + counter to the address specified. This does not emit any + code in and of itself, nor does it overwrite anything that + previously existed. If you wish to jump ahead in memory, + use .advance.

  • .require filename: Includes the entirety + of the file specified at that point in the program. Unlike .include, + however, code included with .require will only be inserted once. + The .require directive is useful for ensuring that certain code libraries + are somewhere in the final binary. They are also very useful for guaranteeing that + macro libraries are available.

  • .space label size: This + directive is used to organize global variables. It defines the + label specified to be at the current location of the program + counter, and then advances the program counter size + steps ahead. No actual code is produced. This is equivalent + to label: .org ^+size.

  • .text [label]: Sets the segment to + the segment name specified and allows output. If no label is + given, switches to the default text segment.

  • .word arg [ , arg, ... ]: + Like .byte, but values are all treated as two-byte + values and stored low-end first (as is the 6502's wont). Use + this to create jump tables (an unadorned label will evaluate + to that label's location) or otherwise store 16-bit + data.

  • .dword arg [ , arg, ...]: + Like .word, but for 32-bit values.

  • .wordbe arg [ , arg, ...]: + Like .word, but stores the value in a big-endian format (high byte first).

  • .dwordbe arg [ , arg, ...]: + Like .dword, but stores the value high byte first.

  • .scope: Starts a new scope block. Labels + that begin with an underscore are only reachable from within + their innermost enclosing .scope statement.

  • .scend: Ends a scope block. Makes the + temporary labels defined since the last .scope + statement unreachable, and permits them to be redefined in a + new scope.

  • .macro name: Begins a macro + definition block. This is a scope block that can be inlined + at arbitrary points with .invoke. Arguments to the + macro will be bound to temporary labels with names like + _1, _2, etc.

  • .macend: Ends a macro definition + block.

  • .invoke label [argument [, + argument ...]]: invokes (inlines) the specified + macro, binding the values of the arguments to the ones the + macro definition intends to read. A shorthand for .invoke + is the name of the macro to invoke, backquoted.

The following directives are deprecated, added for + compatibility with the old Perl + assembler P65. Use + the -d option to Ophis to enable + them. +

  • .ascii: Equivalent to .byte, + which didn't used to be able to handle strings.

  • .code: Equivalent to .text.

  • .segment: Equivalent to .text, + from when there was no distinction between .text and + .data segments.

  • .address: Equivalent to + .word.

  • .link filename address: Assembles + the file specified as if it began at the address specified. + This is generally for use in "top-level" files, where there + is not necessarily a one-to-one correspondence between file + position and memory position. This is equivalent to an + .org directive followed by an .include. + With the introduction of the .org directive this one is + less useful (and in most cases, any .org statement + you use will actually be at the top of the .included + file).

\ No newline at end of file diff --git a/site/ophismanual.pdf b/site/ophismanual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a399c66b89ef749a220a9f901f6aa29de557a48c GIT binary patch literal 367372 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į<_301>TmO-^tlKvA> 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 z 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
bU0>^c}E;y}G8>_LX7vX0!Np0OV-TRL4*hplA51 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 r^!aN 255: + Err.log("Charmap replacement out of range") + currentcharmap = currentcharmap[:256] + except ValueError: + Err.log("Illegal character in .charmap directive") + +def pragmaCharmapbin(ppt, line, result): + "Load a new character map from a file" + global currentcharmap + filename = line.expect("STRING").value + line.expect("EOL") + if type(filename)==str: + f = file(filename, "rb") + bytes = f.read() + f.close() + if len(bytes)==256: + currentcharmap = bytes + else: + Err.log("Character map "+filename+" not 256 bytes long") + +def pragmaOrg(ppt, line, result): + "Relocates the PC with no output" + newPC = FE.parse_expr(line) + line.expect("EOL") + result.append(IR.Node(ppt, "SetPC", newPC)) + +def pragmaAdvance(ppt, line, result): + "Outputs filler until reaching the target PC" + newPC = FE.parse_expr(line) + line.expect("EOL") + result.append(IR.Node(ppt, "Advance", newPC)) + +def pragmaCheckpc(ppt, line, result): + "Enforces that the PC has not exceeded a certain point" + target = FE.parse_expr(line) + line.expect("EOL") + result.append(IR.Node(ppt, "CheckPC", target)) + +def pragmaAlias(ppt, line, result): + "Assigns an arbitrary label" + lbl = line.expect("LABEL").value + target = FE.parse_expr(line) + result.append(IR.Node(ppt, "Label", lbl, target)) + +def pragmaSpace(ppt, line, result): + "Reserves space in a data segment for a variable" + lbl = line.expect("LABEL").value + size = line.expect("NUM").value + line.expect("EOL") + result.append(IR.Node(ppt, "Label", lbl, IR.PCExpr())) + result.append(IR.Node(ppt, "SetPC", IR.SequenceExpr([IR.PCExpr(), "+", IR.ConstantExpr(size)]))) + +def pragmaText(ppt, line, result): + "Switches to a text segment" + next = line.expect("LABEL", "EOL") + if next.type == "LABEL": + line.expect("EOL") + segment = next.value + else: + segment = "*text-default*" + result.append(IR.Node(ppt, "TextSegment", segment)) + +def pragmaData(ppt, line, result): + "Switches to a data segment (no output allowed)" + next = line.expect("LABEL", "EOL") + if next.type == "LABEL": + line.expect("EOL") + segment = next.value + else: + segment = "*data-default*" + result.append(IR.Node(ppt, "DataSegment", segment)) + +def readData(line): + "Read raw data from a comma-separated list" + if line.lookahead(0).type == "STRING": + data = [IR.ConstantExpr(ord(x)) for x in line.expect("STRING").value.translate(currentcharmap)] + else: + data = [FE.parse_expr(line)] + next = line.expect(',', 'EOL').type + while next == ',': + if line.lookahead(0).type == "STRING": + data.extend([IR.ConstantExpr(ord(x)) for x in line.expect("STRING").value]) + else: + data.append(FE.parse_expr(line)) + next = line.expect(',', 'EOL').type + return data + +def pragmaByte(ppt, line, result): + "Raw data, a byte at a time" + bytes = readData(line) + result.append(IR.Node(ppt, "Byte", *bytes)) + +def pragmaWord(ppt, line, result): + "Raw data, a word at a time, little-endian" + words = readData(line) + result.append(IR.Node(ppt, "Word", *words)) + +def pragmaDword(ppt, line, result): + "Raw data, a double-word at a time, little-endian" + dwords = readData(line) + result.append(IR.Node(ppt, "Dword", *dwords)) + +def pragmaWordbe(ppt, line, result): + "Raw data, a word at a time, big-endian" + words = readData(line) + result.append(IR.Node(ppt, "WordBE", *words)) + +def pragmaDwordbe(ppt, line, result): + "Raw data, a dword at a time, big-endian" + dwords = readData(line) + result.append(IR.Node(ppt, "DwordBE", *dwords)) + +def pragmaScope(ppt, line, result): + "Create a new lexical scoping block" + line.expect("EOL") + result.append(IR.Node(ppt, "ScopeBegin")) + +def pragmaScend(ppt, line, result): + "End the innermost lexical scoping block" + line.expect("EOL") + result.append(IR.Node(ppt, "ScopeEnd")) + +def pragmaMacro(ppt, line, result): + "Begin a macro definition" + lbl = line.expect("LABEL").value + line.expect("EOL") + result.append(IR.Node(ppt, "MacroBegin", lbl)) + +def pragmaMacend(ppt, line, result): + "End a macro definition" + line.expect("EOL") + result.append(IR.Node(ppt, "MacroEnd")) + +def pragmaInvoke(ppt, line, result): + macro = line.expect("LABEL").value + if line.lookahead(0).type == "EOL": + args = [] + else: + args = readData(line) + result.append(IR.Node(ppt, "MacroInvoke", macro, *args)) diff --git a/src/Ophis/Environment.py b/src/Ophis/Environment.py new file mode 100644 index 0000000..1308b3e --- /dev/null +++ b/src/Ophis/Environment.py @@ -0,0 +1,75 @@ +"""Symbol tables and environments for P65. + + Implements the symbol lookup, through nested environments - + any non-temporary variable is stored at the top level.""" + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + +from __future__ import nested_scopes +import Ophis.Errors as Err + +class Environment: + """Environment class. + Controls the various scopes and global abstract execution variables.""" + def __init__(self): + self.dicts = [{}] + self.stack = [0] + self.pc = 0 + self.segmentdict = {} + self.segment = "*text-default*" + self.scopecount = 0 + def __contains__(self, item): + if item[0] == '_': + for dict in [self.dicts[i] for i in self.stack]: + if item in dict: return 1 + return 0 + return item in self.dicts[0] + def __getitem__(self, item): + if item[0] == '_': + for dict in [self.dicts[i] for i in self.stack]: + if item in dict: return dict[item] + else: + if item in self.dicts[0]: return self.dicts[0][item] + Err.log("Unknown label '%s'" % item) + return 0 + def __setitem__(self, item, value): + if item[0] == '_': + self.dicts[self.stack[0]][item] = value + else: + self.dicts[0][item] = value + def __str__(self): + return str(self.dicts) + def getPC(self): + return self.pc + def setPC(self, value): + self.pc = value + def incPC(self, amount): + self.pc += amount + def getsegment(self): + return self.segment + def setsegment(self, segment): + self.segmentdict[self.segment] = self.pc + self.segment = segment + self.pc = self.segmentdict.get(segment, 0) + def reset(self): + "Clears out program counter, segment, and scoping information" + self.pc = 0 + self.segmentdict = {} + self.segment = "*text-default*" + self.scopecount = 0 + if len(self.stack) > 1: + Err.log("Unmatched .scope") + self.stack = [0] + def newscope(self): + "Enters a new scope for temporary labels." + self.scopecount += 1 + self.stack.insert(0, self.scopecount) + if len(self.dicts) <= self.scopecount: self.dicts.append({}) + def endscope(self): + "Leaves a scope." + if len(self.stack) == 1: + Err.log("Unmatched .scend") + self.stack.pop(0) + diff --git a/src/Ophis/Errors.py b/src/Ophis/Errors.py new file mode 100644 index 0000000..024d0f9 --- /dev/null +++ b/src/Ophis/Errors.py @@ -0,0 +1,24 @@ +"""Error logging + + Keeps track of the number of errors inflicted so far, and + where in the assembly the errors are occurring.""" + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + +count = 0 +currentpoint = "" + +def log(err): + """Reports an error at the current program point, and increases +the global error count.""" + global count + count = count+1 + print currentpoint+": "+err + +def report(): + "Print out the number of errors." + if count == 0: print "No errors" + elif count == 1: print "1 error" + else: print str(count)+" errors" \ No newline at end of file diff --git a/src/Ophis/Frontend.py b/src/Ophis/Frontend.py new file mode 100644 index 0000000..48e319b --- /dev/null +++ b/src/Ophis/Frontend.py @@ -0,0 +1,333 @@ +"""Lexer and Parser + + Constructs a list of IR nodes from a list of input strings.""" + +from __future__ import nested_scopes +import Ophis.Errors as Err +import Ophis.Opcodes as Ops +import Ophis.IR as IR +import Ophis.CmdLine as Cmd +import os + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + + +class Lexeme: + "Class for lexer tokens. Used by lexer and parser." + def __init__(self, type="UNKNOWN", value=None): + self.type = type.upper() + self.value = value + def __str__(self): + if self.value == None: + return self.type + else: + return self.type+":"+str(self.value) + def __repr__(self): + return "Lexeme("+`self.type`+", "+`self.value`+")" + def matches(self, other): + "1 if Lexemes a and b have the same type." + return self.type == other.type + +bases = {"$":("hexadecimal", 16), + "%":("binary", 2), + "0":("octal", 8)} + +punctuation = "#,`<>():.+-*/&|^[]" + +def lex(point, line): + """Turns a line of source into a sequence of lexemes.""" + Err.currentpoint = point + result = [] + def is_opcode(op): + "Tests whether a string is an opcode or an identifier" + return op in Ops.opcodes + def add_token(token): + "Converts a substring into a single lexeme" + if token == "": + return + if token == "0": + result.append(Lexeme("NUM", 0)) + return + firstchar = token[0] + rest = token[1:] + if firstchar == '"': + result.append(Lexeme("STRING", rest)) + return + elif firstchar in bases: + try: + result.append(Lexeme("NUM", long(rest, bases[firstchar][1]))) + return + except ValueError: + Err.log('Invalid '+bases[firstchar][0]+' constant: '+rest) + result.append(Lexeme("NUM", 0)) + return + elif firstchar.isdigit(): + try: + result.append(Lexeme("NUM", long(token))) + except ValueError: + Err.log('Identifiers may not begin with a number') + result.append(Lexeme("LABEL", "ERROR")) + return + elif firstchar == "'": + if len(rest) == 1: + result.append(Lexeme("NUM", ord(rest))) + else: + Err.log("Invalid character constant '"+rest+"'") + result.append(Lexeme("NUM", 0)) + return + elif firstchar in punctuation: + if rest != "": + Err.log("Internal lexer error! '"+token+"' can't happen!") + result.append(Lexeme(firstchar)) + return + else: # Label, opcode, or index register + id = token.lower() + if is_opcode(id): + result.append(Lexeme("OPCODE", id)) + elif id == "x": + result.append(Lexeme("X")) + elif id == "y": + result.append(Lexeme("Y")) + else: + result.append(Lexeme("LABEL", id)) + return + # should never reach here + Err.log("Internal lexer error: add_token fall-through") + def add_EOL(): + "Adds an end-of-line lexeme" + result.append(Lexeme("EOL")) + # Actual routine begins here + value = "" + quotemode = 0 + backslashmode = 0 + for c in line.strip(): + if backslashmode: + backslashmode = 0 + value = value + c + elif c == "\\": + backslashmode = 1 + elif quotemode: + if c == '"': + quotemode = 0 + else: + value = value + c + elif c == ';': + add_token(value) + value = "" + break + elif c.isspace(): + add_token(value) + value = "" + elif c in punctuation: + add_token(value) + add_token(c) + value = "" + elif c == '"': + add_token(value) + value = '"' + quotemode = 1 + else: + value = value + c + if backslashmode: + Err.log("Backslashed newline") + if quotemode: + Err.log("Unterminated string constant") + add_token(value) + add_EOL() + return result + +class ParseLine: + "Maintains the parse state of a line of code. Enables arbitrary lookahead." + def __init__(self, lexemes): + self.lexemes = lexemes + self.location = 0 + def lookahead(self, i): + """Returns the token i units ahead in the parse. + lookahead(0) returns the next token; trying to read off the end of + the sequence returns the last token in the sequence (usually EOL).""" + target = self.location+i + if target >= len(self.lexemes): target = -1 + return self.lexemes[target] + def pop(self): + "Returns and removes the next element in the line." + old = self.location + if self.location < len(self.lexemes)-1: self.location += 1 + return self.lexemes[old] + def expect(self, *tokens): + """Reads a token from the ParseLine line and returns it if it's of a type + in the sequence tokens. Otherwise, it logs an error.""" + token = self.pop() + if token.type not in tokens: + Err.log('Expected: "'+'", "'.join(tokens)+'"') + return token + +pragma_modules = [] + +def parse_expr(line): + "Parses an Ophis arithmetic expression." + def atom(): + "Parses lowest-priority expression components." + next = line.lookahead(0).type + if next == "NUM": + return IR.ConstantExpr(line.expect("NUM").value) + elif next == "LABEL": + return IR.LabelExpr(line.expect("LABEL").value) + elif next == "^": + line.expect("^") + return IR.PCExpr() + elif next == "[": + line.expect("[") + result = parse_expr(line) + line.expect("]") + return result + elif next == "+": + offset = 0 + while next == "+": + offset += 1 + line.expect("+") + next = line.lookahead(0).type + return IR.LabelExpr("*"+str(templabelcount+offset)) + elif next == "-": + offset = 1 + while next == "-": + offset -= 1 + line.expect("-") + next = line.lookahead(0).type + return IR.LabelExpr("*"+str(templabelcount+offset)) + elif next == ">": + line.expect(">") + return IR.HighByteExpr(atom()) + elif next == "<": + line.expect("<") + return IR.LowByteExpr(atom()) + else: + Err.log('Expected: expression') + def precedence_read(constructor, reader, separators): + """Handles precedence. The reader argument is a function that returns + expressions that bind more tightly than these; separators is a list + of strings naming the operators at this precedence level. The + constructor argument is a class, indicating what node type holds + objects of this precedence level. + + Returns a list of Expr objects with separator strings between them.""" + result = [reader()] # first object + nextop = line.lookahead(0).type + while (nextop in separators): + line.expect(nextop) + result.append(nextop) + result.append(reader()) + nextop = line.lookahead(0).type + if len(result) == 1: return result[0] + return constructor(result) + def term(): + "Parses * and /" + return precedence_read(IR.SequenceExpr, atom, ["*", "/"]) + def arith(): + "Parses + and -" + return precedence_read(IR.SequenceExpr, term, ["+", "-"]) + def bits(): + "Parses &, |, and ^" + return precedence_read(IR.SequenceExpr, arith, ["&", "|", "^"]) + return bits() + +def parse_line(ppt, lexemelist): + "Turn a line of source into an IR Node." + Err.currentpoint = ppt + result = [] + line = ParseLine(lexemelist) + def aux(): + "Accumulates all IR nodes defined by this line." + if line.lookahead(0).type == "EOL": + pass + elif line.lookahead(1).type == ":": + newlabel=line.expect("LABEL").value + line.expect(":") + result.append(IR.Node(ppt, "Label", newlabel, IR.PCExpr())) + aux() + elif line.lookahead(0).type == "*": + global templabelcount + templabelcount = templabelcount + 1 + result.append(IR.Node(ppt, "Label", "*"+str(templabelcount), IR.PCExpr())) + line.expect("*") + aux() + elif line.lookahead(0).type == "." or line.lookahead(0).type == "`": + which = line.expect(".", "`").type + if (which == "."): pragma = line.expect("LABEL").value + else: pragma = "invoke" + pragmaFunction = "pragma"+pragma.title() + for mod in pragma_modules: + if hasattr(mod, pragmaFunction): + getattr(mod, pragmaFunction)(ppt, line, result) + break + else: + Err.log("Unknown pragma "+pragma) + + else: # Instruction + opcode = line.expect("OPCODE").value + if line.lookahead(0).type == "#": + mode = "Immediate" + line.expect("#") + arg = parse_expr(line) + line.expect("EOL") + elif line.lookahead(0).type == "(": + line.expect("(") + arg = parse_expr(line) + if line.lookahead(0).type == ",": + mode = "PointerX" + line.expect(",") + line.expect("X") + line.expect(")") + line.expect("EOL") + else: + line.expect(")") + tok = line.expect(",", "EOL").type + if tok == "EOL": + mode = "Pointer" + else: + mode = "PointerY" + line.expect("Y") + line.expect("EOL") + elif line.lookahead(0).type == "EOL": + mode = "Implied" + arg = None + else: + arg = parse_expr(line) + tok = line.expect("EOL", ",").type + if tok == ",": + tok = line.expect("X", "Y").type + if tok == "X": mode = "MemoryX" + else: mode = "MemoryY" + line.expect("EOL") + else: mode = "Memory" + result.append(IR.Node(ppt, mode, opcode, arg)) + aux() + result = [node for node in result if node is not IR.NullNode] + if len(result) == 0: return IR.NullNode + if len(result) == 1: return result[0] + return IR.SequenceNode(ppt, result) + +def parse_file(ppt, filename): + "Loads a .P65 source file, and returns an IR list." + Err.currentpoint = ppt + if Cmd.verbose > 0: print "Loading "+filename + try: + f = file(filename) + linelist = f.readlines() + f.close() + pptlist = ["%s:%d" % (filename, i+1) for i in range(len(linelist))] + lexlist = map(lex, pptlist, linelist) + IRlist = map(parse_line, pptlist, lexlist) + IRlist = [node for node in IRlist if node is not IR.NullNode] + return IR.SequenceNode(ppt, IRlist) + except IOError: + Err.log ("Could not read "+filename) + return IR.NullNode + +def parse(filename): + "Top level parsing routine, taking a source file name and returning an IR list." + global templabelcount + templabelcount = 0 + return parse_file("", filename) + diff --git a/src/Ophis/IR.py b/src/Ophis/IR.py new file mode 100644 index 0000000..a0164d1 --- /dev/null +++ b/src/Ophis/IR.py @@ -0,0 +1,161 @@ +"""P65 Intermediate Representation + + Classes for representing the Intermediate nodes upon which the + assembler passes operate.""" + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + +from __future__ import nested_scopes +import Ophis.Errors as Err + +class Node: + """The default IR Node + Instances of Node always have the three fields ppt(Program Point), + nodetype(a string), and data (a list).""" + def __init__(self, ppt, nodetype, *data): + self.ppt = ppt + self.nodetype = nodetype + self.data = list(data) + def accept(self, asmpass, env=None): + """Implements the Visitor pattern for an assembler pass. + Calls the routine 'asmpass.visitTYPE(self, env)' where + TYPE is the value of self.nodetype.""" + Err.currentpoint = self.ppt + routine = getattr(asmpass, "visit"+self.nodetype, asmpass.visitUnknown) + routine(self, env) + def __str__(self): + if self.nodetype != "SEQUENCE": + return str(self.ppt)+": "+self.nodetype+" - "+" ".join(map(str, self.data)) + else: + return "\n".join(map(str, self.data)) + def __repr__(self): + args = [self.ppt, self.nodetype] + self.data + return "Node(" + ", ".join(map(repr, args)) + ")" + +NullNode = Node("", "None") + +def SequenceNode(ppt, nodelist): + return Node(ppt, "SEQUENCE", *nodelist) + +class Expr: + """Base class for P65 expressions + All expressions have a field called "data" and a boolean field + called "hardcoded". An expression is hardcoded if it has no + symbolic values in it.""" + def __init__(self, data): + self.data = data + self.hardcoded = 0 + def __str__(self): + return "" + def valid(self, env=None, PCvalid=0): + """Returns true if the the expression can be successfully + evaluated in the specified environment.""" + return 0 + def value(self, env=None): + "Evaluates this expression in the given environment." + return None + +class ConstantExpr(Expr): + "Represents a numeric constant" + def __init__(self, data): + self.data = data + self.hardcoded = 1 + def __str__(self): + return str(self.data) + def valid(self, env=None, PCvalid=0): + return 1 + def value(self, env=None): + return self.data + +class LabelExpr(Expr): + "Represents a symbolic constant" + def __init__(self, data): + self.data = data + self.hardcoded = 0 + def __str__(self): + return self.data + def valid(self, env=None, PCvalid=0): + return (env is not None) and self.data in env + def value(self, env=None): + return env[self.data] + +class PCExpr(Expr): + "Represents the current program counter: ^" + def __init__(self): + self.hardcoded = 0 + def __str__(self): + return "^" + def valid(self, env=None, PCvalid=0): + return env is not None and PCvalid + def value(self, env=None): + return env.getPC() + +class HighByteExpr(Expr): + "Represents the expression >{data}" + def __init__(self, data): + self.data = data + self.hardcoded = data.hardcoded + def __str__(self): + return ">"+str(self.data) + def valid(self, env=None, PCvalid=0): + return self.data.valid(env, PCvalid) + def value(self, env=None): + val = self.data.value(env) + return (val >> 8) & 0xff + +class LowByteExpr(Expr): + "Represents the expression <{data}" + def __init__(self, data): + self.data = data + self.hardcoded = data.hardcoded + def __str__(self): + return "<"+str(self.data) + def valid(self, env=None, PCvalid=0): + return self.data.valid(env, PCvalid) + def value(self, env=None): + val = self.data.value(env) + return val & 0xff + +class SequenceExpr(Expr): + """Represents an interleaving of operands (of type Expr) and + operators (of type String). Subclasses must provide a routine + operate(self, firstarg, op, secondarg) that evaluates the + operator.""" + def __init__(self, data): + """Constructor for Sequence Expressions. Results will be + screwy if the data inpot isn't a list with types + [Expr, str, Expr, str, Expr, str, ... Expr, str, Expr].""" + self.data = data + self.operands = [x for x in data if isinstance(x, Expr)] + self.operators = [x for x in data if type(x)==str] + for i in self.operands: + if not i.hardcoded: + self.hardcoded = 0 + break + else: + self.hardcoded = 1 + def __str__(self): + return "["+" ".join(map(str, self.data))+"]" + def valid(self, env=None, PCvalid=0): + for i in self.operands: + if not i.valid(env, PCvalid): + return 0 + return 1 + def value(self, env=None): + subs = map((lambda x: x.value(env)), self.operands) + result = subs[0] + index = 1 + for op in self.operators: + result = self.operate(result, op, subs[index]) + index += 1 + return result + def operate(self, start, op, other): + if op=="*": return start * other + if op=="/": return start // other + if op=="+": return start + other + if op=="-": return start - other + if op=="&": return start & other + if op=="|": return start | other + if op=="^": return start ^ other diff --git a/src/Ophis/Macro.py b/src/Ophis/Macro.py new file mode 100644 index 0000000..384f47c --- /dev/null +++ b/src/Ophis/Macro.py @@ -0,0 +1,62 @@ +"""Macro support for P65. + + P65 Macros are cached SequenceNodes with arguments + set via .alias commands and prevented from escaping + with .scope and .scend commands.""" + +import sys + +import Ophis.IR as IR +import Ophis.CmdLine as Cmd +import Ophis.Errors as Err + +macros = {} +currentname = None +currentbody = None + +def newMacro(name): + "Start creating a new macro with the specified name." + global currentname + global currentbody + global macros + if currentname is not None: + Err.log("Internal error! Nested macro attempt!") + else: + if name in macros: + Err.log("Duplicate macro definition '%s'" % name) + currentname = name + currentbody = [] + +def registerNode(node): + global currentbody + currentbody.append(IR.Node(node.ppt, node.nodetype, *node.data)) + +def endMacro(): + global currentname + global currentbody + global macros + if currentname is None: + Err.log("Internal error! Ended a non-existent macro!") + else: + macros[currentname] = currentbody + currentname = None + currentbody = None + +def expandMacro(ppt, name, arglist): + global macros + if name not in macros: + Err.log("Undefined macro '%s'" % name) + return IR.NullNode + argexprs = [IR.Node(ppt, "Label", "_*%d" % i, arg) for (i, arg) in zip(xrange(1, sys.maxint), arglist)] + bindexprs = [IR.Node(ppt, "Label", "_%d" % i, IR.LabelExpr("_*%d" % i)) for i in range(1, len(arglist)+1)] + body = [IR.Node("%s->%s" % (ppt, node.ppt), node.nodetype, *node.data) for node in macros[name]] + invocation = [IR.Node(ppt, "ScopeBegin")] + argexprs + [IR.Node(ppt, "ScopeBegin")] + bindexprs + body + [IR.Node(ppt, "ScopeEnd"), IR.Node(ppt, "ScopeEnd")] + return IR.SequenceNode(ppt, invocation) + +def dump(): + global macros + for mac in macros: + body = macros[mac] + print "Macro: "+mac + for node in body: print node + print "" diff --git a/src/Ophis/Main.py b/src/Ophis/Main.py new file mode 100644 index 0000000..281c4a8 --- /dev/null +++ b/src/Ophis/Main.py @@ -0,0 +1,124 @@ +"""Main controller routines for the P65 assembler. + + When invoked as main, interprets its command line and goes from there. + Otherwise, use run_all to interpret a file set.""" + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + +from __future__ import nested_scopes +import sys +import Ophis.Frontend +import Ophis.IR +import Ophis.CorePragmas +import Ophis.OldPragmas +import Ophis.Passes +import Ophis.Errors as Err +import Ophis.Environment +import Ophis.CmdLine +import Ophis.Opcodes + + +def usage(): + "Prints a usage message and quits." + print "Usage:" + print "\tOphis [options] infile outfile" + print "" + print "Options:" + print "\t-6510 Allow 6510 undocumented opcodes" + print "\t-65c02 Enable 65c02 extensions" + print "\t-d Allow deprecated pragmas" + print "\t-v n Set verbosity to n (0-4, 1=default)" + sys.exit(1) + +def run_all(infile, outfile): + "Transforms the source infile to a binary outfile." + Err.count = 0 + z = Ophis.Frontend.parse(infile) + env = Ophis.Environment.Environment() + + m = Ophis.Passes.ExpandMacros() + i = Ophis.Passes.InitLabels() + l_basic = Ophis.Passes.UpdateLabels() + l = Ophis.Passes.FixPoint("label update", [l_basic], lambda: l_basic.changed == 0) + c = Ophis.Passes.Collapse() + a = Ophis.Passes.Assembler() + + passes = [] + passes.append(Ophis.Passes.DefineMacros()) + passes.append(Ophis.Passes.FixPoint("macro expansion", [m], lambda: m.changed == 0)) + passes.append(Ophis.Passes.FixPoint("label initialization", [i], lambda: i.changed == 0)) + passes.extend([Ophis.Passes.CircularityCheck(), Ophis.Passes.CheckExprs(), Ophis.Passes.EasyModes()]) + passes.append(Ophis.Passes.FixPoint("instruction selection", [l, c], lambda: c.collapsed == 0)) + passes.extend([Ophis.Passes.NormalizeModes(), Ophis.Passes.UpdateLabels(), a]) + + for p in passes: p.go(z, env) + + if Err.count == 0: + try: + output = file(outfile, 'wb') + output.write("".join(map(chr, a.output))) + except IOError: + print "Could not write to "+outfile + else: + Err.report() + +def run_ophis(): + infile = None + outfile = None + + p65_compatibility_mode = 0 + chip_extension = None + + reading_arg = 0 + + for x in sys.argv[1:]: + if reading_arg: + try: + Ophis.CmdLine.verbose = int(x) + reading_arg = 0 + except ValueError: + print "FATAL: Non-integer passed as argument to -v" + usage() + elif x[0] == '-': + if x == '-v': + reading_arg = 1 + elif x == '-6510': + chip_extension = Ophis.Opcodes.undocops + elif x == '-65c02': + chip_extension = Ophis.Opcodes.c02extensions + elif x == '-d': + p65_compatibility_mode = 1 + else: + print "FATAL: Unknown option "+x + usage() + elif infile == None: + infile = x + elif outfile == None: + outfile = x + else: + print "FATAL: Too many files specified" + usage() + + if infile is None: + print "FATAL: No files specified" + usage() + + if outfile is None: + print "FATAL: No output file specified" + usage() + + Ophis.Frontend.pragma_modules.append(Ophis.CorePragmas) + + if p65_compatibility_mode: + Ophis.Frontend.pragma_modules.append(Ophis.OldPragmas) + + if chip_extension is not None: + Ophis.Opcodes.opcodes.update(chip_extension) + + Ophis.CorePragmas.reset() + run_all(infile, outfile) + +if __name__ == '__main__': + run_ophis() diff --git a/src/Ophis/OldPragmas.py b/src/Ophis/OldPragmas.py new file mode 100644 index 0000000..9f110db --- /dev/null +++ b/src/Ophis/OldPragmas.py @@ -0,0 +1,28 @@ +"""P65-Perl compatibility pragmas + + Additional assembler directives to permit assembly of + old P65-Perl sources. This is not, in itself, sufficient, + as the precedence of < and > vs. + and - has changed + between P65-Perl and P65-Ophis. + + Supported pragmas are: .ascii (byte), .address (word), + .segment (text), .code (text), and .link.""" + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + +import Ophis.CorePragmas as core + +pragmaAscii = core.pragmaByte +pragmaAddress = core.pragmaWord +pragmaSegment = core.pragmaText +pragmaCode = core.pragmaText + +def pragmaLink(ppt, line, result): + "Load a file in a precise memory location." + filename = line.expect("STRING").value + newPC = FE.parse_expr(line) + line.expect("EOL") + result.append(IR.Node(ppt, "SetPC", newPC)) + if type(filename)==str: result.append(FE.parse_file(ppt, filename)) diff --git a/src/Ophis/Opcodes.py b/src/Ophis/Opcodes.py new file mode 100644 index 0000000..fd3bbfc --- /dev/null +++ b/src/Ophis/Opcodes.py @@ -0,0 +1,168 @@ +"""Opcodes file. + + Tables for the assembly of 6502-family instructions, mapping + opcodes and addressing modes to binary instructions.""" + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + +# Names of addressing modes +modes = ["Implied", # 0 + "Immediate", # 1 + "Zero Page", # 2 + "Zero Page, X", # 3 + "Zero Page, Y", # 4 + "Absolute", # 5 + "Absolute, X", # 6 + "Absolute, Y", # 7 + "(Absolute)", # 8 + "(Absolute, X)", # 9 + "(Absolute), Y", # 10 + "(Zero Page)", # 11 + "(Zero Page, X)", # 12 + "(Zero Page), Y", # 13 + "Relative"] # 14 + +# Lengths of the argument +lengths = [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1] + +opcodes = { + 'adc': [None, 0x69, 0x65, 0x75, None, 0x6D, 0x7D, 0x79, None, None, None, None, 0x61, 0x71, None], + 'and': [None, 0x29, 0x25, 0x35, None, 0x2D, 0x3D, 0x39, None, None, None, None, 0x21, 0x31, None], + 'asl': [0x0A, None, 0x06, 0x16, None, 0x0E, 0x1E, None, None, None, None, None, None, None, None], + 'bcc': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x90], + 'bcs': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xB0], + 'beq': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xF0], + 'bit': [None, None, 0x24, None, None, 0x2C, None, None, None, None, None, None, None, None, None], + 'bmi': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x30], + 'bne': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xD0], + 'bpl': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x10], + 'brk': [0x00, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'bvc': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x50], + 'bvs': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x70], + 'clc': [0x18, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'cld': [0xD8, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'cli': [0x58, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'clv': [0xB8, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'cmp': [None, 0xC9, 0xC5, 0xD5, None, 0xCD, 0xDD, 0xD9, None, None, None, None, 0xC1, 0xD1, None], + 'cpx': [None, 0xE0, 0xE4, None, None, 0xEC, None, None, None, None, None, None, None, None, None], + 'cpy': [None, 0xC0, 0xC4, None, None, 0xCC, None, None, None, None, None, None, None, None, None], + 'dec': [None, None, 0xC6, 0xD6, None, 0xCE, 0xDE, None, None, None, None, None, None, None, None], + 'dex': [0xCA, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'dey': [0x88, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'eor': [None, 0x49, 0x45, 0x55, None, 0x4D, 0x5D, 0x59, None, None, None, None, 0x41, 0x51, None], + 'inc': [None, None, 0xE6, 0xF6, None, 0xEE, 0xFE, None, None, None, None, None, None, None, None], + 'inx': [0xE8, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'iny': [0xC8, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'jmp': [None, None, None, None, None, 0x4C, None, None, 0x6C, None, None, None, None, None, None], + 'jsr': [None, None, None, None, None, 0x20, None, None, None, None, None, None, None, None, None], + 'lda': [None, 0xA9, 0xA5, 0xB5, None, 0xAD, 0xBD, 0xB9, None, None, None, None, 0xA1, 0xB1, None], + 'ldx': [None, 0xA2, 0xA6, None, 0xB6, 0xAE, None, 0xBE, None, None, None, None, None, None, None], + 'ldy': [None, 0xA0, 0xA4, 0xB4, None, 0xAC, 0xBC, None, None, None, None, None, None, None, None], + 'lsr': [0x4A, None, 0x46, 0x56, None, 0x4E, 0x5E, None, None, None, None, None, None, None, None], + 'nop': [0xEA, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'ora': [None, 0x09, 0x05, 0x15, None, 0x0D, 0x1D, 0x19, None, None, None, None, 0x01, 0x11, None], + 'pha': [0x48, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'php': [0x08, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'pla': [0x68, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'plp': [0x28, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'rol': [0x2A, None, 0x26, 0x36, None, 0x2E, 0x3E, None, None, None, None, None, None, None, None], + 'ror': [0x6A, None, 0x66, 0x76, None, 0x6E, 0x7E, None, None, None, None, None, None, None, None], + 'rti': [0x40, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'rts': [0x60, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'sbc': [None, 0xE9, 0xE5, 0xF5, None, 0xED, 0xFD, 0xF9, None, None, None, None, 0xE1, 0xF1, None], + 'sec': [0x38, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'sed': [0xF8, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'sei': [0x78, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'sta': [None, None, 0x85, 0x95, None, 0x8D, 0x9D, 0x99, None, None, None, None, 0x81, 0x91, None], + 'stx': [None, None, 0x86, None, 0x96, 0x8E, None, None, None, None, None, None, None, None, None], + 'sty': [None, None, 0x84, 0x94, None, 0x8C, None, None, None, None, None, None, None, None, None], + 'tax': [0xAA, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'tay': [0xA8, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'tsx': [0xBA, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'txa': [0x8A, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'txs': [0x9A, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'tya': [0x98, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + } + +undocops = { + 'anc': [None, 0x0B, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'ane': [None, 0x8B, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'arr': [None, 0x6B, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'asr': [None, 0x4B, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'dcp': [None, None, 0xC7, 0xD7, None, 0xCF, 0xDF, 0xDB, None, None, None, None, 0xC3, 0xD3, None], + 'isb': [None, None, 0xE7, 0xF7, None, 0xEF, 0xFF, 0xFB, None, None, None, None, 0xE3, 0xF3, None], + 'las': [None, None, None, None, None, None, None, 0xBB, None, None, None, None, None, None, None], + 'lax': [None, None, 0xA7, None, 0xB7, 0xAF, None, 0xBF, None, None, None, None, 0xA3, 0xB3, None], + 'lxa': [None, 0xAB, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'rla': [None, None, 0x27, 0x37, None, 0x2F, 0x3F, 0x3B, None, None, None, None, 0x23, 0x33, None], + 'rra': [None, None, 0x67, 0x77, None, 0x6F, 0x7F, 0x7B, None, None, None, None, 0x63, 0x73, None], + 'sax': [None, None, 0x87, None, 0x97, 0x8F, None, None, None, None, None, None, 0x83, None, None], + 'sbx': [None, 0xCB, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'sha': [None, None, None, None, None, None, None, 0x9F, None, None, None, None, None, 0x93, None], + 'shs': [None, None, None, None, None, None, None, 0x9B, None, None, None, None, None, None, None], + 'shx': [None, None, None, None, None, None, None, 0x9E, None, None, None, None, None, None, None], + 'slo': [None, None, 0x07, 0x17, None, 0x0F, 0x1F, 0x1B, None, None, None, None, 0x03, 0x13, None], + 'sre': [None, None, 0x47, 0x57, None, 0x4F, 0x5F, 0x5B, None, None, None, None, 0x43, 0x53, None], + } + +c02extensions = { + 'adc': [None, 0x69, 0x65, 0x75, None, 0x6D, 0x7D, 0x79, None, None, None, 0x72, 0x61, 0x71, None], + 'and': [None, 0x29, 0x25, 0x35, None, 0x2D, 0x3D, 0x39, None, None, None, 0x32, 0x21, 0x31, None], + 'bbr0': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x0F], + 'bbr1': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x1F], + 'bbr2': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x2F], + 'bbr3': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x3F], + 'bbr4': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x4F], + 'bbr5': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x5F], + 'bbr6': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x6F], + 'bbr7': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x7F], + 'bbs0': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x8F], + 'bbs1': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x9F], + 'bbs2': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xAF], + 'bbs3': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xBF], + 'bbs4': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xCF], + 'bbs5': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xDF], + 'bbs6': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xEF], + 'bbs7': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0xFF], + 'bit': [None, 0x89, 0x24, 0x34, None, 0x2C, 0x3C, None, None, None, None, None, None, None, None], + 'bra': [None, None, None, None, None, None, None, None, None, None, None, None, None, None, 0x80], + 'cmp': [None, 0xC9, 0xC5, 0xD5, None, 0xCD, 0xDD, 0xD9, None, None, None, 0xD2, 0xC1, 0xD1, None], + 'dea': [0x3A, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'dec': [0x3A, None, 0xC6, 0xD6, None, 0xCE, 0xDE, None, None, None, None, None, None, None, None], + 'eor': [None, 0x49, 0x45, 0x55, None, 0x4D, 0x5D, 0x59, None, None, None, 0x52, 0x41, 0x51, None], + 'ina': [0x1A, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'inc': [0x1A, None, 0xE6, 0xF6, None, 0xEE, 0xFE, None, None, None, None, None, None, None, None], + 'jmp': [None, None, None, None, None, 0x4C, None, None, 0x6C, 0x7C, None, None, None, None, None], + 'lda': [None, 0xA9, 0xA5, 0xB5, None, 0xAD, 0xBD, 0xB9, None, None, None, 0xB2, 0xA1, 0xB1, None], + 'ora': [None, 0x09, 0x05, 0x15, None, 0x0D, 0x1D, 0x19, None, None, None, 0x12, 0x01, 0x11, None], + 'phx': [0xDA, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'phy': [0x5A, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'plx': [0xFA, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'ply': [0x7A, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'rmb0': [None, None, 0x07, None, None, None, None, None, None, None, None, None, None, None, None], + 'rmb1': [None, None, 0x17, None, None, None, None, None, None, None, None, None, None, None, None], + 'rmb2': [None, None, 0x27, None, None, None, None, None, None, None, None, None, None, None, None], + 'rmb3': [None, None, 0x37, None, None, None, None, None, None, None, None, None, None, None, None], + 'rmb4': [None, None, 0x47, None, None, None, None, None, None, None, None, None, None, None, None], + 'rmb5': [None, None, 0x57, None, None, None, None, None, None, None, None, None, None, None, None], + 'rmb6': [None, None, 0x67, None, None, None, None, None, None, None, None, None, None, None, None], + 'rmb7': [None, None, 0x77, None, None, None, None, None, None, None, None, None, None, None, None], + 'sbc': [None, 0xE9, 0xE5, 0xF5, None, 0xED, 0xFD, 0xF9, None, None, None, 0xF2, 0xE1, 0xF1, None], + 'smb0': [None, None, 0x87, None, None, None, None, None, None, None, None, None, None, None, None], + 'smb1': [None, None, 0x97, None, None, None, None, None, None, None, None, None, None, None, None], + 'smb2': [None, None, 0xA7, None, None, None, None, None, None, None, None, None, None, None, None], + 'smb3': [None, None, 0xB7, None, None, None, None, None, None, None, None, None, None, None, None], + 'smb4': [None, None, 0xC7, None, None, None, None, None, None, None, None, None, None, None, None], + 'smb5': [None, None, 0xD7, None, None, None, None, None, None, None, None, None, None, None, None], + 'smb6': [None, None, 0xE7, None, None, None, None, None, None, None, None, None, None, None, None], + 'smb7': [None, None, 0xF7, None, None, None, None, None, None, None, None, None, None, None, None], + 'sta': [None, None, 0x85, 0x95, None, 0x8D, 0x9D, 0x99, None, None, None, 0x92, 0x81, 0x91, None], + 'stp': [0xDB, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + 'stz': [None, None, 0x64, 0x74, None, 0x9C, 0x9E, None, None, None, None, None, None, None, None], + 'trb': [None, None, 0x14, None, None, 0x1C, None, None, None, None, None, None, None, None, None], + 'tsb': [None, None, 0x04, None, None, 0x0C, None, None, None, None, None, None, None, None, None], + 'wai': [0xCB, None, None, None, None, None, None, None, None, None, None, None, None, None, None], + } + diff --git a/src/Ophis/Passes.py b/src/Ophis/Passes.py new file mode 100644 index 0000000..5901843 --- /dev/null +++ b/src/Ophis/Passes.py @@ -0,0 +1,518 @@ +"""The P65 Assembler passes + + P65's design philosophy is to build the IR once, then run a great + many assembler passes over the result. Thus, each pass does a + single, specialized job. When strung together, the full + translation occurs. This structure also makes the assembler + very extensible; additional analyses or optimizations may be + added as new subclasses of Pass.""" + + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + +from __future__ import nested_scopes +import Ophis.Errors as Err +import Ophis.IR as IR +import Ophis.Opcodes as Ops +import Ophis.CmdLine as Cmd +import Ophis.Macro as Macro + +# The passes themselves + +class Pass: + """Superclass for all assembler passes. Automatically handles IR + types that modify the environent's structure, and by default + raises an error on anything else. Override visitUnknown in your + extension pass to produce a pass that accepts everything.""" + name = "Default Pass" + def __init__(self): + self.writeOK = 1 + def visitNone(self, node, env): + pass + def visitSEQUENCE(self, node, env): + Err.currentpoint = node.ppt + for n in node.data: + n.accept(self, env) + def visitDataSegment(self, node, env): + self.writeOK = 0 + env.setsegment(node.data[0]) + def visitTextSegment(self, node, env): + self.writeOK = 1 + env.setsegment(node.data[0]) + def visitScopeBegin(self, node, env): + env.newscope() + def visitScopeEnd(self, node, env): + env.endscope() + def visitUnknown(self, node, env): + Err.log("Internal error! "+self.name+" cannot understand node type "+node.nodetype) + def prePass(self): + pass + def postPass(self): + pass + def go(self, node, env): + """Prepares the environment and runs this pass, possibly + printing debugging information.""" + if Err.count == 0: + if Cmd.verbose > 1: print "Running: "+self.name + env.reset() + self.prePass() + node.accept(self, env) + self.postPass() + env.reset() + if Cmd.verbose > 3: + print "Current labels:" + print env + if Cmd.verbose > 2: + print "Current IR:" + print node + +class FixPoint: + """A specialized class that is not a pass but can be run like one. + This class takes a list of passes and a "fixpoint" function.""" + def __init__(self, name, passes, fixpoint): + self.name = name + self.passes = passes + self.fixpoint = fixpoint + def go(self, node, env): + """Runs this FixPoint's passes, in order, until the fixpoint + is true. Always runs the passes at least once.""" + for i in xrange(100): + if Err.count != 0: break + for p in self.passes: + p.go(node, env) + if Err.count != 0: break + if self.fixpoint(): break + if Cmd.verbose > 1: print "Fixpoint failed, looping back" + else: + Err.log("Can't make %s converge! Maybe there's a recursive dependency somewhere?" % self.name) + +class DefineMacros(Pass): + "Extract macro definitions and remove them from the IR" + name = "Macro definition pass" + def prePass(self): + self.inDef = 0 + self.nestedError = 0 + def postPass(self): + if self.inDef: + Err.log("Unmatched .macro") + elif Cmd.verbose > 2: + print "Macro definitions:" + Macro.dump() + def visitMacroBegin(self, node, env): + if self.inDef: + Err.log("Nested macro definition") + self.nestedError = 1 + else: + Macro.newMacro(node.data[0]) + node.nodetype = "None" + node.data = [] + self.inDef = 1 + def visitMacroEnd(self, node, env): + if self.inDef: + Macro.endMacro() + node.nodetype = "None" + node.data = [] + self.inDef = 0 + elif not self.nestedError: + Err.log("Unmatched .macend") + def visitUnknown(self, node, env): + if self.inDef: + Macro.registerNode(node) + node.nodetype = "None" + node.data = [] + + +class ExpandMacros(Pass): + "Replace macro invocations with the appropriate text" + name = "Macro expansion pass" + def prePass(self): + self.changed = 0 + def visitMacroInvoke(self, node, env): + replacement = Macro.expandMacro(node.ppt, node.data[0], node.data[1:]) + node.nodetype = replacement.nodetype + node.data = replacement.data + self.changed = 1 + def visitUnknown(self, node, env): + pass + +class InitLabels(Pass): + "Finds all reachable labels" + name = "Label initialization pass" + def __init__(self): + Pass.__init__(self) + self.labelmap = {} + def prePass(self): + self.changed = 0 + self.PCvalid = 1 + def visitAdvance(self, node, env): + self.PCvalid=node.data[0].valid(env, self.PCvalid) + def visitSetPC(self, node, env): + self.PCvalid=node.data[0].valid(env, self.PCvalid) + def visitLabel(self, node, env): + (label, val) = node.data + fulllabel = "%d:%s" % (env.stack[0], label) + if fulllabel in self.labelmap and self.labelmap[fulllabel] is not node: + Err.log("Duplicate label definition '%s'" % label) + if fulllabel not in self.labelmap: + self.labelmap[fulllabel] = node + if val.valid(env, self.PCvalid) and label not in env: + env[label]=0 + self.changed=1 + def visitUnknown(self, node, env): + pass + +class CircularityCheck(Pass): + "Checks for circular label dependencies" + name = "Circularity check pass" + def prePass(self): + self.changed=0 + self.PCvalid=1 + def visitAdvance(self, node, env): + PCvalid = self.PCvalid + self.PCvalid=node.data[0].valid(env, self.PCvalid) + if not node.data[0].valid(env, PCvalid): + Err.log("Undefined or circular reference on .advance") + def visitSetPC(self, node, env): + PCvalid = self.PCvalid + self.PCvalid=node.data[0].valid(env, self.PCvalid) + if not node.data[0].valid(env, PCvalid): + Err.log("Undefined or circular reference on program counter set") + def visitCheckPC(self, node, env): + if not node.data[0].valid(env, self.PCvalid): + Err.log("Undefined or circular reference on program counter check") + def visitLabel(self, node, env): + (label, val) = node.data + if not val.valid(env, self.PCvalid): + Err.log("Undefined or circular dependency for label '%s'" % label) + def visitUnknown(self, node, env): + pass + +class CheckExprs(Pass): + "Ensures all expressions can resolve" + name = "Expression checking pass" + def visitUnknown(self, node, env): + for i in [x for x in node.data if isinstance(x, IR.Expr)]: + i.value(env) # Throw away result, just confirm validity of all expressions + +class EasyModes(Pass): + "Assigns address modes to hardcoded and branch instructions" + name = "Easy addressing modes pass" + def visitMemory(self, node, env): + if Ops.opcodes[node.data[0]][14] is not None: + node.nodetype = "Relative" + return + if node.data[1].hardcoded: + if not collapse_no_index(node, env): + node.nodetype = "Absolute" + def visitMemoryX(self, node, env): + if node.data[1].hardcoded: + if not collapse_x(node, env): + node.nodetype = "AbsoluteX" + def visitMemoryY(self, node, env): + if node.data[1].hardcoded: + if not collapse_y(node, env): + node.nodetype = "AbsoluteY" + def visitPointer(self, node, env): + if node.data[1].hardcoded: + if not collapse_no_index_ind(node, env): + node.nodetype = "Indirect" + def visitPointerX(self, node, env): + if node.data[1].hardcoded: + if not collapse_x_ind(node, env): + node.nodetype = "AbsIndX" + def visitPointerY(self, node, env): + if node.data[1].hardcoded: + if not collapse_y_ind(node, env): + node.nodetype = "AbsIndY" + def visitUnknown(self, node, env): + pass + +class UpdateLabels(Pass): + "Computes the new values for all entries in the symbol table" + name = "Label Update Pass" + def prePass(self): + self.changed = 0 + def visitSetPC(self, node, env): env.setPC(node.data[0].value(env)) + def visitAdvance(self, node, env): env.setPC(node.data[0].value(env)) + def visitImplied(self, node, env): env.incPC(1) + def visitImmediate(self, node, env): env.incPC(2) + def visitIndirectX(self, node, env): env.incPC(2) + def visitIndirectY(self, node, env): env.incPC(2) + def visitZPIndirect(self, node, env): env.incPC(2) + def visitZeroPage(self, node, env): env.incPC(2) + def visitZeroPageX(self, node, env): env.incPC(2) + def visitZeroPageY(self, node, env): env.incPC(2) + def visitRelative(self, node, env): env.incPC(2) + def visitIndirect(self, node, env): env.incPC(3) + def visitAbsolute(self, node, env): env.incPC(3) + def visitAbsoluteX(self, node, env): env.incPC(3) + def visitAbsoluteY(self, node, env): env.incPC(3) + def visitAbsIndX(self, node, env): env.incPC(3) + def visitAbsIndY(self, node, env): env.incPC(3) + def visitMemory(self, node, env): env.incPC(3) + def visitMemoryX(self, node, env): env.incPC(3) + def visitMemoryY(self, node, env): env.incPC(3) + def visitPointer(self, node, env): env.incPC(3) + def visitPointerX(self, node, env): env.incPC(3) + def visitPointerY(self, node, env): env.incPC(3) + def visitCheckPC(self, node, env): pass + def visitLabel(self, node, env): + (label, val) = node.data + old = env[label] + env[label] = val.value(env) + if old != env[label]: + self.changed = 1 + def visitByte(self, node, env): env.incPC(len(node.data)) + def visitWord(self, node, env): env.incPC(len(node.data)*2) + def visitDword(self, node, env): env.incPC(len(node.data)*4) + def visitWordBE(self, node, env): env.incPC(len(node.data)*2) + def visitDwordBE(self, node, env): env.incPC(len(node.data)*4) + +class Collapse(Pass): + """Selects as many zero-page instructions to convert as + possible, and tracks how many instructions have been + converted this pass.""" + name = "Instruction Collapse Pass" + def prePass(self): + self.collapsed = 0 + def visitMemory(self, node, env): + if collapse_no_index(node, env): self.collapsed += 1 + def visitMemoryX(self, node, env): + if collapse_x(node, env): self.collapsed += 1 + def visitMemoryY(self, node, env): + if collapse_y(node, env): self.collapsed += 1 + def visitPointer(self, node, env): + if collapse_no_index_ind(node, env): self.collapsed += 1 + def visitPointerX(self, node, env): + if collapse_x_ind(node, env): self.collapsed += 1 + def visitPointerY(self, node, env): + if collapse_y_ind(node, env): self.collapsed += 1 + def visitUnknown(self, node, env): + pass + +def collapse_no_index(node, env): + """Transforms a Memory node into a ZeroPage one if possible. + Returns 1 if it made the collapse, false otherwise.""" + if node.data[1].value(env) < 0x100 and Ops.opcodes[node.data[0]][2] is not None: + node.nodetype = "ZeroPage" + return 1 + else: + return 0 + +def collapse_x(node, env): + """Transforms a MemoryX node into a ZeroPageX one if possible. + Returns 1 if it made the collapse, false otherwise.""" + if node.data[1].value(env) < 0x100 and Ops.opcodes[node.data[0]][3] is not None: + node.nodetype = "ZeroPageX" + return 1 + else: + return 0 + +def collapse_y(node, env): + """Transforms a MemoryY node into a ZeroPageY one if possible. + Returns 1 if it made the collapse, false otherwise.""" + if node.data[1].value(env) < 0x100 and Ops.opcodes[node.data[0]][4] is not None: + node.nodetype = "ZeroPageY" + return 1 + else: + return 0 + +def collapse_no_index_ind(node, env): + """Transforms a Pointer node into a ZPIndirect one if possible. + Returns 1 if it made the collapse, false otherwise.""" + if node.data[1].value(env) < 0x100 and Ops.opcodes[node.data[0]][11] is not None: + node.nodetype = "ZPIndirect" + return 1 + else: + return 0 + +def collapse_x_ind(node, env): + """Transforms a PointerX node into an IndirectX one if possible. + Returns 1 if it made the collapse, false otherwise.""" + if node.data[1].value(env) < 0x100 and Ops.opcodes[node.data[0]][12] is not None: + node.nodetype = "IndirectX" + return 1 + else: + return 0 + +def collapse_y_ind(node, env): + """Transforms a PointerY node into an IndirectY one if possible. + Returns 1 if it made the collapse, false otherwise.""" + if node.data[1].value(env) < 0x100 and Ops.opcodes[node.data[0]][13] is not None: + node.nodetype = "IndirectY" + return 1 + else: + return 0 + + +class NormalizeModes(Pass): + """Eliminates the intermediate "Memory" and "Pointer" nodes, + converting them to "Absolute".""" + name = "Mode Normalization pass" + def visitMemory(self, node, env): node.nodetype = "Absolute" + def visitMemoryX(self, node, env): node.nodetype = "AbsoluteX" + def visitMemoryY(self, node, env): node.nodetype = "AbsoluteY" + def visitPointer(self, node, env): node.nodetype = "Indirect" + def visitPointerX(self, node, env): node.nodetype = "AbsIndX" + # If we ever hit a PointerY by this point, we have a bug. + def visitPointerY(self, node, env): node.nodetype = "AbsIndY" + def visitUnknown(self, node, env): pass + +class Assembler(Pass): + """Converts the IR into a list of bytes, suitable for writing to + a file.""" + name = "Assembler" + + def prePass(self): + self.output = [] + self.code = 0 + self.data = 0 + self.filler = 0 + + def postPass(self): + if Cmd.verbose > 0 and Err.count == 0: + print "Assembly complete: %s bytes output (%s code, %s data, %s filler)" \ + % (len(self.output), self.code, self.data, self.filler) + + def outputbyte(self, expr, env): + 'Outputs a byte, with range checking' + if self.writeOK: + val = expr.value(env) + if val < 0x00 or val > 0xff: + Err.log("Byte constant "+str(expr)+" out of range") + val = 0 + self.output.append(int(val)) + else: + Err.log("Attempt to write to data segment") + def outputword(self, expr, env): + 'Outputs a little-endian word, with range checking' + if self.writeOK: + val = expr.value(env) + if val < 0x0000 or val > 0xFFFF: + Err.log("Word constant "+str(expr)+" out of range") + val = 0 + self.output.append(int(val & 0xFF)) + self.output.append(int((val >> 8) & 0xFF)) + else: + Err.log("Attempt to write to data segment") + def outputdword(self, expr, env): + 'Outputs a little-endian dword, with range checking' + if self.writeOK: + val = expr.value(env) + if val < 0x00000000 or val > 0xFFFFFFFFL: + Err.log("DWord constant "+str(expr)+" out of range") + val = 0 + self.output.append(int(val & 0xFF)) + self.output.append(int((val >> 8) & 0xFF)) + self.output.append(int((val >> 16) & 0xFF)) + self.output.append(int((val >> 24) & 0xFF)) + else: + Err.log("Attempt to write to data segment") + + def outputword_be(self, expr, env): + 'Outputs a big-endian word, with range checking' + if self.writeOK: + val = expr.value(env) + if val < 0x0000 or val > 0xFFFF: + Err.log("Word constant "+str(expr)+" out of range") + val = 0 + self.output.append(int((val >> 8) & 0xFF)) + self.output.append(int(val & 0xFF)) + else: + Err.log("Attempt to write to data segment") + def outputdword_be(self, expr, env): + 'Outputs a big-endian dword, with range checking' + if self.writeOK: + val = expr.value(env) + if val < 0x00000000 or val > 0xFFFFFFFFL: + Err.log("DWord constant "+str(expr)+" out of range") + val = 0 + self.output.append(int((val >> 24) & 0xFF)) + self.output.append(int((val >> 16) & 0xFF)) + self.output.append(int((val >> 8) & 0xFF)) + self.output.append(int(val & 0xFF)) + else: + Err.log("Attempt to write to data segment") + + def assemble(self, node, mode, env): + "A generic instruction called by the visitor methods themselves" + (opcode, expr) = node.data + bin_op = Ops.opcodes[opcode][mode] + if bin_op is None: + Err.log('%s does not have mode "%s"' % (opcode.upper(), Ops.modes[mode])) + return + self.outputbyte(IR.ConstantExpr(bin_op), env) + arglen = Ops.lengths[mode] + if mode == 14: # Special handling for relative mode + arg = expr.value(env) + arg = arg-(env.getPC()+2) + if arg < -128 or arg > 127: + Err.log("Branch target out of bounds") + arg = 0 + if arg < 0: arg += 256 + expr = IR.ConstantExpr(arg) + if arglen == 1: self.outputbyte(expr, env) + if arglen == 2: self.outputword(expr, env) + env.incPC(1+arglen) + self.code += 1+arglen + + def visitImplied(self, node, env): self.assemble(node, 0, env) + def visitImmediate(self, node, env): self.assemble(node, 1, env) + def visitZeroPage(self, node, env): self.assemble(node, 2, env) + def visitZeroPageX(self, node, env): self.assemble(node, 3, env) + def visitZeroPageY(self, node, env): self.assemble(node, 4, env) + def visitAbsolute(self, node, env): self.assemble(node, 5, env) + def visitAbsoluteX(self, node, env): self.assemble(node, 6, env) + def visitAbsoluteY(self, node, env): self.assemble(node, 7, env) + def visitIndirect(self, node, env): self.assemble(node, 8, env) + def visitAbsIndX(self, node, env): self.assemble(node, 9, env) + def visitAbsIndY(self, node, env): self.assemble(node, 10, env) + def visitZPIndirect(self, node, env): self.assemble(node, 11, env) + def visitIndirectX(self, node, env): self.assemble(node, 12, env) + def visitIndirectY(self, node, env): self.assemble(node, 13, env) + def visitRelative(self, node, env): self.assemble(node, 14, env) + def visitLabel(self, node, env): pass + def visitByte(self, node, env): + for expr in node.data: + self.outputbyte(expr, env) + env.incPC(len(node.data)) + self.data += len(node.data) + def visitWord(self, node, env): + for expr in node.data: + self.outputword(expr, env) + env.incPC(len(node.data)*2) + self.data += len(node.data)*2 + def visitDword(self, node, env): + for expr in node.data: + self.outputdword(expr, env) + env.incPC(len(node.data)*4) + self.data += len(node.data)*4 + def visitWordBE(self, node, env): + for expr in node.data: + self.outputword_be(expr, env) + env.incPC(len(node.data)*2) + self.data += len(node.data)*2 + def visitDwordBE(self, node, env): + for expr in node.data: + self.outputdword_be(expr, env) + env.incPC(len(node.data)*4) + self.data += len(node.data)*4 + def visitSetPC(self, node, env): + env.setPC(node.data[0].value(env)) + def visitCheckPC(self, node, env): + pc = env.getPC() + target = node.data[0].value(env) + if (pc > target): + Err.log(".checkpc assertion failed: $%x > $%x" % (pc, target)) + def visitAdvance(self, node, env): + pc = env.getPC() + target = node.data[0].value(env) + if (pc > target): + Err.log("Attempted to .advance backwards: $%x to $%x" % (pc, target)) + else: + zero = IR.ConstantExpr(0) + for i in xrange(target-pc): self.outputbyte(zero, env) + self.filler += target-pc + env.setPC(target) diff --git a/src/Ophis/__init__.py b/src/Ophis/__init__.py new file mode 100644 index 0000000..0f35954 --- /dev/null +++ b/src/Ophis/__init__.py @@ -0,0 +1,5 @@ +"P65 - a cross-assembler for the 6502 series of chips" + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. diff --git a/src/ophismain.py b/src/ophismain.py new file mode 100644 index 0000000..5ddbf88 --- /dev/null +++ b/src/ophismain.py @@ -0,0 +1,4 @@ +#!/usr/local/bin/python +import Ophis.Main + +Ophis.Main.run_ophis() diff --git a/tests/test6510.bin b/tests/test6510.bin new file mode 100644 index 0000000000000000000000000000000000000000..bdc3d91775e9792262a1a94fbec7f8942427d065 GIT binary patch literal 151 zcmV;I0BHXM0|y5S3l9$u6B8E~8yg!RA0HzlCnqm2FEcYYH#<8!KR-W1Lq|tTOHWTv zQ&U%0TU%RSUteQmXJ>0`Z*OmNb9Z-pdwYL>e}jXEhl`7kkB^g+mzSHHo1UJYpP!$j zqo=2?7Z(~D92^`UA15a-FETPTG&eUoIy^i)KR-uDPft=( zS65nJUu0xwXK!zEa&&ZecY1t$e1Cs{fQN^PiI0zxl9!j9oSdGXo}Ztmr?0QFvbVRt czsJYR&(G4**Vo$H-{0rw@9*;R_xJk$|II5ne*gdg literal 0 HcmV?d00001 diff --git a/tests/test65c02.oph b/tests/test65c02.oph new file mode 100644 index 0000000..84604c2 --- /dev/null +++ b/tests/test65c02.oph @@ -0,0 +1,74 @@ +; Test file for 65C02 extended opcode compliance +; This odd little source file uses every addressing mode +; of every opcode, and uses the opcode itself as the argument +; to each instruction that takes one. The resulting binary's +; bytes are thus in strictly increasing numerical order. + +; Some opcodes have multiple mnemonics; we provide both. + +; This file also doesn't include the 65C02's opcodes that +; are also available in stock 6502s - see testbase.oph for +; those. + TSB $04 ; 04: TSB - Zero Page + RMB0 $07 ; 07: RMB0 - Zero Page + TSB $0C0C ; 0C: TSB - Absolute + BBR0 ^+$11 ; 0F: BBR0 - Relative + ORA ($12) ; 12: ORA - (Zero Page) + TRB $14 ; 14: TRB - Zero Page + RMB1 $17 ; 17: RMB1 - Zero Page + INA ; 1A: INA - Implied + INC ; INC - Implied + TRB $1C1C ; 1C: TRB - Absolute + BBR1 ^+$21 ; 1F: BBR1 - Relative + RMB2 $27 ; 27: RMB2 - Zero Page + BBR2 ^+$31 ; 2F: BBR2 - Relative + AND ($32) ; 32: AND - (Zero Page) + BIT $34, X ; 34: BIT - Zero Page, X + RMB3 $37 ; 37: RMB3 - Zero Page + DEA ; 3A: DEA - Implied + DEC ; 3A: DEC - Implied + BIT $3C3C,X ; 3C: BIT - Absolute, X + BBR3 ^+$41 ; 3F: BBR3 - Relative + RMB4 $47 ; 47: RMB4 - Zero Page + BBR4 ^+$51 ; 4F: BBR4 - Relative + EOR ($52) ; 52: EOR - (Zero Page) + RMB5 $57 ; 57: RMB5 - Zero Page + PHY ; 5A: PHY - Implied + BBR5 ^+$61 ; 5F: BBR5 - Relative + STZ $64 ; 64: STZ - Zero Page + RMB6 $67 ; 67: RMB6 - Zero Page + BBR6 ^+$71 ; 6F: BBR6 - Relative + ADC ($72) ; 72: ADC - (Zero Page) + STZ $74, X ; 74: STZ - Zero Page, X + RMB7 $77 ; 77: RMB7 - Zero Page + PLY ; 7A: PLY - Implied + JMP ($7C7C, X) ; 7C: JMP - (Absolute, X) + BBR7 ^+$81 ; 7F: BBR7 - Relative + BRA ^-$7E ; 80: BRA - Relative + SMB0 $87 ; 87: SMB0 - Zero Page + BIT #$89 ; 89: BIT - Immediate + BBS0 ^-$6F ; 8F: BBS0 - Relative + STA ($92) ; 92: STA - (Zero Page) + SMB1 $97 ; 97: SMB1 - Zero Page + STZ $9C9C ; 9C: STZ - Absolute + STZ $9E9E, X ; 9E: STZ - Absolute, X + BBS1 ^-$5F ; 9F: BBS1 - Relative + SMB2 $A7 ; A7: SMB2 - Zero Page + BBS2 ^-$4F ; AF: BBS2 - Relative + LDA ($B2) ; B2: LDA - (Zero Page) + SMB3 $B7 ; B7: SMB3 - Zero Page + BBS3 ^-$3F ; BF: BBS3 - Relative + SMB4 $C7 ; C7: SMB4 - Zero Page + WAI ; CB: WAI - Implied + BBS4 ^-$2F ; CF: BBS4 - Relative + CMP ($D2) ; D2: CMP - (Zero Page) + SMB5 $D7 ; D7: SMB5 - Zero Page + PHX ; DA: PHX - Implied + STP ; DB: STP - Implied + BBS5 ^-$1F ; DF: BBS5 - Relative + SMB6 $E7 ; E7: SMB6 - Zero Page + BBS6 ^-$0F ; EF: BBS6 - Relative + SBC ($F2) ; F2: SBC - (Zero Page) + SMB7 $F7 ; F7: SMB7 - Zero Page + PLX ; FA: PLX - Implied + BBS7 ^+$01 ; FF: BBS7 - Relative diff --git a/tests/testbase.bin b/tests/testbase.bin new file mode 100644 index 0000000000000000000000000000000000000000..43de7545d09f7f1726a88787ace14f31fa2d7124 GIT binary patch literal 321 zcmV-H0lxkK0RaUC1_lTT2?`Aj4GsDl9B4EiElBE-o-IF)=kYHa0jpIXOK&Jw84@KtVx8MMg$QNl8jfOiWEpO-@cu zP*71(RaI72SXo(FU0q#XUS42fVP$1zW@u??YHVz5ZEbCCZfDDijE#+rj*gCykdcv;l$Dj1mYA8DnVOxQouHthp`xOsq@|^% zrl_f@s;sQ6t*x!DuCB1Kv9YwYwY9dkxVgExy1cx+y}iA@zP`Y~!NJ7D#l^g??7?d|RE?(XpL T@$vQb_V)Ps`T70*{r>*`4qc=j literal 0 HcmV?d00001 diff --git a/tests/testbase.oph b/tests/testbase.oph new file mode 100644 index 0000000..44b636d --- /dev/null +++ b/tests/testbase.oph @@ -0,0 +1,157 @@ +; Test file for base 6502 opcode compliance +; This odd little source file uses every addressing mode +; of every opcode, and uses the opcode itself as the argument +; to each instruction that takes one. The resulting binary's +; bytes are thus in strictly increasing numerical order. + + BRK + ORA ($01, X) + ORA $05 + ASL $06 + PHP + ORA #$09 + ASL + ORA $0D0D + ASL $0E0E + BPL ^+$12 + ORA ($11), Y + ORA $15, X + ASL $16, X + CLC + ORA $1919, Y + ORA $1D1D, X + ASL $1E1E, X + JSR $2020 + AND ($21, X) + BIT $24 + AND $25 + ROL $26 + PLP + AND #$29 + ROL + BIT $2C2C + AND $2D2D + ROL $2E2E + BMI ^+$32 + AND ($31), Y + AND $35, X + ROL $36, X + SEC + AND $3939, Y + AND $3D3D, X + ROL $3E3E, X + RTI + EOR ($41, X) + EOR $45 + LSR $46 + PHA + EOR #$49 + LSR + JMP $4C4C + EOR $4D4D + LSR $4E4E + BVC ^+$52 + EOR ($51), Y + EOR $55, X + LSR $56, X + CLI + EOR $5959, Y + EOR $5D5D, X + LSR $5E5E, X + RTS + ADC ($61, X) + ADC $65 + ROR $66 + PLA + ADC #$69 + ROR + JMP ($6C6C) + ADC $6D6D + ROR $6E6E + BVS ^+$72 + ADC ($71), Y + ADC $75, X + ROR $76, X + SEI + ADC $7979, Y + ADC $7D7D, X + ROR $7E7E, X + STA ($81, X) + STY $84 + STA $85 + STX $86 + DEY + TXA + STY $8C8C + STA $8D8D + STX $8E8E + BCC ^-$6E + STA ($91), Y + STY $94, X + STA $95, X + STX $96, Y + TYA + STA $9999, Y + TXS + STA $9D9D, X + LDY #$A0 + LDA ($A1, X) + LDX #$A2 + LDY $A4 + LDA $A5 + LDX $A6 + TAY + LDA #$A9 + TAX + LDY $ACAC + LDA $ADAD + LDX $AEAE + BCS ^-$4e + LDA ($B1), Y + LDY $B4, X + LDA $B5, X + LDX $B6, Y + CLV + LDA $B9B9,Y + TSX + LDY $BCBC, X + LDA $BDBD, X + LDX $BEBE, Y + CPY #$C0 + CMP ($C1, X) + CPY $C4 + CMP $C5 + DEC $C6 + INY + CMP #$C9 + DEX + CPY $CCCC + CMP $CDCD + DEC $CECE + BNE ^-$2E + CMP ($D1), Y + CMP $D5, X + DEC $D6, X + CLD + CMP $D9D9, Y + CMP $DDDD, X + DEC $DEDE, X + CPX #$E0 + SBC ($E1, X) + CPX $E4 + SBC $E5 + INC $E6 + INX + SBC #$E9 + NOP + CPX $ECEC + SBC $EDED + INC $EEEE + BEQ ^-$0E + SBC ($F1), Y + SBC $F5, X + INC $F6, X + SED + SBC $F9F9, Y + SBC $FDFD, X + INC $FEFE, X diff --git a/tests/testdata.bin b/tests/testdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..8169f7c7cc3893629133553b36c468c0894646d7 GIT binary patch literal 80 acmZQzWMXDvWn<^yP0dkPiS@m;zY< literal 0 HcmV?d00001 diff --git a/tests/testdata.oph b/tests/testdata.oph new file mode 100644 index 0000000..f860bb7 --- /dev/null +++ b/tests/testdata.oph @@ -0,0 +1,7 @@ +; This data file just dumps out $00-$0F repeatedly with different forms. + +.byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 +.word 256, $0302, $0504, $0706, $0908, $0b0a, $0d0c, $0f0e +.dword $03020100, $07060504, $0b0a0908, $0f0e0d0c +.wordbe 1, $0203, $0405, $0607, $0809, $0a0b, $0c0d, $0e0f +.dwordbe $010203, $04050607, $08090a0b, $0c0d0e0f diff --git a/tools/charmaps/a2blink.map b/tools/charmaps/a2blink.map new file mode 100644 index 0000000000000000000000000000000000000000..72a00d561cc04b7ace3c2f1970945dabc309416d GIT binary patch literal 256 zcmV+b0ssDhfr5jCg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~dyVPa!sWoBn+X=-b1 zZEkOHadLBXb#`}nd3t+%eSUvHK|(`BMMg(RNlHshO-@fxQBqS>RaRG6Sz23MU0z?{ z;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0({r>*|0RjUA1qKHQ2?`4g4Gs?w5fT#= z6&4p585$cL9UdPbAtECrB_<~*DJm;0EiNxGF)}kWH8wXmIXXK$Jw89c!NSAD#m2|T z$;!*j&Cbuz(bCh@)z;V8+1lIO-QM4zp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z& Gy}rM%1b=}5 literal 0 HcmV?d00001 diff --git a/tools/charmaps/a2inverse.map b/tools/charmaps/a2inverse.map new file mode 100644 index 0000000000000000000000000000000000000000..70ad9ed61e307887c2e555c0067971c89dd43441 GIT binary patch literal 256 zcmV+b0ssDhfr5jCg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~c{AtECrB_<~*DJm;0 zEiNxGF)}kWH8wXmIXXK$Jw87G0RjUA1qKHQ2?`4g4Gs?w5fT#=6&4p585$cL9UdRx z;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0({r>;J!NSAD#m2|T$;!*j&Cbuz(bCh@ z)z;V8+1lIO-QM4zp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z&y}rLdK|(`BMMg(R zNlHshO-@fxQBqS>RaRG6Sz23MU0z>cVPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3t+% GeSUwh1b=}5 literal 0 HcmV?d00001 diff --git a/tools/charmaps/a2normal.map b/tools/charmaps/a2normal.map new file mode 100644 index 0000000000000000000000000000000000000000..b383772f4260e6302f2e0632ff7ef221fb78cd30 GIT binary patch literal 256 zcmV+b0ssDhfr5jCg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~edp`xRtrKYE-sj922 zt*)=Iv9hzYwYImoxw^Z&y}rM|!NSAD#m2|T$;!*j&Cbuz(bCh@)z;V8+1lIO-QM5e z;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0({r>*|0RjUA1qKHQ2?`4g4Gs?w5fT#= z6&4p585$cL9UdPbAtECrB_<~*DJm;0EiNxGF)}kWH8wXmIXXK$Jw87`K|(`BMMg(R zNlHshO-@fxQBqS>RaRG6Sz23MU0z>cVPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3t+% GeSUwh)_;Kj literal 0 HcmV?d00001 diff --git a/tools/charmaps/makea2maps.py b/tools/charmaps/makea2maps.py new file mode 100644 index 0000000..40dac91 --- /dev/null +++ b/tools/charmaps/makea2maps.py @@ -0,0 +1,20 @@ +#!/usr/bin/python +import struct + +x = ''.join([chr(x) for x in range(256)]) +bits = struct.unpack("32s32s32s32s32s32s32s32s", x) +norm = [4, 5, 6, 7, 0, 1, 2, 3] +ivrs = [4, 1, 0, 7, 6, 5, 2, 3] +blnk = [4, 3, 2, 7, 0, 1, 6, 5] +normmap = ''.join([bits[x] for x in norm]) +ivrsmap = ''.join([bits[x] for x in ivrs]) +blnkmap = ''.join([bits[x] for x in blnk]) + +def dumpfile(n, m): + f = file(n, 'wb') + f.write(m) + f.close() + +dumpfile('a2normal.map', normmap) +dumpfile('a2inverse.map', ivrsmap) +dumpfile('a2blink.map', blnkmap) diff --git a/tools/charmaps/petscii.map b/tools/charmaps/petscii.map new file mode 100644 index 0000000000000000000000000000000000000000..e4ae0627414aa0f64a067b8713a72e5a82af5dfe GIT binary patch literal 256 zcmV+b0ssC00RjUA1qKHQ2?`4g4Gs?w5fT#=6&4p585$cL9UdPbAtECrB_<~*DJm;0 zEiNxGF)}kWH8wXmIXXK$Jw87`VPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3sx1U0z>c zK|(`BMMg(RNlHshO-@fxQBqS>RaRG6Sz3F1eSUv{fr5jCg@%WSiHeJijgF6yk&=^? zm6n&7nVOrNot~edp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z&y}rM|!NSAD#m2|T z$;!*j&Cbuz(bCh@)z;V8+1lIO-QM5e;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0( G{r>+J1%H76 literal 0 HcmV?d00001 diff --git a/tools/opcodes/chipsets.txt b/tools/opcodes/chipsets.txt new file mode 100644 index 0000000..4d19139 --- /dev/null +++ b/tools/opcodes/chipsets.txt @@ -0,0 +1,3 @@ +opcodes: op6502.txt +undocops: op6510.txt +c02extensions: op65c02.txt diff --git a/tools/opcodes/gensets.py b/tools/opcodes/gensets.py new file mode 100644 index 0000000..76eff0d --- /dev/null +++ b/tools/opcodes/gensets.py @@ -0,0 +1,153 @@ +#!/usr/bin/python +import sys + +verbose = 0 + +prologue = '"""' + """Opcodes file. + + Tables for the assembly of 6502-family instructions, mapping + opcodes and addressing modes to binary instructions.""" + '"""' + """ + +# Copyright 2002 Michael C. Martin. +# You may use, modify, and distribute this file under the BSD +# license: See LICENSE.txt for details. + +# Names of addressing modes +modes = ["Implied", # 0 + "Immediate", # 1 + "Zero Page", # 2 + "Zero Page, X", # 3 + "Zero Page, Y", # 4 + "Absolute", # 5 + "Absolute, X", # 6 + "Absolute, Y", # 7 + "(Absolute)", # 8 + "(Absolute, X)", # 9 + "(Absolute), Y", # 10 + "(Zero Page)", # 11 + "(Zero Page, X)", # 12 + "(Zero Page), Y", # 13 + "Relative"] # 14 + +# Lengths of the argument +lengths = [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1] +""" + +# These values should match the ones in the prologue string. +modes = ["Implied", # 0 + "Immediate", # 1 + "Zero Page", # 2 + "Zero Page, X", # 3 + "Zero Page, Y", # 4 + "Absolute", # 5 + "Absolute, X", # 6 + "Absolute, Y", # 7 + "(Absolute)", # 8 + "(Absolute, X)", # 9 + "(Absolute), Y", # 10 + "(Zero Page)", # 11 + "(Zero Page, X)", # 12 + "(Zero Page), Y", # 13 + "Relative"] # 14 + +flatmodes = [x.lower() for x in modes] + +# WARNING: This decommenter assumes that # never appears anywhere else +# in a line. +def decomment (l): + if '#' in l: + l = l[:l.index('#')] + return l.strip() + +def decomment_readlines (fname): + result = [decomment(x) for x in file(fname).readlines()] + return [x for x in result if len(x) > 0] + +def parse_chipset_file (fname): + result = [None] * 256 + ls = [[x.strip() for x in y] for y in [z.split(':', 1) for z in decomment_readlines (fname)]] + for l in ls: + if len(l) == 2: + try: + op = int (l[0], 16) + syns = l[1].split(';') + for s in syns: + s_p = s.split('-') + if len(s_p) == 2: + mnem = s_p[0].lower().strip() + mode = s_p[1].lower().strip() + if mode in flatmodes: + if result[op] == None: + result[op] = [] + result[op].append((mnem, flatmodes.index(mode))) + else: + print "Unknown mode '%s'" % s_p[1] + except ValueError: + print "Illegal opcode '%s'" % l[0] + return result + +def collate_chipset_map (cs_list, base): + result = {} + for (opcode, insts) in zip (range(256), cs_list): + if insts != None: + for inst in insts: + (mnem, mode) = inst + if mnem not in result: + result[mnem] = [None] * len(modes) + if result[mnem][mode] is not None: + print "Warning: Reassigning %s - %s" % (mnem, modes[mode]) + result[mnem][mode] = opcode + if base is not None: + todel = [] + for x in result: + if x in base: + if result[x] == base[x]: + todel.append(x) + elif verbose != 0: + print "# Opcode %s changed" % x + elif verbose != 0: + print "# Opcode %s added" % x + for x in todel: + del result[x] + return result + +def mapval(x): + if x is None: + return "None" + else: + return "0x%02X" % x + +def dump_map (m, prologue = ''): + mnems = m.keys() + mnems.sort() + for mnem in mnems: + print "%s'%s': [%s]," % (prologue, mnem, ', '.join([mapval(x) for x in m[mnem]])) + +if __name__=='__main__': + if len(sys.argv) > 1: + chipsets = argv[1:] + else: + chipsets = ['chipsets.txt'] + archs = [] + for x in chipsets: + try: + ls = [[x.strip() for x in y] for y in [z.split(':', 1) for z in decomment_readlines (x)]] + for l in ls: + if len(l) != 2: + print "Could not parse the chipset line '%s'" % ":".join(l) + else: + archs.append((l[0], l[1])) + except IOError: + print "Could not read file %s" % x + print prologue + baseset = None + for (field, fname) in archs: + chipset_list = parse_chipset_file(fname) + instruction_map = collate_chipset_map (chipset_list, baseset) + if baseset == None: + baseset = instruction_map + print "%s = {" % field + dump_map (instruction_map, ' ' * (len(field) + 4)) + print "%s}" % (' ' * (len(field) + 3)) + print "" + diff --git a/tools/opcodes/op6502.txt b/tools/opcodes/op6502.txt new file mode 100644 index 0000000..5f9c2a5 --- /dev/null +++ b/tools/opcodes/op6502.txt @@ -0,0 +1,256 @@ + 00: BRK - Implied + 01: ORA - (Zero Page, X) + 02: + 03: + 04: + 05: ORA - Zero Page + 06: ASL - Zero Page + 07: + 08: PHP - Implied + 09: ORA - Immediate + 0A: ASL - Implied + 0B: + 0C: + 0D: ORA - Absolute + 0E: ASL - Absolute + 0F: + 10: BPL - Relative + 11: ORA - (Zero Page), Y + 12: + 13: + 14: + 15: ORA - Zero Page, X + 16: ASL - Zero Page, X + 17: + 18: CLC - Implied + 19: ORA - Absolute, Y + 1A: + 1B: + 1C: + 1D: ORA - Absolute, X + 1E: ASL - Absolute, X + 1F: + 20: JSR - Absolute + 21: AND - (Zero Page, X) + 22: + 23: + 24: BIT - Zero Page + 25: AND - Zero Page + 26: ROL - Zero Page + 27: + 28: PLP - Implied + 29: AND - Immediate + 2A: ROL - Implied + 2B: + 2C: BIT - Absolute + 2D: AND - Absolute + 2E: ROL - Absolute + 2F: + 30: BMI - Relative + 31: AND - (Zero Page), Y + 32: + 33: + 34: + 35: AND - Zero Page, X + 36: ROL - Zero Page, X + 37: + 38: SEC - Implied + 39: AND - Absolute, Y + 3A: + 3B: + 3C: + 3D: AND - Absolute, X + 3E: ROL - Absolute, X + 3F: + 40: RTI - Implied + 41: EOR - (Zero Page, X) + 42: + 43: + 44: + 45: EOR - Zero Page + 46: LSR - Zero Page + 47: + 48: PHA - Implied + 49: EOR - Immediate + 4A: LSR - Implied + 4B: + 4C: JMP - Absolute + 4D: EOR - Absolute + 4E: LSR - Absolute + 4F: + 50: BVC - Relative + 51: EOR - (Zero Page), Y + 52: + 53: + 54: + 55: EOR - Zero Page, X + 56: LSR - Zero Page, X + 57: + 58: CLI - Implied + 59: EOR - Absolute, Y + 5A: + 5B: + 5C: + 5D: EOR - Absolute, X + 5E: LSR - Absolute, X + 5F: + 60: RTS - Implied + 61: ADC - (Zero Page, X) + 62: + 63: + 64: + 65: ADC - Zero Page + 66: ROR - Zero Page + 67: + 68: PLA - Implied + 69: ADC - Immediate + 6A: ROR - Implied + 6B: + 6C: JMP - (Absolute) + 6D: ADC - Absolute + 6E: ROR - Absolute + 6F: + 70: BVS - Relative + 71: ADC - (Zero Page), Y + 72: + 73: + 74: + 75: ADC - Zero Page, X + 76: ROR - Zero Page, X + 77: + 78: SEI - Implied + 79: ADC - Absolute, Y + 7A: + 7B: + 7C: + 7D: ADC - Absolute, X + 7E: ROR - Absolute, X + 7F: + 80: + 81: STA - (Zero Page, X) + 82: + 83: + 84: STY - Zero Page + 85: STA - Zero Page + 86: STX - Zero Page + 87: + 88: DEY - Implied + 89: + 8A: TXA - Implied + 8B: + 8C: STY - Absolute + 8D: STA - Absolute + 8E: STX - Absolute + 8F: + 90: BCC - Relative + 91: STA - (Zero Page), Y + 92: + 93: + 94: STY - Zero Page, X + 95: STA - Zero Page, X + 96: STX - Zero Page, Y + 97: + 98: TYA - Implied + 99: STA - Absolute, Y + 9A: TXS - Implied + 9B: + 9C: + 9D: STA - Absolute, X + 9E: + 9F: + A0: LDY - Immediate + A1: LDA - (Zero Page, X) + A2: LDX - Immediate + A3: + A4: LDY - Zero Page + A5: LDA - Zero Page + A6: LDX - Zero Page + A7: + A8: TAY - Implied + A9: LDA - Immediate + AA: TAX - Implied + AB: + AC: LDY - Absolute + AD: LDA - Absolute + AE: LDX - Absolute + AF: + B0: BCS - Relative + B1: LDA - (Zero Page), Y + B2: + B3: + B4: LDY - Zero Page, X + B5: LDA - Zero Page, X + B6: LDX - Zero Page, Y + B7: + B8: CLV - Implied + B9: LDA - Absolute, Y + BA: TSX - Implied + BB: + BC: LDY - Absolute, X + BD: LDA - Absolute, X + BE: LDX - Absolute, Y + BF: + C0: CPY - Immediate + C1: CMP - (Zero Page, X) + C2: + C3: + C4: CPY - Zero Page + C5: CMP - Zero Page + C6: DEC - Zero Page + C7: + C8: INY - Implied + C9: CMP - Immediate + CA: DEX - Implied + CB: + CC: CPY - Absolute + CD: CMP - Absolute + CE: DEC - Absolute + CF: + D0: BNE - Relative + D1: CMP - (Zero Page), Y + D2: + D3: + D4: + D5: CMP - Zero Page, X + D6: DEC - Zero Page, X + D7: + D8: CLD - Implied + D9: CMP - Absolute, Y + DA: + DB: + DC: + DD: CMP - Absolute, X + DE: DEC - Absolute, X + DF: + E0: CPX - Immediate + E1: SBC - (Zero Page, X) + E2: + E3: + E4: CPX - Zero Page + E5: SBC - Zero Page + E6: INC - Zero Page + E7: + E8: INX - Implied + E9: SBC - Immediate + EA: NOP - Implied + EB: + EC: CPX - Absolute + ED: SBC - Absolute + EE: INC - Absolute + EF: + F0: BEQ - Relative + F1: SBC - (Zero Page), Y + F2: + F3: + F4: + F5: SBC - Zero Page, X + F6: INC - Zero Page, X + F7: + F8: SED - Implied + F9: SBC - Absolute, Y + FA: + FB: + FC: + FD: SBC - Absolute, X + FE: INC - Absolute, X + FF: diff --git a/tools/opcodes/op6510.txt b/tools/opcodes/op6510.txt new file mode 100644 index 0000000..84ee575 --- /dev/null +++ b/tools/opcodes/op6510.txt @@ -0,0 +1,256 @@ + 00: BRK - Implied + 01: ORA - (Zero Page, X) + 02: + 03: SLO - (Zero Page, X) + 04: + 05: ORA - Zero Page + 06: ASL - Zero Page + 07: SLO - Zero Page + 08: PHP - Implied + 09: ORA - Immediate + 0A: ASL - Implied + 0B: ANC - Immediate + 0C: + 0D: ORA - Absolute + 0E: ASL - Absolute + 0F: SLO - Absolute + 10: BPL - Relative + 11: ORA - (Zero Page), Y + 12: + 13: SLO - (Zero Page), Y + 14: + 15: ORA - Zero Page, X + 16: ASL - Zero Page, X + 17: SLO - Zero Page, X + 18: CLC - Implied + 19: ORA - Absolute, Y + 1A: + 1B: SLO - Absolute, Y + 1C: + 1D: ORA - Absolute, X + 1E: ASL - Absolute, X + 1F: SLO - Absolute, X + 20: JSR - Absolute + 21: AND - (Zero Page, X) + 22: + 23: RLA - (Zero Page, X) + 24: BIT - Zero Page + 25: AND - Zero Page + 26: ROL - Zero Page + 27: RLA - Zero Page + 28: PLP - Implied + 29: AND - Immediate + 2A: ROL - Implied + 2B: + 2C: BIT - Absolute + 2D: AND - Absolute + 2E: ROL - Absolute + 2F: RLA - Absolute + 30: BMI - Relative + 31: AND - (Zero Page), Y + 32: + 33: RLA - (Zero Page), Y + 34: + 35: AND - Zero Page, X + 36: ROL - Zero Page, X + 37: RLA - Zero Page, X + 38: SEC - Implied + 39: AND - Absolute, Y + 3A: + 3B: RLA - Absolute, Y + 3C: + 3D: AND - Absolute, X + 3E: ROL - Absolute, X + 3F: RLA - Absolute, X + 40: RTI - Implied + 41: EOR - (Zero Page, X) + 42: + 43: SRE - (Zero Page, X) + 44: + 45: EOR - Zero Page + 46: LSR - Zero Page + 47: SRE - Zero Page + 48: PHA - Implied + 49: EOR - Immediate + 4A: LSR - Implied + 4B: ASR - Immediate + 4C: JMP - Absolute + 4D: EOR - Absolute + 4E: LSR - Absolute + 4F: SRE - Absolute + 50: BVC - Relative + 51: EOR - (Zero Page), Y + 52: + 53: SRE - (Zero Page), Y + 54: + 55: EOR - Zero Page, X + 56: LSR - Zero Page, X + 57: SRE - Zero Page, X + 58: CLI - Implied + 59: EOR - Absolute, Y + 5A: + 5B: SRE - Absolute, Y + 5C: + 5D: EOR - Absolute, X + 5E: LSR - Absolute, X + 5F: SRE - Absolute, X + 60: RTS - Implied + 61: ADC - (Zero Page, X) + 62: + 63: RRA - (Zero Page, X) + 64: + 65: ADC - Zero Page + 66: ROR - Zero Page + 67: RRA - Zero Page + 68: PLA - Implied + 69: ADC - Immediate + 6A: ROR - Implied + 6B: ARR - Immediate + 6C: JMP - (Absolute) + 6D: ADC - Absolute + 6E: ROR - Absolute + 6F: RRA - Absolute + 70: BVS - Relative + 71: ADC - (Zero Page), Y + 72: + 73: RRA - (Zero Page), Y + 74: + 75: ADC - Zero Page, X + 76: ROR - Zero Page, X + 77: RRA - Zero Page, X + 78: SEI - Implied + 79: ADC - Absolute, Y + 7A: + 7B: RRA - Absolute, Y + 7C: + 7D: ADC - Absolute, X + 7E: ROR - Absolute, X + 7F: RRA - Absolute, X + 80: + 81: STA - (Zero Page, X) + 82: + 83: SAX - (Zero Page, X) + 84: STY - Zero Page + 85: STA - Zero Page + 86: STX - Zero Page + 87: SAX - Zero Page + 88: DEY - Implied + 89: + 8A: TXA - Implied + 8B: ANE - Immediate + 8C: STY - Absolute + 8D: STA - Absolute + 8E: STX - Absolute + 8F: SAX - Absolute + 90: BCC - Relative + 91: STA - (Zero Page), Y + 92: + 93: SHA - (Zero Page), Y + 94: STY - Zero Page, X + 95: STA - Zero Page, X + 96: STX - Zero Page, Y + 97: SAX - Zero Page, Y + 98: TYA - Implied + 99: STA - Absolute, Y + 9A: TXS - Implied + 9B: SHS - Absolute, Y + 9C: + 9D: STA - Absolute, X + 9E: SHX - Absolute, Y + 9F: SHA - Absolute, Y + A0: LDY - Immediate + A1: LDA - (Zero Page, X) + A2: LDX - Immediate + A3: LAX - (Zero Page, X) + A4: LDY - Zero Page + A5: LDA - Zero Page + A6: LDX - Zero Page + A7: LAX - Zero Page + A8: TAY - Implied + A9: LDA - Immediate + AA: TAX - Implied + AB: LXA - Immediate + AC: LDY - Absolute + AD: LDA - Absolute + AE: LDX - Absolute + AF: LAX - Absolute + B0: BCS - Relative + B1: LDA - (Zero Page), Y + B2: + B3: LAX - (Zero Page), Y + B4: LDY - Zero Page, X + B5: LDA - Zero Page, X + B6: LDX - Zero Page, Y + B7: LAX - Zero Page, Y + B8: CLV - Implied + B9: LDA - Absolute, Y + BA: TSX - Implied + BB: LAS - Absolute, Y + BC: LDY - Absolute, X + BD: LDA - Absolute, X + BE: LDX - Absolute, Y + BF: LAX - Absolute, Y + C0: CPY - Immediate + C1: CMP - (Zero Page, X) + C2: + C3: DCP - (Zero Page, X) + C4: CPY - Zero Page + C5: CMP - Zero Page + C6: DEC - Zero Page + C7: DCP - Zero Page + C8: INY - Implied + C9: CMP - Immediate + CA: DEX - Implied + CB: SBX - Immediate + CC: CPY - Absolute + CD: CMP - Absolute + CE: DEC - Absolute + CF: DCP - Absolute + D0: BNE - Relative + D1: CMP - (Zero Page), Y + D2: + D3: DCP - (Zero Page), Y + D4: + D5: CMP - Zero Page, X + D6: DEC - Zero Page, X + D7: DCP - Zero Page, X + D8: CLD - Implied + D9: CMP - Absolute, Y + DA: + DB: DCP - Absolute, Y + DC: + DD: CMP - Absolute, X + DE: DEC - Absolute, X + DF: DCP - Absolute, X + E0: CPX - Immediate + E1: SBC - (Zero Page, X) + E2: + E3: ISB - (Zero Page, X) + E4: CPX - Zero Page + E5: SBC - Zero Page + E6: INC - Zero Page + E7: ISB - Zero Page + E8: INX - Implied + E9: SBC - Immediate + EA: NOP - Implied + EB: + EC: CPX - Absolute + ED: SBC - Absolute + EE: INC - Absolute + EF: ISB - Absolute + F0: BEQ - Relative + F1: SBC - (Zero Page), Y + F2: + F3: ISB - (Zero Page), Y + F4: + F5: SBC - Zero Page, X + F6: INC - Zero Page, X + F7: ISB - Zero Page, X + F8: SED - Implied + F9: SBC - Absolute, Y + FA: + FB: ISB - Absolute, Y + FC: + FD: SBC - Absolute, X + FE: INC - Absolute, X + FF: ISB - Absolute, X diff --git a/tools/opcodes/op65c02.txt b/tools/opcodes/op65c02.txt new file mode 100644 index 0000000..a672a2e --- /dev/null +++ b/tools/opcodes/op65c02.txt @@ -0,0 +1,256 @@ + 00: BRK - Implied + 01: ORA - (Zero Page, X) + 02: + 03: + 04: TSB - Zero Page + 05: ORA - Zero Page + 06: ASL - Zero Page + 07: RMB0 - Zero Page + 08: PHP - Implied + 09: ORA - Immediate + 0A: ASL - Implied + 0B: + 0C: TSB - Absolute + 0D: ORA - Absolute + 0E: ASL - Absolute + 0F: BBR0 - Relative + 10: BPL - Relative + 11: ORA - (Zero Page), Y + 12: ORA - (Zero Page) + 13: + 14: TRB - Zero Page + 15: ORA - Zero Page, X + 16: ASL - Zero Page, X + 17: RMB1 - Zero Page + 18: CLC - Implied + 19: ORA - Absolute, Y + 1A: INA - Implied; INC - Implied + 1B: + 1C: TRB - Absolute + 1D: ORA - Absolute, X + 1E: ASL - Absolute, X + 1F: BBR1 - Relative + 20: JSR - Absolute + 21: AND - (Zero Page, X) + 22: + 23: + 24: BIT - Zero Page + 25: AND - Zero Page + 26: ROL - Zero Page + 27: RMB2 - Zero Page + 28: PLP - Implied + 29: AND - Immediate + 2A: ROL - Implied + 2B: + 2C: BIT - Absolute + 2D: AND - Absolute + 2E: ROL - Absolute + 2F: BBR2 - Relative + 30: BMI - Relative + 31: AND - (Zero Page), Y + 32: AND - (Zero Page) + 33: + 34: BIT - Zero Page, X + 35: AND - Zero Page, X + 36: ROL - Zero Page, X + 37: RMB3 - Zero Page + 38: SEC - Implied + 39: AND - Absolute, Y + 3A: DEA - Implied; DEC - Implied + 3B: + 3C: BIT - Absolute, X + 3D: AND - Absolute, X + 3E: ROL - Absolute, X + 3F: BBR3 - Relative + 40: RTI - Implied + 41: EOR - (Zero Page, X) + 42: + 43: + 44: + 45: EOR - Zero Page + 46: LSR - Zero Page + 47: RMB4 - Zero Page + 48: PHA - Implied + 49: EOR - Immediate + 4A: LSR - Implied + 4B: + 4C: JMP - Absolute + 4D: EOR - Absolute + 4E: LSR - Absolute + 4F: BBR4 - Relative + 50: BVC - Relative + 51: EOR - (Zero Page), Y + 52: EOR - (Zero Page) + 53: + 54: + 55: EOR - Zero Page, X + 56: LSR - Zero Page, X + 57: RMB5 - Zero Page + 58: CLI - Implied + 59: EOR - Absolute, Y + 5A: PHY - Implied + 5B: + 5C: + 5D: EOR - Absolute, X + 5E: LSR - Absolute, X + 5F: BBR5 - Relative + 60: RTS - Implied + 61: ADC - (Zero Page, X) + 62: + 63: + 64: STZ - Zero Page + 65: ADC - Zero Page + 66: ROR - Zero Page + 67: RMB6 - Zero Page + 68: PLA - Implied + 69: ADC - Immediate + 6A: ROR - Implied + 6B: + 6C: JMP - (Absolute) + 6D: ADC - Absolute + 6E: ROR - Absolute + 6F: BBR6 - Relative + 70: BVS - Relative + 71: ADC - (Zero Page), Y + 72: ADC - (Zero Page) + 73: + 74: STZ - Zero Page, X + 75: ADC - Zero Page, X + 76: ROR - Zero Page, X + 77: RMB7 - Zero Page + 78: SEI - Implied + 79: ADC - Absolute, Y + 7A: PLY - Implied + 7B: + 7C: JMP - (Absolute, X) + 7D: ADC - Absolute, X + 7E: ROR - Absolute, X + 7F: BBR7 - Relative + 80: BRA - Relative + 81: STA - (Zero Page, X) + 82: + 83: + 84: STY - Zero Page + 85: STA - Zero Page + 86: STX - Zero Page + 87: SMB0 - Zero Page + 88: DEY - Implied + 89: BIT - Immediate + 8A: TXA - Implied + 8B: + 8C: STY - Absolute + 8D: STA - Absolute + 8E: STX - Absolute + 8F: BBS0 - Relative + 90: BCC - Relative + 91: STA - (Zero Page), Y + 92: STA - (Zero Page) + 93: + 94: STY - Zero Page, X + 95: STA - Zero Page, X + 96: STX - Zero Page, Y + 97: SMB1 - Zero Page + 98: TYA - Implied + 99: STA - Absolute, Y + 9A: TXS - Implied + 9B: + 9C: STZ - Absolute + 9D: STA - Absolute, X + 9E: STZ - Absolute, X + 9F: BBS1 - Relative + A0: LDY - Immediate + A1: LDA - (Zero Page, X) + A2: LDX - Immediate + A3: + A4: LDY - Zero Page + A5: LDA - Zero Page + A6: LDX - Zero Page + A7: SMB2 - Zero Page + A8: TAY - Implied + A9: LDA - Immediate + AA: TAX - Implied + AB: + AC: LDY - Absolute + AD: LDA - Absolute + AE: LDX - Absolute + AF: BBS2 - Relative + B0: BCS - Relative + B1: LDA - (Zero Page), Y + B2: LDA - (Zero Page) + B3: + B4: LDY - Zero Page, X + B5: LDA - Zero Page, X + B6: LDX - Zero Page, Y + B7: SMB3 - Zero Page + B8: CLV - Implied + B9: LDA - Absolute, Y + BA: TSX - Implied + BB: + BC: LDY - Absolute, X + BD: LDA - Absolute, X + BE: LDX - Absolute, Y + BF: BBS3 - Relative + C0: CPY - Immediate + C1: CMP - (Zero Page, X) + C2: + C3: + C4: CPY - Zero Page + C5: CMP - Zero Page + C6: DEC - Zero Page + C7: SMB4 - Zero Page + C8: INY - Implied + C9: CMP - Immediate + CA: DEX - Implied + CB: WAI - Implied + CC: CPY - Absolute + CD: CMP - Absolute + CE: DEC - Absolute + CF: BBS4 - Relative + D0: BNE - Relative + D1: CMP - (Zero Page), Y + D2: CMP - (Zero Page) + D3: + D4: + D5: CMP - Zero Page, X + D6: DEC - Zero Page, X + D7: SMB5 - Zero Page + D8: CLD - Implied + D9: CMP - Absolute, Y + DA: PHX - Implied + DB: STP - Implied + DC: + DD: CMP - Absolute, X + DE: DEC - Absolute, X + DF: BBS5 - Relative + E0: CPX - Immediate + E1: SBC - (Zero Page, X) + E2: + E3: + E4: CPX - Zero Page + E5: SBC - Zero Page + E6: INC - Zero Page + E7: SMB6 - Zero Page + E8: INX - Implied + E9: SBC - Immediate + EA: NOP - Implied + EB: + EC: CPX - Absolute + ED: SBC - Absolute + EE: INC - Absolute + EF: BBS6 - Relative + F0: BEQ - Relative + F1: SBC - (Zero Page), Y + F2: SBC - (Zero Page) + F3: + F4: + F5: SBC - Zero Page, X + F6: INC - Zero Page, X + F7: SMB7 - Zero Page + F8: SED - Implied + F9: SBC - Absolute, Y + FA: PLX - Implied + FB: + FC: + FD: SBC - Absolute, X + FE: INC - Absolute, X + FF: BBS7 - Relative