From 1860009b6bf620c4f7ee6baec4e1b71850cb08bb Mon Sep 17 00:00:00 2001 From: michaelangel007 Date: Sun, 31 Mar 2019 13:43:29 -0700 Subject: [PATCH] Add to repository --- README.md | 69 +++++++++++ asm.bat | 1 + debug.applewin | 17 +++ minipixviewer | Bin 0 -> 166 bytes minipixviewer.po | Bin 0 -> 143360 bytes minipixviewer.s | 237 ++++++++++++++++++++++++++++++++++++++ minipixviewer_Output.txt | 242 +++++++++++++++++++++++++++++++++++++++ pics/scorpio.png | Bin 0 -> 50394 bytes pics/wizard.png | Bin 0 -> 39972 bytes scorpio.hgr | Bin 0 -> 8192 bytes scorpio.minipix | Bin 0 -> 576 bytes wizard.minipix | Bin 0 -> 572 bytes 12 files changed, 566 insertions(+) create mode 100644 README.md create mode 100644 asm.bat create mode 100644 debug.applewin create mode 100644 minipixviewer create mode 100644 minipixviewer.po create mode 100644 minipixviewer.s create mode 100644 minipixviewer_Output.txt create mode 100644 pics/scorpio.png create mode 100644 pics/wizard.png create mode 100644 scorpio.hgr create mode 100644 scorpio.minipix create mode 100644 wizard.minipix diff --git a/README.md b/README.md new file mode 100644 index 0000000..d1d0cf7 --- /dev/null +++ b/README.md @@ -0,0 +1,69 @@ +# PrintShop / MiniPix Viewer + +![pics/scorpio.png] + +![pics/wizard.png] + +Utility to decode a PrintShop / MiniPix 88x52 monochrome imag written +in 6502 assembly language for the Apple \]\[. +By default MiniPix are loaded at $5800. File size is 572 ($23C). + +From UseNet this question was asked: PrintShop graphics to DHR? + +I really like this "puzzle" as there are 6 variations: + +a) MiniPixToSrcBufHGR (Over-writes source minipix) +b) MiniPixToDstBufHGR (Unpacks to different buffer) +c) MiniPixToScreenHGR + +d) MiniPixToSrcBufDHGR (Over-writes source minipix) +e) MiniPixToDstBufDHGR (Unpacks to different buffer) +f) MiniPixToScreenDHGR + +I was bored this weekend so I whipped up an implementation for: + (c) MiniPixToScreenHGR: + +Pros +==== ++ Unpacks directly to the HGR screen ++ Doesn't need any secondary buffers ++ Source MiniPix image is left untouched ++ Image is perfectly centered both horizontally and vertically + (If you don't care about perfectly centered horizontally by being shifted + over 1 pixel to the left then you can shave off 166 - 157 = 9 bytes. You + will also need to fixup the Column2ColorHGR table.) ++ Uses correct 2:3 aspect ratio ++ Technically, the HGR screen does NOT need to be initialized, however it DOES + call HGR @ $F3E2 though to in order to initialize a few zero page variables. + +Meh +=== +o Uses a 7 byte look-up table for pixel doubling + +Cons +==== +- Uses a crap ton of zero page variables -- 16 in total: + $1C, $26, $27, $30, $E4 .. $E6, $F7 .. $FF +- Requires Applesoft ROM to be banked in as it uses 2 ROM entry points: + HGR, HPOSN. +- Code size is 152 bytes. (Demo is 166 bytes.) + + +6000:20 e2 f3 8d 52 c0 a2 58 a0 00 86 f8 84 f7 a9 12 +6010:85 fc a0 00 84 e4 84 ff a2 34 a5 fc 20 17 f4 a8 +6020:85 fb 85 fd 18 a5 e5 65 26 85 26 a2 01 86 fe a9 +6030:01 85 fa b1 f7 85 f9 06 f9 a5 fd b0 05 1d 9f 60 +6040:85 fd e8 e0 04 f0 04 e0 07 d0 13 84 fb 20 8a 60 +6050:85 fd a4 fb e6 26 e0 07 d0 04 a2 00 86 fe 06 fa +6060:90 d5 c8 84 fb c0 0b 90 c6 a5 fd 20 8a 60 e6 fc +6070:e6 ff a6 ff e0 03 d0 a0 18 a9 0b 65 f7 85 f7 90 +6080:02 e6 f8 a5 fc c9 ae d0 8d 60 48 29 7f a0 00 91 +6090:26 68 2a a9 00 2a f0 06 e0 04 d0 02 a9 03 60 06 +60a0:18 60 80 0c 30 c0 + +BSAVE MINIPIXVIEWER,A$6000,L$A6 + +It expects a PrintShop MiniPix (572 bytes) to be loaded at $5800. + +Demo disk and (Merlin32) assembly source included at: +https://github.com/Michaelangel007/apple2_printshop_viewer diff --git a/asm.bat b/asm.bat new file mode 100644 index 0000000..cde5197 --- /dev/null +++ b/asm.bat @@ -0,0 +1 @@ +merlin32 -V . minipixviewer.s diff --git a/debug.applewin b/debug.applewin new file mode 100644 index 0000000..48b70ce --- /dev/null +++ b/debug.applewin @@ -0,0 +1,17 @@ +bload "scorpio.hgr",2000 + +bload "scorpio.minipix",5800 + +bload "minipixviewer",6000 + +sym zSrcPtr = $F7 +sym zSrcBits = $F9 +sym zSrcMask = $FA +sym zSrcCol = $FB + +sym zDstRow = $FC +sym zDstBits = $FD +sym zDstColMod7 = $FE +sym zDstRowMod3 = $FF + +sym PrintShopSprite = $5800 diff --git a/minipixviewer b/minipixviewer new file mode 100644 index 0000000000000000000000000000000000000000..050ddb1b9b6dcfb33f031ffa26c34f502f698b62 GIT binary patch literal 166 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 z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U Q1c(3;AOb|-|04qb2}H%BX#fBK literal 0 HcmV?d00001 diff --git a/minipixviewer.s b/minipixviewer.s new file mode 100644 index 0000000..fc3b45e --- /dev/null +++ b/minipixviewer.s @@ -0,0 +1,237 @@ +; PrintShop / MiniPix Unpacker and Viewer +; Version 5, March 31, 2019 +; Copyleft Michaelangel007 +; "Sharing is Caring" + + +; === Our Zero Page Variables === + +zSrcPtr = $F7 ; 16-bit pointr to source packed PrintShop graphic +zSrcBits = $F9 +zSrcMask = $FA ; counter 0 .. 7 +zSrcCol = $FB ; cache of Y reg for lda (zSrcPtr),Y + +zDstPtr = $26 ; 16-bit pointer to dest; GBASL + +zDstRow = $FC +zDstBits = $FD +zDstColMod7 = $FE +zDstRowMod3 = $FF + + +; === PrintShop === + +PrintShopSprite = $5800 ; Default load adddress +;LEN = 572 ; File size + +; Dimensions +W_PIXELS = 88 +W_BYTES = 88/8 ; Source (Packed) Bytes/Row +H_PIXELS = 52 + +X_SCALE = 2 ; Not actually used as hard-coded. For reference +Y_SCALE = 3 + + +; === Applesoft/Monitor Zero Page Variables === + +MON_GBAS = $26 ; 16-bit Pointer to HGR scanline + +HGR_COLOR = $E4 ; +HGR_HORIZ = $E5 ; X column / 7 = scanline byte offset +HGR_PAGE = $E6 ; $20 or $40 + + +; === I/O Softswitches === + +TXTCLR = $C050 ; Graphics mode +TXTSET = $C051 + +MIXCLR = $C052 ; Split screen +MIXSET = $C053 ; Full screen + +PAGE1 = $C054 +PAGE2 = $C055 + +LORES = $C056 +HIRES = $C057 + + +; === Applesoft/Monitor ROM === + +HGR = $F3E2 ; Clear and View HGR with mixed text/graphics +HCLR = $F3F2 +HPOSN = $F411 ; Set GBASL, GBASH, MON.HMASK, HGR.BITS ; uses HGR.PAGE, +MOVE.DOWN = $F505 ; Update GBASL, GBASH +COLORTBL = $F6F6 ; byte colors[7] +HCOLOR = $F6E9 + +HOME = $FC58 + +; ===================================================================== + + ORG $6000 + +PrintShopViewer + + jsr HGR + sta MIXCLR ; Full screen + + ldx #>PrintShopSprite + ldy # col = Y,X +; sta (zDstPtr),Y ; Need last pixel on this scanline + jsr PutHgrByte + +; Repeat each src line 3 times + inc zDstRow + inc zDstRowMod3 + ldx zDstRowMod3 + cpx #3 + bne :NextSrcRow ; Y = 0 --> col = Y,X + + clc ; Move to next linear source row + lda #W_BYTES + adc zSrcPtr + 0 + sta zSrcPtr + 0 + bcc :SameSrcPage +:NextSrcPage + inc zSrcPtr + 1 +:SameSrcPage + + lda zDstRow + cmp #H_PIXELS*Y_SCALE + CENTER_Y + bne :NextTripleY +:Done + rts + +PutHgrByte + pha ; Save High Bit + and #$7f ; HGR = 7 bits/pixel as we don't want half-pixels + ldy #0 ; Need Y=0 for :NextSrcRow --> col = Y,X + sta (zDstPtr),Y ; Need last pixel on this scanline + pla ; Restore High Bit + rol ; C = Bit 7 propogate + lda #0 ; into next dst byte bit 0 + rol + beq :NoCarry ; if we have high bit crossing even into odd column + cpx #4 + bne :NoCarry + lda #3 ; then we also need to the bottom 2 bits +:NoCarry + rts + +; Single Pixel to Double Pixel +Column2ColorHGR + + DB %00000110 ; [0] = $06 Even Column + DB %00011000 ; [1] = $18 + DB %01100000 ; [2] = $60 + DB %10000000 ; [3] = $80 + DB %00001100 ; [4] = $0C Odd Column + DB %00110000 ; [5] = $30 + DB %11000000 ; [6] = $C0 diff --git a/minipixviewer_Output.txt b/minipixviewer_Output.txt new file mode 100644 index 0000000..f227380 --- /dev/null +++ b/minipixviewer_Output.txt @@ -0,0 +1,242 @@ +------+---------------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + Line | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code +------+---------------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- + 1 | 1 minipixviewer.s 1 | Comment | 11 | | 0 | 00/8000 | ; PrintShop / MiniPix Unpacker and Viewer + 2 | 1 minipixviewer.s 2 | Comment | 11 | | 0 | 00/8000 | ; Version 5, March 31, 2019 + 3 | 1 minipixviewer.s 3 | Comment | 11 | | 0 | 00/8000 | ; Copyleft Michaelangel007 + 4 | 1 minipixviewer.s 4 | Comment | 11 | | 0 | 00/8000 | ; "Sharing is Caring" + 5 | 1 minipixviewer.s 5 | Empty | 11 | | 0 | 00/8000 | + 6 | 1 minipixviewer.s 6 | Empty | 11 | | 0 | 00/8000 | + 7 | 1 minipixviewer.s 7 | Comment | 11 | | 0 | 00/8000 | ; === Our Zero Page Variables === + 8 | 1 minipixviewer.s 8 | Empty | 11 | | 0 | 00/8000 | + 9 | 1 minipixviewer.s 9 | Equivalence | 11 | | 0 | 00/8000 | zSrcPtr = $F7 ; 16-bit pointr to source packed PrintShop graphic + 10 | 1 minipixviewer.s 10 | Equivalence | 11 | | 0 | 00/8000 | zSrcBits = $F9 + 11 | 1 minipixviewer.s 11 | Equivalence | 11 | | 0 | 00/8000 | zSrcMask = $FA ; counter 0 .. 7 + 12 | 1 minipixviewer.s 12 | Equivalence | 11 | | 0 | 00/8000 | zSrcCol = $FB ; cache of Y reg for lda (zSrcPtr),Y + 13 | 1 minipixviewer.s 13 | Empty | 11 | | 0 | 00/8000 | + 14 | 1 minipixviewer.s 14 | Equivalence | 11 | | 0 | 00/8000 | zDstPtr = $26 ; 16-bit pointer to dest; GBASL + 15 | 1 minipixviewer.s 15 | Empty | 11 | | 0 | 00/8000 | + 16 | 1 minipixviewer.s 16 | Equivalence | 11 | | 0 | 00/8000 | zDstRow = $FC + 17 | 1 minipixviewer.s 17 | Equivalence | 11 | | 0 | 00/8000 | zDstBits = $FD + 18 | 1 minipixviewer.s 18 | Equivalence | 11 | | 0 | 00/8000 | zDstColMod7 = $FE + 19 | 1 minipixviewer.s 19 | Equivalence | 11 | | 0 | 00/8000 | zDstRowMod3 = $FF + 20 | 1 minipixviewer.s 20 | Empty | 11 | | 0 | 00/8000 | + 21 | 1 minipixviewer.s 21 | Empty | 11 | | 0 | 00/8000 | + 22 | 1 minipixviewer.s 22 | Comment | 11 | | 0 | 00/8000 | ; === PrintShop === + 23 | 1 minipixviewer.s 23 | Empty | 11 | | 0 | 00/8000 | + 24 | 1 minipixviewer.s 24 | Equivalence | 11 | | 0 | 00/8000 | PrintShopSprite = $5800 ; Default load adddress + 25 | 1 minipixviewer.s 25 | Comment | 11 | | 0 | 00/8000 | ;LEN = 572 ; File size + 26 | 1 minipixviewer.s 26 | Empty | 11 | | 0 | 00/8000 | + 27 | 1 minipixviewer.s 27 | Comment | 11 | | 0 | 00/8000 | ; Dimensions + 28 | 1 minipixviewer.s 28 | Equivalence | 11 | | 0 | 00/8000 | W_PIXELS = 88 + 29 | 1 minipixviewer.s 29 | Equivalence | 11 | | 0 | 00/8000 | W_BYTES = 88/8 ; Source (Packed) Bytes/Row + 30 | 1 minipixviewer.s 30 | Equivalence | 11 | | 0 | 00/8000 | H_PIXELS = 52 + 31 | 1 minipixviewer.s 31 | Empty | 11 | | 0 | 00/8000 | + 32 | 1 minipixviewer.s 32 | Equivalence | 11 | | 0 | 00/8000 | X_SCALE = 2 ; Not actually used as hard-coded. For reference + 33 | 1 minipixviewer.s 33 | Equivalence | 11 | | 0 | 00/8000 | Y_SCALE = 3 + 34 | 1 minipixviewer.s 34 | Empty | 11 | | 0 | 00/8000 | + 35 | 1 minipixviewer.s 35 | Empty | 11 | | 0 | 00/8000 | + 36 | 1 minipixviewer.s 36 | Comment | 11 | | 0 | 00/8000 | ; === Applesoft/Monitor Zero Page Variables === + 37 | 1 minipixviewer.s 37 | Empty | 11 | | 0 | 00/8000 | + 38 | 1 minipixviewer.s 38 | Equivalence | 11 | | 0 | 00/8000 | MON_GBAS = $26 ; 16-bit Pointer to HGR scanline + 39 | 1 minipixviewer.s 39 | Empty | 11 | | 0 | 00/8000 | + 40 | 1 minipixviewer.s 40 | Equivalence | 11 | | 0 | 00/8000 | HGR_COLOR = $E4 ; + 41 | 1 minipixviewer.s 41 | Equivalence | 11 | | 0 | 00/8000 | HGR_HORIZ = $E5 ; X column / 7 = scanline byte offset + 42 | 1 minipixviewer.s 42 | Equivalence | 11 | | 0 | 00/8000 | HGR_PAGE = $E6 ; $20 or $40 + 43 | 1 minipixviewer.s 43 | Empty | 11 | | 0 | 00/8000 | + 44 | 1 minipixviewer.s 44 | Empty | 11 | | 0 | 00/8000 | + 45 | 1 minipixviewer.s 45 | Comment | 11 | | 0 | 00/8000 | ; === I/O Softswitches === + 46 | 1 minipixviewer.s 46 | Empty | 11 | | 0 | 00/8000 | + 47 | 1 minipixviewer.s 47 | Equivalence | 11 | | 0 | 00/8000 | TXTCLR = $C050 ; Graphics mode + 48 | 1 minipixviewer.s 48 | Equivalence | 11 | | 0 | 00/8000 | TXTSET = $C051 + 49 | 1 minipixviewer.s 49 | Empty | 11 | | 0 | 00/8000 | + 50 | 1 minipixviewer.s 50 | Equivalence | 11 | | 0 | 00/8000 | MIXCLR = $C052 ; Split screen + 51 | 1 minipixviewer.s 51 | Equivalence | 11 | | 0 | 00/8000 | MIXSET = $C053 ; Full screen + 52 | 1 minipixviewer.s 52 | Empty | 11 | | 0 | 00/8000 | + 53 | 1 minipixviewer.s 53 | Equivalence | 11 | | 0 | 00/8000 | PAGE1 = $C054 + 54 | 1 minipixviewer.s 54 | Equivalence | 11 | | 0 | 00/8000 | PAGE2 = $C055 + 55 | 1 minipixviewer.s 55 | Empty | 11 | | 0 | 00/8000 | + 56 | 1 minipixviewer.s 56 | Equivalence | 11 | | 0 | 00/8000 | LORES = $C056 + 57 | 1 minipixviewer.s 57 | Equivalence | 11 | | 0 | 00/8000 | HIRES = $C057 + 58 | 1 minipixviewer.s 58 | Empty | 11 | | 0 | 00/8000 | + 59 | 1 minipixviewer.s 59 | Empty | 11 | | 0 | 00/8000 | + 60 | 1 minipixviewer.s 60 | Comment | 11 | | 0 | 00/8000 | ; === Applesoft/Monitor ROM === + 61 | 1 minipixviewer.s 61 | Empty | 11 | | 0 | 00/8000 | + 62 | 1 minipixviewer.s 62 | Equivalence | 11 | | 0 | 00/8000 | HGR = $F3E2 ; Clear and View HGR with mixed text/graphics + 63 | 1 minipixviewer.s 63 | Equivalence | 11 | | 0 | 00/8000 | HCLR = $F3F2 + 64 | 1 minipixviewer.s 64 | Equivalence | 11 | | 0 | 00/8000 | HPOSN = $F411 ; Set GBASL, GBASH, MON.HMASK, HGR.BITS ; uses HGR.PAGE, + 65 | 1 minipixviewer.s 65 | Equivalence | 11 | | 0 | 00/8000 | MOVE.DOWN = $F505 ; Update GBASL, GBASH + 66 | 1 minipixviewer.s 66 | Equivalence | 11 | | 0 | 00/8000 | COLORTBL = $F6F6 ; byte colors[7] + 67 | 1 minipixviewer.s 67 | Equivalence | 11 | | 0 | 00/8000 | HCOLOR = $F6E9 + 68 | 1 minipixviewer.s 68 | Empty | 11 | | 0 | 00/8000 | + 69 | 1 minipixviewer.s 69 | Equivalence | 11 | | 0 | 00/8000 | HOME = $FC58 + 70 | 1 minipixviewer.s 70 | Empty | 11 | | 0 | 00/8000 | + 71 | 1 minipixviewer.s 71 | Comment | 11 | | 0 | 00/8000 | ; ===================================================================== + 72 | 1 minipixviewer.s 72 | Empty | 11 | | 0 | 00/8000 | + 73 | 1 minipixviewer.s 73 | Directive | 11 | | 0 | 00/8000 | ORG $6000 + 74 | 1 minipixviewer.s 74 | Empty | 11 | | 0 | 00/6000 | + 75 | 1 minipixviewer.s 75 | Empty | 11 | | 0 | 00/6000 | PrintShopViewer + 76 | 1 minipixviewer.s 76 | Empty | 11 | | 0 | 00/6000 | + 77 | 1 minipixviewer.s 77 | Code | 11 | | 3 | 00/6000 : 20 E2 F3 | jsr {$F3E2} + 78 | 1 minipixviewer.s 78 | Code | 11 | | 3 | 00/6003 : 8D 52 C0 | sta {$C052} ; Full screen + 79 | 1 minipixviewer.s 79 | Empty | 11 | | 0 | 00/6006 | + 80 | 1 minipixviewer.s 80 | Code | 11 | | 2 | 00/6006 : A2 58 | ldx #>{$5800} + 81 | 1 minipixviewer.s 81 | Code | 11 | | 2 | 00/6008 : A0 00 | ldy #<{$5800} + 82 | 1 minipixviewer.s 82 | Code | 11 | | 2 | 00/600A : 86 F8 | stx {$F7}+1 + 83 | 1 minipixviewer.s 83 | Code | 11 | | 2 | 00/600C : 84 F7 | sty {$F7}+0 + 84 | 1 minipixviewer.s 84 | Empty | 11 | | 0 | 00/600E | + 85 | 1 minipixviewer.s 85 | Comment | 11 | | 0 | 00/600E | ; Src PS 2x is 88 * 2x scaling = 176 pixels + 86 | 1 minipixviewer.s 86 | Comment | 11 | | 0 | 00/600E | ; Dstr HGR screen is 40 columns * 7 px/col = 280 pixels + 87 | 1 minipixviewer.s 87 | Comment | 11 | | 0 | 00/600E | ; ===================================================================== + 88 | 1 minipixviewer.s 88 | Empty | 11 | | 0 | 00/600E | + 89 | 1 minipixviewer.s 89 | Comment | 11 | | 0 | 00/600E | ; Horz Centering: + 90 | 1 minipixviewer.s 90 | Comment | 11 | | 0 | 00/600E | ; = (280 - W_PIXELS*X_SCALE)/2 + 91 | 1 minipixviewer.s 91 | Comment | 11 | | 0 | 00/600E | ; = (280 - 88*2)/2 + 92 | 1 minipixviewer.s 92 | Comment | 11 | | 0 | 00/600E | ; = 52 px/col + 93 | 1 minipixviewer.s 93 | Comment | 11 | | 0 | 00/600E | ; = 52 px / 7px/col + 94 | 1 minipixviewer.s 94 | Comment | 11 | | 0 | 00/600E | ; = 7.42... = scanline offset + 95 | 1 minipixviewer.s 95 | Comment | 11 | | 0 | 00/600E | ; + 96 | 1 minipixviewer.s 96 | Comment | 11 | | 0 | 00/600E | ; 52 px mod 7 px/byte + 97 | 1 minipixviewer.s 97 | Comment | 11 | | 0 | 00/600E | ; = 52 mod 7 + 98 | 1 minipixviewer.s 98 | Comment | 11 | | 0 | 00/600E | ; = 3 + 99 | 1 minipixviewer.s 99 | Equivalence | 11 | | 0 | 00/600E | CENTER_X = 52 + 100 | 1 minipixviewer.s 100 | Equivalence | 11 | | 0 | 00/600E | X_MOD_7 = 1 ; Since each pixel is doubled we need to divide (52 mod 7) / 2 + 101 | 1 minipixviewer.s 101 | Empty | 11 | | 0 | 00/600E | + 102 | 1 minipixviewer.s 102 | Comment | 11 | | 0 | 00/600E | ; Vert Centering: + 103 | 1 minipixviewer.s 103 | Comment | 11 | | 0 | 00/600E | ; = (192 - H_PIXELS*Y_SCALE)/2 + 104 | 1 minipixviewer.s 104 | Comment | 11 | | 0 | 00/600E | ; = (192 - 52*3)/2 + 105 | 1 minipixviewer.s 105 | Comment | 11 | | 0 | 00/600E | ; = (192 - 156) / 2 + 106 | 1 minipixviewer.s 106 | Comment | 11 | | 0 | 00/600E | ; = 18 + 107 | 1 minipixviewer.s 107 | Equivalence | 11 | | 0 | 00/600E | CENTER_Y = {192-{{52}*{3}}}/2 + 108 | 1 minipixviewer.s 108 | Empty | 11 | | 0 | 00/600E | + 109 | 1 minipixviewer.s 109 | Comment | 11 | | 0 | 00/600E | ; DEBUG -- Same x,y as PrintShop Graphic Editor + 110 | 1 minipixviewer.s 110 | Comment | 11 | | 0 | 00/600E | ;CENTER_Y = 23 + 111 | 1 minipixviewer.s 111 | Comment | 11 | | 0 | 00/600E | ;CENTER_X = 0 + 112 | 1 minipixviewer.s 112 | Empty | 11 | | 0 | 00/600E | + 113 | 1 minipixviewer.s 113 | Empty | 11 | | 0 | 00/600E | + 114 | 1 minipixviewer.s 114 | Comment | 11 | | 0 | 00/600E | ; Image will be centered on screen + 115 | 1 minipixviewer.s 115 | Comment | 11 | | 0 | 00/600E | ; HGR does NOT need to be cleared to black as we set each byte to zero + 116 | 1 minipixviewer.s 116 | Comment | 11 | | 0 | 00/600E | ; ========== + 117 | 1 minipixviewer.s 117 | Empty | 11 | | 0 | 00/600E | UnpackToScreenHGR + 118 | 1 minipixviewer.s 118 | Code | 11 | | 2 | 00/600E : A9 12 | lda #{{192-{{52}*{3}}}/2}; y = 18 + 119 | 1 minipixviewer.s 119 | Code | 11 | | 2 | 00/6010 : 85 FC | sta {$FC} + 120 | 1 minipixviewer.s 120 | Code | 11 | | 2 | 00/6012 : A0 00 | ldy #0 ; HPOSN: column = Y,X + 121 | 1 minipixviewer.s 121 | Code | 11 | | 2 | 00/6014 : 84 E4 | sty {$E4} ; 0 = Black + 122 | 1 minipixviewer.s 122 | Empty | 11 | | 0 | 00/6016 | + 123 | 1 minipixviewer.s 123 | Empty | 11 | | 0 | 00/6016 | _NextTripleY + 124 | 1 minipixviewer.s 124 | Code | 11 | | 2 | 00/6016 : 84 FF | sty {$FF} ; Do y scaling + 125 | 1 minipixviewer.s 125 | Empty | 11 | | 0 | 00/6018 | + 126 | 1 minipixviewer.s 126 | Empty | 11 | | 0 | 00/6018 | _NextSrcRow + 127 | 1 minipixviewer.s 127 | Code | 11 | | 2 | 00/6018 : A2 34 | ldx #{52} ; HPOSN: column = y,X + 128 | 1 minipixviewer.s 128 | Code | 11 | | 2 | 00/601A : A5 FC | lda {$FC} ; HPOSN: row = A + 129 | 1 minipixviewer.s 129 | Code | 11 | | 3 | 00/601C : 20 17 F4 | jsr {$F411}+6 ; We don't use HGR.X .. HGR.Y @ $E0 .. $E2 + 130 | 1 minipixviewer.s 130 | Code | 11 | | 1 | 00/601F : A8 | tay ; on exit A = HGR.COLOR = 0 @ $F450 + 131 | 1 minipixviewer.s 131 | Code | 11 | | 2 | 00/6020 : 85 FB | sta {$FB} ; Y = zSrcCol + 132 | 1 minipixviewer.s 132 | Code | 11 | | 2 | 00/6022 : 85 FD | sta {$FD} + 133 | 1 minipixviewer.s 133 | Empty | 11 | | 0 | 00/6024 | + 134 | 1 minipixviewer.s 134 | Code | 11 | | 1 | 00/6024 : 18 | clc ; GBAS points to start of scanline + 135 | 1 minipixviewer.s 135 | Code | 11 | | 2 | 00/6025 : A5 E5 | lda {$E5} ; Take X column into account + 136 | 1 minipixviewer.s 136 | Code | 11 | | 2 | 00/6027 : 65 26 | adc {$26} + 137 | 1 minipixviewer.s 137 | Code | 11 | | 2 | 00/6029 : 85 26 | sta {$26} + 138 | 1 minipixviewer.s 138 | Empty | 11 | | 0 | 00/602B | + 139 | 1 minipixviewer.s 139 | Code | 11 | | 2 | 00/602B : A2 01 | ldx #{1} ; LDX Can be optimized out if x mod 7 is 0 + 140 | 1 minipixviewer.s 140 | Code | 11 | | 2 | 00/602D : 86 FE | stx {$FE} ; + 141 | 1 minipixviewer.s 141 | Empty | 11 | | 0 | 00/602F | + 142 | 1 minipixviewer.s 142 | Empty | 11 | | 0 | 00/602F | _NextSrcByte + 143 | 1 minipixviewer.s 143 | Code | 11 | | 2 | 00/602F : A9 01 | lda #1 ; Unpack 8 bits since source = monochrome 8 bits/pix + 144 | 1 minipixviewer.s 144 | Code | 11 | | 2 | 00/6031 : 85 FA | sta {$FA} + 145 | 1 minipixviewer.s 145 | Empty | 11 | | 0 | 00/6033 | + 146 | 1 minipixviewer.s 146 | Code | 11 | | 2 | 00/6033 : B1 F7 | lda ({$F7}),y ; Loop Invariant: Y = zSrcCol + 147 | 1 minipixviewer.s 147 | Code | 11 | | 2 | 00/6035 : 85 F9 | sta {$F9} + 148 | 1 minipixviewer.s 148 | Empty | 11 | | 0 | 00/6037 | + 149 | 1 minipixviewer.s 149 | Empty | 11 | | 0 | 00/6037 | _UnpackSrcBits ; same source byte + 150 | 1 minipixviewer.s 150 | Code | 11 | | 2 | 00/6037 : 06 F9 | asl {$F9} + 151 | 1 minipixviewer.s 151 | Code | 11 | | 2 | 00/6039 : A5 FD | lda {$FD} + 152 | 1 minipixviewer.s 152 | Code | 11 | | 2 | 00/603B : B0 05 | bcs _PutOne + 153 | 1 minipixviewer.s 153 | Empty | 11 | | 0 | 00/603D | _PutZero ; 0 = white + 154 | 1 minipixviewer.s 154 | Code | 11 | | 3 | 00/603D : 1D 9F 60 | ora Column2ColorHGR,X + 155 | 1 minipixviewer.s 155 | Code | 11 | | 2 | 00/6040 : 85 FD | sta {$FD} + 156 | 1 minipixviewer.s 156 | Empty | 11 | | 0 | 00/6042 | _PutOne ; 1 = black + 157 | 1 minipixviewer.s 157 | Comment | 11 | | 0 | 00/6042 | ; nothing to do since zDstBits initialized to zero + 158 | 1 minipixviewer.s 158 | Code | 11 | | 1 | 00/6042 : E8 | inx + 159 | 1 minipixviewer.s 159 | Code | 11 | | 2 | 00/6043 : E0 04 | cpx #4 + 160 | 1 minipixviewer.s 160 | Code | 11 | | 2 | 00/6045 : F0 04 | beq _NextDstByte + 161 | 1 minipixviewer.s 161 | Code | 11 | | 2 | 00/6047 : E0 07 | cpx #7 + 162 | 1 minipixviewer.s 162 | Code | 11 | | 2 | 00/6049 : D0 13 | bne _SameDstByte + 163 | 1 minipixviewer.s 163 | Empty | 11 | | 0 | 00/604B | + 164 | 1 minipixviewer.s 164 | Empty | 11 | | 0 | 00/604B | _NextDstByte + 165 | 1 minipixviewer.s 165 | Code | 11 | | 2 | 00/604B : 84 FB | sty {$FB} ; 65C02: PHY + 166 | 1 minipixviewer.s 166 | Code | 11 | | 3 | 00/604D : 20 8A 60 | jsr PutHgrByte + 167 | 1 minipixviewer.s 167 | Code | 11 | | 2 | 00/6050 : 85 FD | sta {$FD} + 168 | 1 minipixviewer.s 168 | Code | 11 | | 2 | 00/6052 : A4 FB | ldy {$FB} ; 65C02: PLY + 169 | 1 minipixviewer.s 169 | Empty | 11 | | 0 | 00/6054 | + 170 | 1 minipixviewer.s 170 | Code | 11 | | 2 | 00/6054 : E6 26 | inc {$26}+0 + 171 | 1 minipixviewer.s 171 | Code | 11 | | 2 | 00/6056 : E0 07 | cpx #7 + 172 | 1 minipixviewer.s 172 | Code | 11 | | 2 | 00/6058 : D0 04 | bne _SameDstByte + 173 | 1 minipixviewer.s 173 | Code | 11 | | 2 | 00/605A : A2 00 | ldx #0 + 174 | 1 minipixviewer.s 174 | Code | 11 | | 2 | 00/605C : 86 FE | stx {$FE} + 175 | 1 minipixviewer.s 175 | Empty | 11 | | 0 | 00/605E | + 176 | 1 minipixviewer.s 176 | Empty | 11 | | 0 | 00/605E | _SameDstByte + 177 | 1 minipixviewer.s 177 | Code | 11 | | 2 | 00/605E : 06 FA | asl {$FA} + 178 | 1 minipixviewer.s 178 | Code | 11 | | 2 | 00/6060 : 90 D5 | bcc _UnpackSrcBits ; After 8 loops + 179 | 1 minipixviewer.s 179 | Empty | 11 | | 0 | 00/6062 | + 180 | 1 minipixviewer.s 180 | Code | 11 | | 1 | 00/6062 : C8 | iny + 181 | 1 minipixviewer.s 181 | Code | 11 | | 2 | 00/6063 : 84 FB | sty {$FB} + 182 | 1 minipixviewer.s 182 | Code | 11 | | 2 | 00/6065 : C0 0B | cpy #{88/8} + 183 | 1 minipixviewer.s 183 | Code | 11 | | 2 | 00/6067 : 90 C6 | bcc _NextSrcByte + 184 | 1 minipixviewer.s 184 | Empty | 11 | | 0 | 00/6069 | + 185 | 1 minipixviewer.s 185 | Code | 11 | | 2 | 00/6069 : A5 FD | lda {$FD} ; + 186 | 1 minipixviewer.s 186 | Comment | 11 | | 0 | 00/606B | ; ldy #0 ; Need Y=0 for :NextSrcRow --> col = Y,X + 187 | 1 minipixviewer.s 187 | Comment | 11 | | 0 | 00/606B | ; sta (zDstPtr),Y ; Need last pixel on this scanline + 188 | 1 minipixviewer.s 188 | Code | 11 | | 3 | 00/606B : 20 8A 60 | jsr PutHgrByte + 189 | 1 minipixviewer.s 189 | Empty | 11 | | 0 | 00/606E | + 190 | 1 minipixviewer.s 190 | Comment | 11 | | 0 | 00/606E | ; Repeat each src line 3 times + 191 | 1 minipixviewer.s 191 | Code | 11 | | 2 | 00/606E : E6 FC | inc {$FC} + 192 | 1 minipixviewer.s 192 | Code | 11 | | 2 | 00/6070 : E6 FF | inc {$FF} + 193 | 1 minipixviewer.s 193 | Code | 11 | | 2 | 00/6072 : A6 FF | ldx {$FF} + 194 | 1 minipixviewer.s 194 | Code | 11 | | 2 | 00/6074 : E0 03 | cpx #3 + 195 | 1 minipixviewer.s 195 | Code | 11 | | 2 | 00/6076 : D0 A0 | bne _NextSrcRow ; Y = 0 --> col = Y,X + 196 | 1 minipixviewer.s 196 | Empty | 11 | | 0 | 00/6078 | + 197 | 1 minipixviewer.s 197 | Code | 11 | | 1 | 00/6078 : 18 | clc ; Move to next linear source row + 198 | 1 minipixviewer.s 198 | Code | 11 | | 2 | 00/6079 : A9 0B | lda #{88/8} + 199 | 1 minipixviewer.s 199 | Code | 11 | | 2 | 00/607B : 65 F7 | adc {$F7}+0 + 200 | 1 minipixviewer.s 200 | Code | 11 | | 2 | 00/607D : 85 F7 | sta {$F7}+0 + 201 | 1 minipixviewer.s 201 | Code | 11 | | 2 | 00/607F : 90 02 | bcc _SameSrcPage + 202 | 1 minipixviewer.s 202 | Empty | 11 | | 0 | 00/6081 | _NextSrcPage + 203 | 1 minipixviewer.s 203 | Code | 11 | | 2 | 00/6081 : E6 F8 | inc {$F7}+1 + 204 | 1 minipixviewer.s 204 | Empty | 11 | | 0 | 00/6083 | _SameSrcPage + 205 | 1 minipixviewer.s 205 | Empty | 11 | | 0 | 00/6083 | + 206 | 1 minipixviewer.s 206 | Code | 11 | | 2 | 00/6083 : A5 FC | lda {$FC} + 207 | 1 minipixviewer.s 207 | Code | 11 | | 2 | 00/6085 : C9 AE | cmp #{52}*{3}+{{192-{{52}*{3}}}/2} + 208 | 1 minipixviewer.s 208 | Code | 11 | | 2 | 00/6087 : D0 8D | bne _NextTripleY + 209 | 1 minipixviewer.s 209 | Empty | 11 | | 0 | 00/6089 | _Done + 210 | 1 minipixviewer.s 210 | Code | 11 | | 1 | 00/6089 : 60 | rts + 211 | 1 minipixviewer.s 211 | Empty | 11 | | 0 | 00/608A | + 212 | 1 minipixviewer.s 212 | Empty | 11 | | 0 | 00/608A | PutHgrByte + 213 | 1 minipixviewer.s 213 | Code | 11 | | 1 | 00/608A : 48 | pha ; Save High Bit + 214 | 1 minipixviewer.s 214 | Code | 11 | | 2 | 00/608B : 29 7F | and #$7f ; HGR = 7 bits/pixel as we don't want half-pixels + 215 | 1 minipixviewer.s 215 | Code | 11 | | 2 | 00/608D : A0 00 | ldy #0 ; Need Y=0 for :NextSrcRow --> col = Y,X + 216 | 1 minipixviewer.s 216 | Code | 11 | | 2 | 00/608F : 91 26 | sta ({$26}),Y ; Need last pixel on this scanline + 217 | 1 minipixviewer.s 217 | Code | 11 | | 1 | 00/6091 : 68 | pla ; Restore High Bit + 218 | 1 minipixviewer.s 218 | Code | 11 | | 1 | 00/6092 : 2A | rol ; C = Bit 7 propogate + 219 | 1 minipixviewer.s 219 | Code | 11 | | 2 | 00/6093 : A9 00 | lda #0 ; into next dst byte bit 0 + 220 | 1 minipixviewer.s 220 | Code | 11 | | 1 | 00/6095 : 2A | rol + 221 | 1 minipixviewer.s 221 | Code | 11 | | 2 | 00/6096 : F0 06 | beq _NoCarry ; if we have high bit crossing even into odd column + 222 | 1 minipixviewer.s 222 | Code | 11 | | 2 | 00/6098 : E0 04 | cpx #4 + 223 | 1 minipixviewer.s 223 | Code | 11 | | 2 | 00/609A : D0 02 | bne _NoCarry + 224 | 1 minipixviewer.s 224 | Code | 11 | | 2 | 00/609C : A9 03 | lda #3 ; then we also need to the bottom 2 bits + 225 | 1 minipixviewer.s 225 | Empty | 11 | | 0 | 00/609E | _NoCarry + 226 | 1 minipixviewer.s 226 | Code | 11 | | 1 | 00/609E : 60 | rts + 227 | 1 minipixviewer.s 227 | Empty | 11 | | 0 | 00/609F | + 228 | 1 minipixviewer.s 228 | Comment | 11 | | 0 | 00/609F | ; Single Pixel to Double Pixel + 229 | 1 minipixviewer.s 229 | Empty | 11 | | 0 | 00/609F | Column2ColorHGR + 230 | 1 minipixviewer.s 230 | Empty | 11 | | 0 | 00/609F | + 231 | 1 minipixviewer.s 231 | Data | 11 | | 1 | 00/609F : 06 | DB %00000110 ; [0] = $06 Even Column + 232 | 1 minipixviewer.s 232 | Data | 11 | | 1 | 00/60A0 : 18 | DB %00011000 ; [1] = $18 + 233 | 1 minipixviewer.s 233 | Data | 11 | | 1 | 00/60A1 : 60 | DB %01100000 ; [2] = $60 + 234 | 1 minipixviewer.s 234 | Data | 11 | | 1 | 00/60A2 : 80 | DB %10000000 ; [3] = $80 + 235 | 1 minipixviewer.s 235 | Data | 11 | | 1 | 00/60A3 : 0C | DB %00001100 ; [4] = $0C Odd Column + 236 | 1 minipixviewer.s 236 | Data | 11 | | 1 | 00/60A4 : 30 | DB %00110000 ; [5] = $30 + 237 | 1 minipixviewer.s 237 | Data | 11 | | 1 | 00/60A5 : C0 | DB %11000000 ; [6] = $C0 + 238 | 1 minipixviewer.s 238 | Empty | 11 | | 0 | 00/60A6 | +------+---------------------------+-------------+----+---------+------+-----------------------+------------------------------------------------------------------- diff --git a/pics/scorpio.png b/pics/scorpio.png new file mode 100644 index 0000000000000000000000000000000000000000..74d1b4722c4393d798cba8995c98bd91a5100f30 GIT binary patch literal 50394 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 TZafA5^ZCT@ujL4eUZTz}?`dWo zdcreqz`5Gw^qg}Gl$qiR(;n8D$(X8}{_>t1w+8=d{Wd%<2r6Gy%kI%EcboI|14kbh zZ_$iifhHD>TRyLIT7l6tnnjTKykRvY|Ck6Py=$-nC*E?MoZDvJ)Q4#3GT*!K%G$2> z^QqfIKMNTT8<3CgxPiawdS%*!EYI)^I770A<GNwwmsV(Cvhtza!o7e+S z%CG4TGpbD0a%UcWP1^xB4U%m2r|J60nTi{Q8F*dUGcmnX% zp53FfXTP|pIXG7fCy?>6R?hQP7u*`Wz@Z1z;4Rht9L0pfqaS!ZaC!5SWsG_?@j>kF0U{2fZwmTh0QGLPwXu(Ga^- zuzW%R@sIGIEzQEesX4&E#wxmLm$PrZ*AEBA#kYy2RV&vC|22t!i3Ch*dJNko+jj6T z#88;95;VQ8xmq!`Pkm)~%LspPBc6YJ^fbc%sp!EL@LwfW5xmij<3EyL;NMhx52)p* z&+U6m(oewuqQJkeL?*D9F&0Ssg#}nOs?dBiBS@dWoDcmy@PGE-xvRhEzi&YFlkq<) z|8)Gv=Sm)682_+5K)-Byv#}!S=u~xQUN^t~``(M!?<(}X%p?540tkadH*sEi6#%T3 z7qz;&dW^8bent{pU7_-u31Q{|9{6E7VuL1Hur3G5O4d zf2OV!xX^xBeK@8W{$H%&9{9hezGS}>D(B<*$H!6sHxvItez%k@8Lr@s4w@o8AcWC1 zZWX2cf!a8o(LmSp&V0VN#_0T^feq4pY4^kpbkHrVDe?b1jsM)-+S!l(^yEomHyQt< z@elTU1t?T(_+Qupi^1{;Um2Y%`G0TO8uI@s{7X8>WO}A!>g#IwX6NEFA^UEbbDKFduY5`#;0~OA<*(6Rsfg#!gZefMyj}{1tnMhA!vA zzjn+M&wNKvOzJ=b2fP_4?J)jxPrQ&jf1%w^Eo656drfpZi#q zB#Zl4lrj9L=sFvjD+j-yzbWV^;s4O0!2f)-aofhfB6MHm0Em7v>G;PT{C(rkSC)kR zMf_VOEkyKPlX78I3KRLyd?eUZ{HNrK<)^G?#Q&%0I)D3I_^*x$J3bx%wgx2z{sZg* za>^!IAlMzNE;Bn|0eY62ca#5Y{BPWU^VS3JtbG9V)A8>C0%ldWOWEoEKgB=RgL{q2 zt_vSo+jspb@UM|qYgl=+AQta>q&t)4+8X}ztf4p}ZuAvD!|bIAi@AOK`X^t0UfD$~ zUB8goyI=ZW$MZx?Ch)H%@T2&P!6Ra|ZXmPI>G}6o@c$35wRU0ooa9A|NH?rm^+XIT zR?lbQU;5vsUmWtk(2U5I!~XD^U0AkUoss{o+3>$7KfZCKzi+S^;0P|mT_k&CJa-!Z zw_4v0=elcB{z>>(Dh5_#`;i%9UeQt!I>G|M6TupYAPJjxNXUh_3O4<)?FY=#Q1GbNUvOoR`&Hz3Z*-#26y)fTvn_a5)Son|pFKQ66 z0HF8q$28rtp~O@1zbXGxuxPsR>(J^^|G!DctWwtf+1h+x?)-l zQv=;fkr$N)b_|(5WHPG6A#MNh%9h&tW0$_r%N=kJJDW$ zyhZ*`;18o{k3EtC_vL|qM; z5^CG<|6KTgkHK^zjUI2GZhyJ=iS_&+|fUV)5QJf~)IR06T|3Vh^_hY@*t-lz9kB#q4d`BhgoA}@D*WYL3zjNuI zo!s5a>teAJ@jn`WOvk^Ji&kwHhU;&n`xJq1*59R_ApB?b*9Lm))?il){A2%zaisoU z;CsK}GHtJ=)!~1482<+c`mghYcTM7t|B3h~{}W`Z#!@3t;RvSI-$^cruj&;&Ie*NV z!hdxB@GFG>-~A-_v5PmO-3TliqN#ln71Ov?*(eSZPp-+cQ12H%Q?7rda7ytbYC`&RJZTYvwZ z2fOVj1+PgROXZ)l{J%(WtfpBqtaz&N`a9EHJ;-W$y$JkUgLl~v&)wGgNypIiC<2DwgSo0fooOYEoY z#_%uBKf*uj-oEy&U4Ih%DgTb&o9_R2_WN5agO5+G*O1KJ8~?~xX5ydZBJ&q4mPPze YwH`Yljqs>*<8RpXBWd06ezE}n1s0tTF8}}l literal 0 HcmV?d00001 diff --git a/scorpio.minipix b/scorpio.minipix new file mode 100644 index 0000000000000000000000000000000000000000..6a7fef000fb62fdb1b1b6459131d9d30a985753c GIT binary patch literal 576 zcmXYtKWG#|6vn@qN!FlqmkW5|k_!>>PZ0>5oE%q(*$~oMM7XJJHV83AwiHrCo#YTi zQrN19$2Eq*;=nNV1d)Iw{lYY{Ns%g8rI4&|HuvB$zxnvyn~wpw>0wwmt12Gi-21-K z1v90VpLVWf(=+{kA&-(%EyqFTJEUAK838F(YG5pk-=GG97t95`Uib>Es+Cy;e^B?D zn?U=7hE?_X6R>muakj?~jvYIk0bhu*bS+^!5@MU1`?3)*`ubLNYOe#z^WVla4w;r) zQy*R`wb<2=GZT-djrkU7L=T&HOG*DE!YnZ9+JIEMIvk5i}4ukR)(qW z=E=em*3*5wiN?SDVfm3yfRQ$1wBH^9G7*F#{RGrpSpbo50S|OLqW`ifki$tbZ1@oF zvPOo?5(#!rhQT}`$D)N;uLo7v(*e&W39)Vc2HP(M?55VQron(ypW5shJpq)gPg;}T j1JV?2dlxYBYfe%ms**h(WCc;c&%siZZxvaFx8d<0(5r^n literal 0 HcmV?d00001 diff --git a/wizard.minipix b/wizard.minipix new file mode 100644 index 0000000000000000000000000000000000000000..dca333dde7920155d3ae695d3e97d67d4d887625 GIT binary patch literal 572 zcmXZYv1=4T6bA5bW{%qxHn#^hDVCc{XL(@Z6-V|gG~i!gnaY$378Z&-BB+Jt6znY4 zG7$qQ1ugcpxF&>@>9S!98{sYl%qrtN-)!y`Ge5rF**E(Dh#FjdzX;2V9Bg_zKs~?q zk*S!8+-X<=rQE&k)2Rs{ckeKRsu)6kdhbc61@m)5J}39?GNY_u-r8rz>mz8{w9{t} z;dg9us^b{#_19yx%T*T`VICA%*}sv-1;%Rzqjxr=0)sV(Ung|&w?w2M4{i40_ZKJ$ zdGC*#E+PmCwRQDC^c#wAK}@-YCQ@}Lym)i$sk>2_zTAec=xH|zd+JK5^XegnVe8qe zp-!g?brcrI9i3K0w$-I0rBm`$ts{}=o-%3;+x!Klc-u(?hc#LB^B2g7TxxN%e2jF$ z?JTzA73iQL-`2#FIrS3oL`*<)H;Q1GDT&%P