home *** CD-ROM | disk | FTP | other *** search
- incdir "DevpacAm:include/"
- include "exec/exec_lib.i"
- include "exec/execbase.i"
- include "graphics/gfxbase.i"
- include "graphics/graphics_lib.i"
- include "hardware/custom.i"
-
- ***********************************************************
- * Other Macros
- ***********************************************************
-
- CALL MACRO
- jsr _LVO\1(a6)
- ENDM
-
- WaitBlit MACRO
- tst.b (a5)
- .\@: btst.b #6,(a5)
- bne.b .\@
- ENDM
-
- ***********************************************************
-
- Start: bsr.w TakeSystem
-
- bsr.w InstallBmap
- bsr.w InstallSprites
- bsr.w InstallCopper
-
- move.w #$7fff,intena-2(a5)
- movea.l VectorBase,a0
- move.l $6c(a0),Level3Save
- move.l #MyLevel3,$6c(a0)
- move.w #$c020,intena-2(a5)
-
- .1: btst #6,$bfe001
- bne.b .1
-
- move.w #$7fff,intena-2(a5)
- movea.l VectorBase,a0
- move.l Level3Save,$6c(a0)
-
- bsr.w RestoreSystem
- rts
-
- ***********************************************************
-
- MyLevel3: movem.l d0-a6,-(a7) ; Push all regs onto stack
- movea.l #$dff002,a5 ; Custom chip base
- bsr.w VScroll
- bsr.w MoveStars
- move.w #$20,intreq-2(a5) ; Turn off VBLANK int request bit
- movem.l (a7)+,d0-a6 ; Pop all regs from stack
- rte ; End of interrupt
-
- ***********************************************************
-
- VScroll: subq.w #1,VScrollCount ; 1 less line to move up
- tst.w VScrollCount ; Are we ready to draw a new text line?
- beq.w NewLine ; Yes, go do it
- ; If not, we need to shift it up
- WB: WaitBlit
- move.l #Bmap+24+40,$50-2(a5) ; Blitter source A (y = 1)
- move.l #Bmap+24,$54-2(a5) ; Blitter destination D (y = 0)
- move.l #$00180018,$64-2(a5) ; A & D modulos
- move.l #-1,$44-2(a5) ; Write mask
- move.l #$09f00000,$40-2(a5) ; Blitter Control registers
- move.w #(198*64)+8,$58-2(a5) ; 198 lines by 8 words
- rts
-
- ***********************************************************
-
- NewLine: move.w #11,VScrollCount ; Reset VScroll counter
-
- lea ScrollText,a2 ; Adr of scrolltext
- add.l ScrollPos,a2 ; Get to correct place in text
- add.l #15,ScrollPos ; Next time, we want the next line
- tst.b (a2) ; Does this line start with a 0 byte?
- bne.b NoResetText ; No, go on as normal
- move.l #15,ScrollPos ; Yes, restart text
- lea ScrollText,a2 ; Point back to start
-
- NoResetText: moveq #0,d6 ; Counter, will do 15 characters
- FindChar: lea Font,a0 ; Adr of font
- lea Bmap,a1 ; Adr of bitmap
-
- moveq #0,d0 ; Clear out d0
- move.b (a2)+,d0 ; Next char into d0
- sub.b #32,d0 ; Get range of 0-58
- cmp.b #37,d0 ; Is it lower than an 'H'?
- blt.s FirstRow ; Yes, use the top row of the font
- add.l #(40*9),a0 ; No, use the second row of the font
- sub.b #37,d0 ; and adjust the range
- FirstRow: add.l d0,a0 ; Add char offset into font bmap
- add.l d6,a1 ; Add char num offset into bmap
- add.l #7544,a1 ; Move to lower right of bmap
- moveq #7,d7 ; We will copy this many raster lines
- DrawLoop: move.b (a0),(a1) ; Copy a line of the character
- add.l #40,a0 ; Next line in font bmap
- add.l #40,a1 ; Next line in target bmap
- dbra d7,DrawLoop ; Repeat until whole character is done
-
- addq.l #1,d6 ; Next character
- cmpi.l #15,d6 ; Done all 15 in this line yet?
- bne.w FindChar ; No, do it all again
- bra.w WB
- rts ; Done
-
- ***********************************************************
-
- MoveStars: lea Stars+1,a0
- moveq #32,d0 ; num of stars div 3
- loop: subq.b #3,(a0)+
- addq.l #7,a0
- subq.b #2,(a0)+
- addq.l #7,a0
- subq.b #1,(a0)+
- addq.l #7,a0
- subq.l #1,d0
- bne.s loop
- rts
-
- ***********************************************************
-
- InstallSprites: lea SpritePtrs,a0
- move.l #Stars,d0
- move.w d0,6(a0)
- swap d0
- move.w d0,2(a0)
- move.l #NullSprite,d0
- move.w d0,14(a0)
- move.w d0,22(a0)
- move.w d0,30(a0)
- move.w d0,38(a0)
- move.w d0,46(a0)
- move.w d0,54(a0)
- move.w d0,62(a0)
- swap d0
- move.w d0,10(a0)
- move.w d0,18(a0)
- move.w d0,26(a0)
- move.w d0,34(a0)
- move.w d0,42(a0)
- move.w d0,50(a0)
- move.w d0,58(a0)
- rts
-
- ***********************************************************
-
- TakeSystem: movea.l 4.w,a6 ; exec base
- lea $dff002,a5 ; custom chip base + 2
-
- lea GraphicsName,a1 ; "graphics.library"
- moveq #0,d0 ; any version
- CALL OpenLibrary ; open it.
- move.l d0,gfx_base ; save pointer to gfx base
- move.l d0,a6 ; for later callls...
-
- move.l gb_ActiView(a6),OldView ; save old view
-
- move.w #0,a1 ; clears full long-word
- CALL LoadView ; Open a NULL view (resets display
- ; on any Amiga)
-
- CALL WaitTOF ; Wait twice so that an interlace
- CALL WaitTOF ; display can reset.
-
- CALL OwnBlitter ; take over the blitter and...
- CALL WaitBlit ; wait for it to finish so we
- ; safely use it as we please.
-
- movea.l 4.w,a6 ; exec base
- CALL Forbid ; kill multitasking
-
- move.w $7c-2(a5),d0 ; AGA register...
- cmpi.b #$f8,d0 ; are we AGA?
- bne.b .not_aga ; nope.
- move.w #0,$dff1fc ; reset AGA sprites to normal mode
-
- .not_aga: bsr.b GetVBR ; get the vector base pointer
- move.l d0,VectorBase ; save it for later.
-
- move.w dmaconr-2(a5),d0 ; old DMACON bits
- ori.w #$8000,d0 ; or it set bit for restore
- move.w d0,OldDMACon ; save it
-
- move.w intenar-2(a5),d0 ; old DMACON bits
- ori.w #$c000,d0 ; or it set bit for restore
- move.w d0,OldINTEna ; save it
- rts
-
- ***********************************************************
-
- RestoreSystem: lea $dff002,a5 ; custom chip base + 2
- move.w OldDMACon,dmacon-2(a5) ; restore old dma bits
- move.w OldINTEna,intena-2(a5) ; restore old int bits
-
- movea.l OldView,a1 ; old Work Bench view
- movea.l gfx_base,a6 ; gfx base
- CALL LoadView ; Restore the view
- CALL DisownBlitter ; give blitter back to the system.
-
- move.l gb_copinit(a6),$80-2(a5) ; restore system clist
- movea.l a6,a1
- movea.l 4.w,a6 ; exec base
- CALL CloseLibrary
- CALL Permit ; restart multitasking
- rts
-
- ***********************************************************
- * This function provides a method of obtaining a pointer to the base of the
- * interrupt vector table on all Amigas. After getting this pointer, use
- * the vector address as an offset. For example, to install a level three
- * interrupt you would do the following:
- *
- * bsr _GetVBR
- * move.l d0,a0
- * move.l $6c(a0),OldIntSave
- * move.l #MyIntCode,$6c(a0)
- *
- ***********************************************************
- * Inputs: none
- * Output: d0 contains vbr.
-
- GetVBR: move.l a5,-(sp) ; save it.
- moveq #0,d0 ; clear
- movea.l 4.w,a6 ; exec base
- btst.b #AFB_68010,AttnFlags+1(a6); are we at least a 68010?
- beq.b .1 ; nope.
- lea.l vbr_exception(pc),a5 ; addr of function to get VBR
- CALL Supervisor ; supervisor state
- .1: move.l (sp)+,a5 ; restore it.
- rts ; return
-
- vbr_exception:
- ; movec vbr,Xn is a priv. instr. You must be supervisor to execute!
- ; movec vbr,d0
- ; many assemblers don't know the VBR, if yours doesn't, then use this
- ; line instead.
- dc.w $4e7a,$0801
- rte ; back to user state code
-
- ***********************************************************
-
- InstallCopper: move.l #Copper,$80-2(a5) ; Install my copperlist
- rts ; Done
-
- ***********************************************************
-
- InstallBmap: lea BmapPtrs,a0 ; Bmap ptrs in copperlist
- move.l #Bmap,d0 ; Address of bitplane 1
- move.w d0,6(a0) ; write lower half
- swap d0 ; switch words
- move.w d0,2(a0) ; write upper half
- move.l #Bmap+8000,d0 ; Address of bitplane 2
- move.w d0,14(a0) ; write lower half
- swap d0 ; switch words
- move.w d0,10(a0) ; write upper half
- move.l #Bmap+16000,d0 ; Address of bitplane 3
- move.w d0,22(a0) ; write lower half
- swap d0 ; switch words
- move.w d0,18(a0) ; write upper half
- move.l #Bmap+24000,d0 ; Address of bitplane 4
- move.w d0,30(a0) ; write lower half
- swap d0 ; switch words
- move.w d0,26(a0) ; write upper half
- rts ; Done
-
- ***********************************************************
-
- section DemoText,DATA
-
- GraphicsName: GRAFNAME ; name of gfx library
- EVEN
-
- ScrollText: dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' A '
- dc.b ' '
- dc.b ' LONG '
- dc.b ' '
- dc.b ' TIME '
- dc.b ' '
- dc.b ' AGO, '
- dc.b ' '
- dc.b ' IN '
- dc.b ' '
- dc.b ' A '
- dc.b ' '
- dc.b ' GALAXY '
- dc.b ' '
- dc.b ' FAR, '
- dc.b ' '
- dc.b ' FAR '
- dc.b ' '
- dc.b ' AWAY '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b 'IS WHERE THIS '
- dc.b 'DEMO BELONGS!! '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b 'WELL ANYWAY, '
- dc.b ' '
- dc.b 'THIS IS VISION '
- dc.b ' '
- dc.b 'OF EPSILON '
- dc.b ' '
- dc.b 'PRESENTING HIS '
- dc.b ' '
- dc.b 'NEW, EXCITING '
- dc.b ' '
- dc.b '"AWESOME" DEMO!'
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b 'AS YOU CAN '
- dc.b ' '
- dc.b 'PROBABLY TELL, '
- dc.b ' '
- dc.b "IT'S NOT CALLED"
- dc.b ' '
- dc.b 'THAT BECAUSE IT'
- dc.b ' '
- dc.b 'IS ADVANCED... '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b 'BUT BECAUSE THE'
- dc.b ' '
- dc.b 'GRAPHICS '
- dc.b ' '
- dc.b 'WERE RIPPED '
- dc.b ' '
- dc.b 'FROM THE GAME '
- dc.b ' '
- dc.b '"AWESOME." '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b 'PRETTY CHEAP, '
- dc.b 'HUH? '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b 'TEXT RESTARTS..'
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b ' '
- dc.b 0
- EVEN
-
- VScrollCount: dc.w 11
-
- ***********************************************************
-
- section DemoData,DATA_c
-
- NullSprite: dc.l 0,0,0,0
-
- incdir ''
- Bmap: incbin 'df1:awesome.raw'
- Font: incbin 'df1:mahoneyfont.raw'
-
- Copper: dc.w $0100,$4200,$0102,$0000,$0104,$0000,$0108,$0000,$010a,$0000
- dc.w $008e,$2d81,$0090,$f4c1,$0092,$0038,$0094,$00d0,$0180,$0000
- dc.w $0182,$0eff,$0184,$0cee,$0186,$09cc,$0188,$08bb,$018a,$069a
- dc.w $018c,$0689,$018e,$0578,$0190,$0567,$0192,$0456,$0194,$0445
- dc.w $0196,$0334,$0198,$0233,$019a,$0122,$019c,$0111,$019e,$0000
-
- dc.w $01a2,$0444,$01a4,$0fff,$01a6,$0888
- BmapPtrs:
- dc.w $00e0,$0000,$00e2,$0000,$00e4,$0000,$00e6,$0000,$00e8,$0000
- dc.w $00ea,$0000,$00ec,$0000,$00ee,$0000
- SpritePtrs:
- dc.w $0120,$0000,$0122,$0000,$0124,$0000,$0126,$0000,$0128,$0000
- dc.w $012a,$0000,$012c,$0000,$012e,$0000,$0130,$0000,$0132,$0000
- dc.w $0134,$0000,$0136,$0000,$0138,$0000,$013a,$0000,$013c,$0000
- dc.w $013e,$0000
-
- dc.w $2c0f,$fffe,$0182,$0000
- dc.w $2d0f,$fffe,$0182,$0011
- dc.w $2e0f,$fffe,$0182,$0122
- dc.w $2f0f,$fffe,$0182,$0233
- dc.w $300f,$fffe,$0182,$0344
- dc.w $310f,$fffe,$0182,$0455
- dc.w $320f,$fffe,$0182,$0566
- dc.w $330f,$fffe,$0182,$0677
- dc.w $340f,$fffe,$0182,$0788
- dc.w $350f,$fffe,$0182,$0899
- dc.w $360f,$fffe,$0182,$09aa
- dc.w $370f,$fffe,$0182,$0abb
- dc.w $380f,$fffe,$0182,$0bcc
- dc.w $390f,$fffe,$0182,$0cdd
- dc.w $3a0f,$fffe,$0182,$0dee
- dc.w $3b0f,$fffe,$0182,$0eff
- dc.w $d00f,$fffe,$0182,$0eff,$d08f,$fffe,$0182,$0eff
- dc.w $d10f,$fffe,$0182,$0eff,$d18f,$fffe,$0182,$0dee
- dc.w $d20f,$fffe,$0182,$0eff,$d28f,$fffe,$0182,$0cdd
- dc.w $d30f,$fffe,$0182,$0eff,$d38f,$fffe,$0182,$0bcc
- dc.w $d40f,$fffe,$0182,$0eff,$d48f,$fffe,$0182,$0abb
- dc.w $d50f,$fffe,$0182,$0eff,$d58f,$fffe,$0182,$09aa
- dc.w $d60f,$fffe,$0182,$0eff,$d68f,$fffe,$0182,$0899
- dc.w $d70f,$fffe,$0182,$0eff,$d78f,$fffe,$0182,$0788
- dc.w $d80f,$fffe,$0182,$0eff,$d88f,$fffe,$0182,$0677
- dc.w $d90f,$fffe,$0182,$0eff,$d98f,$fffe,$0182,$0566
- dc.w $da0f,$fffe,$0182,$0eff,$da8f,$fffe,$0182,$0455
- dc.w $db0f,$fffe,$0182,$0eff,$db8f,$fffe,$0182,$0344
- dc.w $dc0f,$fffe,$0182,$0eff,$dc8f,$fffe,$0182,$0233
- dc.w $dd0f,$fffe,$0182,$0eff,$dd8f,$fffe,$0182,$0122
- dc.w $de0f,$fffe,$0182,$0eff,$de8f,$fffe,$0182,$0011
- dc.w $df0f,$fffe,$0182,$0eff,$df8f,$fffe,$0182,$0000
- dc.w $e00f,$fffe,$0182,$0eff,$e08f,$fffe,$0182,$0000
- dc.w $e10f,$fffe,$0182,$0eff,$e18f,$fffe,$0182,$0000
- dc.w $e20f,$fffe,$0182,$0eff,$e28f,$fffe,$0182,$0000
- dc.w $e30f,$fffe,$0182,$0eff,$e38f,$fffe,$0182,$0000
- dc.w $e40f,$fffe,$0182,$0eff,$e48f,$fffe,$0182,$0000
- dc.w $e50f,$fffe,$0182,$0eff,$e58f,$fffe,$0182,$0000
- dc.w $e60f,$fffe,$0182,$0eff,$e68f,$fffe,$0182,$0000
- dc.w $e70f,$fffe,$0182,$0eff,$e78f,$fffe,$0182,$0000
- dc.w $e80f,$fffe,$0182,$0eff,$e88f,$fffe,$0182,$0000
- dc.w $ffff,$fffe
-
- Stars: dc.w $2c40,$2d00
- dc.w $0000,$0001 ; a star on line one
- dc.w $2e50,$2f00
- dc.w $0001,$0001 ; a star on line two
- dc.w $3080,$3100
- dc.w $0001,$0000
- dc.w $3284,$3300
- dc.w $0000,$0001
- dc.w $34a2,$3500
- dc.w $0001,$0001
- dc.w $36d3,$3700
- dc.w $0001,$0000
- dc.w $3898,$3900
- dc.w $0000,$0001
- dc.w $40ff,$4100
- dc.w $0001,$0001
- dc.w $4266,$4300
- dc.w $0001,$0000
- dc.w $4443,$4500
- dc.w $0000,$0001
- dc.w $46ef,$4700
- dc.w $0001,$0001
- dc.w $484b,$4900
- dc.w $0001,$0000
- dc.w $4aa8,$4b00
- dc.w $0000,$0001
- dc.w $4cd6,$4d00
- dc.w $0001,$0001
- dc.w $4ea5,$4f00
- dc.w $0001,$0000
- dc.w $503c,$5100
- dc.w $0000,$0001
- dc.w $5243,$5300
- dc.w $0001,$0001
- dc.w $5400,$5500
- dc.w $0001,$0000 ; 6
- dc.w $5684,$5700
- dc.w $0000,$0001
- dc.w $5894,$5900
- dc.w $0001,$0001
- dc.w $5a33,$5b00
- dc.w $0001,$0000 ; 7
- dc.w $5ca3,$5d00
- dc.w $0000,$0001
- dc.w $5e35,$5f00
- dc.w $0001,$0001
- dc.w $6006,$6100
- dc.w $0001,$0000 ; 8
- dc.w $6254,$6300
- dc.w $0000,$0001
- dc.w $6409,$6500
- dc.w $0001,$0001
- dc.w $66ab,$6700
- dc.w $0001,$0000 ; 9
- dc.w $6887,$6900
- dc.w $0000,$0001
- dc.w $6a97,$6b00
- dc.w $0001,$0001
- dc.w $6cfa,$6d00
- dc.w $0001,$0000 ; 10
- dc.w $6e03,$6f00
- dc.w $0000,$0001
- dc.w $7023,$7100
- dc.w $0001,$0001
- dc.w $7257,$7300
- dc.w $0001,$0000 ; 11
- dc.w $74dc,$7500
- dc.w $0000,$0001
- dc.w $76a7,$7700
- dc.w $0001,$0001
- dc.w $789a,$7900
- dc.w $0001,$0000 ; 12
- dc.w $7a03,$7b00
- dc.w $0000,$0001
- dc.w $7c06,$7d00
- dc.w $0001,$0001
- dc.w $7eab,$7f00
- dc.w $0001,$0000 ; 13
- dc.w $80dc,$8100
- dc.w $0000,$0001
- dc.w $82a7,$8300
- dc.w $0001,$0001
- dc.w $84df,$8500
- dc.w $0001,$0000 ; 14
- dc.w $8623,$8700
- dc.w $0000,$0001
- dc.w $8898,$8900
- dc.w $0001,$0001
- dc.w $8aab,$8b00
- dc.w $0001,$0000 ; 15
- dc.w $8c87,$8d00
- dc.w $0000,$0001
- dc.w $8edc,$8f00
- dc.w $0001,$0001
- dc.w $9013,$9100
- dc.w $0001,$0000 ; 16
- dc.w $9200,$9300
- dc.w $0000,$0001
- dc.w $9434,$9500
- dc.w $0001,$0001
- dc.w $9687,$9700
- dc.w $0001,$0000 ; 17
- dc.w $9854,$9900
- dc.w $0000,$0001
- dc.w $9ac0,$9b00
- dc.w $0001,$0001
- dc.w $9c12,$9d00
- dc.w $0001,$0000 ; 18
- dc.w $9e8f,$9f00
- dc.w $0000,$0001
- dc.w $a03c,$a100
- dc.w $0001,$0001
- dc.w $a254,$a300
- dc.w $0001,$0000 ; 19
- dc.w $a434,$a500
- dc.w $0000,$0001
- dc.w $a6bd,$a700
- dc.w $0001,$0001
- dc.w $a8ff,$a900
- dc.w $0001,$0000 ; 20
- dc.w $aaaf,$ab00
- dc.w $0000,$0001
- dc.w $ac3c,$ad00
- dc.w $0001,$0001
- dc.w $ae24,$af00
- dc.w $0001,$0000 ; 21
- dc.w $b034,$b100
- dc.w $0000,$0001
- dc.w $b27c,$b300
- dc.w $0001,$0001
- dc.w $b4d6,$b500
- dc.w $0001,$0000 ; 22
- dc.w $b678,$b700
- dc.w $0000,$0001
- dc.w $b803,$b900
- dc.w $0001,$0001
- dc.w $bade,$bb00
- dc.w $0001,$0000 ; 23
- dc.w $bc22,$bd00
- dc.w $0000,$0001
- dc.w $be34,$bf00
- dc.w $0001,$0001
- dc.w $c02a,$c100
- dc.w $0001,$0000 ; 24
- dc.w $c24a,$c300
- dc.w $0000,$0001
- dc.w $c466,$c500
- dc.w $0001,$0001
- dc.w $c633,$c700
- dc.w $0001,$0000 ; 25
- dc.w $c888,$c900
- dc.w $0000,$0001
- dc.w $ca21,$cb00
- dc.w $0001,$0001
- dc.w $cc78,$cd00
- dc.w $0001,$0000 ; 26
- dc.w $ce12,$cf00
- dc.w $0000,$0001
- dc.w $d045,$d100
- dc.w $0001,$0001
- dc.w $d2da,$d300
- dc.w $0001,$0000 ; 27
- dc.w $d447,$d500
- dc.w $0000,$0001
- dc.w $d698,$d700
- dc.w $0001,$0001
- dc.w $d840,$d900
- dc.w $0001,$0000 ; 28
- dc.w $dad0,$db00
- dc.w $0000,$0001
- dc.w $dcc0,$dd00
- dc.w $0001,$0001
- dc.w $de30,$df00
- dc.w $0001,$0000 ; 29
- dc.w $e023,$e100
- dc.w $0000,$0001
- dc.w $e220,$e300
- dc.w $0001,$0001
- dc.w $e45d,$e500
- dc.w $0001,$0000 ; 30
- dc.w $e668,$e700
- dc.w $0000,$0001
- dc.w $e842,$e900
- dc.w $0001,$0001
- dc.w $eaac,$eb00
- dc.w $0001,$0000 ; 31
- dc.w $ecec,$ed00
- dc.w $0000,$0001
- dc.w $eefa,$ef00
- dc.w $0001,$0001
- dc.w $f078,$f100
- dc.w $0001,$0000 ; 32
- dc.w $0000,$0000
-
- ***********************************************************
-
- section DemoBSS,BSS
-
- Level3Save: ds.l 1
- gfx_base ds.l 1 ; pointer to graphics base
- OldView ds.l 1 ; old Work Bench view addr.
- VectorBase: ds.l 1 ; pointer to the Vector Base
-
- OldDMACon: ds.w 1 ; old dmacon bits
- OldINTEna: ds.w 1 ; old intena bits
-
- ScrollPos: ds.l 1
-