Rastorbars by Orb [web]
*****************************************************************************
* rastorbars
*
* a small 256 byte kef- or alcatraz bars (including file header)
* for amiga ocs...
*
* ultra^orb 20110601
*
*****************************************************************************
release equ 1
plane equ $1f00
bgcol equ $215
col1 equ $876
col2 equ $c96
col3 equ $de9
section shortig, code_c
*****************************************************************************
start
if release=0
moveq #1,d0
moveq #1,d4
lea start-4,a3
endc
;create sin
move #$381>>1,d5
moveq #127,d6
createsin
add d5,d4
move.l d4,d2
asr #7,d2
move.b d2,-(a3)
neg d2
move.b d2,-128(a3)
subq #7,d5
dbf d6,createsin
;d6 is later used for the blitter first/last mask
swap d6
mainloop:
;clear bitplane
move #plane+36,a5
moveq #(36/4)-1,d0
clr
clr.l -(a5)
dbf d0,clr
moveq #$3b,d7
move d5,d3
drawloop:
lea copper(pc),a0
lea $dff000+$42,a6
move.l a0,$80-$42(a6)
;get sin value for the current line
ext.w d3
move.b (a3,d3),d2
add d7,d2
ext.w d2
lea (a5),a1
move.b (a3,d2),d0
ext.w d0
;write bit plane ptr
move.l a1,$e0-$42(a6)
lea 18(a1),a1
move.l a1,$e4-$42(a6)
;calc screen adress and shift
move d0,d1
lsl #7,d0
lsl #4,d0
asr #4,d1
;and finally start the blitter to copy the bar
move d0,(a6)+ ;42
;minterm D = AB+!AC -> $CA
or #$fca,d0
move d0,$40-$44(a6)
move.l d6,(a6)+ ;44 mask
lea 8(a1,d1),a1
move.l a1,(a6)+ ;48 source c screen
move.l a0,(a6)+ ;4c source b bar
subq #2,a0
move.l a0,(a6)+ ;50 source a mask
move.l a1,(a6)+ ;54 dest screen
sync
cmp.b $06-$58(a6),d7
bne.s sync
move.w #(2<<6)+2,(a6)+ ;58 start
addq #6,a6
;first blit will be wrong because the modulos aren't
;correct... but hm ... who cares ? ;)
move.l #$ffeafffe,(a6)+ ;mod c & b
move.l #$fffcffea,(a6)+ ;mod a & d
subq.b #1,d3
addq.b #1,d7
bcc.s drawloop
;some sin movement
addq #1,d5
if release
bra.s mainloop
else
btst #6,$bfe001
bne.s mainloop
illegal
endc
*****************************************************************************
;dummy fill up to reach 256 bytes
;cool even 2 bytes left
dc.w $DEAD
; mask for the blitter
dc.w $0fff
copper
;bar data...
;placed inside the copper writes to 1f8... seems this doesn't harm
dc.w %000111111000, %011001100110
;colors
dc.w $0182,col1
dc.w $0184,col2
dc.w $0186,col3
dc.w $009a,$7fff ; irqs off
;screen setup
dc.w $0096,$0020 ; sprites off
dc.w $008e,$3b81 ; window start
dc.w $0090,$fcd1 ; window stop
dc.w $0092,$0040+$28 ; fetch start
dc.w $0094,$0080+$28 ; fetch stop
dc.w $0100,$2200
dc.w $3b01,$fffe
dc.w $0180,bgcol
dc.w $fc01,$fffe
dc.w $0180,$0000
*****************************************************************************
printt "size:"
if release=1
printv *-start
printv *-start+36
else
printv *-start-20
printv *-start-20+36
endc
*****************************************************************************
end[ back to the prod ]
