.data
fc1:
.byte 0x00
.byte 0x00
.byte 0x53
.byte 0x40
fc2:
.byte 0x00
.byte 0x00
.byte 0xa3
.byte 0x3b
global_volume:
.byte 0x00
.byte 0x00
.byte 0x80
.byte 0x3f
end_fade:
.byte 0x00
.byte 0xff
.byte 0x7f
.byte 0x3f
stereo_mod:
.byte 0x00
.byte 0x62
.byte 0x80
.byte 0x3f
main_tune:
.byte 0x00
.byte 0x81
.byte 0x4f
.byte 0x3a
oct_semitones:
.long 12
small:
.byte 0
.byte 0
.byte 128
.byte 0
order:
.byte 0
.byte 1
.byte 2
.byte 9
.byte 0
.byte 1
.byte 2
.byte 3
.byte 4
.byte 5
.byte 6
.byte 7
.byte 8
instr_data:
.byte 128
.byte 0
.byte 0
.byte 0
.byte 56
.byte 0
.byte 0
.byte 0
.byte 0
.byte 204
.byte 204
.byte 61
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 71
.byte 1
.byte 64
.byte 2
.byte 0
.byte 0
.byte 0
.byte 36
.byte 0
.byte 0
.byte 0
.byte 0
.byte 18
.byte 131
.byte 59
.byte 0
.byte 0
.byte 0
.byte 63
.byte 0
.byte 250
.byte 127
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
.byte 1
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 56
.byte 0
.byte 0
.byte 0
.byte 0
.byte 153
.byte 153
.byte 62
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 32
.byte 0
.byte 64
.byte 2
.byte 0
.byte 0
.byte 0
.byte 36
.byte 0
.byte 0
.byte 0
.byte 0
.byte 18
.byte 131
.byte 59
.byte 0
.byte 0
.byte 128
.byte 62
.byte 0
.byte 236
.byte 127
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
.byte 1
.byte 0
.byte 0
.byte 0
.byte 32
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 153
.byte 25
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
.byte 4
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 64
.byte 156
.byte 0
.byte 0
.byte 0
.byte 51
.byte 51
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
.byte 128
.byte 0
.byte 0
.byte 0
.byte 56
.byte 0
.byte 0
.byte 0
.byte 0
.byte 153
.byte 25
.byte 62
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 71
.byte 161
.byte 63
.byte 2
.byte 0
.byte 0
.byte 0
.byte 36
.byte 0
.byte 0
.byte 0
.byte 0
.byte 15
.byte 161
.byte 53
.byte 0
.byte 204
.byte 76
.byte 62
.byte 0
.byte 253
.byte 127
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
.byte 1
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 204
.byte 76
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
.byte 128
.byte 0
.byte 0
.byte 0
.byte 80
.byte 0
.byte 0
.byte 0
.byte 0
.byte 194
.byte 117
.byte 62
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 65
.byte 192
.byte 63
.byte 2
.byte 0
.byte 0
.byte 0
.byte 60
.byte 0
.byte 0
.byte 0
.byte 0
.byte 15
.byte 161
.byte 53
.byte 0
.byte 215
.byte 35
.byte 62
.byte 0
.byte 255
.byte 127
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 1
.byte 0
.byte 0
.byte 36
.byte 0
.byte 0
.byte 0
.byte 0
.byte 194
.byte 245
.byte 61
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 183
.byte 81
.byte 57
.byte 0
.byte 0
.byte 128
.byte 63
.byte 1
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 204
.byte 76
.byte 63
.byte 0
.byte 0
.byte 0
.byte 0
patterns:
.byte 21
.byte 164
.byte 0
.byte 52
.byte 0
.byte 40
.byte 0
.byte 0
.byte 0
.byte 0
.byte 45
.byte 0
.byte 21
.byte 0
.byte 0
.byte 0
.byte 0
.byte 40
.byte 0
.byte 0
.byte 0
.byte 0
.byte 45
.byte 0
.byte 21
.byte 0
.byte 0
.byte 48
.byte 0
.byte 40
.byte 0
.byte 0
.byte 0
.byte 0
.byte 45
.byte 0
.byte 21
.byte 0
.byte 0
.byte 48
.byte 0
.byte 40
.byte 0
.byte 52
.byte 0
.byte 0
.byte 45
.byte 48
.byte 18
.byte 0
.byte 0
.byte 45
.byte 0
.byte 37
.byte 161
.byte 0
.byte 0
.byte 0
.byte 42
.byte 0
.byte 18
.byte 0
.byte 0
.byte 0
.byte 0
.byte 37
.byte 0
.byte 0
.byte 0
.byte 0
.byte 42
.byte 0
.byte 18
.byte 0
.byte 0
.byte 0
.byte 0
.byte 37
.byte 0
.byte 0
.byte 0
.byte 0
.byte 42
.byte 0
.byte 18
.byte 0
.byte 0
.byte 48
.byte 0
.byte 37
.byte 0
.byte 0
.byte 0
.byte 0
.byte 42
.byte 45
.byte 17
.byte 169
.byte 0
.byte 41
.byte 0
.byte 29
.byte 0
.byte 0
.byte 0
.byte 0
.byte 36
.byte 0
.byte 17
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 0
.byte 0
.byte 0
.byte 36
.byte 0
.byte 17
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 0
.byte 0
.byte 0
.byte 36
.byte 0
.byte 17
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 45
.byte 0
.byte 0
.byte 36
.byte 41
.byte 14
.byte 0
.byte 166
.byte 42
.byte 0
.byte 26
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 14
.byte 0
.byte 0
.byte 0
.byte 0
.byte 26
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 14
.byte 0
.byte 0
.byte 45
.byte 0
.byte 26
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 42
.byte 14
.byte 0
.byte 0
.byte 0
.byte 0
.byte 26
.byte 0
.byte 38
.byte 0
.byte 0
.byte 33
.byte 0
.byte 21
.byte 164
.byte 0
.byte 36
.byte 0
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 21
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 21
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 19
.byte 0
.byte 0
.byte 35
.byte 0
.byte 26
.byte 0
.byte 38
.byte 0
.byte 159
.byte 31
.byte 35
.byte 18
.byte 0
.byte 0
.byte 33
.byte 0
.byte 25
.byte 0
.byte 0
.byte 0
.byte 161
.byte 30
.byte 0
.byte 18
.byte 0
.byte 0
.byte 0
.byte 0
.byte 25
.byte 0
.byte 0
.byte 0
.byte 0
.byte 30
.byte 0
.byte 18
.byte 0
.byte 0
.byte 0
.byte 0
.byte 25
.byte 0
.byte 0
.byte 0
.byte 0
.byte 30
.byte 40
.byte 18
.byte 0
.byte 0
.byte 0
.byte 0
.byte 25
.byte 0
.byte 45
.byte 0
.byte 0
.byte 30
.byte 0
.byte 17
.byte 0
.byte 169
.byte 47
.byte 0
.byte 24
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 17
.byte 0
.byte 0
.byte 48
.byte 0
.byte 24
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 45
.byte 17
.byte 0
.byte 0
.byte 0
.byte 0
.byte 24
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 17
.byte 0
.byte 0
.byte 43
.byte 0
.byte 24
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 14
.byte 0
.byte 0
.byte 45
.byte 0
.byte 17
.byte 169
.byte 0
.byte 0
.byte 0
.byte 26
.byte 38
.byte 14
.byte 0
.byte 0
.byte 0
.byte 0
.byte 21
.byte 0
.byte 45
.byte 0
.byte 0
.byte 26
.byte 0
.byte 19
.byte 0
.byte 171
.byte 47
.byte 0
.byte 26
.byte 0
.byte 0
.byte 0
.byte 0
.byte 31
.byte 38
.byte 19
.byte 0
.byte 0
.byte 0
.byte 0
.byte 26
.byte 0
.byte 47
.byte 0
.byte 0
.byte 31
.byte 0
.byte 9
.byte 173
.byte 0
.byte 49
.byte 173
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 9
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 9
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 9
.byte 0
.byte 0
.byte 40
.byte 0
.byte 28
.byte 0
.byte 45
.byte 0
.byte 0
.byte 33
.byte 49
.byte 13
.byte 0
.byte 168
.byte 52
.byte 165
.byte 32
.byte 0
.byte 0
.byte 0
.byte 0
.byte 37
.byte 0
.byte 13
.byte 0
.byte 0
.byte 0
.byte 0
.byte 32
.byte 0
.byte 0
.byte 0
.byte 0
.byte 37
.byte 0
.byte 13
.byte 0
.byte 0
.byte 56
.byte 0
.byte 32
.byte 0
.byte 0
.byte 0
.byte 0
.byte 37
.byte 52
.byte 13
.byte 0
.byte 0
.byte 0
.byte 0
.byte 32
.byte 0
.byte 49
.byte 0
.byte 0
.byte 37
.byte 0
.byte 11
.byte 171
.byte 0
.byte 50
.byte 166
.byte 31
.byte 0
.byte 0
.byte 0
.byte 0
.byte 35
.byte 0
.byte 11
.byte 0
.byte 0
.byte 0
.byte 0
.byte 31
.byte 0
.byte 0
.byte 0
.byte 0
.byte 35
.byte 0
.byte 11
.byte 0
.byte 0
.byte 0
.byte 0
.byte 31
.byte 0
.byte 0
.byte 0
.byte 0
.byte 35
.byte 0
.byte 11
.byte 0
.byte 0
.byte 50
.byte 0
.byte 31
.byte 0
.byte 49
.byte 0
.byte 0
.byte 35
.byte 47
.byte 11
.byte 0
.byte 166
.byte 50
.byte 0
.byte 30
.byte 0
.byte 0
.byte 0
.byte 0
.byte 35
.byte 0
.byte 11
.byte 0
.byte 0
.byte 0
.byte 175
.byte 30
.byte 0
.byte 0
.byte 0
.byte 0
.byte 35
.byte 0
.byte 11
.byte 0
.byte 0
.byte 0
.byte 0
.byte 30
.byte 0
.byte 0
.byte 0
.byte 0
.byte 35
.byte 52
.byte 11
.byte 0
.byte 0
.byte 0
.byte 0
.byte 30
.byte 0
.byte 54
.byte 0
.byte 0
.byte 35
.byte 0
.byte 9
.byte 173
.byte 0
.byte 52
.byte 173
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 9
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 9
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 0
.byte 0
.byte 0
.byte 0
.byte 33
.byte 0
.byte 11
.byte 166
.byte 0
.byte 52
.byte 177
.byte 30
.byte 0
.byte 50
.byte 0
.byte 0
.byte 35
.byte 49
.byte 13
.byte 168
.byte 0
.byte 52
.byte 168
.byte 32
.byte 0
.byte 0
.byte 0
.byte 0
.byte 37
.byte 0
.byte 13
.byte 0
.byte 0
.byte 0
.byte 0
.byte 32
.byte 0
.byte 0
.byte 0
.byte 0
.byte 37
.byte 0
.byte 13
.byte 0
.byte 0
.byte 49
.byte 165
.byte 32
.byte 0
.byte 0
.byte 0
.byte 0
.byte 37
.byte 52
.byte 13
.byte 0
.byte 0
.byte 0
.byte 0
.byte 32
.byte 0
.byte 49
.byte 0
.byte 0
.byte 37
.byte 0
.byte 7
.byte 171
.byte 0
.byte 50
.byte 166
.byte 26
.byte 0
.byte 0
.byte 0
.byte 0
.byte 31
.byte 0
.byte 7
.byte 0
.byte 0
.byte 0
.byte 0
.byte 26
.byte 0
.byte 0
.byte 0
.byte 0
.byte 31
.byte 0
.byte 7
.byte 0
.byte 0
.byte 0
.byte 171
.byte 26
.byte 0
.byte 0
.byte 0
.byte 0
.byte 31
.byte 47
.byte 7
.byte 0
.byte 0
.byte 45
.byte 173
.byte 26
.byte 0
.byte 43
.byte 0
.byte 0
.byte 31
.byte 45
.byte 4
.byte 0
.byte 168
.byte 47
.byte 168
.byte 20
.byte 0
.byte 0
.byte 0
.byte 180
.byte 28
.byte 0
.byte 4
.byte 0
.byte 0
.byte 0
.byte 0
.byte 20
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 0
.byte 4
.byte 0
.byte 0
.byte 0
.byte 0
.byte 20
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 0
.byte 4
.byte 0
.byte 0
.byte 0
.byte 0
.byte 20
.byte 0
.byte 0
.byte 0
.byte 0
.byte 28
.byte 35
.byte 9
.byte 21
.byte 173
.byte 37
.byte 161
.byte 168
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 17
.byte 0
.byte 169
.byte 47
.byte 0
.byte 24
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 17
.byte 0
.byte 0
.byte 48
.byte 0
.byte 24
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 45
.byte 17
.byte 0
.byte 0
.byte 0
.byte 0
.byte 24
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 17
.byte 0
.byte 0
.byte 43
.byte 0
.byte 24
.byte 0
.byte 0
.byte 0
.byte 0
.byte 29
.byte 0
.byte 14
.byte 0
.byte 0
.byte 45
.byte 0
.byte 17
.byte 169
.byte 0
.byte 0
.byte 0
.byte 26
.byte 38
.byte 14
.byte 0
.byte 0
.byte 0
.byte 0
.byte 21
.byte 0
.byte 45
.byte 0
.byte 0
.byte 26
.byte 0
.byte 19
.byte 0
.byte 171
.byte 47
.byte 0
.byte 26
.byte 0
.byte 0
.byte 0
.byte 0
.byte 31
.byte 48
.byte 19
.byte 0
.byte 0
.byte 0
.byte 0
.byte 26
.byte 0
.byte 50
.byte 0
.byte 0
.byte 31
.byte 0
trigger_points:
.long 0
.long 240
.long 0
.long 168
.long 0
.long 168
.long 72
.text
module_oscillator:
fld1
flds 16(%rsi)
flds 12(%rsi)
fadd %st(2)
fmulp
flds _ZL8g_buffer+8
fmulp
fxch %st(1)
flds 0(%rbp)
fadd %st(2),%st
fprem1
fstps 0(%rbp)
flds 20(%rsi)
fmulp %st,%st(2)
flds 4(%rbp)
fadd %st(2),%st
fprem1
fsts 4(%rbp)
flds 0(%rbp)
faddp
fxch %st(2)
fstp %st
fstp %st
fmuls 8(%rsi)
osc_end:
ret
module_filter:
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
flds 16(%rsi)
flds 12(%rsi)
fmuls fc1
fsubs fc2
fmulp
flds 0(%rbp)
flds 4(%rbp)
fsubrp 
fmulp
fsin
flds 8(%rsi)
flds 12(%rsi)
fabs
fmulp
flds 0(%rbp)
fld1
flds 12(%rsi)
fabs
fsubrp %st(1)
fmulp
faddp
faddp
fsts 0(%rbp)
flds 12(%rsi)
fabs
fadd %st
fld1
fsub %st(1),%st
fmuls 4(%rbp)
fxch %st(1)
fmul %st(2),%st
faddp
fsts 4(%rbp)
fxch %st(1)
fstp %st
filter_end:
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
ret
module_envelope:
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
flds 0(%rbp)
movl 20(%rsi),%eax
testl %eax,%eax
jnz module_envelope.in_decay
flds 8(%rsi)
faddp
flds 12(%rsi)
fcomip
jnc module_envelope.no_switch
incl %eax
movl %eax,20(%rsi)
module_envelope.no_switch:
jmp module_envelope.no_decay
module_envelope.in_decay:
flds 16(%rsi)
fmulp
module_envelope.no_decay:
flds small
faddp
fsts 0(%rbp)
envelope_end:
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
ret
module_delay:
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
flds 8(%rsi)
movl 0(%rbp),%eax
addl $4,%eax
xorq %rbx,%rbx
movl 12(%rsi),%ebx
testl $4,%edi
jnz module_delay.foo
addl $2000,%ebx
module_delay.foo:
xorq %rdx,%rdx
divl %ebx
movl %edx,0(%rbp)
addl $4,%edx
flds (%rbp,%rdx)
flds 16(%rsi)
fmulp
faddp
fsts (%rbp,%rdx)
delay_end:
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
ret
synth:
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
movq %rsi,%rcx
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
leaq _ZL8g_buffer+20,%rdi
movq $4,%rcx
setup_loop:
pushq %rcx
leaq instr_data,%rsi
xorq %rcx,%rcx
movl $6*4*14,%ecx
rep
movsb
popq %rcx
loop setup_loop
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
xorl %edx,%edx
synth_loop:
pushq %rcx
cmpl $0x60000,%ecx
jns synth_loop.no_fade
flds global_volume
fmuls end_fade
fstps global_volume
synth_loop.no_fade:
fldz
leaq _ZL8g_buffer+20,%rsi
leaq _ZL8g_buffer+1364,%rbp
movl $4,%ecx
tracks_loop:
pushq %rcx
testl %edx,%edx
jnz notick
movl _ZL8g_buffer+0,%ebx
movb order(%ebx),%bl
imull $96,%ebx
movl _ZL8g_buffer+4,%eax
addl %eax,%ebx
xorl %eax,%eax
movb patterns(%ebx),%al
cmpb $0,%al
je notrig
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
andb $0x7f,%al
movb $12,%bl
divb %bl
movb %ah,_ZL8g_buffer+16
fildl _ZL8g_buffer+16
fildl oct_semitones
fdivrp 
f2xm1
fld1
faddp
movl $1,%ebx
movb %al,%cl
shl %cl,%ebx
movl %ebx,_ZL8g_buffer+16
fildl _ZL8g_buffer+16
fmulp
flds main_tune
fmulp
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
popq %rcx
pushq %rcx
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
negl %ecx
addl $4,%ecx
imull $8,%ecx
testb $0x80,%al
jz no_alt_instr
addl $4,%ecx
no_alt_instr:
addl $trigger_points, %ecx
movl (%ecx),%ecx
addq %rcx,%rsi
fstps 16(%rsi)
movl $0,6*4+20(%rsi)
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
notrig:
movl _ZL8g_buffer+4,%eax
incl %eax
cmpl $96,%eax
jne no_advance
movl _ZL8g_buffer+0,%eax
incl %eax
movl %eax,_ZL8g_buffer+0
xorl %eax,%eax
no_advance:
movl %eax,_ZL8g_buffer+4
notick:
movl $14,%ecx
element_loop:
pushq %rcx
movl (%rsi),%eax
pushq %rbp
testl $0x4,%edi
fld1
jz element_loop.ch_left
testb $0x80,%al
jz element_loop.mono_only
flds stereo_mod
fmulp
element_loop.mono_only:
addl $40100*2,%ebp
element_loop.ch_left:
fstps _ZL8g_buffer+8
andb $0x7f,%al
cmpb $0x00,%al
jne no_osc
call module_oscillator
no_osc:
cmpb $0x01,%al
jne no_filter
call module_filter
no_filter:
cmpb $0x02,%al
jne no_envelope
call module_envelope
no_envelope:
cmpb $0x04,%al
jne no_delay
call module_delay
no_delay:
xorq %rbx,%rbx
movl 4(%rsi),%ebx
testl %ebx,%ebx
jnz not_master_out
faddp
jmp was_master_out
not_master_out:
addq %rsi,%rbx
cmpb $0,%ah
je no_op
flds (%rbx)
cmpb $1,%ah
jne no_op_add
op_add:
faddp
no_op_add:
no_op:
fstps (%ebx)
was_master_out:
addq $6*4,%rsi
popq %rbp
addl $40100*2*2,%ebp
popq %rcx
decl %ecx
jnz element_loop
popq %rcx
decl %ecx
jnz tracks_loop
decl %edx
jns was_master_out.no_newtick
movl $30000,%edx
was_master_out.no_newtick:
fmuls global_volume
fstps (%rdi)
addq $4,%rdi
popq %rcx
decl %ecx
jnz synth_loop
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
ret
