@Shoonay,
post #78
**********************
* INTERPOLATION BTWEEN 2 COORDINATES. *
* SHOWS HOW TO DISPLAY BOBS ON YOUR SCREEN. *
* CODED BY OSTER FOR R.G. *
***************************************************************
WAITBLIT MACRO ;
btst #14,2(a6) ;
bne.b *-6 ;
ENDM ;
SYSTEMOFF
move.l 4.w,a6 ;
jsr -132(a6) ;
lea $dff000,a6 ;
move.w $1c(a6),d0 ;
or.w #$8000,d0 ;
move.w d0,-(sp) ;
move.w #$7fff,$9a(a6) ;
move.w #$7fff,$96(a6) ;
clr.l $80(a6) ;
clr.l $100(a6) ;
move.w #$87c0,$96(a6) ;
bsr MAIN ;
move.w (sp)+,$9a(a6) ;
move.l 4.w,a6 ;
jsr -138(a6) ;
moveq #0,d0 ;
rts ;
MAIN lea cop(pc),a0 ;
move.l a0,$80(a6) ;
clr.w $88(a6) ;
;------------------------------------------------------------------
move.w #999,d7 ;1000 par liczb wsp. X i Y
lea points,a0 ;miejsce na powyzsze liczby
move.l #$563f3457,d0 ;seed
move.l #$63324626,d1 ;
RANDOM move.l d0,d2 ;
move.l d1,d3 ;
rol.l #7,d2 ;
rol.l #7,d3 ;
add.l d2,d0 ;
add.l d3,d1 ;
divu.w d2,d0 ;
divu.w d3,d1 ;
eor.l d2,d0 ;
eor.l d3,d1 ;
move.w d0,d2 ;x
move.w d1,d3 ;y
and.w #$1FF,d2 ;
and.w #$fF,d3 ;
cmp.w #303,d2 ;
ble.b RAN1 ;
sub.w #303,d2 ;
RAN1 cmp.w #238,d3 ;
ble.b RAN2 ;
sub.w #238,d3 ;
RAN2 move.w d2,(a0)+ ;wpisywanie wart. X do tablicy POINTS
move.w d3,(a0)+ ;wpisywanie wart. Y do tablicy POINTS
dbf d7,RANDOM ;
;------------------------------------------------------------------
moveq #64,d7 ;steps
move.l planes,a0 ;ekran1 ___ DOUBLE BUFFER
move.l planes+4,a1 ;ekran2 /
;--- Wyczyszczenie ekranu /256 linii/ ---
INTER waitblit ;
move.l a0,$54(a6) ;kanal D bliitera na ekran1
move.l #$01000000,$40(a6) ;???
clr.w $66(a6) ;modulo D
move.w #256*64+32,$58(a6) ;BLTSIZE ze wzoru: DY*64+DX,dy wys.dx szer
; w slowach
waitblit ;ciekawe po co?
;---
move.w #20,d6 ;ilosc bob'ow -1, bo liczymy od 0
lea points,a2 ;pobranie x
lea points+100,a3 ;pobranie y ???
PLOT move.w (a2)+,d0 ;x1
move.w (a2)+,d1 ;y1
move.w (a3)+,d2 ;x2
move.w (a3)+,d3 ;y2
sub.w d0,d2 ;x2=x1-x2
sub.w d1,d3 ;y2=y1-y2
muls.w d7,d2 ;x2=#64*x2
muls.w d7,d3 ;y2=#64*y2
asr.w #6,d2 ;
asr.w #6,d3 ;
add.w d0,d2 ;x2=x1+x2
add.w d1,d3 ;y2=y1+y2
;------- procedura kopiujaca BOBA na ekran o wsp. X(d2),y(d3) ------------
lsl.w #6,d3 ;pomnozenie wart.Y przez ilosc bajtow w lini (64)
move.w d2,d4 ;przechowanie X
lsr.w #3,d2 ;X/8, oblicznie bajtu w ktorym zawiera sie wsp.X
and.w #$fffe,d2 ;skasowanie najmlodszego bitu (parz.adresy)
add.w d2,d3 ;adres boba (offset na ekranie)
and.w #%1111,d4 ;pozostawienie 4 najmlodszych bitow
ror.w #4,d4 ;4 pierwsze bity jako ostatnie
or.w #$0dfc,d4 ;zmontowanie bltcon0, minterm FC + kanaly A,B i D
move.l a0,a4 ;adres bitplanu
add.w d3,a4 ;pelny offset boba na ekranie
lea bobmask1,a5 ;adres danych boba
btst #14,2(a6)
bne.b *-6
move.w d4, $40(a6) ;BLTCON0
move.w #0, $42(a6) ;BLTCON1
move.l #-1, $44(a6) ;maski w tym przypadku nie sa potrzebne
move.l a4, $4c(a6) ;adres dla zrodla B na ekranie
move.l a5, $50(a6) ;adres dla zrodla A danych w pamieci
move.l a4, $54(a6) ;adres dla celu D na ekranie.Tu trafi A OR B
move.w #64-4,$62(a6) ;modulo B, szer. ekranu w bajtach - szer boba
move.w #0, $64(a6) ;modulo A, 0 ciagle pobieranie danych
move.w #64-4,$66(a6) ;modulo D
move.w #25*64+2,$58(a6) ;bltsize ze wzoru: DY*64+DX,dy wys.dx szer
; w slowach
dbf d6,PLOT
; Bob ma w rzeczywistosci rozmiar 16 pixeli czyli 1 slowo.
; W BLTSIZE sa 2 slowa.Wynika to z faktu,ze 1 slowo po przerolowaniu moze
; zajmowac obszar 2 slow. ,np:
; %1111111111111111.0000000000000000
; po przerolowaniu w prawo o 5 miejsc:
; %0000011111111111.1111100000000000
; przy rolowaniu nalezy brac serokosc w slowach+1
; W danych boba po kazdej lini(w tym przypadku po kazdym slowie),wystepuje
; puste slowo aby szerokosc zgadzala sie z BLTSIZE.
;---------------------------------------------
WAITVBL move.l 4(a6),d0 ;
and.l #$0001ff00,d0 ;
lsr.l #8,d0 ;
cmp.w #311,d0 ;
bne.b waitvbl ;
exg.l a0,a1 ;
move.l a1,d0 ;
lea cop(pc),a2 ;wymiana ekranow
move.w d0,6(a2) ;tzn. podwojny bufor na ekran
swap d0 ;
move.w d0,2(a2) ;
move.l a2,$80(a6) ;
clr.w $88(a6) ;
dbf d7,INTER ;ok
wait btst #6,$bfe001
; bne wait
rts
COP dc.w $00e0,$0000 ;
dc.w $00e2,$0000 ;
dc.w $180,0 ;
dc.w $182,$fff ;
dc.w $8e,$2c81 ;
dc.w $90,$2cc1 ;
dc.w $92,$38 ;
dc.w $94,$d0 ;
dc.w $108,24 ;
dc.w $10a,24 ;
dc.w $1fc,0 ;
dc.w $100,$1200 ;
dc.w $102,0,$104,0 ;
dc.l $fffffffe ;
PLANE1 blk.b 64*256,0 ;
PLANE2 blk.b 64*256,0 ;
PLANES dc.l PLANE1,PLANE2 ;
POINTS blk.l 1000 ;
bobmask1
dc.w %0000000000000000,$0 ;1
dc.w %0000001111100000,$0 ;2
dc.w %0000111111111000,$0 ;3
dc.w %0001111111111100,$0 ;4
dc.w %0011111111111110,$0 ;5
dc.w %0011111000111110,$0 ;6
dc.w %0111110000011111,$0 ;7
dc.w %0111100000001111,$0 ;8
dc.w %0111100000001111,$0 ;9
dc.w %0111100000001111,$0 ;10
dc.w %0111110000001111,$0 ;11
dc.w %0011111000011110,$0 ;12
dc.w %0011111111111110,$0 ;13
dc.w %0001111111111100,$0 ;14
dc.w %0000111111111000,$0 ;15
dc.w %0000001111100000,$0 ;16
dc.w %0000001111100000,$0 ;17
dc.w %0000001111100000,$0 ;18
dc.w %0000001111100000,$0 ;19
dc.w %0000001111100000,$0 ;20
dc.w %0000001111100000,$0 ;21
dc.w %0000011111110000,$0 ;22
dc.w %0000111111111000,$0 ;23
dc.w %1111111111111111,$0 ;24
dc.w %1111111111111111,$0 ;25