 ;tunnely bizness

 ;setup addresses
 ldr r12,video
 ldr r3,bank
 subs r3,r3,#1
 addne r12,r12,#160*256
 ;
 adr r11,bss
 add r11,r11,#(128*64+64)*4
 ldr r10,tex

 ldr r9,z
 add r9,r9,#1
 and r9,r9,#255
 str r9,z

 ;load addons
 adr r3,vx
 ldmia r3,{r6-r8}

 mov r14,#yres
.yloop
 adr r3,oc
 stmia r3,{r0-r2}
 mov r13,#xres
.xloop

 ;r14=yp
 ;r13=xp
 ;r12=screen
 ;r11=mega lookup
 ;r10=texture
 ;r9=texture addon
 ;r6-8=x interpolation addons
 ;---------------------
 ;r0-x r1-y (eg 160,128) r2-z (256 length)
 ;---------------------------------------
 mov r3,r0,asr #16
 mov r4,r1,asr #16
 add r3,r3,r4,lsl #7 ;lookup address
 ;load radius/SQR(x^2+y^2) and ATN(y/x)
 ldr r3,[r11,r3,lsl #2]
 and r4,r3,#&ff ;r4=v
 mov r3,r3,asr #8
 ;r3=t<<14
 ;--------
 mov r5,r2,asr #14
 mul r3,r5,r3
 add r5,r9,r3,asr #14
 and r5,r5,#63
 ;r5=u
 ;----
 and r4,r4,#63
 add r5,r5,r4,lsl #6
 ldrb r4,[r10,r5]
 and r4,r4,#&f
 eor r3,r3,r3,asr #31
 subs r4,r4,r3,asr #18
 movlt r4,#0
 orr r4,r4,r4,lsl #4
 strb r4,[r12,#160]
 strb r4,[r12],#1
 strb r4,[r12,#160]
 strb r4,[r12],#1
 ;move pixel on virtual screen
 add r0,r0,r6
 add r1,r1,r7
 add r2,r2,r8
 subs r13,r13,#1
 bne xloop
 add r12,r12,#160
 ;reload old x coordinate
 adr r0,oc
 ldmia r0,{r0-r2}
 ;move pixel on v screen down
 adr r3,vy
 ldmia r3,{r3-r5}
 add r0,r0,r3
 add r1,r1,r4
 add r2,r2,r5

 subs r14,r14,#1
 bne yloop
