├── 4k ├── CompileWordCode.S ├── tree.dat ├── GenerateWordCode.S ├── LnsFMsynth2.S ├── Particles.S ├── constantpool.dat ├── Chunky.S ├── Waves.S ├── Constants.S ├── Palette.S ├── C2P1x1x8Half.S ├── Screen8bit.S ├── Main.S ├── Interpreter.S ├── WordCode.S ├── System.S └── Music.S ├── LICENSE.md ├── README.md └── C ├── interpreter.c └── musicdata.c /4k/CompileWordCode.S: -------------------------------------------------------------------------------- 1 | 2 | WC_INCLUDED = 1 3 | 4 | include 4k:WordCode.S 5 | -------------------------------------------------------------------------------- /4k/tree.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/askeksa/Ikadalawampu/HEAD/4k/tree.dat -------------------------------------------------------------------------------- /4k/GenerateWordCode.S: -------------------------------------------------------------------------------- 1 | 2 | WC_INCLUDED = 10 3 | 4 | include 4k:WordCode.S 5 | -------------------------------------------------------------------------------- /4k/LnsFMsynth2.S: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/askeksa/Ikadalawampu/HEAD/4k/LnsFMsynth2.S -------------------------------------------------------------------------------- /4k/Particles.S: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/askeksa/Ikadalawampu/HEAD/4k/Particles.S -------------------------------------------------------------------------------- /4k/constantpool.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/askeksa/Ikadalawampu/HEAD/4k/constantpool.dat -------------------------------------------------------------------------------- /4k/Chunky.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | include 4k:System.S 4 | 5 | ONCE Chunky 6 | 7 | SCREENWIDTH = 320 8 | SCREENHEIGHT = 200 9 | 10 | SCREENSIZE = SCREENWIDTH*SCREENHEIGHT 11 | 12 | FastField Chunky,SCREENSIZE*2 13 | 14 | endc 15 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | ## The zlib/libpng License ## 2 | 3 | Copyright (c) 2010 Aske Simon Christensen 4 | 5 | This software is provided 'as-is', without any express or implied warranty. In 6 | no event will the authors be held liable for any damages arising from the use of 7 | this software. 8 | 9 | Permission is granted to anyone to use this software for any purpose, including 10 | commercial applications, and to alter it and redistribute it freely, subject to 11 | the following restrictions: 12 | 13 | 1. The origin of this software must not be misrepresented; you must not claim 14 | that you wrote the original software. If you use this software in a product, 15 | an acknowledgment in the product documentation would be appreciated but is 16 | not required. 17 | 18 | 2. Altered source versions must be plainly marked as such, and must not be 19 | misrepresented as being the original software. 20 | 21 | 3. This notice may not be removed or altered from any source distribution. 22 | -------------------------------------------------------------------------------- /4k/Waves.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | include 4k:System.S 4 | 5 | ONCE Waves 6 | 7 | INCFILE 8 | 9 | include 4k:Constants.S 10 | 11 | WAVELENGTH = 65536 12 | 13 | FastField SquareWave,WAVELENGTH*4 14 | FastField SawWave,WAVELENGTH*4 15 | FastField SineWave,WAVELENGTH*4 16 | FastField NoiseWave,WAVELENGTH*4 17 | 18 | PRECALC 19 | 20 | MakeWaves: 21 | baselea SquareWave,a0 22 | baselea SawWave,a1 23 | baselea SineWave,a2 24 | baselea NoiseWave,a3 25 | datalea Constants,a6 26 | fmove.s c_Dummy3(a6),fp3 27 | fmove.s c_2_wave(a6),fp4 28 | fmove.s c_2_pi_wave(a6),fp5 29 | fmove.s c_pi(a6),fp6 30 | fmove.s c_FloatOne(a6),fp7 31 | move.l #WAVELENGTH-1,d7 32 | .loop: fmove.l d7,fp1 33 | fmove.l d7,fp2 34 | fadd fp4,fp3 35 | fmul fp4,fp1 36 | fmul fp5,fp2 37 | fmul fp6,fp3 38 | fsin fp2 39 | fsin fp3 40 | fmove fp7,fp0 41 | fsub fp7,fp1 42 | tst.w d7 43 | bmi.w .half 44 | fneg fp0 45 | .half: 46 | fmove.s fp0,(a0,d7.l*4) 47 | fmove.s fp1,(a1,d7.l*4) 48 | fmove.s fp2,(a2,d7.l*4) 49 | fmove.s fp3,(a3,d7.l*4) 50 | 51 | dbf d7,.loop 52 | 53 | endc 54 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Ikadalawampu by Loonies ## 2 | 3 | This repository contains the source code and data files for the Amiga 4k intro [Ikadalawampu](https://www.pouet.net/prod.php?which=54561), which was released at Breakpoint 2010, winning the Amiga 4k intro competition. It is, as of May 2022, still the highest rated Amiga AGA 4k intro [on Pouet](https://www.pouet.net/toplist.php?type=4k&platform=71&limit=10&days=0). 4 | 5 | ### How to build ### 6 | 7 | 1. Assign `4k:` to the `4k` directory. 8 | 2. Load [`4k:Main.S`](4k/Main.S) into AsmPro. 9 | 3. Follow the instructions in that file to produce an executable. 10 | 4. Compress the executable using [Shrinkler](https://github.com/askeksa/Shrinkler) `--hunkmerge --mini` (or another cruncher that supports hunk merging). 11 | 12 | ### The bytecode interpreter ### 13 | 14 | All effects in the intro are constructed via a bytecode script, contained in the two data files [`tree.dat`](4k/tree.dat) and [`constantpool.dat`](4k/constantpool.dat). The bytecodes are interpreted by the intro code at runtime, using note data from the music to synchronize the effects to the music. The [`C`](C) directory contains a C port of the interpreter (and music data), which is likely easier to read (for understanding the bytecode semantics) than the assembly code. 15 | -------------------------------------------------------------------------------- /4k/Constants.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | include 4k:System.S 4 | 5 | ONCE Constants 6 | 7 | INCFILE 8 | 9 | rsreset 10 | c_Detune1Fac rs.l 1 11 | c_Detune2Fac rs.l 1 12 | c_IndexSprFac rs.l 1 13 | c_PitchDecayFac rs.l 1 14 | c_Dummy1 rs.l 1 15 | c_OneTwelfth rs.l 1 16 | c_Dummy2 rs.l 1 17 | c_Dummy3 rs.l 1 18 | ;c_2_pi_degrees rs.l 1 19 | c_2_wave rs.l 1 20 | c_2_pi_wave rs.l 1 21 | c_pi rs.l 1 22 | c_FloatOne rs.l 1 23 | c_SustainFac rs.l 1 24 | c_BaseNote rs.l 1 25 | c_IndexFac rs.l 1 26 | c_ToFixFac rs.l 1 27 | c_CurvFac rs.l 1 28 | ;c_PulsePeakRec rs.l 1 29 | ;c_PulseFreq rs.l 1 30 | c_Wavelength rs.l 1 31 | c_ColorFac rs.l 1 32 | c_ColorFalloff rs.l 1 33 | 34 | DATA 35 | Constants: 36 | dc.s 1.0/4.0/32768.0 37 | dc.s 1.0/4.0/32768.0 38 | dc.s 65536.0/12.0/32768.0 39 | dc.s (1.0/512.0/512.0) 40 | dc.s (1.0/512.0/512.0) 41 | dc.s 1.0/12.0 42 | dc.s 1.0/12.0 43 | dc.s 1.0/12.0 44 | ; dc.s 2*3.14159265358979/4096 45 | dc.s 2.0/65536.0 46 | dc.s 2*3.14159265358979/65536.0 47 | dc.s 3.14159265358979 48 | dc.s 1.0 49 | dc.s 1.0/32.0 50 | dc.s 4.68299152 ; C0 51 | dc.s 65536.0/12.0 52 | dc.s 128.0 53 | dc.s 64.0*32768.0 54 | ; dc.s 1.0/8.0/2 55 | ; dc.s 2*3.14159265358979/10/2 56 | dc.s 65536.0 57 | dc.s 60.0 58 | dc.s 0.94921875 59 | 60 | endc 61 | -------------------------------------------------------------------------------- /4k/Palette.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | include 4k:System.S 4 | 5 | ONCE Palette 6 | 7 | INCFILE 8 | 9 | FastField PalTemp, 3*16+1 10 | FastSpace 32 11 | FastField PalTemp2, 3*256+1 12 | 13 | ; include 4k:Scripting.S 14 | 15 | CODE 16 | 17 | ; moveq.l #0*2,d0 18 | ; moveq.l #1*2,d1 19 | ; moveq.l #30,d2 20 | 21 | MakePalette macro 22 | ; D0 = Pal 0 23 | ; D1 = Pal 1 24 | ; D2 = Weight 25 | ; A5 = Dest 26 | baselea PalTemp2,a3 27 | add.l d0,d0 28 | add.l d1,d1 29 | add.l d2,d2 30 | move.l #0,d3 ; Color component shift 31 | .comploop: datalea PalColors,a1 32 | lea.l 8(a1,d0.l*4),a0 33 | lea.l 8(a1,d1.l*4),a1 34 | moveq.l #3,d4 ; Color corner 35 | .cornloop: move.w -(a0),d5 36 | move.w -(a1),d6 37 | lsr.w d3,d5 38 | lsr.w d3,d6 39 | lsl.b #4,d5 40 | lsl.b #4,d6 41 | move.b d6,-(a3) 42 | move.b d5,-(a3) 43 | dbf d4,.cornloop 44 | addq.w #4,d3 45 | cmp.w #12,d3 46 | blt.b .comploop 47 | 48 | move.l a3,a1 49 | move.l a3,a0 50 | moveq.l #1,d0 51 | moveq.l #3*4,d1 52 | moveq.l #1,d4 53 | bsr.w Interpolate 54 | 55 | baselea PalTemp,a1 56 | move.l a3,a0 57 | moveq.l #1,d0 58 | moveq.l #3*2,d1 59 | moveq.l #0,d2 60 | moveq.l #17,d3 61 | moveq.l #16,d4 62 | bsr.w Interpolate 63 | 64 | baselea PalTemp,a0 65 | move.l a5,a1 66 | moveq.l #16,d0 67 | moveq.l #3,d1 68 | moveq.l #0,d2 69 | moveq.l #17,d3 70 | moveq.l #16,d4 71 | bsr.w Interpolate 72 | ; rts 73 | endm 74 | 75 | Interpolate: 76 | ; A0 = Source 77 | ; A1 = Dest 78 | ; D0 = Block size 79 | ; D1 = Num of blocks 80 | ; D2 = Inter start 81 | ; D3 = Inter step 82 | ; D4 = Inter num 83 | 84 | mulu.w d0,d1 85 | lea.l (a0,d1.l*2),a6 86 | .bloop: 87 | move.l d0,d1 88 | subq.l #1,d1 89 | .vloop: 90 | clr.l d5 91 | clr.l d6 92 | move.b (a0)+,d5 93 | move.b -1(a0,d0.l),d6 94 | sub.l d5,d6 95 | move.l d6,d7 96 | muls.w d2,d6 97 | muls.w d3,d7 98 | asl.l #8,d5 99 | add.l d6,d5 100 | 101 | move.l d4,d6 102 | subq.l #1,d6 103 | .iloop: move.w d5,(a1) 104 | addq.l #1,a1 105 | add.l d7,d5 106 | dbf d6,.iloop 107 | 108 | dbf d1,.vloop 109 | add.l d0,a0 110 | cmp.l a6,a0 111 | blo.b .bloop 112 | rts 113 | 114 | endc 115 | -------------------------------------------------------------------------------- /4k/C2P1x1x8Half.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | ; 6 5 2 3 4 1 0 4 | ; 2 6 5 | ; 3 5 6 | ; 1 3 7 | ; 0 2 8 | ; x x 6 5 4 3 2 9 | 10 | ; 6 5 3 2 4 1 0 11 | ; 3 6 12 | ; 2 5 13 | ; 1 3 14 | ; 0 2 15 | ; x x 6 5 4 3 2 16 | 17 | include 4k:System.S 18 | 19 | ONCE C2P 20 | 21 | INCFILE 22 | 23 | include 4k:Chunky.S 24 | 25 | CODE 26 | 27 | C2P_LOAD4 macro 28 | ; Interleave 29 | move.l a1,d6 30 | move.l (a6)+,d0 31 | move.l (a6)+,d2 32 | move.l (a6)+,d1 33 | move.l (a6)+,d3 34 | and.l d6,d0 35 | and.l d6,d1 36 | and.l d6,d2 37 | and.l d6,d3 38 | tst.l d6 39 | bmi.b .channel0\@ 40 | lsl.l #8,d0 41 | lsl.l #8,d1 42 | bra.b .channel\@ 43 | .channel0\@: lsr.l #8,d2 44 | lsr.l #8,d3 45 | .channel\@: or.l d2,d0 46 | or.l d3,d1 47 | 48 | ; Saturate 49 | move.l #$40404040,d6 50 | move.l d6,d5 51 | move.l d0,d2 52 | move.l d1,d3 53 | and.l d6,d2 54 | and.l d6,d3 55 | lsr.l #6,d2 56 | lsr.l #6,d3 57 | sub.l d2,d5 58 | sub.l d3,d6 59 | or.l d5,d0 60 | or.l d6,d1 61 | 62 | ; Dither (assume minimum value 3) 63 | move.l #$03030303,d6 64 | and.l d7,d6 65 | sub.l d6,d0 66 | sub.l d6,d1 67 | move.l #$3c3c3c3c,d6 68 | and.l d6,d0 69 | and.l d6,d1 70 | lsl.l #2,d0 71 | lsr.l #2,d1 72 | or.l d1,d0 73 | move.l d0,-(a7) 74 | 75 | ; Random 76 | ror.l d7,d7 77 | subq.l #1,d7 78 | endm 79 | 80 | C2P_MERGE macro 81 | move.l d0,d4 82 | move.l d1,d5 83 | lsl.l d7,d4 84 | lsl.l d7,d5 85 | eor.l d2,d4 86 | eor.l d3,d5 87 | and.l d6,d4 88 | and.l d6,d5 89 | eor.l d4,d2 90 | eor.l d5,d3 91 | lsr.l d7,d4 92 | lsr.l d7,d5 93 | eor.l d4,d0 94 | eor.l d5,d1 95 | endm 96 | 97 | C2P_NEXT_MERGE macro 98 | lsr.l #1,d7 99 | move.l d6,d5 100 | lsr.l d7,d5 101 | eor.l d5,d6 102 | exg.l d1,d2 103 | endm 104 | 105 | C2P: 106 | ; A1 = Channel mask ($ff00ff00 or $00ff00ff) 107 | ; A3 = Random 108 | ; A5 = Dest 109 | baselea Chunky,a6 110 | lea.l SCREENWIDTH*2(a6),a2 111 | .c2ploop: 112 | move.l a3,d7 113 | C2P_LOAD4 114 | C2P_LOAD4 115 | C2P_LOAD4 116 | C2P_LOAD4 117 | move.l d7,a3 118 | 119 | move.l (a7)+,d3 120 | move.l (a7)+,d2 121 | move.l (a7)+,d1 122 | move.l (a7)+,d0 123 | 124 | move.l #$ffff0000,d6 125 | moveq.l #16,d7 126 | 127 | ; Merge 16 128 | C2P_MERGE 129 | C2P_NEXT_MERGE 130 | ; Merge 8 131 | C2P_MERGE 132 | C2P_NEXT_MERGE 133 | C2P_NEXT_MERGE 134 | ; Merge 2 135 | C2P_MERGE 136 | C2P_NEXT_MERGE 137 | ; Merge 1 138 | C2P_MERGE 139 | 140 | move.l d0,SCREENWIDTH/8*3(a5) 141 | move.l d2,SCREENWIDTH/8*2(a5) 142 | move.l d1,SCREENWIDTH/8*1(a5) 143 | move.l d3,(a5)+ 144 | 145 | cmp.l a2,a6 146 | blo.w .c2ploop 147 | lea.l SCREENWIDTH/8*3(a5),a5 148 | rts 149 | 150 | endc 151 | -------------------------------------------------------------------------------- /4k/Screen8bit.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | include 4k:System.S 4 | 5 | ONCE Screen 6 | 7 | INCFILE 8 | 9 | SCREEN_BUFFERS = 16 10 | SCREEN_STRIDE = 65536 11 | PALETTE_STRIDE = 65536 12 | 13 | include 4k:Chunky.S 14 | ; include 4k:C2P2x1x8Blitter.S 15 | include 4k:Palette.S 16 | 17 | ChipField Screen,SCREEN_BUFFERS*SCREEN_STRIDE 18 | FastField Palettes,SCREEN_BUFFERS*PALETTE_STRIDE 19 | 20 | DATA 21 | 22 | copreg set $000 23 | copline macro 24 | dc.w \1-copreg,\2 25 | copreg set \1+2 26 | endm 27 | 28 | Copper: 29 | copline $08e,($ac81-(SCREENHEIGHT/2)<<8)&$ffff 30 | copline $090,($acc1+(SCREENHEIGHT/2)<<8)&$ffff 31 | copline $092,$0038 32 | copline $094,$00b0 33 | ; copline $096,$8300 34 | copline $100,$0211 35 | copline $102,$0000 36 | copline $104,$0000 37 | copline $106,$0000 38 | copline $108,$0118 39 | copline $10a,$0118 40 | copline $10c,$0000 41 | ; copline $180,$000f 42 | ; copline $182,$00f0 43 | copline $1fc,$0003 44 | Copper_End: 45 | 46 | CODE 47 | 48 | ScreenSetup macro 49 | ; A3 = $dff000 50 | ; baselea BlitCopper,a2 51 | ; lea.l C2PBlitCommands\.end-C2PBlitCommands(a2),a2 52 | ; move.l a2,$dff080 53 | 54 | datalea Copper,a0 55 | moveq.l #(Copper_End-Copper)/4-1,d7 56 | .cloop: add.w (a0)+,a3 57 | move.w (a0)+,(a3)+ 58 | dbf d7,.cloop 59 | 60 | ; move.l #256-1,d7 61 | ;.cols: moveq.l #32-1,d6 62 | ; and.l d7,d6 63 | ; move.l d7,d5 64 | ; lsr.l #5,d5 65 | ; ror.w #3,d5 66 | ; move.w d5,$106-copreg(a3) 67 | ; move.w d7,$180-copreg(a3,d6.w*2) 68 | ; dbf d7,.cols 69 | 70 | ; rts 71 | endm 72 | 73 | ScreenInterrupt macro 74 | ; A3 = $dff000 75 | move.l b_VBlank(a4),d2 76 | move.l b_Frame(a4),d3 ; Ready frame 77 | move.l d2,d6 78 | add.l d6,d6 79 | addq.l #1,d6 80 | moveq.l #2,d4 81 | moveq.l #SCREEN_BUFFERS,d5 82 | divu.w #5,d6 83 | ext.l d6 ; Frame to show if ready 84 | cmp.l d6,d3 85 | blt.w .behind 86 | move.l d6,d3 87 | .behind: 88 | ; D3 = Frame to show 89 | 90 | baselea Screen,a5 91 | move.l #SCREEN_BUFFERS-1,d5 92 | and.l d5,d3 ; Queue entry 93 | swap.w d3 94 | add.l d3,a5 95 | 96 | move.l #SCREENWIDTH/8/4,d0 97 | move.l #$0e0/4,d4 98 | 99 | move.l a5,(a3,d4.l*4) 100 | rept 7 101 | lea.l (a5,d0.l*4),a5 102 | addq.l #1,d4 103 | move.l a5,(a3,d4.l*4) 104 | endr 105 | 106 | PaletteInterrupt: 107 | ; lsr.l #6,d3 108 | clr.l d7 109 | .orderloop: 110 | baselea Palettes,a5 111 | add.l d3,a5 112 | move.l #$0020,d6 113 | .bankloop: 114 | move.l d7,d0 115 | lsl.w #7,d0 116 | or.w d6,d0 117 | move.w d0,$106(a3) 118 | 119 | lea.l $180(a3),a2 120 | moveq.l #32-1,d5 121 | .colorloop: move.b (a5)+,d0 122 | move.b 256-1(a5),d1 123 | move.b 2*256-1(a5),d2 124 | lsl.b d7,d0 125 | lsl.b d7,d1 126 | lsl.b d7,d2 127 | lsl.w #4,d0 128 | move.b d1,d0 129 | lsl.w #4,d0 130 | move.b d2,d0 131 | lsr.w #4,d0 132 | move.w d0,(a2)+ 133 | dbf d5,.colorloop 134 | 135 | add.w #$2000,d6 136 | bcc.b .bankloop 137 | 138 | eor.w #4,d7 139 | bne.b .orderloop 140 | 141 | move.w #$0020,$dff106 142 | ; rts 143 | endm 144 | 145 | endc 146 | -------------------------------------------------------------------------------- /4k/Main.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | PERFCOUNT = 0 4 | PREWAIT = 10 5 | DEBUG = 0 6 | FPUINT = 0 7 | ;RMBPAUSE = 1 8 | ASSERTED = 0 9 | ;PROFILING = 0 10 | ;SHOWQUEUE 11 | 12 | MUSIC = 1 13 | 14 | DEMOSTART = 0*64*5 15 | DEMOLENGTH = 11776 16 | 17 | include 4k:System.S 18 | 19 | ; Main 4k system control macro 20 | ; 21 | ; First argument is the base name for temporary files. 22 | ; Second argument is the build mode: 23 | ; 0: Test. Use when testing the intro inside AsmPro. Assemble and run. 24 | ; 1: Build. Converts the code to an internal instruction format (wordcode) and 25 | ; writes temporary files containing the converted code. Assemble and run. 26 | ; 2: Deploy. Ignores the source code and just includes the converted wordcode 27 | ; to produce an executable. Assemble and write object. 28 | ; Sometimes fails with an "Illegal path" error message. Just assemble again. 29 | ; 30 | ; The resulting executable must have its three fast memory sections merged to 31 | ; work properly. This can be done with the --hunkmerge option to Shrinkler. 32 | BEGIN4k ram:wordcode,0 33 | 34 | DATA 35 | include 4k:Music.S 36 | 37 | include 4k:Interpreter.S 38 | include 4k:C2P1x1x8Half.S 39 | 40 | include 4k:Screen8bit.S 41 | if MUSIC 42 | include 4k:LnsFMsynth2.S 43 | else 44 | MUSIC_OFFSET = 50 45 | endc 46 | 47 | DATA 48 | 49 | PalColors: 50 | dc.w $000,$000,$000,$000 51 | dc.w $fff,$fff,$fff,$fff 52 | dc.w $000,$458,$c72,$ccc 53 | dc.w $000,$12d,$191,$fff 54 | 55 | PROFDEF InitFrame 56 | PROFDEF Interpret 57 | PROFDEF Palette 58 | PROFDEF RenderParticles 59 | 60 | CODE 61 | 62 | Main: 63 | ScreenSetup 64 | if MUSIC 65 | StartMusic 66 | endc 67 | ; if DEMOSTART>0 68 | move.l #DEMOSTART-MUSIC_OFFSET,d0 69 | move.l d0,b_VBlank(a4) 70 | ; endc 71 | 72 | MainLoop: 73 | move.l b_VBlank(a4),d2 74 | move.l b_Frame(a4),d3 75 | addq.l #1,d3 76 | move.l d2,d6 77 | add.l d6,d6 78 | addq.l #1,d6 79 | moveq.l #2,d4 80 | moveq.l #SCREEN_BUFFERS,d5 81 | divu.w #5,d6 82 | ext.l d6 ; Currently showing 83 | cmp.l d6,d3 84 | bge.w .notbehind 85 | move.l d6,d3 86 | .notbehind: 87 | add.l d5,d6 88 | cmp.l d6,d3 89 | bge.w MainLoop 90 | move.l d3,b_EffectFrame(a4) 91 | 92 | fmove.l d3,fp0 93 | fmove.l d4,fp1 94 | fdiv fp1,fp0 95 | datalea Constantpool,a1 96 | fmove.s fp0,0*4(a1) 97 | 98 | cmp.w #DEMOLENGTH,d2 99 | bge.w DemoDone 100 | 101 | PROFILE InitFrame 102 | bsr.w InitFrame 103 | PROFILE Interpret 104 | bsr.w Interpret 105 | 106 | PROFILE Palette 107 | datalea Constantpool,a1 108 | datalea Constants,a6 109 | fmove.s 4*4(a1),fp0 110 | fmove.s 5*4(a1),fp1 111 | fmove.s 6*4(a1),fp2 112 | fmove.s c_ToFixFac(a6),fp7 113 | fmul fp7,fp2 114 | fmove.l fp0,d0 115 | fmove.l fp1,d1 116 | fmove.l fp2,d2 117 | baselea Palettes,a5 118 | move.l b_EffectFrame(a4),d3 119 | move.l #SCREEN_BUFFERS-1,d5 120 | and.l d5,d3 121 | swap.w d3 122 | add.l d3,a5 123 | MakePalette 124 | 125 | PROFILE RenderParticles 126 | baselea Screen,a5 127 | move.l b_EffectFrame(a4),d3 128 | move.l #SCREEN_BUFFERS-1,d5 129 | and.l d5,d3 130 | swap.w d3 131 | add.l d3,a5 132 | bsr.w RenderParticles 133 | NOPROFILE 134 | 135 | move.l b_EffectFrame(a4),d3 136 | move.l d3,b_Frame(a4) 137 | 138 | if DEBUG 139 | btst.b #6,$bfe001 140 | bne.b MainLoop 141 | rts 142 | else 143 | bra.w MainLoop 144 | endc 145 | 146 | Interrupt: 147 | ScreenInterrupt 148 | if MUSIC 149 | MusicInterrupt 150 | endc 151 | DemoDone: rts 152 | 153 | END4k 154 | 155 | 156 | ; 750000 clear + c2p 157 | ; 500 per particle 158 | ; 100 per particle line 159 | ; 10 per particle pixel 160 | ; 40 per node 161 | ; 40 per subexp 162 | 163 | ; EffectVBlank: frame being rendered 164 | ; VBlank: Current vblank 165 | ; 166 | ; In vblank int: 167 | ; FrameVBlank = Round VBlank down to frame 168 | ; while FrameVBlank >= EffectVBlank 169 | ; FrameVBlank = previous frame 170 | ; show FrameVBlank 171 | ; 172 | ; In mainloop: 173 | ; render EffectVBlank 174 | ; EffectVBlank = next frame 175 | ; loop while (frame to be rendered) - (frame being displayed) >= frame space in queue 176 | ; while (frame to be rendered) < (frame being displayed) 177 | ; EffectVBlank = next frame 178 | -------------------------------------------------------------------------------- /C/interpreter.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | typedef unsigned char byte; 5 | 6 | enum tree_code { 7 | FANOUT = 0xf5, 8 | NOPLEAF = 0xf6, 9 | SAVETRANS = 0xf7, 10 | REPEAT = 0xf8, 11 | CONDITIONAL = 0xf9, 12 | GLOBALDEF = 0xfa, 13 | SCALE = 0xfb, 14 | MOVE = 0xfc, 15 | ROTATE = 0xfd, 16 | DRAW = 0xfe, 17 | LABEL = 0xff 18 | }; 19 | 20 | enum exp_code { 21 | RANDOM = 0xf7, 22 | NOTEAT = 0xf8, 23 | ADD = 0xf9, 24 | SUB = 0xfa, 25 | MUL = 0xfb, 26 | ROUND = 0xfc, 27 | CLAMP = 0xfd, 28 | SIN = 0xfe 29 | }; 30 | 31 | struct matrix2D { 32 | float m00,m10,m01,m11,x0,y0; 33 | }; 34 | 35 | struct particle { 36 | struct matrix2D transform; 37 | float c0,c1; 38 | }; 39 | 40 | 41 | byte *labels[256]; 42 | struct matrix2D matrixstack[1024]; 43 | float notepositions[100000]; 44 | unsigned int ticks_per_track; 45 | float *constantpool; 46 | byte *tree_root; 47 | 48 | 49 | byte *traverse(byte *tree, struct matrix2D *matrixstack, struct particle **outp); 50 | 51 | float eval(byte **expp); 52 | 53 | 54 | void init_interpret(byte *tree, unsigned int tree_size, float *cp, byte *musicdata, unsigned int musiclength, unsigned int numtracks, float ticklength) { 55 | int c,i; 56 | int l = 0; 57 | for (i = 0 ; i < tree_size ; i++) { 58 | if (tree[i] == LABEL) { 59 | labels[l++] = &tree[i+1]; 60 | } 61 | } 62 | tree_root = tree; 63 | constantpool = cp; 64 | 65 | ticks_per_track = musiclength; 66 | for (c = 0 ; c < numtracks ; c++) { 67 | float t = 0.0f; 68 | for (i = 0 ; i < musiclength ; i++) { 69 | int tick = c * musiclength + i; 70 | if ((musicdata[tick>>3] >> (7-(tick&7))) & 1) { 71 | t = i * ticklength; 72 | } 73 | notepositions[tick] = t; 74 | } 75 | } 76 | } 77 | 78 | 79 | 80 | unsigned int interpret(float time, struct particle *out) 81 | { 82 | struct particle *old_out = out; 83 | matrixstack[0].m00 = 2.0f/320.0f; 84 | matrixstack[0].m10 = 0.0f; 85 | matrixstack[0].m01 = 0.0f; 86 | matrixstack[0].m11 = 2.0f/200.0f; 87 | matrixstack[0].x0 = 0.0f; 88 | matrixstack[0].y0 = 0.0f; 89 | 90 | constantpool[0] = time; 91 | 92 | traverse(tree_root, matrixstack, &out); 93 | 94 | return out-old_out; 95 | } 96 | 97 | byte *traverse(byte *tree, struct matrix2D *mtop, struct particle **outp) 98 | { 99 | byte label, var; 100 | float x,y,c,sinc,cosc; 101 | struct particle *out; 102 | switch ((enum tree_code)*tree++) { 103 | case FANOUT: 104 | while (*tree != 0) { 105 | tree = traverse(tree, mtop, outp); 106 | } 107 | return tree+1; 108 | case NOPLEAF: 109 | return tree; 110 | case SAVETRANS: 111 | mtop[1] = mtop[0]; 112 | return traverse(tree, mtop+1, outp); 113 | case REPEAT: 114 | label = *tree++; 115 | if (*tree > 1) { 116 | *tree -= 1; 117 | traverse(labels[label], mtop, outp); 118 | *tree += 1; 119 | } 120 | return tree+1; 121 | case CONDITIONAL: 122 | c = eval(&tree); 123 | label = c < 0.0f ? tree[0] : tree[1]; 124 | traverse(labels[label], mtop, outp); 125 | return tree+2; 126 | case GLOBALDEF: 127 | c = eval(&tree); 128 | var = *tree++; 129 | constantpool[var] = c; 130 | return traverse(tree, mtop, outp); 131 | case SCALE: 132 | y = eval(&tree); 133 | x = eval(&tree); 134 | mtop->m00 *= x; 135 | mtop->m10 *= x; 136 | mtop->m01 *= y; 137 | mtop->m11 *= y; 138 | return traverse(tree, mtop, outp); 139 | case MOVE: 140 | y = eval(&tree); 141 | x = eval(&tree); 142 | mtop->x0 += mtop->m00 * x + mtop->m01 * y; 143 | mtop->y0 += mtop->m10 * x + mtop->m11 * y; 144 | return traverse(tree, mtop, outp); 145 | case ROTATE: 146 | c = eval(&tree); 147 | c *= (float)(2.0 * 3.14159265358979); 148 | sinc = sin(c); 149 | cosc = cos(c); 150 | x = mtop->m00; 151 | y = mtop->m01; 152 | mtop->m00 = x * cosc + y * sinc; 153 | mtop->m01 = y * cosc - x * sinc; 154 | x = mtop->m10; 155 | y = mtop->m11; 156 | mtop->m10 = x * cosc + y * sinc; 157 | mtop->m11 = y * cosc - x * sinc; 158 | return traverse(tree, mtop, outp); 159 | case DRAW: 160 | y = eval(&tree); 161 | x = eval(&tree); 162 | out = *outp; 163 | out->transform = mtop[0]; 164 | out->c0 = x; 165 | out->c1 = y; 166 | (*outp)++; 167 | return tree; 168 | case LABEL: 169 | return traverse(tree, mtop, outp); 170 | } 171 | 172 | return tree; 173 | } 174 | 175 | float eval(byte **expp) { 176 | float a,b; 177 | int r,tick; 178 | enum exp_code e = (enum exp_code)*(*expp)++; 179 | switch (e) { 180 | case RANDOM: 181 | r = *(int *)&constantpool[1]; 182 | r = (r+7)*16307; 183 | *(int *)&constantpool[1] = r; 184 | return (r >> 16) * (1.0f / 32768.0f); 185 | case NOTEAT: 186 | a = eval(expp); 187 | b = eval(expp); 188 | tick = ((int)a) * ticks_per_track + (int)b; 189 | return b - notepositions[tick]; 190 | case ADD: 191 | a = eval(expp); 192 | b = eval(expp); 193 | return a+b; 194 | case SUB: 195 | a = eval(expp); 196 | b = eval(expp); 197 | return a-b; 198 | case MUL: 199 | a = eval(expp); 200 | b = eval(expp); 201 | return a*b; 202 | case ROUND: 203 | a = eval(expp); 204 | return floorf(a+0.5f); 205 | case CLAMP: 206 | a = eval(expp); 207 | return a < 0.0f ? 0.0f : a; 208 | case SIN: 209 | a = eval(expp); 210 | a *= (float)(2.0 * 3.14159265358979); 211 | return sin(a); 212 | default: 213 | return constantpool[e]; 214 | } 215 | } 216 | 217 | -------------------------------------------------------------------------------- /4k/Interpreter.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | include 4k:System.S 4 | 5 | ONCE Interpreter 6 | 7 | INCFILE 8 | 9 | ifeq SYSTEM 10 | DATA 11 | include 4k:Music.S 12 | endc 13 | 14 | DATA 15 | 16 | Bytecode: 17 | incbin 4k:tree.dat 18 | ; dc.b -3,0,-5,1,2,-10,-2,3,4,-4,5,5,-2,4,3,0 19 | Bytecode_End: 20 | align 0,4 21 | Constantpool: 22 | incbin 4k:constantpool.dat 23 | ; dc.s 0.0,200.0,100.2,0.7,0.3,1.0 24 | Constantpool_End: 25 | ; dcb.s 256-(Constantpool_End-Constantpool)/4 26 | 27 | include 4k:Particles.S 28 | include 4k:Waves.S 29 | 30 | MAX_MATRIX_STACK_HEIGHT = 1024 31 | MAX_EXPRESSION_STACK_HEIGHT = 20 32 | 33 | FastField MatrixStack,MAX_MATRIX_STACK_HEIGHT*6*4 34 | FastField TreeLabels,256*4 35 | FastField ExpressionStack,MAX_EXPRESSION_STACK_HEIGHT*4 36 | FastField NotePosUnfold,MUSICLENGTH*NUMTRACKS*4 37 | 38 | ; FastSpace 1024*1024 39 | ; FastField Stack,0 40 | 41 | Var NumParticles 42 | 43 | PRECALC 44 | 45 | UnfoldNotePositions: 46 | datalea NotePositions,a2 47 | baselea NotePosUnfold,a6 48 | move.l #MUSICLENGTH,d1 49 | move.l #NUMTRACKS-1,d7 50 | .trackloop: clr.l d0 51 | fmove.l d0,fp0 52 | .loop: bftst (a2){d0:1} 53 | beq.b .nonote 54 | fmove.l d0,fp0 55 | .nonote: fmove.s fp0,0(a6) 56 | lea.l 4(a6),a6 57 | addq.l #1,d0 58 | cmp.l d1,d0 59 | blt.w .loop 60 | lea.l MUSICLENGTH/8(a2),a2 61 | dbf d7,.trackloop 62 | 63 | ;TestInterpreter: 64 | ; pcall InitFrame 65 | ;; baselea Stack,a7 66 | ; pcall Interpret 67 | 68 | 69 | T_OFFSET macro 70 | dc.w (\1-.traverse_base)/2 71 | endm 72 | O_OFFSET macro 73 | dc.w (\1-.op_base)/2 74 | endm 75 | 76 | PROFDEF Traverse 77 | PROFDEF GlobalDef 78 | PROFDEF LocalDef 79 | PROFDEF Conditional 80 | PROFDEF Scale 81 | PROFDEF Move 82 | PROFDEF Rotate 83 | PROFDEF Eval 84 | PROFDEF EvalSubexp 85 | PROFDEF EvalSinus 86 | PROFDEF EvalRandom 87 | 88 | CODE 89 | 90 | Interpret: 91 | ; move.w #$00f,$dff180 92 | baselea MatrixStack,a5 93 | baselea TreeLabels,a6 94 | 95 | datalea Bytecode,a0 96 | move.l #Bytecode_End-Bytecode-1,d7 97 | .labelloop: move.b (a0)+,d0 98 | extb.l d0 99 | addq.l #1,d0 100 | bne.w .notlabel 101 | move.l a0,(a6)+ 102 | .notlabel: dbf d7,.labelloop 103 | 104 | move.l #0,d0 105 | move.l #1,d1 106 | move.l #SCREENWIDTH/2,d2 107 | move.l #SCREENHEIGHT/2,d3 108 | fmove.l d0,fp0 109 | fmove.l d1,fp1 110 | fmove.l d2,fp2 111 | fmove.l d3,fp3 112 | fmove.s fp1,0(a5) 113 | fmove.s fp0,4(a5) 114 | fmove.s fp0,8(a5) 115 | fmove.s fp1,12(a5) 116 | fmove.s fp2,16(a5) 117 | fmove.s fp3,20(a5) 118 | 119 | datalea Bytecode,a0 120 | datalea Constantpool,a1 121 | Traverse: 122 | PROFILE Traverse 123 | ASSERT l,a1,eq,#Constantpool 124 | baselea ExpressionStack,a2 125 | ASSERT l,a0,hs,#Bytecode 126 | ASSERT l,a0,lo,#Bytecode_End 127 | move.b (a0)+,d0 128 | ASSERT b,d0,hs,#$f4 129 | extb.l d0 130 | bra.w .traverse_lookup 131 | 132 | ;.localdef: 133 | ; PROFILE Eval 134 | ; bsr.w Eval 135 | ; PROFILE LocalDef 136 | ; clr.l d0 137 | ; move.b (a0)+,d0 138 | ; move.l (a1,d0.l*4),-(a7) 139 | ; fmove.s fp0,(a1,d0.l*4) 140 | ; move.l d0,-(a7) 141 | ; bsr.w Traverse 142 | ; move.l (a7)+,d0 143 | ; move.l (a7)+,(a1,d0.l*4) 144 | ; rts 145 | 146 | .fanout: 147 | bsr.w Traverse 148 | tst.b (a0) 149 | bne.b .fanout 150 | move.b (a0)+,d0 151 | .nopleaf: rts 152 | 153 | .savetrans: 154 | ASSERT l,a5,lo,#MatrixStack+(MAX_MATRIX_STACK_HEIGHT-1)*6*4 155 | rept 6 156 | move.l (a5)+,(6-1)*4(a5) 157 | endr 158 | bsr.w Traverse 159 | lea.l -6*4(a5),a5 160 | rts 161 | 162 | .repeat: 163 | clr.l d0 164 | move.b (a0)+,d0 165 | subq.b #1,(a0) 166 | beq.b .repeat_end 167 | move.l a0,-(a7) 168 | baselea TreeLabels,a6 169 | move.l (a6,d0.l*4),a0 170 | bsr.w Traverse 171 | move.l (a7)+,a0 172 | .repeat_end: 173 | addq.b #1,(a0)+ 174 | rts 175 | 176 | .globaldef: 177 | PROFILE Eval 178 | bsr.w Eval 179 | PROFILE GlobalDef 180 | clr.l d0 181 | move.b (a0)+,d0 182 | fmove.s fp0,(a1,d0.l*4) 183 | bra.w Traverse 184 | 185 | ;.call: 186 | ; clr.l d0 187 | ; move.b (a0)+,d0 188 | ; fmove.s (a1,d0.l*4),fp0 189 | ; fmove.l fp0,d0 190 | ; move.l a0,-(a7) 191 | ; baselea TreeLabels,a6 192 | ; move.l (a6,d0.l*4),a0 193 | ; bsr.w Traverse 194 | ; move.l (a7)+,a0 195 | ; bra.w Traverse 196 | 197 | .conditional: 198 | PROFILE Eval 199 | bsr.w Eval 200 | PROFILE Conditional 201 | clr.l d0 202 | move.b (a0)+,d0 203 | fmove.s fp0,d1 204 | tst.l d1 205 | bge.w .cond_pos 206 | addq.l #1,a0 207 | bra.b .cond_chosen 208 | .cond_pos: 209 | move.b (a0)+,d0 210 | .cond_chosen: 211 | move.l a0,-(a7) 212 | baselea TreeLabels,a6 213 | move.l (a6,d0.l*4),a0 214 | bsr.w Traverse 215 | move.l (a7)+,a0 216 | rts 217 | 218 | .scale: 219 | PROFILE Eval 220 | bsr.w Eval ; y 221 | PROFILE Scale 222 | lea.l 2*4(a5),a6 223 | fmove.s 0(a6),fp2 224 | fmove.s 4(a6),fp3 225 | fmul fp0,fp2 226 | fmul fp0,fp3 227 | fmove.s fp2,0(a6) 228 | fmove.s fp3,4(a6) 229 | 230 | PROFILE Eval 231 | bsr.w Eval ; x 232 | PROFILE Scale,#0 233 | lea.l 0*4(a5),a6 234 | fmove.s 0(a6),fp2 235 | fmove.s 4(a6),fp3 236 | fmul fp0,fp2 237 | fmul fp0,fp3 238 | fmove.s fp2,0(a6) 239 | fmove.s fp3,4(a6) 240 | 241 | bra.w Traverse 242 | 243 | .move: 244 | PROFILE Eval 245 | bsr.w Eval 246 | fmove fp0,fp1 247 | PROFILE Eval 248 | bsr.w Eval 249 | 250 | PROFILE Move 251 | lea.l 0*4(a5),a6 252 | fmove.s 0(a6),fp2 253 | fmove.s 8(a6),fp3 254 | fmove.s 16(a6),fp4 255 | fmul fp0,fp2 256 | fmul fp1,fp3 257 | fadd fp3,fp2 258 | fadd fp4,fp2 259 | fmove.s fp2,16(a6) 260 | 261 | lea.l 1*4(a5),a6 262 | fmove.s 0(a6),fp2 263 | fmove.s 8(a6),fp3 264 | fmove.s 16(a6),fp4 265 | fmul fp0,fp2 266 | fmul fp1,fp3 267 | fadd fp3,fp2 268 | fadd fp4,fp2 269 | fmove.s fp2,16(a6) 270 | bra.w Traverse 271 | 272 | .rotate: 273 | PROFILE Eval 274 | bsr.w Eval 275 | PROFILE Rotate 276 | datalea Constants,a6 277 | fmove.s c_Wavelength(a6),fp1 278 | fmul fp1,fp0 279 | fmove.l fp0,d0 280 | baselea SineWave,a6 281 | clr.l d1 282 | move.w d0,d1 283 | fmove.s (a6,d1.l*4),fp0 ; sin 284 | add.w #$4000,d1 285 | fmove.s (a6,d1.l*4),fp1 ; cos 286 | 287 | lea.l 0*4(a5),a6 288 | fmove.s 0(a6),fp2 289 | fmove.s 8(a6),fp3 290 | fmove fp2,fp4 291 | fmove fp3,fp5 292 | fmul fp1,fp2 293 | fmul fp0,fp3 294 | fmul fp0,fp4 295 | fmul fp1,fp5 296 | fadd fp3,fp2 297 | fsub fp4,fp5 298 | fmove.s fp2,0(a6) 299 | fmove.s fp5,8(a6) 300 | 301 | lea.l 1*4(a5),a6 302 | fmove.s 0(a6),fp2 303 | fmove.s 8(a6),fp3 304 | fmove fp2,fp4 305 | fmove fp3,fp5 306 | fmul fp1,fp2 307 | fmul fp0,fp3 308 | fmul fp0,fp4 309 | fmul fp1,fp5 310 | fadd fp3,fp2 311 | fsub fp4,fp5 312 | fmove.s fp2,0(a6) 313 | fmove.s fp5,8(a6) 314 | .label: bra.w Traverse 315 | 316 | .draw: 317 | PROFILE Eval 318 | bsr.w Eval 319 | fmove fp0,fp1 320 | PROFILE Eval 321 | bsr.w Eval 322 | ; move.w #$0f0,$dff180 323 | bsr.w PutParticle 324 | ; move.w #$00f,$dff180 325 | addq.l #1,b_NumParticles(a4) 326 | rts 327 | 328 | 329 | ; T_OFFSET .localdef 330 | T_OFFSET .fanout 331 | T_OFFSET .nopleaf 332 | T_OFFSET .savetrans 333 | T_OFFSET .repeat 334 | T_OFFSET .conditional 335 | T_OFFSET .globaldef 336 | T_OFFSET .scale 337 | T_OFFSET .move 338 | T_OFFSET .rotate 339 | T_OFFSET .draw 340 | T_OFFSET .label 341 | .traverse_lookup: 342 | move.w .traverse_offsets(pc,d0.l*2),d0 343 | jmp .traverse_base(pc,d0.l*2) 344 | .traverse_offsets = .traverse_lookup 345 | .traverse_base = .traverse_offsets+4 346 | 347 | Eval: 348 | PROFILE EvalSubexp 349 | ASSERT l,a2,hs,#ExpressionStack 350 | ASSERT l,a2,lo,#ExpressionStack+MAX_EXPRESSION_STACK_HEIGHT*4 351 | ASSERT l,a0,lo,#Bytecode_End 352 | move.b (a0)+,d0 353 | ASSERT b,d0,ge,#$f6 354 | extb.l d0 355 | bmi.w .op 356 | .load: 357 | fmove.s fp0,0(a2) 358 | lea 4(a2),a2 359 | fmove.s (a1,d0.l*4),fp0 360 | rts 361 | .random: 362 | PROFILE EvalRandom 363 | fmove.s fp0,0(a2) 364 | lea 4(a2),a2 365 | move.l 4(a1),d0 366 | addq.l #7,d0 367 | move.l #16307,d1 368 | muls.l d1,d0 369 | move.l d0,4(a1) 370 | swap.w d0 371 | fmove.w d0,fp0 372 | datalea Constants,a6 373 | fmove.s c_2_wave(a6),fp2 374 | fmul fp2,fp0 375 | PROFILE Eval,#0 376 | rts 377 | .noteat: 378 | bsr.w Eval 379 | bsr.w Eval 380 | fmove.s -(a2),fp2 381 | ; FP0 = Position 382 | ; FP2 = Channel 383 | ; move.l #SPEED,d4 384 | ; fmove.l d4,fp4 385 | ; fmul fp4,fp0 386 | fintrz fp0,fp3 387 | fmove.l fp2,d2 388 | fmove.l fp3,d3 389 | baselea NotePosUnfold,a6 390 | move.l #MUSICLENGTH,d1 391 | mulu.w d1,d2 392 | add.l d2,d3 393 | fmove.s (a6,d3.l*4),fp2 394 | fsub fp2,fp0 395 | ; fdiv fp4,fp0 396 | rts 397 | .add: 398 | bsr.w Eval 399 | bsr.w Eval 400 | fmove.s -(a2),fp2 401 | fadd fp0,fp2 402 | fmove fp2,fp0 403 | rts 404 | .sub: 405 | bsr.w Eval 406 | bsr.w Eval 407 | fmove.s -(a2),fp2 408 | fsub fp0,fp2 409 | fmove fp2,fp0 410 | rts 411 | .mul: 412 | bsr.w Eval 413 | bsr.w Eval 414 | fmove.s -(a2),fp2 415 | fmul fp0,fp2 416 | fmove fp2,fp0 417 | rts 418 | ;.div: 419 | ; bsr.w Eval 420 | ; bsr.w Eval 421 | ; fmove.s -(a2),fp2 422 | ; fdiv fp0,fp2 423 | ; fmove fp2,fp0 424 | ; rts 425 | ;.mod: 426 | ; bsr.w Eval 427 | ; bsr.w Eval 428 | ; fmove.s -(a2),fp2 429 | ; fdiv fp0,fp2 430 | ; fintrz fp2 431 | ; fmul fp0,fp2 432 | ; fmove.s 0(a2),fp0 433 | ; fsub fp2,fp0 434 | ; rts 435 | .round: 436 | bsr.w Eval 437 | fint fp0 438 | rts 439 | .clamp: 440 | bsr.w Eval 441 | fmove.s fp0,d1 442 | tst.l d1 443 | bge.w .clamp_pos 444 | fsub fp0,fp0 445 | .clamp_pos: rts 446 | .sin: 447 | bsr.w Eval 448 | PROFILE EvalSinus 449 | datalea Constants,a6 450 | fmove.s c_Wavelength(a6),fp2 451 | fmul fp2,fp0 452 | fmove.l fp0,d0 453 | baselea SineWave,a6 454 | clr.l d1 455 | move.w d0,d1 456 | fmove.s (a6,d1.l*4),fp0 457 | PROFILE Eval,#0 458 | rts 459 | 460 | O_OFFSET .random 461 | O_OFFSET .noteat 462 | O_OFFSET .add 463 | O_OFFSET .sub 464 | O_OFFSET .mul 465 | ; O_OFFSET .div 466 | ; O_OFFSET .mod 467 | O_OFFSET .round 468 | O_OFFSET .clamp 469 | O_OFFSET .sin 470 | dcb.w 1 471 | .op: 472 | move.w .op_offsets(pc,d0.l*2),d0 473 | jmp .op_base(pc,d0.l*2) 474 | .op_offsets = .op 475 | .op_base = .op_offsets+4 476 | 477 | endc 478 | -------------------------------------------------------------------------------- /C/musicdata.c: -------------------------------------------------------------------------------- 1 | unsigned char musicposdata[] = { 2 | /* clap/1 */ 3 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8, 4 | 130,8,8,8,130,8,8,8, 5 | 130,8,8,8,130,8,8,8, 6 | 130,8,8,8,130,8,8,8, 7 | 130,8,8,8,130,8,8,8, 8 | 130,8,8,8,130,8,8,8, 9 | 130,8,8,8,130,8,8,8, 10 | 130,8,8,8,130,8,8,8, 11 | 130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8, 12 | 130,8,8,8,130,8,8,8, 13 | 130,8,8,8,130,8,8,8, 14 | 130,8,8,8,130,8,8,8, 15 | 130,8,8,8,130,8,8,8, 16 | 130,8,8,8,130,8,8,8, 17 | 130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8, 18 | 130,8,8,8,130,8,8,8, 19 | 130,8,8,8,130,8,8,8, 20 | 130,8,8,8,130,8,8,8, 21 | 130,8,8,8,130,8,8,8, 22 | 130,8,8,8,130,8,8,8, 23 | 130,8,8,8,130,8,8,8, 24 | 130,8,8,8,130,8,8,8, 25 | 130,8,8,8,130,8,8,8, 26 | 130,8,8,8, 27 | 130,0,0,0,0,0,0,0,0,0,0,0,0, 28 | /* #snare/6 */ 29 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,34,34,34,34,34,34, 30 | 34,34,34,34,34,34,34,34, 31 | 34,34,34,34,34,34,34,34, 32 | 34,34,34,34,34,34,34,34, 33 | 34,34,34,34,34,34,34,34, 34 | 34,34,34,34,34,34,34,34, 35 | 34,34,34,34,34,34,34,34, 36 | 34,34,34,34,34,34,34,34, 37 | 34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,34,34,34,34,34,34, 38 | 34,34,34,34,34,34,34,34, 39 | 34,34,34,34,34,34,34,34, 40 | 34,34,34,34,34,34,34,34, 41 | 34,34,34,34,34,34,34,34, 42 | 34,34,34,34,34,34,34,34, 43 | 34,34,34,34,34,34,34,34, 44 | 34,0,0,0,0,0,0,0,0,34,34,34,34,34,34,34, 45 | 34,34,34,34,34,34,34,34, 46 | 34,34,34,34,34,34,34,34, 47 | 34,34,34,34,34,34,34,34, 48 | 34,34,34,34,34,34,34,34, 49 | 34,34,34,34,34,34,34,34, 50 | 34,34,34,34,34,34,34,34, 51 | 34,34,34,34,34,34,34,34, 52 | 34,34,34,34,34,34,34,34, 53 | 34,34,34,34,34,34, 54 | 32,0,0,0,0,0,0,0,0,0,0, 55 | /* bass/5 */ 56 | 136,8,136,8,136,8,136, 57 | 8,136,8,136,8,136,8,136, 58 | 8,136,8,136,8,136,8,136, 59 | 8,136,8,136,8,136,8,136, 60 | 8,136,8,136,8,136,8,136, 61 | 8,136,8,136,8,136,8, 62 | 136,0,136,8,136,8,136,8,136, 63 | 8,136,8,136,8,136,8,136, 64 | 8,136,8,136,8,136,8,136, 65 | 8,136,8,136,8,136,8,136, 66 | 8,136,8,136,8,136,8,136, 67 | 8,136,8,136,8,136,8,136, 68 | 8,136,8,136,8,136,8,136, 69 | 8,136,8,136,8,136,8,136, 70 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,8,136,8,136,8,136, 71 | 8,136,8,136,8,136,8,136, 72 | 8,136,8,136,8,136,8,136, 73 | 8,136,8,136,8,136,8,136, 74 | 8,136,8,136,8,136,8,136, 75 | 8,136,8,136,8,136,8,136, 76 | 8,136,8,136,8,136,8,136, 77 | 8,136,8,136,8,136,8, 78 | 136,0,136,8,136,8,136,8,136, 79 | 8,136,8,136,8,136,8,136, 80 | 8,136,8,136,8,136,8,136, 81 | 8,136,8,136,8,136,8,136, 82 | 8,136,8,136,8,136,8,136, 83 | 8,136,8,136,8,136,8,136, 84 | 8,136,8,136,8,136,8,136, 85 | 8,136,8,136,8,136,8,136, 86 | 8,136,8,136,8,136,8,136, 87 | 8,136,8,136,8,136,8, 88 | 136,0,0,0,0,0,0,0,0,0, 89 | /* ambient/7 */ 90 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128, 91 | 8,0,0,0,0,0,0,128, 92 | 8,0,0,0,0,0,0,128, 93 | 8,0,0,0,0,0,0,128, 94 | 8,0,0,0,0,0,0,128, 95 | 8,0,0,0,0,0,0,128, 96 | 8,0,0,0,0,0,0,128, 97 | 8,0,0,0,0,0,0,128, 98 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128, 99 | 8,0,0,0,0,0,0,128, 100 | 8,0,0,0,0,0,0,128, 101 | 8,0,0,0,0,0,0,128, 102 | 8,0,0,0,0,0,0,128, 103 | 8,0,0,0,0,0,0,128, 104 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128, 105 | 8,0,0,0,0,0,0,128, 106 | 8,0,0,0,0,0,0,128, 107 | 8,0,0,0,0,0,0,128, 108 | 8,0,0,0,0,0,0,128, 109 | 8,0,0,0,0,0,0,128, 110 | 8,0,0,0,0,0,0,128, 111 | 8,0,0,0,0,0,0,128, 112 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 113 | /* lead/3 */ 114 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63, 115 | 192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63, 116 | 192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,240,63,240,63,240,63, 117 | 240,63,240,63,240,63,240,63, 118 | 240,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207, 119 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207, 120 | 0,0,0,0,0,0,0,0,63,240,63,240,63,240,63, 121 | 240,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207, 122 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,240,63,240,63,240,63, 123 | 240,63,240,63,240,63,240,63, 124 | 240,0,0,0,0,0,0,0,0, 125 | /* #lead/3 */ 126 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,59,131,184,59,142,227, 127 | 184,238,59,131,184,59,142,227, 128 | 184,238,59,131,184,59,142,227, 129 | 184,238,59,131,184,59,142,227, 130 | 184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 131 | /* bassdrum/0 */ 132 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,32,130,32,130,32,130, 133 | 8,130,32,130,32,130,32, 134 | 128,0,130,32,130,32,130,32,130, 135 | 8,130,32,130,32,130,32,130, 136 | 8,130,32,130,32,130,32,130, 137 | 8,130,32,130,32,130,32,130, 138 | 8,130,32,130,32,130,32,130, 139 | 8,130,32,130,32,130,32,130, 140 | 8,130,32,130,32,130,32,130, 141 | 8,130,32,130,32,130,32,130, 142 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,32,130,32,130,32,130, 143 | 8,130,32,130,32,130,32,130, 144 | 8,130,32,130,32,130,32,130, 145 | 8,130,32,130,32,130,32,130, 146 | 8,130,32,130,32,130,32,130, 147 | 8,130,32,130,32,130,32,130, 148 | 8,130,32,130,32,130,32,130, 149 | 8,0,0,0,0,0,0,0,0,130,32,130,32,130,32,130, 150 | 8,130,32,130,32,130,32,130, 151 | 8,130,32,130,32,130,32,130, 152 | 8,130,32,130,32,130,32,130, 153 | 8,130,32,130,32,130,32,130, 154 | 8,130,32,130,32,130,32,130, 155 | 8,130,32,130,32,130,32,130, 156 | 8,130,32,130,32,130,32,130, 157 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 158 | /* clap/2 */ 159 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8, 160 | 130,8,8,8,130,8,8,8, 161 | 130,8,8,8,130,8,8,8, 162 | 130,8,8,8,130,8,8,8, 163 | 130,8,8,8,130,8,8,8, 164 | 130,8,8,8,130,8,8,8, 165 | 130,8,8,8,130,8,8,8, 166 | 130,8,8,8,130,8,8,8, 167 | 130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8, 168 | 130,8,8,8,130,8,8,8, 169 | 130,8,8,8,130,8,8,8, 170 | 130,8,8,8,130,8,8,8, 171 | 130,8,8,8,130,8,8,8, 172 | 130,8,8,8,130,8,8,8, 173 | 130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8, 174 | 130,8,8,8,130,8,8,8, 175 | 130,8,8,8,130,8,8,8, 176 | 130,8,8,8,130,8,8,8, 177 | 130,8,8,8,130,8,8,8, 178 | 130,8,8,8,130,8,8,8, 179 | 130,8,8,8,130,8,8,8, 180 | 130,8,8,8,130,8,8,8, 181 | 130,8,8,8,130,8,8,8, 182 | 130,8,8,8, 183 | 130,0,0,0,0,0,0,0,0,0,0,0,0, 184 | /* snare/6 */ 185 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,203,42,203,174,203,42,203, 186 | 174,203,42,203,174,203,42,203, 187 | 174,203,42,203,174,203,42,203, 188 | 174,203,42,203,174,203,42,203, 189 | 174,203,42,203,174,203,42,203, 190 | 174,203,42,203,174,203,42,203, 191 | 174,203,42,203,174,203,42,203, 192 | 174,203,42,203,174,203,42,203, 193 | 174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,203,42,203,174,203,42,203, 194 | 174,203,42,203,174,203,42,203, 195 | 174,203,42,203,174,203,42,203, 196 | 174,203,42,203,174,203,42,203, 197 | 174,203,42,203,174,203,42,203, 198 | 174,203,42,203,174,203,42,203, 199 | 174,203,42,203,174,203,42,203, 200 | 174,203,42,203,174,203, 201 | 40,0,0,203,42,203,174,203,42,203, 202 | 174,203,42,203,174,203,42,203, 203 | 174,203,42,203,174,203,42,203, 204 | 174,203,42,203,174,203,42,203, 205 | 174,203,42,203,174,203,42,203, 206 | 174,203,42,203,174,203,42,203, 207 | 174,203,42,203,174,203,42,203, 208 | 174,203,42,203,174,203,42,203, 209 | 174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 210 | /* hihat/8 */ 211 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 212 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 213 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 214 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 215 | 248,0,0,0,0,0,0,0,0,0,0, 216 | /* #hihat/8 */ 217 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, 218 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, 219 | 48,0,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, 220 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, 221 | 48,0,0,0,0,0,0,0,0,0,0, 222 | /* strings/4 */ 223 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 224 | 8,0,128,0,8,0,128,0, 225 | 8,0,128,0,8,0,128,0, 226 | 8,0,128,0,8,0,128,0, 227 | 8,0,128,0,8,0,128,0, 228 | 8,0,128,0,8,0,128,0, 229 | 8,0,128,0,8,0,128,0, 230 | 8,0,128,0,8,0,128,0, 231 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 232 | 8,0,128,0,8,0,128,0, 233 | 8,0,128,0,8,0,128,0, 234 | 8,0,128,0,8,0,128,0, 235 | 8,0,128,0,8,0,128,0, 236 | 8,0,128,0,8,0, 237 | 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 238 | 8,0,128,0,8,0,128,0, 239 | 8,0,128,0,8,0,128,0, 240 | 8,0,128,0,8,0,128,0, 241 | 8,0,128,0,8,0,128,0, 242 | 8,0,128,0,8,0,128,0, 243 | 8,0,128,0,8,0,128,0, 244 | 8,0,128,0,8,0, 245 | 128,0,0,0,0,0,0,0,0,0,0,0, 246 | /* strings/4 */ 247 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 248 | 8,0,128,0,8,0,128,0, 249 | 8,0,128,0,8,0,128,0, 250 | 8,0,128,0,8,0,128,0, 251 | 8,0,128,0,8,0,128,0, 252 | 8,0,128,0,8,0,128,0, 253 | 8,0,128,0,8,0,128,0, 254 | 8,0,128,0,8,0,128,0, 255 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 256 | 8,0,128,0,8,0,128,0, 257 | 8,0,128,0,8,0,128,0, 258 | 8,0,128,0,8,0,128,0, 259 | 8,0,128,0,8,0,128,0, 260 | 8,0,128,0,8,0, 261 | 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 262 | 8,0,128,0,8,0,128,0, 263 | 8,0,128,0,8,0,128,0, 264 | 8,0,128,0,8,0,128,0, 265 | 8,0,128,0,8,0,128,0, 266 | 8,0,128,0,8,0,128,0, 267 | 8,0,128,0,8,0,128,0, 268 | 8,0,128,0,8,0, 269 | 128,0,0,0,0,0,0,0,0,0,0,0, 270 | /* strings/4 */ 271 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 272 | 8,0,128,0,8,0,128,0, 273 | 8,0,128,0,8,0,128,0, 274 | 8,0,128,0,8,0,128,0, 275 | 8,0,128,0,8,0,128,0, 276 | 8,0,128,0,8,0,128,0, 277 | 8,0,128,0,8,0,128,0, 278 | 8,0,128,0,8,0,128,0, 279 | 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 280 | 8,0,128,0,8,0,128,0, 281 | 8,0,128,0,8,0,128,0, 282 | 8,0,128,0,8,0,128,0, 283 | 8,0,128,0,8,0,128,0, 284 | 8,0,128,0,8,0, 285 | 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0, 286 | 8,0,128,0,8,0,128,0, 287 | 8,0,128,0,8,0,128,0, 288 | 8,0,128,0,8,0,128,0, 289 | 8,0,128,0,8,0,128,0, 290 | 8,0,128,0,8,0,128,0, 291 | 8,0,128,0,8,0,128,0, 292 | 8,0,128,0,8,0, 293 | 128,0,0,0,0,0,0,0,0,0,0,0 294 | }; 295 | -------------------------------------------------------------------------------- /4k/WordCode.S: -------------------------------------------------------------------------------- 1 | 2 | ifnd WC_INCLUDED 3 | ; 1 = Compile 4 | ; 2 = Generate 5 | ; 4 = Test 6 | ; 8 = Validate 7 | WC_INCLUDED = 15 8 | endc 9 | 10 | UAE_COMP = 0 11 | 12 | if WC_INCLUDED&4 13 | 14 | Test: 15 | lea.l TestCode(pc),a1 16 | lea.l TestCode_End(pc),a2 17 | lea.l WordCode(pc),a0 18 | bsr.w GenerateWordCode 19 | 20 | lea.l WordCode(pc),a0 21 | bsr.w OptimizeWordCode 22 | 23 | lea.l WordCode(pc),a0 24 | lea.l Compiled(pc),a1 25 | lea.l TestCode(pc),a3 26 | bra.w CompileWordCode 27 | 28 | TestCode: 29 | ; move.l d0,d1 30 | ; add.l d3,d6 31 | ; eor.b d6,d7 32 | ; swap.w d2 33 | ; addq.w #2,d5 34 | ; tst.l d4 35 | ; tst.w d3 36 | ; tst.b d2 37 | ; ori.w #4,d7 38 | ; move.l d4,d3 39 | ; move.l #145,d4 40 | ; move.l #5364,d4 41 | ; 42 | ; move.l 0*4(a1),d2 43 | ; move.l 3*4(a4,d5.l*4),d6 44 | ; move.l 7*4(a0),a1 45 | ; move.l 2*4(a3,d4.l*4),a5 46 | ; move.l d2,0*4(a1) 47 | ; move.l d6,3*4(a4,d5.l*4) 48 | ; move.l a1,7*4(a0) 49 | ; move.l a5,2*4(a3,d4.l*4) 50 | ; 51 | ; lea.l 1*4(a2),a3 52 | ; lea.l 2*4(a3,d4.l*4),a5 53 | ;.dummy: 54 | ; rts 55 | ; bra.w .dummy 56 | ; bpl.w .dummy 57 | ; bmi.w *+2 58 | ; bmi.w *+500 59 | ; bsr.w *+5000 60 | ; rept 20 61 | ; bsr.w .dummy 62 | ; endr 63 | ; bsr.w *+2 64 | ; dbf d4,.dummy 65 | 66 | fmove.s fp1,(a2,d4.l*4) 67 | lea.l -345(pc),a3 68 | 69 | ; fmove.s #9.05,fp0 70 | 71 | fmove.s 1*4(a2),fp0 72 | fmove.s 2*4(a3),fp1 73 | fmove.s 3*4(a4),fp2 74 | fmove.s fp3,4*4(a5) 75 | fmove.s fp4,5*4(a6) 76 | fmove.s fp5,6*4(a7) 77 | ; fmove.s 0*4(a1,d2.l*4),fp3 78 | ; fmove.s fp3,2*4(a1) 79 | ; fmove.s fp3,2*4(a1,d0.l*4) 80 | ; 81 | ; fmove fp0,fp3 82 | ; fmul fp3,fp7 83 | ; fdiv fp2,fp7 84 | ; fsin fp7,fp1 85 | ; 86 | ; fmove.l fp1,d1 87 | ; fmove.w fp1,d2 88 | ; fmove.b fp1,d3 89 | ; fmove.s fp1,d4 90 | ; fmove.l d1,fp2 91 | ; fmove.w d2,fp2 92 | ; fmove.b d3,fp2 93 | ; fmove.s d4,fp2 94 | 95 | TestCode_End: 96 | 97 | WordCode: 98 | dcb.w 1000 99 | Compiled: 100 | dcb.w 1000 101 | 102 | endc 103 | 104 | if WC_INCLUDED&4 105 | a 106 | endc 107 | 108 | if WC_INCLUDED&9 109 | CompileWordCode: 110 | ; A0 = WordCode 111 | ; A1 = Compiled Code 112 | ; (A3 = Original code for validation) 113 | move.l a1,a2 114 | .mainloop: 115 | movem.w .masks(pc),d1-d7 116 | move.b (a0),d7 117 | move.w (a0)+,d0 118 | beq.b .end 119 | and.w d0,d1 120 | and.w d0,d2 121 | and.w d0,d3 122 | or.b d3,d4 123 | lsr.w #4,d7 124 | ror.w #6,d4 125 | lsl.b #3,d4 126 | lsr.w #1,d3 127 | lsr.w #1,d4 128 | move.w d2,(a1) 129 | move.b .jump_table(pc,d7.w),d6 130 | if UAE_COMP 131 | move.w d0,d5 132 | asl.w #7,d5 133 | asr.w #7,d5 134 | ext.l d5 135 | else 136 | bfexts d0{23:9},d5 137 | endc 138 | if WC_INCLUDED&8 139 | move.l a1,a4 140 | endc 141 | jsr .jump_base(pc,d6.w*2) 142 | if WC_INCLUDED&8 143 | bra.b .val_in 144 | .val_loop: 145 | cmpm.w (a4)+,(a3)+ 146 | beq.b .val_in 147 | illegal 148 | .val_in: 149 | cmp.l a1,a4 150 | blo.b .val_loop 151 | endc 152 | bra.b .mainloop 153 | .masks: 154 | dc.w $0e00,$0007,$01f8,$0006 155 | 156 | .jump_table: 157 | dc.b (.integer-.jump_base)/2 158 | dc.b (.loadstore-.jump_base)/2 159 | dc.b (.loadstore-.jump_base)/2 160 | dc.b (.loadstore-.jump_base)/2 161 | dc.b (.loadstore-.jump_base)/2 162 | dc.b (.loadstore-.jump_base)/2 163 | dc.b (.branch-.jump_base)/2 164 | dc.b (.bsr-.jump_base)/2 165 | dc.b (.dbf-.jump_base)/2 166 | dc.b (.lsf_offset-.jump_base)/2 167 | dc.b (.lsf_indexed-.jump_base)/2 168 | dc.b (.float-.jump_base)/2 169 | dc.b (.immediate_9-.jump_base)/2 170 | dc.b (.datalea-.jump_base)/2 171 | dc.b (.shift-.jump_base)/2 172 | dc.b (.floatdata_or_immediate_23_or_raw_or_multiplicity-.jump_base)/2 173 | 174 | .jump_base: 175 | 176 | .loadstore: 177 | bmi.b .ls_indexed 178 | move.w d3,d4 179 | addq.w #5,d7 180 | .ls_indexed: 181 | move.b .ls_table-1(pc,d7.w),d6 182 | bfins d6,d1{23:6} 183 | lsr.w #6,d6 184 | ror.w #3,d6 185 | or.w d1,d6 186 | or.w d6,(a1)+ 187 | .addr: move.w d4,(a1)+ 188 | .end: rts 189 | .ls_table: 190 | dc.b %01000110,%01001110,%01110000,%01110001,%10111110 191 | dc.b %01000101,%01001101,%01101000,%01101001,%10111101 192 | 193 | ;.rts: 194 | ; move.w #$4e75,(a1)+ 195 | ; rts 196 | 197 | .branch: 198 | ; beq.b .rts 199 | move.w d0,d2 200 | eor.b d0,d2 201 | ext.w d0 202 | .boff: add.w d0,d0 203 | move.w d2,(a1)+ 204 | .shift: 205 | move.w d0,(a1)+ 206 | rts 207 | 208 | .lsf_offset: 209 | moveq.l #$007c,d4 210 | and.w d3,d4 211 | .lsf_indexed: 212 | lsl.w #8,d0 213 | addx.w d1,d1 214 | lsl.w #3,d7 215 | ror.w #3,d1 216 | eor.w #$f260,d7 217 | or.w #$4400,d1 218 | or.w d7,(a1)+ 219 | move.w d1,(a1)+ 220 | bra.b .addr 221 | 222 | .integer: 223 | move.l #$89bcd245,d4 224 | rol.l d3,d4 225 | lsr.w #5,d3 226 | lsl.w #2,d3 227 | move.b d3,d4 228 | lsl.w #4,d4 229 | or.w d1,d4 230 | or.w d4,(a1)+ 231 | rts 232 | 233 | .byteload: 234 | or.w #$1018,d1 235 | or.w d1,(a1)+ 236 | rts 237 | 238 | .float: 239 | addq.l #8,d5 240 | bcs.b .byteload 241 | or.w d3,d1 242 | lsl.w #4,d1 243 | or.w d2,d1 244 | ror.w #6,d1 245 | move.w #$f200,(a1)+ 246 | move.w d1,(a1)+ 247 | rts 248 | 249 | .datalea: 250 | or.w #$41fa,d1 251 | move.w d1,(a1)+ 252 | or.w #$fe00,d0 253 | bra.b .rel 254 | 255 | .dbf: 256 | or.w #$51c8,d2 257 | asl.w #4,d0 258 | asr.w #7,d0 259 | bra.b .boff 260 | 261 | .bsr: 262 | move.w #$6100,(a1)+ 263 | lsl.w #4,d0 264 | lsr.w #3,d0 265 | .rel: add.w a2,d0 266 | sub.w a1,d0 267 | bra.b .shift 268 | 269 | .floatdata_or_immediate_23_or_raw_or_multiplicity: 270 | bpl.b .floatdata_or_immediate_23 271 | .raw_or_multiplicity: 272 | tst.b d5 273 | bmi.b .raw 274 | .multiplicity: 275 | lsl.w #2,d5 276 | lsr.b #2,d5 277 | lsl.w #3,d5 278 | lsr.b #2,d5 279 | lsl.w #3,d5 280 | lsr.b #2,d5 281 | lsr.w #5,d5 282 | move.w (a0),d0 283 | .multi_loop: 284 | sub.w d5,d0 285 | move.w d0,-(a0) 286 | dbf d2,.multi_loop 287 | rts 288 | .raw: 289 | move.w (a0)+,(a1)+ 290 | addq.b #1,d5 291 | bne.b .raw 292 | rts 293 | .floatdata_or_immediate_23: 294 | tst.b d5 295 | bpl.b .immediate_23 296 | .floatdata: 297 | lsl.w #8,d3 298 | lsr.w #2,d1 299 | or.w d3,d1 300 | or.w #$f200,(a1)+ 301 | move.w d1,(a1)+ 302 | rts 303 | 304 | .immediate_23: 305 | swap.w d5 306 | move.w (a0)+,d5 307 | .immediate_9: 308 | or.w #$203c,d1 309 | move.w d1,(a1)+ 310 | move.l d5,(a1)+ 311 | rts 312 | endc 313 | if WC_INCLUDED&4 314 | s 315 | endc 316 | 317 | ; Known bugs in the following: 318 | ; Branch and dbf to odd addresses 319 | ; Longword branch 320 | ; FPU-instruction-similar instruction data 321 | 322 | if WC_INCLUDED&4 323 | d 324 | endc 325 | if WC_INCLUDED&2 326 | GenerateWordCode: 327 | ; A1 = 680x0 Code 328 | ; A2 = End of 680x0 Code 329 | ; A0 = Generated WordCode 330 | ; A6 = Virtual start of 680x0 Code 331 | .convloop: 332 | move.w (a1)+,d1 333 | bfextu d1{16:4},d5 334 | move.l a0,d6 335 | jsr ([.jump1,pc,d5.w*4]) 336 | subq.l #2,d0 337 | bge.b .convnext 338 | .raw: 339 | addq.l #2,a0 340 | move.l a0,a4 341 | move.w -2(a1),(a0)+ 342 | moveq.l #0,d7 343 | bra.b .rawnext 344 | .rawloop: 345 | ; Check for overflow 346 | move.l a5,d4 347 | sub.l a4,d4 348 | cmp.l #256,d4 349 | blt.b .rawcont 350 | move.w #$ff80,-(a4) 351 | bra.b .convloop 352 | .rawcont: 353 | move.w (a1)+,d1 354 | bfextu d1{16:4},d5 355 | move.l a0,d6 356 | jsr ([.jump1,pc,d5.w*4]) 357 | subq.l #2,d0 358 | bgt.b .rawend 359 | beq.b .valid 360 | moveq.l #0,d7 361 | bra.b .copy 362 | .valid: 363 | addq.l #2,d7 364 | .copy: 365 | sub.l d0,a0 366 | move.w -2(a1),-2(a0) 367 | .rawnext: 368 | move.l a0,a5 369 | cmp.l a2,a1 370 | blo.b .rawloop 371 | moveq.l #0,d0 372 | addq.l #2,a1 373 | .rawend: 374 | sub.l d7,a5 375 | sub.l d7,a1 376 | subq.l #2,a1 377 | move.l a4,d4 378 | sub.l a5,d4 379 | lsr.l #1,d4 380 | move.w #$ff00,d3 381 | move.b d4,d3 382 | move.w d3,-(a4) 383 | move.l a5,a0 384 | bra.b .convlend 385 | .convnext: 386 | add.l d0,a1 387 | .convlend: 388 | cmp.l a2,a1 389 | blo.b .convloop 390 | clr.w (a0)+ 391 | rts 392 | 393 | .fail: 394 | moveq.l #0,d0 395 | rts 396 | 397 | .jump1: 398 | dc.l .fail 399 | dc.l .move_byte 400 | dc.l .immediate_or_move 401 | dc.l .fail 402 | dc.l .rts_or_lea 403 | dc.l .dbf_or_int 404 | dc.l .branch 405 | dc.l .fail 406 | dc.l .int 407 | dc.l .int 408 | dc.l .fail 409 | dc.l .int 410 | dc.l .int 411 | dc.l .int 412 | dc.l .shift 413 | dc.l .float 414 | 415 | .move_byte: 416 | ; Test for move byte 417 | move.w d1,d2 418 | and.w #$f1f8,d2 419 | cmp.w #$1018,d2 420 | bne.b .fail 421 | ; move.b (a0)+,dx 422 | and.w #$0e07,d1 423 | or.w #$b1f8,d1 424 | move.w d1,(a0)+ 425 | moveq.l #2,d0 426 | rts 427 | 428 | .rts_or_lea: 429 | ; ; Test for rts 430 | ; cmp.w #$4e75,d1 431 | ; bne.b .move_or_lea 432 | ; move.w #$6000,(a0)+ 433 | ; moveq.l #2,d0 434 | ; rts 435 | bra.b .move_or_lea 436 | 437 | .immediate_or_move: 438 | ; Test for immediate 439 | move.w d1,d2 440 | and.w #$f1ff,d2 441 | cmp.w #$203c,d2 442 | bne.b .move_or_lea 443 | move.l (a1),d3 444 | cmp.l #1<<8,d3 445 | bge.b .notsmall 446 | cmp.l #-1<<8,d3 447 | blt.w .fail 448 | ; Small immediate 449 | eor.w d2,d1 450 | or.w #$c000,d1 451 | and.w #$01ff,d3 452 | or.w d3,d1 453 | move.w d1,(a0)+ 454 | moveq.l #6,d0 455 | rts 456 | .notsmall: 457 | cmp.l #1<<23,d3 458 | bge.w .fail 459 | ; Large immediate 460 | eor.w d2,d1 461 | or.w #$f000,d1 462 | swap.w d3 463 | and.w #$007f,d3 464 | or.w d3,d1 465 | move.w d1,(a0)+ 466 | swap.w d3 467 | move.w d3,(a0)+ 468 | moveq.l #6,d0 469 | rts 470 | 471 | .move_or_lea: 472 | ; PC rel lea? 473 | move.w d1,d2 474 | and.w #$f1ff,d2 475 | cmp.w #$41fa,d2 476 | beq.w .pc_rel_lea 477 | move.w d1,d2 478 | lsl.l #3,d2 479 | lsl.w #4,d2 480 | lsr.l #2,d2 481 | lsr.w #8,d2 482 | lea.l .loads_and_stores(pc),a3 483 | moveq.l #2,d3 484 | .iloop: cmp.w (a3)+,d2 485 | bne.b .inext 486 | move.w (a1),d4 487 | and.w (a3)+,d4 488 | cmp.w (a3)+,d4 489 | bne.w .fail 490 | move.w -4(a3),d4 491 | not.w d4 492 | and.w (a1),d4 493 | lsl.w #1,d4 494 | lsr.w #1,d3 495 | bcc.b .ioffset 496 | lsr.b #3,d4 497 | rol.w #6,d4 498 | or.w #$0100,d4 499 | .ioffset: 500 | ror.w #4,d3 501 | and.w #$0e07,d1 502 | or.w d3,d1 503 | or.w d4,d1 504 | move.w d1,(a0)+ 505 | moveq.l #4,d0 506 | rts 507 | .inext: 508 | addq.l #4,a3 509 | addq.w #1,d3 510 | cmp.w #12,d3 511 | blt.b .iloop 512 | bra.w .int 513 | 514 | .loads_and_stores: 515 | dc.w %01000101,%1111111110000011,%0000000000000000 516 | dc.w %01000110,%1000111111110011,%0000110000000000 517 | dc.w %01001101,%1111111110000011,%0000000000000000 518 | dc.w %01001110,%1000111111110011,%0000110000000000 519 | dc.w %01101000,%1111111110000011,%0000000000000000 520 | dc.w %01110000,%1000111111110011,%0000110000000000 521 | dc.w %01101001,%1111111110000011,%0000000000000000 522 | dc.w %01110001,%1000111111110011,%0000110000000000 523 | dc.w %10111101,%1111111110000011,%0000000000000000 524 | dc.w %10111110,%1000111111110011,%0000110000000000 525 | 526 | .pc_rel_lea: 527 | move.w (a1),d3 528 | add.w a1,d3 529 | sub.w a6,d3 530 | move.w d3,d2 531 | and.w #$fe00,d2 532 | cmp.w #$fe00,d2 533 | bne.w .fail 534 | and.w #$0e00,d1 535 | and.w #$01ff,d3 536 | or.w d3,d1 537 | or.w #$d000,d1 538 | move.w d1,(a0)+ 539 | moveq.l #4,d0 540 | rts 541 | 542 | .dbf_or_int: 543 | bfextu d1{20:9},d2 544 | cmp.w #%000111001,d2 545 | bne.b .int 546 | move.w (a1),d3 547 | cmp.w #512,d3 548 | bge.w .fail 549 | cmp.w #-512,d3 550 | blt.w .fail 551 | asr.w #1,d3 552 | and.w #$0007,d1 553 | or.w #$8000,d1 554 | bfins d3,d1{20:9} 555 | move.w d1,(a0)+ 556 | moveq.l #4,d0 557 | rts 558 | 559 | .branch: 560 | tst.b d1 561 | bne.w .fail 562 | bfextu d1{20:4},d2 563 | move.w (a1),d3 564 | cmp.w #1,d2 565 | beq.b .bsr 566 | cmp.w #256,d3 567 | bge.w .fail 568 | cmp.w #-256,d3 569 | blt.w .fail 570 | asr.w #1,d3 571 | bcs.w .fail 572 | beq.w .fail 573 | move.b d3,d1 574 | move.w d1,(a0)+ 575 | moveq.l #4,d0 576 | rts 577 | .bsr: 578 | add.w a1,d3 579 | sub.w a6,d3 580 | cmp.w #8192,d3 581 | bge.w .fail 582 | lsl.w #3,d3 583 | lsr.w #4,d3 584 | bcs.w .fail 585 | or.w #$7000,d3 586 | move.w d3,(a0)+ 587 | moveq.l #4,d0 588 | rts 589 | .int: 590 | bftst d1{26:3} 591 | bne.w .fail 592 | and.w #$0fff,d1 593 | or.w .int_codes(pc,d5.w*2),d1 594 | tst.w d1 595 | beq.w .fail 596 | move.w d1,(a0)+ 597 | moveq.l #2,d0 598 | rts 599 | .int_codes: 600 | dc.w 0,0,0<<3,0,1<<3,2<<3,0,0,3<<3,4<<3,0,5<<3,6<<3,7<<3,0,0 601 | .shift: 602 | move.w d1,(a0)+ 603 | moveq.l #2,d0 604 | rts 605 | .float: 606 | bfextu d1{20:6},d2 607 | cmp.w #%001000,d2 608 | bne.w .fail 609 | move.w (a1),d3 610 | btst.l #6,d3 611 | bne.w .fail 612 | btst.l #15,d3 613 | bne.w .fail 614 | bftst d3{16:3} 615 | bne.b .loadstore_or_conv 616 | bftst d1{26:6} 617 | bne.w .fail 618 | lsl.w #1,d3 619 | lsl.b #1,d3 620 | lsl.l #5,d3 621 | lsr.w #4,d3 622 | lsr.l #3,d3 623 | rol.w #3,d3 624 | or.w #$b000,d3 625 | move.w d3,(a0)+ 626 | moveq.l #4,d0 627 | rts 628 | .loadstore_or_conv: 629 | bftst d3{26:6} 630 | bne.w .fail 631 | bftst d1{26:3} 632 | bne.b .loadstore 633 | lsl.l #6,d3 634 | lsr.w #7,d3 635 | lsr.l #6,d3 636 | ror.w #7,d3 637 | and.w #$0007,d1 638 | or.w d1,d3 639 | or.w #$f000,d3 640 | move.w d3,(a0)+ 641 | moveq.l #4,d0 642 | rts 643 | .loadstore: 644 | move.w d3,d2 645 | move.b d1,d2 646 | lsr.w #2,d2 647 | lsl.b #4,d2 648 | lsr.w #5,d2 649 | lea.l .loads_and_stores2(pc),a3 650 | lsl.w #2,d3 651 | move.b d1,d3 652 | and.w #$0e07,d3 653 | moveq.l #0,d1 654 | .floop: cmp.w (a3)+,d2 655 | bne.b .fnext 656 | move.w 2(a1),d4 657 | and.w (a3)+,d4 658 | cmp.w (a3)+,d4 659 | bne.w .fail 660 | move.w -4(a3),d4 661 | not.w d4 662 | and.w 2(a1),d4 663 | lsl.w #1,d4 664 | move.w #$9000,d5 665 | lsr.w #1,d1 666 | bcc.b .foffset 667 | lsr.b #3,d4 668 | rol.w #6,d4 669 | move.w #$a000,d5 670 | .foffset: 671 | lsl.w #8,d1 672 | or.w d3,d1 673 | or.w d4,d1 674 | or.w d5,d1 675 | move.w d1,(a0)+ 676 | moveq.l #6,d0 677 | rts 678 | .fnext: 679 | addq.l #4,a3 680 | addq.w #1,d1 681 | cmp.w #4,d1 682 | blt.b .floop 683 | bra.w .fail 684 | 685 | .loads_and_stores2: 686 | dc.w %10001101,%1111111110000011,%0000000000000000 687 | dc.w %10001110,%1000111111110011,%0000110000000000 688 | dc.w %11001101,%1111111110000011,%0000000000000000 689 | dc.w %11001110,%1000111111110011,%0000110000000000 690 | endc 691 | if WC_INCLUDED&4 692 | f 693 | endc 694 | 695 | if WC_INCLUDED&2 696 | OptimizeWordCode: 697 | ; A0 = WordCode 698 | 699 | move.l a0,a1 700 | .mainloop: 701 | move.w (a1)+,d0 702 | beq.b .end 703 | 704 | move.w (a1),d1 705 | sub.w d0,d1 706 | move.w #%1111110110110110,d2 707 | and.w d1,d2 708 | bne.b .not_multi 709 | 710 | moveq.l #6,d3 711 | .cloop: move.w 2(a1),d4 712 | sub.w (a1)+,d4 713 | cmp.w d1,d4 714 | dbne d3,.cloop 715 | bne.b .not5 716 | addq.l #2,a1 717 | .not5: 718 | moveq.l #6,d5 719 | sub.w d3,d5 720 | bne.b .morethan2 721 | move.w #%1111110110110110,d2 722 | and.w d4,d2 723 | bne.b .morethan2 724 | move.w 2(a1),d3 725 | sub.w (a1),d3 726 | cmp.w d3,d4 727 | bne.b .morethan2 728 | subq.l #2,a1 729 | bra.b .not_multi 730 | .morethan2: 731 | lsl.w #5,d1 732 | lsl.b #2,d1 733 | lsr.w #3,d1 734 | lsl.b #2,d1 735 | lsr.w #3,d1 736 | lsl.b #2,d1 737 | lsr.w #2,d1 738 | 739 | or.w d5,d1 740 | or.w #$ff00,d1 741 | move.w d1,(a0)+ 742 | move.w -2(a1),(a0)+ 743 | bra.b .mainloop 744 | 745 | .not_multi: 746 | move.w d0,(a0)+ 747 | move.w d0,d1 748 | and.w #$f180,d1 749 | cmp.w #$f000,d1 750 | bne.b .not_imm23 751 | move.w (a1)+,(a0)+ 752 | bra.b .mainloop 753 | .not_imm23: 754 | move.w #%0000111011111111,d1 755 | or.w d0,d1 756 | addq.w #1,d1 757 | bne.b .mainloop 758 | ; Raw 759 | .rloop: 760 | move.w (a1)+,(a0)+ 761 | addq.b #1,d0 762 | bne.b .rloop 763 | bra.b .mainloop 764 | .end: move.w d0,(a0)+ 765 | rts 766 | 767 | endc 768 | 769 | ; 0000xxxooooooyyy (integer ops) 770 | ; 0001xxx0zzzzzyyy lod z,ay,dx move.l z*4(ay),dx 771 | ; 0001xxx1zziiiyyy lid z,ay,di,dx move.l z*4(ay,di.l*4),dx 772 | ; 0010xxx0zzzzzyyy loa z,ay,ax move.l z*4(ay),ax 773 | ; 0010xxx1zziiiyyy lia z,ay,di,ax move.l z*4(ay,di.l*4),ax 774 | ; 0011xxx0zzzzzyyy sod dy,z,ax move.l dy,z*4(ax) 775 | ; 0011xxx1zziiiyyy sid dy,z,ax,di move.l dy,z*4(ax,di.l*4) 776 | ; 0100xxx0zzzzzyyy soa ay,z,ax move.l ay,z*4(ax) 777 | ; 0100xxx1zziiiyyy sia ay,z,ax,di move.l ay,z*4(ax,di.l*4) 778 | ; 0101xxx0zzzzzyyy aoa z,ay,ax lea.l z*4(ay),ax 779 | ; 0101xxx1zziiiyyy aia z,ay,di,ax lea.l z*4(ay,di.l*4),ax 780 | ; 0110xxx000000000 rts rts 781 | ; 0110ccccszzzzzzz bcc label bcc.w sz*2(pc) 782 | ; 0111zzzzzzzzzzzz bsr label bsr.w Code+z*2 783 | ; 1000szzzzzzzzyyy dbf dy,label dbf dy,sz*2(pc) 784 | ; 1001xxx0zzzzzyyy lof z,ay,fpx fmove.s z*4(ay),fpx 785 | ; 1001xxx1zzzzzyyy sof fpx,z,ay fmove.s fpx,z*4(ay) 786 | ; 1010xxx0zziiiyyy lif z,ay,di,fpx fmove.s z*4(ay,di.l*4),fpx 787 | ; 1010xxx1zziiiyyy sif fpx,z,ay,di fmove.s fpx,z*4(ay,di.l*4) 788 | ; 1011xxxooooooyyy fop fpy,fpx fop.x fpy,fpx 789 | ; 1011xxx111111yyy lbd ay,dx move.b (ay)+,dx 790 | ; 1100xxxszzzzzzzz imm sz,dx move.l #sz,dx 791 | ; 1101xxxzzzzzzzzz datalea z,dx lea.l Code-512+z(pc),ax 792 | ; 1110oooooooooooo (shifts and rotates) 793 | ; 1111xxx00zzzzzzz 16z imm zz,dx move.l #zz,dx 794 | ; 1111xxx010zzzyyy i2f.z dy,fpx fmove.z dy,fpx 795 | ; 1111xxx011zzzyyy f2i.z fpx,dy fmove.z fpx,dy 796 | ; 111111110xziymmm (multiplicity) m+2 delta-repetitions 797 | ; 111111111zzzzzzz raw 128-z 128-z words of raw copying 798 | 799 | ;+-- load/store/address 800 | ;|+- offset/indexed 801 | ;||+ to data/address reg 802 | ;lod 0010ddr000101abr 000000000xxxxx00 803 | ;lid 0010ddr000110abr 0idr11000000xx00 804 | ;loa 0010dar001101abr 000000000xxxxx00 805 | ;lia 0010dar001110abr 0idr11000000xx00 806 | ;sod 0010abr101000sdr 000000000xxxxx00 807 | ;sid 0010abr110000sdr 0idr11000000xx00 808 | ;soa 0010abr101001sar 000000000xxxxx00 809 | ;sia 0010abr110001sar 0idr11000000xx00 810 | ;aoa 0100dar111101abr 000000000xxxxx00 811 | ;aia 0100dar111110abr 0idr11000000xx00 812 | 813 | ;lof 1111001000101abr 010001dfr0000000 000000000xxxxx00 814 | ;sof 1111001000101abr 011001dfr0000000 000000000xxxxx00 815 | ;lif 1111001000110abr 010001dfr0000000 0idr11000000xx00 816 | ;sif 1111001000110abr 011001dfr0000000 0idr11000000xx00 817 | 818 | ;fpu 1111001000000000 000sfrdfr0operat 819 | 820 | ;i2f 1111001000000sdr 010fmtdfr0000000 821 | ;f2i 1111001000000ddr 011fmtsfr0000000 822 | 823 | ;dbf 0101000111001cdr yyyyyyyyxxxxxxxx 824 | 825 | ; FPU operations 826 | ;move 000000 827 | ;int 000001 828 | ;sinh 000010 829 | ;intrz 000011 830 | ;sqrt 000100 831 | ;lognp1 000110 832 | ;etoxm1 001000 833 | ;tanh 001001 834 | ;atan 001010 835 | ;asin 001100 836 | ;atanh 001101 837 | ;sin 001110 838 | ;tan 001111 839 | ;etox 010000 840 | ;twotox 010001 841 | ;tentox 010010 842 | ;logn 010100 843 | ;log10 010101 844 | ;log2 010110 845 | ;abs 011000 846 | ;cosh 011001 847 | ;neg 011010 848 | ;acos 011100 849 | ;cos 011101 850 | ;getexp 011110- 851 | ;getman 011111- 852 | ;div 100000 853 | ;mod 100001 854 | ;add 100010 855 | ;mul 100011 856 | ;sgldiv 100100- 857 | ;rem 100101 858 | ;scale 100110- 859 | ;sglmul 100111- 860 | ;sub 101000 861 | ;sincos 110cfr- 862 | ;cmp 111000 863 | ;tst 111010 864 | 865 | ;move.b (Ax)+,Dy 866 | ; 0001yyy000011xxx 867 | 868 | ; Integer 869 | ;move.l 0010destea000sdr 870 | ;negx 01000000sz000ddr 871 | ;clr 01000010sz000ddr 872 | ;neg 01000100sz000ddr 873 | ;not 01000110sz000ddr 874 | ;nbcd.b 0100100000000ddr 875 | ;swap.w 0100100001000ddr 876 | ;ext.w 0100100010000ddr 877 | ;ext.l 0100100011000ddr 878 | ;extb.l 0100100111000ddr 879 | ;tst 01001010sz000ddr 880 | ;tas.b 0100101011000ddr 881 | ;addq 0101qid0sz000ddr 882 | ;subq 0101qid1sz000ddr 883 | ;scc.b 0101cccc11000ddr 884 | ;or 1000ddr0sz000sdr 885 | ;divu.w 1000ddr011000sdr 886 | ;sbcd.b 1000ddr100000sdr 887 | ;divs.w 1000ddr111000sdr 888 | ;sub 1001ddr0sz000sdr 889 | ;suba.w 1001dar011000sdr 890 | ;subx 1001ddr1sz000sdr 891 | ;suba.l 1001dar111000sdr 892 | ;cmp 1011ddr0sz000sdr 893 | ;cmpa.w 1011dar011000sdr 894 | ;eor 1011sdr1sz000ddr 895 | ;cmpa.l 1011dar111000sdr 896 | ;and 1100ddr0sz000sdr 897 | ;mulu.w 1100ddr011000sdr 898 | ;abcd.b 1100ddr100000sdr 899 | ;exg.l 1100sdr101000ddr 900 | ;muls.w 1100ddr111000sdr 901 | ;add 1101ddr0sz000sdr 902 | ;adda.w 1101dar011000sdr 903 | ;addx 1101ddr1sz000sdr 904 | ;adda.l 1101dar111000sdr 905 | 906 | ;asr 1110qid0sz000ddr 907 | ;lsr 1110qid0sz001ddr 908 | ;roxr 1110qid0sz010ddr 909 | ;ror 1110qid0sz011ddr 910 | ;asr 1110sdr0sz100ddr 911 | ;lsr 1110sdr0sz101ddr 912 | ;roxr 1110sdr0sz110ddr 913 | ;ror 1110sdr0sz111ddr 914 | ;asl 1110qid1sz000ddr 915 | ;lsl 1110qid1sz001ddr 916 | ;roxl 1110qid1sz010ddr 917 | ;rol 1110qid1sz011ddr 918 | ;asl 1110sdr1sz100ddr 919 | ;lsl 1110sdr1sz101ddr 920 | ;roxl 1110sdr1sz110ddr 921 | ;rol 1110sdr1sz111ddr 922 | -------------------------------------------------------------------------------- /4k/System.S: -------------------------------------------------------------------------------- 1 | ; T T T 2 | 3 | ; Memory layout 4 | ; ---------------- 5 | ; System 6 | ; Init code 7 | ; Compressed code 8 | ; Base struct 9 | ; Chip 10 | ; Fast 11 | ; Data 12 | ; PreCalc 13 | ; Code 14 | ; Fast 15 | 16 | ;; ********** Once-trick ********** 17 | 18 | ifnd ONCE 19 | ONCE macro 20 | ifnd \1_FLAG 21 | \1_FLAG set 1 22 | \1\@ set 1 23 | FLAG set 1 24 | else 25 | ifd \1\@ 26 | FLAG set 1 27 | else 28 | FLAG set 0 29 | endc 30 | endc 31 | if FLAG 32 | endm 33 | endc 34 | 35 | ONCE System 36 | 37 | ;; ********** Internal constants ********** 38 | 39 | MEMORY_UNITlog = 7 40 | MEMORY_UNIT = 1<32) 73 | fail 74 | endc 75 | endm 76 | 77 | Var macro ; Name 78 | a_\1 = COUNT_Var 79 | b_\1 = a_\1*4 80 | COUNT_Var set COUNT_Var+1 81 | _inctotal 82 | endm 83 | 84 | Field macro ; Mem,Name,Size 85 | a_\2 = COUNT_\1 86 | b_\2 set (a_\2)*4 87 | COUNT_\1 set COUNT_\1+1 88 | \2: ds.b ((\3)+MEMORY_UNIT-1)/MEMORY_UNIT*MEMORY_UNIT 89 | section Base\1,data_f 90 | if (LAST_\1>$ffff) 91 | printt "Memory segment too large" 92 | printv LAST_\1*MEMORY_UNIT 93 | ; fail 94 | else 95 | dc.w LAST_\1 96 | endc 97 | LAST_\1 set ((\3)+MEMORY_UNIT-1)/MEMORY_UNIT 98 | ifd Before_\1 99 | b_\2 set (Before_\1+a_\2)*4 100 | endc 101 | _inctotal 102 | endm 103 | 104 | ChipField macro ; Name,Size 105 | section Chip,bss_c 106 | Field Chip,\1,\2 107 | endm 108 | 109 | FastField macro ; Name,Size 110 | section Fast,bss_f 111 | Field Fast,\1,\2 112 | endm 113 | 114 | Space macro ; Mem,Size 115 | ds.b ((\2)+MEMORY_UNIT-1)/MEMORY_UNIT*MEMORY_UNIT 116 | LAST_\1 set LAST_\1+((\2)+MEMORY_UNIT-1)/MEMORY_UNIT 117 | endm 118 | 119 | ChipSpace macro ; Size 120 | section Chip,bss_c 121 | Space Chip,\1 122 | endm 123 | 124 | FastSpace macro ; Size 125 | section Fast,bss_f 126 | Space Fast,\1 127 | endm 128 | 129 | ;; ********** Utility macros ********** 130 | 131 | INCFILE macro 132 | ifnd MODE 133 | INCFILE\@ set 1 134 | MODE = 0 135 | SYSTEM = 0 136 | PERFCOUNT = 0 137 | ASSERTED = 1 138 | PROFILING = 0 139 | b_VBlank = 0 140 | b_Frame = 4 141 | b_EffectFrame = 8 142 | ;b_TopazCharData= 8 143 | endc 144 | ifd INCFILE\@ 145 | section PreCalc,code_f 146 | IncfilePrecalcPrologue: 147 | ; Setup mem pointers 148 | lea.l Fast,a4 149 | lea.l Chip,a5 150 | section System,code_f 151 | System: 152 | Break: 153 | rts 154 | section Fast,bss_f 155 | Fast: 156 | ds.l 32 157 | End: 158 | section Chip,bss_c 159 | Chip: 160 | endc 161 | endm 162 | 163 | DATA macro 164 | section Data,data_f 165 | endm 166 | 167 | PRECALC macro 168 | section PreCalc,code_f 169 | PRECALC_FLAG set 1 170 | endm 171 | 172 | CODE macro 173 | section Code,code_f 174 | PRECALC_FLAG set 0 175 | endm 176 | 177 | baselea macro 178 | if SYSTEM 179 | move.l b_\1(a4),\2 180 | else 181 | lea.l \1,\2 182 | endc 183 | endm 184 | 185 | datalea macro 186 | if (MODE=0) 187 | lea.l \1,\2 188 | else ;(MODE=1) 189 | ifd Data_End 190 | ifd \1 191 | if (Data_End-\1)>512 192 | printt "Far data: \1" 193 | endc 194 | endc 195 | endc 196 | if PRECALC_FLAG 197 | lea.l PreCalc+(\1-Data_End)(pc),\2 198 | else 199 | lea.l Code+(PreCalc-PreCalc_End)+(\1-Data_End)(pc),\2 200 | endc 201 | endc 202 | endm 203 | 204 | fastlea macro 205 | if (MODE=0) 206 | lea.l \1,\2 207 | else ;(MODE=1) 208 | if PRECALC_FLAG 209 | lea.l PreCalc_End+(Code_End-Code)+(\1-Fast)(pc),\2 210 | else 211 | lea.l Code_End+(\1-Fast)(pc),\2 212 | endc 213 | endc 214 | endm 215 | 216 | codelea macro 217 | if (MODE=0) 218 | lea.l \1,\2 219 | else ;(MODE=1) 220 | if PRECALC_FLAG 221 | lea.l PreCalc_End+(\1-Code)(pc),\2 222 | else 223 | lea.l \1(pc),\2 224 | endc 225 | endc 226 | endm 227 | 228 | pcall macro 229 | if (MODE=0) 230 | jsr \1 231 | else ;(MODE=1) 232 | if PRECALC_FLAG 233 | bsr.w PreCalc_End+(\1-Code) 234 | else 235 | bsr.w \1 236 | endc 237 | endc 238 | endm 239 | 240 | TIMERINIT macro 241 | if DEBUG 242 | move.l b_VBlank(a4),d2 243 | if (\2)>0 244 | addq.l #(\2),d2 245 | endc 246 | move.l d2,b_EffectVBlank(a4) 247 | if (\1)>0 248 | addq.l #(\1),b_VBlank(a4) 249 | endc 250 | else 251 | if (\1)=0 252 | move.l b_VBlank(a4),d2 253 | if (\2)>0 254 | addq.l #(\2),d2 255 | endc 256 | move.l d2,b_EffectVBlank(a4) 257 | else 258 | .wait: move.l b_VBlank(a4),d2 259 | move.l b_EffectVBlank(a4),d3 260 | if (\1)-(\2)>1 261 | addq.l #(\1)-(\2)-1,d3 262 | endc 263 | cmp.l d3,d2 264 | ble.w .wait 265 | if (\2)>0 266 | addq.l #(\2),d2 267 | endc 268 | move.l d2,b_EffectVBlank(a4) 269 | endc 270 | endc 271 | endm 272 | 273 | MAINEND macro 274 | if DEBUG 275 | addq.l #1,b_VBlank(a4) 276 | btst.b #6,$bfe001 277 | bne.w MainLoop 278 | rts 279 | else 280 | bra.w MainLoop 281 | endc 282 | endm 283 | 284 | COUNTER macro 285 | if PERFCOUNT 286 | section perfcount,data_f 287 | a\@: dc.b "\1" 288 | b\@: dcb.b 16-(b\@-a\@),0 289 | counter_\1 = a\@+12 290 | endc 291 | endm 292 | 293 | COUNT macro 294 | if PERFCOUNT 295 | addq.l #1,counter_\1 296 | endc 297 | endm 298 | 299 | CLAMP macro 300 | if (MODE=0)|WINUAE 301 | fcmp.w #-128,\1 302 | fbge .ok1\@ 303 | fmove.w #-128,\1 304 | .ok1\@: fcmp.w #127,\1 305 | fble .ok2\@ 306 | fmove.w #127,\1 307 | .ok2\@: endc 308 | endm 309 | 310 | CLAMPW macro 311 | if (MODE=0)|WINUAE 312 | fcmp.w #-32768,\1 313 | fbge .ok1\@ 314 | fmove.w #-32768,\1 315 | .ok1\@: fcmp.w #32767,\1 316 | fble .ok2\@ 317 | fmove.w #32767,\1 318 | .ok2\@: endc 319 | endm 320 | 321 | ASSERT macro ; size,val1,comp,val2 322 | if ASSERTED 323 | cmp.\1 \4,\2 324 | b\3.b .ok\@ 325 | illegal 326 | .ok\@: 327 | endc 328 | endm 329 | 330 | PROFDEF macro ; Name 331 | if PROFILING 332 | ; New profile 333 | PROFILE_\1 = PROFILE_INDEX 334 | PROFILE_INDEX set PROFILE_INDEX+1 335 | 336 | section ProfileText,data_f 337 | text\@: dc.b "\1" 338 | text_end\@: dcb.b 64-(text_end\@-text\@),' ' 339 | section ProfileCounters,data_f 340 | dc.l 0,0 341 | endc 342 | endm 343 | 344 | PROFILE macro ; Name[,number] 345 | if PROFILING 346 | 347 | move.l #PROFILE_\1,CurrentProfile 348 | if "\2">"" 349 | add.l \2,ProfileCounters+PROFILE_\1*8+0 350 | else 351 | addq.l #1,ProfileCounters+PROFILE_\1*8+0 352 | endc 353 | 354 | endc 355 | endm 356 | 357 | NOPROFILE macro 358 | if PROFILING 359 | clr.l CurrentProfile 360 | endc 361 | endm 362 | 363 | ;; ********** Internal macros ********** 364 | 365 | CODECALL macro 366 | if (MODE=0) 367 | jsr \1 368 | else ;(MODE=2) 369 | bsr.w System+(hs_Code-hs_System)+\1_OFFSET 370 | endc 371 | endm 372 | 373 | ;; ********** Main macro ********** 374 | 375 | BEGIN4k macro ; Data files base name,mode 376 | MODE = \2 377 | SYSTEM = 1 378 | ifnd PREWAIT 379 | PREWAIT = 100 380 | endc 381 | ifnd RMBPAUSE 382 | RMBPAUSE = (MODE=0) 383 | endc 384 | ifnd DEBUG 385 | DEBUG = 0 386 | endc 387 | ifnd WINUAE 388 | WINUAE = 0 389 | endc 390 | ifnd FPUINT 391 | FPUINT = 1 392 | endc 393 | ifnd PERFCOUNT 394 | PERFCOUNT = 0 395 | endc 396 | ifnd ASSERTED 397 | ASSERTED = (MODE=0) 398 | endc 399 | ifnd PROFILING 400 | PROFILING = (MODE=0) 401 | endc 402 | 403 | ;; ********** Section setup ********** 404 | 405 | section System,code_f 406 | 407 | if (MODE=0)|(MODE=1) 408 | section BaseChip,data_f 409 | BaseChip: 410 | section BaseFast,data_f 411 | BaseFast: 412 | section Data,data_f 413 | Data: 414 | section PreCalc,code_f 415 | PreCalc: 416 | section Code,code_f 417 | Code: 418 | section Fast,bss_f 419 | Fast: 420 | ds.l 32 421 | section Chip,bss_c 422 | Chip: 423 | if PERFCOUNT 424 | section perfcount,data_f 425 | pc: 426 | endc 427 | 428 | if PROFILING 429 | section ProfileText,data_f 430 | p: 431 | dc.b "Name " 432 | dc.b " Number Time Each1000 Relative" 433 | dcb.b 64,'-' 434 | presult: dc.b "Default" 435 | dcb.b 64-7,' ' 436 | section ProfileCounters,data_f 437 | CurrentProfile: 438 | dc.l 0 439 | ProfileCounters: 440 | dc.l 0,0 441 | PROFILE_INDEX set 1 442 | endc 443 | 444 | else ;(MODE=2) 445 | 446 | include \1.i 447 | section Code,bss_f 448 | Code: 449 | ds.b CODE_SIZE 450 | Code_End: 451 | section Fast,bss_f 452 | Fast: 453 | ds.b FAST_SIZE 454 | Fast_End: 455 | section Chip,bss_c 456 | Chip: 457 | ds.b CHIP_SIZE 458 | Chip_End: 459 | endc 460 | 461 | Var VBlank 462 | Var Frame 463 | Var EffectFrame 464 | 465 | ; Var TopazCharData 466 | 467 | ;; ********** Init code ********** 468 | 469 | section System,code_f 470 | 471 | System: 472 | if (MODE=1) 473 | ; Write data 474 | 475 | ; Precalc data 476 | ifd DATA_PRECALC 477 | DATA_PRECALC 478 | endc 479 | 480 | ; Generate WordCode 481 | lea.l OrigCode,a2 482 | lea.l PreCalc,a0 483 | move.w #(PreCalc_End-PreCalc)/2-1,d7 484 | .cloop1: move.w (a0)+,(a2)+ 485 | dbf d7,.cloop1 486 | lea.l Code,a0 487 | move.w #(Real_Code_End-Code)/2-1,d7 488 | .cloop2: move.w (a0)+,(a2)+ 489 | dbf d7,.cloop2 490 | 491 | lea.l OrigCode,a1 492 | lea.l WordCode,a0 493 | move.l a1,a6 494 | bsr.w GenerateWordCode 495 | lea.l WordCode,a0 496 | bsr.w OptimizeWordCode 497 | move.l a0,d6 498 | sub.l #WordCode,d6 499 | 500 | ; Write constants 501 | lea.l IncludeFile(pc),a1 502 | move.l #VarFields,d0 503 | bsr.w WriteNumber 504 | move.l #ChipFields,d0 505 | bsr.w WriteNumber 506 | move.l #FastFields,d0 507 | bsr.w WriteNumber 508 | move.l d6,d0 509 | bsr.w WriteNumber 510 | move.l #(BaseChip_End-BaseChip)+(BaseFast_End-BaseFast),d0 511 | bsr.w WriteNumber 512 | move.l #Data_End-Data,d0 513 | bsr.w WriteNumber 514 | move.l #(PreCalc_End-PreCalc)+(Code_End-Code),d0 515 | bsr.w WriteNumber 516 | move.l #Fast_End-Fast,d0 517 | bsr.w WriteNumber 518 | move.l #Chip_End-Chip,d0 519 | bsr.w WriteNumber 520 | move.l #0,d0 521 | bsr.w WriteNumber 522 | move.l #(PreCalc_End-PreCalc)+(Main-Code),d0 523 | bsr.w WriteNumber 524 | move.l #(PreCalc_End-PreCalc)+(Interrupt-Code),d0 525 | bsr.w WriteNumber 526 | 527 | ; Open dos 528 | move.l $4.w,a6 529 | lea.l DosName(pc),a1 530 | jsr SU_OldOpenLibrary(a6) 531 | move.l d0,a6 532 | 533 | ; Write include file 534 | move.w #'.i',Ext 535 | move.l #FileName,d1 536 | move.l #SU_MODE_NEWFILE,d2 537 | jsr SU_Open(a6) 538 | move.l d0,d7 539 | beq.b .error1 540 | 541 | move.l d7,d1 542 | move.l #IncludeFile,d2 543 | move.l #IncludeFile_End-IncludeFile,d3 544 | jsr SU_Write(a6) 545 | 546 | move.l d7,d1 547 | jsr SU_Close(a6) 548 | .error1: 549 | 550 | ; Write bin file 551 | move.l #'.bin',Ext 552 | move.l #FileName,d1 553 | move.l #SU_MODE_NEWFILE,d2 554 | jsr SU_Open(a6) 555 | move.l d0,d7 556 | beq.b .error2 557 | move.l d7,d1 558 | 559 | move.l d7,d1 560 | move.l #WordCode,d2 561 | move.l d6,d3 562 | jsr SU_Write(a6) 563 | 564 | move.l d7,d1 565 | move.l #BaseChip,d2 566 | move.l #BaseChip_End-BaseChip,d3 567 | jsr SU_Write(a6) 568 | 569 | move.l d7,d1 570 | move.l #BaseFast,d2 571 | move.l #BaseFast_End-BaseFast,d3 572 | jsr SU_Write(a6) 573 | 574 | move.l d7,d1 575 | move.l #ZeroBytes,d2 576 | move.l d6,d3 577 | add.l #(BaseChip_End-BaseChip)+(BaseFast_End-BaseFast),d3 578 | neg.l d3 579 | and.l #7,d3 580 | jsr SU_Write(a6) 581 | 582 | move.l d7,d1 583 | move.l #Data,d2 584 | move.l #Data_End-Data,d3 585 | jsr SU_Write(a6) 586 | 587 | move.l d7,d1 588 | jsr SU_Close(a6) 589 | .error2: 590 | 591 | ; Close dos 592 | move.l a6,a1 593 | move.l $4.w,a6 594 | jsr SU_CloseLibrary(a6) 595 | 596 | ; Validate word code 597 | lea.l WordCode,a0 598 | lea.l UnpackCode,a1 599 | lea.l OrigCode,a3 600 | bsr.w CompileWordCode 601 | rts 602 | 603 | WriteNumber: 604 | ; D0 = Number 605 | ; A1 = Dest line 606 | 607 | lea.l 27(a1),a0 608 | lea.l 28(a1),a1 609 | .loop: 610 | divul.l #10,d1:d0 611 | add.b #'0',d1 612 | move.b d1,-(a0) 613 | tst.l d0 614 | bne.b .loop 615 | rts 616 | 617 | ZeroBytes: dcb.b 8,0 618 | 619 | IncludeFile: 620 | dc.b 'VarFields = ',10 621 | dc.b 'ChipFields = ',10 622 | dc.b 'FastFields = ',10 623 | dc.b 'COMP_SIZE = ',10 624 | dc.b 'BASE_SIZE = ',10 625 | dc.b 'DATA_SIZE = ',10 626 | dc.b 'CODE_SIZE = ',10 627 | dc.b 'FAST_SIZE = ',10 628 | dc.b 'CHIP_SIZE = ',10 629 | dc.b 'PreCalc_OFFSET = ',10 630 | dc.b 'Main_OFFSET = ',10 631 | dc.b 'Interrupt_OFFSET = ',10 632 | IncludeFile_End: 633 | 634 | FileName: dc.b "\1" 635 | Ext: dc.b 0,0,0,0,0 636 | 637 | DosName: dc.b 'dos.library',0 638 | even 639 | 640 | include 4k:GenerateWordCode.S 641 | 642 | section Buffers,bss_f 643 | 644 | OrigCode: ds.w 50000 645 | WordCode: ds.w 50000 646 | UnpackCode: ds.w 50000 647 | 648 | else ;(MODE=0)|(MODE=2) 649 | 650 | ifd PREINIT 651 | PREINIT 652 | endc 653 | 654 | if (MODE=0) 655 | 656 | ; Precalc data 657 | ifd DATA_PRECALC 658 | DATA_PRECALC 659 | endc 660 | 661 | ; Setup mem pointers 662 | lea.l Fast,a4 663 | lea.l Chip,a5 664 | 665 | ; Init base struct 666 | lea.l BaseChip,a0 667 | lea.l VarFields*4(a4),a1 668 | moveq.l #ChipFields,d7 669 | bra.b .clend 670 | .cloop: clr.l d0 671 | move.w (a0)+,d0 672 | lsl.l #MEMORY_UNITlog,d0 673 | add.l d0,a5 674 | move.l a5,(a1)+ 675 | .clend: dbf d7,.cloop 676 | move.l a4,a5 677 | lea.l BaseFast,a0 678 | moveq.l #FastFields,d7 679 | bra.b .flend 680 | .floop: clr.l d0 681 | move.w (a0)+,d0 682 | lsl.l #MEMORY_UNITlog,d0 683 | add.l d0,a5 684 | move.l a5,(a1)+ 685 | .flend: dbf d7,.floop 686 | 687 | else ;(MODE=2) 688 | 689 | ; Setup mem pointers 690 | lea.l System-hs_System+hs_Fast(pc),a4 691 | 692 | ; Init base struct 693 | if (ChipFields>0)|(FastFields>0) 694 | lea.l BaseStruct(pc),a0 695 | lea.l VarFields*4(a4),a1 696 | if (ChipFields>0) 697 | move.l System-4(pc),d5 698 | lsl.l #2,d5 699 | addq.l #4,d5 700 | move.l d5,a5 701 | moveq.l #ChipFields-1,d7 702 | .cloop: clr.l d0 703 | move.w (a0)+,d0 704 | lsl.l #MEMORY_UNITlog,d0 705 | add.l d0,a5 706 | move.l a5,(a1)+ 707 | dbf d7,.cloop 708 | endc 709 | if (FastFields>0) 710 | move.l a4,a5 711 | moveq.l #FastFields-1,d7 712 | .floop: clr.l d0 713 | move.w (a0)+,d0 714 | lsl.l #MEMORY_UNITlog,d0 715 | add.l d0,a5 716 | move.l a5,(a1)+ 717 | dbf d7,.floop 718 | endc 719 | endc 720 | 721 | endc 722 | 723 | ; Compile code 724 | if (MODE=2) 725 | lea.l CompressedCode(pc),a0 726 | lea.l System-hs_System+hs_Code(pc),a1 727 | bsr.w CompileWordCode 728 | move.l $4.w,a6 729 | jsr SU_CacheClearU(a6) 730 | endc 731 | 732 | CODECALL PreCalc 733 | Break: 734 | if (DEBUG=0) 735 | lea.l $dff000,a3 736 | move.l $4.w,a6 737 | jsr SU_CacheClearU(a6) 738 | lea.l GetVBR(pc),a5 739 | jsr SU_Supervisor(a6) 740 | ; lea.l SU_GfxName(pc),a1 741 | ; jsr SU_OldOpenLibrary(a6) 742 | moveq.l #SU_OLTAG_GRAPHICS,d0 743 | jsr SU_TaggedOpenLibrary(a6) 744 | move.l d0,a6 745 | ; ; Open topaz 746 | ; lea.l TextAttr(pc),a0 747 | ; lea.l TopazName(pc),a1 748 | ; move.l a1,(a0) 749 | ; jsr SU_OpenFont(a6) 750 | ; move.l d0,a0 751 | ; move.l SU_tf_CharData(a0),b_TopazCharData(a4) 752 | ; Clear display 753 | move.l SU_gb_ActiView(a6),d7 754 | suba.l a1,a1 755 | jsr SU_LoadView(a6) 756 | move.w #$0020,$1dc(a3) ; Ensure PAL 757 | moveq.l #PREWAIT-1,d2 758 | .wloop: jsr SU_WaitTOF(a6) 759 | dbf d2,.wloop 760 | move.w #$3fdf,$09a(a3) 761 | move.w #$00ff,$096(a3) 762 | 763 | ; Init interrupt 764 | move.l $6c(a2),a5 765 | movem.l d7/a2/a3/a5/a6,-(a7) 766 | lea.l InterruptHandler(pc),a1 767 | move.l a1,$6c(a2) 768 | move.l a7,-(a1) ; StackStore 769 | endc 770 | 771 | CODECALL Main 772 | 773 | ; Vbr, Int, GfxBase, OldView 774 | 775 | End: 776 | if (DEBUG=0) 777 | move.l StackStore(pc),a7 778 | 779 | ; Restore interrupt 780 | movem.l (a7)+,a1/a2/a3/a5/a6 781 | move.l a5,$6c(a2) 782 | move.w #$a00c,$09a(a3) 783 | move.w #$00ff,$096(a3) 784 | move.w #$81e0,$096(a3) 785 | move.l SU_gb_copinit(a6),$080(a3) 786 | jsr SU_LoadView(a6) 787 | endc 788 | ; move.l a6,a1 789 | ; move.l $4.w,a6 790 | ; jmp SU_CloseLibrary(a6) 791 | 792 | if PROFILING 793 | bsr.w WriteProfile 794 | endc 795 | 796 | moveq.l #0,d0 797 | rts 798 | 799 | GetVBR: 800 | movec vbr,a2 801 | rte 802 | 803 | ;SU_GfxName: 804 | ; dc.b 'graphics.library' 805 | ; even 806 | 807 | ;TextAttr: 808 | ; dc.l 0 809 | ; dc.w 8 810 | ; dc.b 0,0 811 | ;TopazName: 812 | ; dc.b 'topaz.font' 813 | ; even 814 | 815 | if PROFILING 816 | WriteProfile: 817 | lea.l ProfileCounters,a1 818 | clr.l d4 819 | moveq.l #N_PROFILES-1,d7 820 | .sumloop: 821 | add.l 4(a1),d4 822 | addq.l #8,a1 823 | dbf d7,.sumloop 824 | 825 | lea.l ProfileCounters,a1 826 | lea.l presult,a2 827 | moveq.l #N_PROFILES-1,d7 828 | .loop: move.l (a1)+,d2 ; Number 829 | move.l (a1)+,d3 ; Hits 830 | 831 | move.l d2,d0 832 | moveq.l #0,d1 833 | lea.l 34(a2),a0 834 | bsr.w WriteFracNumber 835 | 836 | move.l d3,d0 837 | moveq.l #0,d1 838 | lea.l 44(a2),a0 839 | bsr.w WriteFracNumber 840 | 841 | tst.l d2 842 | beq.b .none 843 | move.l d3,d0 844 | mulu.l #1000000,d0 845 | move.l d2,d1 846 | lsr.l #1,d1 847 | add.l d1,d0 848 | divu.l d2,d0 849 | moveq.l #3,d1 850 | lea.l 54(a2),a0 851 | bsr.w WriteFracNumber 852 | .none: 853 | 854 | tst.l d4 855 | beq.b .nohits 856 | move.l d3,d0 857 | mulu.l #10000,d0 858 | move.l d4,d1 859 | lsr.l #1,d1 860 | add.l d1,d0 861 | divu.l d4,d0 862 | moveq.l #2,d1 863 | lea.l 64(a2),a0 864 | move.b #'%',-(a0) 865 | bsr.w WriteFracNumber 866 | .nohits: 867 | lea.l 64(a2),a2 868 | dbf d7,.loop 869 | rts 870 | 871 | WriteFracNumber: 872 | ; D0 = Number 873 | ; D1 = Decimals 874 | ; A0 = Pointer (last+1) 875 | 876 | .loop: 877 | divul.l #10,d5:d0 878 | add.b #'0',d5 879 | move.b d5,-(a0) 880 | subq.l #1,d1 881 | bgt.b .loop 882 | blt.b .next 883 | move.b #'.',-(a0) 884 | bra.b .loop 885 | .next: tst.l d0 886 | bne.b .loop 887 | rts 888 | 889 | endc 890 | 891 | StackStore: 892 | dc.l 0 893 | InterruptHandler: 894 | movem.l d0-a6,-(a7) 895 | if FPUINT 896 | fsave -(a7) 897 | fmovem.x fp0-fp7,-(a7) 898 | endc 899 | 900 | lea.l $dff000,a3 901 | if (MODE=0) 902 | lea.l Fast,a4 903 | else ;(MODE=2) 904 | lea.l System+(hs_Fast-hs_System)(pc),a4 905 | endc 906 | addq.l #1,(a4) 907 | 908 | if PROFILING 909 | lea.l ProfileCounters,a0 910 | move.l CurrentProfile,d0 911 | addq.l #1,4(a0,d0.l*8) 912 | endc 913 | 914 | CODECALL Interrupt 915 | lea.l $dff000,a3 916 | 917 | if RMBPAUSE 918 | ; RMB pause 919 | .rmb: btst #10,$016(a3) 920 | bne.b .normb 921 | move.w #$0020,$09c(a3) 922 | move.w #$0020,$09c(a3) 923 | 924 | btst.b #6,$bfe001 925 | bne.b .rmbloop2 926 | .rmbloop: 927 | moveq.l #$0020,d0 928 | and.w $dff01e,d0 929 | beq.b .rmbloop 930 | CODECALL Interrupt 931 | lea.l $dff000,a3 932 | bra.b .rmb 933 | .rmbloop2: 934 | moveq.l #$0020,d0 935 | and.w $dff01e,d0 936 | beq.b .rmbloop2 937 | CODECALL Interrupt 938 | lea.l $dff000,a3 939 | btst.b #6,$bfe001 940 | bne.b .rmb 941 | move.w #$0020,$09c(a3) 942 | move.w #$0020,$09c(a3) 943 | if FPUINT 944 | fmovem.x (a7)+,fp0-fp7 945 | frestore (a7)+ 946 | endc 947 | movem.l (a7)+,d0-a6 948 | rte 949 | .normb: 950 | endc 951 | 952 | move.w #$0020,$09c(a3) 953 | move.w #$0020,$09c(a3) 954 | 955 | if FPUINT 956 | fmovem.x (a7)+,fp0-fp7 957 | frestore (a7)+ 958 | endc 959 | movem.l (a7)+,d0-a6 960 | 961 | btst.b #6,$bfe001 962 | bne.b .end 963 | if MODE=0 964 | .lmbwait: btst.b #6,$bfe001 965 | beq.b .lmbwait 966 | move.w #$0020,$dff09c 967 | move.w #$0020,$dff09c 968 | endc 969 | lea.l End(pc),a1 970 | move.l a1,2(a7) 971 | .end: 972 | rte 973 | 974 | endc 975 | 976 | if (MODE=2) 977 | ; WordCode 978 | include 4k:CompileWordCode.S 979 | System_End: 980 | dcb.b ((-(System_End-System))&7)+16,0 981 | CompressedCode: 982 | BaseStruct = CompressedCode+COMP_SIZE 983 | BaseStruct_End = BaseStruct+BASE_SIZE 984 | Data = BaseStruct_End+(-(COMP_SIZE+BASE_SIZE)&7) 985 | incbin \1.bin 986 | Real_Data_End: 987 | dcb.b (-(Real_Data_End-Data))&7,0 988 | Data_End: 989 | ; Consistency chack 990 | if Real_Data_End-(Data+DATA_SIZE) 991 | fail 992 | endc 993 | 994 | ; Hunk struct 995 | rsreset 996 | hs_System rs.b CompressedCode-System 997 | hs_CompCode rs.b BaseStruct-CompressedCode 998 | hs_BaseStruct rs.b BaseStruct_End-BaseStruct 999 | hs_DataAlign rs.b Data-BaseStruct_End 1000 | hs_Data rs.b Data_End-Data 1001 | hs_DataEnd rs.b 0 1002 | hs_Code rs.b Code_End-Code 1003 | hs_CodeEnd rs.b 0 1004 | hs_Fast rs.b Fast_End-Fast 1005 | hs_FastEnd rs.b 0 1006 | else ;(MODE=0)|(MODE=1) 1007 | CompressedCode: 1008 | BaseStruct: 1009 | endm 1010 | 1011 | END4k macro 1012 | VarFields = COUNT_Var 1013 | ChipFields = COUNT_Chip 1014 | FastFields = COUNT_Fast 1015 | Before_Chip = COUNT_Var 1016 | Before_Fast = COUNT_Var+COUNT_Chip 1017 | 1018 | section BaseChip,data_f 1019 | BaseChip_End: 1020 | section BaseFast,data_f 1021 | BaseFast_End: 1022 | section Data,data_f 1023 | Real_Data_End: 1024 | dcb.b (-(Real_Data_End-Data))&7,0 1025 | Data_End: 1026 | section PreCalc,code_f 1027 | rts 1028 | PreCalc_End: 1029 | section Code,code_f 1030 | Real_Code_End: 1031 | dcb.b (-((PreCalc_End-PreCalc)+(Real_Code_End-Code)))&7,0 1032 | Code_End: 1033 | section Fast,bss_f 1034 | Fast_End: 1035 | section Chip,bss_c 1036 | Chip_End: 1037 | if PROFILING 1038 | N_PROFILES = PROFILE_INDEX 1039 | section ProfileText,data_f 1040 | dcb.b 64,'-' 1041 | dcb.b 64,' ' 1042 | endc 1043 | endm 1044 | 1045 | endc ;ONCE 1046 | -------------------------------------------------------------------------------- /4k/Music.S: -------------------------------------------------------------------------------- 1 | NUMTRACKS = 14 2 | NUM_EFFECT_TRACKS = 6 3 | MUSICLENGTH = 2368 4 | SPEED = 5 5 | DELAY_LENGTH = 10869 6 | DELAY_STRENGTH = 30 7 | LONGEST_INSTRUMENT = 36 8 | LONGEST_TRACK_INSTRUMENT_BUFFER = 111 9 | 10 | InstrumentData: 11 | ; clap/1 12 | dc.b 0 13 | dc.b -120,-120,0,0,0,0,0,0,0,127,0,3,3,0,14,0,1,13,1,1 14 | dc.b 64,1 15 | ; #snare/6 16 | dc.b 0 17 | dc.b 40,0,0,0,-128,21,0,75,91,6,0,2,2,0,29,0,1,5,1,1 18 | dc.b 69,1 19 | ; bass/5 20 | dc.b 3 21 | dc.b 0,0,0,0,0,0,0,0,22,0,2,2,11,0,22,-6,1,40,16,1 22 | dc.b 33,4,10,4,2,8,0,4 23 | ; ambient/7 24 | dc.b 1 25 | dc.b -120,-101,-127,-127,-128,11,11,20,58,9,2,0,21,0,37,-6,70,42,1,1 26 | dc.b 69,6,12,6 27 | ; lead/3 28 | dc.b 6 29 | dc.b 0,0,0,0,0,0,0,0,0,36,0,2,2,0,15,0,1,5,1,1 30 | dc.b 33,1,7,1,3,1,2,1,7,1,1,1,4,1 31 | ; #lead/3 32 | dc.b 4 33 | dc.b 0,0,0,0,0,0,0,0,0,36,0,2,2,0,15,0,1,5,1,1 34 | dc.b 65,1,2,1,2,1,2,1,1,1 35 | ; bassdrum/0 36 | dc.b 0 37 | dc.b 0,26,0,-127,0,0,0,0,0,0,2,2,8,0,31,0,3,28,12,14 38 | dc.b 33,1 39 | ; clap/2 40 | dc.b 0 41 | dc.b -120,-120,0,0,0,0,0,0,0,127,0,3,3,0,11,0,1,13,1,1 42 | dc.b 52,1 43 | ; snare/6 44 | dc.b 0 45 | dc.b 40,0,0,0,-128,21,0,75,91,6,0,2,2,0,41,0,1,5,1,1 46 | dc.b 40,1 47 | ; hihat/8 48 | dc.b 0 49 | dc.b 36,72,-107,39,0,11,0,91,127,35,0,2,2,0,22,0,1,4,1,1 50 | dc.b 45,1 51 | ; #hihat/8 52 | dc.b 0 53 | dc.b 36,72,-107,39,0,11,0,91,127,35,0,2,2,0,19,0,1,4,1,1 54 | dc.b 45,1 55 | ; strings/4 56 | dc.b 2 57 | dc.b 0,0,0,0,-128,8,0,8,13,13,2,0,16,0,31,13,43,13,28,1 58 | dc.b 60,20,5,12,2,20 59 | ; strings/4 60 | dc.b 2 61 | dc.b 0,0,0,0,-128,8,0,8,13,13,2,0,16,0,31,13,43,13,28,1 62 | dc.b 64,20,5,12,2,20 63 | ; strings/4 64 | dc.b 2 65 | dc.b 0,0,0,0,-128,8,0,8,13,13,2,0,16,0,31,13,43,13,28,1 66 | dc.b 69,20,3,12,2,20 67 | 68 | NotePositions: 69 | ; clap/1 70 | ; position 6 - pattern 0 71 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8 72 | ; position 7 - pattern 0 73 | dc.b 130,8,8,8,130,8,8,8 74 | ; position 8 - pattern 0 75 | dc.b 130,8,8,8,130,8,8,8 76 | ; position 9 - pattern 0 77 | dc.b 130,8,8,8,130,8,8,8 78 | ; position 10 - pattern 0 79 | dc.b 130,8,8,8,130,8,8,8 80 | ; position 11 - pattern 1 81 | dc.b 130,8,8,8,130,8,8,8 82 | ; position 12 - pattern 0 83 | dc.b 130,8,8,8,130,8,8,8 84 | ; position 13 - pattern 0 85 | dc.b 130,8,8,8,130,8,8,8 86 | ; position 18 - pattern 0 87 | dc.b 130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8 88 | ; position 19 - pattern 0 89 | dc.b 130,8,8,8,130,8,8,8 90 | ; position 20 - pattern 0 91 | dc.b 130,8,8,8,130,8,8,8 92 | ; position 21 - pattern 0 93 | dc.b 130,8,8,8,130,8,8,8 94 | ; position 22 - pattern 0 95 | dc.b 130,8,8,8,130,8,8,8 96 | ; position 23 - pattern 0 97 | dc.b 130,8,8,8,130,8,8,8 98 | ; position 26 - pattern 0 99 | dc.b 130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8 100 | ; position 27 - pattern 0 101 | dc.b 130,8,8,8,130,8,8,8 102 | ; position 28 - pattern 0 103 | dc.b 130,8,8,8,130,8,8,8 104 | ; position 29 - pattern 0 105 | dc.b 130,8,8,8,130,8,8,8 106 | ; position 30 - pattern 0 107 | dc.b 130,8,8,8,130,8,8,8 108 | ; position 31 - pattern 0 109 | dc.b 130,8,8,8,130,8,8,8 110 | ; position 32 - pattern 0 111 | dc.b 130,8,8,8,130,8,8,8 112 | ; position 33 - pattern 0 113 | dc.b 130,8,8,8,130,8,8,8 114 | ; position 34 - pattern 12 115 | dc.b 130,8,8,8,130,8,8,8 116 | ; position 35 - pattern 13 117 | dc.b 130,8,8,8 118 | ; position 0 - pattern 0 119 | dc.b 130,0,0,0,0,0,0,0,0,0,0,0,0 120 | 121 | ; #snare/6 122 | ; position 6 - pattern 0 123 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,34,34,34,34,34,34 124 | ; position 7 - pattern 0 125 | dc.b 34,34,34,34,34,34,34,34 126 | ; position 8 - pattern 0 127 | dc.b 34,34,34,34,34,34,34,34 128 | ; position 9 - pattern 0 129 | dc.b 34,34,34,34,34,34,34,34 130 | ; position 10 - pattern 0 131 | dc.b 34,34,34,34,34,34,34,34 132 | ; position 11 - pattern 1 133 | dc.b 34,34,34,34,34,34,34,34 134 | ; position 12 - pattern 0 135 | dc.b 34,34,34,34,34,34,34,34 136 | ; position 13 - pattern 0 137 | dc.b 34,34,34,34,34,34,34,34 138 | ; position 18 - pattern 0 139 | dc.b 34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,34,34,34,34,34,34 140 | ; position 19 - pattern 0 141 | dc.b 34,34,34,34,34,34,34,34 142 | ; position 20 - pattern 0 143 | dc.b 34,34,34,34,34,34,34,34 144 | ; position 21 - pattern 0 145 | dc.b 34,34,34,34,34,34,34,34 146 | ; position 22 - pattern 0 147 | dc.b 34,34,34,34,34,34,34,34 148 | ; position 23 - pattern 0 149 | dc.b 34,34,34,34,34,34,34,34 150 | ; position 24 - pattern 12 151 | dc.b 34,34,34,34,34,34,34,34 152 | ; position 26 - pattern 0 153 | dc.b 34,0,0,0,0,0,0,0,0,34,34,34,34,34,34,34 154 | ; position 27 - pattern 0 155 | dc.b 34,34,34,34,34,34,34,34 156 | ; position 28 - pattern 0 157 | dc.b 34,34,34,34,34,34,34,34 158 | ; position 29 - pattern 0 159 | dc.b 34,34,34,34,34,34,34,34 160 | ; position 30 - pattern 0 161 | dc.b 34,34,34,34,34,34,34,34 162 | ; position 31 - pattern 0 163 | dc.b 34,34,34,34,34,34,34,34 164 | ; position 32 - pattern 0 165 | dc.b 34,34,34,34,34,34,34,34 166 | ; position 33 - pattern 0 167 | dc.b 34,34,34,34,34,34,34,34 168 | ; position 34 - pattern 12 169 | dc.b 34,34,34,34,34,34,34,34 170 | ; position 35 - pattern 13 171 | dc.b 34,34,34,34,34,34 172 | ; position 0 - pattern 0 173 | dc.b 32,0,0,0,0,0,0,0,0,0,0 174 | 175 | ; bass/5 176 | dc.b 136,8,136,8,136,8,136 177 | ; position 1 - pattern 0 178 | dc.b 8,136,8,136,8,136,8,136 179 | ; position 2 - pattern 0 180 | dc.b 8,136,8,136,8,136,8,136 181 | ; position 3 - pattern 0 182 | dc.b 8,136,8,136,8,136,8,136 183 | ; position 4 - pattern 0 184 | dc.b 8,136,8,136,8,136,8,136 185 | ; position 5 - pattern 15 186 | dc.b 8,136,8,136,8,136,8 187 | ; position 6 - pattern 0 188 | dc.b 136,0,136,8,136,8,136,8,136 189 | ; position 7 - pattern 0 190 | dc.b 8,136,8,136,8,136,8,136 191 | ; position 8 - pattern 0 192 | dc.b 8,136,8,136,8,136,8,136 193 | ; position 9 - pattern 0 194 | dc.b 8,136,8,136,8,136,8,136 195 | ; position 10 - pattern 0 196 | dc.b 8,136,8,136,8,136,8,136 197 | ; position 11 - pattern 1 198 | dc.b 8,136,8,136,8,136,8,136 199 | ; position 12 - pattern 0 200 | dc.b 8,136,8,136,8,136,8,136 201 | ; position 13 - pattern 0 202 | dc.b 8,136,8,136,8,136,8,136 203 | ; position 18 - pattern 0 204 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,8,136,8,136,8,136 205 | ; position 19 - pattern 0 206 | dc.b 8,136,8,136,8,136,8,136 207 | ; position 20 - pattern 0 208 | dc.b 8,136,8,136,8,136,8,136 209 | ; position 21 - pattern 0 210 | dc.b 8,136,8,136,8,136,8,136 211 | ; position 22 - pattern 0 212 | dc.b 8,136,8,136,8,136,8,136 213 | ; position 23 - pattern 0 214 | dc.b 8,136,8,136,8,136,8,136 215 | ; position 24 - pattern 12 216 | dc.b 8,136,8,136,8,136,8,136 217 | ; position 25 - pattern 13 218 | dc.b 8,136,8,136,8,136,8 219 | ; position 26 - pattern 0 220 | dc.b 136,0,136,8,136,8,136,8,136 221 | ; position 27 - pattern 0 222 | dc.b 8,136,8,136,8,136,8,136 223 | ; position 28 - pattern 0 224 | dc.b 8,136,8,136,8,136,8,136 225 | ; position 29 - pattern 0 226 | dc.b 8,136,8,136,8,136,8,136 227 | ; position 30 - pattern 0 228 | dc.b 8,136,8,136,8,136,8,136 229 | ; position 31 - pattern 0 230 | dc.b 8,136,8,136,8,136,8,136 231 | ; position 32 - pattern 0 232 | dc.b 8,136,8,136,8,136,8,136 233 | ; position 33 - pattern 0 234 | dc.b 8,136,8,136,8,136,8,136 235 | ; position 34 - pattern 12 236 | dc.b 8,136,8,136,8,136,8,136 237 | ; position 35 - pattern 13 238 | dc.b 8,136,8,136,8,136,8 239 | ; position 0 - pattern 0 240 | dc.b 136,0,0,0,0,0,0,0,0,0 241 | 242 | ; ambient/7 243 | ; position 10 - pattern 0 244 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128 245 | ; position 11 - pattern 1 246 | dc.b 8,0,0,0,0,0,0,128 247 | ; position 12 - pattern 0 248 | dc.b 8,0,0,0,0,0,0,128 249 | ; position 13 - pattern 0 250 | dc.b 8,0,0,0,0,0,0,128 251 | ; position 14 - pattern 2 252 | dc.b 8,0,0,0,0,0,0,128 253 | ; position 15 - pattern 2 254 | dc.b 8,0,0,0,0,0,0,128 255 | ; position 16 - pattern 2 256 | dc.b 8,0,0,0,0,0,0,128 257 | ; position 17 - pattern 2 258 | dc.b 8,0,0,0,0,0,0,128 259 | ; position 20 - pattern 0 260 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128 261 | ; position 21 - pattern 0 262 | dc.b 8,0,0,0,0,0,0,128 263 | ; position 22 - pattern 0 264 | dc.b 8,0,0,0,0,0,0,128 265 | ; position 23 - pattern 0 266 | dc.b 8,0,0,0,0,0,0,128 267 | ; position 24 - pattern 12 268 | dc.b 8,0,0,0,0,0,0,128 269 | ; position 25 - pattern 13 270 | dc.b 8,0,0,0,0,0,0,128 271 | ; position 28 - pattern 0 272 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128 273 | ; position 29 - pattern 0 274 | dc.b 8,0,0,0,0,0,0,128 275 | ; position 30 - pattern 0 276 | dc.b 8,0,0,0,0,0,0,128 277 | ; position 31 - pattern 0 278 | dc.b 8,0,0,0,0,0,0,128 279 | ; position 32 - pattern 0 280 | dc.b 8,0,0,0,0,0,0,128 281 | ; position 33 - pattern 0 282 | dc.b 8,0,0,0,0,0,0,128 283 | ; position 34 - pattern 12 284 | dc.b 8,0,0,0,0,0,0,128 285 | ; position 35 - pattern 13 286 | dc.b 8,0,0,0,0,0,0,128 287 | ; position 0 - pattern 0 288 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0 289 | 290 | ; lead/3 291 | ; position 2 - pattern 0 292 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63 293 | ; position 8 - pattern 0 294 | dc.b 192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63 295 | ; position 16 - pattern 2 296 | dc.b 192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,240,63,240,63,240,63 297 | ; position 17 - pattern 2 298 | dc.b 240,63,240,63,240,63,240,63 299 | ; position 18 - pattern 0 300 | dc.b 240,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207 301 | ; position 22 - pattern 0 302 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207 303 | ; position 25 - pattern 13 304 | dc.b 0,0,0,0,0,0,0,0,63,240,63,240,63,240,63 305 | ; position 26 - pattern 0 306 | dc.b 240,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207,63,243,63,207 307 | ; position 34 - pattern 12 308 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,240,63,240,63,240,63 309 | ; position 35 - pattern 13 310 | dc.b 240,63,240,63,240,63,240,63 311 | ; position 0 - pattern 0 312 | dc.b 240,0,0,0,0,0,0,0,0 313 | 314 | ; #lead/3 315 | ; position 14 - pattern 2 316 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,59,131,184,59,142,227 317 | ; position 15 - pattern 2 318 | dc.b 184,238,59,131,184,59,142,227 319 | ; position 16 - pattern 2 320 | dc.b 184,238,59,131,184,59,142,227 321 | ; position 17 - pattern 2 322 | dc.b 184,238,59,131,184,59,142,227 323 | ; position 0 - pattern 0 324 | dc.b 184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 325 | 326 | ; bassdrum/0 327 | ; position 4 - pattern 0 328 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,32,130,32,130,32,130 329 | ; position 5 - pattern 15 330 | dc.b 8,130,32,130,32,130,32 331 | ; position 6 - pattern 0 332 | dc.b 128,0,130,32,130,32,130,32,130 333 | ; position 7 - pattern 0 334 | dc.b 8,130,32,130,32,130,32,130 335 | ; position 8 - pattern 0 336 | dc.b 8,130,32,130,32,130,32,130 337 | ; position 9 - pattern 0 338 | dc.b 8,130,32,130,32,130,32,130 339 | ; position 10 - pattern 0 340 | dc.b 8,130,32,130,32,130,32,130 341 | ; position 11 - pattern 1 342 | dc.b 8,130,32,130,32,130,32,130 343 | ; position 12 - pattern 0 344 | dc.b 8,130,32,130,32,130,32,130 345 | ; position 13 - pattern 0 346 | dc.b 8,130,32,130,32,130,32,130 347 | ; position 18 - pattern 0 348 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,32,130,32,130,32,130 349 | ; position 19 - pattern 0 350 | dc.b 8,130,32,130,32,130,32,130 351 | ; position 20 - pattern 0 352 | dc.b 8,130,32,130,32,130,32,130 353 | ; position 21 - pattern 0 354 | dc.b 8,130,32,130,32,130,32,130 355 | ; position 22 - pattern 0 356 | dc.b 8,130,32,130,32,130,32,130 357 | ; position 23 - pattern 0 358 | dc.b 8,130,32,130,32,130,32,130 359 | ; position 24 - pattern 12 360 | dc.b 8,130,32,130,32,130,32,130 361 | ; position 26 - pattern 0 362 | dc.b 8,0,0,0,0,0,0,0,0,130,32,130,32,130,32,130 363 | ; position 27 - pattern 0 364 | dc.b 8,130,32,130,32,130,32,130 365 | ; position 28 - pattern 0 366 | dc.b 8,130,32,130,32,130,32,130 367 | ; position 29 - pattern 0 368 | dc.b 8,130,32,130,32,130,32,130 369 | ; position 30 - pattern 0 370 | dc.b 8,130,32,130,32,130,32,130 371 | ; position 31 - pattern 0 372 | dc.b 8,130,32,130,32,130,32,130 373 | ; position 32 - pattern 0 374 | dc.b 8,130,32,130,32,130,32,130 375 | ; position 33 - pattern 0 376 | dc.b 8,130,32,130,32,130,32,130 377 | ; position 0 - pattern 0 378 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 379 | 380 | ; clap/2 381 | ; position 6 - pattern 0 382 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8 383 | ; position 7 - pattern 0 384 | dc.b 130,8,8,8,130,8,8,8 385 | ; position 8 - pattern 0 386 | dc.b 130,8,8,8,130,8,8,8 387 | ; position 9 - pattern 0 388 | dc.b 130,8,8,8,130,8,8,8 389 | ; position 10 - pattern 0 390 | dc.b 130,8,8,8,130,8,8,8 391 | ; position 11 - pattern 1 392 | dc.b 130,8,8,8,130,8,8,8 393 | ; position 12 - pattern 0 394 | dc.b 130,8,8,8,130,8,8,8 395 | ; position 13 - pattern 0 396 | dc.b 130,8,8,8,130,8,8,8 397 | ; position 18 - pattern 0 398 | dc.b 130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8 399 | ; position 19 - pattern 0 400 | dc.b 130,8,8,8,130,8,8,8 401 | ; position 20 - pattern 0 402 | dc.b 130,8,8,8,130,8,8,8 403 | ; position 21 - pattern 0 404 | dc.b 130,8,8,8,130,8,8,8 405 | ; position 22 - pattern 0 406 | dc.b 130,8,8,8,130,8,8,8 407 | ; position 23 - pattern 0 408 | dc.b 130,8,8,8,130,8,8,8 409 | ; position 26 - pattern 0 410 | dc.b 130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,130,8,8,8 411 | ; position 27 - pattern 0 412 | dc.b 130,8,8,8,130,8,8,8 413 | ; position 28 - pattern 0 414 | dc.b 130,8,8,8,130,8,8,8 415 | ; position 29 - pattern 0 416 | dc.b 130,8,8,8,130,8,8,8 417 | ; position 30 - pattern 0 418 | dc.b 130,8,8,8,130,8,8,8 419 | ; position 31 - pattern 0 420 | dc.b 130,8,8,8,130,8,8,8 421 | ; position 32 - pattern 0 422 | dc.b 130,8,8,8,130,8,8,8 423 | ; position 33 - pattern 0 424 | dc.b 130,8,8,8,130,8,8,8 425 | ; position 34 - pattern 12 426 | dc.b 130,8,8,8,130,8,8,8 427 | ; position 35 - pattern 13 428 | dc.b 130,8,8,8 429 | ; position 0 - pattern 0 430 | dc.b 130,0,0,0,0,0,0,0,0,0,0,0,0 431 | 432 | ; snare/6 433 | ; position 6 - pattern 0 434 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,203,42,203,174,203,42,203 435 | ; position 7 - pattern 0 436 | dc.b 174,203,42,203,174,203,42,203 437 | ; position 8 - pattern 0 438 | dc.b 174,203,42,203,174,203,42,203 439 | ; position 9 - pattern 0 440 | dc.b 174,203,42,203,174,203,42,203 441 | ; position 10 - pattern 0 442 | dc.b 174,203,42,203,174,203,42,203 443 | ; position 11 - pattern 1 444 | dc.b 174,203,42,203,174,203,42,203 445 | ; position 12 - pattern 0 446 | dc.b 174,203,42,203,174,203,42,203 447 | ; position 13 - pattern 0 448 | dc.b 174,203,42,203,174,203,42,203 449 | ; position 18 - pattern 0 450 | dc.b 174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,203,42,203,174,203,42,203 451 | ; position 19 - pattern 0 452 | dc.b 174,203,42,203,174,203,42,203 453 | ; position 20 - pattern 0 454 | dc.b 174,203,42,203,174,203,42,203 455 | ; position 21 - pattern 0 456 | dc.b 174,203,42,203,174,203,42,203 457 | ; position 22 - pattern 0 458 | dc.b 174,203,42,203,174,203,42,203 459 | ; position 23 - pattern 0 460 | dc.b 174,203,42,203,174,203,42,203 461 | ; position 24 - pattern 12 462 | dc.b 174,203,42,203,174,203,42,203 463 | ; position 25 - pattern 13 464 | dc.b 174,203,42,203,174,203 465 | ; position 26 - pattern 0 466 | dc.b 40,0,0,203,42,203,174,203,42,203 467 | ; position 27 - pattern 0 468 | dc.b 174,203,42,203,174,203,42,203 469 | ; position 28 - pattern 0 470 | dc.b 174,203,42,203,174,203,42,203 471 | ; position 29 - pattern 0 472 | dc.b 174,203,42,203,174,203,42,203 473 | ; position 30 - pattern 0 474 | dc.b 174,203,42,203,174,203,42,203 475 | ; position 31 - pattern 0 476 | dc.b 174,203,42,203,174,203,42,203 477 | ; position 32 - pattern 0 478 | dc.b 174,203,42,203,174,203,42,203 479 | ; position 33 - pattern 0 480 | dc.b 174,203,42,203,174,203,42,203 481 | ; position 0 - pattern 0 482 | dc.b 174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 483 | 484 | ; hihat/8 485 | ; position 6 - pattern 0 486 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 487 | ; position 18 - pattern 0 488 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 489 | ; position 26 - pattern 0 490 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 491 | ; position 32 - pattern 0 492 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 493 | ; position 0 - pattern 0 494 | dc.b 248,0,0,0,0,0,0,0,0,0,0 495 | 496 | ; #hihat/8 497 | ; position 6 - pattern 0 498 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51 499 | ; position 18 - pattern 0 500 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51 501 | ; position 26 - pattern 0 502 | dc.b 48,0,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51 503 | ; position 32 - pattern 0 504 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51 505 | ; position 0 - pattern 0 506 | dc.b 48,0,0,0,0,0,0,0,0,0,0 507 | 508 | ; strings/4 509 | ; position 10 - pattern 0 510 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 511 | ; position 11 - pattern 1 512 | dc.b 8,0,128,0,8,0,128,0 513 | ; position 12 - pattern 0 514 | dc.b 8,0,128,0,8,0,128,0 515 | ; position 13 - pattern 0 516 | dc.b 8,0,128,0,8,0,128,0 517 | ; position 14 - pattern 2 518 | dc.b 8,0,128,0,8,0,128,0 519 | ; position 15 - pattern 2 520 | dc.b 8,0,128,0,8,0,128,0 521 | ; position 16 - pattern 2 522 | dc.b 8,0,128,0,8,0,128,0 523 | ; position 17 - pattern 2 524 | dc.b 8,0,128,0,8,0,128,0 525 | ; position 20 - pattern 0 526 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 527 | ; position 21 - pattern 0 528 | dc.b 8,0,128,0,8,0,128,0 529 | ; position 22 - pattern 0 530 | dc.b 8,0,128,0,8,0,128,0 531 | ; position 23 - pattern 0 532 | dc.b 8,0,128,0,8,0,128,0 533 | ; position 24 - pattern 12 534 | dc.b 8,0,128,0,8,0,128,0 535 | ; position 25 - pattern 13 536 | dc.b 8,0,128,0,8,0 537 | ; position 28 - pattern 0 538 | dc.b 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 539 | ; position 29 - pattern 0 540 | dc.b 8,0,128,0,8,0,128,0 541 | ; position 30 - pattern 0 542 | dc.b 8,0,128,0,8,0,128,0 543 | ; position 31 - pattern 0 544 | dc.b 8,0,128,0,8,0,128,0 545 | ; position 32 - pattern 0 546 | dc.b 8,0,128,0,8,0,128,0 547 | ; position 33 - pattern 0 548 | dc.b 8,0,128,0,8,0,128,0 549 | ; position 34 - pattern 12 550 | dc.b 8,0,128,0,8,0,128,0 551 | ; position 35 - pattern 13 552 | dc.b 8,0,128,0,8,0 553 | ; position 0 - pattern 0 554 | dc.b 128,0,0,0,0,0,0,0,0,0,0,0 555 | 556 | ; strings/4 557 | ; position 10 - pattern 0 558 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 559 | ; position 11 - pattern 1 560 | dc.b 8,0,128,0,8,0,128,0 561 | ; position 12 - pattern 0 562 | dc.b 8,0,128,0,8,0,128,0 563 | ; position 13 - pattern 0 564 | dc.b 8,0,128,0,8,0,128,0 565 | ; position 14 - pattern 2 566 | dc.b 8,0,128,0,8,0,128,0 567 | ; position 15 - pattern 2 568 | dc.b 8,0,128,0,8,0,128,0 569 | ; position 16 - pattern 2 570 | dc.b 8,0,128,0,8,0,128,0 571 | ; position 17 - pattern 2 572 | dc.b 8,0,128,0,8,0,128,0 573 | ; position 20 - pattern 0 574 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 575 | ; position 21 - pattern 0 576 | dc.b 8,0,128,0,8,0,128,0 577 | ; position 22 - pattern 0 578 | dc.b 8,0,128,0,8,0,128,0 579 | ; position 23 - pattern 0 580 | dc.b 8,0,128,0,8,0,128,0 581 | ; position 24 - pattern 12 582 | dc.b 8,0,128,0,8,0,128,0 583 | ; position 25 - pattern 13 584 | dc.b 8,0,128,0,8,0 585 | ; position 28 - pattern 0 586 | dc.b 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 587 | ; position 29 - pattern 0 588 | dc.b 8,0,128,0,8,0,128,0 589 | ; position 30 - pattern 0 590 | dc.b 8,0,128,0,8,0,128,0 591 | ; position 31 - pattern 0 592 | dc.b 8,0,128,0,8,0,128,0 593 | ; position 32 - pattern 0 594 | dc.b 8,0,128,0,8,0,128,0 595 | ; position 33 - pattern 0 596 | dc.b 8,0,128,0,8,0,128,0 597 | ; position 34 - pattern 12 598 | dc.b 8,0,128,0,8,0,128,0 599 | ; position 35 - pattern 13 600 | dc.b 8,0,128,0,8,0 601 | ; position 0 - pattern 0 602 | dc.b 128,0,0,0,0,0,0,0,0,0,0,0 603 | 604 | ; strings/4 605 | ; position 10 - pattern 0 606 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 607 | ; position 11 - pattern 1 608 | dc.b 8,0,128,0,8,0,128,0 609 | ; position 12 - pattern 0 610 | dc.b 8,0,128,0,8,0,128,0 611 | ; position 13 - pattern 0 612 | dc.b 8,0,128,0,8,0,128,0 613 | ; position 14 - pattern 2 614 | dc.b 8,0,128,0,8,0,128,0 615 | ; position 15 - pattern 2 616 | dc.b 8,0,128,0,8,0,128,0 617 | ; position 16 - pattern 2 618 | dc.b 8,0,128,0,8,0,128,0 619 | ; position 17 - pattern 2 620 | dc.b 8,0,128,0,8,0,128,0 621 | ; position 20 - pattern 0 622 | dc.b 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 623 | ; position 21 - pattern 0 624 | dc.b 8,0,128,0,8,0,128,0 625 | ; position 22 - pattern 0 626 | dc.b 8,0,128,0,8,0,128,0 627 | ; position 23 - pattern 0 628 | dc.b 8,0,128,0,8,0,128,0 629 | ; position 24 - pattern 12 630 | dc.b 8,0,128,0,8,0,128,0 631 | ; position 25 - pattern 13 632 | dc.b 8,0,128,0,8,0 633 | ; position 28 - pattern 0 634 | dc.b 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,8,0,128,0 635 | ; position 29 - pattern 0 636 | dc.b 8,0,128,0,8,0,128,0 637 | ; position 30 - pattern 0 638 | dc.b 8,0,128,0,8,0,128,0 639 | ; position 31 - pattern 0 640 | dc.b 8,0,128,0,8,0,128,0 641 | ; position 32 - pattern 0 642 | dc.b 8,0,128,0,8,0,128,0 643 | ; position 33 - pattern 0 644 | dc.b 8,0,128,0,8,0,128,0 645 | ; position 34 - pattern 12 646 | dc.b 8,0,128,0,8,0,128,0 647 | ; position 35 - pattern 13 648 | dc.b 8,0,128,0,8,0 649 | ; position 0 - pattern 0 650 | dc.b 128,0,0,0,0,0,0,0,0,0,0,0 651 | 652 | 653 | NoteSamples: 654 | ; clap/1 655 | ; position 6 - pattern 0 656 | dc.b 0,0,0,0,0,0,0,0,0,0 657 | ; position 7 - pattern 0 658 | dc.b 0,0,0,0,0,0,0,0,0,0 659 | ; position 8 - pattern 0 660 | dc.b 0,0,0,0,0,0,0,0,0,0 661 | ; position 9 - pattern 0 662 | dc.b 0,0,0,0,0,0,0,0,0,0 663 | ; position 10 - pattern 0 664 | dc.b 0,0,0,0,0,0,0,0,0,0 665 | ; position 11 - pattern 1 666 | dc.b 0,0,0,0,0,0,0,0,0,0 667 | ; position 12 - pattern 0 668 | dc.b 0,0,0,0,0,0,0,0,0,0 669 | ; position 13 - pattern 0 670 | dc.b 0,0,0,0,0,0,0,0,0,0 671 | ; position 18 - pattern 0 672 | dc.b 0,0,0,0,0,0,0,0,0,0 673 | ; position 19 - pattern 0 674 | dc.b 0,0,0,0,0,0,0,0,0,0 675 | ; position 20 - pattern 0 676 | dc.b 0,0,0,0,0,0,0,0,0,0 677 | ; position 21 - pattern 0 678 | dc.b 0,0,0,0,0,0,0,0,0,0 679 | ; position 22 - pattern 0 680 | dc.b 0,0,0,0,0,0,0,0,0,0 681 | ; position 23 - pattern 0 682 | dc.b 0,0,0,0,0,0,0,0,0,0 683 | ; position 26 - pattern 0 684 | dc.b 0,0,0,0,0,0,0,0,0,0 685 | ; position 27 - pattern 0 686 | dc.b 0,0,0,0,0,0,0,0,0,0 687 | ; position 28 - pattern 0 688 | dc.b 0,0,0,0,0,0,0,0,0,0 689 | ; position 29 - pattern 0 690 | dc.b 0,0,0,0,0,0,0,0,0,0 691 | ; position 30 - pattern 0 692 | dc.b 0,0,0,0,0,0,0,0,0,0 693 | ; position 31 - pattern 0 694 | dc.b 0,0,0,0,0,0,0,0,0,0 695 | ; position 32 - pattern 0 696 | dc.b 0,0,0,0,0,0,0,0,0,0 697 | ; position 33 - pattern 0 698 | dc.b 0,0,0,0,0,0,0,0,0,0 699 | ; position 34 - pattern 12 700 | dc.b 0,0,0,0,0,0,0,0,0,0 701 | ; position 35 - pattern 13 702 | dc.b 0,0,0,0,0 703 | dc.b -1 704 | 705 | ; #snare/6 706 | ; position 6 - pattern 0 707 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 708 | ; position 7 - pattern 0 709 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 710 | ; position 8 - pattern 0 711 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 712 | ; position 9 - pattern 0 713 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 714 | ; position 10 - pattern 0 715 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 716 | ; position 11 - pattern 1 717 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 718 | ; position 12 - pattern 0 719 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 720 | ; position 13 - pattern 0 721 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 722 | ; position 18 - pattern 0 723 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 724 | ; position 19 - pattern 0 725 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 726 | ; position 20 - pattern 0 727 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 728 | ; position 21 - pattern 0 729 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 730 | ; position 22 - pattern 0 731 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 732 | ; position 23 - pattern 0 733 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 734 | ; position 24 - pattern 12 735 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 736 | ; position 26 - pattern 0 737 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 738 | ; position 27 - pattern 0 739 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 740 | ; position 28 - pattern 0 741 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 742 | ; position 29 - pattern 0 743 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 744 | ; position 30 - pattern 0 745 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 746 | ; position 31 - pattern 0 747 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 748 | ; position 32 - pattern 0 749 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 750 | ; position 33 - pattern 0 751 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 752 | ; position 34 - pattern 12 753 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 754 | ; position 35 - pattern 13 755 | dc.b 0,0,0,0,0,0,0,0,0,0,0 756 | dc.b -1 757 | 758 | ; bass/5 759 | ; position 0 - pattern 0 760 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 761 | ; position 1 - pattern 0 762 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 763 | ; position 2 - pattern 0 764 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 765 | ; position 3 - pattern 0 766 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 767 | ; position 4 - pattern 0 768 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 769 | ; position 5 - pattern 15 770 | dc.b 0,2,3,0,2,1,0,2,3,0,3 771 | ; position 6 - pattern 0 772 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 773 | ; position 7 - pattern 0 774 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 775 | ; position 8 - pattern 0 776 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 777 | ; position 9 - pattern 0 778 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 779 | ; position 10 - pattern 0 780 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 781 | ; position 11 - pattern 1 782 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 783 | ; position 12 - pattern 0 784 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 785 | ; position 13 - pattern 0 786 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 787 | ; position 18 - pattern 0 788 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 789 | ; position 19 - pattern 0 790 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 791 | ; position 20 - pattern 0 792 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 793 | ; position 21 - pattern 0 794 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 795 | ; position 22 - pattern 0 796 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 797 | ; position 23 - pattern 0 798 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 799 | ; position 24 - pattern 12 800 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 801 | ; position 25 - pattern 13 802 | dc.b 0,2,3,0,2,1,0,2,3,0,3 803 | ; position 26 - pattern 0 804 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 805 | ; position 27 - pattern 0 806 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 807 | ; position 28 - pattern 0 808 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 809 | ; position 29 - pattern 0 810 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 811 | ; position 30 - pattern 0 812 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 813 | ; position 31 - pattern 0 814 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 815 | ; position 32 - pattern 0 816 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 817 | ; position 33 - pattern 0 818 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 819 | ; position 34 - pattern 12 820 | dc.b 0,2,3,0,2,1,0,2,3,0,2,1 821 | ; position 35 - pattern 13 822 | dc.b 0,2,3,0,2,1,0,2,3,0,3 823 | dc.b -1 824 | 825 | ; ambient/7 826 | ; position 10 - pattern 0 827 | dc.b 0,1 828 | ; position 11 - pattern 1 829 | dc.b 0,1 830 | ; position 12 - pattern 0 831 | dc.b 0,1 832 | ; position 13 - pattern 0 833 | dc.b 0,1 834 | ; position 14 - pattern 2 835 | dc.b 0,1 836 | ; position 15 - pattern 2 837 | dc.b 0,1 838 | ; position 16 - pattern 2 839 | dc.b 0,1 840 | ; position 17 - pattern 2 841 | dc.b 0,1 842 | ; position 20 - pattern 0 843 | dc.b 0,1 844 | ; position 21 - pattern 0 845 | dc.b 0,1 846 | ; position 22 - pattern 0 847 | dc.b 0,1 848 | ; position 23 - pattern 0 849 | dc.b 0,1 850 | ; position 24 - pattern 12 851 | dc.b 0,1 852 | ; position 25 - pattern 13 853 | dc.b 0,1 854 | ; position 28 - pattern 0 855 | dc.b 0,1 856 | ; position 29 - pattern 0 857 | dc.b 0,1 858 | ; position 30 - pattern 0 859 | dc.b 0,1 860 | ; position 31 - pattern 0 861 | dc.b 0,1 862 | ; position 32 - pattern 0 863 | dc.b 0,1 864 | ; position 33 - pattern 0 865 | dc.b 0,1 866 | ; position 34 - pattern 12 867 | dc.b 0,1 868 | ; position 35 - pattern 13 869 | dc.b 0,1 870 | dc.b -1 871 | 872 | ; lead/3 873 | ; position 2 - pattern 0 874 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 875 | ; position 3 - pattern 0 876 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 877 | ; position 4 - pattern 0 878 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 879 | ; position 5 - pattern 15 880 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6 881 | ; position 8 - pattern 0 882 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 883 | ; position 9 - pattern 0 884 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 885 | ; position 10 - pattern 0 886 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 887 | ; position 11 - pattern 1 888 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6 889 | ; position 16 - pattern 2 890 | dc.b 0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4 891 | ; position 17 - pattern 2 892 | dc.b 0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4 893 | ; position 18 - pattern 0 894 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 895 | ; position 19 - pattern 0 896 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 897 | ; position 22 - pattern 0 898 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 899 | ; position 23 - pattern 0 900 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 901 | ; position 25 - pattern 13 902 | dc.b 0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4 903 | ; position 26 - pattern 0 904 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 905 | ; position 27 - pattern 0 906 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 907 | ; position 28 - pattern 0 908 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 909 | ; position 29 - pattern 0 910 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 911 | ; position 30 - pattern 0 912 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 913 | ; position 31 - pattern 0 914 | dc.b 0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2,0,0,3,3,3,3,0,0,4,4,1,1,0,0,3,3,3,3,6,6,5,5,2,2 915 | ; position 34 - pattern 12 916 | dc.b 0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4 917 | ; position 35 - pattern 13 918 | dc.b 0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4,0,0,3,3,3,3,0,0,4,4 919 | dc.b -1 920 | 921 | ; #lead/3 922 | ; position 14 - pattern 2 923 | dc.b 2,2,3,4,4,3,1,1,4,3,3,4,0,0,1,2,2,3,1,1,2,3,3,4,2,2,3,2,2,4,4,4,3,2,2,1 924 | ; position 15 - pattern 2 925 | dc.b 2,2,3,4,4,3,1,1,4,3,3,4,0,0,1,2,2,3,1,1,2,3,3,4,2,2,3,2,2,4,4,4,3,2,2,1 926 | ; position 16 - pattern 2 927 | dc.b 2,2,3,4,4,3,1,1,4,3,3,4,0,0,1,2,2,3,1,1,2,3,3,4,2,2,3,2,2,4,4,4,3,2,2,1 928 | ; position 17 - pattern 2 929 | dc.b 2,2,3,4,4,3,1,1,4,3,3,4,0,0,1,2,2,3,1,1,2,3,3,4,2,2,3,2,2,4,4,4,3,2,2,1 930 | dc.b -1 931 | 932 | ; bassdrum/0 933 | ; position 4 - pattern 0 934 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 935 | ; position 5 - pattern 15 936 | dc.b 0,0,0,0,0,0,0,0,0,0 937 | ; position 6 - pattern 0 938 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 939 | ; position 7 - pattern 0 940 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 941 | ; position 8 - pattern 0 942 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 943 | ; position 9 - pattern 0 944 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 945 | ; position 10 - pattern 0 946 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 947 | ; position 11 - pattern 1 948 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 949 | ; position 12 - pattern 0 950 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 951 | ; position 13 - pattern 0 952 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 953 | ; position 18 - pattern 0 954 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 955 | ; position 19 - pattern 0 956 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 957 | ; position 20 - pattern 0 958 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 959 | ; position 21 - pattern 0 960 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 961 | ; position 22 - pattern 0 962 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 963 | ; position 23 - pattern 0 964 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 965 | ; position 24 - pattern 12 966 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 967 | ; position 26 - pattern 0 968 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 969 | ; position 27 - pattern 0 970 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 971 | ; position 28 - pattern 0 972 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 973 | ; position 29 - pattern 0 974 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 975 | ; position 30 - pattern 0 976 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 977 | ; position 31 - pattern 0 978 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 979 | ; position 32 - pattern 0 980 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 981 | ; position 33 - pattern 0 982 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0 983 | dc.b -1 984 | 985 | ; clap/2 986 | ; position 6 - pattern 0 987 | dc.b 0,0,0,0,0,0,0,0,0,0 988 | ; position 7 - pattern 0 989 | dc.b 0,0,0,0,0,0,0,0,0,0 990 | ; position 8 - pattern 0 991 | dc.b 0,0,0,0,0,0,0,0,0,0 992 | ; position 9 - pattern 0 993 | dc.b 0,0,0,0,0,0,0,0,0,0 994 | ; position 10 - pattern 0 995 | dc.b 0,0,0,0,0,0,0,0,0,0 996 | ; position 11 - pattern 1 997 | dc.b 0,0,0,0,0,0,0,0,0,0 998 | ; position 12 - pattern 0 999 | dc.b 0,0,0,0,0,0,0,0,0,0 1000 | ; position 13 - pattern 0 1001 | dc.b 0,0,0,0,0,0,0,0,0,0 1002 | ; position 18 - pattern 0 1003 | dc.b 0,0,0,0,0,0,0,0,0,0 1004 | ; position 19 - pattern 0 1005 | dc.b 0,0,0,0,0,0,0,0,0,0 1006 | ; position 20 - pattern 0 1007 | dc.b 0,0,0,0,0,0,0,0,0,0 1008 | ; position 21 - pattern 0 1009 | dc.b 0,0,0,0,0,0,0,0,0,0 1010 | ; position 22 - pattern 0 1011 | dc.b 0,0,0,0,0,0,0,0,0,0 1012 | ; position 23 - pattern 0 1013 | dc.b 0,0,0,0,0,0,0,0,0,0 1014 | ; position 26 - pattern 0 1015 | dc.b 0,0,0,0,0,0,0,0,0,0 1016 | ; position 27 - pattern 0 1017 | dc.b 0,0,0,0,0,0,0,0,0,0 1018 | ; position 28 - pattern 0 1019 | dc.b 0,0,0,0,0,0,0,0,0,0 1020 | ; position 29 - pattern 0 1021 | dc.b 0,0,0,0,0,0,0,0,0,0 1022 | ; position 30 - pattern 0 1023 | dc.b 0,0,0,0,0,0,0,0,0,0 1024 | ; position 31 - pattern 0 1025 | dc.b 0,0,0,0,0,0,0,0,0,0 1026 | ; position 32 - pattern 0 1027 | dc.b 0,0,0,0,0,0,0,0,0,0 1028 | ; position 33 - pattern 0 1029 | dc.b 0,0,0,0,0,0,0,0,0,0 1030 | ; position 34 - pattern 12 1031 | dc.b 0,0,0,0,0,0,0,0,0,0 1032 | ; position 35 - pattern 13 1033 | dc.b 0,0,0,0,0 1034 | dc.b -1 1035 | 1036 | ; snare/6 1037 | ; position 6 - pattern 0 1038 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1039 | ; position 7 - pattern 0 1040 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1041 | ; position 8 - pattern 0 1042 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1043 | ; position 9 - pattern 0 1044 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1045 | ; position 10 - pattern 0 1046 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1047 | ; position 11 - pattern 1 1048 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1049 | ; position 12 - pattern 0 1050 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1051 | ; position 13 - pattern 0 1052 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1053 | ; position 18 - pattern 0 1054 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1055 | ; position 19 - pattern 0 1056 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1057 | ; position 20 - pattern 0 1058 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1059 | ; position 21 - pattern 0 1060 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1061 | ; position 22 - pattern 0 1062 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1063 | ; position 23 - pattern 0 1064 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1065 | ; position 24 - pattern 12 1066 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1067 | ; position 25 - pattern 13 1068 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1069 | ; position 26 - pattern 0 1070 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1071 | ; position 27 - pattern 0 1072 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1073 | ; position 28 - pattern 0 1074 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1075 | ; position 29 - pattern 0 1076 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1077 | ; position 30 - pattern 0 1078 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1079 | ; position 31 - pattern 0 1080 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1081 | ; position 32 - pattern 0 1082 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1083 | ; position 33 - pattern 0 1084 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1085 | dc.b -1 1086 | 1087 | ; hihat/8 1088 | ; position 6 - pattern 0 1089 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1090 | ; position 7 - pattern 0 1091 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1092 | ; position 8 - pattern 0 1093 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1094 | ; position 9 - pattern 0 1095 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1096 | ; position 10 - pattern 0 1097 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1098 | ; position 11 - pattern 1 1099 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1100 | ; position 18 - pattern 0 1101 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1102 | ; position 19 - pattern 0 1103 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1104 | ; position 20 - pattern 0 1105 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1106 | ; position 21 - pattern 0 1107 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1108 | ; position 22 - pattern 0 1109 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1110 | ; position 23 - pattern 0 1111 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1112 | ; position 26 - pattern 0 1113 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1114 | ; position 27 - pattern 0 1115 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1116 | ; position 32 - pattern 0 1117 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1118 | ; position 33 - pattern 0 1119 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1120 | ; position 34 - pattern 12 1121 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1122 | ; position 35 - pattern 13 1123 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1124 | dc.b -1 1125 | 1126 | ; #hihat/8 1127 | ; position 6 - pattern 0 1128 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1129 | ; position 7 - pattern 0 1130 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1131 | ; position 8 - pattern 0 1132 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1133 | ; position 9 - pattern 0 1134 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1135 | ; position 10 - pattern 0 1136 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1137 | ; position 11 - pattern 1 1138 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1139 | ; position 18 - pattern 0 1140 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1141 | ; position 19 - pattern 0 1142 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1143 | ; position 20 - pattern 0 1144 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1145 | ; position 21 - pattern 0 1146 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1147 | ; position 22 - pattern 0 1148 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1149 | ; position 23 - pattern 0 1150 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1151 | ; position 24 - pattern 12 1152 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1153 | ; position 25 - pattern 13 1154 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1155 | ; position 26 - pattern 0 1156 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1157 | ; position 27 - pattern 0 1158 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1159 | ; position 32 - pattern 0 1160 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1161 | ; position 33 - pattern 0 1162 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1163 | ; position 34 - pattern 12 1164 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1165 | ; position 35 - pattern 13 1166 | dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1167 | dc.b -1 1168 | 1169 | ; strings/4 1170 | ; position 10 - pattern 0 1171 | dc.b 0,1,0,1 1172 | ; position 11 - pattern 1 1173 | dc.b 0,1,0,1 1174 | ; position 12 - pattern 0 1175 | dc.b 0,1,0,1 1176 | ; position 13 - pattern 0 1177 | dc.b 0,1,0,1 1178 | ; position 14 - pattern 2 1179 | dc.b 0,1,2,1 1180 | ; position 15 - pattern 2 1181 | dc.b 0,1,2,1 1182 | ; position 16 - pattern 2 1183 | dc.b 0,1,2,1 1184 | ; position 17 - pattern 2 1185 | dc.b 0,1,2,1 1186 | ; position 20 - pattern 0 1187 | dc.b 0,1,0,1 1188 | ; position 21 - pattern 0 1189 | dc.b 0,1,0,1 1190 | ; position 22 - pattern 0 1191 | dc.b 0,1,0,1 1192 | ; position 23 - pattern 0 1193 | dc.b 0,1,0,1 1194 | ; position 24 - pattern 12 1195 | dc.b 0,1,0,1 1196 | ; position 25 - pattern 13 1197 | dc.b 0,1,0 1198 | ; position 28 - pattern 0 1199 | dc.b 0,1,0,1 1200 | ; position 29 - pattern 0 1201 | dc.b 0,1,0,1 1202 | ; position 30 - pattern 0 1203 | dc.b 0,1,0,1 1204 | ; position 31 - pattern 0 1205 | dc.b 0,1,0,1 1206 | ; position 32 - pattern 0 1207 | dc.b 0,1,0,1 1208 | ; position 33 - pattern 0 1209 | dc.b 0,1,0,1 1210 | ; position 34 - pattern 12 1211 | dc.b 0,1,0,1 1212 | ; position 35 - pattern 13 1213 | dc.b 0,1,0 1214 | dc.b -1 1215 | 1216 | ; strings/4 1217 | ; position 10 - pattern 0 1218 | dc.b 0,1,0,1 1219 | ; position 11 - pattern 1 1220 | dc.b 0,1,0,1 1221 | ; position 12 - pattern 0 1222 | dc.b 0,1,0,1 1223 | ; position 13 - pattern 0 1224 | dc.b 0,1,0,1 1225 | ; position 14 - pattern 2 1226 | dc.b 0,1,2,1 1227 | ; position 15 - pattern 2 1228 | dc.b 0,1,2,1 1229 | ; position 16 - pattern 2 1230 | dc.b 0,1,2,1 1231 | ; position 17 - pattern 2 1232 | dc.b 0,1,2,1 1233 | ; position 20 - pattern 0 1234 | dc.b 0,1,0,1 1235 | ; position 21 - pattern 0 1236 | dc.b 0,1,0,1 1237 | ; position 22 - pattern 0 1238 | dc.b 0,1,0,1 1239 | ; position 23 - pattern 0 1240 | dc.b 0,1,0,1 1241 | ; position 24 - pattern 12 1242 | dc.b 0,1,0,1 1243 | ; position 25 - pattern 13 1244 | dc.b 0,1,0 1245 | ; position 28 - pattern 0 1246 | dc.b 0,1,0,1 1247 | ; position 29 - pattern 0 1248 | dc.b 0,1,0,1 1249 | ; position 30 - pattern 0 1250 | dc.b 0,1,0,1 1251 | ; position 31 - pattern 0 1252 | dc.b 0,1,0,1 1253 | ; position 32 - pattern 0 1254 | dc.b 0,1,0,1 1255 | ; position 33 - pattern 0 1256 | dc.b 0,1,0,1 1257 | ; position 34 - pattern 12 1258 | dc.b 0,1,0,1 1259 | ; position 35 - pattern 13 1260 | dc.b 0,1,0 1261 | dc.b -1 1262 | 1263 | ; strings/4 1264 | ; position 10 - pattern 0 1265 | dc.b 0,1,0,1 1266 | ; position 11 - pattern 1 1267 | dc.b 0,1,0,1 1268 | ; position 12 - pattern 0 1269 | dc.b 0,1,0,1 1270 | ; position 13 - pattern 0 1271 | dc.b 0,1,0,1 1272 | ; position 14 - pattern 2 1273 | dc.b 0,1,2,1 1274 | ; position 15 - pattern 2 1275 | dc.b 0,1,2,1 1276 | ; position 16 - pattern 2 1277 | dc.b 0,1,2,1 1278 | ; position 17 - pattern 2 1279 | dc.b 0,1,2,1 1280 | ; position 20 - pattern 0 1281 | dc.b 0,1,0,1 1282 | ; position 21 - pattern 0 1283 | dc.b 0,1,0,1 1284 | ; position 22 - pattern 0 1285 | dc.b 0,1,0,1 1286 | ; position 23 - pattern 0 1287 | dc.b 0,1,0,1 1288 | ; position 24 - pattern 12 1289 | dc.b 0,1,0,1 1290 | ; position 25 - pattern 13 1291 | dc.b 0,1,0 1292 | ; position 28 - pattern 0 1293 | dc.b 0,1,0,1 1294 | ; position 29 - pattern 0 1295 | dc.b 0,1,0,1 1296 | ; position 30 - pattern 0 1297 | dc.b 0,1,0,1 1298 | ; position 31 - pattern 0 1299 | dc.b 0,1,0,1 1300 | ; position 32 - pattern 0 1301 | dc.b 0,1,0,1 1302 | ; position 33 - pattern 0 1303 | dc.b 0,1,0,1 1304 | ; position 34 - pattern 12 1305 | dc.b 0,1,0,1 1306 | ; position 35 - pattern 13 1307 | dc.b 0,1,0 1308 | dc.b -1 1309 | 1310 | --------------------------------------------------------------------------------