; Trax-Intro No. 1 ; Written by Nekron from PROTON Ltd. INCDIR "df1:" ************************* Library-Funktionen ********************* Execbase= 4 OldopenLib= -408 Öffne vorhandene Library Open= -30 Öffne File Close= -36 Schließe File Read= -42 Lese File ************************* Definitionen *************************** RLINE= 1 Warte auf RZeile RVALUE= 34 Zeichenabstand SCREENSIZE= 60*60 Screenlänge SCROLLSIZE= 52*65 ScrollBuffer LOGOSIZE= 60*200 LogoScreenlänge LOGOMODULO= 20 Trax-Logo Modulo SCROLLMOD= 16 Scroller Modulo PLANES= 2 Anzahl der BitPlanes für Scroller.. LOGOPLANES= 3 Anzahl der LogoPlanes SCROLLPOS= 60*23 Scroller Position MODULO1= 52 ScrollBuffer Modulo COLLENTH= 438/2 Farbtabellenlänge COLLENTH2= 112/2 " SPCOL0= $555 SPCOL2= $999 SpriteColors 0,2 & 4 SPCOL4= $ccc SCRMOD= 16 Screen Modulo WIDTH= 120 Screen Breite S1= "a" S2= "b" S3= "c" S4= "d" Scrollgeschwindigkeiten S5= "e" S6= "f" STOP= "\" Scrollstop TXLOAD= 1 1= Trax.TX wird nachgeladen! MUSIC= 1 1= Music on DEBUG= 0 1= Debugger on! ************************* Hauptprogramm ************************** IFNE DEBUG OPT d+ ENDC Begin IFEQ DEBUG movem.l a0-a6/d0-d7,-(SP) move.l #Trapy,$0080.w trap #0 movem.l (SP)+,a0-a6/d0-d7 rts dc.b "(C) Copyright 1990,91 by Nekron of PROTON Ltd." dc.b " All Rights Reserved. " EVEN ENDC Trapy move.l (Execbase).w,a6 lea GfxName,a1 jsr OldopenLib(a6) move.l d0,Gfxbase IFNE TXLOAD lea DosName,a1 jsr OldopenLib(a6) move.l d0,a6 bsr LoadTx ENDC lea $dff000,a6 bsr Install rwait IFEQ DEBUG cmpi.b #RLINE,6(a6) bne rwait ENDC bsr StarMove bsr LogoMove bsr Scroller bsr ScrollCol IFNE MUSIC bsr mt_music ENDC btst #6,$bfe001 bne rwait IFEQ DEBUG bsr Reset ENDC IFEQ DEBUG rte ENDC IFNE DEBUG rts ENDC ************************* Subprogramme *************************** IFNE TXLOAD LoadTx move.l #FileName,d1 move.w #1005,d2 jsr Open(a6) tst.w d0 beq loaderror move.l d0,d4 move.l #ScrollTx,d2 loadloop move.l d4,d1 move.w #$0100,d3 jsr Read(a6) add.w d0,d2 tst.w d0 bmi loaderror bne loadloop move.l d4,d1 jsr Close(a6) rts loaderror lea ErrorMsg,a0 lea ScrollTx,a1 move.w #ErrorMsgEnd-ErrorMsg,d0 errorloop move.b (a0)+,(a1)+ dbf d0,errorloop rts ENDC Install move.w $1e(a6),d0 move.w $1c(a6),d1 move.w 2(a6),d2 bset #15,d0 bset #15,d1 bset #15,d2 move.w d0,IntREQ move.w d1,IntENA move.w d2,DMACON IFEQ DEBUG move.w #$7fff,d0 move.w d0,$9c(a6) move.w d0,$9a(a6) move.w d0,$96(a6) move.w #%1000001111100000,$96(a6) ENDC lea GfxScreen,a0 move.w #(SCREENSIZE*PLANES)/2,d0 clrloop clr.w (a0)+ dbf d0,clrloop lea ScrollBuffer,a0 move.w #(MODULO1*64)/2,d0 clrloop2 clr.w (a0)+ dbf d0,clrloop2 lea Screen1,a0 move.w #(LOGOSIZE*LOGOPLANES)/2,d0 clrloop3 clr.w (a0)+ dbf d0,clrloop3 lea Screen2,a0 move.w #(LOGOSIZE*LOGOPLANES)/2,d0 clrloop4 clr.w (a0)+ dbf d0,clrloop4 lea Planes+2,a0 lea GfxScreen,a1 moveq #PLANES-1,d0 planeloop move.l a1,d1 swap d1 move.w d1,(a0) adda.w #4,a0 move.w a1,(a0) adda.w #4,a0 adda.l #SCREENSIZE,a1 dbf d0,planeloop ************************************** * Install (PAL)Stars v1.2 (C) Nekron * ************************************** moveq #18,d0 Wieviele Sterne ? moveq #30,d1 Start im Screen ! moveq #70,d3 Welche RZeile ?! lea Stars1,a0 lea Stars2,a1 lea Stars3,a2 lea Star,a3 rwait2 move.b 6(a6),d4 cmp.b d4,d3 bne rwait2 move.b 6(a6),d3 starloop move.b $6(a6),d2 add.b $7(a6),d2 move.b d1,(a0) move.b d2,1(a0) addq.w #1,d1 Stars Plane1 move.b d1,2(a0) cmpi.w #$ff,d1 blo starnex1 bset #1,3(a0) bset #2,3(a0) starnex1 move.l (a3),4(a0) addq.w #4,d1 add.b $6(a6),d2 rol.b #3,d2 move.b d1,(a1) Stars Plane2 move.b d2,1(a1) addq.w #1,d1 move.b d1,2(a1) cmpi.w #$ff,d1 blo starnex2 bset #1,3(a1) bset #2,3(a1) starnex2 move.l (a3),4(a1) addq.w #4,d1 add.b $6(a6),d2 move.b d1,(a2) Stars Plane3 move.b d2,1(a2) addq.w #1,d1 move.b d1,2(a2) cmpi.w #$ff,d1 blo starnex3 bset #1,3(a2) bset #2,3(a2) starnex3 move.l (a3),4(a2) addq.w #4,d1 adda.l #8,a0 adda.l #8,a1 adda.l #8,a2 dbf d0,starloop clr.l (a0) clr.l (a1) clr.l (a2) moveq #7,d0 lea StarAdr,a0 starloop2 move.l (a0)+,a1 move.l (a0)+,a2 move.w a1,6(a2) move.l a1,d1 swap d1 move.w d1,2(a2) dbf d0,starloop2 IFNE MUSIC bsr mt_init ENDC IFEQ DEBUG move.l #CopperList,$80(a6) clr.w $88(a6) ENDC rts Reset IFNE MUSIC bsr mt_end ENDC move.w IntREQ,$9c(a6) move.w IntENA,$9a(a6) move.w DMACON,$96(a6) move.l Gfxbase,a5 move.l 38(a5),$80(a6) clr.l $88(a6) rts ****************************** * Include the Replay Routine * ****************************** IFNE MUSIC INCLUDE "Source/NTReplay.s" ENDC ****************** * Scroll-Routine * ****************** Scroller btst #1,Flag bne ScrollWait subi.b #1,Row bne scrollend bsr SetChar move.b OldRow,Row btst #1,Flag bne ScrollWait Damit bei meheren Waits nichts ruckelt! scrollend IFEQ DEBUG bsr Scroll bsr OnScreen ENDC rts ScrollWait subi.w #1,Wait bne waitend move.b #1,Row bclr #1,Flag waitend rts SetChar move.l ScrollAdr,a0 move.b (a0)+,d2 cmpi.b #"*",d2 bne print2 lea ScrollTx,a0 move.l a0,ScrollAdr bra SetChar print2 move.l a0,ScrollAdr lea SpeedTab,a0 moveq #6-1,d0 speedloop move.b (a0),d1 cmp.b d1,d2 beq speed2 adda.w #3,a0 dbf d0,speedloop bra print3 speed2 move.b 1(a0),OldRow move.b 2(a0),OldASH bra printend print3 cmpi.b #STOP,d2 bne print4 bset #1,Flag move.w #$0050,Wait bra printend print4 bsr FindChar lea ScrollBuffer+48,a1 move.w #MODULO1-4,d0 IFEQ DEBUG bsr PrintChar ENDC printend rts Scroll clr.l d0 move.b OldASH,d0 asl.w #8,d0 asl.w #4,d0 ori.w #%0000100111110000,d0 move.w d0,$40(a6) sf $42(a6) st $44(a6) sf $46(a6) move.l #ScrollBuffer+2,$50(a6) move.l #ScrollBuffer,$54(a6) sf $64(a6) sf $66(a6) move.w #%0001000000011010,$58(a6) blwait2 btst #14,2(a6) bne blwait rts OnScreen lea ScrollBuffer+2,a0 lea GfxScreen+SCROLLPOS,a1 moveq #1,d0 onloop move.w #%0000100111110000,$40(a6) sf $42(a6) st $44(a6) st $46(a6) move.l a0,$50(a6) move.l a1,$54(a6) move.w #MODULO1+8,$64(a6) move.w #SCROLLMOD,$66(a6) move.w #%0000100000010110,$58(a6) blwait3 btst #14,2(a6) bne blwait3 adda.w #MODULO1,a0 adda.w #SCREENSIZE,a1 dbf d0,onloop rts **************** * Color Effect * **************** ScrollCol move.l ColAdr1,a0 move.l ColAdr2,a1 lea Rasters+6,a2 moveq #32-1,d0 setcol move.w (a0)+,(a2) adda.w #4,a2 move.w (a1)+,(a2) adda.w #8,a2 dbf d0,setcol move.w Colors,d0 move.w #COLLENTH-1,d1 lea Colors+2,a0 lea Colors,a1 mvcol move.w (a0)+,(a1)+ dbf d1,mvcol move.w d0,ColEnd-2 lea ColEnd2-2,a0 lea ColEnd2,a1 move.w (a0),d0 move.w #COLLENTH2-1,d1 mvcol2 move.w -(a0),-(a1) dbf d1,mvcol2 move.w d0,Colors2 rts ****************** * Move the Stars * ****************** StarMove move.w #18,d0 lea Stars1,a0 lea Stars2,a1 lea Stars3,a2 starloop3 ;bchg #0,3(a0) ;bne star2 addi.b #1,1(a0) star2 addi.b #2,1(a1) addi.b #3,1(a2) adda.l #8,a0 adda.l #8,a1 adda.l #8,a2 dbf d0,starloop3 rts *********************************** * FindChar d2= Char, a0= CharAdr * *********************************** FindChar movem.l d0-d2,-(SP) lea CharTab,a0 clr.w d0 findloop move.b (a0)+,d1 cmp.b d2,d1 beq findend2 addq.b #1,d0 cmpi.b #50,d0 bne findloop move.w #49,d0 findend2 move.w d0,d1 divu #10,d0 swap d0 move.w d0,d1 swap d0 lea CharSet,a0 asl.w #2,d1 mulu #(40*2)*32,d0 add.w d1,d0 lea (a0,d0.w),a0 movem.l (SP)+,d0-d2 rts ************************************************************* * PrintCharacter a0= CharAdr, a1= DestAdr, d0= DestModulo * ************************************************************* PrintChar move.w #%0000100111110000,$40(a6) sf $42(a6) st $44(a6) st $46(a6) move.l a0,$50(a6) move.l a1,$54(a6) move.w #40-4,$64(a6) move.w d0,$66(a6) move.w #%0001000000000010,$58(a6) blwait btst #14,2(a6) bne blwait rts ************ * LogoMove * ************ LogoMove moveq #LOGOPLANES-1,d1 lea ScrPointer,a0 bchg #0,Flag bne logo2 lea Screen1,a1 lea Screen2,a2 bra logo3 logo2 lea Screen2,a1 lea Screen1,a2 logo3 move.w a1,6(a0) move.l a1,d0 swap d0 move.w d0,2(a0) adda.w #LOGOSIZE,a1 adda.w #8,a0 dbf d1,logo3 move.l a2,a0 clr.l d0 move.b OldPos,d0 mulu #WIDTH,d0 moveq #LOGOPLANES-1,d1 lea (a0,d0.l),a1 clrlogo move.w #%0000100100000000,$40(a6) move.l a1,$54(a6) move.w #16,$66(a6) move.w #%0001010010010110,$58(a6) blwait5 btst #14,2(a6) bne blwait5 adda.l #LOGOSIZE,a1 dbf d1,clrlogo clr.l d0 X-Pos. clr.l d1 Y-Pos. clr.l d2 ROUND (X-Pos) move.l SinusX,a1 move.l SinusY,a2 move.b (a1),d0 move.b (a2),d1 adda.w #6,a1 adda.w #8,a2 move.l a1,SinusX move.l a2,SinusY cmpa.l #SineEnd-1,a1 ble logo4 move.l #SineTab,SinusX logo4 cmpa.l #SineEnd-1,a2 ble logo5 move.l #SineTab,SinusY logo5 move.b OldPos+1,OldPos move.b d1,OldPos+1 lea ASHTab,a1 mulu #WIDTH,d1 Y-Pos berechnet asl.b #2,d0 X-Scroll vergrößern suba.l #10,a0 Screen anpassen! move.b d0,d2 swap d2 asr.l #4,d2 / 16 tst.w d2 Rest beim Teilen? beq logo5a Nein,dann weiter add.l #$00010000,d2 Ja,dann aufrunden logo5a swap d2 asl.w #1,d2 * 2 add.w d2,d1 X-Pos. + Y-Pos. asl.w #3,d2 Bits berechnen (*8) sub.w d0,d2 und Differenz in d2 move.b (a1,d2.w),d0 ASH Wert aus Tabelle logo6 asl.l #8,d0 ASH Wert an richtige asl.l #4,d0 Position bringen! ori.w #%0000100111110000,d0 Übrige Bits setzen lea (a0,d1.l),a0 LogoPos. in a0 lea TraxLogo,a1 moveq #LOGOPLANES-1,d3 setlogo IFEQ DEBUG move.w d0,$40(a6) sf $42(a6) st $44(a6) st $46(a6) move.l a1,$50(a6) move.l a0,$54(a6) move.w #40*2,$64(a6) move.w #LOGOMODULO,$66(a6) move.w #%0001010010010100,$58(a6) blwait4 btst #14,2(a6) bne blwait4 adda.w #LOGOSIZE,a0 adda.w #40,a1 dbf d3,setlogo ENDC rts ************************* GfxScreens und Text ******************** GfxName dc.b "graphics.library",0 IFNE TXLOAD DosName dc.b "dos.library",0 FileName dc.b "Trax.TX",0 ErrorMsg dc.b " SORRYb,cNO SCROLLER YET!,BECAUSE" dc.b " TRAX.TX IS MISSING OR HAS A LOAD ERROR!!" dc.b " WRITTEN AND [C] 1990,91 BY NEKRON! cba *" ErrorMsgEnd ENDC EVEN Gfxbase ds.l 1 IntREQ ds.l 1 IntENA ds.l 1 DMACON ds.l 1 SinusX dc.l SineTab SinusY dc.l SineTab+100 ScrollAdr dc.l ScrollTx ColAdr1 dc.l Colors2 ColAdr2 dc.l Colors Wait ds.w 1 Flag ds.b 1 #0= Screenwechsel,#1= Scrollwait Row dc.b 10 OldPos ds.b 2 OldRow dc.b 35 OldASH dc.b 15 EVEN CharTab dc.b "ABCDEFGHI JKLMNOPQR STUVWXYZ? " dc.b "1234567890,._:!-[]+ " EVEN ASHTab dc.b 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 EVEN SpeedTab dc.b S1,35,15,S2,18,14,S3,12,13 dc.b S4,9,12,S5,7,11,S6,6,10 EVEN SECTION CopperListe,DATA_C CopperList dc.w $008e,$2c11,$0090,$27f1 dc.w $0092,$0030,$0094,$00d8 dc.w $0108,SCRMOD,$010a,SCRMOD dc.w $0102,$0000,$0104,$0000 dc.w $0100,$3200 dc.w $01a4,SPCOL0,$01ac,SPCOL2,$01b4,SPCOL4 Sprite0 dc.w $0120,$0000,$0122,$0000 Sprite1 dc.w $0124,$0000,$0126,$0000 Sprite2 dc.w $0128,$0000,$012a,$0000 Sprite3 dc.w $012c,$0000,$012e,$0000 Sprite4 dc.w $0130,$0000,$0132,$0000 Sprite5 dc.w $0134,$0000,$0136,$0000 Sprite6 dc.w $0138,$0000,$013a,$0000 Sprite7 dc.w $013c,$0000,$013e,$0000 TraxCol dc.w $0180,$0000,$0182,$0888 dc.w $0184,$0444,$0186,$0ccc dc.w $0188,$0222,$018a,$0aaa dc.w $018c,$0666,$018e,$0eee ScrPointer dc.w $00e0,$0000,$00e2,$0000 dc.w $00e4,$0000,$00e6,$0000 dc.w $00e8,$0000,$00ea,$0000 dc.w $ed0f,$fffe,$0100,$2200 Planes dc.w $00e0,$0000,$00e2,$0000 dc.w $00e4,$0000,$00e6,$0000 dc.w $ffe1,$fffe Rasters A SET $050f REPT 32-1 dc.w A,$fffe,$0184,$0fff,$0186,$0fff A SET A+$0100 ENDR dc.w A,$fffe,$0184,$0000,$0186,$0000 dc.w $0,$0b EVEN StarAdr dc.l Stars1,Sprite0,Stars2,Sprite2,Stars3,Sprite4 dc.l Dummy,Sprite1,Dummy,Sprite3,Dummy,Sprite5 dc.l Dummy,Sprite6,Dummy,Sprite7 Star dc.w 0,%0000000100000000 Dummy dc.w 0,0,0,0 Stars1 ds.l 60 Stars2 ds.l 60 Stars3 ds.l 60 EVEN SECTION GfxScreens,BSS_C ScrollBuffer ds.b SCROLLSIZE+1 EVEN Screen1 ds.b LOGOSIZE*4+1 EVEN Screen2 ds.b LOGOSIZE*4+1 EVEN GfxScreen ds.b SCREENSIZE*PLANES+1 EVEN ************************* Externe Dateien ************************ SECTION Colors,DATA EVEN Colors INCLUDE "Source/Colors.s" ColEnd EVEN Colors2 INCLUDE "Source/Colors2.s" ColEnd2 EVEN SineTab INCBIN "Code/SineTab.BIN" SineEnd EVEN IFEQ TXLOAD ScrollTx INCBIN "Trax.TX" ENDC IFNE TXLOAD ScrollTx ds.b 1024*2 ENDC EVEN SECTION Gfxs,DATA_C EVEN IFEQ DEBUG TraxLogo INCBIN "Gfx/Trax.BLIT" EVEN CharSet INCBIN "Gfx/Trax.CHAR" EVEN mt_data INCBIN "Sound/mod.T.K.G InGame3" EVEN ENDC END Trax-Intro.Written by Nekron from PROTON Ltd. Latest update: 05.01.91 at 18:31:19