From 5564f5dcb1d757bb827af15be085a4218cb20a73 Mon Sep 17 00:00:00 2001 From: Joerg Deckert Date: Mon, 23 Jun 2014 15:26:20 +0200 Subject: [PATCH] remove boing demo (now in toolbox3) --- README.md | 14 - make.bat | 8 - make.sh | 8 - source/boing/boing-bel-background.spin | 224 -------- source/boing/boing-bel-corecon.spin | 42 -- source/boing/boing-bel-driver.spin | 553 ------------------ source/boing/boing-bel-feeder.spin | 762 ------------------------- source/boing/boing-bel-foreground.spin | 505 ---------------- source/boing/boing-bel.spin | 286 ---------- source/boing/boing-reg.spin | 272 --------- source/boing/boing.sid | Bin 289000 -> 0 bytes source/boing/boing.txt | 20 - 12 files changed, 2694 deletions(-) delete mode 100644 source/boing/boing-bel-background.spin delete mode 100644 source/boing/boing-bel-corecon.spin delete mode 100644 source/boing/boing-bel-driver.spin delete mode 100644 source/boing/boing-bel-feeder.spin delete mode 100644 source/boing/boing-bel-foreground.spin delete mode 100644 source/boing/boing-bel.spin delete mode 100644 source/boing/boing-reg.spin delete mode 100644 source/boing/boing.sid delete mode 100644 source/boing/boing.txt diff --git a/README.md b/README.md index 329a441..427d09d 100644 --- a/README.md +++ b/README.md @@ -106,20 +106,6 @@ Vorgang, wird der Screen beim nächsten Bildwechsel gelöscht. Ein wenig erinner dieses Prinzip an die Vectrex, wo ja der gleiche Effekt auftritt. -DEMO/BOING ----------- - -Eine Icone der Retrokultur auf dem Hive als Musikplayer! -Basis ist der geniale Grafikcode von kuroneko. - -Graphics-Code: kuroneko -SIDcog: Ahle2 -Hive-Code: drohne235 - -Installation: Dateien in ein Verzeichnis kopieren, eigene Musikdateien im -DMP-Format dazu kopieren und starten! - - BOULDER DASH ------------ Das legendre Game auf dem Hive mit einem tollen Remix des originalen Titelsongs diff --git a/make.bat b/make.bat index 54a3ad2..7bb56be 100644 --- a/make.bat +++ b/make.bat @@ -42,14 +42,6 @@ REM Bin-Dateien erzeugen %BSTC% -L %libpath% %D% -b -O a .\source\3dmulti\3dmulti.spin move 3dmulti.binary "%sdtbox%/demo/3dmulti.bel" -%BSTC% -L %libpath% %D% -b -O a .\source\boing\boing-reg.spin -move boing-reg.binary "%sdtbox%\demo\boing.bin" -%BSTC% -L %libpath% %D% -b -O a .\source\boing\boing-bel.spin -move boing-bel.binary "%sdtbox%\demo\boing.bel" -%BSTC% -L %libpath% %D% -D __ADM_FAT -D __ADM_SID -b -O a ..\TriOS\flash\administra\admflash.spin -move admflash.binary "%sdtbox%\demo\boing.adm" -copy .\source\boing\boing.sid "%sdtbox%\demo\" - %BSTC% -L %libpath% %D% -D __TV_NTSC -b -O a .\source\boulder\bellatrix\bd_tv.spin move bd_tv.binary "%sdtbox%\boulder\bd_ntsc.bel" %BSTC% -L %libpath% %D% -D __TV_PAL -b -O a .\source\boulder\bellatrix\bd_tv.spin diff --git a/make.sh b/make.sh index abb1686..e015c68 100755 --- a/make.sh +++ b/make.sh @@ -40,14 +40,6 @@ cp -r sounds/* ${sdsnd} ${BSTC} -L ${libpath} ${D} -b -O a source/3dmulti/3dmulti.spin mv 3dmulti.binary "${sdtbox}/demo/3dmulti.bel" -${BSTC} -L ${libpath} ${D} -b -O a source/boing/boing-reg.spin -mv boing-reg.binary "${sdtbox}/demo/boing.bin" -${BSTC} -L ${libpath} ${D} -b -O a source/boing/boing-bel.spin -mv boing-bel.binary "${sdtbox}/demo/boing.bel" -${BSTC} -L ${libpath} ${D} -D __ADM_FAT -D __ADM_SID -b -O a ../TriOS/flash/administra/admflash.spin -mv admflash.binary "${sdtbox}/demo/boing.adm" -cp source/boing//boing.sid "${sdtbox}/demo/" - ${BSTC} -L ${libpath} ${D} -D __TV_NTSC -b -O a source/boulder/bellatrix/bd_tv.spin mv bd_tv.binary "${sdtbox}/boulder/bd_ntsc.bel" ${BSTC} -L ${libpath} ${D} -D __TV_PAL -b -O a source/boulder/bellatrix/bd_tv.spin diff --git a/source/boing/boing-bel-background.spin b/source/boing/boing-bel-background.spin deleted file mode 100644 index 69cee18..0000000 --- a/source/boing/boing-bel-background.spin +++ /dev/null @@ -1,224 +0,0 @@ -'' -'' VGA scanline driver 400x300 - background renderer -'' -'' Based on "Ball" demo for Gameduino -'' Copyright (c) 2011 by James Bowman -'' -'' Author: Marko Lukat -'' Last modified: 2012/12/24 -'' Version: 0.9 -'' -OBJ - system: "boing-bel-corecon" - -PUB null -'' This is not a top level object. - -PUB init(ID, mailbox) - - return system.launch(ID, @entry, mailbox) - -DAT org 0 ' background renderer - -entry jmpret $, #setup ' once - - rdlong indx, blnk ' | - cmpsub indx, scry wz ' | - if_ne jmp #$-2 ' waiting for last line to be fetched - -' Skip 26 sync lines and advance by a further 161 hub windows. This pushes the -' first background renderer wrlong beyond the first video renderer line rdlong -' if it were to render scanline -1. -' After the waitcnt we have another 9 insn (36 + 18 + 10 = 64, 4 hub windows). - - mov cnt, cnt - add cnt, $+1 - long 13{18} + 10 + 132*16*26 + 16*(161 - 4) - -loop waitcnt cnt, one ' initial sync point - - call #fill ' fill background - - add indx, #1 ' line done, advance - cmpsub indx, scry wz ' optionally wrap line index - if_z add cnt, two - - -one long 132*16*2 ' skip two scan lines -two long 132*16*28 ' skip all sync lines - - jmp #loop - -' support code - -fill - mov addr, indx - shr addr, #1 wc - add read, addr -fill_ret long 0-0 ' pipeline -read mov addr, $+3 - if_c shr addr, #16 - jmpret read, addr ' render background - - word eins[5], zwei[3] - word drei[21], zwei[3], drei[21], zwei[3], drei[21], zwei[3], drei[21], zwei[3] - word drei[21], zwei[3], drei[21], zwei[3], drei[21], zwei[3], drei[21], zwei[3] - word drei[21], zwei[3], drei[21], zwei[3], drei[21], zwei[3], drei[21], zwei[3] - word eins[4] - -eins mov addr, base ' 100(A) - - mov gindx, gindx0 - mov gflag, #0 - - mov qcnt, #100 -:loop wrlong ty_A, addr - add addr, #4 - djnz qcnt, #:loop - - jmp fill_ret - -zwei mov addr, base ' AB(48(CC))DA - - cmp gflag, #0 wz - if_z mov gflag, #1 - if_z rdword gline0, gindx - if_z add gindx, #4 - - wrlong ty_A, addr - add addr, #4 - wrlong ty_B, addr - add addr, #4 - - mov qcnt, #96/2 -:loop wrlong ty_C, addr - add addr, #4 - cmp qcnt, #1 wz ' last run? - wrlong ty_C, addr - add addr, #4 - if_ne djnz qcnt, #:loop - - wrlong ty_D, addr - add addr, #4 - wrlong ty_A, addr - - jmp fill_ret - -drei mov addr, base ' AB(16(DAAAAB))DA - - mov gline, gline0 - mov gflag, #0 - - wrlong ty_A, addr - add addr, #4 - wrlong ty_B, addr - add addr, #4 - - mov qcnt, #16 - -:loop mov ty_x1, ty_D ' leere punkte - mov ty_X2, ty_A - mov ty_X3, ty_B - shr gline,#1 wc - if_nc jmp #:empty - mov ty_X1, ty_C ' gefüllte punkte - mov ty_X2, ty_C - mov ty_X3, ty_C -:empty - wrlong ty_X1, addr - add addr, #4 - cmp qcnt, #1 wz ' last run? - '--------------------- - wrlong ty_X2, addr - add addr, #4 - wrlong ty_X2, addr - add addr, #4 - wrlong ty_X2, addr - add addr, #4 - wrlong ty_X2, addr - add addr, #4 - '--------------------- -:end wrlong ty_X3, addr - add addr, #4 - if_ne djnz qcnt, #:loop - - wrlong ty_D, addr - add addr, #4 - wrlong ty_A, addr - - jmp fill_ret - - - -' initialised data and/or presets - -blnk long -4 -base long NEGX - -ty_A {----} long $01010101 * C0 -ty_B {---#} long $00010101 * C0 + $01000000 * C1 -ty_C {####} long $01010101 * C1 -ty_D {##--} long $01010000 * C0 + $00000101 * C1 -ty_X1 long 0 -ty_X2 long 0 -ty_X3 long 0 - -gindx0 long 400 -gindx long 0 -gline0 long 0 -gline long 0 -gflag long 0 - -' Stuff below is re-purposed for temporary storage. - -setup add base, par ' scanline buffer (%%) - add blnk, base wc ' frame indicator - - rdword indx, blnk wz ' (%%) - if_nz mov scry, indx wc ' (%%) - if_c_or_nz jmp #$-2 ' auto-detect res_y - -' The loop is only left once a non-zero value has been written to scry -' and indx transitions to zero afterwards. - - add gindx0, par - jmp %%0 ' return - - fit - -' uninitialised data and/or temporaries - -scry res 1 ' must be 1st/2nd (%%) -indx res 1 ' | - -addr res 1 -qcnt res 1 - -tail fit - -CON - C0 = %%2220 ' background - C1 = %%1110 ' grid - -DAT -{{ - - TERMS OF USE: MIT License - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - associated documentation files (the "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the - following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial - portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT - LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -}} -DAT diff --git a/source/boing/boing-bel-corecon.spin b/source/boing/boing-bel-corecon.spin deleted file mode 100644 index 125188b..0000000 --- a/source/boing/boing-bel-corecon.spin +++ /dev/null @@ -1,42 +0,0 @@ -'' -'' prerequisites, dependencies & Co -'' -'' Author: Marko Lukat -'' Last modified: 2011/10/22 -'' Version: 0.9 -'' -CON - _clkmode = XTAL1|PLL16X - _xinfreq = 5_000_000 - -CON - ID_0 = $30B3309C - ID_1 = $9ED2732B - ID_2 = $38343032 ' cog binary magic number (2048) - - OVERLAY = %00000000_00000001 ' cog binary is an overlay - MAPPING = %00000000_00000010 ' translation table is present - -PUB null -'' This is not a top level object. - -PUB launch(ID, code, data) -'' PASM quick launch using a specific or the next available ID. -'' -'' parameters -'' ID: cog ID -'' 0..7: coginit, otherwise cognew (may fail) -'' code: address of code fragment (4n) -'' data: cognew/coginit parameter (4n) -'' -'' result -'' == 0: [ABORT] thread creation failed (cognew only) -'' <> 0: thread/cog ID + 1 - - ifnot (ID >> 3) - coginit(ID++, code, data) - elseifnot ID := cognew(code, data) + 1 - abort - return ID - -DAT diff --git a/source/boing/boing-bel-driver.spin b/source/boing/boing-bel-driver.spin deleted file mode 100644 index 622fb5a..0000000 --- a/source/boing/boing-bel-driver.spin +++ /dev/null @@ -1,553 +0,0 @@ -'' -'' VGA scanline driver 400x300 (single cog) - video driver and pixel generator -'' -'' Author: Marko Lukat -'' Last modified: 2013/01/11 -'' Version: 0.10 -'' -'' - timing signalled as SVGA 800x600 -'' - vertical blank start sets frame indicator (FI) to 0 -'' - once the Nth scanline has been fetched the FI is set to N+1 -'' -'' 20121007: added minimal translation table -'' 20121229: now capable of using 64/256 colours (RRGGBBHV / RRGGBBgr + xxxxxxHV) -'' - 64c: $FC/2/2 (vpin/vgrp/sgrp) -'' - 256c: $FF/2/3 -'' 20121230: simplified vertical blanking code -'' -'' Note: With idle state being %00 {%hv} the switch code can be further simplified. -'' As this was the first converted driver I left the generic solution intact -'' so it can easily be adapted for other drivers (with non-zero idle state). -'' -OBJ - system: "boing-bel-corecon" - -PUB null -'' This is not a top level object. - -PUB init(ID, mailbox) - - return system.launch(ID, @driver, mailbox) - -DAT org 0 ' cog binary header - -header_2048 long system#ID_2 ' magic number for a cog binary - word header_size ' header size - word system#MAPPING ' flags - word 0, 0 ' start register, register count - - word @__table - @header_2048 ' translation table byte offset - -header_size fit 16 - -DAT org 0 ' video driver - -driver jmpret $, #setup ' -4 once - - mov dira, mask ' drive outputs - -' horizontal timing 400(800) 20(40) 64(128) 44(88) -' vertical timing 300(600) 1(1) 4(4) 23(23) - -vsync mov lcnt, #0 ' | - wrlong lcnt, blnk ' reset line counter (once) - - mov vscl, full ' 32/528 - -' mov ecnt, #1 - waitvid sync, #%%0011 ' front porch -' djnz ecnt, #$-1 - - xor sync, #$0101 ' active - - mov ecnt, #4 - waitvid sync, #%%0011 ' vertical sync - djnz ecnt, #$-1 - - xor sync, #$0101 ' inactive - - mov ecnt, #23 - waitvid sync, #%%0011 ' back porch - djnz ecnt, #$-1 - -' Vertical sync chain done, do visible area. - - mov scnt, #res_y - -:loop call #prefix ' sync and back porch - jmpret suffix_ret, #emit_0 ' visible line and front porch - - call #prefix ' sync and back porch - jmpret suffix_ret, #emit_1 ' visible line and front porch - - djnz scnt, #:loop ' repeat for all lines - - jmp #vsync ' next frame - - -prefix mov vscl, slow ' 32/108 - waitvid sync, #%%2011 ' latch sync and back porch - - mov cnt, cnt ' cover sync pulse period (%%) - add cnt, #9{14}+(64 * 4) ' because we drive sync lines - waitcnt cnt, #135 ' manually next (%%) - - mov outa, idle ' take over sync lines (##) -prefix_ret ret - - -suffix mov vscl, hs_f ' 1/20 - waitvid sync, #%%02 ' latch front porch - -' waitvid -' | S D e . . . R | mov vcfg | mov outa | -' clock  -' │ │ │ │ -' PLL  -' pixel 1:4 │+4 -' │ │ pixel %%2 │ pixel %%0 | -' outa  - - mov vcfg, vcfg_sync ' drive/change sync lines (##) - mov outa, #0 ' stop interfering - - if_nc wrlong lcnt, blnk ' report current line -suffix_ret ret - -' Even line emitter (fetch & emit). - -emit_0 waitcnt cnt, #0 ' re-sync after back porch (%%) - -' At this point the video h/w is driving the sync lines low (colour %%2). -' outa has taken over long ago so we can switch configuration here. - - mov vcfg, vcfg_norm ' -12 disconnect sync from video h/w (##) - mov addr, base ' -8 working copy - mov vscl, hvis ' -4 1/4 - - rdlong pal+$00, addr ' +0 = - cmp pal+$00, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$01, addr ' +0 = - cmp pal+$01, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$02, addr ' +0 = - cmp pal+$02, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$03, addr ' +0 = - cmp pal+$03, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$04, addr ' +0 = - cmp pal+$04, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$05, addr ' +0 = - cmp pal+$05, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$06, addr ' +0 = - cmp pal+$06, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$07, addr ' +0 = - cmp pal+$07, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$08, addr ' +0 = - cmp pal+$08, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$09, addr ' +0 = - cmp pal+$09, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$0A, addr ' +0 = - cmp pal+$0A, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$0B, addr ' +0 = - cmp pal+$0B, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$0C, addr ' +0 = - cmp pal+$0C, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$0D, addr ' +0 = - cmp pal+$0D, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$0E, addr ' +0 = - cmp pal+$0E, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$0F, addr ' +0 = - cmp pal+$0F, #%%3210 ' +8 WHOP - add addr, #4 ' -4 0..63 - - rdlong pal+$10, addr ' +0 = - cmp pal+$10, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$11, addr ' +0 = - cmp pal+$11, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$12, addr ' +0 = - cmp pal+$12, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$13, addr ' +0 = - cmp pal+$13, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$14, addr ' +0 = - cmp pal+$14, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$15, addr ' +0 = - cmp pal+$15, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$16, addr ' +0 = - cmp pal+$16, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$17, addr ' +0 = - cmp pal+$17, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$18, addr ' +0 = - cmp pal+$18, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$19, addr ' +0 = - cmp pal+$19, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$1A, addr ' +0 = - cmp pal+$1A, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$1B, addr ' +0 = - cmp pal+$1B, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$1C, addr ' +0 = - cmp pal+$1C, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$1D, addr ' +0 = - cmp pal+$1D, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$1E, addr ' +0 = - cmp pal+$1E, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$1F, addr ' +0 = - cmp pal+$1F, #%%3210 ' +8 WHOP - add addr, #4 ' -4 64..127 - - rdlong pal+$20, addr ' +0 = - cmp pal+$20, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$21, addr ' +0 = - cmp pal+$21, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$22, addr ' +0 = - cmp pal+$22, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$23, addr ' +0 = - cmp pal+$23, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$24, addr ' +0 = - cmp pal+$24, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$25, addr ' +0 = - cmp pal+$25, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$26, addr ' +0 = - cmp pal+$26, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$27, addr ' +0 = - cmp pal+$27, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$28, addr ' +0 = - cmp pal+$28, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$29, addr ' +0 = - cmp pal+$29, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$2A, addr ' +0 = - cmp pal+$2A, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$2B, addr ' +0 = - cmp pal+$2B, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$2C, addr ' +0 = - cmp pal+$2C, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$2D, addr ' +0 = - cmp pal+$2D, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$2E, addr ' +0 = - cmp pal+$2E, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$2F, addr ' +0 = - cmp pal+$2F, #%%3210 ' +8 WHOP - add addr, #4 ' -4 128..191 - - rdlong pal+$30, addr ' +0 = - cmp pal+$30, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$31, addr ' +0 = - cmp pal+$31, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$32, addr ' +0 = - cmp pal+$32, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$33, addr ' +0 = - cmp pal+$33, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$34, addr ' +0 = - cmp pal+$34, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$35, addr ' +0 = - cmp pal+$35, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$36, addr ' +0 = - cmp pal+$36, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$37, addr ' +0 = - cmp pal+$37, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$38, addr ' +0 = - cmp pal+$38, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$39, addr ' +0 = - cmp pal+$39, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$3A, addr ' +0 = - cmp pal+$3A, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$3B, addr ' +0 = - cmp pal+$3B, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$3C, addr ' +0 = - cmp pal+$3C, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$3D, addr ' +0 = - cmp pal+$3D, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$3E, addr ' +0 = - cmp pal+$3E, #%%3210 ' +8 WHOP - add addr,#4 ' -4 - rdlong pal+$3F, addr ' +0 = - cmp pal+$3F, #%%3210 ' +8 WHOP - add addr, #4 ' -4 192..255 - - rdlong pal+$40, addr ' +0 = - cmp pal+$40, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$41, addr ' +0 = - cmp pal+$41, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$42, addr ' +0 = - cmp pal+$42, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$43, addr ' +0 = - cmp pal+$43, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$44, addr ' +0 = - cmp pal+$44, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$45, addr ' +0 = - cmp pal+$45, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$46, addr ' +0 = - cmp pal+$46, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$47, addr ' +0 = - cmp pal+$47, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$48, addr ' +0 = - cmp pal+$48, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$49, addr ' +0 = - cmp pal+$49, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$4A, addr ' +0 = - cmp pal+$4A, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$4B, addr ' +0 = - cmp pal+$4B, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$4C, addr ' +0 = - cmp pal+$4C, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$4D, addr ' +0 = - cmp pal+$4D, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$4E, addr ' +0 = - cmp pal+$4E, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$4F, addr ' +0 = - cmp pal+$4F, #%%3210 ' +8 WHOP - add addr, #4 ' -4 256..319 - - rdlong pal+$50, addr ' +0 = - cmp pal+$50, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$51, addr ' +0 = - cmp pal+$51, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$52, addr ' +0 = - cmp pal+$52, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$53, addr ' +0 = - cmp pal+$53, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$54, addr ' +0 = - cmp pal+$54, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$55, addr ' +0 = - cmp pal+$55, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$56, addr ' +0 = - cmp pal+$56, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$57, addr ' +0 = - cmp pal+$57, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$58, addr ' +0 = - cmp pal+$58, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$59, addr ' +0 = - cmp pal+$59, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$5A, addr ' +0 = - cmp pal+$5A, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$5B, addr ' +0 = - cmp pal+$5B, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$5C, addr ' +0 = - cmp pal+$5C, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$5D, addr ' +0 = - cmp pal+$5D, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$5E, addr ' +0 = - cmp pal+$5E, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$5F, addr ' +0 = - cmp pal+$5F, #%%3210 ' +8 WHOP - add addr, #4 ' -4 320..383 - - rdlong pal+$60, addr ' +0 = - cmp pal+$60, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$61, addr ' +0 = - cmp pal+$61, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$62, addr ' +0 = - cmp pal+$62, #%%3210 ' +8 WHOP - add addr, #4 ' -4 - rdlong pal+$63, addr ' +0 = - cmp pal+$63, #%%3210 ' +8 WHOP - add lcnt, #1 ' -4 384..399, line has been fetched - - jmpret $, #suffix wc,nr ' +0 = chain call (carry clear) - -' Odd line emitter (emit only). - -emit_1 waitcnt cnt, #0 ' re-sync after back porch (%%) - -' At this point the video h/w is driving the sync lines low (colour %%2). -' outa has taken over long ago so we can switch configuration here. - - mov vcfg, vcfg_norm ' -12 disconnect sync from video h/w (##) - movd :vid, #pal+$00 ' -8 colour buffer - mov vscl, hvis ' -4 1/4 - - mov ecnt, #100 -1 ' +0 = quad pixel count (last one separate) - test $, #1 wc ' +4 set carry -:vid cmp 0-0, #%%3210 ' +8 WHOP - addx $-1, #511{+C} ' -4 - djnz ecnt, #:vid -1 ' +0 = maintain 16 cycle loop - - cmp pal+$63, #%%3210 ' +8 WHOP - - jmpret zero, #suffix wc,nr ' -4 chain call (carry set) - -' initialised data and/or presets - -idle long (hv_idle & $00FF) << (sgrp * 8) -sync long (hv_idle ^ $0200) & $FFFF - -hvis long 1 << 12 | 4 ' 1/4 -hs_f long 1 << 12 | 20 ' 1/20 -slow long 32 << 12 | 108 ' 32/108 -full long 32 << 12 | 528 ' 32/528 - -vcfg_norm long %0_01_1_00_000 << 23 | vgrp << 9 | vpin -vcfg_sync long %0_01_1_00_000 << 23 | sgrp << 9 | %11 - -mask long vpin << (vgrp * 8) | %11 << (sgrp * 8) - -blnk long -4 -base long +0 - -' Stuff below is re-purposed for temporary storage. - -setup rdlong cnt, #0 ' +0 = clkfreq - - add blnk, par ' +8 frame indicator - neg href, cnt ' -4 hub window reference - add base, par ' +0 = scanline buffer - -' Upset video h/w and relatives. - - movi ctra, #%0_00001_101 ' PLL, VCO/4 - movi frqa, #%0001_00000 ' 5MHz * 16 / 4 = 20MHz - - mov vscl, hvis ' 1/4 - mov vcfg, vcfg_sync ' VGA, 4 colour mode - - shr cnt, #10 ' ~1ms - add cnt, cnt - waitcnt cnt, #0 ' PLL needs to settle - -' The first issued waitvid is a bit of a gamble if we don't know where the WHOP -' is located. We could do some fancy math or simply issue a dummy waitvid. - - waitvid zero, #0 ' dummy (first one is unpredictable) - waitvid zero, #0 ' point of reference - - add href, cnt ' get current sync slot - shr href, #2 ' 4 system clocks per pixel - neg href, href ' | - and href, #%11 ' calculate adjustment - -' WHOP is reasonably far away so we can update vscl without re-sync. - - add vscl, href ' | - waitvid zero, #0 ' stretch frame - sub vscl, href ' | - waitvid zero, #0 ' restore frame - -' Setup complete, do the heavy lifting upstairs ... - - jmp %%0 ' return - -' uninitialised data and/or temporaries - - org setup - -href res 1 ' hub window reference - -ecnt res 1 ' element count -lcnt res 1 ' line counter -scnt res 1 ' scanlines -addr res 1 ' colour buffer reference - -pal res 100 ' colour buffer - -tail fit - -DAT ' translation table - -__table word (@__names - @__table)/2 - - word res_x - word res_y - -__names byte "res_x", 0 - byte "res_y", 0 - -CON - zero = $1F0 ' par (dst only) - vpin = $0FC ' pin group mask - vgrp = 1 ' pin group - sgrp = 1 ' pin group sync - hv_idle = $01010101 * %00 {%hv} ' h/v sync inactive - - res_x = 400 ' | - res_y = 300 ' UI support - -DAT diff --git a/source/boing/boing-bel-feeder.spin b/source/boing/boing-bel-feeder.spin deleted file mode 100644 index a33a474..0000000 --- a/source/boing/boing-bel-feeder.spin +++ /dev/null @@ -1,762 +0,0 @@ -'' -'' VGA scanline driver 400x300 - image feeder -'' -'' Based on "Ball" demo for Gameduino -'' Copyright (c) 2011 by James Bowman -'' -'' Author: Marko Lukat -'' Last modified: 2013/01/03 -'' Version: 0.6 -'' -'' 20121225: adjusted palette (brighter) -'' 20121226: 256 colour setup (RRGGBBgr) -'' 20130103: minor tweak to palette table -'' -OBJ - system: "boing-bel-corecon" - -VAR - long guard_before, buffer[BSIZE/4], guard_after - byte image[BSIZE*BSIZE] - - long GD_srcp, GD_mask, GD_stack[32] - -PUB null -'' This is not a top level object. - -PUB init(ID, mailbox) - - long[mailbox][-3] := @image{0} >< 32 | @buffer{0} - return system.launch(ID, @entry, mailbox) - -PUB uncompress(wait{boolean}) - - ifnot wait - if cognew(GD_uncompress(256, @ball), @GD_stack{0}) +1 - return - - GD_uncompress(256, @ball) - -PRI GD_uncompress(offs, srcp) | b_off, b_len, minlen, offset - - GD_srcp := srcp - GD_mask := $01010101 - - b_off := GD_getn(4) - b_len := GD_getn(4) - minlen := GD_getn(2) - - repeat GD_getn(16) - ifnot GD_get1 - image[GD_translate(offs++)] := !GD_getn(8) - next - offset := offs - GD_getn(b_off) - 1 - repeat GD_getn(b_len) + minlen - image[GD_translate(offs++)] := image[GD_translate(offset++)] - -PRI GD_getn(n) : r - - repeat n - r := r << 1 | GD_get1 - -PRI GD_get1 : r - - if byte[GD_srcp] & GD_mask - r := 1 - - if (GD_mask <-= 1) == $01010101 - GD_srcp++ - -PRI GD_translate(offs) : r - - if offs => constant(256*(5+1)) - offs += 256 - if offs => constant(256*(40+2)) - offs += 256 - - r := offs.byte[1] - return (r / 7)*constant(16*112) + (r // 7) << 4 + offs & 15 + (offs & $F0)*7 - -DAT org 0 ' image feeder - -entry jmpret $, #setup ' once - - rdlong indx, blnk ' | - cmpsub indx, scry wz ' | - if_ne jmp #$-2 ' waiting for last line to be fetched - -' The foreground renderer starts reading the colour buffer after 26 sync lines -' and 161+5 hub windows. We have to be done before that happens. Using the assumed -' hubop (161 hub windows) as reference we simply go back by 112*2+4 hub windows. - - mov cnt, cnt - add cnt, $+1 - long 13{18} + 14 + 132*16*26 + 16*(161 - 2) - 228*16 - -loop waitcnt cnt, one ' initial sync point -' cogid $ nr ' assumed hubop - - call #transfer ' palette translation - - add indx, #1 ' line done, advance - cmpsub indx, scry wz ' optionally wrap line index - if_nz jmp #loop - -' per frame updates (during the first frame mask is off-screen) - - rdlong temp, blnk ' | - cmp temp, scry wz ' | - if_ne jmp #$-2 ' wait for ?/scry transition - - rdword msky, crdy ' | - shl msky, #16 ' | - sar msky, #16 ' update and sign-extend mask coordinate - - maxs msky, scry ' reasonable limit (off-screen) - mov mskc, msky ' | - add mskc, #BSIZE -1 ' bounding box setup - -one long 132*16*2 ' skip two scan lines -two long 132*16*28 ' skip all sync lines - - call #update ' update palette - - add cnt, two - jmp #loop - -' support code - -transfer cmps indx, msky wc ' | - if_nc cmps mskc, indx wc ' | - if_c jmp transfer_ret ' vertical bounds check - - rdlong addr, feed ' crs/dst - mov arg0, addr - rev arg0, #{32-}0 ' tsd/src - - mov temp, indx ' - sub temp, msky ' active row - - mov arg1, temp - shl arg1, #3 ' *8 - sub arg1, temp ' *7 - shl arg1, #4 ' *112 - - add arg0, arg1 ' apply offset - - mov ecnt, #BSIZE - - rdbyte phsb, arg0 - movd $+2, phsb - add arg0, #1 - wrbyte phsb, addr - add addr, #1 - djnz ecnt, #$-5 ' translate index to colour - -transfer_ret ret - -update mov arg0, #32*7 ' slot 7 - - call #cycle ' | - cmpsub arg0, #32*1 wz ' | - if_nz jmp #$-2 ' for all slots except 0 - -update_ret ret - -cycle mov arg1, arg0 ' | - add arg1, #palette ' apply base - - movd :cy2, arg1 ' head - add arg1, #30 ' | - movs :cy1, arg1 ' | - add arg1, #1 ' | - movd :cy1, arg1 ' body - movs :cy0, arg1 ' tail - - mov ecnt, #32-1 - -:cy0 mov temp, 1-1 ' preserve last entry -:cy1 mov 1-1, 0-0 ' long rotate - sub $-1, d1s1 - djnz ecnt, #:cy1 - -:cy2 mov 0-0, temp ' close rotate -cycle_ret ret - -' initialised data and/or presets - -feed long -12 ' | -crdy long -6 ' | - ' quick access relative to par -blnk long -4 ' | -base long NEGX ' | - -d1s1 long |< 9 | 1 ' dst/src +/- 1 - - long 0[$ & 1] -palette long $00[32] ' unused/transparent - long $FF[16], $C1[16] ' 1: $F0 - %111_1 - long $FF[16], $C1[16] ' 2: $E0 %111_0 - long $FC[16], $C0[16] ' 3: $D0 %110_1 - long $FC[16], $C0[16] ' 4: $C0 %110_0 - long $AB[16], $81[16] ' 5: $B0 %101_1 - long $AB[16], $81[16] ' 6: $A0 %101_0 - long $A8[16], $80[16] ' 7: $90 - %100_1 - -' Stuff below is re-purposed for temporary storage. - -setup add crdy, par ' mask coordinate (%%) - add feed, par ' mask buffer location - - add base, par ' scanline buffer - add blnk, base wc ' frame indicator - - rdword indx, blnk wz ' (%%) - if_nz mov scry, indx wc ' (%%) - if_c_or_nz jmp #$-2 ' auto-detect res_y - -' The loop is only left once a non-zero value has been written to scry -' and indx transitions to zero afterwards. - - mov msky, scry ' move off-screen - - movi ctrb, #%0_11111_000 ' LOGIC always (relocation support) - mov frqb, #palette >> 1 ' | - - jmp %%0 ' return - - fit - -' uninitialised data and/or temporaries - - org setup - -scry res 1 ' must be 1st..4th (%%) -indx res 1 ' | - -addr res 1 ' scanline reference -ecnt res 1 ' element count - -mskc res 1 ' upper limit (inclusive) -mskx res 1 ' mask coordinates -msky res 1 ' signed 16bit - -arg0 res 1 -arg1 res 1 - -temp res 1 - -tail fit - -CON - zero = $1F0 ' par (dst only) - - BSIZE = 112 ' mask width/height (4n) - -DAT - -ball byte $c9, $a1, $dc, $f9, $0f, $e0, $41, $3c, $88, $07, $f1, $20, $1e, $c4, $83, $78 - byte $10, $0f, $e2, $41, $3c, $88, $07, $71, $ff, $06, $ed, $85, $f2, $20, $68, $d8 - byte $be, $5d, $5b, $c1, $df, $bf, $d1, $70, $60, $c7, $94, $8d, $e0, $6f, $d9, $bc - byte $59, $d3, $26, $4d, $18, $0b, $be, $d6, $2c, $99, $37, $63, $ca, $a4, $71, $63 - byte $46, $82, $8f, $15, $8b, $e6, $82, $83, $89, $e0, $68, $38, $78, $5b, $b1, $10 - byte $9c, $8d, $1a, $31, $6c, $28, $78, $da, $b4, $1c, $dc, $0d, $19, $0c, $1e, $36 - byte $82, $7b, $b8, $30, $68, $c0, $bf, $f5, $e0, $9a, $14, $82, $93, $fd, $6a, $1f - byte $c4, $83, $b8, $1d, $9b, $d6, $ad, $5a, $0e, $b6, $06, $82, $a1, $35, $2b, $96 - byte $2c, $5a, $08, $5e, $86, $ec, $d9, $0e, $8b, $c1, $ca, $9c, $d9, $e0, $61, $d0 - byte $6e, $b0, $ab, $11, $66, $4c, $07, $eb, $28, $61, $39, $4a, $98, $0f, $07, $c1 - byte $c1, $94, $1d, $5b, $36, $ac, $25, $8a, $38, $18, $ac, $5b, $40, $1c, $b2, $6c - byte $c9, $42, $38, $09, $0e, $c6, $c3, $41, $e2, $0a, $ee, $c6, $8c, $96, $6a, $7b - byte $76, $e3, $62, $b8, $0c, $ee, $76, $6c, $db, $b2, $69, $c3, $7a, $70, $30, $d2 - byte $22, $0c, $84, $03, $3b, $c1, $25, $6e, $5a, $69, $11, $c1, $3d, $38, $58, $b5 - byte $62, $d9, $80, $fd, $e0, $19, $8d, $83, $b3, $a5, $e0, $6e, $2d, $5a, $5a, $d6 - byte $a4, $29, $dc, $59, $0f, $4e, $9a, $4b, $87, $ad, $8e, $59, $1c, $22, $45, $8a - - byte $ca, $90, $d6, $cb, $b2, $e9, $ad, $b0, $0e, $97, $43, $15, $d8, $1c, $66, $8b - byte $dc, $3a, $cc, $06, $f6, $83, $7d, $e5, $8d, $b2, $c1, $32, $1c, $a6, $c3, $5a - byte $1c, $55, $ec, $05, $47, $dd, $17, $a3, $16, $46, $9d, $e0, $a0, $a7, $0c, $04 - byte $cb, $70, $a7, $37, $67, $ea, $cc, $04, $d1, $3c, $5c, $e8, $b2, $a9, $d3, $48 - byte $70, $29, $01, $7a, $83, $a3, $2d, $9d, $36, $82, $b3, $7e, $fb, $fa, $ec, $da - byte $d1, $6d, $3b, $3c, $e8, $b8, $17, $03, $50, $41, $70, $d4, $13, $ad, $74, $e8 - byte $d0, $de, $20, $34, $5a, $50, $6f, $4f, $6f, $78, $d4, $15, $9e, $b4, $59, $0c - byte $8e, $e6, $d4, $99, $55, $a3, $3a, $5a, $85, $87, $e0, $a1, $c1, $bc, $7a, $75 - byte $6a, $cd, $04, $0f, $53, $2a, $55, $da, $d0, $6e, $4d, $9b, $86, $68, $61, $4e - byte $6d, $78, $30, $ad, $4a, $95, $4a, $15, $ca, $95, $2b, $d3, $fa, $db, $83, $e8 - byte $99, $7c, $45, $a1, $dd, $5e, $ff, $6e, $14, $46, $43, $ec, $9e, $56, $6e, $4c - byte $a9, $62, $43, $0a, $ed, $87, $a4, $52, $bc, $34, $15, $19, $54, $50, $28, $74 - byte $87, $88, $cb, $50, $31, $ac, $69, $d5, $b2, $26, $34, $9a, $af, $19, $b6, $75 - byte $6a, $6f, $10, $b9, $e0, $34, $6a, $b2, $a8, $a1, $30, $a8, $09, $1e, $3a, $0a - byte $86, $75, $6d, $e1, $b9, $74, $54, $42, $93, $2a, $4a, $a6, $55, $2d, $a7, $23 - byte $3c, $55, $0a, $d5, $25, $43, $7b, $b8, $d0, $6a, $45, $b3, $26, $8d, $e1, $a1 - - byte $56, $d4, $82, $e0, $11, $2d, $c2, $4b, $7c, $a8, $0d, $6a, $6a, $a6, $b6, $e0 - byte $90, $0e, $c2, $63, $2b, $0c, $0f, $c1, $2b, $19, $bc, $ca, $e8, $10, $fc, $c2 - byte $73, $b2, $0c, $3e, $22, $55, $64, $cd, $5f, $10, $9e, $d5, $aa, $11, $1d, $3d - byte $44, $68, $89, $57, $c1, $5b, $8c, $6a, $d5, $f1, $b3, $ff, $07, $f1, $20, $1e - byte $c4, $83, $78, $10, $0f, $e2, $41, $3c, $88, $07, $f1, $20, $a2, $4d, $73, $08 - byte $0f, $c2, $d6, $b4, $68, $52, $1f, $e2, $83, $a0, $72, $a5, $9a, $35, $aa, $53 - byte $15, $e2, $fd, $07, $0f, $25, $8a, $34, $88, $0d, $e1, $c1, $43, $99, $12, $c5 - byte $0a, $f5, $ab, $51, $a9, $24, $a2, $de, $04, $25, $82, $15, $2a, $90, $27, $5b - byte $44, $08, $15, $1e, $3e, $05, $29, $d0, $a7, $57, $96, $0e, $21, $11, $3a, $7c - byte $08, $55, $ac, $48, $a0, $7e, $b9, $ba, $65, $6a, $13, $2c, $27, $7d, $29, $0b - byte $de, $f2, $f4, $c8, $92, $a1, $55, $52, $08, $54, $2e, $4c, $a9, $60, $41, $0a - byte $05, $c8, $8b, $80, $d2, $a5, $48, $94, $5d, $ff, $83, $78, $10, $0f, $c2, $36 - byte $82, $7b, $10, $b6, $69, $25, $f8, $07, $21, $5b, $56, $2c, $06, $ff, $20, $64 - byte $d5, $92, $f9, $e0, $1f, $04, $ad, $59, $b2, $60, $36, $f8, $07, $01, $e3, $8a - byte $0d, $d8, $b3, $13, $fc, $fd, $9b, $54, $62, $d0, $be, $5d, $dd, $c1, $df, $bf - byte $51, $43, $fa, $f5, $da, $d6, $15, $fc, $a3, $85, $82, $68, $a1, $cb, $66, $f0 - - byte $53, $65, $c4, $60, $78, $d0, $ad, $b3, $f8, $1b, $53, $d4, $0b, $ec, $84, $07 - byte $ed, $e1, $57, $85, $11, $85, $f6, $e3, $85, $4e, $1d, $da, $82, $6f, $78, $d4 - byte $ab, $47, $97, $0d, $ed, $c1, $57, $45, $d6, $d0, $67, $27, $5e, $e8, $b0, $a6 - byte $35, $fc, $18, $55, $94, $0c, $c2, $83, $8e, $f0, $a0, $c5, $86, $65, $0b, $e6 - byte $cc, $98, $32, $61, $dc, $98, $11, $c3, $86, $0c, $1a, $b0, $6f, $2f, $38, $9b - byte $0c, $0e, $46, $83, $8b, $5d, $8b, $e1, $32, $38, $19, $09, $d7, $76, $ed, $98 - byte $37, $6b, $da, $a4, $09, $63, $46, $a3, $65, $34, $b4, $17, $3c, $82, $43, $3c - byte $0c, $4e, $f1, $28, $38, $d8, $4e, $fa, $e1, $d1, $ae, $9e, $e6, $61, $cb, $a6 - byte $75, $6b, $e1, $21, $1e, $5d, $0c, $3b, $7a, $74, $d7, $88, $82, $61, $55, $8b - byte $65, $4d, $1a, $15, $e8, $d7, $17, $1e, $6d, $b5, $80, $82, $61, $45, $b3, $25 - byte $8b, $1a, $cc, $9b, $53, $ab, $26, $5c, $b4, $40, $6d, $e1, $41, $b3, $46, $0d - byte $ea, $d5, $a9, $55, $6b, $46, $b5, $2a, $95, $2a, $b4, $6b, $0d, $8f, $1a, $2d - byte $a8, $0f, $8f, $aa, $4d, $a9, $0c, $1e, $0d, $22, $5a, $84, $67, $35, $aa, $c3 - byte $93, $f2, $68, $99, $0c, $a2, $53, $f0, $88, $16, $e1, $41, $b9, $16, $cd, $c1 - byte $d1, $7c, $bc, $08, $af, $c1, $23, $6b, $86, $37, $15, $2a, $84, $2b, $0b, $4f - byte $e9, $30, $5a, $46, $07, $11, $ca, $95, $29, $ab, $89, $15, $c1, $86, $8d, $4a - - byte $a0, $55, $4b, $69, $d2, $68, $c7, $76, $70, $b0, $19, $1c, $0a, $85, $55, $2b - byte $71, $42, $53, $e9, $b0, $1d, $3c, $c3, $a5, $b6, $f0, $90, $3b, $d2, $84, $05 - byte $0d, $c1, $49, $7b, $cd, $68, $98, $49, $c2, $62, $11, $d4, $b5, $33, $36, $45 - byte $29, $28, $4c, $85, $4b, $7d, $8b, $b2, $16, $ad, $72, $67, $b4, $c8, $12, $36 - byte $37, $41, $b4, $48, $9b, $b9, $b3, $36, $a9, $d3, $b1, $0b, $ad, $b6, $4c, $4d - byte $d1, $ba, $72, $e8, $b0, $ae, $2d, $5a, $95, $a6, $ca, $18, $3c, $d2, $66, $b4 - byte $0e, $af, $6a, $2b, $82, $52, $a5, $2d, $23, $3c, $8b, $57, $27, $6e, $62, $04 - byte $4f, $25, $4a, $14, $2b, $d2, $a8, $51, $82, $fa, $89, $25, $46, $59, $78, $08 - byte $8e, $82, $14, $2a, $50, $a0, $5e, $9c, $3a, $b1, $6a, $82, $a7, $10, $25, $82 - byte $15, $29, $54, $28, $40, $bf, $7c, $7d, $72, $d5, $8a, $51, $1d, $de, $82, $87 - byte $be, $03, $a0, $e7, $00, $08, $0d, $17, $8a, $a3, $45, $78, $d4, $2f, $4f, $ae - byte $5c, $39, $b2, $65, $ef, $01, $75, $6b, $69, $6d, $8e, $8b, $e1, $a8, $d4, $fc - byte $38, $5a, $5a, $26, $55, $28, $cf, $5a, $c1, $c1, $6c, $2e, $30, $bd, $95, $82 - byte $c7, $b4, $50, $aa, $c4, $dc, $5a, $dc, $aa, $45, $f9, $72, $2e, $ed, $78, $25 - byte $4c, $a9, $10, $c5, $6a, $a2, $c5, $19, $12, $19, $af, $a3, $83, $e0, $e0, $10 - byte $5e, $b6, $86, $30, $65, $79, $23, $1f, $84, $27, $51, $8f, $33, $1d, $85, $c7 - - byte $e8, $a1, $46, $b4, $2a, $55, $d1, $22, $3c, $0a, $0b, $0f, $f1, $41, $50, $8d - byte $c8, $9a, $2a, $83, $c3, $95, $a8, $13, $c1, $a1, $49, $c4, $0b, $51, $57, $20 - byte $1d, $c6, $ab, $f0, $a8, $48, $75, $74, $10, $29, $32, $3c, $09, $cd, $86, $e1 - byte $41, $a0, $ea, $f0, $94, $8e, $85, $08, $11, $2c, $48, $91, $c0, $f0, $a0, $32 - byte $bc, $8d, $0e, $41, $5d, $42, $54, $36, $50, $21, $42, $78, $bc, $14, $1a, $1e - byte $c2, $87, $40, $81, $ba, $64, $ca, $0c, $0e, $ca, $85, $55, $c5, $64, $19, $1e - byte $04, $44, $82, $b5, $a5, $7e, $6d, $94, $c1, $a8, $10, $17, $96, $e1, $3c, $58 - byte $1b, $ea, $96, $66, $96, $6c, $14, $8a, $33, $e6, $da, $98, $06, $4b, $a1, $0a - byte $b6, $ca, $bd, $b0, $0e, $14, $ac, $4d, $bd, $7a, $3a, $53, $52, $58, $86, $02 - byte $83, $87, $bc, $65, $b0, $34, $64, $c9, $52, $19, $3d, $14, $15, $04, $05, $02 - byte $f6, $82, $de, $f0, $a1, $3b, $2b, $ca, $10, $1e, $2d, $c2, $e3, $51, $94, $13 - byte $3e, $75, $ca, $d0, $21, $3d, $3c, $2a, $08, $0e, $f2, $f4, $ca, $d1, $2d, $3b - byte $7c, $c8, $90, $ae, $3d, $78, $5c, $e9, $e0, $21, $3b, $3e, $84, $0f, $e9, $d2 - byte $2a, $44, $78, $90, $9f, $2c, $c3, $87, $ac, $2a, $11, $3e, $82, $87, $80, $e8 - byte $72, $25, $82, $87, $8c, $e0, $15, $9e, $e5, $ea, $09, $1e, $f1, $31, $7c, $97 - byte $8d, $e8, $14, $1f, $65, $06, $87, $f8, $21, $20, $1f, $06, $9f, $f8, $2c, $2d - - byte $38, $24, $cb, $2f, $14, $5f, $b8, $05, $8f, $aa, $55, $8d, $a2, $83, $0c, $ee - byte $d2, $a4, $0e, $05, $a5, $0d, $51, $41, $4c, $d0, $2d, $4b, $86, $36, $c9, $12 - byte $44, $4d, $89, $c9, $51, $b2, $62, $42, $0c, $90, $2e, $45, $92, $b8, $29, $70 - byte $33, $26, $63, $22, $c8, $11, $32, $a5, $4b, $8d, $00, $97, $62, $76, $b6, $84 - byte $e0, $91, $10, $65, $48, $8b, $00, $4b, $70, $35, $a6, $4a, $b9, $05, $22, $7f - byte $48, $e5, $fc, $28, $83, $87, $c2, $e0, $25, $27, $01, $a4, $0f, $29, $19, $e2 - byte $34, $0a, $0c, $be, $32, $b8, $05, $4f, $29, $92, $05, $05, $1f, $d9, $3c, $13 - byte $00, $d7, $f0, $11, $3c, $24, $49, $0c, $5f, $7c, $64, $cb, $e4, $91, $21, $a4 - byte $4a, $0d, $5e, $12, $c4, $f3, $ab, $99, $bc, $2a, $00, $b7, $e0, $27, $8e, $6d - byte $f8, $08, $de, $52, $c2, $27, $47, $0e, $e2, $d9, $89, $15, $c3, $5a, $16, $4f - byte $e9, $e1, $23, $38, $70, $8e, $1f, $d1, $83, $1d, $db, $e0, $21, $8a, $25, $f7 - byte $e0, $c1, $45, $b2, $24, $4e, $12, $39, $b0, $17, $27, $96, $0d, $6b, $56, $2c - byte $45, $30, $4b, $0e, $e1, $21, $78, $48, $60, $1f, $3d, $d8, $88, $0e, $1e, $2c - byte $98, $71, $8d, $1e, $c1, $21, $7e, $b1, $0d, $5f, $2c, $98, $fb, $0f, $e0, $41 - byte $44, $44, $f0, $0f, $22, $62, $85, $85, $f0, $20, $2c, $9e, $b5, $e0, $10, $1e - byte $84, $24, $88, $65, $19, $fc, $83, $90, $24, $f6, $62, $52, $7e, $f0, $e6, $20 - - byte $96, $15, $d3, $08, $1f, $04, $38, $4b, $64, $cf, $46, $04, $a3, $10, $ee, $9f - byte $8b, $24, $09, $6c, $59, $31, $0b, $fe, $fe, $a5, $70, $e2, $c0, $8e, $3d, $0b - byte $c6, $21, $9c, $0b, $67, $8e, $ec, $d9, $92, $62, $c6, $3f, $84, $6d, $88, $e0 - byte $c9, $9a, $05, $e1, $e0, $c7, $95, $73, $0c, $20, $c7, $86, $25, $33, $02, $21 - byte $94, $2b, $97, $e0, $91, $21, $48, $11, $8f, $60, $4c, $99, $50, $e2, $48, $9e - byte $6d, $0c, $60, $1a, $41, $83, $07, $63, $86, $ec, $c9, $91, $26, $49, $8c, $50 - byte $29, $0f, $02, $2a, $94, $28, $d4, $a7, $47, $b7, $4e, $1d, $da, $b4, $6a, $09 - byte $d5, $ca, $14, $29, $d0, $ab, $47, $97, $0e, $ed, $da, $b4, $68, $0e, $5e, $2a - byte $c3, $83, $7e, $bd, $e1, $49, $6a, $f0, $51, $ae, $58, $41, $74, $d0, $a5, $33 - byte $3c, $68, $d5, $ac, $29, $7c, $8a, $56, $aa, $28, $3c, $c8, $d6, $29, $43, $bb - byte $56, $29, $9a, $25, $05, $4f, $1d, $5a, $14, $ca, $8b, $17, $e1, $41, $5a, $b2 - byte $90, $a4, $31, $78, $4a, $d3, $a4, $41, $ac, $1a, $59, $c9, $42, $5a, $bc, $b8 - byte $12, $c1, $43, $b7, $56, $8d, $e2, $d5, $8a, $56, $29, $42, $58, $78, $90, $1c - byte $26, $82, $87, $0c, $29, $1a, $d5, $a9, $51, $a5, $52, $b9, $30, $a1, $8a, $9f - byte $60, $f0, $d0, $26, $39, $3a, $88, $11, $25, $42, $b8, $52, $25, $82, $15, $29 - byte $14, $10, $3c, $a4, $4a, $52, $2f, $56, $b5, $4a, $15, $e1, $41, $88, $60, $81 - - byte $0a, $e4, $fb, $d7, $15, $1d, $c4, $a9, $11, $25, $52, $b8, $32, $a5, $e1, $41 - byte $a0, $00, $fd, $fe, $65, $48, $96, $20, $4e, $8c, $aa, $e8, $20, $2c, $3c, $08 - byte $0a, $1e, $e1, $43, $7b, $7c, $14, $2d, $4a, $85, $70, $a1, $f1, $21, $5e, $c8 - byte $97, $e7, $5f, $9a, $24, $f1, $62, $45, $8b, $cc, $16, $42, $85, $84, $a7, $e0 - byte $21, $55, $a2, $f8, $74, $11, $1f, $a2, $ab, $bc, $06, $a1, $51, $83, $7a, $75 - byte $6a, $d5, $88, $2e, $10, $2a, $62, $41, $2a, $d0, $14, $1c, $c4, $07, $07, $31 - byte $aa, $55, $a9, $12, $19, $1c, $95, $09, $6d, $10, $e1, $41, $5c, $78, $16, $11 - byte $9e, $94, $46, $db, $f0, $11, $1e, $94, $d7, $44, $21, $1a, $25, $88, $0f, $2f - byte $d1, $49, $69, $cd, $48, $c6, $f1, $a1, $02, $44, $8b, $f0, $24, $44, $82, $7a - byte $71, $fd, $20, $1d, $86, $47, $61, $c9, $42, $89, $e2, $e0, $a0, $56, $6d, $78 - byte $69, $10, $25, $a1, $66, $84, $67, $51, $d9, $40, $44, $b4, $10, $a6, $34, $38 - byte $08, $ce, $07, $62, $c3, $73, $0b, $14, $da, $10, $05, $c9, $93, $ab, $47, $4c - byte $73, $a8, $1f, $c2, $93, $b5, $e0, $e0, $29, $47, $b7, $2c, $99, $f3, $42, $f8 - byte $f0, $88, $0f, $82, $83, $87, $3e, $b9, $72, $64, $07, $0f, $19, $32, $82, $a7 - byte $90, $01, $29, $28, $38, $06, $2f, $e9, $d2, $a4, $49, $4d, $96, $3d, $21, $3c - byte $cb, $94, $11, $3c, $a4, $4a, $95, $22, $59, $52, $f0, $8d, $0e, $c1, $53, $4a - - byte $f0, $e4, $28, $31, $63, $2a, $12, $a4, $50, $81, $00, $f9, $fa, $f4, $fd, $84 - byte $b4, $a8, $44, $88, $e2, $5d, $b1, $3a, $f5, $e7, $81, $b8, $a0, $5b, $b6, $ae - byte $45, $21, $28, $bc, $c8, $d3, $2b, $27, $4b, $ca, $0a, $af, $6b, $40, $6f, $78 - byte $96, $55, $10, $37, $c3, $61, $90, $57, $39, $c3, $43, $9e, $3c, $85, $97, $32 - byte $3c, $47, $47, $5d, $32, $2b, $84, $c2, $53, $a9, $2f, $59, $c9, $0e, $8f, $32 - byte $b3, $41, $78, $c8, $06, $d1, $31, $59, $97, $81, $12, $11, $1e, $a3, $83, $dc - byte $da, $13, $bc, $04, $84, $f7, $d6, $11, $3c, $e2, $55, $78, $eb, $5c, $d1, $22 - byte $bc, $25, $4b, $9e, $3c, $a4, $07, $7f, $d9, $bc, $c2, $13, $f7, $64, $cb, $47 - byte $36, $ef, $e0, $10, $1e, $c2, $47, $b2, $e0, $2f, $8f, $5f, $3a, $08, $1e, $b2 - byte $78, $c9, $4c, $16, $dc, $b9, $73, $90, $9f, $2c, $f9, $86, $c7, $e8, $10, $9e - byte $b8, $57, $08, $1d, $3a, $a4, $4b, $3f, $13, $83, $b3, $2a, $08, $8c, $17, $91 - byte $70, $1a, $ce, $03, $29, $cb, $28, $78, $ea, $94, $19, $1e, $83, $c3, $3c, $9c - byte $57, $c9, $22, $61, $84, $07, $6d, $e1, $71, $1e, $04, $0f, $89, $12, $25, $c8 - byte $5f, $8b, $6b, $7b, $19, $4a, $0a, $9e, $e2, $d7, $52, $74, $0d, $1e, $12, $38 - byte $04, $8f, $74, $70, $14, $b7, $66, $74, $d8, $06, $12, $d8, $07, $ef, $a3, $28 - byte $85, $b3, $24, $4e, $f1, $22, $3c, $04, $cf, $f0, $c8, $25, $59, $85, $07, $0e - - byte $e1, $43, $5c, $74, $e4, $9a, $0d, $b8, $84, $27, $8e, $c1, $81, $3d, $3b, $ee - byte $dc, $92, $05, $d7, $f0, $10, $bc, $c2, $83, $f8, $e0, $f1, $06, $83, $43, $78 - byte $90, $1c, $2f, $38, $72, $e0, $10, $1c, $c4, $85, $0f, $a9, $c1, $23, $59, $47 - byte $47, $f1, $ec, $d8, $26, $8b, $f8, $10, $9e, $38, $85, $e7, $e0, $11, $1f, $a2 - byte $13, $27, $49, $e9, $92, $7d, $74, $08, $9f, $5c, $b9, $86, $f7, $e0, $c1, $96 - byte $ed, $36, $97, $c5, $b3, $0d, $70, $cf, $1a, $e3, $69, $3a, $f0, $5e, $16, $d3 - byte $4a, $3a, $37, $ae, $d3, $e2, $2e, $5c, $a5, $79, $c1, $43, $46, $78, $90, $16 - byte $bc, $f8, $ca, $99, $0f, $f3, $52, $c6, $3a, $08, $0f, $52, $d9, $8b, $bb, $8b - byte $d1, $29, $3e, $70, $8f, $8e, $52, $c5, $65, $04, $31, $fb, $88, $a7, $4c, $1e - byte $75, $31, $6b, $88, $13, $c7, $56, $0c, $1b, $d1, $ac, $d2, $65, $f0, $8c, $1e - byte $5c, $c2, $83, $d8, $e0, $c0, $5a, $14, $4b, $96, $2c, $a4, $27, $87, $a2, $19 - byte $9e, $58, $b3, $66, $25, $32, $78, $30, $67, $1e, $1e, $a2, $07, $bb, $f0, $c0 - byte $26, $3c, $b0, $0a, $0e, $2c, $98, $33, $63, $c6, $94, $09, $17, $b6, $d1, $89 - byte $55, $f0, $23, $c2, $98, $2d, $9b, $f0, $10, $1d, $e2, $23, $73, $e2, $cc, $88 - byte $86, $8f, $e0, $1d, $5e, $a2, $07, $53, $a2, $e1, $2b, $59, $b2, $22, $c9, $82 - byte $04, $73, $62, $e1, $83, $09, $13, $c2, $d1, $81, $74, $74, $09, $1e, $e1, $21 - - byte $38, $04, $4f, $d6, $a4, $c2, $73, $7c, $8a, $0e, $8c, $b9, $70, $59, $8a, $4b - byte $62, $4e, $64, $8e, $c8, $99, $0b, $ae, $c4, $56, $d8, $c3, $59, $20, $78, $4f - byte $03, $ce, $4b, $71, $2e, $06, $4f, $52, $2c, $53, $45, $74, $5c, $1a, $7b, $b0 - byte $71, $90, $09, $5f, $c4, $c3, $07, $a7, $f0, $15, $1c, $c2, $37, $8b, $e0, $c5 - byte $71, $2f, $ac, $09, $b2, $79, $30, $73, $44, $0f, $ce, $f1, $89, $03, $f9, $e8 - byte $44, $ba, $51, $90, $20, $1e, $7c, $c2, $57, $7c, $20, $55, $19, $82, $07, $25 - byte $4e, $14, $c3, $43, $f0, $24, $13, $9e, $89, $45, $87, $e4, $40, $21, $38, $90 - byte $63, $9b, $1e, $c2, $43, $74, $60, $c6, $98, $52, $72, $a0, $10, $1f, $c8, $06 - byte $8f, $f0, $11, $1d, $89, $11, $66, $c4, $90, $40, $7e, $20, $47, $36, $7d, $90 - byte $0e, $5f, $c4, $08, $11, $0a, $1e, $04, $f8, $47, $c7, $f8, $11, $bc, $19, $31 - byte $22, $18, $1c, $e8, $d3, $a3, $1b, $1c, $c2, $2f, $c3, $e0, $41, $9f, $5f, $f0 - byte $a0, $43, $9b, $56, $f4, $21, $c8, $80, $40, $78, $a4, $1b, $3c, $69, $d2, $44 - byte $41, $1c, $19, $d1, $91, $c1, $90, $01, $3b, $36, $a4, $88, $13, $a1, $e7, $3f - byte $00, $ad, $c4, $18, $40, $8f, $0e, $29, $12, $44, $09, $06, $ef, $95, $c8, $88 - byte $01, $7d, $be, $b4, $49, $66, $09, $ba, $21, $88, $59, $f4, $20, $94, $00, $e8 - byte $d2, $a6, $49, $1c, $31, $fd, $e0, $45, $2c, $78, $30, $ca, $01, $c1, $93, $3a - - byte $15, $84, $38, $43, $20, $33, $22, $84, $09, $11, $a4, $9f, $1e, $68, $d1, $c0 - byte $4a, $09, $6f, $f0, $0c, $9f, $c1, $33, $05, $e0, $a2, $41, $0d, $33, $ba, $e0 - byte $c9, $34, $7c, $07, $0f, $5a, $38, $82, $07, $86, $18, $98, $3e, $a2, $17, $3d - byte $3c, $b4, $71, $62, $a3, $82, $11, $75, $04, $08, $de, $f8, $c3, $07, $6e, $9a - byte $d8, $b1, $60, $44, $1b, $7c, $e9, $e3, $a3, $83, $1b, $27, $76, $ac, $98, $c0 - byte $05, $6f, $44, $04, $c3, $07, $de, $e8, $11, $3c, $d1, $83, $f0, $1f, $bd, $10 - byte $86, $0f, $bc, $e1, $0b, $32, $7a, $50, $fe, $91, $12, $41, $4c, $08, $61, $f8 - byte $0c, $1e, $38, $b0, $62, $c6, $00, $3a, $7c, $20, $21, $8c, $88, $00, $7e, $7c - byte $e1, $13, $07, $34, $c8, $10, $c0, $04, $6f, $04, $c1, $07, $1b, $66, $8c, $60 - byte $fd, $cb, $96, $22, $51, $9c, $18, $51, $22, $84, $0b, $15, $22, $58, $90, $40 - byte $f9, $f2, $e4, $ca, $94, $22, $21, $f8, $09, $14, $10, $3c, $65, $48, $96, $20 - byte $56, $b4, $48, $11, $c2, $c2, $47, $78, $08, $5e, $d2, $25, $8b, $0f, $9e, $c2 - byte $83, $47, $74, $60, $28, $80, $bf, $3c, $be, $dc, $39, $89, $67, $2b, $9a, $a5 - byte $70, $66, $42, $18, $c7, $47, $7e, $72, $f9, $48, $93, $c4, $5e, $0c, $2b, $91 - byte $c9, $81, $89, $60, $46, $e1, $49, $0e, $b3, $e0, $25, $82, $b9, $d0, $e0, $11 - byte $9d, $e5, $08, $63, $28, $8e, $8d, $28, $16, $cc, $99, $0a, $61, $24, $90, $81 - - byte $fc, $e8, $c9, $8c, $21, $3f, $3e, $c1, $83, $19, $53, $c6, $af, $83, $01, $7f - byte $7e, $7c, $a3, $47, $f0, $e4, $c5, $42, $18, $d3, $f8, $10, $3e, $d2, $05, $1f - byte $de, $e1, $8b, $17, $0f, $6e, $e1, $2b, $3c, $06, $1f, $9e, $c1, $83, $0b, $e7 - byte $53, $11, $fc, $78, $f3, $e4, $ce, $2d, $78, $70, $a2, $10, $3c, $e8, $86, $0f - byte $e2, $0c, $e9, $f1, $a6, $c9, $9d, $1a, $17, $ca, $1c, $39, $b0, $67, $c7, $37 - byte $78, $32, $0a, $5e, $e1, $93, $23, $05, $f6, $e4, $d8, $92, $e1, $45, $92, $50 - byte $f6, $88, $1e, $d4, $a8, $70, $a6, $c8, $81, $3c, $3b, $32, $ac, $59, $c9, $91 - byte $23, $5b, $96, $4c, $19, $d2, $a5, $49, $93, $ca, $45, $32, $67, $49, $12, $25 - byte $06, $a7, $e0, $c1, $5d, $1a, $57, $a9, $52, $82, $83, $a4, $44, $20, $87, $b7 - byte $2c, $9e, $32, $c2, $27, $57, $29, $c1, $93, $a3, $44, $0e, $e1, $83, $57, $78 - byte $e4, $c6, $2d, $3a, $70, $96, $cc, $29, $3a, $70, $90, $2d, $9b, $57, $f8, $88 - byte $0f, $d1, $99, $53, $74, $e0, $c0, $3b, $3c, $c8, $e4, $51, $3c, $c2, $43, $72 - byte $08, $0e, $d1, $41, $7c, $78, $e2, $2e, $9d, $1b, $d7, $0a, $c0, $39, $78, $94 - byte $cc, $f0, $51, $2f, $c2, $43, $7c, $cc, $16, $f1, $81, $43, $c5, $48, $4f, $c1 - byte $83, $6b, $f8, $e4, $14, $1f, $d9, $b3, $4f, $16, $e1, $2b, $38, $b4, $40, $8e - byte $d1, $31, $78, $26, $8b, $f0, $19, $1f, $29, $05, $87, $86, $c0, $2e, $7c, $a4 - - byte $cb, $e4, $50, $3f, $a2, $53, $43, $0c, $1e, $34, $ba, $45, $7c, $a4, $cc, $89 - byte $62, $74, $6c, $09, $b4, $e2, $4b, $f8, $88, $0e, $14, $29, $04, $07, $72, $c1 - byte $83, $06, $75, $6e, $54, $e3, $4b, $74, $24, $c7, $92, $46, $fc, $a0, $c6, $95 - byte $0a, $65, $4a, $d1, $23, $3c, $8c, $c8, $02, $21, $fe, $50, $dc, $86, $c6, $28 - byte $b3, $71, $54, $41, $09, $e2, $d9, $89, $63, $cb, $a6, $57, $f0, $6a, $8d, $79 - byte $8a, $7d, $f0, $10, $1b, $3c, $44, $b3, $16, $95, $07, $f3, $54, $78, $16, $c3 - byte $7a, $0e, $88, $64, $c9, $42, $7a, $13, $dc, $04, $ec, $c4, $b2, $61, $13, $1c - byte $58, $05, $87, $57, $c1, $bc, $0c, $b0, $8f, $17, $d1, $21, $3c, $b2, $0c, $5e - byte $cc, $5e, $07, $3b, $76, $c1, $21, $3c, $84, $8f, $e0, $41, $82, $39, $73, $62 - byte $c1, $8f, $15, $a9, $e8, $cc, $8c, $28, $d3, $f0, $10, $5d, $48, $b2, $08, $1f - byte $d1, $81, $28, $13, $76, $64, $d9, $9c, $0a, $d2, $c9, $82, $65, $70, $20, $4e - byte $8c, $69, $f0, $8c, $4f, $a4, $d2, $65, $7c, $0a, $9e, $64, $1f, $06, $eb, $f0 - byte $40, $92, $24, $09, $16, $e1, $21, $3e, $30, $21, $12, $7c, $d2, $0d, $51, $a2 - byte $44, $88, $84, $07, $36, $e1, $81, $54, $78, $20, $41, $9c, $78, $ba, $24, $42 - byte $38, $ba, $24, $8b, $e8, $48, $2c, $3c, $12, $26, $4b, $86, $34, $e9, $f0, $10 - byte $3e, $c2, $43, $70, $08, $5e, $47, $f2, $ac, $0e, $89, $aa, $91, $2c, $96, $e2 - - byte $5e, $bc, $ca, $e3, $a2, $6e, $9e, $a9, $3b, $31, $0d, $ae, $02, $f9, $ae, $10 - byte $1e, $d8, $9c, $a9, $27, $45, $21, $3a, $92, $63, $9b, $2c, $82, $e7, $5e, $d8 - byte $1a, $7b, $23, $3c, $46, $47, $32, $4c, $f7, $44, $74, $e4, $18, $1e, $82, $07 - byte $39, $b2, $e1, $81, $4d, $85, $60, $4c, $f8, $2c, $06, $cf, $21, $19, $3c, $58 - byte $13, $61, $42, $98, $11, $21, $86, $04, $8f, $42, $ba, $08, $1f, $5d, $81, $34 - byte $93, $f0, $c0, $88, $20, $43, $02, $0c, $e8, $93, $eb, $13, $e1, $91, $74, $8d - byte $08, $4f, $04, $e8, $f3, $a7, $47, $8f, $2f, $99, $aa, $19, $1e, $08, $45, $87 - byte $f0, $48, $9f, $1e, $5d, $ba, $74, $e8, $d0, $26, $45, $38, $3e, $10, $24, $48 - byte $20, $7c, $84, $87, $e0, $49, $9b, $36, $2d, $c6, $e1, $21, $78, $d2, $0f, $0f - byte $e1, $23, $3c, $06, $8f, $74, $49, $90, $41, $78, $88, $ae, $b4, $70, $11, $26 - byte $14, $dd, $e3, $05, $6e, $5a, $b4, $a2, $3b, $5e, $3a, $78, $e2, $23, $ce, $b3 - byte $b9, $2e, $f6, $d1, $d9, $d8, $06, $f9, $80, $d0, $3e, $67, $36, $1d, $ab, $46 - byte $f0, $24, $75, $35, $48, $1c, $c3, $65, $9d, $2e, $f6, $21, $ab, $e8, $b8, $0e - byte $96, $75, $b2, $08, $1e, $e1, $61, $59, $30, $3f, $06, $c1, $77, $1f, $3d, $85 - byte $75, $79, $35, $92, $45, $3e, $dc, $06, $ac, $8f, $11, $b1, $f0, $1c, $bc, $ef - byte $66, $78, $0c, $de, $88, $08, $21, $4c, $17, $57, $fb, $18, $b5, $85, $aa, $79 - - byte $b6, $ee, $46, $74, $42, $42, $18, $31, $22, $82, $e1, $23, $3a, $23, $23, $86 - byte $94, $48, $f0, $20, $14, $3c, $10, $d0, $a2, $59, $0c, $90, $67, $8b, $af, $10 - byte $9e, $10, $22, $24, $40, $93, $26, $0d, $1a, $c4, $91, $21, $0b, $4f, $88, $93 - byte $05, $42, $04, $34, $71, $e2, $a0, $8e, $9d, $1a, $55, $a2, $48, $90, $c4, $0b - byte $44, $c1, $01, $01, $ce, $f0, $80, $1d, $1b, $36, $ac, $58, $a9, $60, $26, $1c - byte $1c, $82, $07, $7e, $9a, $38, $c2, $07, $36, $6a, $58, $b1, $60, $c1, $8c, $09 - byte $13, $46, $04, $08, $f0, $ef, $83, $65, $b4, $b4, $68, $45, $85, $38, $41, $6c - byte $99, $6c, $a5, $2c, $41, $23, $09, $60, $0d, $5e, $5b, $93, $0e, $6e, $da, $b8 - byte $c2, $47, $f0, $8a, $4e, $f4, $e7, $41, $70, $08, $1f, $38, $d2, $44, $f8, $d8 - byte $3a, $4b, $23, $3c, $a4, $85, $e0, $8d, $9f, $3e, $3e, $ba, $78, $a2, $47, $72 - byte $c0, $11, $3f, $f2, $40, $74, $c4, $47, $0f, $6f, $78, $c0, $1d, $3e, $a2, $63 - byte $f0, $40, $40, $00, $7f, $70, $08, $1f, $47, $22, $78, $17, $0e, $04, $f4, $f1 - byte $47, $47, $3c, $e1, $b1, $0e, $c4, $47, $28, $e1, $11, $5f, $74, $08, $5e, $55 - byte $00, $3b, $b4, $f0, $19, $1e, $82, $27, $ee, $f8, $0a, $15, $0b, $fe, $f8, $18 - byte $3e, $82, $43, $7c, $80, $11, $1e, $a1, $04, $0f, $7c, $d1, $05, $66, $74, $80 - byte $8e, $0d, $2a, $14, $cc, $d1, $05, $76, $ba, $84, $1e, $be, $20, $07, $0f, $bc - - byte $78, $e1, $44, $07, $58, $30, $a3, $63, $72, $80, $02, $39, $3a, $c0, $c5, $93 - byte $2e, $60, $e1, $c4, $09, $03, $3a, $b4, $e8, $00, $19, $32, $d2, $c5, $31, $2a - byte $f1, $85, $84, $04, $00, $0d, $32, $44, $b0, $c0, $a8, $ce, $86, $e0, $15, $13 - byte $22, $00, $36, $28, $c1, $03, $c4, $e4, $0c, $df, $b0, $83, $07, $b4, $e0, $01 - byte $0e, $c4, $e2, $98, $0d, $18, $f0, $a7, $c4, $e8, $19, $3c, $41, $86, $4f, $8c - byte $18, $c0, $a3, $c5, $03, $1b, $66, $f2, $88, $1f, $e0, $82, $27, $a4, $e0, $01 - byte $0e, $2d, $18, $50, $38, $a1, $43, $0d, $3e, $98, $20, $a2, $0f, $5e, $20, $81 - byte $07, $6f, $cc, $e1, $11, $3c, $3a, $b0, $e1, $23, $78, $00, $0d, $5f, $c1, $13 - byte $02, $f8, $f0, $01, $1a, $14, $08, $e0, $40, $01, $03, $8c, $1f, $90, $a3, $03 - byte $84, $e8, $01, $26, $f8, $00, $80, $0b, $32, $78, $81, $8f, $0e, $c1, $13, $58 - byte $f8, $08, $1e, $30, $21, $c7, $0f, $08, $e0, $82, $27, $48, $10, $c0, $80, $00 - byte $0a, $1e, $30, $20, $41, $8c, $8f, $c9, $29, $78, $c3, $09, $be, $d1, $21, $3d - byte $84, $4f, $f8, $70, $a0, $87, $ef, $e4, $0a, $10, $3e, $6c, $68, $c1, $33, $3e - byte $65, $17, $78, $b0, $a1, $f8, $27, $44, $8f, $0e, $4d, $ee, $dc, $a8, $70, $a2 - byte $c8, $81, $3c, $5b, $32, $a4, $59, $f9, $27, $4c, $9f, $0f, $4d, $ea, $d4, $b8 - byte $50, $e2, $48, $81, $1d, $59, $36, $a4, $49, $f9, $27, $42, $9f, $0e, $af, $e0 - - byte $41, $85, $12, $c5, $e0, $49, $86, $75, $f0, $20, $4a, $80, $0e, $2d, $1a, $d1 - byte $8b, $02, $b9, $e8, $4d, $9c, $00, $dd, $e0, $41, $2d, $7c, $91, $23, $1b, $3f - byte $c2, $87, $7f, $82, $c1, $9b, $72, $f4, $08, $be, $88, $e8, $d1, $a6, $11, $3e - byte $82, $7f, $0a, $c0, $87, $9b, $26, $36, $2a, $c1, $df, $3f, $36, $fa, $78, $68 - byte $62, $a7, $8a, $99, $22, $06, $72, $68, $c9, $a0, $8e, $9f, $fe, $11, $e2, $c1 - byte $49, $1d, $2b, $65, $8c, $14, $d0, $91, $45, $43, $1a, $a5, $ff, $00, $80, $09 - byte $2f, $2e, $ec, $58, $31, $63, $0a, $fe, $d8, $d0, $e1, $c6, $41, $0d, $13, $26 - byte $0c, $e4, $d1, $a2, $41, $4d, $32, $7c, $fa, $c7, $80, $06, $05, $36, $2c, $c1 - byte $03, $7d, $f0, $8c, $5e, $fe, $21, $a1, $45, $89, $2c, $f8, $a2, $0a, $5f, $fe - byte $c1, $a1, $42, $8e, $14, $33, $46, $f4, $e8, $a2, $47, $f0, $81, $08, $1a, $05 - byte $50, $c4, $00, $83, $37, $49, $16, $c4, $b9, $51, $e3, $ca, $85, $33, $a5, $01 - byte $c4, $be, $26, $b0, $24, $41, $9c, $18, $51, $aa, $e5, $a1, $7b, $34, $00, $f2 - byte $e4, $82, $47, $f8, $64, $46, $94, $09, $11, $c2, $e1, $91, $42, $f0, $20, $4b - byte $96, $64, $f8, $0a, $0e, $84, $09, $11, $0c, $0e, $c1, $3f, $78, $10, $0a, $1e - byte $04, $e8, $07, $4f, $32, $e1, $37, $78, $d3, $a3, $47, $37, $f8, $13, $24, $18 - byte $3e, $82, $03, $5d, $3c, $e1, $17, $51, $70, $40, $40, $1f, $1f, $5d, $bc, $74 - - byte $48, $20, $27, $86, $94, $28, $92, $e4, $80, $90, $00, $fe, $e0, $89, $07, $4f - byte $7a, $40, $16, $1c, $88, $20, $0e, $9f, $c1, $9b, $0e, $0a, $e2, $c1, $93, $30 - byte $61, $44, $08, $11, $e0, $c7, $17, $3d, $f0, $e0, $46, $81, $1c, $19, $52, $24 - byte $e1, $21, $7c, $c4, $47, $bc, $78, $83, $57, $fc, $08, $9e, $08, $c3, $57, $f0 - byte $09, $df, $c1, $21, $7a, $86, $87, $e8, $1f, $7c, $71, $c7, $bf, $e8, $98, $3c - byte $e2, $23, $6c, $36, $2f, $93, $54, $2f, $c8, $0d, $bd, $91, $68, $eb, $24, $f3 - byte $30, $49, $55, $82, $4e, $39, $18, $88, $04, $2f, $d2, $a4, $83, $43, $2d, $0c - byte $cf, $a5, $83, $50, $78, $0b, $5e, $b5, $a1, $74, $44, $f7, $ca, $10, $1d, $10 - byte $37, $8e, $e0, $49, $12, $65, $2b, $a8, $95, $8d, $21, $7c, $20, $22, $44, $fb - byte $25, $04, $5f, $a4, $f1, $a2, $31, $d2, $c6, $45, $0b, $27, $89, $56, $58, $2b - byte $6b, $43, $67, $0c, $5e, $34, $70, $b4, $82, $5a, $41, $a4, $35, $21, $c4, $8d - byte $0b, $27, $4e, $1c, $d4, $b1, $63, $a3, $da, $29, $c3, $43, $6b, $c0, $1d, $1d - byte $82, $47, $70, $c0, $86, $15, $0b, $16, $cc, $c1, $0b, $57, $f8, $c0, $81, $23 - byte $f8, $62, $c2, $d4, $18, $82, $17, $f6, $e0, $81, $35, $7c, $60, $c6, $8c, $09 - byte $22, $46, $08, $f1, $29, $78, $43, $c1, $0c, $19, $13, $c6, $e0, $85, $03, $46 - byte $78, $80, $16, $9f, $20, $85, $0f, $0c, $e1, $03, $66, $7c, $0c, $0e, $50, $a1 - - byte $40, $0e, $0f, $10, $21, $62, $00, $7f, $85, $ce, $04, $fd, $b3, $44, $27, $6f - byte $64, $83, $c7, $71, $24, $d6, $e2, $59, $c2, $5d, $36, $8a, $c6, $16, $b8, $12 - byte $47, $82, $1e, $de, $3b, $11, $9e, $69, $86, $0f, $04, $e1, $65, $2d, $44, $87 - byte $a2, $59, $21, $ee, $10, $be, $a5, $10, $1e, $ea, $72, $bc, $c4, $bf, $26, $de - byte $c0, $93, $08, $4f, $75, $a1, $42, $84, $0f, $7a, $e1, $61, $2b, $46, $67, $1c - byte $7b, $38, $3a, $c6, $27, $9c, $45, $03, $7a, $b2, $88, $8e, $77, $28, $bc, $04 - byte $af, $cf, $71, $07, $61, $e3, $86, $15, $1e, $eb, $c2, $63, $c0, $0f, $0f, $2f - byte $dc, $64, $15, $bc, $a0, $63, $47, $00, $3f, $3c, $86, $0f, $d8, $b0, $61, $e1 - byte $8a, $17, $30, $a0, $43, $c3, $10, $1e, $f0, $c1, $85, $83, $07, $36, $2e, $58 - byte $30, $61, $06, $07, $ec, $d0, $d0, $83, $47, $07, $36, $3a, $c0, $8d, $17, $e1 - byte $25, $78, $80, $0b, $1e, $60, $d1, $80, $8e, $0e, $e1, $29, $3a, $40, $03, $0f - byte $0e, $1c, $5a, $30, $60, $40, $83, $02, $05, $12, $46, $74, $08, $1e, $50, $f7 - byte $06, $76, $ea, $eb, $60, $3c, $2d, $0b, $8c, $18, $92, $05, $0e, $1a, $eb, $68 - byte $59, $cf, $8b, $f1, $80, $7e, $6b, $6c, $f3, $69, $81, $01, $3d, $b8, $e0, $b5 - byte $8d, $21, $85, $a7, $6c, $70, $74, $b6, $c1, $3e, $5c, $96, $e1, $63, $6f, $42 - byte $4d, $96, $eb, $20, $7c, $40, $88, $0f, $f9, $20, $5e, $41, $c5, $02, $19, $73 - - byte $70, $80, $08, $01, $7c, $78, $00, $5b, $21, $b0, $05, $87, $e8, $00, $29, $bc - byte $80, $0b, $9e, $58, $c3, $e3, $d1, $0a, $0f, $65, $03, $2c, $58, $68, $e1, $01 - byte $4a, $78, $3a, $1b, $c1, $a3, $2a, $80, $05, $03, $2d, $59, $5c, $c5, $e8, $10 - byte $2f, $82, $4f, $78, $4c, $16, $90, $21, $85, $a7, $e8, $d8, $24, $a0, $3e, $89 - byte $f0, $11, $de, $db, $40, $f0, $7c, $13, $e1, $2d, $3e, $80, $0e, $ef, $7d, $30 - byte $38, $06, $cf, $f0, $9e, $0d, $06, $e7, $3a, $c0, $0b, $67, $6b, $1e, $c9, $32 - byte $11, $35, $d2, $c0, $b4, $08, $1e, $f3, $68, $2d, $e6, $85, $34, $19, $3c, $d0 - byte $80, $41, $bd, $b6, $83, $63, $f0, $04, $3b, $2f, $40, $83, $46, $05, $12, $04 - byte $f4, $b9, $19, $1c, $21, $a6, $8c, $75, $b0, $0c, $41, $00, $07, $16, $9d, $83 - byte $67, $78, $58, $1b, $20, $82, $27, $50, $20, $80, $2b, $67, $ce, $0c, $cf, $e1 - byte $23, $78, $02, $02, $08, $60, $6f, $81, $8c, $0f, $c1, $31, $f8, $46, $f7, $e8 - byte $00, $28, $7c, $9d, $85, $f0, $0c, $2c, $bc, $c0, $0f, $ef, $e1, $01, $70, $78 - byte $0c, $1e, $d9, $24, $bc, $c1, $8b, $8e, $d9, $24, $3e, $a6, $0b, $f8, $f0, $b2 - byte $79, $b4, $86, $07, $b7, $68, $64, $63, $20, $e1, $35, $78, $96, $85, $a2, $17 - byte $2d, $e0, $c2, $39, $95, $87, $60, $70, $44, $82, $14, $01, $18, $00, $3c, $58 - byte $fe, $83, $77, $2a, $8c, $18, $40, $00, $01, $80, $0b, $33, $78, $4f, $c6, $58 - - byte $50, $3c, $00, $c1, $87, $03, $c3, $ff, $a1, $6c, $89, $29, $13, $28, $60, $80 - byte $c1, $03, $7a, $f0, $e9, $81, $f1, $11, $20, $3c, $d8, $50, $83, $57, $74, $04 - byte $19, $5f, $92, $83, $ff, $4b, $94, $1c, $e2, $63, $74, $8a, $0f, $fe, $73, $26 - byte $98, $e8, $1e, $1f, $82, $47, $41, $80, $0d, $2b, $ba, $e4, $0b, $28, $fe, $fd - byte $d7, $88, $e3, $00, $73, $1f, $40, $ad, $0f, $f0, $f3, $65, $f0, $0a, $0f, $c1 - byte $63, $6d, $40, $86, $08, $0e, $76, $74, $f4, $1f, $9d, $ce, $26, $14, $48, $10 - byte $c0, $82, $02, $12, $1e, $82, $e7, $39, $80, $11, $9e, $c0, $83, $01, $11, $1c - byte $fd, $c7, $8b, $e0, $71, $16, $c2, $23, $38, $d0, $c0, $82, $4f, $b2, $3a, $02 - byte $e0, $c1, $82, $0c, $4e, $fe, $93, $65, $78, $4c, $96, $a0, $81, $07, $ef, $40 - byte $12, $0e, $90, $01, $41, $08, $00, $dd, $97, $00, $15, $7c, $c0, $83, $02, $8e - byte $04, $10, $02, $78, $78, $bf, $44, $24, $4d, $07, $dd, $03, $00, $7c, $bc, $f1 - byte $22, $f8, $82, $07, $09, $ac, $05, $16, $03, $5c, $89, $0c, $0c, $f0, $e9, $09 - byte $0f, $4e, $8f, $0c, $31, $10, $40, $02, $9d, $1f, $c1, $03, $76, $26, $8f, $00 - byte $31, $28, $f8, $87, $8e, $08, $d8, $11, $82, $7f, $f0, $00, $0b, $fc, $00, $c2 - byte $29, $e5, $41, $00, $54, $82, $88, $00, $c1, $3f, $08, $82, $88, $00, $70, $83 - byte $7f, $10, $02, $76, $12, $82, $7f, $10, $02, $03, $04, $40, $f0, $0f, $c2, $20 - - byte $01, $05, $ff, $20, $d2, $cb, $43, $1f, $0a, $e0, $c8, $80, $22, $01, $8c, $08 - byte $20, $02, $f8, $f8, $f6, $02, $1e, $d8, $b8, $50, $06, $2f, $c4, $80, $86, $01 - byte $fe, $7e, $81, $17, $0e, $ee, $b3, $80, $1c, $18, $52, $20, $e1, $3b, $3c, $04 - byte $af, $65, $f1, $25, $80, $84, $0f, $80, $c3, $00, $5f, $bf, $d8, $46, $38, $f6 - byte $41, $f8, $8b, $0f, $57, $0b, $3a, $54, $28, $90, $01, $85, $cf, $27, $05, $eb - byte $1c, $06, $2f, $48, $10, $a3, $47, $f0, $81, $75, $8f, $8e, $03, $44, $08, $e0 - byte $83, $37, $cc, $6b, $1d, $bc, $c1, $81, $4d, $4e, $b0, $61, $9e, $07, $a8, $c1 - byte $17, $0c, $e8, $70, $11, $3c, $de, $55, $fc, $88, $1e, $e1, $23, $78, $80, $02 - byte $b9, $21, $12, $40, $06, $08, $fe, $20, $e1, $c6, $c0, $1c, $98, $3c, $c3, $0f - byte $fc, $08, $08, $ad, $00, $04, $7f, $80, $11, $20, $01, $c7, $1f, $90, $bb, $20 - byte $02, $64, $88, $04, $04, $3e, $7a, $26, $07, $10, $b8, $5a, $00, $74, $ec, $d0 - byte $b0, $42, $c5, $82, $39, $17, $60, $8c, $95, $30, $71, $c2, $c0, $5e, $20, $b0 - byte $42, $81, $82, $19, $52, $26, $c0, $10, $2b, $70, $c2, $c4, $01, $1d, $5b, $47 - byte $48, $11, $25, $33, $3c, $82, $8f, $0e, $0d, $10, $6a, $8e, $0c, $3e, $e0, $e2 - byte $63, $0d, $8c, $0e, $c1, $a1, $64, $66, $c2, $e0, $1f, $1c, $a2, $53, $f8, $82 - byte $16, $5f, $21, $84, $c7, $e0, $1d, $9f, $d2, $65, $f0, $02, $0b, $23, $39, $c5 - - byte $27, $88, $d1, $39, $78, $40, $4f, $4e, $90, $07, $54, $74, $02, $0b, $22, $38 - byte $c4, $a7, $e8, $04, $be, $26, $06, $0f, $e0, $c0, $e2, $73, $74, $02, $d7, $10 - byte $41, $04, $0f, $a0, $40, $80, $44, $57, $b0, $60, $c1, $04, $6f, $c0, $80, $01 - byte $25, $1b, $30, $c1, $f7, $78, $9c, $c0, $e8, $04, $3a, $3a, $dc, $cf, $f0, $10 - byte $1c, $4e, $f0, $8a, $40, $9f, $30, $62, $01, $68, $d0, $43, $02, $24, $88, $b8 - byte $50, $25, $23, $d1, $e6, $0c, $5e, $c0, $d3, $22, $d0, $f0, $3a, $25, $d3, $64 - byte $5c, $8c, $ee, $c1, $21, $3c, $01, $29, $88, $d1, $39, $5e, $02, $0b, $8f, $40 - byte $0a, $62, $b2, $89, $d7, $40, $00, $a7, $83, $f0, $1e, $9e, $82, $67, $78, $07 - byte $5a, $07, $aa, $40, $85, $c8, $1b, $e9, $3c, $3a, $00, $8a, $16, $45, $3b, $de - byte $56, $81, $78, $1f, $af, $1b, $47, $f0, $7c, $04, $79, $37, $5c, $04, $8f, $64 - byte $95, $77, $7b, $25, $40, $80, $f1, $7e, $14, $84, $27, $00, $c1, $33, $3c, $01 - byte $cf, $5a, $d1, $02, $00, $80, $36, $16, $9e, $a2, $c5, $20, $b8, $f3, $7d, $08 - byte $6c, $b4, $f8, $e2, $5d, $18, $14, $a8, $92, $f8, $46, $ba, $60, $d6, $ca, $c4 - byte $00, $8e, $72, $59, $ce, $c4, $4b, $13, $de, $a2, $01, $b1, $16, $b7, $22, $7c - byte $78, $70, $e1, $c0, $81, $1d, $2f, $56, $01, $a0, $5c, $14, $1c, $83, $07, $6c - byte $d8, $b0, $60, $7e, $8b, $23, $1d, $5e, $82, $43, $f0, $80, $1e, $de, $c3, $45 - - byte $78, $fc, $07, $25, $0b, $5e, $bc, $8c, $36, $ff, $20, $99, $47, $6b, $68, $50 - byte $1b, $44, $32, $81, $15, $ad, $83, $67, $70, $c8, $da, $69, $2b, $5a, $40, $85 - byte $02, $3f, $ed, $c3, $08, $4e, $c1, $23, $5c, $e4, $c5, $68, $fd, $2e, $db, $45 - byte $da, $cf, $0a, $f1, $20, $38, $40, $5a, $46, $6b, $61, $5c, $16, $c1, $b8, $54 - byte $23, $f6, $52, $af, $cc, $83, $85, $69, $1e, $85, $8b, $e0, $0f, $7b, $2f, $7c - byte $a6, $4e, $d9, $33, $d3, $50, $f0, $0c, $0f, $40, $83, $5f, $a1, $00, $1e, $de - byte $e3, $15, $2c, $18, $c1, $23, $6d, $a5, $e3, $11, $50, $09, $73, $41, $c5, $88 - byte $f7, $fd, $b3, $10, $43, $84, $00, $3e, $5a, $c3, $ac, $49, $90, $21, $ef, $40 - byte $f0, $db, $e1, $68, $84, $87, $68, $15, $5c, $b7, $45, $59, $cc, $02, $35, $31 - byte $5a, $1e, $23, $50, $79, $21, $2d, $00, $0a, $97, $c1, $73, $1f, $be, $81, $ac - byte $00, $04, $10, $80, $78, $1e, $2d, $5a, $03, $60, $80, $f0, $92, $0e, $98, $70 - byte $01, $22, $38, $c1, $87, $13, $4f, $93, $36, $c0, $e0, $00, $1d, $76, $c1, $84 - byte $1a, $0b, $20, $80, $05, $e5, $3f, $00, $57, $84, $82, $91, $31, $20, $82, $03 - byte $0d, $3c, $f8, $84, $17, $f0, $60, $41, $06, $17, $ff, $15, $11, $0a, $24, $08 - byte $e1, $dd, $3f, $8c, $8a, $00, $19, $62, $78, $8f, $04, $f1, $32, $3c, $01, $8d - byte $ae, $fe, $c3, $33, $18, $10, $c1, $cd, $7f, $bf, $08, $0f, $59, $2f, $14, $25 - - byte $63, $60, $e1, $dd, $7f, $32, $8c, $f6, $a1, $0a, $10, $7c, $b8, $30, $c3, $7d - byte $10, $04, $00, $17, $56, $70, $0f, $42, $f0, $60, $43, $0d, $fe, $41, $08, $36 - byte $b4, $e0, $1e, $84, $a1, $07, $f7, $20, $1e, $c4, $83, $30, $94, $04, $d1, $30 - byte $0a, $45, $c3, $58, $99, $93, $32, $64, $40, $ce, $10, $d0, $47, $c4, $e4, $08 - byte $7e, $25, $01, $0c, $4c, $68, $95, $69, $13, $84, $ef, $58, $09, $3a, $02, $ac - byte $8e, $5e, $70, $92, $92, $c9, $b4, $80, $92, $00, $83, $7f, $28, $00, $0d, $0c - byte $f0, $24, $08, $fe, $91, $08, $68, $93, $00, $fb, $12, $86, $78, $48, $00, $7a - byte $0e, $e0, $3c, $8c, $b6, $df, $b6, $8f, $45, $39, $0f, $c2, $70, $fa, $7e, $63 - byte $0f, $e2, $41, $3c, $88, $07, $f1, $20, $1e, $c4, $83, $78, $10, $0f, $a2, $c0 - byte $81, $01, $05, $02, $04, $30, $20, $80, $00, $e0, $c3, $83, $07, $17, $0e, $6c - byte $d8, $c1, $2b, $38, $04, $6f, $b8, $c1, $13, $56, $f0, $09, $0f, $e1, $33, $3c - byte $05, $ff, $e8, $10, $9e, $61, $86, $bf, $e0, $19, $2f, $61, $05, $af, $64, $1d - byte $bc, $83, $03, $8c, $f0, $91, $6e, $93, $51, $f0, $4f, $36, $c1, $11, $7a, $f8 - byte $0e, $ee, $30, $a0, $43, $df, $0a, $80, $8b, $51, $74, $82, $19, $1c, $a0, $9d - byte $6d, $00, $65, $29, $5a, $41, $fb, $86, $57, $07, $76, $70, $81, $d2, $98, $b6 - byte $c4, $59, $8e, $0b, $50, $a1, $40, $6e, $ad, $57, $b2, $0d, $16, $09, $88, $dd - - byte $3f, $08, $b4, $82, $34, $d8, $ff, $83, $28, $2c, $90, $20, $40, $34, $cc, $41 - byte $d0, $4b, $e0, $c3, $cc, $85, $c0, $e2, $52, $a3, $2a, $9d, $c1, $31, $75, $35 - byte $a2, $89, $5d, $b2, $a0, $66, $4e, $48, $90, $20, $ce, $e4, $8a, $58, $0a, $72 - byte $03, $e4, $e0, $00, $01, $3c, $78, $70, $60, $e1, $04, $cf, $70, $11, $3c, $82 - byte $63, $f0, $08, $0e, $60, $40, $c7, $c3, $68, $05, $11, $42, $70, $01, $0d, $2d - byte $5a, $85, $8b, $e0, $11, $0d, $c3, $05, $68, $50, $c1, $3d, $1a, $05, $07, $90 - byte $d1, $38, $dc, $36, $82, $72, $90, $94, $82, $7b, $95, $cc, $c2, $e0, $a2, $51 - byte $47, $ac, $83, $b9, $2b, $d8, $37, $ca, $cc, $12, $76, $6a, $d1, $9c, $4c, $95 - byte $1d, $09, $c8, $2b, $82, $0b, $a3, $86, $a6, $0c, $f8, $1b, $01, $16, $0c, $a8 - byte $e1, $f3, $76, $2c, $cd, $da, $9d, $0e, $5f, $4d, $a7, $6e, $d4, $b7, $75, $6d - byte $67, $ad, $68, $b8, $67, $21, $47, $cb, $46, $00, $fb, $88, $05, $17, $b0, $d9 - byte $30, $a9, $15, $e5, $22, $57, $79, $cb, $f8, $c7, $8e, $9b, $65, $7a, $6b, $15 - byte $47, $d8, $b9, $01, $5a, $4b, $ac, $4d, $f0, $4b, $67, $e6, $80, $0e, $15, $f2 - byte $19, $8a, $5a, $b9, $23, $1c, $fe, $05, $70, $e1, $70, $77, $c2, $8d, $13, $30 - byte $a0, $05, $cb, $57, $14, $15, $83, $35, $44, $b0, $2f, $29, $58, $45, $49, $c8 - byte $e0, $df, $2f, $9c, $8e, $01, $0d, $f2, $2f, $0f, $e2, $41, $7c, $fa, $6c, $0e - - byte $e0, $40, $01, $03, $84, $7f, $2f, $fc, $9f, $66, $50, $a5, $22, $38, $43, $8f - byte $0c, $6b, $3b, $b8, $42, $8b, $95, $60, $6f, $41, $b8, $85, $9d, $b0, $83, $43 - byte $dc, $81, $17, $5c, $fc, $83, $0e, $0e, $c0, $e2, $06, $00, $b8, $30, $33, $2c - byte $c8, $16, $b0, $07, $00, $c0, $c9, $fe, $d0, $81, $42, $86, $08, $0e, $54, $e1 - byte $f7, $0f, $15, $12, $04, $30, $a5, $3e, $08, $86, $83, $6a, $1e, $c4, $83, $78 - byte $10, $0f, $e2, $41, $3c, $88, $07, $f1, $20, $1e, $c4, $83, $78, $10, $0f, $02 - -DAT -{{ - - TERMS OF USE: MIT License - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - associated documentation files (the "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the - following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial - portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT - LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -}} -DAT diff --git a/source/boing/boing-bel-foreground.spin b/source/boing/boing-bel-foreground.spin deleted file mode 100644 index f561831..0000000 --- a/source/boing/boing-bel-foreground.spin +++ /dev/null @@ -1,505 +0,0 @@ -'' -'' VGA scanline driver 400x300 - foreground renderer -'' -'' Based on "Ball" demo for Gameduino -'' Copyright (c) 2011 by James Bowman -'' -'' Author: Marko Lukat -'' Last modified: 2012/12/24 -'' Version: 0.11 -'' -OBJ - system: "boing-bel-corecon" - -PUB null -'' This is not a top level object. - -PUB init(ID, mailbox) - - return system.launch(ID, @entry, mailbox) - -DAT org 0 ' foreground renderer - -entry jmpret $, #setup ' once - - rdlong indx, blnk ' | - cmpsub indx, scry wz ' | - if_ne jmp #$-2 ' waiting for last line to be fetched - -' Skip 26 sync lines and advance by a further 161 hub windows. This pushes an -' assumed foreground renderer hubop beyond the first video renderer line rdlong -' if it were to render scanline -1. -' After the waitcnt we have no further insns (18 + 14 = 32, 2 hub windows). - - mov cnt, cnt - add cnt, $+1 - long 13{18} + 14 + 132*16*26 + 16*(161 - 2) - -loop waitcnt cnt, eins ' initial sync point -' wrbyte indx, base ' assumed hubop - - call #pixels ' fetch foreground data (~92 hub windows) - - waitcnt cnt, zwei ' block until line is available - - rdlong bflag, bfadr wz - if_nz call #shadow ' draw shadow - cmp bflag, #0 wz - if_nz call #solid ' draw ball - - rol mask, #8 ' update shadow mask, it's unused - ' during 1st frame (msky == scry) - add indx, #1 ' line done, advance - cmpsub indx, scry wz ' optionally wrap line index - if_nz jmp #loop - -' per frame updates (during the first frame mask/shadow are off-screen) - - rdlong temp, blnk ' | - cmp temp, scry wz ' | - if_ne jmp #$-2 ' wait for ?/scry transition - - rdword mskx, crdx ' | - shl mskx, #16 ' | - sar mskx, #16 ' | - rdword msky, crdy ' | - shl msky, #16 ' | - sar msky, #16 ' update and sign-extend mask coordinates - - maxs mskx, scrx ' | - maxs msky, scry ' reasonable limit(s) (off-screen) - - mov shdx, mskx ' | - add shdx, #SOFFX ' | - mov shdy, msky ' | - add shdy, #SOFFY ' apply shadow offset(s) - - mov mskc, msky ' | - add mskc, #BSIZE -1 ' | - mov shdc, shdy ' | - add shdc, #BSIZE -1 ' bounding box setup - - long $00FF00FF ' | - mov mask, $-1 ' reset shadow mask (scry == 2n+?) - -eins long 100*16 ' initial line fetch -zwei long 164*16 ' remainder of two scan lines -drei long 132*16*28 ' skip all sync lines - - add cnt, drei - jmp #loop - -' support code - -pixels rdlong addr, feed wz ' get current buffer address - - if_z mov msky, scry ' move off-screen (disabled) - if_z jmp pixels_ret ' early exit - - mov ecnt, #BSIZE/4 - movd :set, #data - - mov temp, mskx ' | - and temp, #%11 wz ' observe alignment - - shl temp, #3 ' [4..0]: 24/16/8/0 - movs :two, temp - neg temp, temp ' [4..0]: 8/16/24/0 - movs :one, temp - - if_nz add ecnt, #1 ' need to process one more long - if_nz sub addr, #4 ' starting with addr[-1] - -:loop rdlong arg0, addr ' +0 = 00: DDCCBBAA, 01: ------DD - add addr, #4 ' +8 10: ----DDCC, 11: --DDCCBB - if_z jmp #:set ' -4 faster if aligned - - rdlong arg1, addr ' +0 = 00: n/a, 01: CCBBAA-- -:two shl arg1, #0-0 ' +8 10: BBAA----, 11: AA------ -:one shr arg0, #0-0 ' -4 - or arg0, arg1 ' +0 = - -:set mov 0-0, arg0 ' +4 - add $-1, dst1 ' +8 - - djnz ecnt, #:loop ' -4 - -pixels_ret ret - -solid cmps indx, msky wc ' | - if_nc cmps mskc, indx wc ' | - if_c jmp solid_ret ' vertical bounds check - - mov temp, indx - sub temp, msky - cmp temp, #BSIZE/2 wc - if_nc neg temp, temp - if_nc add temp, #BSIZE-1 - add temp, #table ' offset into table - - movs $+2, temp - neg arg2, #1 ' pipeline - mov arg0, 0-0 ' fetch offset/length pair - - mov arg1, arg0 - shr arg1, #16 wz ' length - - and arg0, #511 ' relative offset - add arg0, mskx ' absolute offset - - add arg2, arg0 ' | - add arg2, arg1 ' right side inclusive - - cmps arg2, #0 wc - if_nc cmps scrc, arg0 wc ' | - if_z_or_c jmp solid_ret ' horizontal bounds check - - cmps arg0, #0 wc ' | - if_c subabs arg1, arg0 ' | - if_c mov arg0, #0 ' clipped left - - cmps scrc, arg2 wc ' | - if_c mov arg1, scrx ' | - if_c sub arg1, arg0 ' clipped right side - -' arg0..(arg0+arg1-1) fits into the scanline buffer, draw the line - - mov addr, base - add addr, arg0 ' @byte[base][arg0] - - mov arg2, mskx ' | - and arg2, #%11 ' | - add arg2, arg0 ' | - sub arg2, mskx ' byte offset into data array - - shr arg1, #2 wz,nr ' special code for 1..3 - if_nz jmpret zero, #:full wc,nr ' carry set if taken (##) - - ' do an unaligned load - - mov arg0, arg2 ' remember for byte alignment - - shr arg2, #2 ' long offset - add arg2, #data ' long address - - movs $+2, arg2 - add arg2, #1 ' pipeline - mov arg3, 0-0 ' load 1st long - movs $+2, arg2 - test arg0, #%11 wz ' pipeline - mov arg2, 0-0 ' load 2nd long - - if_nz shl arg0, #3 ' 00: DDCCBBAA, 01: --DDCCBB - if_nz shr arg3, arg0 ' 10: ----DDCC, 11: ------DD - if_nz neg arg0, arg0 ' 00: n/a, 01: AA------ - if_nz shl arg2, arg0 ' 10: BBAA----, 11: CCBBAA-- - if_nz or arg3, arg2 ' combine both longs - - wrbyte arg3, addr - add addr, #1 - shr arg3, #8 - djnz arg1, #$-3 ' relaxed @ 2 hub windows/byte - - jmp solid_ret - -' length is prefix + 4n + suffix, split up and deal with it - -:full shr arg2, #2 ' long offset - add arg2, #data ' long address - - neg ecnt, arg0 ' 0123 >> 0321 - and ecnt, #%11 wz ' pixels in prefix - sub arg1, ecnt ' update length - if_z jmp #:core - - ' handle prefix - - shl arg0, #3 ' 1..3 >> 8..24 - rcr ecnt, arg0 ' create reverse mask (##) - - movs $+2, arg2 ' prefix data - rev ecnt, #0 ' adjust - - mov arg3, 0-0 ' | - andn arg3, ecnt ' only keep masked data - - rdlong quad, addr - and quad, ecnt - or quad, arg3 ' combine with background - wrlong quad, addr - - add arg2, #1 ' advance src - add addr, #4 ' advance dst - andn addr, #%11 ' | - - ' handle 4 - -:core test arg1, #%100 wz - if_nz movd $+2, arg2 - if_nz sub arg1, #4 ' update length - if_nz wrlong 0-0, addr - if_nz add addr, #4 ' advance dst - if_nz add arg2, #1 ' advance src - - ' handle 8n - - mov ecnt, arg1 ' remember for tail (%-??) - shr arg1, #3 wz ' check 8n count - if_z jmp #:suffix ' skip body - - mov frqb, addr - shr frqb, #1{/2} - - add arg2, arg1 ' | - add arg2, arg1 ' advance src - - movd :one, arg2 - sub :one, dst1 ' data[n][-1] - movd :two, arg2 - sub :two, dst2 ' data[n][-2] - - mov phsb, arg1 - shl phsb, #3 - mov addr, phsb ' advance dst - sub phsb, #1 ' 8n - 1 - -:one wrlong 0-0, phsb - sub $-1, dst2 - sub phsb, #7 wz -:two wrlong 0-0, phsb - sub $-1, dst2 - if_nz djnz phsb, #:one - - ' handle suffix - -:suffix and ecnt, #%11 wz ' suffix (unaligned) - if_z jmp solid_ret ' early exit - - shl ecnt, #3 ' 1..3 >> 8..24 - neg arg1, #1 ' create mask - - movs $+2, arg2 ' suffix data - shl arg1, ecnt ' adjust - - mov arg3, 0-0 ' | - andn arg3, arg1 ' only keep masked data - - rdlong quad, addr - and quad, arg1 - or quad, arg3 ' combine with background - wrlong quad, addr - -solid_ret ret - -shadow cmps indx, shdy wc ' | - if_nc cmps shdc, indx wc ' | - if_c jmp shadow_ret ' vertical bounds check - - mov temp, indx - sub temp, shdy - cmp temp, #BSIZE/2 wc - if_nc neg temp, temp - if_nc add temp, #BSIZE-1 - add temp, #table ' offset into table - - movs $+2, temp - neg arg2, #1 ' pipeline - mov arg0, 0-0 ' fetch offset/length pair - - mov arg1, arg0 - shr arg1, #16 wz ' length - - and arg0, #511 ' relative offset - add arg0, shdx ' absolute offset - - add arg2, arg0 ' | - add arg2, arg1 ' right side inclusive - - cmps arg2, #0 wc - if_nc cmps scrc, arg0 wc ' | - if_z_or_c jmp shadow_ret ' horizontal bounds check - - cmps arg0, #0 wc ' | - if_c subabs arg1, arg0 ' | - if_c mov arg0, #0 ' clipped left - - cmps scrc, arg2 wc ' | - if_c mov arg1, scrx ' | - if_c sub arg1, arg0 ' clipped right side - -' arg0..(arg0+arg1-1) fits into the scanline buffer, draw the line - - mov addr, base - add addr, arg0 ' @byte[base][arg0] - - shr arg1, #2 wz,wc,nr ' special code for 1..3 - if_nz jmpret zero, #:full wc,nr ' carry set if taken (##) - - test arg0, #1 wz - if_nz rol mask, #8 ' odd bytes only - - rdbyte quad, addr - and quad, mask - rol mask, #8 - wrbyte quad, addr - add addr, #1 - djnz arg1, #$-5 - - if_c_eq_z rol mask, #8 ' restore mask - - jmp shadow_ret - -:full neg ecnt, arg0 ' 0123 >> 0321 - and ecnt, #%11 wz ' pixels in prefix - sub arg1, ecnt ' update length - if_z jmp #:core - - shl arg0, #3 ' 1..3 >> 8..24 - rcr ecnt, arg0 ' create reverse mask (##) - rev ecnt, #0 ' adjust - - rdlong quad, addr - or ecnt, mask ' add shadow mask - and quad, ecnt - wrlong quad, addr - - add addr, #4 -'{rd/wrlong} andn addr, #%11 - -:core mov ecnt, arg1 ' remember for tail (%-??) - shr arg1, #2 wz ' check long count - if_z jmp #:tail ' skip body - - rdlong quad, addr - and quad, mask - cmp arg1, #1 wz - wrlong quad, addr - add addr, #4 - if_nz djnz arg1, #$-5 - -:tail and ecnt, #%11 wz ' suffix (unaligned) - if_z jmp shadow_ret ' early exit - - shl ecnt, #3 ' 1..3 >> 8..24 - neg arg1, #1 ' | - shl arg1, ecnt ' protect unused pixels - rdlong quad, addr - or arg1, mask ' add shadow mask - and quad, arg1 - wrlong quad, addr - -shadow_ret ret - -' initialised data and/or presets - -table word 48, 16, 43, 26, 39, 34, 36, 40, 34, 44, 32, 48, 30, 52, 28, 56 - word 26, 60, 25, 62, 23, 66, 22, 68, 21, 70, 19, 74, 18, 76, 17, 78 - word 16, 80, 15, 82, 14, 84, 13, 86, 13, 86, 12, 88, 11, 90, 10, 92 - word 10, 92, 9, 94, 8, 96, 8, 96, 7, 98, 7, 98, 6, 100, 6, 100 - word 5, 102, 5, 102, 4, 104, 4, 104, 3, 106, 3, 106, 3, 106, 2, 108 - word 2, 108, 2, 108, 2, 108, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110 - word 0, 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, 112, 0, 112 - -feed long -12 ' | -crdx long -8 ' | -crdy long -6 ' | - ' quick access relative to par -blnk long -4 ' | -base long NEGX ' | - -dst1 long 1 << 9 ' dst +/-= 1 -dst2 long 2 << 9 ' dst +/-= 2 - -scrc long 399 ' upper limit (inclusive) -scrx long 400 - -bfadr long 448 -bflag long 0 - -' Stuff below is re-purposed for temporary storage. - -setup add crdx, par ' mask coordinates (%%) - add crdy, par ' | - add feed, par ' mask buffer location - - add base, par ' scanline buffer - add blnk, base wc ' frame indicator - - rdword indx, blnk wz ' (%%) - if_nz mov scry, indx wc ' (%%) - if_c_or_nz jmp #$-2 ' auto-detect res_y - -' The loop is only left once a non-zero value has been written to scry -' and indx transitions to zero afterwards. - - mov msky, scry ' move off-screen - mov shdy, scry ' | - - movi ctrb, #%0_11111_000 ' LOGIC always (loader support) - - add bfadr, par - jmp %%0 ' return - - fit - -' uninitialised data and/or temporaries - - org setup - -scry res 1 ' must be 1st..5th (%%) -indx res 1 ' | - -addr res 1 ' scanline reference -ecnt res 1 ' element count - -mask res 1 ' shadow mask - -mskc res 1 ' upper limit (inclusive) -mskx res 1 ' mask coordinates -msky res 1 ' signed 16bit - -shdc res 1 ' upper limit (inclusive) -shdx res 1 ' shadow coordinates -shdy res 1 ' signed 16bit - -arg0 res 1 -arg1 res 1 -arg2 res 1 -arg3 res 1 - -temp res 1 -quad res 1 - -data res BSIZE/4 +1{unaligned} - -tail fit - -CON - zero = $1F0 ' par (dst only) - - BSIZE = 112 ' mask width/height (4n) - SOFFX = 15 ' | - SOFFY = 15 ' shadow offset - -DAT -{{ - - TERMS OF USE: MIT License - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - associated documentation files (the "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the - following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial - portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT - LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -}} -DAT diff --git a/source/boing/boing-bel.spin b/source/boing/boing-bel.spin deleted file mode 100644 index cdb4586..0000000 --- a/source/boing/boing-bel.spin +++ /dev/null @@ -1,286 +0,0 @@ -'' -'' VGA scanline driver 400x300 - demo -'' -'' Based on "Ball" demo for Gameduino -'' Copyright (c) 2011 by James Bowman -'' -'' Author: Marko Lukat -'' Last modified: 2012/12/24 -'' Version: 0.10 -'' -'' A few notes on timing. A (double) scan line lasts 2*(100+32) hub windows. -'' The background renderer fills the scan line as soon as the video driver -'' has read the relevant quad. At the same time the foreground renderer -'' fetches its data line. -'' -'' +-- video driver reads line N -'' +-- background renderer fills line N+1 -'' +-- foreground renderer fetches data for line N+1 -'' | -'' | +-- scanline N completely fetched -'' | +-- background renderer idle -'' | visible line area +-- foreground renderer draws shadow and ball -'' | | -'' ----------- 100 -----------#---32--- -'' ----------- 100 -----------+---32--- -'' ----------- 100 -----------#---32--- -'' | -'' +-- video driver reads line N+1 -'' -CON - _clkmode = XTAL1|PLL16X - _xinfreq = 5_000_000 - -CON - res_x = driver#res_x - res_y = driver#res_y - -OBJ - driver: "boing-bel-driver" - - back: "boing-bel-background" - ball: "boing-bel-foreground" - anim: "boing-bel-feeder" - - keyb: "bel-keyb" - gcon: "glob-con" - -VAR - long feeder ' @scan[-3] - long coordinates ' @scan[-2] - long frame ' @scan[-1] - long scan[res_x / 4] - long grid[12] - long bflag - -PUB main | cmd - - init -' boing - - repeat - case gc - 1: pc(keyb.gotkey) 'tastaturstatus senden - 2: pc(keyb.key) 'tastaturzeichen senden - 3: coordinates.word[0] := gw - coordinates.word[1] := gw - 4: waitVBL - 5: boing - 6: bars{gc,gc,gc} - 7: grid_on - 8: grid_off - 9: show_on - 10: bar_on - 11: bflag := gc - 12: grid[gc] := gw - 99: reboot - -PRI init - - dira := db_in ' datenbus auf eingabe schalten - outa[gcon#bus_hs] := 1 ' handshake inaktiv - keyb.start(gcon#b_keybd, gcon#b_keybc) ' tastaturport starten - driver.init(-1, @scan{0}) ' scanline driver - back.init(-1, @scan{0}) ' background - ball.init(-1, @scan{0}) ' foreground - anim.init(-1, @scan{0}) ' image feeder - grid_on - bflag := 0 - anim.uncompress(FALSE) ' uncompress image - - -CON ''------------------------------------------------- SUBPROTOKOLL-FUNKTIONEN - -' hbeat --------+ -' clk -------+| -' /wr ------+|| -' /hs -----+||| +------------------------- /cs -' |||| | -------- d0..d7 -DB_IN = %00001001_00000000_00000000_00000000 'maske: dbus-eingabe -DB_OUT = %00001001_00000000_00000000_11111111 'maske: dbus-ausgabe - -M1 = %00000010_00000000_00000000_00000000 -M2 = %00000010_10000000_00000000_00000000 'busclk=1? & /cs=0? - -M3 = %00000000_00000000_00000000_00000000 -M4 = %00000010_00000000_00000000_00000000 'busclk=0? - -PUB pc(zeichen) 'chip: ein byte an regnatix senden -''funktionsgruppe : chip -''funktion : ein byte an regnatix senden -''eingabe : byte -''ausgabe : - - - waitpeq(M1,M2,0) 'busclk=1? & prop2=0? - dira := db_out 'datenbus auf ausgabe stellen - outa[7..0] := zeichen 'daten ausgeben - outa[gcon#bus_hs] := 0 'daten gültig - waitpeq(M3,M4,0) 'busclk=0? - dira := db_in 'bus freigeben - outa[gcon#bus_hs] := 1 'daten ungültig - -PUB gc:zeichen 'chip: ein byte von regnatix empfangen -''funktionsgruppe : chip -''funktion : ein byte von regnatix empfangen -''eingabe : - -''ausgabe : byte - - waitpeq(M1,M2,0) 'busclk=1? & prop2=0? - zeichen := ina[7..0] 'daten einlesen - outa[gcon#bus_hs] := 0 'daten quittieren - waitpeq(M3,M4,0) 'busclk=0? - outa[gcon#bus_hs] := 1 - - -PUB pw(wert) 'sub: word senden -''funktionsgruppe : sub -''funktion : subprotokoll um einen long-wert an regnatix zu senden -''eingabe : 16bit wert der gesendet werden soll -''ausgabe : - -''busprotokoll : [put.byte1][put.byte2] -'' : [ hsb ][ ] - - pc(wert >> 8) - pc(wert) - -PUB gw:wert 'sub: word empfangen -''funktionsgruppe : sub -''funktion : subprotokoll um einen 16bit-wert von regnatix zu empfangen -''eingabe : - -''ausgabe : 16bit-wert der empfangen wurde -''busprotokoll : [get.byte1][get.byte2] -'' : [ hsb ][ lsb ] - - wert := gc << 8 - wert := wert + gc - -PUB gl:wert 'sub: long empfangen -''funktionsgruppe : sub -''funktion : subprotokoll um einen long-wert von regnatix zu empfangen -''eingabe : - -''ausgabe : 32bit-wert der empfangen wurde -''busprotokoll : [get.byte1][get.byte2][get.byte3][get.byte4] -'' : [ hsb ][ ][ ][ lsb ] - - wert := gc << 24 '32 bit empfangen hsb/lsb - wert := wert + gc << 16 - wert := wert + gc << 8 - wert := wert + gc - -CON ''------------------------------------------------- DEMO-FUNKTIONEN - LBASE = 0 - RBASE = res_x - ball#BSIZE - YBASE = res_y - ball#BSIZE - - MBAR = %00000000_11111111 - BLINE = 1 - -PRI boing : r | bx, by, bxv, byv - - bx := 0 - by := 0 - bxv := 2 - byv := 1 - - repeat - bx += bxv - by += byv - - if bx < LBASE - bx := constant(2*LBASE) - bx - -bxv - - if bx > RBASE - bx := constant(2*RBASE) - bx - -bxv - - if by > YBASE - by := constant(2*YBASE) - by - -byv - - ifnot ++r & 7 ' add some gravity - byv++ - - repeat 1 - waitVBL - coordinates.word{0} := bx ' | - coordinates.word[1] := by ' update coordinates - -PRI bars - - grid[BLINE ] := bar(gc) - grid[BLINE+2] := bar(gc) - grid[BLINE+4] := bar(gc) - -PRI bar(level):b - - b := MBAR - b := !(b >> (level & 7)) & MBAR - b := b | b >< 16 - -PRI grid_on|i - - repeat i from 0 to 11 - grid[i] := 0 - -PRI grid_off|i - - repeat i from 0 to 11 - grid[i] := $FFFF - -PRI show_on|i,n - - n := %00000000_11111111 - - repeat 19 - repeat i from 11 to 0 - grid[i] := grid[i-1] - n := n >> 1 - grid[0] := n | n >< 16 - waitcnt(cnt + clkfreq/30) - -PRI bar_on - - bar_up(BLINE ) - waitcnt(cnt + clkfreq/3) - bar_up(BLINE+2) - waitcnt(cnt + clkfreq/3) - bar_up(BLINE+4) - waitcnt(cnt + clkfreq/3) - -PRI bar_up(upline)|i - - repeat i from 11 to upline - grid[(i+1) <# 11] := 0 - grid[i] := %00000111_11100000 - waitcnt(cnt+clkfreq/20) - -PRI waitVBL - - repeat - until frame == res_y ' last line has been fetched - repeat - until frame <> res_y ' vertical blank starts (res_y/0 transition) - -DAT -{{ - - TERMS OF USE: MIT License - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - associated documentation files (the "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the - following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial - portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT - LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -}} -DAT diff --git a/source/boing/boing-reg.spin b/source/boing/boing-reg.spin deleted file mode 100644 index f1fe188..0000000 --- a/source/boing/boing-reg.spin +++ /dev/null @@ -1,272 +0,0 @@ -{{ - -}} - -OBJ - ios: "reg-ios" - -CON - -_CLKMODE = XTAL1 + PLL16X -_XINFREQ = 5_000_000 - -SIDMASK = %00000000_00000000_00000000_00010000 - -VAR - - long dmpreg - long fcnt - long fpos - long datcnt 'zeiger für dateiliste - byte fl_bye 'flag player beenden - byte fn[12] 'puffer für dateinamen - long dmu 'marker des aktuellen userverzeichnisses - long bx,by,bxv,byv - -PUB main | key - - ios.start - - ios.belload(string("boing.bel")) - ios.sdclose - - ifnot (ios.admgetspec & SIDMASK) - ios.sddmset(ios#DM_USER) 'u-marker setzen - dmu := ios.sddmget(ios#DM_USER) 'usermarker von administra holen - ios.admload(string("boing.adm")) - ios.sddmput(ios#DM_USER,dmu) 'usermarker wieder in administra setzen - ios.sddmact(ios#DM_USER) 'u-marker aktivieren - - play_count - repeat - intro - \boing(string("boing.sid")) - play_dir - - ios.belreset - ios.admreset - waitcnt(cnt+clkfreq*2) - ios.stop - -PRI esc_key - - if ios.g0_keystat - case ios.g0_keycode - 27: - 'ESC - geordneter rücksturz zur erde... :) - ios.sid_dmpstop 'ok, erstmal die mucke aus - ios.sid_mute(3) - ios.belreset - ios.sddmset(ios#DM_USER) 'u-marker setzen - dmu := ios.sddmget(ios#DM_USER) 'usermarker von administra holen - ios.admreset - waitcnt(cnt+clkfreq*2) - ios.sddmput(ios#DM_USER,dmu) 'usermarker wieder in administra setzen - ios.sddmact(ios#DM_USER) 'u-marker aktivieren - credits - ios.stop - "n": - ios.sid_dmpstop - ios.sid_mute(3) - abort - "p": - ios.sid_dmppause - -PRI credits - - ios.curoff - ios.printcls - ios.printnl - ios.print(string("Bouncing Ball for Hive - 2013 ",$0d,$0d)) - ios.print(string("Graphics-Code : kuroneko",$0d)) - ios.print(string("SidCog : Ahle2 ",$0d)) - ios.print(string("Hive-Code : drohne235",$0d,$0d)) - - ios.curon - -CON 'sd-player -PRI play_dir|stradr,len,i 'alle songs auf der sd-card abspielen - - datcnt := 0 'zum listenanfang - repeat i from 0 to fcnt-1 'dateiliste abspielen - fpos := i + 1 - play_dir_rdlst(@fn) - \boing(@fn) - -PRI play_count|stradr,i - - ios.sddir 'kommando: verzeichnis öffnen - datcnt := 0 'zum listenanfang - fcnt := 0 'zähler für dateianzahl - fl_bye := 0 - repeat while (stradr := ios.sdnext) 'dateiliste einlesen - if str_find(stradr,string(".DMP")) - fcnt++ - play_dir_wrlst(stradr) - -PRI play_dir_wrlst(stradr)|len,i 'kopiert dateinamen in liste - len := strsize(stradr) - repeat i from 0 to len-1 - ios.ram_wrbyte(ios#usrmod,byte[stradr][i],datcnt++) - ios.ram_wrbyte(ios#usrmod,0,datcnt++) - -PRI play_dir_rdlst(stradr)|i,n 'liest dateinamen aus list - i := 0 - repeat - n := ios.ram_rdbyte(ios#usrmod,datcnt++) - byte[stradr][i++] := n - while n <> 0 - -PRI str_find(string_1, string_2) : buffer | counter 'sys: string suchen - -'' ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -'' │ Searches a string of characters for the first occurence of the specified string of characters. │ -'' │ │ -'' │ Returns the address of that string of characters if found and zero if not found. │ -'' │ │ -'' │ string1 - A pointer to the string of characters to search. │ -'' │ string2 - A pointer to the string of characters to find in the string of characters to search. │ -'' └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - - repeat strsize(string_1--) - - if(byte[++string_1] == byte[string_2]) - - repeat counter from 0 to (strsize(string_2) - 1) - - if(byte[string_1][counter] <> byte[string_2][counter]) - buffer~~ - - ifnot(buffer~) - return string_1 - -CON - - res_x = 400 - res_y = 300 - - LBASE = 0 - RBASE = res_x - 112 - YBASE = res_y - 112 - - LSHIFT = 8 - -PRI intro - - ball_on(0) - grid_on - pause(3) - bar_on - pause(3) - -PRI boing(stradr)|r,b1,b2,b3,status - - bx := 0 - by := 0 - bxv := 2 - byv := 1 - ball_on(1) - ios.sid_mdmpplay(stradr) ' läuft auf sid2 - repeat - bx += bxv - by += byv - if bx < LBASE - bx := constant(2*LBASE) - bx - -bxv - if bx > RBASE - bx := constant(2*RBASE) - bx - -bxv - if by > YBASE - by := constant(2*YBASE) - by - -byv - ifnot ++r & 7 ' add some gravity - byv++ - status := ios.sid_dmpstatus 'playerstatus abfragen - dmpreg := ios.sid_dmpreg - b1 := (word[dmpreg + 0]>>LSHIFT) #> 1 - b2 := (word[dmpreg + 2]>>LSHIFT) #> 1 - b3 := (word[dmpreg + 4]>>LSHIFT) #> 1 - bars(b1,b2,b3) - setBall(bx,by) - esc_key - waitVBL - while status - ios.sid_dmpstop - -PRI keystat : char - - ios.bus_putchar2(1) - return ios.bus_getchar2 - -PRI waitVBL - - ios.bus_putchar2(4) - -PRI setBall(x,y) - - ios.bus_putchar2(3) - ios.bus_putword2(x) - ios.bus_putword2(y) - -PRI boing_test - - ios.bus_putchar2(5) - -PRI bars(b1,b2,b3) - - ios.bus_putchar2(6) - ios.bus_putchar2(b1) - ios.bus_putchar2(b2) - ios.bus_putchar2(b3) - -PRI grid_on - - ios.bus_putchar2(7) - -PRI grid_off - - ios.bus_putchar2(8) - -PRI show_on - - ios.bus_putchar2(9) - -PRI bar_on - - ios.bus_putchar2(10) - -PRI ball_on(bflag) - - ios.bus_putchar2(11) - ios.bus_putchar2(bflag) - -PRI grid(line,val) - - ios.bus_putchar2(3) - ios.bus_putword2(line) - ios.bus_putword2(val) - -PRI pause(sec) - - waitcnt(cnt + clkfreq * sec) - -DAT - -{{ - -┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ TERMS OF USE: MIT License │ -├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ -│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ -│files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ -│modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ -│is furnished to do so, subject to the following conditions: │ -│ │ -│The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ -│ │ -│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ -│WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ -│COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ -│ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -}} diff --git a/source/boing/boing.sid b/source/boing/boing.sid deleted file mode 100644 index 14392677f92161227a5d2a9772936470055d6060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289000 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 hrlsGJM7seeO=5(=Ab@YTcN boing.sid -boing-adm.spin --> boing.adm -boing-bel.spin --> boing.bel -boing-reg.spin --> boing.bin (startdatei) - -- alle dateien müssen sich in einem verzeichis befinden -- weitere dmp-dateien werden wie in einem player abgespielt - -tastencodes ------------ - -[n] - nächster titel -[p] - pause -[esc] - programmende