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

 ;interpolater--------------------------------------------------------------|

 ldr r14,free
 ldr r12,video
 ldr r0,work
 ;
.i_waitv
 ldr r1,show
 cmp r1,r0
 ;if the shown bank is the one we are about to write on we must wait..
 beq i_waitv
 ;
 sub r0,r0,#1
 mov r1,r0,lsl #8
 add r1,r1,r0,lsl #6
 add r12,r12,r1,lsl #8

 ;interpolate 40*256 grid of colours
 ;
 mov r0,#yres
 str r0,ycounter
.ip_yloop
 mov r13,#(xres-1)/8
 ;load first pixel
 ldrb r0,[r14],#1
 mov r0,r0,lsl #14
.ip_xloop

 ;1
 ;load second pixel
 ldrb r1,[r14],#1
 ;..
 mov r10,r1,lsl #14
 ;
 sub r1,r10,r0
 mov r1,r1,asr #2

 mov r2,r0,asr #14
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r2,r2,r11,lsl #8
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r2,r2,r11,lsl #16
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r2,r2,r11,lsl #24
 ;set first pixel
 mov r0,r10

 ;2

 ;load second pixel
 ldrb r1,[r14],#1
 ;..
 mov r10,r1,lsl #14
 ;
 sub r1,r10,r0
 mov r1,r1,asr #2

 mov r3,r0,asr #14
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r3,r3,r11,lsl #8
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r3,r3,r11,lsl #16
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r3,r3,r11,lsl #24
 ;set first pixel
 mov r0,r10

 ;3

 ;load second pixel
 ldrb r1,[r14],#1
 ;..
 mov r10,r1,lsl #14
 ;
 sub r1,r10,r0
 mov r1,r1,asr #2

 mov r4,r0,asr #14
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r4,r4,r11,lsl #8
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r4,r4,r11,lsl #16
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r4,r4,r11,lsl #24
 ;set first pixel
 mov r0,r10

 ;4

 ;load second pixel
 ldrb r1,[r14],#1
 ;..
 mov r10,r1,lsl #14
 ;
 sub r1,r10,r0
 mov r1,r1,asr #2

 mov r5,r0,asr #14
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r5,r5,r11,lsl #8
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r5,r5,r11,lsl #16
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r5,r5,r11,lsl #24
 ;set first pixel
 mov r0,r10

 ;5

 ;load second pixel
 ldrb r1,[r14],#1
 ;..
 mov r10,r1,lsl #14
 ;
 sub r1,r10,r0
 mov r1,r1,asr #2

 mov r6,r0,asr #14
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r6,r6,r11,lsl #8
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r6,r6,r11,lsl #16
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r6,r6,r11,lsl #24
 ;set first pixel
 mov r0,r10

 ;6

 ;load second pixel
 ldrb r1,[r14],#1
 ;..
 mov r10,r1,lsl #14
 ;
 sub r1,r10,r0
 mov r1,r1,asr #2

 mov r7,r0,asr #14
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r7,r7,r11,lsl #8
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r7,r7,r11,lsl #16
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r7,r7,r11,lsl #24
 ;set first pixel
 mov r0,r10

 ;7

 ;load second pixel
 ldrb r1,[r14],#1
 ;..
 mov r10,r1,lsl #14
 ;
 sub r1,r10,r0
 mov r1,r1,asr #2

 mov r8,r0,asr #14
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r8,r8,r11,lsl #8
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r8,r8,r11,lsl #16
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r8,r8,r11,lsl #24
 ;set first pixel
 mov r0,r10

 ;8

 ;load second pixel
 ldrb r1,[r14],#1
 ;..
 mov r10,r1,lsl #14
 ;
 sub r1,r10,r0
 mov r1,r1,asr #2

 mov r9,r0,asr #14
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r9,r9,r11,lsl #8
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r9,r9,r11,lsl #16
 add r0,r0,r1
 mov r11,r0,asr #14
 orr r9,r9,r11,lsl #24
 ;set first pixel
 mov r0,r10

 stmia r12!,{r2-r9}

 subs r13,r13,#1
 bne ip_xloop

 ldr r0,ycounter
 subs r0,r0,#1
 str r0,ycounter
 bne ip_yloop

 ldr r1,work
 subs r1,r1,#1
 moveq r1,#3
 str r1,work

 b loop

.ycounter
 dcd 0
