home *** CD-ROM | disk | FTP | other *** search
- ; BOBROUTINE BY PSYCHO OF DOMINATORS
-
- HOWMANY = 30
-
- >EXTERN "DF1:OBJECTS/BOB1",BRUSH1
- >EXTERN "DF1:OBJECTS/BOBCOLS",COLLIST
- >EXTERN "DF1:OBJECTS/KORDS",KORDS
- ORG $38000
- LOAD $38000
- PICX=320 ; PIXELS
- PICY=160 ; PIXELS
- ANTAL_FARVER=32
- ANTAL_BPL=3
- ANTAL_BOBBPL=3
- HALFBRITE=0
-
- BRUSHX=32 ; PIXELS
- BRUSHY=16 ; PIXELS
- BRUSHXOFFSET=128-108+1 ; ANTAL EXTRA PIXELS
- NUMBER_BRUSHES=HOWMANY-1
- DIFI = 20
- PICXWORD=PICX/16
- PICXBYTE=PICX/8
- BPLSIZE=PICXBYTE*PICY
- PICSIZE=BPLSIZE*ANTAL_BPL
-
- BRUSHXWORD=BRUSHX/16
- BRUSHXBYTE=BRUSHX/8
- BRUSHSIZE=BRUSHXBYTE*BRUSHY
-
-
- START:
- LEA $DFF000,A5
- JSR INITIALIZE(PC)
- JSR SETCOL(PC)
- JSR SETUP_COPPERLIST1(PC)
- JSR SETUPSCREEN(PC)
- JSR CALC_CURSORPOS(PC)
- JSR MOVEXYPOS(PC)
- JSR SAVE_POSITIONS(PC)
- JSR MOVEBRUSH(PC)
- MOVE.L #0,STATUSPOS
- MAIN_LOOP:
- JSR MOVEXYPOS(PC)
- JSR MOVEBRUSH(PC)
- BTST #6,$BFE001
- BNE.S MAIN_LOOP
- JSR RESTORE
- RTS
- MOVEXYPOS:
- JSR DOT(PC)
- MOVE.L #NUMBER_BRUSHES,D0
- LEA USEKORDS(PC),A4
- LEA XPOS1(PC),A0
- RED_LOOP:
- MOVE.W (A4)+,(A0)+
- MOVE.W (A4)+,(A0)+
- DBRA D0,RED_LOOP
- RTS
-
- CLOSELIB=-414
- EXECBASE=4
- FORBID=-132
- OPENLIB=-408
- PERMIT=-138
-
- ;;; DOS.LIBRARY
-
- CLOSE=-36
- OPEN=-30
- READ=-42
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;
- ;;; SUB-ROUTINES
- ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- PAUSE:
- SUBI #1,D0
- BNE.S PAUSE
- RTS
-
- BLTCPTH=$048
- BLTBPTH=$04C
- BLTAPTH=$050
- BLTDPTH=$054
- BLTCMOD=$060
- BLTBMOD=$062
- BLTAMOD=$064
- BLTDMOD=$066
- BLTCON0=$040
- BLTCON1=$042
- BLTSIZE=$058
- COP1LCH=$080
- COPJMP1=$088
- DMACON= $096
- DMACONR=$002
- VHPOSR= $006
-
- SETUP_COPPERLIST1:
-
- MOVE.L #BPL11,D0
- LEA HI1(PC),A2
- MOVE.W D0,6(A2)
- LSR.L #8,D0
- LSR.L #8,D0
- MOVE.W D0,2(A2)
- MOVE.L #BPL21,D0
- MOVE.W D0,14(A2)
- LSR.L #8,D0
- LSR.L #8,D0
- MOVE.W D0,10(A2)
- MOVE.L #BPL31,D0
- MOVE.W D0,22(A2)
- LSR.L #8,D0
- LSR.L #8,D0
- MOVE.W D0,18(A2)
- RTS
-
- SETUP_COPPERLIST2:
- LEA HI1(PC),A2
- MOVE.L #BPL12,D0
- MOVE.W D0,6(A2)
- LSR.L #8,D0
- LSR.L #8,D0
- MOVE.W D0,2(A2)
- MOVE.L #BPL22,D0
- MOVE.W D0,14(A2)
- LSR.L #8,D0
- LSR.L #8,D0
- MOVE.W D0,10(A2)
- MOVE.L #BPL32,D0
- MOVE.W D0,22(A2)
- LSR.L #8,D0
- LSR.L #8,D0
- MOVE.W D0,18(A2)
- RTS
-
- CALC_CURSORPOS:
- MOVE.L #0,A0
- CLR.L D2
- MOVE.W XPOS(PC),D2
- LSR.L #3,D2
- MOVE.W XPOS(PC),D3
- ANDI.W #$000F,D3
- LSL.L #8,D3
- LSL.L #4,D3
- ADDA.W D2,A0
- MOVE.W D3,SMOOTHXPOS
- MOVE.W YPOS(PC),D2
- MULU #40,D2
- ADDA.L D2,A0
- MOVE.L A0,CURSOR_POSITION
- RTS
-
-
- RESTOREBEHIND_BRUSH1:
- MOVE.B #3,D0
- MOVE.W #BRUSHXWORD,D1
- MOVE.W #BRUSHY,D2
- MOVE.W #PICXBYTE-BRUSHXBYTE,D3
- MOVE.W #PICXBYTE-BRUSHXBYTE,D4
- MOVE.L #PICBUFFER1,A0
- ADDI.L CURSOR_POSITION,A0
- MOVE.L CURSOR_POSITION,A1
- ADDI.L BAKSCR,A1
- JSR SHOWSCREEN
- RTS
- SHOW_BRUSH1:
- MOVE.B #3,D0
- MOVE.W #BRUSHXWORD,D1
- MOVE.W #BRUSHY,D2
- CLR.L D3
- MOVE.W #PICXBYTE-BRUSHXBYTE,D4
- MOVE.W SMOOTHXPOS(PC),D5
- MOVE.L #BRUSH1,A0
- MOVE.L BAKSCR(PC),A1
- ADDI.L CURSOR_POSITION(PC),A1
- MOVE.L #BRUSHMASK1,A2
- JSR SHOWBRUSH(PC)
- RTS
- MOVEBRUSH:
- MOVEBRUSH_WAIT:
- CMP.B #$FF,$006(A5)
- BNE.S MOVEBRUSH_WAIT
- CMP.L #0,STATUSSCR
- BEQ.S SECOND_FRONT
- CMP.L #1,STATUSSCR
- BEQ.S FIRST_FRONT
-
- CONT:
- MOVE.W #$8400,DMACON(A5)
- BSR.L RESTORE_BRUSHES
- BSR.L SHOW_BRUSHES
- BSR.L SAVE_POSITIONS
- MOVE.W #$0400,DMACON(A5)
- RTS
- FIRST_FRONT:
- MOVE.L #0,STATUSSCR
- LEA RESSCR(PC),A2
- MOVE.L #SCREENBUFFER1,(A2)
- MOVE.L #SCREENBUFFER2,4(A2)
- MOVE.L #OLDXPOS1,OLDXPOSPOINTER
- JSR SETUP_COPPERLIST1(PC)
- BRA.S CONT
- SECOND_FRONT:
- MOVE.L #1,STATUSSCR
- LEA RESSCR(PC),A2
- MOVE.L #SCREENBUFFER2,(A2)
- MOVE.L #SCREENBUFFER1,4(A2)
- MOVE.L #OLDXPOS2,OLDXPOSPOINTER
- JSR SETUP_COPPERLIST2(PC)
- BRA.L CONT
- SAVE_POSITIONS:
- LEA XPOS1,A0
- MOVE.L OLDXPOSPOINTER,A1
- MOVE.L #NUMBER_BRUSHES,D0
- SAVE_LOOP:
- MOVE.W (A0)+,(A1)+
- MOVE.W (A0)+,(A1)+
- DBRA D0,SAVE_LOOP
- RTS
- RESTORE_BRUSHES:
- LEA XPOS,A0
- MOVE.L OLDXPOSPOINTER,A1
- MOVE.L #NUMBER_BRUSHES,D0
- RESTORE_LOOP:
- MOVE.W (A1)+,(A0)
- MOVE.W (A1)+,2(A0)
- MOVEM.L A0-A6/D0-D7,-(A7)
- JSR CALC_CURSORPOS
- JSR RESTOREBEHIND_BRUSH1
- MOVEM.L (A7)+,A0-A6/D0-D7
- DBRA D0,RESTORE_LOOP
- RTS
-
-
- SHOW_BRUSHES:
- LEA XPOS(PC),A0
- LEA XPOS1(PC),A1
- MOVE.L #NUMBER_BRUSHES,D0
- SHOW_LOOP:
- MOVE.W (A1)+,(A0)
- MOVE.W (A1)+,2(A0)
- MOVEM.L A0-A6/D0-D7,-(A7)
- JSR CALC_CURSORPOS(PC)
- JSR SHOW_BRUSH1(PC)
- MOVEM.L (A7)+,A0-A6/D0-D7
- DBRA D0,SHOW_LOOP
- RTS
- SETUPSCREEN:
- MOVE.W #$8100,DMACON(A5)
- MOVE.W #$8040,DMACON(A5)
- MOVE.W #$0020,DMACON(A5)
-
- MOVE.W #ANTAL_BPL,D0
- MULU #$1000,D0
- ORI.W #$0280,D0
- MOVE.W D0,BPLCON0+2
- MOVE.W #$0080,DMACON(A5)
- MOVE.L #COPPERLIST,COP1LCH(A5)
- MOVE.W COPJMP1(A5),D0
- MOVE.W #$8080,DMACON(A5)
- RTS
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;
- ;;; INITIALIZE
- ;;; RESTORE
- ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- STARTLIST=38
-
- INITIALIZE:
- MOVE.W #$7FFF,$DFF09A
- MOVE.L $4,A6
- RESTORE_COPPER:
- LEA GRAPHICS_LIBRARY(PC),A1
- CLR.L D0
- JSR OPENLIB(A6)
- MOVE.L D0,A1
- MOVE.L STARTLIST(A1),OLDCOPPER
- JSR CLOSELIB(A6)
- RTS
-
- RESTORE:
- MOVE.W #$4000,$DFF09A
- MOVE.W #$E02C,$DFF09A
- MOVE.L EXECBASE,A6
- RESTORE_SOUND:
- MOVE.W #$000F,$DFF096
- MOVE.L OLDCOPPER(PC),$DFF080
- CLR.W $DFF088
- MOVE.W #$83E0,$DFF096
- RTS
-
- GRAPHICS_LIBRARY:
- DC.B 'graphics.library',0
- EVEN
- OLDCOPPER:
- DC.L 0
- EVEN
-
- SHOWSCREEN:
- MOVE.W D1,D7
- MULU D2,D7
- LSL.L #1,D7
- MOVE.W D2,D6
- LSL.L #6,D6
- ADDI.W D1,D6
- SHOWSCREEN_WAIT:
- BTST #14,DMACONR(A5)
- BNE SHOWSCREEN_WAIT
- MOVE.L A0,BLTAPTH(A5)
- MOVE.L A1,BLTDPTH(A5)
- MOVE.W D3,BLTAMOD(A5)
- MOVE.W D4,BLTDMOD(A5)
- MOVE.W #$0000,BLTCON1(A5)
- MOVE.W #$09F0,BLTCON0(A5)
- MOVE.W D6,BLTSIZE(A5)
- ADDI.L #BPLSIZE,A0
- ADDI.L #BPLSIZE,A1
- SUBI.B #1,D0
- BNE SHOWSCREEN_WAIT
- RTS
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;
- ;;; SHOWBRUSH
- ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;
- ;;; IN:
- ;;; D0(B) ANTAL BIT PLANER
- ;;; D1(W) X-SIZE (WORDS)
- ;;; D2(W) Y-SIZE (LINES)
- ;;; D3(W) SOURCE MODULO
- ;;; D4(W) DESTINATION MODULO
- ;;; D5(W) SMOOTH X-POSITION
- ;;;
- ;;; A0(L) SOURCE BUFFER
- ;;; A1(L) DESTINATION BUFFER
- ;;; A2(L) SOURCE MASK
- ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;
- ;;; OUT:
- ;;; D0(B) 0
- ;;; D1(W) X-SIZE (WORDS)
- ;;; D2(W) Y-SIZE (LINES)
- ;;; D3(W) SOURCE MODULO
- ;;; D4(W) DESTINATION MODULO
- ;;; D5(W) BLTCON0
- ;;; D6(W) BLTSIZE
- ;;; D7(L) BIT-PLANE SIZE (BYTES)
- ;;;
- ;;; A0(L) END OF SOURCE BUFFER
- ;;; A1(L) END OF DESTINATION BUFFER
- ;;; A2(L) END OF SOURCE MASK
- ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- SHOWBRUSH:
- MOVE.W D1,D7
- MULU D2,D7
- LSL.L #1,D7
- MOVE.W D2,D6
- LSL.L #6,D6
- ADDI.W D1,D6
- SHOWBRUSH_WAIT:
- BTST #14,DMACONR(A5)
- BNE.S SHOWBRUSH_WAIT
- MOVE.L A2,BLTAPTH(A5)
- MOVE.L A0,BLTBPTH(A5)
- MOVE.L A1,BLTCPTH(A5)
- MOVE.L A1,BLTDPTH(A5)
- MOVE.W D3,BLTAMOD(A5)
- MOVE.W D3,BLTBMOD(A5)
- MOVE.W D4,BLTCMOD(A5)
- MOVE.W D4,BLTDMOD(A5)
- ANDI.W #$F000,D5
- MOVE.W D5,BLTCON1(A5)
- ORI.W #$0FCA,D5
- MOVE.W D5,BLTCON0(A5)
- MOVE.W D6,BLTSIZE(A5)
- MOVE.L #$FFFFFFFF,$044(A5)
- ADDI.L D7,A0 ; HUSK
- ADDI.L #BPLSIZE,A1 ; HUSK
- SUBI.B #1,D0
- BNE.S SHOWBRUSH_WAIT
- RTS
-
- SETCOL:
- STORE: LEA COLLIST(PC),A0
- LEA COLOUR1+2(PC),A1
- MOVE.W #7,D0
- FILL2: MOVE.W (A0)+,(A1)
- ADDA.L #4,A1
- DBF D0,FILL2
- RTS
-
-
- DOT:
- MOVEM.L A0-A6/D0-D7,-(A7)
- CLR.L D0
- CLR.L D1
- CLR.L D2
- CLR.L D3
- CLR.L D4
- CLR.L D5
- CLR.L D6
- LEA USEKORDS(PC),A0
- LEA KORDPOS(PC),A2
- MOVE.B #HOWMANY,D6
- MOVE.B GETX(PC),D0
- MOVE.B GETX+1(PC),D1
- MOVE.B GETX+2(PC),D2
- MOVE.B GETX+3(PC),D3
- MAKELOOP1:
- MOVE.L (A2),A1
- ADDA.L D0,A1
- MOVE.B (A1),D4
- LSR.B #1,D4
- MOVE.L (A2),A1
- ADDA.L D1,A1
- MOVE.B (A1),D7
- LSR.B #1,D7
- ADD.B D7,D4
- MOVE.W D4,(A0)+
- MOVE.L (A2),A1
- ADDA.L D2,A1
- MOVE.B (A1),D5
- LSR.B #1,D5
- MOVE.L (A2),A1
- ADD.L D3,A1
- MOVE.B (A1),D7
- LSR.B #1,D7
- ADD.B D7,D5
- LSR.B #1,D5
- ADDI.B #$05,D5
- MOVE.W D5,(A0)+
- LEA SINUSPARMS(PC),A6
- MOVE.L (A6),A6
- ADD.B 2(A6),D0
- ADD.B 3(A6),D1
- SUB.B 4(A6),D2
- SUB.B 5(A6),D3
- DBF D6,MAKELOOP1
- LEA GETX(PC),A0
- LEA SPEED(PC),A1
- MOVE.L (A1),A1
- MOVE.B #$04,D0
- MAKELOOP2:
- MOVE.B (A0),D1
- MOVE.B (A1)+,D2
- ADD.B D2,D1
- MOVE.B D1,(A0)+
- DBF D0,MAKELOOP2
- MOVEM.L (A7)+,A0-A6/D0-D7
- RTS
-
- GETX: DC.L $00000000
- SPEEDPARMS:
- SPEED1:DC.B $03 ; SPEED X1
- SPEED2:DC.B $02 ; SPEED X2
- SPEED3:DC.B $01 ; SPEED Y1
- SPEED4:DC.B $03 ; SPEED Y2
- SINUSPARAMETERS:
- PARM1: DC.W $00 ; UNUSED
- PARM2: DC.B $6 ; WITH BETWEEN DOTS X1
- PARM3: DC.B $7 ; WITH BETWEEN DOTS X2
- PARM4: DC.B $8 ; WITH BETWEEN DOTS Y1
- PARM5: DC.B $9 ; WITH BETWEEN DOTS Y2
- PARM6: DC.B $00 ; UNUSED
- EVEN
- DUMMY: DC.L $00000000
-
- SPEED: DC.L SPEEDPARMS
- SINUSPARMS: DC.L SINUSPARAMETERS
- KORDPOS: DC.L KORDS
- USEKORDS:
- BLK.W HOWMANY*8+4,$0004
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;
- ;;; CHIP ADDRESSES
- ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- STATUSSCR: DC.L 0
- RESSCR: DC.L SCREENBUFFER1
- BAKSCR: DC.L SCREENBUFFER2
- CURSOR_POSITION:DC.L PICXBYTE*16
- SHADOW_POSITION:DC.L 0
- STATUSPOS: DC.L 0
- XPOS: DC.W 1
- YPOS: DC.W 1
- XPOS1: BLK.W 200
- OLDXPOSPOINTER: DC.L 0
- OLDXPOS1: BLK.W 200
- OLDXPOS2: BLK.W 200
- SMOOTHXPOS: DC.W 0
- SMOOTHXPOS2: DC.W 0
-
-
- COPPERLIST:
- DC.W $1001,$FFFE
- DC.W $0100,$0200
- DC.W $2001,$FFFE
- DC.W $008E,$1C61
- DC.W $0090,$10F1
- DC.W $0092,$0038
- DC.W $0094,$00D0
- DC.W $0108,$0000
- BPLCON0:DC.W $0100,$3200
- HI1: DC.W $00E0,0
- LO1: DC.W $00E2,0
- HI2: DC.W $00E4,0
- LO2: DC.W $00E6,0
- HI3: DC.W $00E8,0
- LO3: DC.W $00EA,0
- COLOUR1:
- DC.W $0180,$0333
- DC.W $0182,$0111
- DC.W $0184,$0222
- DC.W $0186,$0333
- DC.W $0188,$0444
- DC.W $018A,$0555
- DC.W $018C,$0666
- DC.W $018E,$0777
- DC.W $BC01,$FFFE
- DC.W $0100,$0200
- DC.W $FFFF,$FFFE ;END COPPER LIST
-
- BRUSH1: BLK.B BRUSHSIZE*ANTAL_BOBBPL,$FF
- BRUSHMASK1: BLK.B BRUSHSIZE,$FF
-
- COLLIST: BLK.B 64
-
- PICBUFFER1: BLK.B BPLSIZE,0
- PICBUFFER2: BLK.B BPLSIZE,0
- PICBUFFER3: BLK.B BPLSIZE,0
-
- SCREENBUFFER1:
- BPL11: BLK.B BPLSIZE,0
- BPL21: BLK.B BPLSIZE,0
- BPL31: BLK.B BPLSIZE,0
- SCREENBUFFER2:
- BPL12: BLK.B BPLSIZE,0
- BPL22: BLK.B BPLSIZE,0
- BPL32: BLK.B BPLSIZE,0
-
- KORDS: BLK.B 4000,0
-
- END: