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 1439267..0000000 Binary files a/source/boing/boing.sid and /dev/null differ diff --git a/source/boing/boing.txt b/source/boing/boing.txt deleted file mode 100644 index dea5abe..0000000 --- a/source/boing/boing.txt +++ /dev/null @@ -1,20 +0,0 @@ -Bing Demo -========= - -Sourcen -------- - -boing.sid --> 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