 ;-----------------------------\
 ;escape 4k demo                 \
 ;made for code craft contest      \
 ;code - tom/kulture 1999            \
 ;------------------------------------ \
 ;Music code------------------------------------------------------|
 ;Music part.....

 ;Create samples....
 mov r0,#6
 mov r3,#1024+1024+64
 swi OS_Module
 str r2,samples

 ;Configure...
 mov r0,#4
 mov r1,#208
 mov r2,#48
 adr r3,handler
 mov r4,#0
 swi Sound_Configure
 adr r5,sound_c
 stmia r5,{r0-r4}

 ;Set stereo positions..
 mov r0,#4
 mov r1,#0
 adr r12,stereo_pos
.stereo
 swi Sound_Stereo
 str r1,[r12],#4
 subs r0,r0,#1
 bne stereo

 ldr r0,[r3,#8]
 str r0,lin_log
 ldr r0,[r3,#12]
 str r0,log_scale

 ;bass drum....
 ldr r12,samples
 mov r11,#1024
 ldr r10,lin_log
 ;f0 - position (1->0)
 ;f1 - sinpos
 ;f2 - freq
 ;f3 - amp
 ;Radians/second
 ldfs f0,f_step
 ;Frequency
 ldfs f1,f_freq
 ;Pos
 mvfs f2,#0
 ;Subtract from frequency..
 ldfs f3,f_sub
 ;Multiplier
 ldfs f4,f_8192
.bassmake
 ;calc value...
 sins f5,f2
 mufs f5,f4,f5
 fix r0,f5
 ;Calc next sin pos
 mufs f5,f0,f1
 adfs f2,f2,f5
 sufs f1,f1,f3
 ;store
 eor r0,r0,r0,asr #31
 and r0,r0,#8191
 ldrb r0,[r10,r0]
 strb r0,[r12],#1
 subs r11,r11,#1
 bne bassmake

 ;snare
 ldr r10,samples
 mov r11,#1024
 mov r1,#16384
 mov r2,#8192
.snaremake
 ldrb r0,[r10],#1
 and r3,r1,#1
 add r0,r0,r3
 and r0,r0,#255
 strb r0,[r12],#1
 add r1,r1,r2,asr #3
 sub r2,r2,r1,asr #3
 subs r11,r11,#1
 bne snaremake

 ;hit hat
 mov r11,#64
 mov r10,r12
 sub r10,r10,#1024
.hitmake
 ldrb r0,[r10],#16
 strb r0,[r12],#1
 subs r11,r11,#1
 bne hitmake


 ;Setup music code....
 mov r0,#&1C
 adr r1,true_playa ;there are playaz, and there are...
 mov r2,#007 ;the names bond, james bond =)
 swi OS_Claim

 b music_end

.f_step
 dcfs (2*3.14)/225000
.f_freq
 dcfs 500
.f_sub
 dcfs 500/1024
.f_8192
 dcfs 8192

.sound_c
 dcd 0,0,0,0,0
.stereo_pos
 dcd 0,0,0,0

.handler
 dcd filler
 dcb "kult"
.lin_log
 dcd 0
.log_scale
 dcd 0

.filler
 stmfd r13!,{r0-r12,r14}
 adr r11,channels
 mov r7,#4
.fill_buffers
 ldr r10,samples
 mov r6,#1024
 cmp r7,#3
 moveq r6,#1024
 addeq r10,r10,#1024
 cmp r7,#2
 moveq r6,#64
 addeq r10,r10,#2048
 ldmia r11,{r0-r1}
 mov r9,r12
 mov r8,#208
 cmp r1,#0
 beq clear
.fill
 ldrb r2,[r10,r0]
 strb r2,[r9],#4
 add r0,r0,#1
 cmp r0,r6
 bge clear
 subs r8,r8,#1
 bne fill
 stmia r11!,{r0-r1}
 b done
 ;
.clear
 mov r0,#0
 mov r1,#0
.cloop
 strb r0,[r9],#4
 subs r8,r8,#1
 bne cloop
 stmia r11!,{r0-r1}

.done
 add r12,r12,#1
 subs r7,r7,#1
 bne fill_buffers
 ldmfd r13!,{r0-r12,pc}


.samples
 dcd 0
.channels
 dcd 0,0
 dcd 0,0
 dcd 0,0
 dcd 0,0

.true_playa
 stmfd r13!,{r0-r12,r14}
 ldr r0,counter
 ;set tune pos..
 adr r1,tunes
 add r1,r1,#32
 cmp r0,#2048
 addgt r1,r1,#32
 cmp r0,#4096
 addgt r1,r1,#32
 cmp r0,#4096+2048
 addgt r1,r1,#32

 cmp r0,#0
 ldreq r0,m_counter
 addeq r0,r0,#1
 streq r0,m_counter
 adreq r1,tunes
 ands r2,r0,#15
 ldmnefd r13!,{r0-r12,pc}^
 ;r0=music position
 mov r0,r0,asr #4
 and r0,r0,#7
 add r1,r1,r0,lsl #2
 ldrb r2,[r1],#1
 ldrb r3,[r1],#1
 ldrb r4,[r1],#1

 adr r6,channels
 mov r5,#0
 cmp r2,#1
 streq r5,[r6,#0]
 streq r2,[r6,#4]
 cmp r3,#1
 streq r5,[r6,#8]
 streq r3,[r6,#12]
 cmp r4,#1
 streq r5,[r6,#16]
 streq r4,[r6,#20]

 ldmfd r13!,{r0-r12,pc}^

.m_counter
 dcd 0
.tunes
 ;intro tune
 dcb 1,0,0,0
 dcb 1,0,0,0
 dcb 0,0,0,0
 dcb 1,0,0,0
 dcb 0,0,1,0
 dcb 0,0,0,0
 dcb 0,0,0,0
 dcb 0,0,0,0
 ;Tunnel
 dcb 1,0,0,0
 dcb 0,0,1,0
 dcb 0,1,0,0
 dcb 0,0,1,0
 dcb 0,0,1,0
 dcb 1,0,0,0
 dcb 0,1,0,0
 dcb 0,0,1,0
 ;Planes
 dcb 1,0,0,0
 dcb 0,0,0,0
 dcb 0,1,0,0
 dcb 0,0,0,0
 dcb 0,0,0,0
 dcb 1,0,0,0
 dcb 0,1,0,0
 dcb 0,0,0,0
 ;Cube
 dcb 1,0,0,0
 dcb 0,0,1,0
 dcb 0,1,0,0
 dcb 1,0,1,0
 dcb 0,0,1,0
 dcb 1,0,0,0
 dcb 0,1,0,0
 dcb 0,0,1,0
 ;Fade Out
 dcb 1,0,0,0
 dcb 1,0,0,0
 dcb 0,0,0,0
 dcb 1,0,0,0
 dcb 0,0,1,0
 dcb 0,0,0,0
 dcb 0,0,0,0
 dcb 0,0,0,0
