home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 4: Demo 1
/
almathera_demo1.bin
/
sourcecode
/
german
/
blitter.s
< prev
next >
Wrap
Text File
|
1995-03-17
|
6KB
|
368 lines
BitPlane1=$50000 ;Adresse Bitplane 1
bitplane2=$52000
bitplane3=$54000
bitplane4=$56000
bitplane5=$58000
Exec=4 ;Basisadresse Execbase
Permit=-138 ;Stop Multitasking
Forbid=-132 ;Start Multitasking
OpenLibrary=-408
CloseLibrary=-414
InitRastPort=-198
InitBitMap=-390
bltcon0=$dff040
bltcon1=$dff042
bltafwm=$dff044
bltalwm=$dff046
bltcpth=$dff048
bltcptl=$dff04a
bltbpth=$dff04c
bltbptl=$dff04e
bltapth=$dff050
bltaptl=$dff052
bltdpth=$dff054
bltdptl=$dff056
bltsize=$dff058
bltcmod=$dff060
bltbmod=$dff062
bltamod=$dff064
bltdmod=$dff066
bltadat=$dff074
bltbdat=$dff072
bltcdat=$dff070
start:
jsr setup ;Initialisiert die Bitmaps und
jsr setcopper
move.l #$40000,a0
move #8000,d0
l1: move.b #$ff,(a0)+
sub #1,d0
bne l1
move.l #bitplane1,a0
move.l #$60000,a1
move #8000,d0
l2: move.b (a0)+,(a1)+
sub #1,d0
bne l2
move.l #bitplane1,a2
ok: move.l a2,a1
ok2: move.l #$40000,a0
move.w #8,d0
move.w #32,d1
jsr blit
move.w $dff00c,d0
btst #1,d0
bne rechts
btst #0,d0
bne runter
btst #9,d0
bne links
btst #8,d0
bne hoch
ok1: jsr wait
jmp ok
rechts:
jsr pause2
move.l #1,d6
jsr addieren
bra ok
hoch:
jsr pause
move.l #-40,d6
jsr addieren
bra ok
runter:
jsr pause
move.l #40,d6
jsr addieren
bra ok
links:
jsr pause2
move.l #-1,d6
jsr addieren
bra ok
addieren:
move.l a2,a1
move.l #$60000,a0
move.w #8,d0
move.w #32,d1
jsr blit
add.l d6,a2
rts
pause: move.l #1000,d0
p1: dbf d0,p1
rts
pause2: move.l #5000,d0
p2: dbf d0,p2
rts
blit:
jsr waitblt
move.l a1,bltdpth
move.l a0,bltapth
rol.w #6,d1
add.w d0,d1
mulu #2,d0
move.w #40,d3
sub.w d0,d3
move.w d3,bltamod
move.w d3,bltdmod
move.w #%0000100111110000,bltcon0
clr.w bltcon1
move.w d1,bltsize
rts
waitblt:
btst #14,$dff002
bne waitblt
rts
wait:
andi.b #64,$bfe001 ;Bit 7 (linke Maustaste)
beq ende
rts
ende: move.l copptr,a0
move.l oldcop,(a0) ;Alte Copperliste wieder bereit-
move.l exec,a6
move.l GfxBase,a1 ;stellen und Gfxlibrary
jsr CloseLibrary(a6);schliessen
move.l dos_base,a1
jsr closelibrary(a6)
jsr Permit(a6) ;Multitasking wieder zulassen
ILLEGAL ;Rueckkehr zum SEKA
rts ;ende
setup:
move.l Exec,a6 ;Exebase-Adresse nach a6
jsr permit(a6) ;Stop Multitasking
move.l exec,a6
lea.l dosname,a1
jsr Openlibrary(a6)
move.l d0,dos_base
lea GrName,a1 ;Gfxname nach a1
jsr OpenLibrary(a6) ;Gfxlibrary oeffnen
move.l d0,GfxBase ;Basisadresse buffern
move.l d0,a6
add.l #$32,d0
move.l d0,copptr
lea BitMap,a0 ;Bitmapstruktur nach a0
moveq #5,d0 ;Tiefe (5 Bitplanes)
move.l #320,d1 ;320 Pixel nach x
move.l #200,d2 ;200 Pixel nach y
jsr InitBitMap(a6) ;Bitmap Initialisieren
lea RastPort,a1 ;erhaltenen Rastport nach a1
jsr InitRastPort(a6);Rastport initialisieren
move.l #BitMap,R_BitMap
move.l #BitPlane1,d0 ;Adresse Bitplane nach d0
move.l d0,Plane1 ;Adresse auch nach Plane1
move.l d0,a0 ;und nach Adressregister a0
move.w d0,lo1 ;sowie in Copperliste speichern
swap d0 ;Hi-Nibble isolieren und eben-
move.w d0,hi1 ;falls nach Copperliste
move.l #8000,d0 ;8000 Bytes fuer Bitplane bele-
move.b #$00,d1 ;gen
cl1: move.b d1,(a0)+
dbf d0,cl1
move.l #BitPlane2,d0
move.l d0,Plane2
move.l d0,a0
move.w d0,lo2
swap d0
move.w d0,hi2
move.l #8000,d0
move.b #$00,d1
cl2: move.b d1,(a0)+
dbf d0,cl2
move.l #BitPlane3,d0
move.l d0,Plane3
move.l d0,a0
move.w d0,lo3
swap d0
move.w d0,hi3
move.l #8000,d0
move.b #$00,d1
cl3: move.b d1,(a0)+
dbf d0,cl3
move.l #BitPlane4,d0
move.l d0,Plane4
move.l d0,a0
move.w d0,lo4
swap d0
move.w d0,hi4
move.l #8000,d0
move.b #$00,d1
cl4: move.b d1,(a0)+
dbf d0,cl4
move.l #BitPlane5,d0
move.l d0,Plane5
move.l d0,a0
move.w d0,lo5
swap d0
move.w d0,hi5
move.l #8000,d0
move.b #$00,d1
cl5: move.b d1,(a0)+
dbf d0,cl5
rts
setcopper:
move.l copptr,a0 ;Adresse der Copperliste nach a0
move.l (a0),oldcop ;Alte Liste zwischenspeichern
move.l #Copper,(a0) ;Neue Liste fue Copper
rts
Copper:
DC.W $0180
co0: dc.w $0000
DC.W $0182
co1: dc.w $0fff
DC.W $0184
co2: dc.w $000f
DC.W $0186
co3: dc.w $0f00
DC.W $0188
co4: dc.w $000f
DC.W $018a
co5: dc.w $0f0f
DC.W $018c
co6: dc.w $00ff
DC.W $018e
co7: dc.w $f0ff
DC.W $0190
co8: dc.w $0620
DC.W $0192
co9: dc.w $0e50
DC.W $0194
co10: dc.w $09f1
DC.W $0196
co11: dc.w $0eb0
dc.w $0198
co12: dc.w $055f
dc.w $019a
co13: dc.w $092f
dc.w $019c
co14: dc.w $00f8
dc.w $019e
co15: dc.w $0ccc
dc.w $01a0
co16: dc.w $0000
dc.w $01a2
co17: dc.w $0d22
dc.w $01a4
co18: dc.w $0000
dc.w $01a6
co19: dc.w $0fca
dc.w $01a8
co20: dc.w $0444
dc.w $01aa
co21: dc.w $0555
dc.w $01ac
co22: dc.w $0666
dc.w $01ae
co23: dc.w $0777
dc.w $01b0
co24: dc.w $0888
dc.w $01b2
co25: dc.w $0999
dc.w $01b4
co26: dc.w $0aaa
dc.w $01b6
co27: dc.w $0bbb
dc.w $01b8
co28: dc.w $0ccc
dc.w $01ba
co29: dc.w $0ddd
dc.w $01bc
co30: dc.w $0eee
dc.w $01be
co31: dc.w $0fff
DC.W $00e0
hi1: DC.W $0002
DC.W $00e2
lo1: DC.W $1000
DC.W $00e4
hi2: DC.W $0002
DC.W $00e6
lo2: DC.W $1000
DC.W $00e8
hi3: DC.W $0002
DC.W $00ea
lo3: DC.W $1000
DC.W $00ec
hi4: DC.W $0002
DC.W $00ee
lo4: DC.W $1000
DC.W $00f0
hi5: DC.W $0002
DC.W $00f2
lo5: DC.W $1000
DC.W $0100,%0101000000000000
DC.W $0102
delay: DC.W $00
DC.W $0108,0
DC.W $010a,0
DC.W $0092,$0038
DC.W $0094,$00d0
DC.W $008e,$3681
DC.W $0090,$fdc1
DC.W $ffff,$fffe
BitMap:
BytesPerRow: blk.w 1,0
Bytes: blk.w 1,0
Flags: blk.b 1,0
Depth: blk.b 1,0
Pad: blk.w 1,0
Plane1: blk.l 1,0
Plane2: blk.l 1,0
Plane3: blk.l 1,0
Plane4: blk.l 1,0
Plane5: blk.l 1,0
Planes: blk.l 1,0
RastPort:
blk.l 1,0
R_BitMap: blk.l 1,0
blk.b 2+4+4+4+8,0
blk.b 4,0
cp_x: blk.w 1,0
cp_y: blk.w 1,0
blk.b 8+22+[7*2]+[2*4]+8,0
blk.w 6,0
even
GrName: DC.B 'graphics.library',0
Dosname: DC.B 'dos.library',0
even
copptr: blk.l 1,0
oldcop: blk.l 1,0
GfxBase: blk.l 1,0
Dos_base: blk.l 1,0
x: blk.w 1,0