home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
assembler-kurs
/
listings2
/
listing6q.s
< prev
next >
Wrap
Text File
|
1977-12-31
|
6KB
|
229 lines
; Listing6q.s BRINGT EINIGE VERSCHIEDENE SCHACHMUSTER AUF DEN
; BILDSCHIRM - LINKE - RECHTE - LINKE MAUSTASTE
; ABWECHSELND, UM DIE MUSTER ZU SEHEN
SECTION CIPundCOP,CODE
Anfang:
move.l 4.w,a6 ; Execbase
jsr -$78(a6) ; Disable
lea GfxName(PC),a1 ; Namen der Lib
jsr -$198(a6) ; OpenLibrary
move.l d0,GfxBase ;
move.l d0,a6
move.l $26(a6),OldCop ; speichern die alte COP
; POINTEN AUF UNSERE BITPLANES
MOVE.L #BITPLANE,d0
LEA BPLPOINTERS,A1 ; COP - Pointer
move.w d0,6(a1)
swap d0
move.w d0,2(a1)
move.l #COPPERLIST,$dff080 ; COP1LC - unsere COP
move.w d0,$dff088 ; COPJMP1 - Starten unsere COP
move.w #0,$dff1fc ; FMODE - Deaktiviert das AGA
move.w #$c00,$dff106 ; BPLCON3 - Deaktiviert das AGA
bsr.s MATRIX1
mouse:
btst #6,$bfe001 ; Linke Maustaste?
bne.s mouse
bsr.w MATRIX2
mouse2:
btst #2,$dff016 ; Rechte Maustaste?
bne.s mouse2
bsr.w MATRIX3
mouse3:
btst #6,$bfe001 ; Linke Maustaste?
bne.s mouse3
bsr.w MATRIX4
mouse4:
btst #2,$dff016 ; Rechte Maustaste?
bne.s mouse4
move.l OldCop(PC),$dff080 ; Pointen auf die System-Cop
move.w d0,$dff088 ; Starten die alte Cop
move.l 4.w,a6
jsr -$7e(a6) ; Enable
move.l gfxbase(PC),a1
jsr -$19e(a6) ; Closelibrary
rts
; DATEN
GfxName:
dc.b "graphics.library",0,0
GfxBase:
dc.l 0
OldCop:
dc.l 0
; diese Routine erzeugt ein Schachbrett mit 8x8 Pixel großen Quadraten
MATRIX1:
LEA BITPLANE,a0 ; Adresse Ziel-Bitplane
MOVEQ #16-1,d0 ; 16 Paare von 8 Pixel hohen Quadraten
; 16*2*8=256 totales Ausfüllen des Bildschirmes
MachPaar:
move.l #(20*8)-1,d1 ; 20 Words um eine Zeile zu füllen
; 8 Zeilen zu füllen
MachEins:
move.w #%1111111100000000,(a0)+ ; Länge eines Quadrates auf 1=8 Pixel
; Quadrate auf NULL = 8 Pixel
dbra d1,MachEins ; mach 8 Zeilen #.#.#.#.#.#.#.#.#.#
move.l #(20*8)-1,d1 ; 20 Words um 1 Zeile zu füllen
; 8 Zeilen zu füllen
MachAndres:
move.w #%0000000011111111,(a0)+ ; Länge von auf NULL gesetzten Quad= 8
; Quadrat auf 1 = 8 Pixel
dbra d1,MachAndres ; mach 8 Zeilen #.#.#.#.#.#.#.#.#.
DBRA d0,MachPaar ; Mach 16 Paare Quadrate
; #.#.#.#.#.#.#.#.#.#
rts ; .#.#.#.#.#.#.#.#.#.
; Diese Routine erzeugt ein Schachbrett mit 4 Pixel Seitenkante pro Quadrat
MATRIX2:
LEA BITPLANE,a0 ; Adresse Ziel-Bitplane
MOVEQ #32-1,d0 ; 32 Paare von 4 Pixel hohen Quadraten
; 32*2*4=256 totales Ausfüllen des Bildschirmes
MachPaar2:
move.l #(40*4)-1,d1 ; 40 Bytes um eine Zeile zu füllen
; 4 Zeilen zu füllen
MachEins2:
move.b #%11110000,(a0)+ ; Länge eines Quadrates auf 1 = 4 Pixel
; Quadrate auf NULL = 4 Pixel
dbra d1,MachEins2 ; mach 4 Zeilen #.#.#.#.#.#.#.#.#.#
move.l #(40*4)-1,d1 ; 40 Bytes um eine Zeile zu füllen
; 4 Zeilen zu füllen
MachAndres2:
move.b #%00001111,(a0)+ ; Länge eine auf NULL gesetzten Quadrat = 4 Pixel
; Quadrat auf 1 = 4 Pixel
dbra d1,MachAndres2 ; mach 8 Zeilen .#.#.#.#.#.#.#.#.#.
DBRA d0,MachPaar2 ; mach 32 Paare von Quadraten
; #.#.#.#.#.#.#.#.#.#
rts ; .#.#.#.#.#.#.#.#.#.
; Diese Routine macht ein Schachbrett mit Quadraten zu 16 Pixel
MATRIX3:
LEA BITPLANE,a0 ; Adresse Ziel-Bitplane
MOVEQ #8-1,d0 ; 8 Paare von 16 Pixel hohen Quadraten
; 8*2*4=256 totales Ausfüllen des Bildschirmes
MachPaar3:
move.l #(10*16)-1,d1 ; 10 Bytes um eine Zeile zu füllen
; 16 Zeilen zu füllen
MachEins3:
move.l #%11111111111111110000000000000000,(a0)+
; Länge eines Quadrates auf 1 = 16 Pixel
; Quadrate auf NULL = 16 Pixel
dbra d1,MachEins3 ; mach 16 Zeilen #.#.#.#.#.#.#.#.#.#
move.l #(10*16)-1,d1 ; 10 Bytes um eine Zeile zu füllen
; 16 Zeilen zu füllen
MachAndres3:
move.l #%00000000000000001111111111111111,(a0)+
; Länge eine auf NULL gesetzten Quadr.=16 Pixel
; Quadrat auf 1 = 16 Pixel
dbra d1,MachAndres3 ; mach 8 Zeilen .#.#.#.#.#.#.#.#.#.
DBRA d0,MachPaar3 ; mach 8 Paare von Quadraten
; #.#.#.#.#.#.#.#.#.#
rts ; .#.#.#.#.#.#.#.#.#.
; MATRIX Modell:"Fantasie"
MATRIX4:
LEA BITPLANE,a0 ; Adresse Ziel-Bitplane in a0
MOVEQ #8-1,d0 ; 8 Paare von 16 Pixel hohen Quadraten
; 8*2*16=256 totales Ausfüllen des Bildschirmes
MachPaar4:
move.l #(10*16)-1,d1 ; 10 Longwords um eine Zeile zu füllen
; 16 Zeilen zu füllen
MachEins4:
move.l #%11111000000000011111000000000000,(a0)+
; Länge Quadrat auf 1 = 4 Pixel
; Quadrat auf 0 = 12 Pixel
dbra d1,MachEins4 ; mach 16 Zeilen #.#.#.#.#.#.#.#.#.#
move.l #(10*16)-1,d1 ; 10 Longwords um eine Zeile zu füllen
; 16 Zeilen zu füllen
MachAndres4:
move.l #%00000000000011111000000000011111,(a0)+
; Länge Quadrat auf 0 = 12
; Quadrat auf 1 = 4 Pixel
dbra d1,MachAndres4 ; mach 8 Zeilen .#.#.#.#.#.#.#.#.#.
DBRA d0,MachPaar4 ; Mach 8 Paare von Quadraten
; #.#.#.#.#.#.#.#.#.#
rts ; .#.#.#.#.#.#.#.#.#.
SECTION GRAPHIC,DATA_C
COPPERLIST:
dc.w $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
dc.w $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
dc.w $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
dc.w $13e,$0000
dc.w $8E,$2c81 ; DiwStrt (Register mit Normalwerten)
dc.w $90,$2cc1 ; DiwStop
dc.w $92,$0038 ; DdfStart
dc.w $94,$00d0 ; DdfStop
dc.w $102,0 ; BplCon1
dc.w $104,0 ; BplCon2
dc.w $108,0 ; Bpl1Mod
dc.w $10a,0 ; Bpl2Mod
; 5432109876543210
dc.w $100,%0001001000000000 ; Bit 12 an - 1 Bitplane Lowres
BPLPOINTERS:
dc.w $e0,$0000,$e2,$0000 ;erstes Bitplane
dc.w $0180,$000 ; Color0 - Hintergrund
dc.w $0182,$19a ; Color1 - Schrift
dc.w $FFFF,$FFFE ; Ende der Copperlist
SECTION MEIPLANE,BSS_C ; Die SECTION BSS können nur aus NULLEN
; bestehen!!! Man verwendet das DS.B um zu
; definieren, wieviele Nullen die Section
; enthalten soll
BITPLANE:
ds.b 40*256 ; ein Bitplane, 320x256 LowRes
end
If you need a geometric background, you can do it with a routine!